installer: Inject all installers using hilt

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-05-08 14:31:27 +05:30
parent 81b0fa9533
commit 8360274841
8 changed files with 69 additions and 66 deletions

View File

@@ -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) {

View File

@@ -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"

View File

@@ -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
}
} }
} }
} }

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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())

View File

@@ -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>()

View File

@@ -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"