Remove RxBus
This commit is contained in:
parent
8647ba4729
commit
a97d278bcd
@ -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<Context>().packageManager }
|
||||
factory(Protected) { createDEContext(get()) }
|
||||
|
@ -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() }
|
||||
|
@ -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<PolicyItem>() {
|
||||
@ -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) {
|
||||
|
@ -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.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<MagiskRepository>()
|
||||
private val rxBus by inject<RxBus>()
|
||||
|
||||
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))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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<SafetyNetResult>()
|
||||
.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()
|
||||
|
@ -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)
|
||||
|
||||
}
|
||||
|
@ -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