Merge "Check error status after installing each DSU partition" am: fbd85db85d am: 73d5afb2cb

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1404669

Change-Id: Ife736c00f9491d3d4768a8d36833b7e6d34ab63f
This commit is contained in:
Yo Chiang
2020-09-02 05:40:55 +00:00
committed by Automerger Merge Worker
4 changed files with 41 additions and 0 deletions

View File

@@ -154,6 +154,19 @@ public class DynamicSystemManager {
throw new RuntimeException(e.toString());
}
}
/**
* Complete the current partition installation.
*
* @return true if the partition installation completes without error.
*/
@RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM)
public boolean closePartition() {
try {
return mService.closePartition();
} catch (RemoteException e) {
throw new RuntimeException(e.toString());
}
}
/**
* Finish a previously started installation. Installations without a cooresponding
* finishInstallation() will be cleaned up during device boot.

View File

@@ -38,6 +38,13 @@ interface IDynamicSystemService
*/
boolean createPartition(@utf8InCpp String name, long size, boolean readOnly);
/**
* Complete the current partition installation.
*
* @return true if the partition installation completes without error.
*/
boolean closePartition();
/**
* Finish a previously started installation. Installations without
* a cooresponding finishInstallation() will be cleaned up during device boot.

View File

@@ -334,6 +334,11 @@ class InstallationAsyncTask extends AsyncTask<String, InstallationAsyncTask.Prog
throw new IOException(
"Failed to start installation with requested size: " + mUserdataSize);
}
// Reset installation session and verify that installation completes successfully.
mInstallationSession = null;
if (!mDynSystem.closePartition()) {
throw new IOException("Failed to complete partition installation: userdata");
}
}
private void installImages()
@@ -503,6 +508,12 @@ class InstallationAsyncTask extends AsyncTask<String, InstallationAsyncTask.Prog
imageValidationThrowOrWarning(new KeyRevokedException(publicKey));
}
}
// Reset installation session and verify that installation completes successfully.
mInstallationSession = null;
if (!mDynSystem.closePartition()) {
throw new IOException("Failed to complete partition installation: " + partitionName);
}
}
private static String toHexString(byte[] bytes) {

View File

@@ -125,6 +125,16 @@ public class DynamicSystemService extends IDynamicSystemService.Stub {
return true;
}
@Override
public boolean closePartition() throws RemoteException {
IGsiService service = getGsiService();
if (service.closePartition() != 0) {
Slog.i(TAG, "Partition installation completes with error");
return false;
}
return true;
}
@Override
public boolean finishInstallation() throws RemoteException {
IGsiService service = getGsiService();