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 ...@@ -15,6 +15,8 @@ import com.topjohnwu.magisk.model.entity.ManagerJson
import com.topjohnwu.magisk.model.entity.UpdateInfo import com.topjohnwu.magisk.model.entity.UpdateInfo
import com.topjohnwu.magisk.model.entity.recycler.HomeItem import com.topjohnwu.magisk.model.entity.recycler.HomeItem
import com.topjohnwu.magisk.model.events.OpenInappLinkEvent 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.model.observer.Observer
import com.topjohnwu.magisk.redesign.compat.CompatViewModel import com.topjohnwu.magisk.redesign.compat.CompatViewModel
import com.topjohnwu.magisk.ui.home.MagiskState import com.topjohnwu.magisk.ui.home.MagiskState
...@@ -50,11 +52,10 @@ class HomeViewModel( ...@@ -50,11 +52,10 @@ class HomeViewModel(
val stateVersionUpdateManager = KObservableField("") val stateVersionUpdateManager = KObservableField("")
val stateHideManagerName = R.string.manager.res().let { val stateHideManagerName = R.string.manager.res().let {
val result = R.string.manager.res()
if (!statePackageOriginal) { if (!statePackageOriginal) {
result.replaceRandomWithSpecial(3) it.replaceRandomWithSpecial(3)
} else { } else {
result it
} }
} }
...@@ -102,9 +103,14 @@ class HomeViewModel( ...@@ -102,9 +103,14 @@ class HomeViewModel(
} }
} }
fun onDeletePressed() {}
fun onLinkPressed(link: String) = OpenInappLinkEvent(link).publish() fun onLinkPressed(link: String) = OpenInappLinkEvent(link).publish()
fun onDeletePressed() {}
fun onManagerPressed() = ManagerInstallDialog().publish()
fun onMagiskPressed() = MagiskInstallDialog().publish()
} }
@Suppress("unused") @Suppress("unused")
......
...@@ -58,10 +58,13 @@ class MagiskDialog @JvmOverloads constructor( ...@@ -58,10 +58,13 @@ class MagiskDialog @JvmOverloads constructor(
val isEnabled = KObservableField(true) val isEnabled = KObservableField(true)
var onClickAction: OnDialogButtonClickListener = {} var onClickAction: OnDialogButtonClickListener = {}
var preventDismiss = false
fun clicked() { fun clicked() {
onClickAction(this@MagiskDialog) onClickAction(this@MagiskDialog)
dismiss() if (!preventDismiss) {
dismiss()
}
} }
} }
...@@ -86,6 +89,11 @@ class MagiskDialog @JvmOverloads constructor( ...@@ -86,6 +89,11 @@ class MagiskDialog @JvmOverloads constructor(
set(value) { set(value) {
button.isEnabled.value = value button.isEnabled.value = value
} }
var preventDismiss: Boolean
get() = button.preventDismiss
set(value) {
button.preventDismiss = value
}
fun onClick(listener: OnDialogButtonClickListener) { fun onClick(listener: OnDialogButtonClickListener) {
button.onClickAction = listener button.onClickAction = listener
......
...@@ -109,6 +109,7 @@ ...@@ -109,6 +109,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:onClick="@{() -> viewModel.onMagiskPressed()}"
android:text="@string/update" android:text="@string/update"
app:icon="@drawable/ic_update_md2" app:icon="@drawable/ic_update_md2"
app:iconGravity="textEnd" app:iconGravity="textEnd"
...@@ -123,6 +124,7 @@ ...@@ -123,6 +124,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:onClick="@{() -> viewModel.onMagiskPressed()}"
android:text="@string/install" android:text="@string/install"
app:icon="@drawable/ic_install" app:icon="@drawable/ic_install"
app:iconGravity="textEnd" app:iconGravity="textEnd"
...@@ -208,6 +210,7 @@ ...@@ -208,6 +210,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:onClick="@{() -> viewModel.onManagerPressed()}"
android:text="@string/update" android:text="@string/update"
app:icon="@drawable/ic_update_md2" app:icon="@drawable/ic_update_md2"
app:iconGravity="textEnd" app:iconGravity="textEnd"
...@@ -220,6 +223,7 @@ ...@@ -220,6 +223,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:onClick="@{() -> viewModel.onManagerPressed()}"
android:text="@string/install" android:text="@string/install"
app:icon="@drawable/ic_install" app:icon="@drawable/ic_install"
app:iconGravity="textEnd" 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