Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86a70c8a authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Android (Google) Code Review
Browse files

Merge "Don't limit RetailDemoModeService to start only during demo mode."

parents dc787ff9 28537b6a
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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())
+16 −0
Original line number Diff line number Diff line
@@ -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);
            }
@@ -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();
@@ -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, "");
        }
+1 −1
Original line number Diff line number Diff line
@@ -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";
+3 −6
Original line number Diff line number Diff line
@@ -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...

+70 −16
Original line number Diff line number Diff line
@@ -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) {
@@ -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()) {
@@ -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()) {
@@ -238,6 +246,7 @@ public class RetailDemoModeService extends SystemService {
                        }
                    }
                });
                stopDemoMode();
            }
        }

@@ -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>();
@@ -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
@@ -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;
        }
@@ -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;
@@ -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) {
@@ -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();
@@ -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