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 package com.aurora.store.data.installer
import android.app.NotificationManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageInstaller
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.content.getSystemService
import androidx.core.content.pm.PackageInfoCompat import androidx.core.content.pm.PackageInfoCompat
import com.aurora.extensions.getUpdateOwnerPackageNameCompat import com.aurora.extensions.getUpdateOwnerPackageNameCompat
import com.aurora.extensions.isOAndAbove import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.isPAndAbove import com.aurora.extensions.isPAndAbove
import com.aurora.extensions.isSAndAbove import com.aurora.extensions.isSAndAbove
import com.aurora.store.BuildConfig import com.aurora.store.BuildConfig
import com.aurora.store.R
import com.aurora.store.data.installer.base.IInstaller import com.aurora.store.data.installer.base.IInstaller
import com.aurora.store.data.model.Installer import com.aurora.store.data.model.Installer
import com.aurora.store.data.model.InstallerInfo import com.aurora.store.data.model.InstallerInfo
import com.aurora.store.util.NotificationUtil
import com.aurora.store.util.PackageUtil import com.aurora.store.util.PackageUtil
import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID 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 { fun hasRootAccess(): Boolean {
return Shell.getShell().isRoot return Shell.getShell().isRoot
} }

View File

@@ -234,14 +234,7 @@ class ServiceInstaller @Inject constructor(
) )
} }
else -> { else -> postError(packageName, getErrorString(context, returnCode), extra)
val error = AppInstaller.getErrorString(
context,
returnCode
)
postError(packageName, error, extra)
}
} }
if (::serviceConnection.isInitialized) { if (::serviceConnection.isInitialized) {
context.unbindService(serviceConnection) context.unbindService(serviceConnection)
@@ -266,14 +259,7 @@ class ServiceInstaller @Inject constructor(
if (packageName == download?.packageName) onInstallationSuccess() if (packageName == download?.packageName) onInstallationSuccess()
} }
else -> { else -> postError(packageName, getErrorString(context, returnCode), extra)
val error = AppInstaller.getErrorString(
context,
returnCode
)
postError(packageName, error, extra)
}
} }
if (::serviceConnection.isInitialized) { if (::serviceConnection.isInitialized) {
context.unbindService(serviceConnection) context.unbindService(serviceConnection)

View File

@@ -19,15 +19,20 @@
package com.aurora.store.data.installer.base package com.aurora.store.data.installer.base
import android.app.NotificationManager
import android.content.Context import android.content.Context
import android.content.pm.PackageInstaller
import android.net.Uri import android.net.Uri
import android.util.Log import android.util.Log
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.core.content.getSystemService
import com.aurora.store.AuroraApp import com.aurora.store.AuroraApp
import com.aurora.store.BuildConfig import com.aurora.store.BuildConfig
import com.aurora.store.R
import com.aurora.store.data.event.InstallerEvent import com.aurora.store.data.event.InstallerEvent
import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.installer.AppInstaller
import com.aurora.store.data.room.download.Download 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.PathUtil
import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_AUTO_DELETE 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 { 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 private val TAG = InstallerBase::class.java.simpleName
var download: Download? = null var download: Download? = null
@@ -58,7 +83,7 @@ abstract class InstallerBase(private val context: Context) : IInstaller {
fun onInstallationSuccess() { fun onInstallationSuccess() {
download?.let { download?.let {
AppInstaller.notifyInstallation(context, it.displayName, it.packageName) notifyInstallation(context, it.displayName, it.packageName)
if (Preferences.getBoolean(context, PREFERENCE_AUTO_DELETE)) { if (Preferences.getBoolean(context, PREFERENCE_AUTO_DELETE)) {
PathUtil.getAppDownloadDir(context, it.packageName, it.versionCode) PathUtil.getAppDownloadDir(context, it.packageName, it.versionCode)
.deleteRecursively() .deleteRecursively()

View File

@@ -30,11 +30,11 @@ import com.aurora.extensions.runOnUiThread
import com.aurora.store.AuroraApp import com.aurora.store.AuroraApp
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.event.InstallerEvent 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.ACTION_INSTALL_STATUS
import com.aurora.store.data.installer.AppInstaller.Companion.EXTRA_DISPLAY_NAME 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_PACKAGE_NAME
import com.aurora.store.data.installer.AppInstaller.Companion.EXTRA_VERSION_CODE 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.CommonUtil.inForeground
import com.aurora.store.util.NotificationUtil import com.aurora.store.util.NotificationUtil
import com.aurora.store.util.PackageUtil import com.aurora.store.util.PackageUtil
@@ -63,7 +63,7 @@ class InstallerStatusReceiver : BroadcastReceiver() {
if (PackageUtil.isSharedLibrary(context, packageName)) return if (PackageUtil.isSharedLibrary(context, packageName)) return
AuroraApp.enqueuedInstalls.remove(packageName) AuroraApp.enqueuedInstalls.remove(packageName)
AppInstaller.notifyInstallation(context, displayName, packageName) InstallerBase.notifyInstallation(context, displayName, packageName)
if (Preferences.getBoolean(context, PREFERENCE_AUTO_DELETE)) { if (Preferences.getBoolean(context, PREFERENCE_AUTO_DELETE)) {
PathUtil.getAppDownloadDir(context, packageName, versionCode) PathUtil.getAppDownloadDir(context, packageName, versionCode)
.deleteRecursively() .deleteRecursively()
@@ -92,7 +92,7 @@ class InstallerStatusReceiver : BroadcastReceiver() {
context, context,
packageName, packageName,
displayName, displayName,
AppInstaller.getErrorString(context, status) InstallerBase.getErrorString(context, status)
) )
notificationManager!!.notify(packageName.hashCode(), notification) notificationManager!!.notify(packageName.hashCode(), notification)
} }
@@ -121,13 +121,13 @@ class InstallerStatusReceiver : BroadcastReceiver() {
PackageInstaller.STATUS_FAILURE_ABORTED -> { PackageInstaller.STATUS_FAILURE_ABORTED -> {
InstallerEvent.Cancelled(packageName!!).apply { InstallerEvent.Cancelled(packageName!!).apply {
this.extra = AppInstaller.getErrorString(context, status) this.extra = InstallerBase.getErrorString(context, status)
} }
} }
else -> { else -> {
InstallerEvent.Failed(packageName!!).apply { InstallerEvent.Failed(packageName!!).apply {
this.error = AppInstaller.getErrorString(context, status) this.error = InstallerBase.getErrorString(context, status)
this.extra = extra ?: "" this.extra = extra ?: ""
} }
} }