diff options
| author | 2021-07-21 18:24:28 +0100 | |
|---|---|---|
| committer | 2021-08-03 15:27:00 +0100 | |
| commit | 2bcdaf91d59cec2b007e211bd4e0107c7ec07147 (patch) | |
| tree | 0ea378769c876702b2386167bdde697d317e3e71 | |
| parent | ecd54e97b05ba1d4e47f840c6268ccd4b2a5ef5c (diff) | |
Connect the new API from ApexService to ApexManager
Bug: 187444679
Test: atest ApexManagerTest
Change-Id: I60482a180d873a5f65887d0a5bb4230f75cb55df
| -rw-r--r-- | services/core/java/com/android/server/pm/ApexManager.java | 26 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java | 16 |
2 files changed, 42 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index 6ae4dd0a46b9..7889ff219b4e 100644 --- a/services/core/java/com/android/server/pm/ApexManager.java +++ b/services/core/java/com/android/server/pm/ApexManager.java @@ -250,6 +250,14 @@ public abstract class ApexManager { throws PackageManagerException; /** + * Returns {@code ApeInfo} about apex sessions that have been marked ready via + * {@link #markStagedSessionReady(int)} + * + * Returns empty array if there is no staged apex session or if there is any error. + */ + abstract ApexInfo[] getStagedApexInfos(ApexSessionParams params); + + /** * Mark a staged session previously submitted using {@code submitStagedSession} as ready to be * applied at next reboot. * @@ -758,6 +766,19 @@ public abstract class ApexManager { } @Override + ApexInfo[] getStagedApexInfos(ApexSessionParams params) { + try { + return waitForApexService().getStagedApexInfos(params); + } catch (RemoteException re) { + Slog.w(TAG, "Unable to contact apexservice" + re.getMessage()); + throw new RuntimeException(re); + } catch (Exception e) { + Slog.w(TAG, "Failed to collect staged apex infos" + e.getMessage()); + return new ApexInfo[0]; + } + } + + @Override void markStagedSessionReady(int sessionId) throws PackageManagerException { try { waitForApexService().markStagedSessionReady(sessionId); @@ -1250,6 +1271,11 @@ public abstract class ApexManager { } @Override + ApexInfo[] getStagedApexInfos(ApexSessionParams params) { + throw new UnsupportedOperationException(); + } + + @Override void markStagedSessionReady(int sessionId) { throw new UnsupportedOperationException(); } diff --git a/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java index 8b8a7e631caf..2bda120afb9d 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/ApexManagerTest.java @@ -40,6 +40,7 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.os.RemoteException; +import android.os.ServiceSpecificException; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; @@ -232,6 +233,21 @@ public class ApexManagerTest { } @Test + public void testGetStagedApexInfos_throwRunTimeException() throws RemoteException { + doThrow(RemoteException.class).when(mApexService).getStagedApexInfos(any()); + + assertThrows(RuntimeException.class, + () -> mApexManager.getStagedApexInfos(testParamsWithChildren())); + } + + @Test + public void testGetStagedApexInfos_returnsEmptyArrayOnError() throws RemoteException { + doThrow(ServiceSpecificException.class).when(mApexService).getStagedApexInfos(any()); + + assertThat(mApexManager.getStagedApexInfos(testParamsWithChildren())).hasLength(0); + } + + @Test public void testMarkStagedSessionReady_throwPackageManagerException() throws RemoteException { doAnswer(invocation -> { throw new Exception(); |