Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 982de9c9 authored by Howard Chen's avatar Howard Chen
Browse files

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
parent 9eb7656d
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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());
        }
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -145,4 +145,10 @@ interface IDynamicSystemService
     */
    @EnforcePermission("MANAGE_DYNAMIC_SYSTEM")
    long suggestScratchSize();

    /**
     * Get the active DSU slot
     */
    @EnforcePermission("MANAGE_DYNAMIC_SYSTEM")
    String getActiveDsuSlot();
}
+4 −1
Original line number Diff line number Diff line
@@ -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.");

+12 −3
Original line number Diff line number Diff line
@@ -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;
    }
}