forked from MarcoBuster/Magisk
64 lines
1.8 KiB
Kotlin
64 lines
1.8 KiB
Kotlin
package com.topjohnwu.magisk.core.download
|
|
|
|
import android.content.Context
|
|
import android.net.Uri
|
|
import android.os.Parcelable
|
|
import androidx.core.net.toUri
|
|
import com.topjohnwu.magisk.core.Info
|
|
import com.topjohnwu.magisk.core.model.ManagerJson
|
|
import com.topjohnwu.magisk.core.model.StubJson
|
|
import com.topjohnwu.magisk.core.model.module.OnlineModule
|
|
import com.topjohnwu.magisk.core.utils.MediaStoreUtils
|
|
import com.topjohnwu.magisk.ktx.cachedFile
|
|
import com.topjohnwu.magisk.ktx.get
|
|
import kotlinx.parcelize.IgnoredOnParcel
|
|
import kotlinx.parcelize.Parcelize
|
|
|
|
private fun cachedFile(name: String) = get<Context>().cachedFile(name).apply { delete() }.toUri()
|
|
|
|
sealed class Subject : Parcelable {
|
|
|
|
abstract val url: String
|
|
abstract val file: Uri
|
|
abstract val action: Action
|
|
abstract val title: String
|
|
|
|
@Parcelize
|
|
class Module(
|
|
val module: OnlineModule,
|
|
override val action: Action
|
|
) : Subject() {
|
|
override val url: String get() = module.zip_url
|
|
override val title: String get() = module.downloadFilename
|
|
|
|
@IgnoredOnParcel
|
|
override val file by lazy {
|
|
MediaStoreUtils.getFile(title).uri
|
|
}
|
|
}
|
|
|
|
@Parcelize
|
|
class Manager(
|
|
private val app: ManagerJson = Info.remote.app,
|
|
val stub: StubJson = Info.remote.stub
|
|
) : Subject() {
|
|
override val action get() = Action.Download
|
|
override val title: String get() = "MagiskManager-${app.version}(${app.versionCode})"
|
|
override val url: String get() = app.link
|
|
|
|
@IgnoredOnParcel
|
|
override val file by lazy {
|
|
cachedFile("manager.apk")
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
sealed class Action : Parcelable {
|
|
@Parcelize
|
|
object Flash : Action()
|
|
|
|
@Parcelize
|
|
object Download : Action()
|
|
}
|