diff --git a/app/src/main/java/com/topjohnwu/magisk/arch/BaseViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/arch/BaseViewModel.kt index b55445e7f..e092ee0d8 100644 --- a/app/src/main/java/com/topjohnwu/magisk/arch/BaseViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/arch/BaseViewModel.kt @@ -7,11 +7,12 @@ import androidx.databinding.PropertyChangeRegistry import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope import androidx.navigation.NavDirections import com.topjohnwu.magisk.R import com.topjohnwu.magisk.databinding.ObservableHost import com.topjohnwu.magisk.events.BackPressEvent +import com.topjohnwu.magisk.events.DialogBuilder +import com.topjohnwu.magisk.events.DialogEvent import com.topjohnwu.magisk.events.NavigationEvent import com.topjohnwu.magisk.events.PermissionEvent import com.topjohnwu.magisk.events.SnackbarEvent @@ -65,13 +66,12 @@ abstract class BaseViewModel : ViewModel(), ObservableHost { fun back() = BackPressEvent().publish() - fun Event.publish() { + fun ViewEvent.publish() { _viewEvents.postValue(this) } - fun Event.publish() { - scope = viewModelScope - _viewEvents.postValue(this) + fun DialogBuilder.show() { + DialogEvent(this).publish() } fun NavDirections.navigate(pop: Boolean = false) { diff --git a/app/src/main/java/com/topjohnwu/magisk/arch/ViewEvent.kt b/app/src/main/java/com/topjohnwu/magisk/arch/ViewEvent.kt index 5bb1c1940..1db4c5d98 100644 --- a/app/src/main/java/com/topjohnwu/magisk/arch/ViewEvent.kt +++ b/app/src/main/java/com/topjohnwu/magisk/arch/ViewEvent.kt @@ -1,7 +1,6 @@ package com.topjohnwu.magisk.arch import android.content.Context -import kotlinx.coroutines.CoroutineScope /** * Class for passing events from ViewModels to Activities/Fragments @@ -9,10 +8,6 @@ import kotlinx.coroutines.CoroutineScope */ abstract class ViewEvent -abstract class ViewEventWithScope: ViewEvent() { - lateinit var scope: CoroutineScope -} - interface ContextExecutor { operator fun invoke(context: Context) } diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/DarkThemeDialog.kt b/app/src/main/java/com/topjohnwu/magisk/dialog/DarkThemeDialog.kt similarity index 91% rename from app/src/main/java/com/topjohnwu/magisk/events/dialog/DarkThemeDialog.kt rename to app/src/main/java/com/topjohnwu/magisk/dialog/DarkThemeDialog.kt index 12648ad4b..63f1b7b27 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/DarkThemeDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/dialog/DarkThemeDialog.kt @@ -1,13 +1,14 @@ -package com.topjohnwu.magisk.events.dialog +package com.topjohnwu.magisk.dialog import android.app.Activity import androidx.appcompat.app.AppCompatDelegate import com.topjohnwu.magisk.R import com.topjohnwu.magisk.arch.UIActivity import com.topjohnwu.magisk.core.Config +import com.topjohnwu.magisk.events.DialogBuilder import com.topjohnwu.magisk.view.MagiskDialog -class DarkThemeDialog : DialogEvent() { +class DarkThemeDialog : DialogBuilder { override fun build(dialog: MagiskDialog) { val activity = dialog.ownerActivity!! diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/EnvFixDialog.kt b/app/src/main/java/com/topjohnwu/magisk/dialog/EnvFixDialog.kt similarity index 94% rename from app/src/main/java/com/topjohnwu/magisk/events/dialog/EnvFixDialog.kt rename to app/src/main/java/com/topjohnwu/magisk/dialog/EnvFixDialog.kt index 9784ebfa0..21fb39efe 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/EnvFixDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/dialog/EnvFixDialog.kt @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk.events.dialog +package com.topjohnwu.magisk.dialog import androidx.lifecycle.lifecycleScope import com.topjohnwu.magisk.BuildConfig @@ -6,11 +6,12 @@ import com.topjohnwu.magisk.R import com.topjohnwu.magisk.core.Info import com.topjohnwu.magisk.core.base.BaseActivity import com.topjohnwu.magisk.core.tasks.MagiskInstaller +import com.topjohnwu.magisk.events.DialogBuilder import com.topjohnwu.magisk.ui.home.HomeViewModel import com.topjohnwu.magisk.view.MagiskDialog import kotlinx.coroutines.launch -class EnvFixDialog(private val vm: HomeViewModel, private val code: Int) : DialogEvent() { +class EnvFixDialog(private val vm: HomeViewModel, private val code: Int) : DialogBuilder { override fun build(dialog: MagiskDialog) { dialog.apply { diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/ConfirmInstallLocalModuleDialog.kt b/app/src/main/java/com/topjohnwu/magisk/dialog/LocalModuleInstallDialog.kt similarity index 88% rename from app/src/main/java/com/topjohnwu/magisk/events/dialog/ConfirmInstallLocalModuleDialog.kt rename to app/src/main/java/com/topjohnwu/magisk/dialog/LocalModuleInstallDialog.kt index be619b620..1049e1710 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/ConfirmInstallLocalModuleDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/dialog/LocalModuleInstallDialog.kt @@ -1,17 +1,18 @@ -package com.topjohnwu.magisk.events.dialog +package com.topjohnwu.magisk.dialog import android.net.Uri import com.topjohnwu.magisk.MainDirections import com.topjohnwu.magisk.R import com.topjohnwu.magisk.core.Const import com.topjohnwu.magisk.core.utils.MediaStoreUtils.displayName +import com.topjohnwu.magisk.events.DialogBuilder import com.topjohnwu.magisk.ui.module.ModuleViewModel import com.topjohnwu.magisk.view.MagiskDialog -class ConfirmInstallLocalModuleDialog( +class LocalModuleInstallDialog( private val viewModel: ModuleViewModel, private val uri: Uri -) : DialogEvent() { +) : DialogBuilder { override fun build(dialog: MagiskDialog) { dialog.apply { setTitle(R.string.confirm_install_title) diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/ManagerInstallDialog.kt b/app/src/main/java/com/topjohnwu/magisk/dialog/ManagerInstallDialog.kt similarity index 96% rename from app/src/main/java/com/topjohnwu/magisk/events/dialog/ManagerInstallDialog.kt rename to app/src/main/java/com/topjohnwu/magisk/dialog/ManagerInstallDialog.kt index 480a666ab..f29c26ee9 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/ManagerInstallDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/dialog/ManagerInstallDialog.kt @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk.events.dialog +package com.topjohnwu.magisk.dialog import com.topjohnwu.magisk.R import com.topjohnwu.magisk.core.Info diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/MarkDownDialog.kt b/app/src/main/java/com/topjohnwu/magisk/dialog/MarkDownDialog.kt similarity index 89% rename from app/src/main/java/com/topjohnwu/magisk/events/dialog/MarkDownDialog.kt rename to app/src/main/java/com/topjohnwu/magisk/dialog/MarkDownDialog.kt index 7c572a969..0fe43b5b0 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/MarkDownDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/dialog/MarkDownDialog.kt @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk.events.dialog +package com.topjohnwu.magisk.dialog import android.view.LayoutInflater import android.widget.TextView @@ -6,6 +6,7 @@ import androidx.annotation.CallSuper import androidx.lifecycle.lifecycleScope import com.topjohnwu.magisk.R import com.topjohnwu.magisk.core.di.ServiceLocator +import com.topjohnwu.magisk.events.DialogBuilder import com.topjohnwu.magisk.view.MagiskDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -13,7 +14,7 @@ import kotlinx.coroutines.withContext import timber.log.Timber import java.io.IOException -abstract class MarkDownDialog : DialogEvent() { +abstract class MarkDownDialog : DialogBuilder { abstract suspend fun getMarkdownText(): String diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/ModuleInstallDialog.kt b/app/src/main/java/com/topjohnwu/magisk/dialog/OnlineModuleInstallDialog.kt similarity index 92% rename from app/src/main/java/com/topjohnwu/magisk/events/dialog/ModuleInstallDialog.kt rename to app/src/main/java/com/topjohnwu/magisk/dialog/OnlineModuleInstallDialog.kt index 88700627b..2ed97705b 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/ModuleInstallDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/dialog/OnlineModuleInstallDialog.kt @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk.events.dialog +package com.topjohnwu.magisk.dialog import com.topjohnwu.magisk.R import com.topjohnwu.magisk.core.di.ServiceLocator @@ -8,7 +8,7 @@ import com.topjohnwu.magisk.core.download.Subject import com.topjohnwu.magisk.core.model.module.OnlineModule import com.topjohnwu.magisk.view.MagiskDialog -class ModuleInstallDialog(private val item: OnlineModule) : MarkDownDialog() { +class OnlineModuleInstallDialog(private val item: OnlineModule) : MarkDownDialog() { private val svc get() = ServiceLocator.networkService diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/SecondSlotWarningDialog.kt b/app/src/main/java/com/topjohnwu/magisk/dialog/SecondSlotWarningDialog.kt similarity index 76% rename from app/src/main/java/com/topjohnwu/magisk/events/dialog/SecondSlotWarningDialog.kt rename to app/src/main/java/com/topjohnwu/magisk/dialog/SecondSlotWarningDialog.kt index 7e4245d8e..3b4385a08 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/SecondSlotWarningDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/dialog/SecondSlotWarningDialog.kt @@ -1,9 +1,10 @@ -package com.topjohnwu.magisk.events.dialog +package com.topjohnwu.magisk.dialog import com.topjohnwu.magisk.R +import com.topjohnwu.magisk.events.DialogBuilder import com.topjohnwu.magisk.view.MagiskDialog -class SecondSlotWarningDialog : DialogEvent() { +class SecondSlotWarningDialog : DialogBuilder { override fun build(dialog: MagiskDialog) { dialog.apply { diff --git a/app/src/main/java/com/topjohnwu/magisk/dialog/SuperuserRevokeDialog.kt b/app/src/main/java/com/topjohnwu/magisk/dialog/SuperuserRevokeDialog.kt new file mode 100644 index 000000000..44b5687bd --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/dialog/SuperuserRevokeDialog.kt @@ -0,0 +1,25 @@ +package com.topjohnwu.magisk.dialog + +import com.topjohnwu.magisk.R +import com.topjohnwu.magisk.events.DialogBuilder +import com.topjohnwu.magisk.view.MagiskDialog + +class SuperuserRevokeDialog( + private val appName: String, + private val onSuccess: () -> Unit +) : DialogBuilder { + + override fun build(dialog: MagiskDialog) { + dialog.apply { + setTitle(R.string.su_revoke_title) + setMessage(R.string.su_revoke_msg, appName) + setButton(MagiskDialog.ButtonType.POSITIVE) { + text = android.R.string.ok + onClick { onSuccess() } + } + setButton(MagiskDialog.ButtonType.NEGATIVE) { + text = android.R.string.cancel + } + } + } +} diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/UninstallDialog.kt b/app/src/main/java/com/topjohnwu/magisk/dialog/UninstallDialog.kt similarity index 92% rename from app/src/main/java/com/topjohnwu/magisk/events/dialog/UninstallDialog.kt rename to app/src/main/java/com/topjohnwu/magisk/dialog/UninstallDialog.kt index bf2ab8f80..cd24280cb 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/UninstallDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/dialog/UninstallDialog.kt @@ -1,16 +1,17 @@ -package com.topjohnwu.magisk.events.dialog +package com.topjohnwu.magisk.dialog import android.app.ProgressDialog import android.content.Context import android.widget.Toast import com.topjohnwu.magisk.R import com.topjohnwu.magisk.arch.NavigationActivity +import com.topjohnwu.magisk.events.DialogBuilder import com.topjohnwu.magisk.ui.flash.FlashFragment import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.magisk.view.MagiskDialog import com.topjohnwu.superuser.Shell -class UninstallDialog : DialogEvent() { +class UninstallDialog : DialogBuilder { override fun build(dialog: MagiskDialog) { dialog.apply { diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/BiometricEvent.kt b/app/src/main/java/com/topjohnwu/magisk/events/BiometricEvent.kt similarity index 71% rename from app/src/main/java/com/topjohnwu/magisk/events/dialog/BiometricEvent.kt rename to app/src/main/java/com/topjohnwu/magisk/events/BiometricEvent.kt index e98a985e2..8cc3f5490 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/BiometricEvent.kt +++ b/app/src/main/java/com/topjohnwu/magisk/events/BiometricEvent.kt @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk.events.dialog +package com.topjohnwu.magisk.events import com.topjohnwu.magisk.arch.ActivityExecutor import com.topjohnwu.magisk.arch.UIActivity @@ -9,8 +9,8 @@ class BiometricEvent( builder: Builder.() -> Unit ) : ViewEvent(), ActivityExecutor { - private var listenerOnFailure: GenericDialogListener = {} - private var listenerOnSuccess: GenericDialogListener = {} + private var listenerOnFailure: () -> Unit = {} + private var listenerOnSuccess: () -> Unit = {} init { builder(Builder()) @@ -26,11 +26,11 @@ class BiometricEvent( inner class Builder internal constructor() { - fun onFailure(listener: GenericDialogListener) { + fun onFailure(listener: () -> Unit) { listenerOnFailure = listener } - fun onSuccess(listener: GenericDialogListener) { + fun onSuccess(listener: () -> Unit) { listenerOnSuccess = listener } } diff --git a/app/src/main/java/com/topjohnwu/magisk/events/ViewEvents.kt b/app/src/main/java/com/topjohnwu/magisk/events/ViewEvents.kt index 77a91d49e..417cda157 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/ViewEvents.kt +++ b/app/src/main/java/com/topjohnwu/magisk/events/ViewEvents.kt @@ -5,10 +5,15 @@ import android.view.View import androidx.annotation.StringRes import androidx.navigation.NavDirections import com.google.android.material.snackbar.Snackbar -import com.topjohnwu.magisk.arch.* +import com.topjohnwu.magisk.arch.ActivityExecutor +import com.topjohnwu.magisk.arch.ContextExecutor +import com.topjohnwu.magisk.arch.NavigationActivity +import com.topjohnwu.magisk.arch.UIActivity +import com.topjohnwu.magisk.arch.ViewEvent import com.topjohnwu.magisk.core.base.ContentResultCallback import com.topjohnwu.magisk.utils.TextHolder import com.topjohnwu.magisk.utils.asText +import com.topjohnwu.magisk.view.MagiskDialog import com.topjohnwu.magisk.view.Shortcuts class PermissionEvent( @@ -95,3 +100,15 @@ class SnackbarEvent( activity.showSnackbar(msg.getText(activity.resources), length, builder) } } + +class DialogEvent( + private val builder: DialogBuilder +) : ViewEvent(), ActivityExecutor { + override fun invoke(activity: UIActivity<*>) { + MagiskDialog(activity).apply(builder::build).show() + } +} + +interface DialogBuilder { + fun build(dialog: MagiskDialog) +} diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/DialogEvent.kt b/app/src/main/java/com/topjohnwu/magisk/events/dialog/DialogEvent.kt deleted file mode 100644 index 9407abaa6..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/DialogEvent.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.topjohnwu.magisk.events.dialog - -import com.topjohnwu.magisk.arch.ActivityExecutor -import com.topjohnwu.magisk.arch.UIActivity -import com.topjohnwu.magisk.arch.ViewEvent -import com.topjohnwu.magisk.view.MagiskDialog - -abstract class DialogEvent : ViewEvent(), ActivityExecutor { - - override fun invoke(activity: UIActivity<*>) { - MagiskDialog(activity).apply(this::build).show() - } - - abstract fun build(dialog: MagiskDialog) - -} - -typealias GenericDialogListener = () -> Unit diff --git a/app/src/main/java/com/topjohnwu/magisk/events/dialog/SuperuserRevokeDialog.kt b/app/src/main/java/com/topjohnwu/magisk/events/dialog/SuperuserRevokeDialog.kt deleted file mode 100644 index 125fb7422..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/events/dialog/SuperuserRevokeDialog.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.topjohnwu.magisk.events.dialog - -import com.topjohnwu.magisk.R -import com.topjohnwu.magisk.view.MagiskDialog - -class SuperuserRevokeDialog( - builder: Builder.() -> Unit -) : DialogEvent() { - - private val callbacks = Builder().apply(builder) - - override fun build(dialog: MagiskDialog) { - dialog.apply { - setTitle(R.string.su_revoke_title) - setMessage(R.string.su_revoke_msg, callbacks.appName) - setButton(MagiskDialog.ButtonType.POSITIVE) { - text = android.R.string.ok - onClick { callbacks.listenerOnSuccess() } - } - setButton(MagiskDialog.ButtonType.NEGATIVE) { - text = android.R.string.cancel - } - } - } - - inner class Builder internal constructor() { - var appName: String = "" - - internal var listenerOnSuccess: GenericDialogListener = {} - - fun onSuccess(listener: GenericDialogListener) { - listenerOnSuccess = listener - } - } -} diff --git a/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt b/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt index 494a323ac..e0c6151b2 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt @@ -183,12 +183,8 @@ fun ApplicationInfo.getLabel(pm: PackageManager): String { fun Context.unwrap(): Context { var context = this - while (true) { - if (context is ContextWrapper) - context = context.baseContext - else - break - } + while (context is ContextWrapper) + context = context.baseContext return context } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeFragment.kt b/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeFragment.kt index 69da8e936..72c52c7c7 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeFragment.kt @@ -16,7 +16,6 @@ import com.topjohnwu.magisk.arch.viewModel import com.topjohnwu.magisk.core.Info import com.topjohnwu.magisk.core.download.DownloadService import com.topjohnwu.magisk.databinding.FragmentHomeMd2Binding -import com.topjohnwu.magisk.events.RebootEvent class HomeFragment : BaseFragment(), MenuProvider { @@ -69,7 +68,7 @@ class HomeFragment : BaseFragment(), MenuProvider { when (item.itemId) { R.id.action_settings -> HomeFragmentDirections.actionHomeFragmentToSettingsFragment().navigate() - R.id.action_reboot -> activity?.let { RebootEvent.inflateMenu(it).show() } + R.id.action_reboot -> activity?.let { RebootMenu.inflate(it).show() } else -> return super.onOptionsItemSelected(item) } return true diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt index f08474bd3..6ee637405 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt @@ -6,7 +6,11 @@ import androidx.databinding.Bindable import com.topjohnwu.magisk.BR import com.topjohnwu.magisk.BuildConfig import com.topjohnwu.magisk.R -import com.topjohnwu.magisk.arch.* +import com.topjohnwu.magisk.arch.ActivityExecutor +import com.topjohnwu.magisk.arch.AsyncLoadViewModel +import com.topjohnwu.magisk.arch.ContextExecutor +import com.topjohnwu.magisk.arch.UIActivity +import com.topjohnwu.magisk.arch.ViewEvent import com.topjohnwu.magisk.core.Config import com.topjohnwu.magisk.core.Info import com.topjohnwu.magisk.core.download.Subject @@ -14,10 +18,10 @@ import com.topjohnwu.magisk.core.download.Subject.App import com.topjohnwu.magisk.core.repository.NetworkService import com.topjohnwu.magisk.databinding.bindExtra import com.topjohnwu.magisk.databinding.set +import com.topjohnwu.magisk.dialog.EnvFixDialog +import com.topjohnwu.magisk.dialog.ManagerInstallDialog +import com.topjohnwu.magisk.dialog.UninstallDialog import com.topjohnwu.magisk.events.SnackbarEvent -import com.topjohnwu.magisk.events.dialog.EnvFixDialog -import com.topjohnwu.magisk.events.dialog.ManagerInstallDialog -import com.topjohnwu.magisk.events.dialog.UninstallDialog import com.topjohnwu.magisk.ktx.await import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.magisk.utils.asText @@ -111,14 +115,14 @@ class HomeViewModel( override fun invoke(context: Context) = Utils.openLink(context, link.toUri()) }.publish() - fun onDeletePressed() = UninstallDialog().publish() + fun onDeletePressed() = UninstallDialog().show() fun onManagerPressed() = when (appState) { State.LOADING -> SnackbarEvent(R.string.loading).publish() State.INVALID -> SnackbarEvent(R.string.no_connection).publish() else -> withExternalRW { withInstallPermission { - ManagerInstallDialog().publish() + ManagerInstallDialog().show() } } } @@ -137,7 +141,7 @@ class HomeViewModel( val cmd = "env_check ${Info.env.versionString} ${Info.env.versionCode}" val code = Shell.cmd(cmd).await().code if (code != 0) { - EnvFixDialog(this, code).publish() + EnvFixDialog(this, code).show() } checkedEnv = true } diff --git a/app/src/main/java/com/topjohnwu/magisk/events/RebootEvent.kt b/app/src/main/java/com/topjohnwu/magisk/ui/home/RebootMenu.kt similarity index 89% rename from app/src/main/java/com/topjohnwu/magisk/events/RebootEvent.kt rename to app/src/main/java/com/topjohnwu/magisk/ui/home/RebootMenu.kt index 7197c36ff..7134e0df7 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/RebootEvent.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/home/RebootMenu.kt @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk.events +package com.topjohnwu.magisk.ui.home import android.os.Build import android.os.PowerManager @@ -10,7 +10,7 @@ import com.topjohnwu.magisk.R import com.topjohnwu.magisk.core.base.BaseActivity import com.topjohnwu.magisk.ktx.reboot as systemReboot -object RebootEvent { +object RebootMenu { private fun reboot(item: MenuItem): Boolean { when (item.itemId) { @@ -25,14 +25,14 @@ object RebootEvent { return true } - fun inflateMenu(activity: BaseActivity): PopupMenu { + fun inflate(activity: BaseActivity): PopupMenu { val themeWrapper = ContextThemeWrapper(activity, R.style.Foundation_PopupMenu) val menu = PopupMenu(themeWrapper, activity.findViewById(R.id.action_reboot)) activity.menuInflater.inflate(R.menu.menu_reboot, menu.menu) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && activity.getSystemService()?.isRebootingUserspaceSupported == true) menu.menu.findItem(R.id.action_reboot_userspace).isVisible = true - menu.setOnMenuItemClickListener(::reboot) + menu.setOnMenuItemClickListener(RebootMenu::reboot) return menu } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt index 2c571dc9f..ddf54ead5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt @@ -22,8 +22,8 @@ import com.topjohnwu.magisk.core.di.AppContext import com.topjohnwu.magisk.core.di.ServiceLocator import com.topjohnwu.magisk.core.repository.NetworkService import com.topjohnwu.magisk.databinding.set +import com.topjohnwu.magisk.dialog.SecondSlotWarningDialog import com.topjohnwu.magisk.events.GetContentEvent -import com.topjohnwu.magisk.events.dialog.SecondSlotWarningDialog import com.topjohnwu.magisk.ui.flash.FlashFragment import com.topjohnwu.magisk.utils.Utils import kotlinx.coroutines.Dispatchers @@ -57,7 +57,7 @@ class InstallViewModel( GetContentEvent("*/*", UriCallback()).publish() } R.id.method_inactive_slot -> { - SecondSlotWarningDialog().publish() + SecondSlotWarningDialog().show() } } } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt index fd02f57a1..65ba2b459 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt @@ -15,10 +15,10 @@ import com.topjohnwu.magisk.databinding.MergeObservableList import com.topjohnwu.magisk.databinding.RvItem import com.topjohnwu.magisk.databinding.bindExtra import com.topjohnwu.magisk.databinding.set +import com.topjohnwu.magisk.dialog.LocalModuleInstallDialog +import com.topjohnwu.magisk.dialog.OnlineModuleInstallDialog import com.topjohnwu.magisk.events.GetContentEvent import com.topjohnwu.magisk.events.SnackbarEvent -import com.topjohnwu.magisk.events.dialog.ConfirmInstallLocalModuleDialog -import com.topjohnwu.magisk.events.dialog.ModuleInstallDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.parcelize.Parcelize @@ -75,7 +75,7 @@ class ModuleViewModel : AsyncLoadViewModel() { fun downloadPressed(item: OnlineModule?) = if (item != null && Info.isConnected.value == true) { - withExternalRW { ModuleInstallDialog(item).publish() } + withExternalRW { OnlineModuleInstallDialog(item).show() } } else { SnackbarEvent(R.string.no_connection).publish() } @@ -85,7 +85,7 @@ class ModuleViewModel : AsyncLoadViewModel() { } fun requestInstallLocalModule(uri: Uri) { - ConfirmInstallLocalModuleDialog(this, uri).publish() + LocalModuleInstallDialog(this, uri).show() } @Parcelize diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt index 0a74bd063..0c6f01488 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt @@ -16,8 +16,8 @@ import com.topjohnwu.magisk.core.isRunningAsStub import com.topjohnwu.magisk.core.tasks.HideAPK import com.topjohnwu.magisk.databinding.bindExtra import com.topjohnwu.magisk.events.AddHomeIconEvent +import com.topjohnwu.magisk.events.BiometricEvent import com.topjohnwu.magisk.events.SnackbarEvent -import com.topjohnwu.magisk.events.dialog.BiometricEvent import com.topjohnwu.magisk.ktx.activity import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.superuser.Shell 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 19da7bf46..46ae5cdc7 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 @@ -16,9 +16,9 @@ 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.databinding.* +import com.topjohnwu.magisk.dialog.SuperuserRevokeDialog +import com.topjohnwu.magisk.events.BiometricEvent import com.topjohnwu.magisk.events.SnackbarEvent -import com.topjohnwu.magisk.events.dialog.BiometricEvent -import com.topjohnwu.magisk.events.dialog.SuperuserRevokeDialog import com.topjohnwu.magisk.ktx.getLabel import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.magisk.utils.asText @@ -116,10 +116,7 @@ class SuperuserViewModel( onSuccess { updateState() } }.publish() } else { - SuperuserRevokeDialog { - appName = item.title - onSuccess { updateState() } - }.publish() + SuperuserRevokeDialog(item.title) { updateState() }.show() } } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/surequest/SuRequestViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/surequest/SuRequestViewModel.kt index fd8a5c128..4f74d3845 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/surequest/SuRequestViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/surequest/SuRequestViewModel.kt @@ -27,9 +27,9 @@ import com.topjohnwu.magisk.core.model.su.SuPolicy.Companion.DENY import com.topjohnwu.magisk.core.su.SuRequestHandler import com.topjohnwu.magisk.core.utils.BiometricHelper import com.topjohnwu.magisk.databinding.set +import com.topjohnwu.magisk.events.BiometricEvent import com.topjohnwu.magisk.events.DieEvent import com.topjohnwu.magisk.events.ShowUIEvent -import com.topjohnwu.magisk.events.dialog.BiometricEvent import com.topjohnwu.magisk.ktx.getLabel import com.topjohnwu.magisk.utils.TextHolder import com.topjohnwu.magisk.utils.Utils diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/theme/ThemeViewModel.kt b/app/src/main/java/com/topjohnwu/magisk/ui/theme/ThemeViewModel.kt index f1722a8f3..386099406 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/theme/ThemeViewModel.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/theme/ThemeViewModel.kt @@ -2,8 +2,8 @@ package com.topjohnwu.magisk.ui.theme import com.topjohnwu.magisk.arch.BaseViewModel import com.topjohnwu.magisk.core.Config +import com.topjohnwu.magisk.dialog.DarkThemeDialog import com.topjohnwu.magisk.events.RecreateEvent -import com.topjohnwu.magisk.events.dialog.DarkThemeDialog import com.topjohnwu.magisk.view.TappableHeadlineItem class ThemeViewModel : BaseViewModel(), TappableHeadlineItem.Listener { @@ -11,7 +11,7 @@ class ThemeViewModel : BaseViewModel(), TappableHeadlineItem.Listener { val themeHeadline = TappableHeadlineItem.ThemeMode override fun onItemPressed(item: TappableHeadlineItem) = when (item) { - is TappableHeadlineItem.ThemeMode -> DarkThemeDialog().publish() + is TappableHeadlineItem.ThemeMode -> DarkThemeDialog().show() } fun saveTheme(theme: Theme) {