diff --git a/app/src/main/java/com/aurora/store/data/installer/AppInstaller.kt b/app/src/main/java/com/aurora/store/data/installer/AppInstaller.kt index 3e6165e22..d7ab30fb4 100644 --- a/app/src/main/java/com/aurora/store/data/installer/AppInstaller.kt +++ b/app/src/main/java/com/aurora/store/data/installer/AppInstaller.kt @@ -21,10 +21,13 @@ package com.aurora.store.data.installer import android.content.Context import android.content.pm.PackageInstaller -import android.os.Build +import com.aurora.extensions.isLAndAbove +import com.aurora.store.BuildConfig import com.aurora.store.R +import com.aurora.store.util.PackageUtil import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID +import com.topjohnwu.superuser.Shell open class AppInstaller private constructor(var context: Context) { @@ -47,6 +50,31 @@ open class AppInstaller private constructor(var context: Context) { } return instance!! } + + fun hasRootAccess(): Boolean { + return Shell.getShell().isRoot + } + + fun hasAuroraService(context: Context): Boolean { + val isInstalled = PackageUtil.isInstalled( + context, + ServiceInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME + ) + + val isCorrectVersionInstalled = + PackageUtil.isInstalled( + context, + ServiceInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME, + if (BuildConfig.VERSION_CODE < 31) 8 else 9 + ) + + return isInstalled && isCorrectVersionInstalled + } + + fun hasAppManager(context: Context): Boolean { + return PackageUtil.isInstalled(context, AMInstaller.AM_PACKAGE_NAME) or + PackageUtil.isInstalled(context, AMInstaller.AM_DEBUG_PACKAGE_NAME) + } } val choiceAndInstaller = HashMap() @@ -68,29 +96,45 @@ open class AppInstaller private constructor(var context: Context) { installer } 2 -> { - val installer = RootInstaller(context) + val installer = if (hasRootAccess()) { + RootInstaller(context) + } else { + getDefaultInstaller(context) + } choiceAndInstaller[prefValue] = installer installer } 3 -> { - val installer = ServiceInstaller(context) + val installer = if (hasAuroraService(context)) { + ServiceInstaller(context) + } else { + getDefaultInstaller(context) + } choiceAndInstaller[prefValue] = installer installer } 4 -> { - val installer = AMInstaller(context) + val installer = if (hasAppManager(context)) { + AMInstaller(context) + } else { + getDefaultInstaller(context) + } choiceAndInstaller[prefValue] = installer installer } - else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - val installer = SessionInstaller(context) - choiceAndInstaller[prefValue] = installer - installer - } else { - val installer = NativeInstaller(context) + else -> { + val installer = getDefaultInstaller(context) choiceAndInstaller[prefValue] = installer installer } } } + + private fun getDefaultInstaller(context: Context): InstallerBase { + return if (isLAndAbove()) { + SessionInstaller(context) + } else { + NativeInstaller(context) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/view/ui/onboarding/InstallerFragment.kt b/app/src/main/java/com/aurora/store/view/ui/onboarding/InstallerFragment.kt index f7b313a01..e3396c04f 100644 --- a/app/src/main/java/com/aurora/store/view/ui/onboarding/InstallerFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/onboarding/InstallerFragment.kt @@ -26,13 +26,12 @@ import android.view.ViewGroup import com.aurora.extensions.isMIUI import com.aurora.extensions.isMiuiOptimizationDisabled import com.aurora.extensions.showDialog -import com.aurora.store.BuildConfig import com.aurora.store.R -import com.aurora.store.data.installer.AMInstaller -import com.aurora.store.data.installer.ServiceInstaller +import com.aurora.store.data.installer.AppInstaller.Companion.hasAppManager +import com.aurora.store.data.installer.AppInstaller.Companion.hasRootAccess +import com.aurora.store.data.installer.AppInstaller.Companion.hasAuroraService import com.aurora.store.data.model.Installer import com.aurora.store.databinding.FragmentOnboardingInstallerBinding -import com.aurora.store.util.PackageUtil import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID import com.aurora.store.util.save @@ -40,7 +39,6 @@ import com.aurora.store.view.epoxy.views.preference.InstallerViewModel_ import com.aurora.store.view.ui.commons.BaseFragment import com.aurora.store.view.ui.sheets.DeviceMiuiSheet import com.google.gson.reflect.TypeToken -import com.topjohnwu.superuser.Shell import java.nio.charset.StandardCharsets @@ -110,7 +108,7 @@ class InstallerFragment : BaseFragment() { save(PREFERENCE_INSTALLER_ID, installerId) } 2 -> { - if (checkRootAvailability()) { + if (hasRootAccess()) { this.installerId = installerId save(PREFERENCE_INSTALLER_ID, installerId) } else { @@ -121,7 +119,7 @@ class InstallerFragment : BaseFragment() { } } 3 -> { - if (checkServicesAvailability()) { + if (hasAuroraService(requireContext())) { this.installerId = installerId save(PREFERENCE_INSTALLER_ID, installerId) } else { @@ -132,7 +130,7 @@ class InstallerFragment : BaseFragment() { } } 4 -> { - if (checkAMAvailability()) { + if (hasAppManager(requireContext())) { this.installerId = installerId save(Preferences.PREFERENCE_INSTALLER_ID, installerId) } else { @@ -162,33 +160,4 @@ class InstallerFragment : BaseFragment() { ) } - private fun checkRootAvailability(): Boolean { - return Shell.getShell().isRoot - } - - private fun checkServicesAvailability(): Boolean { - val isInstalled = PackageUtil.isInstalled( - requireContext(), - ServiceInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME - ) - - val isCorrectVersionInstalled = - PackageUtil.isInstalled( - requireContext(), - ServiceInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME, - if (BuildConfig.VERSION_CODE < 31) 8 else 9 - ) - - return isInstalled && isCorrectVersionInstalled - } - - private fun checkAMAvailability(): Boolean { - return PackageUtil.isInstalled( - requireContext(), - AMInstaller.AM_PACKAGE_NAME - ) or PackageUtil.isInstalled( - requireContext(), - AMInstaller.AM_DEBUG_PACKAGE_NAME - ) - } } \ No newline at end of file