Improve installer & error handling

This commit is contained in:
Rahul Kumar Patel
2021-03-06 15:23:21 +05:30
parent eef13bf242
commit 502139f9e7
6 changed files with 56 additions and 48 deletions

View File

@@ -162,7 +162,15 @@
android:resource="@xml/paths" />
</provider>
<receiver android:name=".data.receiver.PackageManagerReceiver" />
<receiver android:name=".data.receiver.PackageManagerReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<receiver android:name=".data.receiver.DownloadResumeReceiver" />
<receiver android:name=".data.receiver.DownloadPauseReceiver" />
<receiver android:name=".data.receiver.DownloadCancelReceiver" />

View File

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

View File

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

View File

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

View File

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

View File

@@ -216,7 +216,7 @@
<string name="installer_service_available">"Aurora services is available and ready to install."</string>
<string name="installer_service_unavailable">"Aurora services is either not installed or version is incorrect (required >= 1.0.9), kindly install it or change installer"</string>
<string name="installer_service_misconfigured">"Aurora services not configured. Make sure service is enabled &amp; all permissions are granted"</string>
<string name="installer_status_failure">"Installation failed"</string>
<string name="installer_status_failure">"Installer failed"</string>
<string name="installer_status_failure_aborted">"Installation cancelled"</string>
<string name="installer_status_failure_blocked">"Installation was blocked"</string>
<string name="installer_status_failure_session">"Could not create session"</string>