Replaced all install methods with the download service

This commit is contained in:
Viktor De Pasquale 2019-07-10 18:48:06 +02:00 committed by John Wu
parent f822c1c2e4
commit 88a394836f

View File

@ -1,22 +1,18 @@
package com.topjohnwu.magisk.view.dialogs package com.topjohnwu.magisk.view.dialogs
import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import com.google.android.material.snackbar.Snackbar
import com.topjohnwu.magisk.ClassMap
import com.topjohnwu.magisk.Const import com.topjohnwu.magisk.Const
import com.topjohnwu.magisk.Info
import com.topjohnwu.magisk.R import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.model.download.CompoundDownloadService
import com.topjohnwu.magisk.model.entity.internal.Configuration
import com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import com.topjohnwu.magisk.ui.base.MagiskActivity import com.topjohnwu.magisk.ui.base.MagiskActivity
import com.topjohnwu.magisk.ui.flash.FlashActivity
import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.magisk.utils.Utils
import com.topjohnwu.magisk.view.ProgressNotification
import com.topjohnwu.magisk.view.SnackbarMaker
import com.topjohnwu.net.Networking
import com.topjohnwu.superuser.ShellUtils
import java.io.File
internal class InstallMethodDialog(activity: MagiskActivity<*, *>, options: List<String>) : internal class InstallMethodDialog(activity: MagiskActivity<*, *>, options: List<String>) :
AlertDialog.Builder(activity) { AlertDialog.Builder(activity) {
@ -27,18 +23,22 @@ internal class InstallMethodDialog(activity: MagiskActivity<*, *>, options: List
when (idx) { when (idx) {
0 -> downloadOnly(activity) 0 -> downloadOnly(activity)
1 -> patchBoot(activity) 1 -> patchBoot(activity)
2 -> { 2 -> flash(activity)
val intent = Intent(activity, ClassMap[FlashActivity::class.java])
.putExtra(Const.Key.FLASH_ACTION, Const.Value.FLASH_MAGISK)
activity.startActivity(intent)
}
3 -> installInactiveSlot(activity) 3 -> installInactiveSlot(activity)
} }
} }
} }
private fun patchBoot(activity: MagiskActivity<*, *>) { @SuppressLint("MissingPermission")
activity.withExternalRW { private fun flash(activity: MagiskActivity<*, *>) = activity.withExternalRW {
onSuccess {
val subject = DownloadSubject.Magisk(Configuration.Flash.Primary)
CompoundDownloadService.download(context, subject)
}
}
@SuppressLint("MissingPermission")
private fun patchBoot(activity: MagiskActivity<*, *>) = activity.withExternalRW {
onSuccess { onSuccess {
Utils.toast(R.string.patch_file_msg, Toast.LENGTH_LONG) Utils.toast(R.string.patch_file_msg, Toast.LENGTH_LONG)
val intent = Intent(Intent.ACTION_GET_CONTENT) val intent = Intent(Intent.ACTION_GET_CONTENT)
@ -46,59 +46,31 @@ internal class InstallMethodDialog(activity: MagiskActivity<*, *>, options: List
.addCategory(Intent.CATEGORY_OPENABLE) .addCategory(Intent.CATEGORY_OPENABLE)
activity.startActivityForResult(intent, Const.ID.SELECT_BOOT) { resultCode, data -> activity.startActivityForResult(intent, Const.ID.SELECT_BOOT) { resultCode, data ->
if (resultCode == Activity.RESULT_OK && data != null) { if (resultCode == Activity.RESULT_OK && data != null) {
val i = Intent(this, ClassMap[FlashActivity::class.java]) val safeData = data.data ?: Uri.EMPTY
.setData(data.data) val subject = DownloadSubject.Magisk(Configuration.Patch(safeData))
.putExtra(Const.Key.FLASH_ACTION, Const.Value.PATCH_FILE) CompoundDownloadService.download(activity, subject)
startActivity(i)
}
} }
} }
} }
} }
private fun downloadOnly(activity: MagiskActivity<*, *>) { @SuppressLint("MissingPermission")
activity.withExternalRW { private fun downloadOnly(activity: MagiskActivity<*, *>) = activity.withExternalRW {
onSuccess { onSuccess {
val filename = "Magisk-v${Info.remote.magisk.version}" + val subject = DownloadSubject.Magisk(Configuration.Download)
"(${Info.remote.magisk.versionCode}).zip" CompoundDownloadService.download(activity, subject)
val zip = File(Const.EXTERNAL_PATH, filename)
val cachedZip = File(activity.cacheDir, "magisk.zip")
fun onSuccess() {
SnackbarMaker.make(
activity,
activity.getString(R.string.internal_storage, "/Download/$filename"),
Snackbar.LENGTH_LONG
).show()
}
if (ShellUtils.checkSum("MD5", cachedZip, Info.remote.magisk.hash)) {
cachedZip.copyTo(zip, true)
onSuccess()
} else {
val progress = ProgressNotification(filename)
Networking.get(Info.remote.magisk.link)
.setDownloadProgressListener(progress)
.setErrorHandler { _, _ -> progress.dlFail() }
.getAsFile(zip) {
progress.dlDone()
onSuccess()
}
}
}
} }
} }
@SuppressLint("MissingPermission")
private fun installInactiveSlot(activity: MagiskActivity<*, *>) { private fun installInactiveSlot(activity: MagiskActivity<*, *>) {
CustomAlertDialog(activity) CustomAlertDialog(activity)
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setMessage(R.string.install_inactive_slot_msg) .setMessage(R.string.install_inactive_slot_msg)
.setCancelable(true) .setCancelable(true)
.setPositiveButton(R.string.yes) { _, _ -> .setPositiveButton(R.string.yes) { _, _ ->
val intent = Intent(activity, ClassMap[FlashActivity::class.java]) val subject = DownloadSubject.Magisk(Configuration.Flash.Secondary)
.putExtra(Const.Key.FLASH_ACTION, Const.Value.FLASH_INACTIVE_SLOT) CompoundDownloadService.download(activity, subject)
activity.startActivity(intent)
} }
.setNegativeButton(R.string.no_thanks, null) .setNegativeButton(R.string.no_thanks, null)
.show() .show()