diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f9a5135a7..4375057e1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -81,7 +81,6 @@ dependencies { val vBAdapt = "4.0.0" val bindingAdapter = "me.tatarka.bindingcollectionadapter2:bindingcollectionadapter" implementation("${bindingAdapter}:${vBAdapt}") - implementation("${bindingAdapter}-recyclerview:${vBAdapt}") val vLibsu = "5.0.2" implementation("com.github.topjohnwu.libsu:core:${vLibsu}") diff --git a/app/src/main/java/com/topjohnwu/magisk/databinding/BindingBoundAdapter.kt b/app/src/main/java/com/topjohnwu/magisk/databinding/BindingBoundAdapter.kt deleted file mode 100644 index 39d439303..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/databinding/BindingBoundAdapter.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.topjohnwu.magisk.databinding - -import androidx.databinding.ViewDataBinding -import me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter - -open class BindingBoundAdapter : BindingRecyclerViewAdapter() { - - override fun onBindBinding(binding: ViewDataBinding, variableId: Int, layoutRes: Int, position: Int, item: RvItem) { - super.onBindBinding(binding, variableId, layoutRes, position, item) - - item.onBindingBound(binding) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/databinding/Helpers.kt b/app/src/main/java/com/topjohnwu/magisk/databinding/Helpers.kt index 22e6e5a35..ca591196e 100644 --- a/app/src/main/java/com/topjohnwu/magisk/databinding/Helpers.kt +++ b/app/src/main/java/com/topjohnwu/magisk/databinding/Helpers.kt @@ -1,35 +1,7 @@ package com.topjohnwu.magisk.databinding -import androidx.databinding.ViewDataBinding -import me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter -import me.tatarka.bindingcollectionadapter2.ItemBinding -import me.tatarka.bindingcollectionadapter2.OnItemBind - fun diffListOf() = DiffObservableList(DiffRvItem.callback()) -fun diffListOf(newItems: List) = - DiffObservableList(DiffRvItem.callback()).also { it.update(newItems) } - fun filterableListOf() = FilterableDiffObservableList(DiffRvItem.callback()) - -fun adapterOf() = object : BindingRecyclerViewAdapter() { - override fun onBindBinding( - binding: ViewDataBinding, - variableId: Int, - layoutRes: Int, - position: Int, - item: T - ) { - super.onBindBinding(binding, variableId, layoutRes, position, item) - item.onBindingBound(binding) - } -} - -inline fun itemBindingOf( - crossinline body: (ItemBinding<*>) -> Unit = {} -) = OnItemBind { itemBinding, _, item -> - item.bind(itemBinding) - body(itemBinding) -} diff --git a/app/src/main/java/com/topjohnwu/magisk/databinding/RecyclerViewItems.kt b/app/src/main/java/com/topjohnwu/magisk/databinding/RecyclerViewItems.kt index 0f4a4169d..b1f1503f6 100644 --- a/app/src/main/java/com/topjohnwu/magisk/databinding/RecyclerViewItems.kt +++ b/app/src/main/java/com/topjohnwu/magisk/databinding/RecyclerViewItems.kt @@ -1,33 +1,21 @@ package com.topjohnwu.magisk.databinding -import androidx.annotation.CallSuper import androidx.databinding.PropertyChangeRegistry import androidx.databinding.ViewDataBinding import androidx.recyclerview.widget.RecyclerView -import com.topjohnwu.magisk.BR -import me.tatarka.bindingcollectionadapter2.ItemBinding abstract class RvItem { - abstract val layoutRes: Int - - @CallSuper - open fun bind(binding: ItemBinding<*>) { - binding.set(BR.item, layoutRes) - } - - /** - * This callback is useful if you want to manipulate your views directly. - * If you want to use this callback, you must set [me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter] - * on your RecyclerView and call it from there. You can use [BindingBoundAdapter] for your convenience. - */ - open fun onBindingBound(binding: ViewDataBinding) {} } interface RvContainer { val item: E } +interface ViewAwareRvItem { + fun onBind(binding: ViewDataBinding, recyclerView: RecyclerView) +} + interface ComparableRv : Comparable { @Suppress("UNCHECKED_CAST") fun comparableEqual(o: Any?) = @@ -77,13 +65,3 @@ abstract class ObservableDiffRvItem : DiffRvItem(), ObservableHost { abstract class ObservableRvItem : RvItem(), ObservableHost { override var callbacks: PropertyChangeRegistry? = null } - -/** - * This item addresses issues where enclosing recycler has to be invalidated or generally - * manipulated with. This shouldn't be however necessary for 99.9% of use-cases. Refrain from using - * this item as it provides virtually no additional functionality. Stick with ComparableRvItem. - * */ - -interface LenientRvItem { - fun onBindingBound(binding: ViewDataBinding, recyclerView: RecyclerView) -} diff --git a/app/src/main/java/com/topjohnwu/magisk/databinding/RvBindingAdapter.kt b/app/src/main/java/com/topjohnwu/magisk/databinding/RvBindingAdapter.kt deleted file mode 100644 index 8b3975721..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/databinding/RvBindingAdapter.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.topjohnwu.magisk.databinding - -import androidx.databinding.ViewDataBinding -import androidx.recyclerview.widget.RecyclerView -import me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter - -class RvBindingAdapter : BindingRecyclerViewAdapter() { - - private var recyclerView: RecyclerView? = null - - override fun onBindBinding( - binding: ViewDataBinding, - variableId: Int, - layoutRes: Int, - position: Int, - item: T - ) { - super.onBindBinding(binding, variableId, layoutRes, position, item) - - when (item) { - is LenientRvItem -> { - val recycler = recyclerView ?: return - item.onBindingBound(binding) - item.onBindingBound(binding, recycler) - } - else -> item.onBindingBound(binding) - } - } - - override fun onAttachedToRecyclerView(recyclerView: RecyclerView) { - super.onAttachedToRecyclerView(recyclerView) - this.recyclerView = recyclerView - } - -} diff --git a/app/src/main/java/com/topjohnwu/magisk/databinding/RvItemAdapter.kt b/app/src/main/java/com/topjohnwu/magisk/databinding/RvItemAdapter.kt new file mode 100644 index 000000000..bd6216199 --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/databinding/RvItemAdapter.kt @@ -0,0 +1,118 @@ +package com.topjohnwu.magisk.databinding + +import android.annotation.SuppressLint +import android.util.SparseArray +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.databinding.BindingAdapter +import androidx.databinding.DataBindingUtil +import androidx.databinding.ObservableList +import androidx.databinding.ObservableList.OnListChangedCallback +import androidx.databinding.ViewDataBinding +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.findViewTreeLifecycleOwner +import androidx.recyclerview.widget.RecyclerView +import com.topjohnwu.magisk.BR + +class RvItemAdapter( + private val items: List, + private val extraBindings: SparseArray<*>? +) : RecyclerView.Adapter() { + + private var lifecycleOwner: LifecycleOwner? = null + private var recyclerView: RecyclerView? = null + private val observer by lazy(LazyThreadSafetyMode.NONE) { ListObserver() } + + override fun onAttachedToRecyclerView(rv: RecyclerView) { + lifecycleOwner = rv.findViewTreeLifecycleOwner() + recyclerView = rv + if (items is ObservableList) + items.addOnListChangedCallback(observer) + } + + override fun onDetachedFromRecyclerView(rv: RecyclerView) { + lifecycleOwner = null + recyclerView = null + if (items is ObservableList) + items.removeOnListChangedCallback(observer) + } + + override fun onCreateViewHolder(parent: ViewGroup, layoutRes: Int): ViewHolder { + val inflator = LayoutInflater.from(parent.context) + return ViewHolder(DataBindingUtil.inflate(inflator, layoutRes, parent, false)) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = items[position] + holder.binding.setVariable(BR.item, item) + extraBindings?.let { + for (i in 0 until it.size()) { + holder.binding.setVariable(it.keyAt(i), it.valueAt(i)) + } + } + holder.binding.lifecycleOwner = lifecycleOwner + holder.binding.executePendingBindings() + recyclerView?.let { + if (item is ViewAwareRvItem) + item.onBind(holder.binding, it) + } + } + + override fun getItemCount() = items.size + + override fun getItemViewType(position: Int) = items[position].layoutRes + + class ViewHolder(val binding: ViewDataBinding) : RecyclerView.ViewHolder(binding.root) + + inner class ListObserver : OnListChangedCallback>() { + + @SuppressLint("NotifyDataSetChanged") + override fun onChanged(sender: ObservableList) { + notifyDataSetChanged() + } + + override fun onItemRangeChanged( + sender: ObservableList, + positionStart: Int, + itemCount: Int + ) { + notifyItemRangeChanged(positionStart, itemCount) + } + + override fun onItemRangeInserted( + sender: ObservableList?, + positionStart: Int, + itemCount: Int + ) { + notifyItemRangeInserted(positionStart, itemCount) + } + + override fun onItemRangeMoved( + sender: ObservableList?, + fromPosition: Int, + toPosition: Int, + itemCount: Int + ) { + for (i in 0 until itemCount) { + notifyItemMoved(fromPosition + i, toPosition + i) + } + } + + override fun onItemRangeRemoved( + sender: ObservableList?, + positionStart: Int, + itemCount: Int + ) { + notifyItemRangeRemoved(positionStart, itemCount) + } + } +} + +inline fun bindExtra(body: (SparseArray) -> Unit) = SparseArray().also(body) + +@BindingAdapter("items", "extraBindings", requireAll = false) +fun RecyclerView.setAdapter(items: List?, extraBindings: SparseArray<*>?) { + if (items != null) { + adapter = RvItemAdapter(items, extraBindings) + } +} diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt index 7e0a3a846..fd346b620 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt @@ -6,8 +6,8 @@ import androidx.lifecycle.viewModelScope import com.topjohnwu.magisk.BR import com.topjohnwu.magisk.arch.BaseViewModel import com.topjohnwu.magisk.core.di.AppContext +import com.topjohnwu.magisk.databinding.bindExtra import com.topjohnwu.magisk.databinding.filterableListOf -import com.topjohnwu.magisk.databinding.itemBindingOf import com.topjohnwu.magisk.ktx.concurrentMap import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.superuser.Shell @@ -39,11 +39,8 @@ class DenyListViewModel : BaseViewModel() { } val items = filterableListOf() - val itemBinding = itemBindingOf { - it.bindExtra(BR.viewModel, this) - } - val itemInternalBinding = itemBindingOf { - it.bindExtra(BR.viewModel, this) + val extraBindings = bindExtra { + it.put(BR.viewModel, this) } @SuppressLint("InlinedApi") diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/flash/ConsoleItem.kt b/app/src/main/java/com/topjohnwu/magisk/ui/flash/ConsoleItem.kt index c15befe8e..36d038bdc 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/flash/ConsoleItem.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/flash/ConsoleItem.kt @@ -7,19 +7,18 @@ import androidx.databinding.ViewDataBinding import androidx.recyclerview.widget.RecyclerView import com.topjohnwu.magisk.R import com.topjohnwu.magisk.databinding.DiffRvItem -import com.topjohnwu.magisk.databinding.LenientRvItem import com.topjohnwu.magisk.databinding.RvContainer +import com.topjohnwu.magisk.databinding.ViewAwareRvItem import kotlin.math.max class ConsoleItem( override val item: String -) : DiffRvItem(), LenientRvItem, - RvContainer { +) : DiffRvItem(), ViewAwareRvItem, RvContainer { override val layoutRes = R.layout.item_console_md2 private var parentWidth = -1 - override fun onBindingBound(binding: ViewDataBinding, recyclerView: RecyclerView) { + override fun onBind(binding: ViewDataBinding, recyclerView: RecyclerView) { if (parentWidth < 0) parentWidth = (recyclerView.parent as View).width diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt index 8248a9bf5..23d7f6fbe 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt @@ -14,9 +14,7 @@ import com.topjohnwu.magisk.core.tasks.FlashZip import com.topjohnwu.magisk.core.tasks.MagiskInstaller import com.topjohnwu.magisk.core.utils.MediaStoreUtils import com.topjohnwu.magisk.core.utils.MediaStoreUtils.outputStream -import com.topjohnwu.magisk.databinding.RvBindingAdapter import com.topjohnwu.magisk.databinding.diffListOf -import com.topjohnwu.magisk.databinding.itemBindingOf import com.topjohnwu.magisk.databinding.set import com.topjohnwu.magisk.events.SnackbarEvent import com.topjohnwu.magisk.ktx.reboot @@ -36,9 +34,7 @@ class FlashViewModel : BaseViewModel() { private val _subtitle = MutableLiveData(R.string.flashing) val subtitle get() = _subtitle as LiveData - val adapter = RvBindingAdapter() val items = diffListOf() - val itemBinding = itemBindingOf() lateinit var args: FlashFragmentArgs private val logItems = mutableListOf().synchronized() diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt index ba422f597..110e290af 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt @@ -12,7 +12,7 @@ import com.topjohnwu.magisk.core.Info import com.topjohnwu.magisk.core.download.Subject import com.topjohnwu.magisk.core.download.Subject.App import com.topjohnwu.magisk.core.repository.NetworkService -import com.topjohnwu.magisk.databinding.itemBindingOf +import com.topjohnwu.magisk.databinding.bindExtra import com.topjohnwu.magisk.databinding.set import com.topjohnwu.magisk.events.SnackbarEvent import com.topjohnwu.magisk.events.dialog.EnvFixDialog @@ -75,8 +75,8 @@ class HomeViewModel( var stateManagerProgress = 0 set(value) = set(value, field, { field = it }, BR.stateManagerProgress) - val itemBinding = itemBindingOf { - it.bindExtra(BR.viewModel, this) + val extraBindings = bindExtra { + it.put(BR.viewModel, this) } companion object { diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt index bb616daa2..f6f76ccc6 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt @@ -10,8 +10,8 @@ import com.topjohnwu.magisk.core.Info import com.topjohnwu.magisk.core.repository.LogRepository import com.topjohnwu.magisk.core.utils.MediaStoreUtils import com.topjohnwu.magisk.core.utils.MediaStoreUtils.outputStream +import com.topjohnwu.magisk.databinding.bindExtra import com.topjohnwu.magisk.databinding.diffListOf -import com.topjohnwu.magisk.databinding.itemBindingOf import com.topjohnwu.magisk.databinding.set import com.topjohnwu.magisk.events.SnackbarEvent import com.topjohnwu.magisk.ktx.timeFormatStandard @@ -34,8 +34,8 @@ class LogViewModel( // --- su log val items = diffListOf() - val itemBinding = itemBindingOf { - it.bindExtra(BR.viewModel, this) + val extraBindings = bindExtra { + it.put(BR.viewModel, this) } // --- magisk log diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt b/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt index 91434c4c6..e6eeb2f30 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt @@ -8,8 +8,6 @@ import com.topjohnwu.magisk.arch.BaseFragment import com.topjohnwu.magisk.arch.viewModel import com.topjohnwu.magisk.core.Const import com.topjohnwu.magisk.databinding.FragmentModuleMd2Binding -import com.topjohnwu.magisk.databinding.RvItem -import com.topjohnwu.magisk.databinding.adapterOf import rikka.recyclerview.addEdgeSpacing import rikka.recyclerview.addInvalidateItemDecorationsObserver import rikka.recyclerview.addItemSpacing @@ -34,7 +32,6 @@ class ModuleFragment : BaseFragment() { super.onViewCreated(view, savedInstanceState) binding.moduleList.apply { - adapter = adapterOf() addEdgeSpacing(top = R.dimen.l_50, bottom = R.dimen.l1) addItemSpacing(R.dimen.l1, R.dimen.l_50, R.dimen.l1) fixEdgeEffect() diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt index bc7f64592..836dff11a 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt @@ -11,8 +11,8 @@ import com.topjohnwu.magisk.core.base.ContentResultCallback import com.topjohnwu.magisk.core.model.module.LocalModule import com.topjohnwu.magisk.core.model.module.OnlineModule import com.topjohnwu.magisk.databinding.RvItem +import com.topjohnwu.magisk.databinding.bindExtra import com.topjohnwu.magisk.databinding.diffListOf -import com.topjohnwu.magisk.databinding.itemBindingOf import com.topjohnwu.magisk.events.GetContentEvent import com.topjohnwu.magisk.events.SnackbarEvent import com.topjohnwu.magisk.events.dialog.ModuleInstallDialog @@ -30,8 +30,8 @@ class ModuleViewModel : BaseViewModel() { private val itemsInstalled = diffListOf() val items = MergeObservableList() - val itemBinding = itemBindingOf { - it.bindExtra(BR.viewModel, this) + val extraBindings = bindExtra { + it.put(BR.viewModel, this) } val data get() = uri diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt index 4cbab993a..97f4b08ed 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt @@ -14,8 +14,7 @@ import com.topjohnwu.magisk.core.Info import com.topjohnwu.magisk.core.di.AppContext import com.topjohnwu.magisk.core.isRunningAsStub import com.topjohnwu.magisk.core.tasks.HideAPK -import com.topjohnwu.magisk.databinding.adapterOf -import com.topjohnwu.magisk.databinding.itemBindingOf +import com.topjohnwu.magisk.databinding.bindExtra import com.topjohnwu.magisk.events.AddHomeIconEvent import com.topjohnwu.magisk.events.SnackbarEvent import com.topjohnwu.magisk.events.dialog.BiometricEvent @@ -26,9 +25,10 @@ import kotlinx.coroutines.launch class SettingsViewModel : BaseViewModel(), BaseSettingsItem.Handler { - val adapter = adapterOf() - val itemBinding = itemBindingOf { it.bindExtra(BR.handler, this) } val items = createItems() + val extraBindings = bindExtra { + it.put(BR.handler, this) + } init { viewModelScope.launch { diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserFragment.kt b/app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserFragment.kt index a84e463b1..832ecc252 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserFragment.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserFragment.kt @@ -5,9 +5,7 @@ import android.view.View import com.topjohnwu.magisk.R import com.topjohnwu.magisk.arch.BaseFragment import com.topjohnwu.magisk.arch.viewModel -import com.topjohnwu.magisk.databinding.AnyDiffRvItem import com.topjohnwu.magisk.databinding.FragmentSuperuserMd2Binding -import com.topjohnwu.magisk.databinding.adapterOf import rikka.recyclerview.addEdgeSpacing import rikka.recyclerview.addItemSpacing import rikka.recyclerview.fixEdgeEffect @@ -26,7 +24,6 @@ class SuperuserFragment : BaseFragment() { super.onViewCreated(view, savedInstanceState) binding.superuserList.apply { - adapter = adapterOf() addEdgeSpacing(top = R.dimen.l_50, bottom = R.dimen.l1) addItemSpacing(R.dimen.l1, R.dimen.l_50, R.dimen.l1) fixEdgeEffect() diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserViewModel.kt index 55cdd7565..30687b68c 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserViewModel.kt @@ -15,8 +15,8 @@ import com.topjohnwu.magisk.core.model.su.SuPolicy import com.topjohnwu.magisk.core.utils.BiometricHelper import com.topjohnwu.magisk.core.utils.currentLocale import com.topjohnwu.magisk.databinding.AnyDiffRvItem +import com.topjohnwu.magisk.databinding.bindExtra import com.topjohnwu.magisk.databinding.diffListOf -import com.topjohnwu.magisk.databinding.itemBindingOf import com.topjohnwu.magisk.events.SnackbarEvent import com.topjohnwu.magisk.events.dialog.BiometricEvent import com.topjohnwu.magisk.events.dialog.SuperuserRevokeDialog @@ -35,14 +35,14 @@ class SuperuserViewModel( private val itemNoData = TextItem(R.string.superuser_policy_none) - private val itemsPolicies = diffListOf() private val itemsHelpers = ObservableArrayList() + private val itemsPolicies = diffListOf() val items = MergeObservableList() .insertList(itemsHelpers) .insertList(itemsPolicies) - val itemBinding = itemBindingOf { - it.bindExtra(BR.listener, this) + val extraBindings = bindExtra { + it.put(BR.listener, this) } // --- diff --git a/app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt b/app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt index 8f97ab8d7..0d3392ef9 100644 --- a/app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt @@ -23,8 +23,6 @@ import com.topjohnwu.magisk.BR import com.topjohnwu.magisk.R import com.topjohnwu.magisk.databinding.* import com.topjohnwu.magisk.view.MagiskDialog.DialogClickListener -import me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapters -import me.tatarka.bindingcollectionadapter2.ItemBinding typealias DialogButtonClickListener = (DialogInterface) -> Unit @@ -181,14 +179,13 @@ class MagiskDialog( it.layoutManager = LinearLayoutManager(context) val items = list.mapIndexed { i, cs -> DialogItem(cs, i) } - val binding = itemBindingOf { item -> - item.bindExtra(BR.listener, DialogClickListener { pos -> + val extraBindings = bindExtra { sa -> + sa.put(BR.listener, DialogClickListener { pos -> listener.onClick(pos) dismiss() }) - }.let { b -> ItemBinding.of(b) } - - BindingRecyclerViewAdapters.setAdapter(it, binding, items, null, null, null, null) + } + it.setAdapter(items, extraBindings) } ) diff --git a/app/src/main/res/layout/fragment_deny_md2.xml b/app/src/main/res/layout/fragment_deny_md2.xml index 1766d513b..62a1cc031 100644 --- a/app/src/main/res/layout/fragment_deny_md2.xml +++ b/app/src/main/res/layout/fragment_deny_md2.xml @@ -17,9 +17,6 @@ diff --git a/app/src/main/res/layout/fragment_flash_md2.xml b/app/src/main/res/layout/fragment_flash_md2.xml index f28ed7f88..bff2b2e6a 100644 --- a/app/src/main/res/layout/fragment_flash_md2.xml +++ b/app/src/main/res/layout/fragment_flash_md2.xml @@ -24,9 +24,7 @@