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 0c8a51c58..43aa7be21 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 @@ -20,26 +20,21 @@ package com.aurora.store.data.installer -import android.app.NotificationManager import android.content.Context import android.content.Intent -import android.content.pm.PackageInstaller import android.content.pm.PackageManager import android.net.Uri import android.os.Build import androidx.annotation.RequiresApi -import androidx.core.content.getSystemService import androidx.core.content.pm.PackageInfoCompat import com.aurora.extensions.getUpdateOwnerPackageNameCompat import com.aurora.extensions.isOAndAbove import com.aurora.extensions.isPAndAbove import com.aurora.extensions.isSAndAbove import com.aurora.store.BuildConfig -import com.aurora.store.R import com.aurora.store.data.installer.base.IInstaller import com.aurora.store.data.model.Installer import com.aurora.store.data.model.InstallerInfo -import com.aurora.store.util.NotificationUtil import com.aurora.store.util.PackageUtil import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID @@ -128,24 +123,6 @@ class AppInstaller @Inject constructor( } } - fun notifyInstallation(context: Context, displayName: String, packageName: String) { - val notificationManager = context.getSystemService() - val notification = NotificationUtil.getInstallNotification(context, displayName, packageName) - notificationManager!!.notify(packageName.hashCode(), notification) - } - - fun getErrorString(context: Context, status: Int): String { - return when (status) { - PackageInstaller.STATUS_FAILURE_ABORTED -> context.getString(R.string.installer_status_user_action) - PackageInstaller.STATUS_FAILURE_BLOCKED -> context.getString(R.string.installer_status_failure_blocked) - PackageInstaller.STATUS_FAILURE_CONFLICT -> context.getString(R.string.installer_status_failure_conflict) - PackageInstaller.STATUS_FAILURE_INCOMPATIBLE -> context.getString(R.string.installer_status_failure_incompatible) - PackageInstaller.STATUS_FAILURE_INVALID -> context.getString(R.string.installer_status_failure_invalid) - PackageInstaller.STATUS_FAILURE_STORAGE -> context.getString(R.string.installer_status_failure_storage) - else -> context.getString(R.string.installer_status_failure) - } - } - fun hasRootAccess(): Boolean { return Shell.getShell().isRoot } diff --git a/app/src/main/java/com/aurora/store/data/installer/ServiceInstaller.kt b/app/src/main/java/com/aurora/store/data/installer/ServiceInstaller.kt index 0257bb717..56c2f5e5e 100644 --- a/app/src/main/java/com/aurora/store/data/installer/ServiceInstaller.kt +++ b/app/src/main/java/com/aurora/store/data/installer/ServiceInstaller.kt @@ -234,14 +234,7 @@ class ServiceInstaller @Inject constructor( ) } - else -> { - val error = AppInstaller.getErrorString( - context, - returnCode - ) - - postError(packageName, error, extra) - } + else -> postError(packageName, getErrorString(context, returnCode), extra) } if (::serviceConnection.isInitialized) { context.unbindService(serviceConnection) @@ -266,14 +259,7 @@ class ServiceInstaller @Inject constructor( if (packageName == download?.packageName) onInstallationSuccess() } - else -> { - val error = AppInstaller.getErrorString( - context, - returnCode - ) - - postError(packageName, error, extra) - } + else -> postError(packageName, getErrorString(context, returnCode), extra) } if (::serviceConnection.isInitialized) { context.unbindService(serviceConnection) diff --git a/app/src/main/java/com/aurora/store/data/installer/base/InstallerBase.kt b/app/src/main/java/com/aurora/store/data/installer/base/InstallerBase.kt index 0ca3c2301..5627ce2cd 100644 --- a/app/src/main/java/com/aurora/store/data/installer/base/InstallerBase.kt +++ b/app/src/main/java/com/aurora/store/data/installer/base/InstallerBase.kt @@ -19,15 +19,20 @@ package com.aurora.store.data.installer.base +import android.app.NotificationManager import android.content.Context +import android.content.pm.PackageInstaller import android.net.Uri import android.util.Log import androidx.core.content.FileProvider +import androidx.core.content.getSystemService import com.aurora.store.AuroraApp import com.aurora.store.BuildConfig +import com.aurora.store.R import com.aurora.store.data.event.InstallerEvent import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.room.download.Download +import com.aurora.store.util.NotificationUtil import com.aurora.store.util.PathUtil import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences.PREFERENCE_AUTO_DELETE @@ -35,6 +40,26 @@ import java.io.File abstract class InstallerBase(private val context: Context) : IInstaller { + companion object { + fun notifyInstallation(context: Context, displayName: String, packageName: String) { + val notificationManager = context.getSystemService() + val notification = NotificationUtil.getInstallNotification(context, displayName, packageName) + notificationManager!!.notify(packageName.hashCode(), notification) + } + + fun getErrorString(context: Context, status: Int): String { + return when (status) { + PackageInstaller.STATUS_FAILURE_ABORTED -> context.getString(R.string.installer_status_user_action) + PackageInstaller.STATUS_FAILURE_BLOCKED -> context.getString(R.string.installer_status_failure_blocked) + PackageInstaller.STATUS_FAILURE_CONFLICT -> context.getString(R.string.installer_status_failure_conflict) + PackageInstaller.STATUS_FAILURE_INCOMPATIBLE -> context.getString(R.string.installer_status_failure_incompatible) + PackageInstaller.STATUS_FAILURE_INVALID -> context.getString(R.string.installer_status_failure_invalid) + PackageInstaller.STATUS_FAILURE_STORAGE -> context.getString(R.string.installer_status_failure_storage) + else -> context.getString(R.string.installer_status_failure) + } + } + } + private val TAG = InstallerBase::class.java.simpleName var download: Download? = null @@ -58,7 +83,7 @@ abstract class InstallerBase(private val context: Context) : IInstaller { fun onInstallationSuccess() { download?.let { - AppInstaller.notifyInstallation(context, it.displayName, it.packageName) + notifyInstallation(context, it.displayName, it.packageName) if (Preferences.getBoolean(context, PREFERENCE_AUTO_DELETE)) { PathUtil.getAppDownloadDir(context, it.packageName, it.versionCode) .deleteRecursively() diff --git a/app/src/main/java/com/aurora/store/data/receiver/InstallerStatusReceiver.kt b/app/src/main/java/com/aurora/store/data/receiver/InstallerStatusReceiver.kt index 07dcd614d..b5f713f7a 100644 --- a/app/src/main/java/com/aurora/store/data/receiver/InstallerStatusReceiver.kt +++ b/app/src/main/java/com/aurora/store/data/receiver/InstallerStatusReceiver.kt @@ -30,11 +30,11 @@ import com.aurora.extensions.runOnUiThread import com.aurora.store.AuroraApp import com.aurora.store.R import com.aurora.store.data.event.InstallerEvent -import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.installer.AppInstaller.Companion.ACTION_INSTALL_STATUS import com.aurora.store.data.installer.AppInstaller.Companion.EXTRA_DISPLAY_NAME import com.aurora.store.data.installer.AppInstaller.Companion.EXTRA_PACKAGE_NAME import com.aurora.store.data.installer.AppInstaller.Companion.EXTRA_VERSION_CODE +import com.aurora.store.data.installer.base.InstallerBase import com.aurora.store.util.CommonUtil.inForeground import com.aurora.store.util.NotificationUtil import com.aurora.store.util.PackageUtil @@ -63,7 +63,7 @@ class InstallerStatusReceiver : BroadcastReceiver() { if (PackageUtil.isSharedLibrary(context, packageName)) return AuroraApp.enqueuedInstalls.remove(packageName) - AppInstaller.notifyInstallation(context, displayName, packageName) + InstallerBase.notifyInstallation(context, displayName, packageName) if (Preferences.getBoolean(context, PREFERENCE_AUTO_DELETE)) { PathUtil.getAppDownloadDir(context, packageName, versionCode) .deleteRecursively() @@ -92,7 +92,7 @@ class InstallerStatusReceiver : BroadcastReceiver() { context, packageName, displayName, - AppInstaller.getErrorString(context, status) + InstallerBase.getErrorString(context, status) ) notificationManager!!.notify(packageName.hashCode(), notification) } @@ -121,13 +121,13 @@ class InstallerStatusReceiver : BroadcastReceiver() { PackageInstaller.STATUS_FAILURE_ABORTED -> { InstallerEvent.Cancelled(packageName!!).apply { - this.extra = AppInstaller.getErrorString(context, status) + this.extra = InstallerBase.getErrorString(context, status) } } else -> { InstallerEvent.Failed(packageName!!).apply { - this.error = AppInstaller.getErrorString(context, status) + this.error = InstallerBase.getErrorString(context, status) this.extra = extra ?: "" } }