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( class WidgetsAdapter(
val activity: SimpleActivity, val activity: SimpleActivity,
val widgetListItems: ArrayList<WidgetsListItem>, var widgetListItems: ArrayList<WidgetsListItem>,
val widgetsFragmentListener: WidgetsFragmentListener val widgetsFragmentListener: WidgetsFragmentListener
) : RecyclerView.Adapter<WidgetsAdapter.ViewHolder>() { ) : 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) { inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bindView(widgetListItem: WidgetsListItem, callback: (itemView: View, adapterPosition: Int) -> Unit) { fun bindView(widgetListItem: WidgetsListItem, callback: (itemView: View, adapterPosition: Int) -> Unit) {
itemView.apply { itemView.apply {

View File

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

View File

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

View File

@ -5,10 +5,16 @@ import android.graphics.drawable.Drawable
data class AppWidget( data class AppWidget(
var appPackageName: String, var appPackageName: String,
var appTitle: String, var appTitle: String,
val appIcon: Drawable, val appIcon: Drawable?,
val widgetTitle: String, val widgetTitle: String,
val widgetPreviewImage: Drawable?, val widgetPreviewImage: Drawable?,
var widthCells: Int, var widthCells: Int,
val heightCells: Int, val heightCells: Int,
val isShortcut: Boolean 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 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 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 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()
}
}