Ignore the reboot to normal intent when DSU is locked

This feature provides the application with the ability to lock the device into DSU mode, allowing only authorized users to exit.

Bug: 275484855
Test: manual testing with a slot name ends with ".lock"
Change-Id: Ie00fd897daf2dfb11c2c792887a0e95ee164cea3
This commit is contained in:
Howard Chen
2023-05-11 13:52:01 +08:00
parent 2ac252fb93
commit 081e525ff6
4 changed files with 34 additions and 4 deletions

View File

@@ -285,4 +285,16 @@ public class DynamicSystemManager {
throw new RuntimeException(e.toString());
}
}
/**
* Returns the active DSU slot
*/
@RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM)
public String getActiveDsuSlot() {
try {
return mService.getActiveDsuSlot();
} catch (RemoteException e) {
throw new RuntimeException(e.toString());
}
}
}

View File

@@ -145,4 +145,10 @@ interface IDynamicSystemService
*/
@EnforcePermission("MANAGE_DYNAMIC_SYSTEM")
long suggestScratchSize();
/**
* Get the active DSU slot
*/
@EnforcePermission("MANAGE_DYNAMIC_SYSTEM")
String getActiveDsuSlot();
}

View File

@@ -423,7 +423,10 @@ public class DynamicSystemInstallationService extends Service
Log.e(TAG, "It's already running in normal system.");
return;
}
if (mDynSystem.getActiveDsuSlot().endsWith(".lock")) {
Log.e(TAG, "Ignore the reboot intent for a locked DSU slot");
return;
}
if (!mDynSystem.setEnable(/* enable = */ false, /* oneShot = */ false)) {
Log.e(TAG, "Failed to disable DynamicSystem.");

View File

@@ -226,9 +226,7 @@ public class DynamicSystemService extends IDynamicSystemService.Stub {
IGsiService gsiService = getGsiService();
if (enable) {
try {
if (mDsuSlot == null) {
mDsuSlot = gsiService.getActiveDsuSlot();
}
getActiveDsuSlot();
GsiServiceCallback callback = new GsiServiceCallback();
synchronized (callback) {
gsiService.enableGsiAsync(oneShot, mDsuSlot, callback);
@@ -287,4 +285,15 @@ public class DynamicSystemService extends IDynamicSystemService.Stub {
return getGsiService().suggestScratchSize();
}
@Override
@EnforcePermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM)
public String getActiveDsuSlot() throws RemoteException {
super.getActiveDsuSlot_enforcePermission();
if (mDsuSlot == null) {
mDsuSlot = getGsiService().getActiveDsuSlot();
}
return mDsuSlot;
}
}