diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index e12cb8f533a7b..f116a24a76e16 100644 --- a/services/core/java/com/android/server/pm/ApexManager.java +++ b/services/core/java/com/android/server/pm/ApexManager.java @@ -351,6 +351,11 @@ public abstract class ApexManager { */ public abstract boolean destroyCeSnapshotsNotSpecified(int userId, int[] retainRollbackIds); + /** + * Inform apexd that the boot has completed. + */ + public abstract void markBootCompleted(); + /** * Dumps various state information to the provided {@link PrintWriter} object. * @@ -883,6 +888,15 @@ public abstract class ApexManager { } } + @Override + public void markBootCompleted() { + try { + waitForApexService().markBootCompleted(); + } catch (RemoteException re) { + Slog.e(TAG, "Unable to contact apexservice", re); + } + } + /** * Dump information about the packages contained in a particular cache * @param packagesCache the cache to print information about. @@ -1129,6 +1143,11 @@ public abstract class ApexManager { return true; } + @Override + public void markBootCompleted() { + // No-op + } + @Override void dump(PrintWriter pw, String packageName) { // No-op diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index e2bd1f1119caf..0c96f592c0dbb 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -164,6 +164,7 @@ public class StagingManager { public void onBootPhase(int phase) { if (phase == SystemService.PHASE_BOOT_COMPLETED && sStagingManager != null) { sStagingManager.markStagedSessionsAsSuccessful(); + sStagingManager.markBootCompleted(); } } } @@ -179,6 +180,10 @@ public class StagingManager { } } + private void markBootCompleted() { + mApexManager.markBootCompleted(); + } + /** * Validates the signature used to sign the container of the new apex package *