diff options
3 files changed, 19 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/SystemServiceManager.java b/services/core/java/com/android/server/SystemServiceManager.java index 40b0e2e431b8..a0c80fe666e1 100644 --- a/services/core/java/com/android/server/SystemServiceManager.java +++ b/services/core/java/com/android/server/SystemServiceManager.java @@ -36,7 +36,6 @@ public class SystemServiceManager { 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>(); @@ -259,17 +258,6 @@ public class SystemServiceManager { } /** - * @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() { diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 19eeff0d440c..4fd26b38b185 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -46,6 +46,7 @@ import static com.android.server.am.UserState.STATE_RUNNING_UNLOCKING; 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; @@ -54,6 +55,7 @@ import android.app.KeyguardManager; 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; @@ -239,8 +241,10 @@ final class UserController { // 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); @@ -416,9 +420,10 @@ final class UserController { } 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); @@ -433,6 +438,15 @@ final class UserController { } } + 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) { diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 865277e88ab5..653c5e9f3df5 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -327,7 +327,6 @@ public final class SystemServer { // Create the system service manager. mSystemServiceManager = new SystemServiceManager(mSystemContext); mSystemServiceManager.setRuntimeRestarted(mRuntimeRestart); - mSystemServiceManager.setFirstBoot(mFirstBoot); LocalServices.addService(SystemServiceManager.class, mSystemServiceManager); } finally { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); |