Don't show notifications for locked slots

Locked slots are used for customization. We expect the
client apps to provide custom UI for notifications
and entering/exiting DSU mode.

Bug: 277691885
Test: 1. adb shell am start-activity \
         -n com.android.dynsystem/com.android.dynsystem.VerificationActivity \
         -a android.os.image.action.START_INSTALL \
         --el KEY_USERDATA_SIZE 2147483648 \
         --ez KEY_ENABLE_WHEN_COMPLETED true \
	 --ez KEY_ONE_SHOT false \
	 --es KEY_DSU_SLOT foo.lock
     2. check no dsu notification is shown after reboot

Change-Id: I01de2fd2d5942dd4e5e462b46890ce1f10800768
This commit is contained in:
Chun-Wei Wang
2023-07-12 08:03:30 +00:00
parent 997af74d7f
commit f5f9dd3ac3

View File

@@ -419,12 +419,20 @@ public class DynamicSystemInstallationService extends Service
mDynSystem.remove();
}
private boolean isDsuSlotLocked() {
// Slot names ending with ".lock" are a customized installation.
// We expect the client app to provide custom UI to enter/exit DSU mode.
// We will ignore the ACTION_REBOOT_TO_NORMAL command and will not show
// notifications in this case.
return mDynSystem.getActiveDsuSlot().endsWith(".lock");
}
private void executeRebootToNormalCommand() {
if (!isInDynamicSystem()) {
Log.e(TAG, "It's already running in normal system.");
return;
}
if (mDynSystem.getActiveDsuSlot().endsWith(".lock")) {
if (isDsuSlotLocked()) {
Log.e(TAG, "Ignore the reboot intent for a locked DSU slot");
return;
}
@@ -449,13 +457,13 @@ public class DynamicSystemInstallationService extends Service
private void executeNotifyIfInUseCommand() {
switch (getStatus()) {
case STATUS_IN_USE:
if (!mHideNotification) {
if (!mHideNotification && !isDsuSlotLocked()) {
startForeground(NOTIFICATION_ID,
buildNotification(STATUS_IN_USE, CAUSE_NOT_SPECIFIED));
}
break;
case STATUS_READY:
if (!mHideNotification) {
if (!mHideNotification && !isDsuSlotLocked()) {
startForeground(NOTIFICATION_ID,
buildNotification(STATUS_READY, CAUSE_NOT_SPECIFIED));
}