private final Context mContext;
private boolean mSafeMode;
private boolean mRuntimeRestarted;
- private boolean mFirstBoot;
// Services that should receive lifecycle events.
private final ArrayList<SystemService> mServices = new ArrayList<SystemService>();
}
/**
- * @return true if it's first boot after OTA
- */
- public boolean isFirstBoot() {
- return mFirstBoot;
- }
-
- void setFirstBoot(boolean firstBoot) {
- mFirstBoot = firstBoot;
- }
-
- /**
* Outputs the state of this manager to the System log.
*/
public void dump() {
import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
+import android.app.AppGlobals;
import android.app.AppOpsManager;
import android.app.Dialog;
import android.app.IStopUserCallback;
import android.content.Context;
import android.content.IIntentReceiver;
import android.content.Intent;
+import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.os.BatteryStats;
// storage is already unlocked.
if (uss.setState(STATE_BOOTING, STATE_RUNNING_LOCKED)) {
getUserManagerInternal().setUserState(userId, uss.state);
- if (!mService.mSystemServiceManager.isRuntimeRestarted()
- && !mService.mSystemServiceManager.isFirstBoot()) {
+ // Do not report secondary users, runtime restarts or first boot/upgrade
+ if (userId == UserHandle.USER_SYSTEM
+ && !mService.mSystemServiceManager.isRuntimeRestarted()
+ && !isFirstBootOrUpgrade()) {
int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
MetricsLogger.histogram(mService.mContext, "framework_locked_boot_completed",
uptimeSeconds);
}
Slog.d(TAG, "Sending BOOT_COMPLETE user #" + userId);
- if (!mService.mSystemServiceManager.isRuntimeRestarted()
- && !mService.mSystemServiceManager.isFirstBoot()) {
-
+ // Do not report secondary users, runtime restarts or first boot/upgrade
+ if (userId == UserHandle.USER_SYSTEM
+ && !mService.mSystemServiceManager.isRuntimeRestarted()
+ && !isFirstBootOrUpgrade()) {
int uptimeSeconds = (int) (SystemClock.elapsedRealtime() / 1000);
MetricsLogger
.histogram(mService.mContext, "framework_boot_completed", uptimeSeconds);
}
}
+ private static boolean isFirstBootOrUpgrade() {
+ IPackageManager pm = AppGlobals.getPackageManager();
+ try {
+ return pm.isFirstBoot() || pm.isUpgrade();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
int stopUser(final int userId, final boolean force, final IStopUserCallback callback) {
if (mService.checkCallingPermission(INTERACT_ACROSS_USERS_FULL)
!= PackageManager.PERMISSION_GRANTED) {