Merge "Making it possible to call setFirstBoot when mInstallD is available" into tm-dev am: bf7fddee01

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

Change-Id: Ic01a0c63b88fecd26dac3862d80a159076b84a88
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Shikha Malhotra
2022-05-07 17:46:15 +00:00
committed by Automerger Merge Worker

View File

@@ -119,7 +119,7 @@ public class Installer extends SystemService {
IInstalld.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES;
private final boolean mIsolated;
private volatile boolean mDeferSetFirstBoot;
private volatile IInstalld mInstalld;
private volatile Object mWarnIfHeld;
@@ -171,6 +171,7 @@ public class Installer extends SystemService {
mInstalld = IInstalld.Stub.asInterface(binder);
try {
invalidateMounts();
executeDeferredActions();
} catch (InstallerException ignored) {
}
} else {
@@ -179,6 +180,15 @@ public class Installer extends SystemService {
}
}
/**
* Perform any deferred actions on mInstalld while the connection could not be made.
*/
private void executeDeferredActions() throws InstallerException {
if (mDeferSetFirstBoot) {
setFirstBoot();
}
}
/**
* Do several pre-flight checks before making a remote call.
*
@@ -291,8 +301,15 @@ public class Installer extends SystemService {
return;
}
try {
mInstalld.setFirstBoot();
} catch (RemoteException e) {
// mInstalld might be null if the connection could not be established.
if (mInstalld != null) {
mInstalld.setFirstBoot();
} else {
// if it is null while trying to set the first boot, set a flag to try and set the
// first boot when the connection is eventually established
mDeferSetFirstBoot = true;
}
} catch (Exception e) {
throw InstallerException.from(e);
}
}