Merge "Refactor DynamicSystemInstallationService notifications" am: fe4b43da67 am: d41966bca6
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1541269 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I8af17c22e1f95fea6fc8bd8fea5866d24b6f0648
This commit is contained in:
@@ -138,9 +138,6 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
private long mCurrentPartitionSize;
|
private long mCurrentPartitionSize;
|
||||||
private long mCurrentPartitionInstalledSize;
|
private long mCurrentPartitionInstalledSize;
|
||||||
|
|
||||||
private boolean mJustCancelledByUser;
|
|
||||||
private boolean mKeepNotification;
|
|
||||||
|
|
||||||
// This is for testing only now
|
// This is for testing only now
|
||||||
private boolean mEnableWhenCompleted;
|
private boolean mEnableWhenCompleted;
|
||||||
|
|
||||||
@@ -174,11 +171,6 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
if (cache != null) {
|
if (cache != null) {
|
||||||
cache.flush();
|
cache.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mKeepNotification) {
|
|
||||||
// Cancel the persistent notification.
|
|
||||||
mNM.cancel(NOTIFICATION_ID);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -231,9 +223,11 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean removeNotification = false;
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case RESULT_CANCELLED:
|
case RESULT_CANCELLED:
|
||||||
postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
|
postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
|
||||||
|
removeNotification = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESULT_ERROR_IO:
|
case RESULT_ERROR_IO:
|
||||||
@@ -251,7 +245,7 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if it's not successful, reset the task and stop self.
|
// if it's not successful, reset the task and stop self.
|
||||||
resetTaskAndStop();
|
resetTaskAndStop(removeNotification);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void executeInstallCommand(Intent intent) {
|
private void executeInstallCommand(Intent intent) {
|
||||||
@@ -302,12 +296,12 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
stopForeground(true);
|
|
||||||
mJustCancelledByUser = true;
|
|
||||||
|
|
||||||
if (mInstallTask.cancel(false)) {
|
if (mInstallTask.cancel(false)) {
|
||||||
// Will stopSelf() in onResult()
|
// onResult() would call resetTaskAndStop() upon task completion.
|
||||||
Log.d(TAG, "Cancel request filed successfully");
|
Log.d(TAG, "Cancel request filed successfully");
|
||||||
|
// Dismiss the notification as soon as possible as DynamicSystemManager.remove() may
|
||||||
|
// block.
|
||||||
|
stopForeground(STOP_FOREGROUND_REMOVE);
|
||||||
} else {
|
} else {
|
||||||
Log.e(TAG, "Trying to cancel installation while it's already completed.");
|
Log.e(TAG, "Trying to cancel installation while it's already completed.");
|
||||||
}
|
}
|
||||||
@@ -322,8 +316,7 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
if (!isDynamicSystemInstalled() && (getStatus() != STATUS_READY)) {
|
if (!isDynamicSystemInstalled() && (getStatus() != STATUS_READY)) {
|
||||||
Log.e(TAG, "Trying to discard AOT while there is no complete installation");
|
Log.e(TAG, "Trying to discard AOT while there is no complete installation");
|
||||||
// Stop foreground state and dismiss stale notification.
|
// Stop foreground state and dismiss stale notification.
|
||||||
stopForeground(STOP_FOREGROUND_REMOVE);
|
resetTaskAndStop(true);
|
||||||
resetTaskAndStop();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,8 +324,8 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
getString(R.string.toast_dynsystem_discarded),
|
getString(R.string.toast_dynsystem_discarded),
|
||||||
Toast.LENGTH_LONG).show();
|
Toast.LENGTH_LONG).show();
|
||||||
|
|
||||||
resetTaskAndStop();
|
|
||||||
postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
|
postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
|
||||||
|
resetTaskAndStop(true);
|
||||||
|
|
||||||
mDynSystem.remove();
|
mDynSystem.remove();
|
||||||
}
|
}
|
||||||
@@ -412,12 +405,13 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void resetTaskAndStop() {
|
private void resetTaskAndStop() {
|
||||||
mInstallTask = null;
|
resetTaskAndStop(/* removeNotification= */ false);
|
||||||
|
}
|
||||||
|
|
||||||
new Handler().postDelayed(() -> {
|
private void resetTaskAndStop(boolean removeNotification) {
|
||||||
stopForeground(STOP_FOREGROUND_DETACH);
|
mInstallTask = null;
|
||||||
stopSelf();
|
stopForeground(removeNotification ? STOP_FOREGROUND_REMOVE : STOP_FOREGROUND_DETACH);
|
||||||
}, 50);
|
stopSelf();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepareNotification() {
|
private void prepareNotification() {
|
||||||
@@ -525,7 +519,7 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
private void postStatus(int status, int cause, Throwable detail) {
|
private void postStatus(int status, int cause, Throwable detail) {
|
||||||
String statusString;
|
String statusString;
|
||||||
String causeString;
|
String causeString;
|
||||||
mKeepNotification = false;
|
boolean notifyOnNotificationBar = true;
|
||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case STATUS_NOT_STARTED:
|
case STATUS_NOT_STARTED:
|
||||||
@@ -551,18 +545,16 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
break;
|
break;
|
||||||
case CAUSE_INSTALL_CANCELLED:
|
case CAUSE_INSTALL_CANCELLED:
|
||||||
causeString = "INSTALL_CANCELLED";
|
causeString = "INSTALL_CANCELLED";
|
||||||
|
notifyOnNotificationBar = false;
|
||||||
break;
|
break;
|
||||||
case CAUSE_ERROR_IO:
|
case CAUSE_ERROR_IO:
|
||||||
causeString = "ERROR_IO";
|
causeString = "ERROR_IO";
|
||||||
mKeepNotification = true;
|
|
||||||
break;
|
break;
|
||||||
case CAUSE_ERROR_INVALID_URL:
|
case CAUSE_ERROR_INVALID_URL:
|
||||||
causeString = "ERROR_INVALID_URL";
|
causeString = "ERROR_INVALID_URL";
|
||||||
mKeepNotification = true;
|
|
||||||
break;
|
break;
|
||||||
case CAUSE_ERROR_EXCEPTION:
|
case CAUSE_ERROR_EXCEPTION:
|
||||||
causeString = "ERROR_EXCEPTION";
|
causeString = "ERROR_EXCEPTION";
|
||||||
mKeepNotification = true;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
causeString = "CAUSE_NOT_SPECIFIED";
|
causeString = "CAUSE_NOT_SPECIFIED";
|
||||||
@@ -571,16 +563,6 @@ public class DynamicSystemInstallationService extends Service
|
|||||||
|
|
||||||
Log.d(TAG, "status=" + statusString + ", cause=" + causeString + ", detail=" + detail);
|
Log.d(TAG, "status=" + statusString + ", cause=" + causeString + ", detail=" + detail);
|
||||||
|
|
||||||
boolean notifyOnNotificationBar = true;
|
|
||||||
|
|
||||||
if (status == STATUS_NOT_STARTED
|
|
||||||
&& cause == CAUSE_INSTALL_CANCELLED
|
|
||||||
&& mJustCancelledByUser) {
|
|
||||||
// if task is cancelled by user, do not notify them
|
|
||||||
notifyOnNotificationBar = false;
|
|
||||||
mJustCancelledByUser = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notifyOnNotificationBar) {
|
if (notifyOnNotificationBar) {
|
||||||
mNM.notify(NOTIFICATION_ID, buildNotification(status, cause, detail));
|
mNM.notify(NOTIFICATION_ID, buildNotification(status, cause, detail));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user