Archived
Implemented drag-and-drop reordering ability in quote recycler view; refactored project structure
This commit is contained in:
@@ -1,14 +0,0 @@
|
||||
package com.denizd.textbasic
|
||||
|
||||
import android.app.backup.*
|
||||
|
||||
class DriveAgent : BackupAgentHelper() {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
|
||||
SharedPreferencesBackupHelper(this, QuoteStorage.PREF_NAME).also {
|
||||
addHelper(QuoteStorage.PREF_BACKUP_KEY, it)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
package com.denizd.textbasic
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.appwidget.AppWidgetProvider
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.util.TypedValue
|
||||
import android.view.Gravity
|
||||
import android.widget.RemoteViews
|
||||
|
||||
class TextWidget : AppWidgetProvider() {
|
||||
|
||||
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
||||
|
||||
val remoteViews = configureViews(context, appWidgetIds)
|
||||
// Perform this loop procedure for each App Widget that belongs to this provider
|
||||
appWidgetIds.forEach { appWidgetId ->
|
||||
// Tell the AppWidgetManager to perform an update on the current app widget
|
||||
appWidgetManager.updateAppWidget(appWidgetId, remoteViews)
|
||||
}
|
||||
}
|
||||
|
||||
private fun configureViews(context: Context, appWidgetIds: IntArray): RemoteViews =
|
||||
RemoteViews(context.packageName, R.layout.widget_text).apply {
|
||||
|
||||
val storage = QuoteStorage(context)
|
||||
|
||||
val quote = if (storage.isOrderRandom()) {
|
||||
storage.getRandomQuote()
|
||||
} else {
|
||||
storage.getNextQuote()
|
||||
}
|
||||
|
||||
setTextViewText(R.id.widget_text, quote.ifBlank { context.getString(R.string.info_add_text) })
|
||||
setTextViewTextSize(R.id.widget_text, TypedValue.COMPLEX_UNIT_SP, storage.getTextSize().toFloat())
|
||||
|
||||
val colours = storage.getColours(context = context)
|
||||
|
||||
setTextColor(R.id.widget_text, colours.first)
|
||||
setInt(R.id.background, "setBackgroundColor", colours.second)
|
||||
|
||||
val gravity = when (storage.getWidgetGravity()) {
|
||||
0 -> Gravity.START or Gravity.TOP
|
||||
1 -> Gravity.CENTER_HORIZONTAL or Gravity.TOP
|
||||
2 -> Gravity.END or Gravity.TOP
|
||||
3 -> Gravity.START or Gravity.CENTER_VERTICAL
|
||||
4 -> Gravity.CENTER
|
||||
5 -> Gravity.END or Gravity.CENTER_VERTICAL
|
||||
6 -> Gravity.START or Gravity.BOTTOM
|
||||
7 -> Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
|
||||
8 -> Gravity.END or Gravity.BOTTOM
|
||||
else -> Gravity.CENTER
|
||||
}
|
||||
|
||||
setInt(R.id.root_layout, "setGravity", gravity)
|
||||
|
||||
setOnClickPendingIntent(
|
||||
R.id.root_layout,
|
||||
Intent(context, TextWidget::class.java).let { intent ->
|
||||
intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
|
||||
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds)
|
||||
PendingIntent.getBroadcast(
|
||||
context, 0, intent, PendingIntent.FLAG_IMMUTABLE
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
package com.denizd.textbasic
|
||||
package com.denizd.textbasic.activity
|
||||
|
||||
import android.app.backup.BackupManager
|
||||
import android.appwidget.AppWidgetManager
|
||||
@@ -7,6 +7,7 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import com.denizd.textbasic.R
|
||||
import com.denizd.textbasic.databinding.ActivityMainBinding
|
||||
import com.denizd.textbasic.fragment.GuideFragment
|
||||
import com.denizd.textbasic.fragment.QuoteFragment
|
||||
+28
-10
@@ -1,4 +1,4 @@
|
||||
package com.denizd.textbasic
|
||||
package com.denizd.textbasic.adapter
|
||||
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
@@ -8,8 +8,13 @@ import android.view.ViewGroup
|
||||
import android.widget.ImageButton
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.denizd.textbasic.R
|
||||
import java.util.Collections
|
||||
|
||||
class QuoteAdapter(quotes: List<String>) : RecyclerView.Adapter<QuoteAdapter.QuoteViewHolder>() {
|
||||
class QuoteAdapter(
|
||||
quotes: List<String>,
|
||||
) : RecyclerView.Adapter<QuoteAdapter.QuoteViewHolder>(),
|
||||
RecyclerRowMoveCallback.RecyclerViewTouchHelperContract {
|
||||
|
||||
private var mutableQuotes: MutableList<String> = quotes.toMutableList()
|
||||
|
||||
@@ -19,9 +24,9 @@ class QuoteAdapter(quotes: List<String>) : RecyclerView.Adapter<QuoteAdapter.Quo
|
||||
val delete: ImageButton = view.findViewById(R.id.delete_button)
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
return /*if (position == itemCount - 1) 1 else*/ 0
|
||||
}
|
||||
// override fun getItemViewType(position: Int): Int {
|
||||
// return /*if (position == itemCount - 1) 1 else*/ 0
|
||||
// }
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QuoteViewHolder {
|
||||
val v = LayoutInflater.from(parent.context).inflate(R.layout.quote_entry, parent, false)
|
||||
@@ -49,11 +54,6 @@ class QuoteAdapter(quotes: List<String>) : RecyclerView.Adapter<QuoteAdapter.Quo
|
||||
|
||||
override fun getItemCount(): Int = mutableQuotes.size
|
||||
|
||||
fun setQuotes(quotes: List<String>) {
|
||||
this.mutableQuotes = quotes.toMutableList()
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
fun addNewQuote() {
|
||||
mutableQuotes.add("")
|
||||
notifyItemInserted(mutableQuotes.size + 1)
|
||||
@@ -62,4 +62,22 @@ class QuoteAdapter(quotes: List<String>) : RecyclerView.Adapter<QuoteAdapter.Quo
|
||||
fun getAllQuotes(): Array<String> {
|
||||
return mutableQuotes.filter { s -> s.isNotBlank() }.toTypedArray()
|
||||
}
|
||||
|
||||
override fun onRowMoved(from: Int, to: Int) {
|
||||
if (from < to) for (i in from until to) {
|
||||
Collections.swap(mutableQuotes, i, i + 1)
|
||||
} else for (i in to downTo from - 1) {
|
||||
Collections.swap(mutableQuotes, i, i - 1)
|
||||
}
|
||||
|
||||
notifyItemMoved(from, to)
|
||||
}
|
||||
|
||||
override fun onRowSelected(viewHolder: QuoteViewHolder) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
override fun onRowClear(viewHolder: QuoteViewHolder) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.denizd.textbasic.adapter
|
||||
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
|
||||
class RecyclerRowMoveCallback(
|
||||
private val touchHelperContract: RecyclerViewTouchHelperContract,
|
||||
) : ItemTouchHelper.Callback() {
|
||||
|
||||
override fun isLongPressDragEnabled(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun isItemViewSwipeEnabled(): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun getMovementFlags(
|
||||
recyclerView: RecyclerView,
|
||||
viewHolder: RecyclerView.ViewHolder,
|
||||
): Int = makeMovementFlags(ItemTouchHelper.UP or ItemTouchHelper.DOWN, 0)
|
||||
|
||||
override fun onMove(
|
||||
recyclerView: RecyclerView,
|
||||
viewHolder: RecyclerView.ViewHolder,
|
||||
target: RecyclerView.ViewHolder
|
||||
): Boolean {
|
||||
touchHelperContract.onRowMoved(viewHolder.adapterPosition, target.adapterPosition)
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onSelectedChanged(
|
||||
viewHolder: RecyclerView.ViewHolder?,
|
||||
actionState: Int,
|
||||
) {
|
||||
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
|
||||
touchHelperContract.onRowSelected(viewHolder as QuoteAdapter.QuoteViewHolder)
|
||||
}
|
||||
super.onSelectedChanged(viewHolder, actionState)
|
||||
}
|
||||
|
||||
override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
|
||||
super.clearView(recyclerView, viewHolder)
|
||||
touchHelperContract.onRowClear(viewHolder as QuoteAdapter.QuoteViewHolder)
|
||||
}
|
||||
|
||||
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {}
|
||||
|
||||
interface RecyclerViewTouchHelperContract {
|
||||
fun onRowMoved(from: Int, to: Int)
|
||||
fun onRowSelected(viewHolder: QuoteAdapter.QuoteViewHolder)
|
||||
fun onRowClear(viewHolder: QuoteAdapter.QuoteViewHolder)
|
||||
}
|
||||
}
|
||||
+15
-3
@@ -1,8 +1,10 @@
|
||||
package com.denizd.textbasic
|
||||
package com.denizd.textbasic.db
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.Typeface
|
||||
import com.denizd.textbasic.util.ColorTransparentUtils
|
||||
import com.denizd.textbasic.R
|
||||
|
||||
class QuoteStorage(context: Context) {
|
||||
|
||||
@@ -82,8 +84,18 @@ class QuoteStorage(context: Context) {
|
||||
}
|
||||
|
||||
return Pair(
|
||||
Color.parseColor(ColorTransparentUtils.transparentColor(context.getColor(colours.first), textTransparency * 5)),//Color.parseColor(ColorTransparentUtils.transparentColor(colours.first, 10)),
|
||||
Color.parseColor(ColorTransparentUtils.transparentColor(context.getColor(colours.second), bgTransparency * 5))
|
||||
Color.parseColor(
|
||||
ColorTransparentUtils.transparentColor(
|
||||
context.getColor(colours.first),
|
||||
textTransparency * 5
|
||||
)
|
||||
),//Color.parseColor(ColorTransparentUtils.transparentColor(colours.first, 10)),
|
||||
Color.parseColor(
|
||||
ColorTransparentUtils.transparentColor(
|
||||
context.getColor(colours.second),
|
||||
bgTransparency * 5
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -3,11 +3,13 @@ package com.denizd.textbasic.fragment
|
||||
import android.animation.LayoutTransition
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.denizd.textbasic.QuoteAdapter
|
||||
import com.denizd.textbasic.QuoteStorage
|
||||
import com.denizd.textbasic.adapter.QuoteAdapter
|
||||
import com.denizd.textbasic.db.QuoteStorage
|
||||
import com.denizd.textbasic.util.viewBinding
|
||||
import com.denizd.textbasic.R
|
||||
import com.denizd.textbasic.adapter.RecyclerRowMoveCallback
|
||||
import com.denizd.textbasic.databinding.FragmentQuoteBinding
|
||||
import com.google.android.material.transition.MaterialSharedAxis
|
||||
|
||||
@@ -38,6 +40,7 @@ class QuoteFragment : BaseFragment(R.layout.fragment_quote) {
|
||||
|
||||
binding.quoteScroller.let { s ->
|
||||
s.layoutManager = LinearLayoutManager(context)
|
||||
ItemTouchHelper(RecyclerRowMoveCallback(quoteAdapter)).attachToRecyclerView(s)
|
||||
s.adapter = quoteAdapter
|
||||
}
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.*
|
||||
import androidx.annotation.ColorInt
|
||||
import com.denizd.textbasic.ColorTransparentUtils
|
||||
import com.denizd.textbasic.QuoteStorage
|
||||
import com.denizd.textbasic.util.ColorTransparentUtils
|
||||
import com.denizd.textbasic.db.QuoteStorage
|
||||
import com.denizd.textbasic.R
|
||||
import com.denizd.textbasic.databinding.FragmentSettingsBinding
|
||||
import com.denizd.textbasic.util.viewBinding
|
||||
@@ -248,7 +248,8 @@ class SettingsFragment : BaseFragment(R.layout.fragment_settings) {
|
||||
}
|
||||
|
||||
binding.textPreviewBackgroundDark.setBackgroundColor(
|
||||
Color.parseColor(ColorTransparentUtils.transparentColor(
|
||||
Color.parseColor(
|
||||
ColorTransparentUtils.transparentColor(
|
||||
context.getColor(R.color.md_theme_dark_background),
|
||||
if (storage.isInvertedEnabled()) {
|
||||
abs((storage.getBackgroundTransparency() * 5))
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.denizd.textbasic
|
||||
package com.denizd.textbasic.model
|
||||
|
||||
/**
|
||||
* Stores a single quote. For potential use with a Room database.
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.denizd.textbasic
|
||||
package com.denizd.textbasic.util
|
||||
|
||||
import java.util.*
|
||||
import kotlin.math.roundToInt
|
||||
@@ -14,7 +14,7 @@ object ColorTransparentUtils {
|
||||
/**
|
||||
* This method convert number into hex number or we can say transparent code
|
||||
*
|
||||
* @param trans number of transparency you want
|
||||
* @param trans number of transparency you want 🏳️⚧️
|
||||
* @return hex decimal number or transparency code
|
||||
*/
|
||||
fun convert(trans: Int): String {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.denizd.textbasic
|
||||
package com.denizd.textbasic.view
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
@@ -4,7 +4,7 @@ import android.content.Context
|
||||
import android.graphics.*
|
||||
import android.text.StaticLayout
|
||||
import android.text.TextPaint
|
||||
import com.denizd.textbasic.QuoteStorage
|
||||
import com.denizd.textbasic.db.QuoteStorage
|
||||
import com.denizd.textbasic.R
|
||||
|
||||
class CanvasText {
|
||||
|
||||
Reference in New Issue
Block a user