From 55668c1a49fdb34b2ffee071da9d9ac7dd1a5a9e Mon Sep 17 00:00:00 2001 From: Yo Chiang Date: Thu, 20 Aug 2020 19:43:28 +0800 Subject: Check error status after installing each DSU partition Add DynamicSystemManager.closePartition() that closes a partition installation and returns its error status. InstallationAsyncTask may call this method to do error checking. Bug: 165471299 Test: Observe the logcat of a failed DSU installation Change-Id: I9d155c70c6e490899a4acfd35c8096549af005d4 --- core/java/android/os/image/DynamicSystemManager.java | 13 +++++++++++++ core/java/android/os/image/IDynamicSystemService.aidl | 7 +++++++ .../src/com/android/dynsystem/InstallationAsyncTask.java | 11 +++++++++++ .../core/java/com/android/server/DynamicSystemService.java | 10 ++++++++++ 4 files changed, 41 insertions(+) diff --git a/core/java/android/os/image/DynamicSystemManager.java b/core/java/android/os/image/DynamicSystemManager.java index 17851adac51b..7f01cad940ec 100644 --- a/core/java/android/os/image/DynamicSystemManager.java +++ b/core/java/android/os/image/DynamicSystemManager.java @@ -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. diff --git a/core/java/android/os/image/IDynamicSystemService.aidl b/core/java/android/os/image/IDynamicSystemService.aidl index a1f927266de3..df0a69b47225 100644 --- a/core/java/android/os/image/IDynamicSystemService.aidl +++ b/core/java/android/os/image/IDynamicSystemService.aidl @@ -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. diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java index f8952ace3cb3..4d31ce97e8b7 100644 --- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java +++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/InstallationAsyncTask.java @@ -334,6 +334,11 @@ class InstallationAsyncTask extends AsyncTask