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

This commit is contained in:
Shikha Malhotra
2022-05-07 17:03:20 +00:00
committed by Android (Google) Code Review

View File

@@ -119,7 +119,7 @@ public class Installer extends SystemService {
IInstalld.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES; IInstalld.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES;
private final boolean mIsolated; private final boolean mIsolated;
private volatile boolean mDeferSetFirstBoot;
private volatile IInstalld mInstalld; private volatile IInstalld mInstalld;
private volatile Object mWarnIfHeld; private volatile Object mWarnIfHeld;
@@ -171,6 +171,7 @@ public class Installer extends SystemService {
mInstalld = IInstalld.Stub.asInterface(binder); mInstalld = IInstalld.Stub.asInterface(binder);
try { try {
invalidateMounts(); invalidateMounts();
executeDeferredActions();
} catch (InstallerException ignored) { } catch (InstallerException ignored) {
} }
} else { } 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. * Do several pre-flight checks before making a remote call.
* *
@@ -291,8 +301,15 @@ public class Installer extends SystemService {
return; return;
} }
try { try {
mInstalld.setFirstBoot(); // mInstalld might be null if the connection could not be established.
} catch (RemoteException e) { 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); throw InstallerException.from(e);
} }
} }