Fixed selection not persisting throughout root requests
This commit is contained in:
parent
8515971ccf
commit
076e5cea3b
@ -33,7 +33,7 @@ open class SuRequestActivity : MagiskActivity<SuRequestViewModel, ActivityReques
|
|||||||
val action = intent.action
|
val action = intent.action
|
||||||
|
|
||||||
if (TextUtils.equals(action, GeneralReceiver.REQUEST)) {
|
if (TextUtils.equals(action, GeneralReceiver.REQUEST)) {
|
||||||
if (!viewModel.handleRequest(intent) {})
|
if (!viewModel.handleRequest(intent))
|
||||||
finish()
|
finish()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import android.hardware.fingerprint.FingerprintManager
|
|||||||
import android.os.CountDownTimer
|
import android.os.CountDownTimer
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import com.skoumal.teanity.databinding.ComparableRvItem
|
import com.skoumal.teanity.databinding.ComparableRvItem
|
||||||
|
import com.skoumal.teanity.extensions.addOnPropertyChangedCallback
|
||||||
import com.skoumal.teanity.util.DiffObservableList
|
import com.skoumal.teanity.util.DiffObservableList
|
||||||
import com.skoumal.teanity.util.KObservableField
|
import com.skoumal.teanity.util.KObservableField
|
||||||
import com.topjohnwu.magisk.BuildConfig
|
import com.topjohnwu.magisk.BuildConfig
|
||||||
@ -25,7 +26,9 @@ import com.topjohnwu.magisk.ui.base.MagiskViewModel
|
|||||||
import com.topjohnwu.magisk.utils.FingerprintHelper
|
import com.topjohnwu.magisk.utils.FingerprintHelper
|
||||||
import com.topjohnwu.magisk.utils.SuConnector
|
import com.topjohnwu.magisk.utils.SuConnector
|
||||||
import com.topjohnwu.magisk.utils.now
|
import com.topjohnwu.magisk.utils.now
|
||||||
|
import me.tatarka.bindingcollectionadapter2.BindingListViewAdapter
|
||||||
import me.tatarka.bindingcollectionadapter2.ItemBinding
|
import me.tatarka.bindingcollectionadapter2.ItemBinding
|
||||||
|
import timber.log.Timber
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.concurrent.TimeUnit.*
|
import java.util.concurrent.TimeUnit.*
|
||||||
|
|
||||||
@ -46,11 +49,16 @@ class SuRequestViewModel(
|
|||||||
val canUseFingerprint = KObservableField(FingerprintHelper.useFingerprint())
|
val canUseFingerprint = KObservableField(FingerprintHelper.useFingerprint())
|
||||||
val selectedItemPosition = KObservableField(0)
|
val selectedItemPosition = KObservableField(0)
|
||||||
|
|
||||||
val items = DiffObservableList(ComparableRvItem.callback)
|
private val items = DiffObservableList(ComparableRvItem.callback)
|
||||||
val itemBinding = ItemBinding.of<ComparableRvItem<*>> { binding, _, item ->
|
private val itemBinding = ItemBinding.of<ComparableRvItem<*>> { binding, _, item ->
|
||||||
item.bind(binding)
|
item.bind(binding)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val adapter = BindingListViewAdapter<ComparableRvItem<*>>(1).apply {
|
||||||
|
itemBinding = this@SuRequestViewModel.itemBinding
|
||||||
|
setItems(items)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
var handler: ActionHandler? = null
|
var handler: ActionHandler? = null
|
||||||
private var timer: CountDownTimer? = null
|
private var timer: CountDownTimer? = null
|
||||||
@ -64,6 +72,10 @@ class SuRequestViewModel(
|
|||||||
resources.getStringArray(R.array.allow_timeout)
|
resources.getStringArray(R.array.allow_timeout)
|
||||||
.map { SpinnerRvItem(it) }
|
.map { SpinnerRvItem(it) }
|
||||||
.let { items.update(it) }
|
.let { items.update(it) }
|
||||||
|
|
||||||
|
selectedItemPosition.addOnPropertyChangedCallback {
|
||||||
|
Timber.e("Changed position to $it")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePolicy(policy: MagiskPolicy?) {
|
private fun updatePolicy(policy: MagiskPolicy?) {
|
||||||
@ -96,7 +108,7 @@ class SuRequestViewModel(
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleRequest(intent: Intent, createUICallback: () -> Unit): Boolean {
|
fun handleRequest(intent: Intent): Boolean {
|
||||||
val socketName = intent.getStringExtra("socket") ?: return false
|
val socketName = intent.getStringExtra("socket") ?: return false
|
||||||
|
|
||||||
val connector: SuConnector
|
val connector: SuConnector
|
||||||
@ -126,9 +138,10 @@ class SuRequestViewModel(
|
|||||||
done()
|
done()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("ApplySharedPref")
|
||||||
override fun handleAction(action: Int) {
|
override fun handleAction(action: Int) {
|
||||||
val pos = selectedItemPosition.value
|
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])
|
handleAction(action, Config.Value.TIMEOUT_LIST[pos])
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +173,7 @@ class SuRequestViewModel(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
when (Config.get<Any>(Config.Key.SU_AUTO_RESPONSE) as Int) {
|
when (Config.get<Int>(Config.Key.SU_AUTO_RESPONSE)) {
|
||||||
Config.Value.SU_AUTO_DENY -> {
|
Config.Value.SU_AUTO_DENY -> {
|
||||||
handler?.handleAction(Policy.DENY, 0)
|
handler?.handleAction(Policy.DENY, 0)
|
||||||
return true
|
return true
|
||||||
@ -171,7 +184,6 @@ class SuRequestViewModel(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
createUICallback()
|
|
||||||
showUI()
|
showUI()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package com.topjohnwu.magisk.utils
|
package com.topjohnwu.magisk.utils
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.AdapterView
|
|
||||||
import android.widget.Spinner
|
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.annotation.ColorInt
|
import androidx.annotation.ColorInt
|
||||||
import androidx.annotation.DrawableRes
|
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) {
|
fun setSelectedItemPosition(view: Spinner, position: Int) {
|
||||||
view.setSelection(position)
|
view.setSelection(position)
|
||||||
}
|
}
|
||||||
@ -126,7 +124,7 @@ fun setSelectedItemPosition(view: Spinner, position: Int) {
|
|||||||
)
|
)
|
||||||
fun getSelectedItemPosition(view: Spinner) = view.selectedItemPosition
|
fun getSelectedItemPosition(view: Spinner) = view.selectedItemPosition
|
||||||
|
|
||||||
@BindingAdapter("android:selectedItemPositionAttrChanged")
|
@BindingAdapter("selectedItemPositionAttrChanged")
|
||||||
fun setSelectedItemPositionListener(view: Spinner, listener: InverseBindingListener) {
|
fun setSelectedItemPositionListener(view: Spinner, listener: InverseBindingListener) {
|
||||||
view.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
view.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||||
override fun onNothingSelected(p0: AdapterView<*>?) {
|
override fun onNothingSelected(p0: AdapterView<*>?) {
|
||||||
@ -137,7 +135,7 @@ fun setSelectedItemPositionListener(view: Spinner, listener: InverseBindingListe
|
|||||||
listener.onChange()
|
listener.onChange()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
@BindingAdapter("onTouch")
|
@BindingAdapter("onTouch")
|
||||||
fun setOnTouchListener(view: View, listener: View.OnTouchListener) {
|
fun setOnTouchListener(view: View, listener: View.OnTouchListener) {
|
||||||
|
@ -89,15 +89,12 @@
|
|||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSpinner
|
<androidx.appcompat.widget.AppCompatSpinner
|
||||||
android:id="@+id/timeout"
|
android:id="@+id/timeout"
|
||||||
itemBinding="@{viewModel.itemBinding}"
|
|
||||||
items="@{viewModel.items}"
|
|
||||||
onTouch="@{() -> viewModel.spinnerTouched()}"
|
onTouch="@{() -> viewModel.spinnerTouched()}"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:selectedItemPosition="@={viewModel.selectedItemPosition}" />
|
android:adapter="@{viewModel.adapter}"
|
||||||
itemDropDownLayout="@{android.R.layout.simple_spinner_dropdown_item}"
|
android:selection="@={viewModel.selectedItemPosition}" />
|
||||||
android:onClick="@{() -> viewModel.spinnerPressed()}"
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
android:id="@+id/warning"
|
android:id="@+id/warning"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user