Commit 4292ddd0 authored by Viktor De Pasquale's avatar Viktor De Pasquale

Added custom install dialogs

parent 4a68fd65
package com.topjohnwu.magisk.model.events.dialog
import android.content.Context
import com.skoumal.teanity.viewevents.ViewEvent
import com.topjohnwu.magisk.model.events.ContextExecutor
import com.topjohnwu.magisk.view.MagiskDialog
abstract class DialogEvent : ViewEvent(), ContextExecutor {
override fun invoke(context: Context) {
MagiskDialog(context).apply(this::build).reveal()
}
abstract fun build(dialog: MagiskDialog)
}
\ No newline at end of file
package com.topjohnwu.magisk.model.events.dialog
import com.topjohnwu.magisk.Info
import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.extensions.res
import com.topjohnwu.magisk.model.events.OpenInappLinkEvent
import com.topjohnwu.magisk.view.MagiskDialog
import com.topjohnwu.magisk.view.MarkDownWindow
import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.ShellUtils
class MagiskInstallDialog : DialogEvent() {
override fun build(dialog: MagiskDialog) {
with(dialog) {
val filename =
"Magisk v${Info.remote.magisk.version}(${Info.remote.magisk.versionCode})"
applyTitle(R.string.repo_install_title.res(R.string.magisk.res()))
applyMessage(R.string.repo_install_msg.res(filename))
setCancelable(true)
applyButton(MagiskDialog.ButtonType.POSITIVE) {
titleRes = R.string.install
preventDismiss = true
onClick {
updateForInstallMethod(dialog)
}
}
if (Info.remote.magisk.note.isEmpty()) return
applyButton(MagiskDialog.ButtonType.NEGATIVE) {
titleRes = R.string.release_notes
onClick {
if (Info.remote.magisk.note.contains("forum.xda-developers")) {
OpenInappLinkEvent(Info.remote.magisk.note).invoke(context)
} else {
MarkDownWindow.show(context, null, Info.remote.magisk.note)
}
}
}
}
}
private fun updateForInstallMethod(dialog: MagiskDialog) {
with(dialog) {
applyTitle(R.string.select_method)
applyMessage("")
applyButton(MagiskDialog.ButtonType.POSITIVE) {
titleRes = R.string.download_zip_only
preventDismiss = false
onClick {
TODO()
}
}
applyButton(MagiskDialog.ButtonType.NEUTRAL) {
titleRes = R.string.select_patch_file
onClick {
TODO()
}
}
if (!Shell.rootAccess()) return
applyButton(MagiskDialog.ButtonType.NEGATIVE) {
titleRes = R.string.direct_install
onClick {
TODO()
}
}
if (!isABDevice()) return
applyButton(MagiskDialog.ButtonType.IDGAF) {
titleRes = R.string.install_inactive_slot
onClick {
TODO()
}
}
}
}
private fun isABDevice() = ShellUtils
.fastCmd("grep_prop ro.build.ab_update")
.let { it.isNotEmpty() && it.toBoolean() }
}
\ No newline at end of file
package com.topjohnwu.magisk.model.events.dialog
import com.topjohnwu.magisk.Info
import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.extensions.res
import com.topjohnwu.magisk.model.download.DownloadService
import com.topjohnwu.magisk.model.entity.internal.Configuration
import com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import com.topjohnwu.magisk.view.MagiskDialog
import com.topjohnwu.magisk.view.MarkDownWindow
class ManagerInstallDialog : DialogEvent() {
override fun build(dialog: MagiskDialog) {
with(dialog) {
val subject = DownloadSubject.Manager(Configuration.APK.Upgrade)
applyTitle(R.string.repo_install_title.res(R.string.app_name.res()))
applyMessage(R.string.repo_install_msg.res(subject.title))
setCancelable(true)
applyButton(MagiskDialog.ButtonType.POSITIVE) {
titleRes = R.string.install
onClick { DownloadService(context) { this.subject = subject } }
}
if (Info.remote.app.note.isEmpty()) return
applyButton(MagiskDialog.ButtonType.NEGATIVE) {
titleRes = R.string.app_changelog
onClick { MarkDownWindow.show(context, null, Info.remote.app.note) }
}
}
}
}
\ No newline at end of file
......@@ -15,6 +15,8 @@ import com.topjohnwu.magisk.model.entity.ManagerJson
import com.topjohnwu.magisk.model.entity.UpdateInfo
import com.topjohnwu.magisk.model.entity.recycler.HomeItem
import com.topjohnwu.magisk.model.events.OpenInappLinkEvent
import com.topjohnwu.magisk.model.events.dialog.MagiskInstallDialog
import com.topjohnwu.magisk.model.events.dialog.ManagerInstallDialog
import com.topjohnwu.magisk.model.observer.Observer
import com.topjohnwu.magisk.redesign.compat.CompatViewModel
import com.topjohnwu.magisk.ui.home.MagiskState
......@@ -50,11 +52,10 @@ class HomeViewModel(
val stateVersionUpdateManager = KObservableField("")
val stateHideManagerName = R.string.manager.res().let {
val result = R.string.manager.res()
if (!statePackageOriginal) {
result.replaceRandomWithSpecial(3)
it.replaceRandomWithSpecial(3)
} else {
result
it
}
}
......@@ -102,9 +103,14 @@ class HomeViewModel(
}
}
fun onDeletePressed() {}
fun onLinkPressed(link: String) = OpenInappLinkEvent(link).publish()
fun onDeletePressed() {}
fun onManagerPressed() = ManagerInstallDialog().publish()
fun onMagiskPressed() = MagiskInstallDialog().publish()
}
@Suppress("unused")
......
......@@ -58,10 +58,13 @@ class MagiskDialog @JvmOverloads constructor(
val isEnabled = KObservableField(true)
var onClickAction: OnDialogButtonClickListener = {}
var preventDismiss = false
fun clicked() {
onClickAction(this@MagiskDialog)
dismiss()
if (!preventDismiss) {
dismiss()
}
}
}
......@@ -86,6 +89,11 @@ class MagiskDialog @JvmOverloads constructor(
set(value) {
button.isEnabled.value = value
}
var preventDismiss: Boolean
get() = button.preventDismiss
set(value) {
button.preventDismiss = value
}
fun onClick(listener: OnDialogButtonClickListener) {
button.onClickAction = listener
......
......@@ -109,6 +109,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="@{() -> viewModel.onMagiskPressed()}"
android:text="@string/update"
app:icon="@drawable/ic_update_md2"
app:iconGravity="textEnd"
......@@ -123,6 +124,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="@{() -> viewModel.onMagiskPressed()}"
android:text="@string/install"
app:icon="@drawable/ic_install"
app:iconGravity="textEnd"
......@@ -208,6 +210,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="@{() -> viewModel.onManagerPressed()}"
android:text="@string/update"
app:icon="@drawable/ic_update_md2"
app:iconGravity="textEnd"
......@@ -220,6 +223,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="@{() -> viewModel.onManagerPressed()}"
android:text="@string/install"
app:icon="@drawable/ic_install"
app:iconGravity="textEnd"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment