Merge "Keep error message notification after stop" into rvc-dev
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
index f36f97d..f80e934 100644
--- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
+++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/DynamicSystemInstallationService.java
@@ -139,6 +139,7 @@
private long mCurrentPartitionInstalledSize;
private boolean mJustCancelledByUser;
+ private boolean mKeepNotification;
// This is for testing only now
private boolean mEnableWhenCompleted;
@@ -173,8 +174,11 @@
if (cache != null) {
cache.flush();
}
- // Cancel the persistent notification.
- mNM.cancel(NOTIFICATION_ID);
+
+ if (!mKeepNotification) {
+ // Cancel the persistent notification.
+ mNM.cancel(NOTIFICATION_ID);
+ }
}
@Override
@@ -227,9 +231,6 @@
return;
}
- // if it's not successful, reset the task and stop self.
- resetTaskAndStop();
-
switch (result) {
case RESULT_CANCELLED:
postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
@@ -248,6 +249,9 @@
postStatus(STATUS_NOT_STARTED, CAUSE_ERROR_EXCEPTION, detail);
break;
}
+
+ // if it's not successful, reset the task and stop self.
+ resetTaskAndStop();
}
private void executeInstallCommand(Intent intent) {
@@ -392,10 +396,10 @@
private void resetTaskAndStop() {
mInstallTask = null;
- stopForeground(true);
-
- // stop self, but this service is not destroyed yet if it's still bound
- stopSelf();
+ new Handler().postDelayed(() -> {
+ stopForeground(STOP_FOREGROUND_DETACH);
+ stopSelf();
+ }, 50);
}
private void prepareNotification() {
@@ -503,6 +507,7 @@
private void postStatus(int status, int cause, Throwable detail) {
String statusString;
String causeString;
+ mKeepNotification = false;
switch (status) {
case STATUS_NOT_STARTED:
@@ -531,12 +536,15 @@
break;
case CAUSE_ERROR_IO:
causeString = "ERROR_IO";
+ mKeepNotification = true;
break;
case CAUSE_ERROR_INVALID_URL:
causeString = "ERROR_INVALID_URL";
+ mKeepNotification = true;
break;
case CAUSE_ERROR_EXCEPTION:
causeString = "ERROR_EXCEPTION";
+ mKeepNotification = true;
break;
default:
causeString = "CAUSE_NOT_SPECIFIED";