From 076e5cea3ba169f29524861204159049da063a7e Mon Sep 17 00:00:00 2001 From: Viktor De Pasquale Date: Thu, 23 May 2019 20:01:47 +0200 Subject: [PATCH] Fixed selection not persisting throughout root requests --- .../magisk/ui/surequest/SuRequestActivity.kt | 2 +- .../magisk/ui/surequest/SuRequestViewModel.kt | 24 ++++++++++++++----- .../magisk/utils/DataBindingAdapters.kt | 8 +++---- app/src/main/res/layout/activity_request.xml | 7 ++---- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/surequest/SuRequestActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/surequest/SuRequestActivity.kt index dddf4d75a..44beaab41 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/surequest/SuRequestActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/surequest/SuRequestActivity.kt @@ -33,7 +33,7 @@ open class SuRequestActivity : MagiskActivity> { binding, _, item -> + private val items = DiffObservableList(ComparableRvItem.callback) + private val itemBinding = ItemBinding.of> { binding, _, item -> item.bind(binding) } + val adapter = BindingListViewAdapter>(1).apply { + itemBinding = this@SuRequestViewModel.itemBinding + setItems(items) + } + var handler: ActionHandler? = null private var timer: CountDownTimer? = null @@ -64,6 +72,10 @@ class SuRequestViewModel( resources.getStringArray(R.array.allow_timeout) .map { SpinnerRvItem(it) } .let { items.update(it) } + + selectedItemPosition.addOnPropertyChangedCallback { + Timber.e("Changed position to $it") + } } private fun updatePolicy(policy: MagiskPolicy?) { @@ -96,7 +108,7 @@ class SuRequestViewModel( return false } - fun handleRequest(intent: Intent, createUICallback: () -> Unit): Boolean { + fun handleRequest(intent: Intent): Boolean { val socketName = intent.getStringExtra("socket") ?: return false val connector: SuConnector @@ -126,9 +138,10 @@ class SuRequestViewModel( done() } + @SuppressLint("ApplySharedPref") override fun handleAction(action: Int) { val pos = selectedItemPosition.value - timeoutPrefs.edit().putInt(policy?.packageName, pos).apply() + timeoutPrefs.edit().putInt(policy?.packageName, pos).commit() handleAction(action, Config.Value.TIMEOUT_LIST[pos]) } @@ -160,7 +173,7 @@ class SuRequestViewModel( return true } - when (Config.get(Config.Key.SU_AUTO_RESPONSE) as Int) { + when (Config.get(Config.Key.SU_AUTO_RESPONSE)) { Config.Value.SU_AUTO_DENY -> { handler?.handleAction(Policy.DENY, 0) return true @@ -171,7 +184,6 @@ class SuRequestViewModel( } } - createUICallback() showUI() return true } diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/DataBindingAdapters.kt b/app/src/main/java/com/topjohnwu/magisk/utils/DataBindingAdapters.kt index a5f5cd424..d468c5217 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/DataBindingAdapters.kt +++ b/app/src/main/java/com/topjohnwu/magisk/utils/DataBindingAdapters.kt @@ -1,8 +1,6 @@ package com.topjohnwu.magisk.utils import android.view.View -import android.widget.AdapterView -import android.widget.Spinner import android.widget.TextView import androidx.annotation.ColorInt import androidx.annotation.DrawableRes @@ -115,7 +113,7 @@ fun setMovieBehavior(view: TextView, isMovieBehavior: Boolean, text: String) { } } -@BindingAdapter("android:selectedItemPosition") +/*@BindingAdapter("selection"*//*, "selectionAttrChanged", "adapter"*//*) fun setSelectedItemPosition(view: Spinner, position: Int) { view.setSelection(position) } @@ -126,7 +124,7 @@ fun setSelectedItemPosition(view: Spinner, position: Int) { ) fun getSelectedItemPosition(view: Spinner) = view.selectedItemPosition -@BindingAdapter("android:selectedItemPositionAttrChanged") +@BindingAdapter("selectedItemPositionAttrChanged") fun setSelectedItemPositionListener(view: Spinner, listener: InverseBindingListener) { view.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onNothingSelected(p0: AdapterView<*>?) { @@ -137,7 +135,7 @@ fun setSelectedItemPositionListener(view: Spinner, listener: InverseBindingListe listener.onChange() } } -} +}*/ @BindingAdapter("onTouch") fun setOnTouchListener(view: View, listener: View.OnTouchListener) { diff --git a/app/src/main/res/layout/activity_request.xml b/app/src/main/res/layout/activity_request.xml index a09d5059d..86257262d 100644 --- a/app/src/main/res/layout/activity_request.xml +++ b/app/src/main/res/layout/activity_request.xml @@ -89,15 +89,12 @@ - itemDropDownLayout="@{android.R.layout.simple_spinner_dropdown_item}" - android:onClick="@{() -> viewModel.spinnerPressed()}" + android:adapter="@{viewModel.adapter}" + android:selection="@={viewModel.selectedItemPosition}" />