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
This commit is contained in:
JW Wang
2023-04-10 15:10:02 +08:00
parent b008e122c6
commit d4bf2448f6
3 changed files with 14 additions and 4 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}
}