Allow updating bottom sheet chooser items

This commit is contained in:
Naveen 2022-11-11 01:11:24 +05:30
parent d496a328ed
commit 3a5b0ad832
3 changed files with 36 additions and 17 deletions

View file

@ -1,9 +1,10 @@
package com.simplemobiletools.commons.adapters package com.simplemobiletools.commons.adapters
import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.simplemobiletools.commons.R import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.extensions.applyColorFilter import com.simplemobiletools.commons.extensions.applyColorFilter
@ -13,16 +14,7 @@ import com.simplemobiletools.commons.models.SimpleListItem
import kotlinx.android.synthetic.main.item_simple_list.view.* import kotlinx.android.synthetic.main.item_simple_list.view.*
open class SimpleListItemAdapter(val activity: Activity, val onItemClicked: (SimpleListItem) -> Unit) : open class SimpleListItemAdapter(val activity: Activity, val onItemClicked: (SimpleListItem) -> Unit) :
RecyclerView.Adapter<SimpleListItemAdapter.SimpleItemViewHolder>() { ListAdapter<SimpleListItem, SimpleListItemAdapter.SimpleItemViewHolder>(SimpleListItemDiffCallback()) {
private val listItems = arrayListOf<SimpleListItem>()
@SuppressLint("NotifyDataSetChanged")
fun updateData(items: Array<SimpleListItem>) {
listItems.clear()
listItems.addAll(items)
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SimpleItemViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SimpleItemViewHolder {
val view = activity.layoutInflater.inflate(R.layout.item_simple_list, parent, false) val view = activity.layoutInflater.inflate(R.layout.item_simple_list, parent, false)
@ -30,12 +22,10 @@ open class SimpleListItemAdapter(val activity: Activity, val onItemClicked: (Sim
} }
override fun onBindViewHolder(holder: SimpleItemViewHolder, position: Int) { override fun onBindViewHolder(holder: SimpleItemViewHolder, position: Int) {
val route = listItems[position] val route = getItem(position)
holder.bindView(route) holder.bindView(route)
} }
override fun getItemCount() = listItems.size
open inner class SimpleItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { open inner class SimpleItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindView(item: SimpleListItem) { fun bindView(item: SimpleListItem) {
@ -54,3 +44,15 @@ open class SimpleListItemAdapter(val activity: Activity, val onItemClicked: (Sim
} }
} }
} }
private class SimpleListItemDiffCallback : DiffUtil.ItemCallback<SimpleListItem>() {
override fun areItemsTheSame(oldItem: SimpleListItem, newItem: SimpleListItem): Boolean {
return SimpleListItem.areItemsTheSame(oldItem, newItem)
}
override fun areContentsTheSame(oldItem: SimpleListItem, newItem: SimpleListItem): Boolean {
return SimpleListItem.areContentsTheSame(oldItem, newItem)
}
}

View file

@ -50,8 +50,8 @@ class SimpleBottomSheetChooserDialog : BottomSheetDialogFragment() {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
private fun setupRecyclerView() { private fun setupRecyclerView() {
val data = arguments?.getParcelableArray(DATA) as Array<SimpleListItem> val listItems = arguments?.getParcelableArray(DATA) as Array<SimpleListItem>
getAudioRouteAdapter().updateData(data) getAudioRouteAdapter().submitList(listItems.toList())
} }
private fun getAudioRouteAdapter(): SimpleListItemAdapter { private fun getAudioRouteAdapter(): SimpleListItemAdapter {
@ -66,6 +66,12 @@ class SimpleBottomSheetChooserDialog : BottomSheetDialogFragment() {
return adapter return adapter
} }
fun updateChooserItems(newItems: Array<SimpleListItem>) {
if (isAdded) {
getAudioRouteAdapter().submitList(newItems.toList())
}
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
onItemClick = null onItemClick = null

View file

@ -4,4 +4,15 @@ import android.os.Parcelable
import kotlinx.android.parcel.Parcelize import kotlinx.android.parcel.Parcelize
@Parcelize @Parcelize
data class SimpleListItem(val id: Int, val imageRes: Int?, val textRes: Int) : Parcelable data class SimpleListItem(val id: Int, val imageRes: Int?, val textRes: Int) : Parcelable {
companion object {
fun areItemsTheSame(old: SimpleListItem, new: SimpleListItem): Boolean {
return old.id == new.id
}
fun areContentsTheSame(old: SimpleListItem, new: SimpleListItem): Boolean {
return old.imageRes == new.imageRes && old.textRes == new.textRes
}
}
}