From 3a33cb4510ad333b5a1b21929a6259f0ad6dc59f Mon Sep 17 00:00:00 2001 From: davidoskky Date: Wed, 20 Nov 2024 01:28:47 +0100 Subject: [PATCH] Provide method to update items in the home Removed in the previous commit, the item adapter accepts a method to update the articles list in the home page. Renamed the method to make its objective more clear. Removed a debugging log. Reverted change to function name. --- .../readerforselfossv2/android/HomeActivity.kt | 18 +++++++++++++++--- .../android/adapters/ItemCardAdapter.kt | 3 ++- .../android/adapters/ItemListAdapter.kt | 3 ++- .../android/adapters/ItemsAdapter.kt | 16 ++++++---------- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt index 88f5a40..a60904e 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt @@ -13,7 +13,11 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.SearchView import androidx.core.view.doOnNextLayout import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.* +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.ItemTouchHelper +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.StaggeredGridLayoutManager import androidx.work.Constraints import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.PeriodicWorkRequestBuilder @@ -477,13 +481,17 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar ItemCardAdapter( this, items, - ) + ) { + updateItems(it) + } } else { recyclerAdapter = ItemListAdapter( this, items, - ) + ) { + updateItems(it) + } binding.recyclerView.addItemDecoration( DividerItemDecoration( @@ -656,6 +664,10 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar else -> repository.badgeUnread.value // if !elementsShown then unread are fetched. } + private fun updateItems(adapterItems: ArrayList) { + items = adapterItems + } + private fun handleRecurringTask() { if (appSettingsService.isPeriodicRefreshEnabled()) { val myConstraints = diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemCardAdapter.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemCardAdapter.kt index a8565a5..2175fd7 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemCardAdapter.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemCardAdapter.kt @@ -31,6 +31,7 @@ import org.kodein.di.instance class ItemCardAdapter( override val app: Activity, override val items: ArrayList, + override val updateHomeItems: (ArrayList) -> Unit, ) : ItemsAdapter() { override lateinit var binding: CardItemBinding private val imageMaxHeight: Int = @@ -82,7 +83,7 @@ class ItemCardAdapter( val itm = items[position] handleClickListeners(binding, position) - openLink(binding, position) + handleLinkOpening(binding, position) binding.favButton.isSelected = itm.starred if (appSettingsService.getPublicAccess()) { diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemListAdapter.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemListAdapter.kt index 098433b..ac43bd6 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemListAdapter.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemListAdapter.kt @@ -22,6 +22,7 @@ import org.kodein.di.instance class ItemListAdapter( override val app: Activity, override val items: ArrayList, + override val updateHomeItems: (ArrayList) -> Unit, ) : ItemsAdapter() { override lateinit var binding: ListItemBinding @@ -44,7 +45,7 @@ class ItemListAdapter( with(holder) { val itm = items[position] - openLink(binding, position) + handleLinkOpening(binding, position) binding.title.text = itm.title.getHtmlDecoded() diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemsAdapter.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemsAdapter.kt index 1ff89ed..e3ea18c 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemsAdapter.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/adapters/ItemsAdapter.kt @@ -3,7 +3,6 @@ package bou.amine.apps.readerforselfossv2.android.adapters import android.app.Activity import android.content.Context import android.graphics.Color -import android.util.Log import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding @@ -25,12 +24,14 @@ abstract class ItemsAdapter : RecyclerView.Adapte abstract val binding: ViewBinding abstract val appSettingsService: AppSettingsService abstract val app: Activity + abstract val updateHomeItems: (ArrayList) -> Unit protected val c: Context get() = app.baseContext fun updateAllItems(items: ArrayList) { this.items.clear() this.items.addAll(items) + updateHomeItems(items) notifyDataSetChanged() } @@ -76,12 +77,8 @@ abstract class ItemsAdapter : RecyclerView.Adapte s.show() } - protected fun openLink(holderBinding: ViewBinding, position: Int) { + protected fun handleLinkOpening(holderBinding: ViewBinding, position: Int) { holderBinding.root.setOnClickListener { - Log.d( - "RecyclerViewDebug", - "Clicked position: $position, Item ID: ${items[position].id}" - ) repository.setReaderItems(items) c.openItemUrl( position, @@ -112,6 +109,7 @@ abstract class ItemsAdapter : RecyclerView.Adapte items.remove(item) notifyItemRemoved(position) notifyItemRangeChanged(position, itemCount) + updateHomeItems(items) } else { notifyItemChanged(position) } @@ -140,17 +138,15 @@ abstract class ItemsAdapter : RecyclerView.Adapte ) { items.add(position, item) notifyItemInserted(position) + updateHomeItems(items) } fun addItemsAtEnd(newItems: List) { val oldSize = items.size items.addAll(newItems) notifyItemRangeInserted(oldSize, newItems.size) + updateHomeItems(items) } override fun getItemCount(): Int = items.size - - override fun getItemId(position: Int): Long { - return items[position].id.toLong() - } }