Magisk/app/src/main/java/com/topjohnwu/magisk/core/download/Subject.kt

64 lines
1.8 KiB
Kotlin
Raw Normal View History

2020-08-19 12:27:12 +02:00
package com.topjohnwu.magisk.core.download
2019-07-23 10:31:59 +02:00
import android.content.Context
2020-08-21 16:36:59 +02:00
import android.net.Uri
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
import com.topjohnwu.magisk.core.model.StubJson
2020-10-11 07:40:57 +02:00
import com.topjohnwu.magisk.core.model.module.OnlineModule
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
private fun cachedFile(name: String) = get<Context>().cachedFile(name).apply { delete() }.toUri()
2020-08-21 15:45:40 +02:00
sealed class Subject : Parcelable {
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
@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 {
MediaStoreUtils.getFile(title).uri
2019-07-23 10:31:59 +02:00
}
}
@Parcelize
2020-02-29 02:44:03 +01:00
class Manager(
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
@IgnoredOnParcel
override val file by lazy {
cachedFile("manager.apk")
}
}
}
sealed class Action : Parcelable {
@Parcelize
object Flash : Action()
@Parcelize
object Download : Action()
2020-01-13 15:01:46 +01:00
}