Remove RxBus
This commit is contained in:
parent
8647ba4729
commit
a97d278bcd
@ -4,7 +4,6 @@ import android.content.Context
|
|||||||
import android.os.Build
|
import android.os.Build
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.topjohnwu.magisk.core.ResMgr
|
import com.topjohnwu.magisk.core.ResMgr
|
||||||
import com.topjohnwu.magisk.utils.RxBus
|
|
||||||
import org.koin.core.qualifier.named
|
import org.koin.core.qualifier.named
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
@ -12,7 +11,6 @@ val SUTimeout = named("su_timeout")
|
|||||||
val Protected = named("protected")
|
val Protected = named("protected")
|
||||||
|
|
||||||
val applicationModule = module {
|
val applicationModule = module {
|
||||||
single { RxBus() }
|
|
||||||
factory { ResMgr.resource }
|
factory { ResMgr.resource }
|
||||||
factory { get<Context>().packageManager }
|
factory { get<Context>().packageManager }
|
||||||
factory(Protected) { createDEContext(get()) }
|
factory(Protected) { createDEContext(get()) }
|
||||||
|
@ -21,7 +21,7 @@ val viewModelModules = module {
|
|||||||
viewModel { HomeViewModel(get()) }
|
viewModel { HomeViewModel(get()) }
|
||||||
viewModel { LogViewModel(get()) }
|
viewModel { LogViewModel(get()) }
|
||||||
viewModel { ModuleViewModel(get(), get(), get()) }
|
viewModel { ModuleViewModel(get(), get(), get()) }
|
||||||
viewModel { SafetynetViewModel(get()) }
|
viewModel { SafetynetViewModel() }
|
||||||
viewModel { SettingsViewModel(get()) }
|
viewModel { SettingsViewModel(get()) }
|
||||||
viewModel { SuperuserViewModel(get(), get(), get()) }
|
viewModel { SuperuserViewModel(get(), get(), get()) }
|
||||||
viewModel { ThemeViewModel() }
|
viewModel { ThemeViewModel() }
|
||||||
|
@ -9,7 +9,6 @@ import com.topjohnwu.magisk.core.model.MagiskPolicy
|
|||||||
import com.topjohnwu.magisk.databinding.ComparableRvItem
|
import com.topjohnwu.magisk.databinding.ComparableRvItem
|
||||||
import com.topjohnwu.magisk.extensions.toggle
|
import com.topjohnwu.magisk.extensions.toggle
|
||||||
import com.topjohnwu.magisk.extensions.value
|
import com.topjohnwu.magisk.extensions.value
|
||||||
import com.topjohnwu.magisk.model.events.PolicyUpdateEvent
|
|
||||||
import com.topjohnwu.magisk.ui.superuser.SuperuserViewModel
|
import com.topjohnwu.magisk.ui.superuser.SuperuserViewModel
|
||||||
|
|
||||||
class PolicyItem(val item: MagiskPolicy, val icon: Drawable) : ComparableRvItem<PolicyItem>() {
|
class PolicyItem(val item: MagiskPolicy, val icon: Drawable) : ComparableRvItem<PolicyItem>() {
|
||||||
@ -42,12 +41,12 @@ class PolicyItem(val item: MagiskPolicy, val icon: Drawable) : ComparableRvItem<
|
|||||||
|
|
||||||
fun toggleNotify(viewModel: SuperuserViewModel) {
|
fun toggleNotify(viewModel: SuperuserViewModel) {
|
||||||
shouldNotify.toggle()
|
shouldNotify.toggle()
|
||||||
viewModel.updatePolicy(PolicyUpdateEvent.Notification(updatedPolicy))
|
viewModel.updatePolicy(updatedPolicy, isLogging = false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toggleLog(viewModel: SuperuserViewModel) {
|
fun toggleLog(viewModel: SuperuserViewModel) {
|
||||||
shouldLog.toggle()
|
shouldLog.toggle()
|
||||||
viewModel.updatePolicy(PolicyUpdateEvent.Log(updatedPolicy))
|
viewModel.updatePolicy(updatedPolicy, isLogging = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindingBound(binding: ViewDataBinding) {
|
override fun onBindingBound(binding: ViewDataBinding) {
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
package com.topjohnwu.magisk.model.events
|
|
||||||
|
|
||||||
import com.topjohnwu.magisk.core.model.MagiskPolicy
|
|
||||||
import com.topjohnwu.magisk.utils.RxBus
|
|
||||||
import org.json.JSONObject
|
|
||||||
|
|
||||||
sealed class PolicyUpdateEvent(val item: MagiskPolicy) : RxBus.Event {
|
|
||||||
class Notification(item: MagiskPolicy) : PolicyUpdateEvent(item)
|
|
||||||
class Log(item: MagiskPolicy) : PolicyUpdateEvent(item)
|
|
||||||
}
|
|
||||||
|
|
||||||
data class SafetyNetResult(
|
|
||||||
val response: JSONObject? = null,
|
|
||||||
val dismiss: Boolean = false
|
|
||||||
) : RxBus.Event
|
|
@ -13,7 +13,7 @@ import com.topjohnwu.magisk.extensions.DynamicClassLoader
|
|||||||
import com.topjohnwu.magisk.extensions.OnErrorListener
|
import com.topjohnwu.magisk.extensions.OnErrorListener
|
||||||
import com.topjohnwu.magisk.extensions.subscribeK
|
import com.topjohnwu.magisk.extensions.subscribeK
|
||||||
import com.topjohnwu.magisk.extensions.writeTo
|
import com.topjohnwu.magisk.extensions.writeTo
|
||||||
import com.topjohnwu.magisk.utils.RxBus
|
import com.topjohnwu.magisk.ui.safetynet.SafetyNetResult
|
||||||
import com.topjohnwu.magisk.view.MagiskDialog
|
import com.topjohnwu.magisk.view.MagiskDialog
|
||||||
import com.topjohnwu.magisk.view.MarkDownWindow
|
import com.topjohnwu.magisk.view.MarkDownWindow
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
@ -38,10 +38,11 @@ abstract class ViewEvent {
|
|||||||
var handled = false
|
var handled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
class UpdateSafetyNetEvent : ViewEvent(), ContextExecutor, KoinComponent, SafetyNetHelper.Callback {
|
class CheckSafetyNetEvent(
|
||||||
|
private val callback: (SafetyNetResult) -> Unit = {}
|
||||||
|
) : ViewEvent(), ContextExecutor, KoinComponent, SafetyNetHelper.Callback {
|
||||||
|
|
||||||
private val magiskRepo by inject<MagiskRepository>()
|
private val magiskRepo by inject<MagiskRepository>()
|
||||||
private val rxBus by inject<RxBus>()
|
|
||||||
|
|
||||||
private lateinit var apk: File
|
private lateinit var apk: File
|
||||||
private lateinit var dex: File
|
private lateinit var dex: File
|
||||||
@ -93,7 +94,7 @@ class UpdateSafetyNetEvent : ViewEvent(), ContextExecutor, KoinComponent, Safety
|
|||||||
.map { it.byteStream().writeTo(apk) }
|
.map { it.byteStream().writeTo(apk) }
|
||||||
.subscribeK { attest(context) {
|
.subscribeK { attest(context) {
|
||||||
Timber.e(it)
|
Timber.e(it)
|
||||||
rxBus.post(SafetyNetResult())
|
callback(SafetyNetResult())
|
||||||
} }
|
} }
|
||||||
|
|
||||||
if (!askUser) {
|
if (!askUser) {
|
||||||
@ -111,13 +112,13 @@ class UpdateSafetyNetEvent : ViewEvent(), ContextExecutor, KoinComponent, Safety
|
|||||||
}
|
}
|
||||||
.applyButton(MagiskDialog.ButtonType.NEGATIVE) {
|
.applyButton(MagiskDialog.ButtonType.NEGATIVE) {
|
||||||
titleRes = android.R.string.cancel
|
titleRes = android.R.string.cancel
|
||||||
onClick { rxBus.post(SafetyNetResult(dismiss = true)) }
|
onClick { callback(SafetyNetResult(dismiss = true)) }
|
||||||
}
|
}
|
||||||
.reveal()
|
.reveal()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResponse(response: JSONObject?) {
|
override fun onResponse(response: JSONObject?) {
|
||||||
rxBus.post(SafetyNetResult(response))
|
callback(SafetyNetResult(response))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,22 +4,22 @@ import androidx.databinding.Bindable
|
|||||||
import androidx.databinding.ObservableField
|
import androidx.databinding.ObservableField
|
||||||
import com.topjohnwu.magisk.BR
|
import com.topjohnwu.magisk.BR
|
||||||
import com.topjohnwu.magisk.R
|
import com.topjohnwu.magisk.R
|
||||||
import com.topjohnwu.magisk.extensions.subscribeK
|
|
||||||
import com.topjohnwu.magisk.extensions.value
|
import com.topjohnwu.magisk.extensions.value
|
||||||
import com.topjohnwu.magisk.model.events.SafetyNetResult
|
import com.topjohnwu.magisk.model.events.CheckSafetyNetEvent
|
||||||
import com.topjohnwu.magisk.model.events.UpdateSafetyNetEvent
|
|
||||||
import com.topjohnwu.magisk.ui.base.BaseViewModel
|
import com.topjohnwu.magisk.ui.base.BaseViewModel
|
||||||
import com.topjohnwu.magisk.ui.safetynet.SafetyNetState.*
|
import com.topjohnwu.magisk.ui.safetynet.SafetyNetState.*
|
||||||
import com.topjohnwu.magisk.utils.RxBus
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
enum class SafetyNetState {
|
enum class SafetyNetState {
|
||||||
LOADING, PASS, FAILED, IDLE
|
LOADING, PASS, FAILED, IDLE
|
||||||
}
|
}
|
||||||
|
|
||||||
class SafetynetViewModel(
|
data class SafetyNetResult(
|
||||||
rxBus: RxBus
|
val response: JSONObject? = null,
|
||||||
) : BaseViewModel() {
|
val dismiss: Boolean = false
|
||||||
|
)
|
||||||
|
|
||||||
|
class SafetynetViewModel : BaseViewModel() {
|
||||||
|
|
||||||
private var currentState = IDLE
|
private var currentState = IDLE
|
||||||
set(value) {
|
set(value) {
|
||||||
@ -36,10 +36,6 @@ class SafetynetViewModel(
|
|||||||
val isSuccess @Bindable get() = currentState == PASS
|
val isSuccess @Bindable get() = currentState == PASS
|
||||||
|
|
||||||
init {
|
init {
|
||||||
rxBus.register<SafetyNetResult>()
|
|
||||||
.subscribeK { resolveResponse(it) }
|
|
||||||
.add()
|
|
||||||
|
|
||||||
cachedResult?.also {
|
cachedResult?.also {
|
||||||
resolveResponse(SafetyNetResult(it))
|
resolveResponse(SafetyNetResult(it))
|
||||||
} ?: attest()
|
} ?: attest()
|
||||||
@ -54,7 +50,9 @@ class SafetynetViewModel(
|
|||||||
|
|
||||||
private fun attest() {
|
private fun attest() {
|
||||||
currentState = LOADING
|
currentState = LOADING
|
||||||
UpdateSafetyNetEvent().publish()
|
CheckSafetyNetEvent {
|
||||||
|
resolveResponse(it)
|
||||||
|
}.publish()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun reset() = attest()
|
fun reset() = attest()
|
||||||
|
@ -15,7 +15,6 @@ import com.topjohnwu.magisk.extensions.toggle
|
|||||||
import com.topjohnwu.magisk.model.entity.recycler.PolicyItem
|
import com.topjohnwu.magisk.model.entity.recycler.PolicyItem
|
||||||
import com.topjohnwu.magisk.model.entity.recycler.TappableHeadlineItem
|
import com.topjohnwu.magisk.model.entity.recycler.TappableHeadlineItem
|
||||||
import com.topjohnwu.magisk.model.entity.recycler.TextItem
|
import com.topjohnwu.magisk.model.entity.recycler.TextItem
|
||||||
import com.topjohnwu.magisk.model.events.PolicyUpdateEvent
|
|
||||||
import com.topjohnwu.magisk.model.events.SnackbarEvent
|
import com.topjohnwu.magisk.model.events.SnackbarEvent
|
||||||
import com.topjohnwu.magisk.model.events.dialog.BiometricDialog
|
import com.topjohnwu.magisk.model.events.dialog.BiometricDialog
|
||||||
import com.topjohnwu.magisk.model.events.dialog.SuperuserRevokeDialog
|
import com.topjohnwu.magisk.model.events.dialog.SuperuserRevokeDialog
|
||||||
@ -110,24 +109,19 @@ class SuperuserViewModel(
|
|||||||
|
|
||||||
//---
|
//---
|
||||||
|
|
||||||
fun updatePolicy(it: PolicyUpdateEvent) = viewModelScope.launch {
|
fun updatePolicy(policy: MagiskPolicy, isLogging: Boolean) = viewModelScope.launch {
|
||||||
val snackStr = when (it) {
|
db.update(policy)
|
||||||
is PolicyUpdateEvent.Notification -> {
|
val str = when {
|
||||||
updatePolicy(it.item)
|
isLogging -> when {
|
||||||
when {
|
policy.logging -> R.string.su_snack_log_on
|
||||||
it.item.notification -> R.string.su_snack_notif_on
|
else -> R.string.su_snack_log_off
|
||||||
|
}
|
||||||
|
else -> when {
|
||||||
|
policy.notification -> R.string.su_snack_notif_on
|
||||||
else -> R.string.su_snack_notif_off
|
else -> R.string.su_snack_notif_off
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is PolicyUpdateEvent.Log -> {
|
SnackbarEvent(resources.getString(str, policy.appName)).publish()
|
||||||
updatePolicy(it.item)
|
|
||||||
when {
|
|
||||||
it.item.logging -> R.string.su_snack_log_on
|
|
||||||
else -> R.string.su_snack_log_off
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SnackbarEvent(resources.getString(snackStr, it.item.appName)).publish()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun togglePolicy(item: PolicyItem, enable: Boolean) {
|
fun togglePolicy(item: PolicyItem, enable: Boolean) {
|
||||||
@ -136,7 +130,7 @@ class SuperuserViewModel(
|
|||||||
val app = item.item.copy(policy = policy)
|
val app = item.item.copy(policy = policy)
|
||||||
|
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
updatePolicy(app)
|
db.update(app)
|
||||||
val res = if (app.policy == MagiskPolicy.ALLOW) R.string.su_snack_grant
|
val res = if (app.policy == MagiskPolicy.ALLOW) R.string.su_snack_grant
|
||||||
else R.string.su_snack_deny
|
else R.string.su_snack_deny
|
||||||
SnackbarEvent(resources.getString(res).format(item.item.appName))
|
SnackbarEvent(resources.getString(res).format(item.item.appName))
|
||||||
@ -152,9 +146,4 @@ class SuperuserViewModel(
|
|||||||
updateState()
|
updateState()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//---
|
|
||||||
|
|
||||||
private suspend fun updatePolicy(policy: MagiskPolicy) = db.update(policy)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
package com.topjohnwu.magisk.utils
|
|
||||||
|
|
||||||
import io.reactivex.Observable
|
|
||||||
import io.reactivex.subjects.PublishSubject
|
|
||||||
|
|
||||||
class RxBus {
|
|
||||||
|
|
||||||
private val _bus = PublishSubject.create<Event>()
|
|
||||||
|
|
||||||
val bus: Observable<Event> get() = _bus
|
|
||||||
|
|
||||||
fun post(event: Event) {
|
|
||||||
_bus.onNext(event)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun post(event: Int) {
|
|
||||||
_bus.onNext(SimpleEvent(event))
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <reified T : Event> register(noinline predicate: (T) -> Boolean = { true }): Observable<T> {
|
|
||||||
return bus
|
|
||||||
.ofType(T::class.java)
|
|
||||||
.filter(predicate)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun register(eventId: Int): Observable<Int> {
|
|
||||||
return bus
|
|
||||||
.ofType(SimpleEvent::class.java)
|
|
||||||
.map { it.eventId }
|
|
||||||
.filter { it == eventId }
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Event
|
|
||||||
|
|
||||||
private class SimpleEvent(val eventId: Int) : Event
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user