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

Commit d4bf2448 authored by JW Wang's avatar JW Wang
Browse files

DSU enhancement (3/N)

* Expose KEY_ONE_SHOT
  This allows the device to stay in DynamicSystem mode
  across reboots until the user decides to exit DSU mode

Bug: 277691885
Test: 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
Change-Id: I8057ebb7af866f9da3ad7836615866642ff93ddb
parent b008e122
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -224,6 +224,13 @@ public class DynamicSystemClient {
     */
    public static final String KEY_ENABLE_WHEN_COMPLETED = "KEY_ENABLE_WHEN_COMPLETED";

    /**
     * Intent key: Whether to leave DynamicSystem on device reboot.
     *             False indicates a sticky mode where device stays in DynamicSystem across reboots.
     * @hide
     */
    public static final String KEY_ONE_SHOT = "KEY_ONE_SHOT";

    private static class IncomingHandler extends Handler {
        private final WeakReference<DynamicSystemClient> mWeakClient;

+5 −2
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static android.os.image.DynamicSystemClient.CAUSE_INSTALL_CANCELLED;
import static android.os.image.DynamicSystemClient.CAUSE_INSTALL_COMPLETED;
import static android.os.image.DynamicSystemClient.CAUSE_NOT_SPECIFIED;
import static android.os.image.DynamicSystemClient.KEY_ENABLE_WHEN_COMPLETED;
import static android.os.image.DynamicSystemClient.KEY_ONE_SHOT;
import static android.os.image.DynamicSystemClient.STATUS_IN_PROGRESS;
import static android.os.image.DynamicSystemClient.STATUS_IN_USE;
import static android.os.image.DynamicSystemClient.STATUS_NOT_STARTED;
@@ -171,6 +172,7 @@ public class DynamicSystemInstallationService extends Service

    // This is for testing only now
    private boolean mEnableWhenCompleted;
    private boolean mOneShot;

    private InstallationAsyncTask.Progress mInstallTaskProgress;
    private InstallationAsyncTask mInstallTask;
@@ -317,6 +319,7 @@ public class DynamicSystemInstallationService extends Service
        long systemSize = intent.getLongExtra(DynamicSystemClient.KEY_SYSTEM_SIZE, 0);
        long userdataSize = intent.getLongExtra(DynamicSystemClient.KEY_USERDATA_SIZE, 0);
        mEnableWhenCompleted = intent.getBooleanExtra(KEY_ENABLE_WHEN_COMPLETED, false);
        mOneShot = intent.getBooleanExtra(KEY_ONE_SHOT, true);
        String dsuSlot = intent.getStringExtra(KEY_DSU_SLOT);
        String publicKey = intent.getStringExtra(KEY_PUBKEY);

@@ -383,9 +386,9 @@ public class DynamicSystemInstallationService extends Service
        boolean enabled = false;

        if (mInstallTask != null && mInstallTask.isCompleted()) {
            enabled = mInstallTask.commit();
            enabled = mInstallTask.commit(mOneShot);
        } else if (isDynamicSystemInstalled()) {
            enabled = mDynSystem.setEnable(true, true);
            enabled = mDynSystem.setEnable(true, mOneShot);
        } else {
            Log.e(TAG, "Trying to reboot to AOT while there is no complete installation");
            return;
+2 −2
Original line number Diff line number Diff line
@@ -803,7 +803,7 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Throwable> {
        return mIsCompleted;
    }

    boolean commit() {
        return mDynSystem.setEnable(true, true);
    boolean commit(boolean oneShot) {
        return mDynSystem.setEnable(true, oneShot);
    }
}