From 502139f9e79a122f3de8f55ab32c2bf0a6247bd2 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Patel Date: Sat, 6 Mar 2021 15:23:21 +0530 Subject: [PATCH] Improve installer & error handling --- app/src/main/AndroidManifest.xml | 10 ++- .../store/data/installer/InstallerBase.kt | 15 ++++ .../store/data/installer/InstallerService.kt | 2 +- .../store/data/installer/ServiceInstaller.kt | 68 ++++++++----------- .../store/data/installer/SessionInstaller.kt | 7 +- app/src/main/res/values/strings.xml | 2 +- 6 files changed, 56 insertions(+), 48 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 684179a22..1303c9ae6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -162,7 +162,15 @@ android:resource="@xml/paths" /> - + + + + + + + + + diff --git a/app/src/main/java/com/aurora/store/data/installer/InstallerBase.kt b/app/src/main/java/com/aurora/store/data/installer/InstallerBase.kt index f08c24a99..6e83559ee 100644 --- a/app/src/main/java/com/aurora/store/data/installer/InstallerBase.kt +++ b/app/src/main/java/com/aurora/store/data/installer/InstallerBase.kt @@ -26,6 +26,9 @@ import android.os.Build import androidx.core.content.FileProvider import com.aurora.store.AuroraApplication import com.aurora.store.BuildConfig +import com.aurora.store.data.event.InstallerEvent +import com.aurora.store.util.Log +import org.greenrobot.eventbus.EventBus import java.io.File abstract class InstallerBase(protected var context: Context) : IInstaller { @@ -59,6 +62,18 @@ abstract class InstallerBase(protected var context: Context) : IInstaller { context.startActivity(intent) } + open fun postError(packageName: String, error: String?, extra: String?) { + Log.e("Service Error :$error") + + val event = InstallerEvent.Failed( + packageName, + error, + extra + ) + + EventBus.getDefault().post(event) + } + open fun getUri(file: File): Uri { return FileProvider.getUriForFile( context, diff --git a/app/src/main/java/com/aurora/store/data/installer/InstallerService.kt b/app/src/main/java/com/aurora/store/data/installer/InstallerService.kt index 8b5e42783..dfcc52ce7 100644 --- a/app/src/main/java/com/aurora/store/data/installer/InstallerService.kt +++ b/app/src/main/java/com/aurora/store/data/installer/InstallerService.kt @@ -35,7 +35,7 @@ class InstallerService : Service() { override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { val status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -69) val packageName = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME) - val extra = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE); + val extra = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE) when (status) { PackageInstaller.STATUS_PENDING_USER_ACTION -> promptUser(intent) 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 ac0dd736d..c5092de94 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 @@ -71,12 +71,11 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { xInstall(packageName, uriList) } else -> { - val event = InstallerEvent.Failed( + postError( packageName, context.getString(R.string.installer_status_failure), context.getString(R.string.installer_service_unavailable) ) - EventBus.getDefault().post(event) } } } @@ -100,7 +99,8 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { returnCode: Int, extra: String? ) { - + removeFromInstallQueue(packageName) + handleCallback(packageName, returnCode, extra) } } @@ -114,15 +114,12 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { } catch (e: RemoteException) { Log.e("Failed to connect Aurora Services") } - } else { - Log.e(context.getString(R.string.installer_service_misconfigured)) - val event = InstallerEvent.Failed( + postError( packageName, context.getString(R.string.installer_status_failure), context.getString(R.string.installer_service_misconfigured) ) - EventBus.getDefault().post(event) } } @@ -150,11 +147,11 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { if (service.hasPrivilegedPermissions()) { Log.i(context.getString(R.string.installer_service_available)) + val callback = object : IPrivilegedCallback.Stub() { override fun handleResult(packageName: String, returnCode: Int) { - Log.e("$packageName : $returnCode") - removeFromInstallQueue(packageName) + } override fun handleResultX( @@ -162,27 +159,8 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { returnCode: Int, extra: String? ) { - when (returnCode) { - PackageInstaller.STATUS_SUCCESS -> { - EventBus.getDefault() - .post(InstallerEvent.Success(packageName, "Success")) - } - else -> { - val errorString = AppInstaller.getErrorString( - context, - returnCode - ) - - val event = InstallerEvent.Failed( - packageName, - errorString, - extra - ) - - Log.e("$packageName : $errorString") - EventBus.getDefault().post(event) - } - } + removeFromInstallQueue(packageName) + handleCallback(packageName, returnCode, extra) } } @@ -196,22 +174,14 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { ) } catch (e: RemoteException) { removeFromInstallQueue(packageName) - val event = InstallerEvent.Failed( - packageName, - e.localizedMessage, - e.stackTraceToString() - ) - EventBus.getDefault().post(event) - Log.e("Failed to connect Aurora Services") + postError(packageName, e.localizedMessage, e.stackTraceToString()) } } else { - Log.e(context.getString(R.string.installer_service_misconfigured)) - val event = InstallerEvent.Failed( + postError( packageName, context.getString(R.string.installer_status_failure), context.getString(R.string.installer_service_misconfigured) ) - EventBus.getDefault().post(event) } } @@ -231,6 +201,24 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { ) } + private fun handleCallback(packageName: String, returnCode: Int, extra: String?) { + Log.i("Services Callback : $packageName $returnCode $extra") + + when (returnCode) { + PackageInstaller.STATUS_SUCCESS -> { + EventBus.getDefault().post(InstallerEvent.Success(packageName, "Success")) + } + else -> { + val error = AppInstaller.getErrorString( + context, + returnCode + ) + + postError(packageName, error, extra) + } + } + } + override fun getUri(file: File): Uri { val uri = FileProvider.getUriForFile( context, diff --git a/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt b/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt index f5883dfed..c4fc4a857 100644 --- a/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt +++ b/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt @@ -29,10 +29,8 @@ import androidx.annotation.RequiresApi import androidx.core.content.FileProvider import com.aurora.extensions.isNAndAbove import com.aurora.store.BuildConfig -import com.aurora.store.data.event.InstallerEvent import com.aurora.store.util.Log import org.apache.commons.io.IOUtils -import org.greenrobot.eventbus.EventBus import java.io.File class SessionInstaller(context: Context) : InstallerBase(context) { @@ -102,13 +100,12 @@ class SessionInstaller(context: Context) : InstallerBase(context) { } catch (e: Exception) { session.abandon() removeFromInstallQueue(packageName) - val event = InstallerEvent.Failed( + + postError( packageName, e.localizedMessage, e.stackTraceToString() ) - EventBus.getDefault().post(event) - Log.e("Failed to install $packageName : %s", e.message) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8225d3040..cf2b80d7f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -216,7 +216,7 @@ "Aurora services is available and ready to install." "Aurora services is either not installed or version is incorrect (required >= 1.0.9), kindly install it or change installer" "Aurora services not configured. Make sure service is enabled & all permissions are granted" - "Installation failed" + "Installer failed" "Installation cancelled" "Installation was blocked" "Could not create session"