avoid refreshing Widgets fragment if nothing changed

This commit is contained in:
tibbi 2022-09-26 22:33:40 +02:00
parent 4e295deb3e
commit 0e9d77541d
7 changed files with 53 additions and 23 deletions

View File

@ -22,7 +22,7 @@ import kotlinx.android.synthetic.main.item_widget_preview.view.*
class WidgetsAdapter(
val activity: SimpleActivity,
val widgetListItems: ArrayList<WidgetsListItem>,
var widgetListItems: ArrayList<WidgetsListItem>,
val widgetsFragmentListener: WidgetsFragmentListener
) : RecyclerView.Adapter<WidgetsAdapter.ViewHolder>() {
@ -113,6 +113,15 @@ class WidgetsAdapter(
}
}
fun updateItems(newItems: ArrayList<WidgetsListItem>) {
val oldSum = widgetListItems.sumOf { it.getHashToCompare() }
val newSum = newItems.sumOf { it.getHashToCompare() }
if (oldSum != newSum) {
widgetListItems = newItems
notifyDataSetChanged()
}
}
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bindView(widgetListItem: WidgetsListItem, callback: (itemView: View, adapterPosition: Int) -> Unit) {
itemView.apply {

View File

@ -150,9 +150,14 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
private fun setupAdapter(widgetsListItems: ArrayList<WidgetsListItem>) {
activity?.runOnUiThread {
val currAdapter = widgets_list.adapter
if (currAdapter == null) {
WidgetsAdapter(activity!!, widgetsListItems, this).apply {
widgets_list.adapter = this
}
} else {
(currAdapter as WidgetsAdapter).updateItems(widgetsListItems)
}
}
}
@ -215,8 +220,7 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
}
override fun onWidgetLongPressed(appWidget: AppWidget) {
val gridItem =
HomeScreenGridItem(
val gridItem = HomeScreenGridItem(
null,
-1,
-1,
@ -229,6 +233,7 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
ITEM_TYPE_WIDGET,
appWidget.widgetPreviewImage
)
activity?.widgetLongPressedOnList(gridItem)
ignoreTouches = true
}

View File

@ -31,7 +31,7 @@ data class AppLauncher(
fun getHashToCompare() = getStringToCompare().hashCode()
fun getStringToCompare(): String {
private fun getStringToCompare(): String {
return copy(id = null, drawable = null).toString()
}

View File

@ -5,10 +5,16 @@ import android.graphics.drawable.Drawable
data class AppWidget(
var appPackageName: String,
var appTitle: String,
val appIcon: Drawable,
val appIcon: Drawable?,
val widgetTitle: String,
val widgetPreviewImage: Drawable?,
var widthCells: Int,
val heightCells: Int,
val isShortcut: Boolean
) : WidgetsListItem()
) : WidgetsListItem() {
override fun getHashToCompare() = getStringToCompare().hashCode()
private fun getStringToCompare(): String {
return copy(appIcon = null, widgetPreviewImage = null).toString()
}
}

View File

@ -1,3 +1,5 @@
package com.simplemobiletools.launcher.models
open class WidgetsListItem
abstract class WidgetsListItem {
abstract fun getHashToCompare(): Int
}

View File

@ -1,3 +1,5 @@
package com.simplemobiletools.launcher.models
data class WidgetsListItemsHolder(val widgets: ArrayList<AppWidget>) : WidgetsListItem()
open class WidgetsListItemsHolder(val widgets: ArrayList<AppWidget>) : WidgetsListItem() {
override fun getHashToCompare() = widgets.sumOf { it.getHashToCompare() }
}

View File

@ -2,4 +2,10 @@ package com.simplemobiletools.launcher.models
import android.graphics.drawable.Drawable
data class WidgetsListSection(var appTitle: String, var appIcon: Drawable) : WidgetsListItem()
data class WidgetsListSection(var appTitle: String, var appIcon: Drawable?) : WidgetsListItem() {
override fun getHashToCompare() = getStringToCompare().hashCode()
private fun getStringToCompare(): String {
return copy(appIcon = null).toString()
}
}