From a97d278bcd9a0320258f7603960189c8df34aaf6 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Thu, 9 Jul 2020 05:13:24 -0700 Subject: [PATCH] Remove RxBus --- .../topjohnwu/magisk/di/ApplicationModule.kt | 2 -- .../topjohnwu/magisk/di/ViewModelsModule.kt | 2 +- .../model/entity/recycler/PolicyRvItem.kt | 5 ++- .../topjohnwu/magisk/model/events/RxEvents.kt | 15 -------- .../magisk/model/events/ViewEvents.kt | 13 +++---- .../magisk/ui/safetynet/SafetynetViewModel.kt | 22 ++++++------ .../magisk/ui/superuser/SuperuserViewModel.kt | 33 ++++++----------- .../java/com/topjohnwu/magisk/utils/RxBus.kt | 36 ------------------- 8 files changed, 31 insertions(+), 97 deletions(-) delete mode 100644 app/src/main/java/com/topjohnwu/magisk/model/events/RxEvents.kt delete mode 100644 app/src/main/java/com/topjohnwu/magisk/utils/RxBus.kt diff --git a/app/src/main/java/com/topjohnwu/magisk/di/ApplicationModule.kt b/app/src/main/java/com/topjohnwu/magisk/di/ApplicationModule.kt index b9014913f..a24095cc8 100644 --- a/app/src/main/java/com/topjohnwu/magisk/di/ApplicationModule.kt +++ b/app/src/main/java/com/topjohnwu/magisk/di/ApplicationModule.kt @@ -4,7 +4,6 @@ import android.content.Context import android.os.Build import androidx.preference.PreferenceManager import com.topjohnwu.magisk.core.ResMgr -import com.topjohnwu.magisk.utils.RxBus import org.koin.core.qualifier.named import org.koin.dsl.module @@ -12,7 +11,6 @@ val SUTimeout = named("su_timeout") val Protected = named("protected") val applicationModule = module { - single { RxBus() } factory { ResMgr.resource } factory { get().packageManager } factory(Protected) { createDEContext(get()) } diff --git a/app/src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt b/app/src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt index 33b07375b..05d28d79a 100644 --- a/app/src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt +++ b/app/src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt @@ -21,7 +21,7 @@ val viewModelModules = module { viewModel { HomeViewModel(get()) } viewModel { LogViewModel(get()) } viewModel { ModuleViewModel(get(), get(), get()) } - viewModel { SafetynetViewModel(get()) } + viewModel { SafetynetViewModel() } viewModel { SettingsViewModel(get()) } viewModel { SuperuserViewModel(get(), get(), get()) } viewModel { ThemeViewModel() } diff --git a/app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/PolicyRvItem.kt b/app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/PolicyRvItem.kt index 0879e3b69..9974e50c8 100644 --- a/app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/PolicyRvItem.kt +++ b/app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/PolicyRvItem.kt @@ -9,7 +9,6 @@ import com.topjohnwu.magisk.core.model.MagiskPolicy import com.topjohnwu.magisk.databinding.ComparableRvItem import com.topjohnwu.magisk.extensions.toggle import com.topjohnwu.magisk.extensions.value -import com.topjohnwu.magisk.model.events.PolicyUpdateEvent import com.topjohnwu.magisk.ui.superuser.SuperuserViewModel class PolicyItem(val item: MagiskPolicy, val icon: Drawable) : ComparableRvItem() { @@ -42,12 +41,12 @@ class PolicyItem(val item: MagiskPolicy, val icon: Drawable) : ComparableRvItem< fun toggleNotify(viewModel: SuperuserViewModel) { shouldNotify.toggle() - viewModel.updatePolicy(PolicyUpdateEvent.Notification(updatedPolicy)) + viewModel.updatePolicy(updatedPolicy, isLogging = false) } fun toggleLog(viewModel: SuperuserViewModel) { shouldLog.toggle() - viewModel.updatePolicy(PolicyUpdateEvent.Log(updatedPolicy)) + viewModel.updatePolicy(updatedPolicy, isLogging = true) } override fun onBindingBound(binding: ViewDataBinding) { diff --git a/app/src/main/java/com/topjohnwu/magisk/model/events/RxEvents.kt b/app/src/main/java/com/topjohnwu/magisk/model/events/RxEvents.kt deleted file mode 100644 index e4fbd8e01..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/model/events/RxEvents.kt +++ /dev/null @@ -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 diff --git a/app/src/main/java/com/topjohnwu/magisk/model/events/ViewEvents.kt b/app/src/main/java/com/topjohnwu/magisk/model/events/ViewEvents.kt index 7e932c3e2..b15f68eac 100644 --- a/app/src/main/java/com/topjohnwu/magisk/model/events/ViewEvents.kt +++ b/app/src/main/java/com/topjohnwu/magisk/model/events/ViewEvents.kt @@ -13,7 +13,7 @@ import com.topjohnwu.magisk.extensions.DynamicClassLoader import com.topjohnwu.magisk.extensions.OnErrorListener import com.topjohnwu.magisk.extensions.subscribeK 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.MarkDownWindow import com.topjohnwu.superuser.Shell @@ -38,10 +38,11 @@ abstract class ViewEvent { 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() - private val rxBus by inject() private lateinit var apk: File private lateinit var dex: File @@ -93,7 +94,7 @@ class UpdateSafetyNetEvent : ViewEvent(), ContextExecutor, KoinComponent, Safety .map { it.byteStream().writeTo(apk) } .subscribeK { attest(context) { Timber.e(it) - rxBus.post(SafetyNetResult()) + callback(SafetyNetResult()) } } if (!askUser) { @@ -111,13 +112,13 @@ class UpdateSafetyNetEvent : ViewEvent(), ContextExecutor, KoinComponent, Safety } .applyButton(MagiskDialog.ButtonType.NEGATIVE) { titleRes = android.R.string.cancel - onClick { rxBus.post(SafetyNetResult(dismiss = true)) } + onClick { callback(SafetyNetResult(dismiss = true)) } } .reveal() } override fun onResponse(response: JSONObject?) { - rxBus.post(SafetyNetResult(response)) + callback(SafetyNetResult(response)) } } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/safetynet/SafetynetViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/safetynet/SafetynetViewModel.kt index 7346aeac6..2ba78357e 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/safetynet/SafetynetViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/safetynet/SafetynetViewModel.kt @@ -4,22 +4,22 @@ import androidx.databinding.Bindable import androidx.databinding.ObservableField import com.topjohnwu.magisk.BR import com.topjohnwu.magisk.R -import com.topjohnwu.magisk.extensions.subscribeK import com.topjohnwu.magisk.extensions.value -import com.topjohnwu.magisk.model.events.SafetyNetResult -import com.topjohnwu.magisk.model.events.UpdateSafetyNetEvent +import com.topjohnwu.magisk.model.events.CheckSafetyNetEvent import com.topjohnwu.magisk.ui.base.BaseViewModel import com.topjohnwu.magisk.ui.safetynet.SafetyNetState.* -import com.topjohnwu.magisk.utils.RxBus import org.json.JSONObject enum class SafetyNetState { LOADING, PASS, FAILED, IDLE } -class SafetynetViewModel( - rxBus: RxBus -) : BaseViewModel() { +data class SafetyNetResult( + val response: JSONObject? = null, + val dismiss: Boolean = false +) + +class SafetynetViewModel : BaseViewModel() { private var currentState = IDLE set(value) { @@ -36,10 +36,6 @@ class SafetynetViewModel( val isSuccess @Bindable get() = currentState == PASS init { - rxBus.register() - .subscribeK { resolveResponse(it) } - .add() - cachedResult?.also { resolveResponse(SafetyNetResult(it)) } ?: attest() @@ -54,7 +50,9 @@ class SafetynetViewModel( private fun attest() { currentState = LOADING - UpdateSafetyNetEvent().publish() + CheckSafetyNetEvent { + resolveResponse(it) + }.publish() } fun reset() = attest() 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 f7be9b8cd..9cccd1a72 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,7 +15,6 @@ import com.topjohnwu.magisk.extensions.toggle import com.topjohnwu.magisk.model.entity.recycler.PolicyItem import com.topjohnwu.magisk.model.entity.recycler.TappableHeadlineItem 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.dialog.BiometricDialog import com.topjohnwu.magisk.model.events.dialog.SuperuserRevokeDialog @@ -110,24 +109,19 @@ class SuperuserViewModel( //--- - fun updatePolicy(it: PolicyUpdateEvent) = viewModelScope.launch { - val snackStr = when (it) { - is PolicyUpdateEvent.Notification -> { - updatePolicy(it.item) - when { - it.item.notification -> R.string.su_snack_notif_on - else -> R.string.su_snack_notif_off - } + fun updatePolicy(policy: MagiskPolicy, isLogging: Boolean) = viewModelScope.launch { + db.update(policy) + val str = when { + isLogging -> when { + policy.logging -> R.string.su_snack_log_on + else -> R.string.su_snack_log_off } - is PolicyUpdateEvent.Log -> { - updatePolicy(it.item) - when { - it.item.logging -> R.string.su_snack_log_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 } } - SnackbarEvent(resources.getString(snackStr, it.item.appName)).publish() + SnackbarEvent(resources.getString(str, policy.appName)).publish() } fun togglePolicy(item: PolicyItem, enable: Boolean) { @@ -136,7 +130,7 @@ class SuperuserViewModel( val app = item.item.copy(policy = policy) viewModelScope.launch { - updatePolicy(app) + db.update(app) val res = if (app.policy == MagiskPolicy.ALLOW) R.string.su_snack_grant else R.string.su_snack_deny SnackbarEvent(resources.getString(res).format(item.item.appName)) @@ -152,9 +146,4 @@ class SuperuserViewModel( updateState() } } - - //--- - - private suspend fun updatePolicy(policy: MagiskPolicy) = db.update(policy) - } diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/RxBus.kt b/app/src/main/java/com/topjohnwu/magisk/utils/RxBus.kt deleted file mode 100644 index c27d898b8..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/utils/RxBus.kt +++ /dev/null @@ -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() - - val bus: Observable get() = _bus - - fun post(event: Event) { - _bus.onNext(event) - } - - fun post(event: Int) { - _bus.onNext(SimpleEvent(event)) - } - - inline fun register(noinline predicate: (T) -> Boolean = { true }): Observable { - return bus - .ofType(T::class.java) - .filter(predicate) - } - - fun register(eventId: Int): Observable { - return bus - .ofType(SimpleEvent::class.java) - .map { it.eventId } - .filter { it == eventId } - } - - interface Event - - private class SimpleEvent(val eventId: Int) : Event -} \ No newline at end of file