Move things around

This commit is contained in:
topjohnwu 2019-10-24 05:21:42 -04:00
parent 7fc7809cfc
commit 0b87108174
16 changed files with 21 additions and 27 deletions

View File

@ -15,7 +15,6 @@ import com.topjohnwu.magisk.di.ActivityTracker
import com.topjohnwu.magisk.di.koinModules import com.topjohnwu.magisk.di.koinModules
import com.topjohnwu.magisk.extensions.get import com.topjohnwu.magisk.extensions.get
import com.topjohnwu.magisk.extensions.unwrap import com.topjohnwu.magisk.extensions.unwrap
import com.topjohnwu.magisk.utils.DynAPK
import com.topjohnwu.magisk.utils.RootInit import com.topjohnwu.magisk.utils.RootInit
import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.Shell
import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidContext
@ -25,7 +24,7 @@ import timber.log.Timber
open class App() : Application() { open class App() : Application() {
constructor(o: Any) : this() { constructor(o: Any) : this() {
ClassMap.data = DynAPK.load(o) Info.stub = DynAPK.load(o)
} }
init { init {

View File

@ -23,13 +23,10 @@ import com.topjohnwu.magisk.ui.MainActivity
import com.topjohnwu.magisk.ui.SplashActivity import com.topjohnwu.magisk.ui.SplashActivity
import com.topjohnwu.magisk.ui.flash.FlashActivity import com.topjohnwu.magisk.ui.flash.FlashActivity
import com.topjohnwu.magisk.ui.surequest.SuRequestActivity import com.topjohnwu.magisk.ui.surequest.SuRequestActivity
import com.topjohnwu.magisk.utils.DynAPK
import com.topjohnwu.magisk.utils.currentLocale import com.topjohnwu.magisk.utils.currentLocale
import com.topjohnwu.magisk.utils.defaultLocale import com.topjohnwu.magisk.utils.defaultLocale
import java.util.* import java.util.*
val isRunningAsStub get() = ClassMap.data != null
private val addAssetPath by lazy { private val addAssetPath by lazy {
AssetManager::class.java.getMethod("addAssetPath", String::class.java) AssetManager::class.java.getMethod("addAssetPath", String::class.java)
} }
@ -69,19 +66,19 @@ private fun Resources.patch(config: Configuration = Configuration(configuration)
fun Class<*>.cmp(pkg: String = BuildConfig.APPLICATION_ID): ComponentName { fun Class<*>.cmp(pkg: String = BuildConfig.APPLICATION_ID): ComponentName {
val name = ClassMap[this].name val name = ClassMap[this].name
return ComponentName(pkg, ClassMap.data?.componentMap?.get(name) ?: name) return ComponentName(pkg, Info.stub?.componentMap?.get(name) ?: name)
} }
fun Context.intent(c: Class<*>): Intent { fun Context.intent(c: Class<*>): Intent {
val cls = ClassMap[c] val cls = ClassMap[c]
return ClassMap.data?.let { return Info.stub?.let {
val className = it.componentMap.getOrElse(cls.name) { cls.name } val className = it.componentMap.getOrElse(cls.name) { cls.name }
Intent().setComponent(ComponentName(this, className)) Intent().setComponent(ComponentName(this, className))
} ?: Intent(this, cls) } ?: Intent(this, cls)
} }
fun resolveRes(idx: Int): Int { fun resolveRes(idx: Int): Int {
return ClassMap.data?.resourceMap?.get(idx) ?: when(idx) { return Info.stub?.resourceMap?.get(idx) ?: when(idx) {
DynAPK.NOTIFICATION -> R.drawable.ic_magisk_outline DynAPK.NOTIFICATION -> R.drawable.ic_magisk_outline
DynAPK.DOWNLOAD -> R.drawable.sc_cloud_download DynAPK.DOWNLOAD -> R.drawable.sc_cloud_download
DynAPK.SUPERUSER -> R.drawable.sc_superuser DynAPK.SUPERUSER -> R.drawable.sc_superuser
@ -172,7 +169,7 @@ private class JobSchedulerWrapper(private val base: JobScheduler) : JobScheduler
// We need to patch the component of JobInfo to access WorkManager SystemJobService // We need to patch the component of JobInfo to access WorkManager SystemJobService
val name = service.className val name = service.className
val component = ComponentName(service.packageName, ClassMap.data?.componentMap?.get(name) val component = ComponentName(service.packageName, Info.stub?.componentMap?.get(name)
?: name) ?: name)
// Clone the JobInfo except component // Clone the JobInfo except component
@ -226,7 +223,5 @@ object ClassMap {
SuRequestActivity::class.java to a.m::class.java SuRequestActivity::class.java to a.m::class.java
) )
internal var data: DynAPK.Data? = null
operator fun get(c: Class<*>) = map.getOrElse(c) { throw IllegalArgumentException() } operator fun get(c: Class<*>) = map.getOrElse(c) { throw IllegalArgumentException() }
} }

View File

@ -9,12 +9,15 @@ import com.topjohnwu.magisk.utils.KObservableField
import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.ShellUtils import com.topjohnwu.superuser.ShellUtils
val isRunningAsStub get() = Info.stub != null
object Info { object Info {
val envRef = CachedValue { loadState() } val envRef = CachedValue { loadState() }
val env by envRef // Local val env by envRef // Local
var remote = UpdateInfo() // Remote var remote = UpdateInfo() // Remote
var stub: DynAPK.Data? = null // Stub
var keepVerity = false var keepVerity = false
var keepEnc = false var keepEnc = false

View File

@ -1,7 +1,6 @@
package com.topjohnwu.magisk.base.viewmodel package com.topjohnwu.magisk.base.viewmodel
import android.app.Activity import android.app.Activity
import com.topjohnwu.magisk.Info.isConnected as gIsConnected
import com.topjohnwu.magisk.extensions.doOnSubscribeUi import com.topjohnwu.magisk.extensions.doOnSubscribeUi
import com.topjohnwu.magisk.model.events.BackPressEvent import com.topjohnwu.magisk.model.events.BackPressEvent
import com.topjohnwu.magisk.model.events.PermissionEvent import com.topjohnwu.magisk.model.events.PermissionEvent
@ -9,6 +8,7 @@ import com.topjohnwu.magisk.model.events.ViewActionEvent
import com.topjohnwu.magisk.utils.KObservableField import com.topjohnwu.magisk.utils.KObservableField
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.subjects.PublishSubject import io.reactivex.subjects.PublishSubject
import com.topjohnwu.magisk.Info.isConnected as gIsConnected
abstract class BaseViewModel( abstract class BaseViewModel(

View File

@ -21,8 +21,8 @@ import androidx.annotation.DrawableRes
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toUri import androidx.core.net.toUri
import com.topjohnwu.magisk.Const import com.topjohnwu.magisk.Const
import com.topjohnwu.magisk.FileProvider
import com.topjohnwu.magisk.utils.DynamicClassLoader import com.topjohnwu.magisk.utils.DynamicClassLoader
import com.topjohnwu.magisk.utils.FileProvider
import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.magisk.utils.Utils
import com.topjohnwu.magisk.utils.currentLocale import com.topjohnwu.magisk.utils.currentLocale
import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.Shell

View File

@ -5,7 +5,6 @@ import com.topjohnwu.magisk.extensions.writeTo
import com.topjohnwu.magisk.model.entity.internal.Configuration.APK.Restore import com.topjohnwu.magisk.model.entity.internal.Configuration.APK.Restore
import com.topjohnwu.magisk.model.entity.internal.Configuration.APK.Upgrade import com.topjohnwu.magisk.model.entity.internal.Configuration.APK.Upgrade
import com.topjohnwu.magisk.model.entity.internal.DownloadSubject import com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import com.topjohnwu.magisk.utils.DynAPK
import com.topjohnwu.magisk.utils.PatchAPK import com.topjohnwu.magisk.utils.PatchAPK
import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.Shell
import java.io.File import java.io.File
@ -31,7 +30,7 @@ private fun RemoteFileService.upgrade(apk: File, id: Int) {
// Move to upgrade location // Move to upgrade location
apk.copyTo(DynAPK.update(this), overwrite = true) apk.copyTo(DynAPK.update(this), overwrite = true)
apk.delete() apk.delete()
if (ClassMap.data!!.version < Info.remote.stub.versionCode) { if (Info.stub!!.version < Info.remote.stub.versionCode) {
// We also want to upgrade stub // We also want to upgrade stub
service.fetchFile(Info.remote.stub.link).blockingGet().byteStream().use { service.fetchFile(Info.remote.stub.link).blockingGet().byteStream().use {
it.writeTo(apk) it.writeTo(apk)

View File

@ -208,7 +208,7 @@ class HomeViewModel(
} }
managerCurrentVersion.value = if (isRunningAsStub) MGR_VER_FMT managerCurrentVersion.value = if (isRunningAsStub) MGR_VER_FMT
.format(BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, ClassMap.data!!.version) .format(BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, Info.stub!!.version)
else else
VERSION_FMT.format(BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE) VERSION_FMT.format(BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)
} }
@ -227,7 +227,7 @@ class HomeViewModel(
in Int.MIN_VALUE until 0 -> MagiskState.NOT_INSTALLED //wrong update channel in Int.MIN_VALUE until 0 -> MagiskState.NOT_INSTALLED //wrong update channel
in (BuildConfig.VERSION_CODE + 1) until Int.MAX_VALUE -> MagiskState.OBSOLETE in (BuildConfig.VERSION_CODE + 1) until Int.MAX_VALUE -> MagiskState.OBSOLETE
else -> { else -> {
if (isRunningAsStub && ClassMap.data!!.version < Info.remote.stub.versionCode) if (isRunningAsStub && Info.stub!!.version < Info.remote.stub.versionCode)
MagiskState.OBSOLETE MagiskState.OBSOLETE
else else
MagiskState.UP_TO_DATE MagiskState.UP_TO_DATE

View File

@ -8,7 +8,6 @@ import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.topjohnwu.magisk.ClassMap
import com.topjohnwu.magisk.Const import com.topjohnwu.magisk.Const
import com.topjohnwu.magisk.R import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.base.BaseFragment import com.topjohnwu.magisk.base.BaseFragment

View File

@ -12,7 +12,6 @@ import com.topjohnwu.magisk.*
import com.topjohnwu.magisk.extensions.get import com.topjohnwu.magisk.extensions.get
import com.topjohnwu.magisk.model.receiver.GeneralReceiver import com.topjohnwu.magisk.model.receiver.GeneralReceiver
import com.topjohnwu.magisk.ui.SplashActivity import com.topjohnwu.magisk.ui.SplashActivity
import com.topjohnwu.magisk.utils.DynAPK
object Notifications { object Notifications {

View File

@ -9,7 +9,6 @@ import android.os.Build
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import com.topjohnwu.magisk.* import com.topjohnwu.magisk.*
import com.topjohnwu.magisk.ui.SplashActivity import com.topjohnwu.magisk.ui.SplashActivity
import com.topjohnwu.magisk.utils.DynAPK
import com.topjohnwu.magisk.utils.Utils import com.topjohnwu.magisk.utils.Utils
import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.Shell

View File

@ -1,6 +1,6 @@
package a; package a;
import com.topjohnwu.magisk.utils.FileProvider; import com.topjohnwu.magisk.FileProvider;
public class p extends FileProvider { public class p extends FileProvider {
/* Stub */ /* Stub */

View File

@ -1,4 +1,4 @@
package com.topjohnwu.magisk.utils; package com.topjohnwu.magisk;
import android.content.Context; import android.content.Context;

View File

@ -1,4 +1,4 @@
package com.topjohnwu.magisk.utils; package com.topjohnwu.magisk;
import android.content.ContentProvider; import android.content.ContentProvider;
import android.content.ContentValues; import android.content.ContentValues;

View File

@ -5,6 +5,8 @@ import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import com.topjohnwu.magisk.FileProvider;
import java.io.File; import java.io.File;
public class APKInstall { public class APKInstall {

View File

@ -9,7 +9,6 @@ import android.content.res.Configuration;
import android.os.Build; import android.os.Build;
import android.util.Log; import android.util.Log;
import com.topjohnwu.magisk.utils.DynAPK;
import com.topjohnwu.magisk.utils.DynamicClassLoader; import com.topjohnwu.magisk.utils.DynamicClassLoader;
import java.io.File; import java.io.File;

View File

@ -3,7 +3,7 @@ package com.topjohnwu.magisk;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import static com.topjohnwu.magisk.utils.DynAPK.*; import static com.topjohnwu.magisk.DynAPK.*;
class Mapping { class Mapping {
private static Map<String, String> map = new HashMap<>(); private static Map<String, String> map = new HashMap<>();