mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-02-17 14:38:29 +00:00
SuperuserViewModel: fix updatePolicy
Starting biometrics may cause the SuperuserFragment to lost focus. After onResume(), doLoadWork() will refresh the itemsPolicies, so notify property changed will work on wrong items. Fixed by snapshotting items to be refreshed before starting biometrics.
This commit is contained in:
parent
207d7fd3f6
commit
9571b6f9be
@ -4,7 +4,6 @@ import com.topjohnwu.magisk.arch.ActivityExecutor
|
|||||||
import com.topjohnwu.magisk.arch.UIActivity
|
import com.topjohnwu.magisk.arch.UIActivity
|
||||||
import com.topjohnwu.magisk.arch.ViewEvent
|
import com.topjohnwu.magisk.arch.ViewEvent
|
||||||
import com.topjohnwu.magisk.core.di.ServiceLocator
|
import com.topjohnwu.magisk.core.di.ServiceLocator
|
||||||
import com.topjohnwu.magisk.core.utils.BiometricHelper
|
|
||||||
|
|
||||||
class BiometricEvent(
|
class BiometricEvent(
|
||||||
builder: Builder.() -> Unit
|
builder: Builder.() -> Unit
|
||||||
|
@ -15,7 +15,6 @@ import com.topjohnwu.magisk.core.Info
|
|||||||
import com.topjohnwu.magisk.core.di.ServiceLocator
|
import com.topjohnwu.magisk.core.di.ServiceLocator
|
||||||
import com.topjohnwu.magisk.core.ktx.activity
|
import com.topjohnwu.magisk.core.ktx.activity
|
||||||
import com.topjohnwu.magisk.core.tasks.HideAPK
|
import com.topjohnwu.magisk.core.tasks.HideAPK
|
||||||
import com.topjohnwu.magisk.core.utils.BiometricHelper
|
|
||||||
import com.topjohnwu.magisk.core.utils.MediaStoreUtils
|
import com.topjohnwu.magisk.core.utils.MediaStoreUtils
|
||||||
import com.topjohnwu.magisk.core.utils.availableLocales
|
import com.topjohnwu.magisk.core.utils.availableLocales
|
||||||
import com.topjohnwu.magisk.core.utils.currentLocale
|
import com.topjohnwu.magisk.core.utils.currentLocale
|
||||||
|
@ -73,6 +73,8 @@ class PolicyRvItem(
|
|||||||
viewModel.deletePressed(this)
|
viewModel.deletePressed(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun itemSameAs(other: PolicyRvItem) = item.uid == other.item.uid
|
override fun itemSameAs(other: PolicyRvItem) = packageName == other.packageName
|
||||||
|
|
||||||
|
override fun contentSameAs(other: PolicyRvItem) = item.policy == other.item.policy
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@ import com.topjohnwu.magisk.core.di.AppContext
|
|||||||
import com.topjohnwu.magisk.core.di.ServiceLocator
|
import com.topjohnwu.magisk.core.di.ServiceLocator
|
||||||
import com.topjohnwu.magisk.core.ktx.getLabel
|
import com.topjohnwu.magisk.core.ktx.getLabel
|
||||||
import com.topjohnwu.magisk.core.model.su.SuPolicy
|
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.core.utils.currentLocale
|
||||||
import com.topjohnwu.magisk.databinding.*
|
import com.topjohnwu.magisk.databinding.*
|
||||||
import com.topjohnwu.magisk.dialog.SuperuserRevokeDialog
|
import com.topjohnwu.magisk.dialog.SuperuserRevokeDialog
|
||||||
@ -107,7 +106,7 @@ class SuperuserViewModel(
|
|||||||
fun updateState() = viewModelScope.launch {
|
fun updateState() = viewModelScope.launch {
|
||||||
db.delete(item.item.uid)
|
db.delete(item.item.uid)
|
||||||
val list = ArrayList(itemsPolicies)
|
val list = ArrayList(itemsPolicies)
|
||||||
list.removeAll { it.itemSameAs(item) }
|
list.removeAll { it.item.uid == item.item.uid }
|
||||||
itemsPolicies.update(list)
|
itemsPolicies.update(list)
|
||||||
if (list.isEmpty() && itemsHelpers.isEmpty()) {
|
if (list.isEmpty() && itemsHelpers.isEmpty()) {
|
||||||
itemsHelpers.add(itemNoData)
|
itemsHelpers.add(itemNoData)
|
||||||
@ -156,15 +155,14 @@ class SuperuserViewModel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun togglePolicy(item: PolicyRvItem, enable: Boolean) {
|
fun togglePolicy(item: PolicyRvItem, enable: Boolean) {
|
||||||
|
val items = itemsPolicies.filter { it.item.uid == item.item.uid }
|
||||||
fun updateState() {
|
fun updateState() {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
val res = if (enable) R.string.su_snack_grant else R.string.su_snack_deny
|
val res = if (enable) R.string.su_snack_grant else R.string.su_snack_deny
|
||||||
item.item.policy = if (enable) SuPolicy.ALLOW else SuPolicy.DENY
|
item.item.policy = if (enable) SuPolicy.ALLOW else SuPolicy.DENY
|
||||||
db.update(item.item)
|
db.update(item.item)
|
||||||
itemsPolicies.forEach {
|
items.forEach {
|
||||||
if (it.item.uid == item.item.uid) {
|
it.notifyPropertyChanged(BR.enabled)
|
||||||
it.notifyPropertyChanged(BR.enabled)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
SnackbarEvent(res.asText(item.appName)).publish()
|
SnackbarEvent(res.asText(item.appName)).publish()
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,6 @@ import com.topjohnwu.magisk.core.ktx.toast
|
|||||||
import com.topjohnwu.magisk.core.model.su.SuPolicy.Companion.ALLOW
|
import com.topjohnwu.magisk.core.model.su.SuPolicy.Companion.ALLOW
|
||||||
import com.topjohnwu.magisk.core.model.su.SuPolicy.Companion.DENY
|
import com.topjohnwu.magisk.core.model.su.SuPolicy.Companion.DENY
|
||||||
import com.topjohnwu.magisk.core.su.SuRequestHandler
|
import com.topjohnwu.magisk.core.su.SuRequestHandler
|
||||||
import com.topjohnwu.magisk.core.utils.BiometricHelper
|
|
||||||
import com.topjohnwu.magisk.databinding.set
|
import com.topjohnwu.magisk.databinding.set
|
||||||
import com.topjohnwu.magisk.events.BiometricEvent
|
import com.topjohnwu.magisk.events.BiometricEvent
|
||||||
import com.topjohnwu.magisk.events.DieEvent
|
import com.topjohnwu.magisk.events.DieEvent
|
||||||
|
Loading…
x
Reference in New Issue
Block a user