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 09108db8..a60904ee 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 @@ -58,7 +62,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar private lateinit var recyclerViewScrollListener: RecyclerView.OnScrollListener private lateinit var binding: ActivityHomeBinding - private var recyclerAdapter: RecyclerView.Adapter<*>? = null + private var recyclerAdapter: ItemsAdapter? = null private var fromTabShortcut: Boolean = false @@ -498,7 +502,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar } binding.recyclerView.adapter = recyclerAdapter } else { - (recyclerAdapter as ItemsAdapter<*>).updateAllItems(items) + recyclerAdapter!!.updateAllItems(items) } reloadBadges() 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 e61a20dd..2175fd7b 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 @@ -1,7 +1,6 @@ package bou.amine.apps.readerforselfossv2.android.adapters import android.app.Activity -import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -14,7 +13,6 @@ import bou.amine.apps.readerforselfossv2.android.utils.LinkOnTouchListener import bou.amine.apps.readerforselfossv2.android.utils.glide.bitmapCenterCrop import bou.amine.apps.readerforselfossv2.android.utils.glide.circularDrawable import bou.amine.apps.readerforselfossv2.android.utils.openInBrowserAsNewTask -import bou.amine.apps.readerforselfossv2.android.utils.openItemUrl import bou.amine.apps.readerforselfossv2.android.utils.shareLink import bou.amine.apps.readerforselfossv2.model.SelfossModel import bou.amine.apps.readerforselfossv2.repository.Repository @@ -32,11 +30,10 @@ import org.kodein.di.instance class ItemCardAdapter( override val app: Activity, - override var items: ArrayList, - override val updateItems: (ArrayList) -> Unit, + override val items: ArrayList, + override val updateHomeItems: (ArrayList) -> Unit, ) : ItemsAdapter() { - private lateinit var binding: CardItemBinding - private val c: Context = app.baseContext + override lateinit var binding: CardItemBinding private val imageMaxHeight: Int = c.resources.getDimension(R.dimen.card_image_max_height).toInt() @@ -52,8 +49,8 @@ class ItemCardAdapter( return ViewHolder(binding) } - private fun handleClickListeners(position: Int) { - binding.favButton.setOnClickListener { + private fun handleClickListeners(holderBinding: CardItemBinding, position: Int) { + holderBinding.favButton.setOnClickListener { val item = items[position] if (item.starred) { CoroutineScope(Dispatchers.IO).launch { @@ -78,27 +75,15 @@ class ItemCardAdapter( } } - private fun handleLinkOpening(position: Int) { - binding.root.setOnClickListener { - repository.setReaderItems(items) - c.openItemUrl( - position, - items[position].getLinkDecoded(), - appSettingsService.isArticleViewerEnabled(), - app, - ) - } - } - override fun onBindViewHolder( holder: ViewHolder, position: Int, ) { with(holder) { - val itm = items[holder.bindingAdapterPosition] + val itm = items[position] - handleClickListeners(holder.bindingAdapterPosition) - handleLinkOpening(holder.bindingAdapterPosition) + handleClickListeners(binding, position) + handleLinkOpening(binding, position) binding.favButton.isSelected = itm.starred if (appSettingsService.getPublicAccess()) { @@ -140,9 +125,5 @@ class ItemCardAdapter( } } - override fun getItemCount(): Int { - return items.size - } - inner class ViewHolder(val binding: CardItemBinding) : RecyclerView.ViewHolder(binding.root) } 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 2d27e847..ac43bd62 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 @@ -1,7 +1,6 @@ package bou.amine.apps.readerforselfossv2.android.adapters import android.app.Activity -import android.content.Context import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView @@ -10,7 +9,6 @@ import bou.amine.apps.readerforselfossv2.android.databinding.ListItemBinding import bou.amine.apps.readerforselfossv2.android.sendSilentlyWithAcraWithName import bou.amine.apps.readerforselfossv2.android.utils.LinkOnTouchListener import bou.amine.apps.readerforselfossv2.android.utils.glide.circularDrawable -import bou.amine.apps.readerforselfossv2.android.utils.openItemUrl import bou.amine.apps.readerforselfossv2.model.SelfossModel import bou.amine.apps.readerforselfossv2.repository.Repository import bou.amine.apps.readerforselfossv2.service.AppSettingsService @@ -23,11 +21,10 @@ import org.kodein.di.instance class ItemListAdapter( override val app: Activity, - override var items: ArrayList, - override val updateItems: (ArrayList) -> Unit, + override val items: ArrayList, + override val updateHomeItems: (ArrayList) -> Unit, ) : ItemsAdapter() { - private lateinit var binding: ListItemBinding - private val c: Context = app.baseContext + override lateinit var binding: ListItemBinding override val di: DI by closestDI(app) override val repository: Repository by instance() @@ -46,17 +43,9 @@ class ItemListAdapter( position: Int, ) { with(holder) { - val itm = items[holder.bindingAdapterPosition] + val itm = items[position] - binding.root.setOnClickListener { - repository.setReaderItems(items) - c.openItemUrl( - holder.bindingAdapterPosition, - items[holder.bindingAdapterPosition].getLinkDecoded(), - appSettingsService.isArticleViewerEnabled(), - app, - ) - } + handleLinkOpening(binding, position) binding.title.text = itm.title.getHtmlDecoded() @@ -83,7 +72,5 @@ class ItemListAdapter( } } - override fun getItemCount(): Int = items.size - inner class ViewHolder(val binding: ListItemBinding) : RecyclerView.ViewHolder(binding.root) } 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 aa6b545a..e3ea18c5 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 @@ -1,10 +1,13 @@ package bou.amine.apps.readerforselfossv2.android.adapters import android.app.Activity +import android.content.Context import android.graphics.Color import android.widget.TextView import androidx.recyclerview.widget.RecyclerView +import androidx.viewbinding.ViewBinding import bou.amine.apps.readerforselfossv2.android.R +import bou.amine.apps.readerforselfossv2.android.utils.openItemUrl import bou.amine.apps.readerforselfossv2.model.SelfossModel import bou.amine.apps.readerforselfossv2.repository.Repository import bou.amine.apps.readerforselfossv2.service.AppSettingsService @@ -16,16 +19,20 @@ import kotlinx.coroutines.launch import org.kodein.di.DIAware abstract class ItemsAdapter : RecyclerView.Adapter(), DIAware { - abstract var items: ArrayList + abstract val items: ArrayList abstract val repository: Repository + abstract val binding: ViewBinding abstract val appSettingsService: AppSettingsService abstract val app: Activity - abstract val updateItems: (ArrayList) -> Unit + abstract val updateHomeItems: (ArrayList) -> Unit + + protected val c: Context get() = app.baseContext fun updateAllItems(items: ArrayList) { - this.items = items + this.items.clear() + this.items.addAll(items) + updateHomeItems(items) notifyDataSetChanged() - updateItems(this.items) } private fun unmarkSnackbar( @@ -70,6 +77,18 @@ abstract class ItemsAdapter : RecyclerView.Adapte s.show() } + protected fun handleLinkOpening(holderBinding: ViewBinding, position: Int) { + holderBinding.root.setOnClickListener { + repository.setReaderItems(items) + c.openItemUrl( + position, + items[position].getLinkDecoded(), + appSettingsService.isArticleViewerEnabled(), + app, + ) + } + } + fun handleItemAtIndex(position: Int) { if (items[position].unread) { readItemAtIndex(items[position], position) @@ -90,7 +109,7 @@ abstract class ItemsAdapter : RecyclerView.Adapte items.remove(item) notifyItemRemoved(position) notifyItemRangeChanged(position, itemCount) - updateItems(items) + updateHomeItems(items) } else { notifyItemChanged(position) } @@ -119,13 +138,15 @@ abstract class ItemsAdapter : RecyclerView.Adapte ) { items.add(position, item) notifyItemInserted(position) - updateItems(items) + updateHomeItems(items) } fun addItemsAtEnd(newItems: List) { val oldSize = items.size items.addAll(newItems) notifyItemRangeInserted(oldSize, newItems.size) - updateItems(items) + updateHomeItems(items) } + + override fun getItemCount(): Int = items.size }