AppInstaller: Relocate installer-related methods to InstallerBase

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-11-19 13:00:18 +07:00
parent d7767488d1
commit 2ab3e36b38
4 changed files with 33 additions and 45 deletions

View File

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

View File

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

View File

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

View File

@@ -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 ?: ""
}
}