installer: Inject all installers using hilt
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -9,13 +9,16 @@ import com.aurora.Constants
|
|||||||
import com.aurora.store.data.installer.SessionInstaller
|
import com.aurora.store.data.installer.SessionInstaller
|
||||||
import com.aurora.store.data.room.download.Download
|
import com.aurora.store.data.room.download.Download
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class InstallActivity : AppCompatActivity() {
|
class InstallActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private val TAG = InstallActivity::class.java.simpleName
|
private val TAG = InstallActivity::class.java.simpleName
|
||||||
|
|
||||||
private lateinit var sessionInstaller: SessionInstaller
|
@Inject
|
||||||
|
lateinit var sessionInstaller: SessionInstaller
|
||||||
|
|
||||||
private lateinit var sessionCallback: SessionCallback
|
private lateinit var sessionCallback: SessionCallback
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
@@ -55,7 +58,6 @@ class InstallActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun install(download: Download) {
|
private fun install(download: Download) {
|
||||||
sessionInstaller = SessionInstaller(this)
|
|
||||||
try {
|
try {
|
||||||
sessionInstaller.install(download)
|
sessionInstaller.install(download)
|
||||||
} catch (exception: Exception) {
|
} catch (exception: Exception) {
|
||||||
|
|||||||
@@ -8,11 +8,17 @@ import com.aurora.store.data.room.download.Download
|
|||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
||||||
import com.aurora.store.util.PathUtil
|
import com.aurora.store.util.PathUtil
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.zip.ZipEntry
|
import java.util.zip.ZipEntry
|
||||||
import java.util.zip.ZipOutputStream
|
import java.util.zip.ZipOutputStream
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
class AMInstaller(context: Context) : InstallerBase(context) {
|
@Singleton
|
||||||
|
class AMInstaller @Inject constructor(
|
||||||
|
@ApplicationContext context: Context
|
||||||
|
) : InstallerBase(context) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val AM_PACKAGE_NAME = "io.github.muntashirakon.AppManager"
|
const val AM_PACKAGE_NAME = "io.github.muntashirakon.AppManager"
|
||||||
|
|||||||
@@ -42,8 +42,18 @@ import dagger.hilt.android.qualifiers.ApplicationContext
|
|||||||
import rikka.shizuku.Shizuku
|
import rikka.shizuku.Shizuku
|
||||||
import rikka.sui.Sui
|
import rikka.sui.Sui
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
class AppInstaller @Inject constructor(@ApplicationContext private val context: Context) {
|
@Singleton
|
||||||
|
class AppInstaller @Inject constructor(
|
||||||
|
@ApplicationContext private val context: Context,
|
||||||
|
private val sessionInstaller: SessionInstaller,
|
||||||
|
private val nativeInstaller: NativeInstaller,
|
||||||
|
private val rootInstaller: RootInstaller,
|
||||||
|
private val serviceInstaller: ServiceInstaller,
|
||||||
|
private val amInstaller: AMInstaller,
|
||||||
|
private val shizukuInstaller: ShizukuInstaller
|
||||||
|
) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val EXTRA_DOWNLOAD = "com.aurora.store.data.installer.AppInstaller.EXTRA_DOWNLOAD"
|
const val EXTRA_DOWNLOAD = "com.aurora.store.data.installer.AppInstaller.EXTRA_DOWNLOAD"
|
||||||
@@ -120,69 +130,24 @@ class AppInstaller @Inject constructor(@ApplicationContext private val context:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val choiceAndInstaller = HashMap<Int, IInstaller>()
|
private val defaultInstaller: IInstaller
|
||||||
|
get() = sessionInstaller
|
||||||
|
|
||||||
fun getPreferredInstaller(): IInstaller {
|
fun getPreferredInstaller(): IInstaller {
|
||||||
val prefValue = Preferences.getInteger(
|
return when (Preferences.getInteger(context, PREFERENCE_INSTALLER_ID)) {
|
||||||
context,
|
0 -> sessionInstaller
|
||||||
PREFERENCE_INSTALLER_ID
|
1 -> nativeInstaller
|
||||||
)
|
2 -> if (hasRootAccess()) rootInstaller else defaultInstaller
|
||||||
|
3 -> if (hasAuroraService(context)) serviceInstaller else defaultInstaller
|
||||||
if (choiceAndInstaller.containsKey(prefValue)) {
|
4 -> if (hasAppManager(context)) amInstaller else defaultInstaller
|
||||||
return choiceAndInstaller[prefValue]!!
|
|
||||||
}
|
|
||||||
|
|
||||||
return when (prefValue) {
|
|
||||||
1 -> {
|
|
||||||
val installer = NativeInstaller(context)
|
|
||||||
choiceAndInstaller[prefValue] = installer
|
|
||||||
installer
|
|
||||||
}
|
|
||||||
2 -> {
|
|
||||||
val installer = if (hasRootAccess()) {
|
|
||||||
RootInstaller(context)
|
|
||||||
} else {
|
|
||||||
SessionInstaller(context)
|
|
||||||
}
|
|
||||||
choiceAndInstaller[prefValue] = installer
|
|
||||||
installer
|
|
||||||
}
|
|
||||||
3 -> {
|
|
||||||
val installer = if (hasAuroraService(context)) {
|
|
||||||
ServiceInstaller(context)
|
|
||||||
} else {
|
|
||||||
SessionInstaller(context)
|
|
||||||
}
|
|
||||||
choiceAndInstaller[prefValue] = installer
|
|
||||||
installer
|
|
||||||
}
|
|
||||||
4 -> {
|
|
||||||
val installer = if (hasAppManager(context)) {
|
|
||||||
AMInstaller(context)
|
|
||||||
} else {
|
|
||||||
SessionInstaller(context)
|
|
||||||
}
|
|
||||||
choiceAndInstaller[prefValue] = installer
|
|
||||||
installer
|
|
||||||
}
|
|
||||||
5 -> {
|
5 -> {
|
||||||
if (isOAndAbove()) {
|
if (isOAndAbove() && hasShizukuOrSui(context) && hasShizukuPerm()) {
|
||||||
val installer = if (hasShizukuOrSui(context) && hasShizukuPerm()) {
|
shizukuInstaller
|
||||||
ShizukuInstaller(context)
|
|
||||||
} else {
|
|
||||||
SessionInstaller(context)
|
|
||||||
}
|
|
||||||
choiceAndInstaller[prefValue] = installer
|
|
||||||
installer
|
|
||||||
} else {
|
} else {
|
||||||
SessionInstaller(context)
|
defaultInstaller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> defaultInstaller
|
||||||
val installer = SessionInstaller(context)
|
|
||||||
choiceAndInstaller[prefValue] = installer
|
|
||||||
installer
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,10 +28,16 @@ import com.aurora.store.R
|
|||||||
import com.aurora.store.data.model.Installer
|
import com.aurora.store.data.model.Installer
|
||||||
import com.aurora.store.data.room.download.Download
|
import com.aurora.store.data.room.download.Download
|
||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
@Deprecated("Deprecated in favour of SessionInstaller")
|
@Deprecated("Deprecated in favour of SessionInstaller")
|
||||||
class NativeInstaller(context: Context) : InstallerBase(context) {
|
class NativeInstaller @Inject constructor(
|
||||||
|
@ApplicationContext context: Context
|
||||||
|
) : InstallerBase(context) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
|||||||
@@ -27,10 +27,16 @@ import com.aurora.store.data.room.download.Download
|
|||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
class RootInstaller(context: Context) : InstallerBase(context) {
|
@Singleton
|
||||||
|
class RootInstaller @Inject constructor(
|
||||||
|
@ApplicationContext context: Context
|
||||||
|
) : InstallerBase(context) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
|||||||
@@ -41,15 +41,21 @@ import com.aurora.store.data.model.Installer
|
|||||||
import com.aurora.store.data.room.download.Download
|
import com.aurora.store.data.room.download.Download
|
||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
import com.aurora.store.util.PackageUtil
|
import com.aurora.store.util.PackageUtil
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.LinkedBlockingQueue
|
import java.util.concurrent.LinkedBlockingQueue
|
||||||
import java.util.concurrent.ThreadPoolExecutor
|
import java.util.concurrent.ThreadPoolExecutor
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import java.util.concurrent.atomic.AtomicBoolean
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
@Deprecated("Deprecated in favour of RootInstaller")
|
@Deprecated("Deprecated in favour of RootInstaller")
|
||||||
class ServiceInstaller(context: Context) : InstallerBase(context) {
|
class ServiceInstaller @Inject constructor(
|
||||||
|
@ApplicationContext context: Context
|
||||||
|
) : InstallerBase(context) {
|
||||||
|
|
||||||
private lateinit var serviceConnection: ServiceConnection
|
private lateinit var serviceConnection: ServiceConnection
|
||||||
private val executor = ThreadPoolExecutor(0, 1, 30L, TimeUnit.SECONDS, LinkedBlockingQueue())
|
private val executor = ThreadPoolExecutor(0, 1, 30L, TimeUnit.SECONDS, LinkedBlockingQueue())
|
||||||
|
|||||||
@@ -42,9 +42,15 @@ import com.aurora.store.data.receiver.InstallerStatusReceiver
|
|||||||
import com.aurora.store.data.room.download.Download
|
import com.aurora.store.data.room.download.Download
|
||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
class SessionInstaller(context: Context) : InstallerBase(context) {
|
@Singleton
|
||||||
|
class SessionInstaller @Inject constructor(
|
||||||
|
@ApplicationContext context: Context
|
||||||
|
) : InstallerBase(context) {
|
||||||
|
|
||||||
var parentSessionId by Delegates.notNull<Int>()
|
var parentSessionId by Delegates.notNull<Int>()
|
||||||
|
|
||||||
|
|||||||
@@ -37,12 +37,18 @@ import com.aurora.store.data.receiver.InstallerStatusReceiver
|
|||||||
import com.aurora.store.data.room.download.Download
|
import com.aurora.store.data.room.download.Download
|
||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
||||||
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import dev.rikka.tools.refine.Refine
|
import dev.rikka.tools.refine.Refine
|
||||||
import rikka.shizuku.ShizukuBinderWrapper
|
import rikka.shizuku.ShizukuBinderWrapper
|
||||||
import rikka.shizuku.SystemServiceHelper
|
import rikka.shizuku.SystemServiceHelper
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@Singleton
|
||||||
@RequiresApi(Build.VERSION_CODES.O)
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
class ShizukuInstaller(context: Context) : InstallerBase(context) {
|
class ShizukuInstaller @Inject constructor(
|
||||||
|
@ApplicationContext context: Context
|
||||||
|
) : InstallerBase(context) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val SHIZUKU_PACKAGE_NAME = "moe.shizuku.privileged.api"
|
const val SHIZUKU_PACKAGE_NAME = "moe.shizuku.privileged.api"
|
||||||
|
|||||||
Reference in New Issue
Block a user