Loading services/core/java/com/android/server/am/ActivityManagerService.java +7 −0 Original line number Diff line number Diff line Loading @@ -21705,6 +21705,13 @@ public final class ActivityManagerService extends ActivityManagerNative return mUserController.getCurrentUser(); } String getStartedUserState(int userId) { synchronized (this) { final UserState userState = mUserController.getStartedUserStateLocked(userId); return UserState.stateToString(userState.state); } } @Override public boolean isUserRunning(int userId, int flags) { if (!mUserController.isSameProfileGroup(userId, UserHandle.getCallingUserId()) services/core/java/com/android/server/am/ActivityManagerShellCommand.java +16 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,8 @@ class ActivityManagerShellCommand extends ShellCommand { return runLenientBackgroundCheck(pw); case "get-uid-state": return getUidState(pw); case "get-started-user-state": return getStartedUserState(pw); default: return handleDefaultCommands(cmd); } Loading Loading @@ -458,6 +460,18 @@ class ActivityManagerShellCommand extends ShellCommand { return 0; } int getStartedUserState(PrintWriter pw) throws RemoteException { mInternal.enforceCallingPermission(android.Manifest.permission.DUMP, "getStartedUserState()"); final int userId = Integer.parseInt(getNextArgRequired()); try { pw.println(mInternal.getStartedUserState(userId)); } catch (NullPointerException e) { pw.println("User is not started: " + userId); } return 0; } @Override public void onHelp() { PrintWriter pw = getOutPrintWriter(); Loading Loading @@ -534,6 +548,8 @@ class ActivityManagerShellCommand extends ShellCommand { pw.println(" Optionally controls lenient background check mode, returns current mode."); pw.println(" get-uid-state <UID>"); pw.println(" Gets the process state of an app given its <UID>."); pw.println(" get-started-user-state <USER_ID>"); pw.println(" Gets the current state of the given started user."); pw.println(); Intent.printIntentArgsHelp(pw, ""); } Loading services/core/java/com/android/server/am/UserState.java +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ public final class UserState { state = newState; } private static String stateToString(int state) { static String stateToString(int state) { switch (state) { case STATE_BOOTING: return "BOOTING"; case STATE_RUNNING_LOCKED: return "RUNNING_LOCKED"; Loading services/java/com/android/server/SystemServer.java +3 −6 Original line number Diff line number Diff line Loading @@ -1372,12 +1372,9 @@ public final class SystemServer { mmsService = mSystemServiceManager.startService(MmsServiceBroker.class); traceEnd(); if (Settings.Global.getInt(mContentResolver, Settings.Global.DEVICE_PROVISIONED, 0) == 0 || UserManager.isDeviceInDemoMode(mSystemContext)) { traceBeginAndSlog("StartRetailDemoModeService"); mSystemServiceManager.startService(RetailDemoModeService.class); traceEnd(); } // It is now time to start up the app processes... Loading services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java +70 −16 Original line number Diff line number Diff line Loading @@ -124,7 +124,12 @@ public class RetailDemoModeService extends SystemService { @GuardedBy("mActivityLock") long mLastUserActivityTime; private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { private boolean mSafeBootRestrictionInitialState; private int mPackageVerifierEnableInitialState; private IntentReceiver mBroadcastReceiver = null; private final class IntentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (!mDeviceInDemoMode) { Loading @@ -150,6 +155,9 @@ public class RetailDemoModeService extends SystemService { @Override public void handleMessage(Message msg) { if (!mDeviceInDemoMode) { return; } switch (msg.what) { case MSG_TURN_SCREEN_ON: if (mInjector.isWakeLockHeld()) { Loading Loading @@ -219,7 +227,7 @@ public class RetailDemoModeService extends SystemService { if (mDeviceDemoModeUri.equals(uri)) { mDeviceInDemoMode = UserManager.isDeviceInDemoMode(getContext()); if (mDeviceInDemoMode) { putDeviceInDemoMode(); startDemoMode(); } else { mInjector.systemPropertiesSet(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED, "0"); if (mInjector.isWakeLockHeld()) { Loading @@ -238,6 +246,7 @@ public class RetailDemoModeService extends SystemService { } } }); stopDemoMode(); } } Loading Loading @@ -376,11 +385,21 @@ public class RetailDemoModeService extends SystemService { } private void registerBroadcastReceiver() { if (mBroadcastReceiver == null) { final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(ACTION_RESET_DEMO); mBroadcastReceiver = new IntentReceiver(); getContext().registerReceiver(mBroadcastReceiver, filter); } } private void unregisterBroadcastReceiver() { if (mBroadcastReceiver != null) { getContext().unregisterReceiver(mBroadcastReceiver); mBroadcastReceiver = null; } } private String[] getCameraIdsWithFlash() { ArrayList<String> cameraIdsList = new ArrayList<String>(); Loading @@ -407,9 +426,33 @@ public class RetailDemoModeService extends SystemService { } } private void putDeviceInDemoMode() { private void startDemoMode() { mPreloadAppsInstaller = mInjector.getPreloadAppsInstaller(); mInjector.initializeWakeLock(); if (mCameraIdsWithFlash == null) { mCameraIdsWithFlash = getCameraIdsWithFlash(); } registerBroadcastReceiver(); mInjector.systemPropertiesSet(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED, "1"); mHandler.sendEmptyMessage(MSG_START_NEW_SESSION); mSafeBootRestrictionInitialState = mInjector.getUserManager().hasUserRestriction( UserManager.DISALLOW_SAFE_BOOT, UserHandle.SYSTEM); mPackageVerifierEnableInitialState = Settings.Global.getInt(mInjector.getContentResolver(), Settings.Global.PACKAGE_VERIFIER_ENABLE, 0); } private void stopDemoMode() { mPreloadAppsInstaller = null; mCameraIdsWithFlash = null; mInjector.destroyWakeLock(); unregisterBroadcastReceiver(); mInjector.getUserManager().setUserRestriction(UserManager.DISALLOW_SAFE_BOOT, mSafeBootRestrictionInitialState, UserHandle.SYSTEM); Settings.Global.putInt(mInjector.getContentResolver(), Settings.Global.PACKAGE_VERIFIER_ENABLE, mPackageVerifierEnableInitialState); } @Override Loading @@ -421,25 +464,21 @@ public class RetailDemoModeService extends SystemService { false); mHandlerThread.start(); mHandler = new MainHandler(mHandlerThread.getLooper()); publishLocalService(RetailDemoModeServiceInternal.class, mLocalService); mInjector.publishLocalService(this, mLocalService); } @Override public void onBootPhase(int bootPhase) { switch (bootPhase) { case PHASE_THIRD_PARTY_APPS_CAN_START: mPreloadAppsInstaller = mInjector.getPreloadAppsInstaller(); mInjector.initializeWakeLock(); mCameraIdsWithFlash = getCameraIdsWithFlash(); SettingsObserver settingsObserver = new SettingsObserver(mHandler); settingsObserver.register(); settingsObserver.refreshTimeoutConstants(); registerBroadcastReceiver(); break; case PHASE_BOOT_COMPLETED: if (UserManager.isDeviceInDemoMode(getContext())) { mDeviceInDemoMode = true; putDeviceInDemoMode(); startDemoMode(); } break; } Loading Loading @@ -526,6 +565,7 @@ public class RetailDemoModeService extends SystemService { private WifiManager mWifiManager; private Configuration mSystemUserConfiguration; private PendingIntent mResetDemoPendingIntent; private PreloadAppsInstaller mPreloadAppsInstaller; Injector(Context context) { mContext = context; Loading Loading @@ -609,7 +649,10 @@ public class RetailDemoModeService extends SystemService { } PreloadAppsInstaller getPreloadAppsInstaller() { return new PreloadAppsInstaller(getContext()); if (mPreloadAppsInstaller == null) { mPreloadAppsInstaller = new PreloadAppsInstaller(getContext()); } return mPreloadAppsInstaller; } void systemPropertiesSet(String key, String value) { Loading @@ -628,9 +671,15 @@ public class RetailDemoModeService extends SystemService { } void initializeWakeLock() { if (mWakeLock == null) { mWakeLock = getPowerManager().newWakeLock( PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG); } } void destroyWakeLock() { mWakeLock = null; } boolean isWakeLockHeld() { return mWakeLock.isHeld(); Loading Loading @@ -688,5 +737,10 @@ public class RetailDemoModeService extends SystemService { File getDataPreloadsDirectory() { return Environment.getDataPreloadsDirectory(); } void publishLocalService(RetailDemoModeService service, RetailDemoModeServiceInternal localService) { service.publishLocalService(RetailDemoModeServiceInternal.class, localService); } } } Loading
services/core/java/com/android/server/am/ActivityManagerService.java +7 −0 Original line number Diff line number Diff line Loading @@ -21705,6 +21705,13 @@ public final class ActivityManagerService extends ActivityManagerNative return mUserController.getCurrentUser(); } String getStartedUserState(int userId) { synchronized (this) { final UserState userState = mUserController.getStartedUserStateLocked(userId); return UserState.stateToString(userState.state); } } @Override public boolean isUserRunning(int userId, int flags) { if (!mUserController.isSameProfileGroup(userId, UserHandle.getCallingUserId())
services/core/java/com/android/server/am/ActivityManagerShellCommand.java +16 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,8 @@ class ActivityManagerShellCommand extends ShellCommand { return runLenientBackgroundCheck(pw); case "get-uid-state": return getUidState(pw); case "get-started-user-state": return getStartedUserState(pw); default: return handleDefaultCommands(cmd); } Loading Loading @@ -458,6 +460,18 @@ class ActivityManagerShellCommand extends ShellCommand { return 0; } int getStartedUserState(PrintWriter pw) throws RemoteException { mInternal.enforceCallingPermission(android.Manifest.permission.DUMP, "getStartedUserState()"); final int userId = Integer.parseInt(getNextArgRequired()); try { pw.println(mInternal.getStartedUserState(userId)); } catch (NullPointerException e) { pw.println("User is not started: " + userId); } return 0; } @Override public void onHelp() { PrintWriter pw = getOutPrintWriter(); Loading Loading @@ -534,6 +548,8 @@ class ActivityManagerShellCommand extends ShellCommand { pw.println(" Optionally controls lenient background check mode, returns current mode."); pw.println(" get-uid-state <UID>"); pw.println(" Gets the process state of an app given its <UID>."); pw.println(" get-started-user-state <USER_ID>"); pw.println(" Gets the current state of the given started user."); pw.println(); Intent.printIntentArgsHelp(pw, ""); } Loading
services/core/java/com/android/server/am/UserState.java +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ public final class UserState { state = newState; } private static String stateToString(int state) { static String stateToString(int state) { switch (state) { case STATE_BOOTING: return "BOOTING"; case STATE_RUNNING_LOCKED: return "RUNNING_LOCKED"; Loading
services/java/com/android/server/SystemServer.java +3 −6 Original line number Diff line number Diff line Loading @@ -1372,12 +1372,9 @@ public final class SystemServer { mmsService = mSystemServiceManager.startService(MmsServiceBroker.class); traceEnd(); if (Settings.Global.getInt(mContentResolver, Settings.Global.DEVICE_PROVISIONED, 0) == 0 || UserManager.isDeviceInDemoMode(mSystemContext)) { traceBeginAndSlog("StartRetailDemoModeService"); mSystemServiceManager.startService(RetailDemoModeService.class); traceEnd(); } // It is now time to start up the app processes... Loading
services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java +70 −16 Original line number Diff line number Diff line Loading @@ -124,7 +124,12 @@ public class RetailDemoModeService extends SystemService { @GuardedBy("mActivityLock") long mLastUserActivityTime; private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { private boolean mSafeBootRestrictionInitialState; private int mPackageVerifierEnableInitialState; private IntentReceiver mBroadcastReceiver = null; private final class IntentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (!mDeviceInDemoMode) { Loading @@ -150,6 +155,9 @@ public class RetailDemoModeService extends SystemService { @Override public void handleMessage(Message msg) { if (!mDeviceInDemoMode) { return; } switch (msg.what) { case MSG_TURN_SCREEN_ON: if (mInjector.isWakeLockHeld()) { Loading Loading @@ -219,7 +227,7 @@ public class RetailDemoModeService extends SystemService { if (mDeviceDemoModeUri.equals(uri)) { mDeviceInDemoMode = UserManager.isDeviceInDemoMode(getContext()); if (mDeviceInDemoMode) { putDeviceInDemoMode(); startDemoMode(); } else { mInjector.systemPropertiesSet(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED, "0"); if (mInjector.isWakeLockHeld()) { Loading @@ -238,6 +246,7 @@ public class RetailDemoModeService extends SystemService { } } }); stopDemoMode(); } } Loading Loading @@ -376,11 +385,21 @@ public class RetailDemoModeService extends SystemService { } private void registerBroadcastReceiver() { if (mBroadcastReceiver == null) { final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(ACTION_RESET_DEMO); mBroadcastReceiver = new IntentReceiver(); getContext().registerReceiver(mBroadcastReceiver, filter); } } private void unregisterBroadcastReceiver() { if (mBroadcastReceiver != null) { getContext().unregisterReceiver(mBroadcastReceiver); mBroadcastReceiver = null; } } private String[] getCameraIdsWithFlash() { ArrayList<String> cameraIdsList = new ArrayList<String>(); Loading @@ -407,9 +426,33 @@ public class RetailDemoModeService extends SystemService { } } private void putDeviceInDemoMode() { private void startDemoMode() { mPreloadAppsInstaller = mInjector.getPreloadAppsInstaller(); mInjector.initializeWakeLock(); if (mCameraIdsWithFlash == null) { mCameraIdsWithFlash = getCameraIdsWithFlash(); } registerBroadcastReceiver(); mInjector.systemPropertiesSet(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED, "1"); mHandler.sendEmptyMessage(MSG_START_NEW_SESSION); mSafeBootRestrictionInitialState = mInjector.getUserManager().hasUserRestriction( UserManager.DISALLOW_SAFE_BOOT, UserHandle.SYSTEM); mPackageVerifierEnableInitialState = Settings.Global.getInt(mInjector.getContentResolver(), Settings.Global.PACKAGE_VERIFIER_ENABLE, 0); } private void stopDemoMode() { mPreloadAppsInstaller = null; mCameraIdsWithFlash = null; mInjector.destroyWakeLock(); unregisterBroadcastReceiver(); mInjector.getUserManager().setUserRestriction(UserManager.DISALLOW_SAFE_BOOT, mSafeBootRestrictionInitialState, UserHandle.SYSTEM); Settings.Global.putInt(mInjector.getContentResolver(), Settings.Global.PACKAGE_VERIFIER_ENABLE, mPackageVerifierEnableInitialState); } @Override Loading @@ -421,25 +464,21 @@ public class RetailDemoModeService extends SystemService { false); mHandlerThread.start(); mHandler = new MainHandler(mHandlerThread.getLooper()); publishLocalService(RetailDemoModeServiceInternal.class, mLocalService); mInjector.publishLocalService(this, mLocalService); } @Override public void onBootPhase(int bootPhase) { switch (bootPhase) { case PHASE_THIRD_PARTY_APPS_CAN_START: mPreloadAppsInstaller = mInjector.getPreloadAppsInstaller(); mInjector.initializeWakeLock(); mCameraIdsWithFlash = getCameraIdsWithFlash(); SettingsObserver settingsObserver = new SettingsObserver(mHandler); settingsObserver.register(); settingsObserver.refreshTimeoutConstants(); registerBroadcastReceiver(); break; case PHASE_BOOT_COMPLETED: if (UserManager.isDeviceInDemoMode(getContext())) { mDeviceInDemoMode = true; putDeviceInDemoMode(); startDemoMode(); } break; } Loading Loading @@ -526,6 +565,7 @@ public class RetailDemoModeService extends SystemService { private WifiManager mWifiManager; private Configuration mSystemUserConfiguration; private PendingIntent mResetDemoPendingIntent; private PreloadAppsInstaller mPreloadAppsInstaller; Injector(Context context) { mContext = context; Loading Loading @@ -609,7 +649,10 @@ public class RetailDemoModeService extends SystemService { } PreloadAppsInstaller getPreloadAppsInstaller() { return new PreloadAppsInstaller(getContext()); if (mPreloadAppsInstaller == null) { mPreloadAppsInstaller = new PreloadAppsInstaller(getContext()); } return mPreloadAppsInstaller; } void systemPropertiesSet(String key, String value) { Loading @@ -628,9 +671,15 @@ public class RetailDemoModeService extends SystemService { } void initializeWakeLock() { if (mWakeLock == null) { mWakeLock = getPowerManager().newWakeLock( PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG); } } void destroyWakeLock() { mWakeLock = null; } boolean isWakeLockHeld() { return mWakeLock.isHeld(); Loading Loading @@ -688,5 +737,10 @@ public class RetailDemoModeService extends SystemService { File getDataPreloadsDirectory() { return Environment.getDataPreloadsDirectory(); } void publishLocalService(RetailDemoModeService service, RetailDemoModeServiceInternal localService) { service.publishLocalService(RetailDemoModeServiceInternal.class, localService); } } }