2020-08-19 12:27:12 +02:00
|
|
|
package com.topjohnwu.magisk.core.download
|
2019-07-09 20:08:00 +02:00
|
|
|
|
2019-07-23 10:31:59 +02:00
|
|
|
import android.content.Context
|
2020-08-21 16:36:59 +02:00
|
|
|
import android.net.Uri
|
2019-07-09 20:08:00 +02:00
|
|
|
import android.os.Parcelable
|
2020-08-21 16:36:59 +02:00
|
|
|
import androidx.core.net.toUri
|
2020-01-28 18:49:59 +01:00
|
|
|
import com.topjohnwu.magisk.core.Info
|
|
|
|
import com.topjohnwu.magisk.core.model.ManagerJson
|
2020-08-28 13:46:05 +02:00
|
|
|
import com.topjohnwu.magisk.core.model.StubJson
|
2020-10-11 07:40:57 +02:00
|
|
|
import com.topjohnwu.magisk.core.model.module.OnlineModule
|
2020-08-28 13:46:05 +02:00
|
|
|
import com.topjohnwu.magisk.core.utils.MediaStoreUtils
|
2020-07-11 14:36:31 +02:00
|
|
|
import com.topjohnwu.magisk.ktx.cachedFile
|
|
|
|
import com.topjohnwu.magisk.ktx.get
|
2020-12-07 09:06:02 +01:00
|
|
|
import kotlinx.parcelize.IgnoredOnParcel
|
2020-11-23 21:35:24 +01:00
|
|
|
import kotlinx.parcelize.Parcelize
|
2019-07-09 20:08:00 +02:00
|
|
|
|
2020-08-28 13:46:05 +02:00
|
|
|
private fun cachedFile(name: String) = get<Context>().cachedFile(name).apply { delete() }.toUri()
|
|
|
|
|
2020-08-21 15:45:40 +02:00
|
|
|
sealed class Subject : Parcelable {
|
2019-07-09 20:08:00 +02:00
|
|
|
|
|
|
|
abstract val url: String
|
2020-08-21 16:36:59 +02:00
|
|
|
abstract val file: Uri
|
2020-08-21 15:45:40 +02:00
|
|
|
abstract val action: Action
|
2020-08-21 16:36:59 +02:00
|
|
|
abstract val title: String
|
2019-07-09 20:08:00 +02:00
|
|
|
|
|
|
|
@Parcelize
|
2020-02-29 02:44:03 +01:00
|
|
|
class Module(
|
2020-10-11 07:40:57 +02:00
|
|
|
val module: OnlineModule,
|
2020-08-21 15:45:40 +02:00
|
|
|
override val action: Action
|
|
|
|
) : Subject() {
|
2020-10-10 23:31:30 +02:00
|
|
|
override val url: String get() = module.zip_url
|
2020-08-21 16:36:59 +02:00
|
|
|
override val title: String get() = module.downloadFilename
|
2019-07-23 10:31:59 +02:00
|
|
|
|
|
|
|
@IgnoredOnParcel
|
|
|
|
override val file by lazy {
|
2020-08-22 13:20:18 +02:00
|
|
|
MediaStoreUtils.getFile(title).uri
|
2019-07-23 10:31:59 +02:00
|
|
|
}
|
2019-07-09 20:08:00 +02:00
|
|
|
}
|
|
|
|
|
2019-07-29 09:26:18 +02:00
|
|
|
@Parcelize
|
2020-02-29 02:44:03 +01:00
|
|
|
class Manager(
|
2020-08-28 13:46:05 +02:00
|
|
|
private val app: ManagerJson = Info.remote.app,
|
|
|
|
val stub: StubJson = Info.remote.stub
|
2020-08-21 15:45:40 +02:00
|
|
|
) : Subject() {
|
2020-10-17 12:40:43 +02:00
|
|
|
override val action get() = Action.Download
|
|
|
|
override val title: String get() = "MagiskManager-${app.version}(${app.versionCode})"
|
|
|
|
override val url: String get() = app.link
|
2019-07-29 09:26:18 +02:00
|
|
|
|
|
|
|
@IgnoredOnParcel
|
|
|
|
override val file by lazy {
|
2020-08-28 13:46:05 +02:00
|
|
|
cachedFile("manager.apk")
|
2019-07-29 09:26:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2021-01-22 11:28:53 +01:00
|
|
|
}
|
2019-07-29 09:26:18 +02:00
|
|
|
|
2021-01-22 11:28:53 +01:00
|
|
|
sealed class Action : Parcelable {
|
|
|
|
@Parcelize
|
|
|
|
object Flash : Action()
|
2019-07-09 20:08:00 +02:00
|
|
|
|
2021-01-22 11:28:53 +01:00
|
|
|
@Parcelize
|
|
|
|
object Download : Action()
|
2020-01-13 15:01:46 +01:00
|
|
|
}
|