Loading services/core/java/com/android/server/am/ActivityManagerService.java +28 −6 Original line number Diff line number Diff line Loading @@ -2292,11 +2292,8 @@ public final class ActivityManagerService extends ActivityManagerNative final ActivityRecord r = (ActivityRecord) msg.obj; final boolean needsVrMode = r != null && r.requestedVrComponent != null; if (needsVrMode) { VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class); boolean enable = msg.arg1 == 1; vrService.setVrMode(enable, r.requestedVrComponent, r.userId, r.info.getComponentName()); applyVrMode(msg.arg1 == 1, r.requestedVrComponent, r.userId, r.info.getComponentName(), false); } } break; } Loading Loading @@ -3084,6 +3081,17 @@ public final class ActivityManagerService extends ActivityManagerNative mHandler.obtainMessage(VR_MODE_APPLY_IF_NEEDED_MSG, enable ? 1 : 0, 0, r)); } private void applyVrMode(boolean enabled, ComponentName packageName, int userId, ComponentName callingPackage, boolean immediate) { VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class); if (immediate) { vrService.setVrModeImmediate(enabled, packageName, userId, callingPackage); } else { vrService.setVrMode(enabled, packageName, userId, callingPackage); } } final void showAskCompatModeDialogLocked(ActivityRecord r) { Message msg = Message.obtain(); msg.what = SHOW_COMPAT_MODE_DIALOG_UI_MSG; Loading Loading @@ -21413,11 +21421,25 @@ public final class ActivityManagerService extends ActivityManagerNative public SleepToken acquireSleepToken(String tag) { Preconditions.checkNotNull(tag); ComponentName requestedVrService = null; ComponentName callingVrActivity = null; int userId = -1; synchronized (ActivityManagerService.this) { if (mFocusedActivity != null) { requestedVrService = mFocusedActivity.requestedVrComponent; callingVrActivity = mFocusedActivity.info.getComponentName(); userId = mFocusedActivity.userId; } } if (requestedVrService != null) { applyVrMode(false, requestedVrService, userId, callingVrActivity, true); } synchronized (ActivityManagerService.this) { SleepTokenImpl token = new SleepTokenImpl(tag); mSleepTokens.add(token); updateSleepIfNeededLocked(); applyVrModeIfNeededLocked(mFocusedActivity, false); return token; } } services/core/java/com/android/server/vr/VrManagerInternal.java +15 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,9 @@ public abstract class VrManagerInternal { /** * Set the current VR mode state. * <p/> * This may delay the mode change slightly during application transitions to avoid frequently * tearing down VrListenerServices unless necessary. * * @param enabled {@code true} to enable VR mode. * @param packageName The package name of the requested VrListenerService to bind. Loading @@ -52,6 +55,18 @@ public abstract class VrManagerInternal { public abstract void setVrMode(boolean enabled, @NonNull ComponentName packageName, int userId, @NonNull ComponentName calling); /** * Set the current VR mode state immediately. * * @param enabled {@code true} to enable VR mode. * @param packageName The package name of the requested VrListenerService to bind. * @param userId the user requesting the VrListenerService component. * @param calling the component currently using VR mode, or null to leave unchanged. */ public abstract void setVrModeImmediate(boolean enabled, @NonNull ComponentName packageName, int userId, @NonNull ComponentName calling); /** * Return NO_ERROR if the given package is installed on the device and enabled as a * VrListenerService for the given current user, or a negative error code indicating a failure. Loading services/core/java/com/android/server/vr/VrManagerService.java +9 −3 Original line number Diff line number Diff line Loading @@ -373,7 +373,13 @@ public class VrManagerService extends SystemService implements EnabledComponentC @Override public void setVrMode(boolean enabled, ComponentName packageName, int userId, ComponentName callingPackage) { VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage); VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage, false); } @Override public void setVrModeImmediate(boolean enabled, ComponentName packageName, int userId, ComponentName callingPackage) { VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage, true); } @Override Loading Loading @@ -916,11 +922,11 @@ public class VrManagerService extends SystemService implements EnabledComponentC */ private void setVrMode(boolean enabled, @NonNull ComponentName targetPackageName, int userId, @NonNull ComponentName callingPackage) { int userId, @NonNull ComponentName callingPackage, boolean immediate) { synchronized (mLock) { if (!enabled && mCurrentVrService != null) { if (!enabled && mCurrentVrService != null && !immediate) { // If we're transitioning out of VR mode, delay briefly to avoid expensive HAL calls // and service bind/unbind in case we are immediately switching to another VR app. if (mPendingState == null) { Loading Loading
services/core/java/com/android/server/am/ActivityManagerService.java +28 −6 Original line number Diff line number Diff line Loading @@ -2292,11 +2292,8 @@ public final class ActivityManagerService extends ActivityManagerNative final ActivityRecord r = (ActivityRecord) msg.obj; final boolean needsVrMode = r != null && r.requestedVrComponent != null; if (needsVrMode) { VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class); boolean enable = msg.arg1 == 1; vrService.setVrMode(enable, r.requestedVrComponent, r.userId, r.info.getComponentName()); applyVrMode(msg.arg1 == 1, r.requestedVrComponent, r.userId, r.info.getComponentName(), false); } } break; } Loading Loading @@ -3084,6 +3081,17 @@ public final class ActivityManagerService extends ActivityManagerNative mHandler.obtainMessage(VR_MODE_APPLY_IF_NEEDED_MSG, enable ? 1 : 0, 0, r)); } private void applyVrMode(boolean enabled, ComponentName packageName, int userId, ComponentName callingPackage, boolean immediate) { VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class); if (immediate) { vrService.setVrModeImmediate(enabled, packageName, userId, callingPackage); } else { vrService.setVrMode(enabled, packageName, userId, callingPackage); } } final void showAskCompatModeDialogLocked(ActivityRecord r) { Message msg = Message.obtain(); msg.what = SHOW_COMPAT_MODE_DIALOG_UI_MSG; Loading Loading @@ -21413,11 +21421,25 @@ public final class ActivityManagerService extends ActivityManagerNative public SleepToken acquireSleepToken(String tag) { Preconditions.checkNotNull(tag); ComponentName requestedVrService = null; ComponentName callingVrActivity = null; int userId = -1; synchronized (ActivityManagerService.this) { if (mFocusedActivity != null) { requestedVrService = mFocusedActivity.requestedVrComponent; callingVrActivity = mFocusedActivity.info.getComponentName(); userId = mFocusedActivity.userId; } } if (requestedVrService != null) { applyVrMode(false, requestedVrService, userId, callingVrActivity, true); } synchronized (ActivityManagerService.this) { SleepTokenImpl token = new SleepTokenImpl(tag); mSleepTokens.add(token); updateSleepIfNeededLocked(); applyVrModeIfNeededLocked(mFocusedActivity, false); return token; } }
services/core/java/com/android/server/vr/VrManagerInternal.java +15 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,9 @@ public abstract class VrManagerInternal { /** * Set the current VR mode state. * <p/> * This may delay the mode change slightly during application transitions to avoid frequently * tearing down VrListenerServices unless necessary. * * @param enabled {@code true} to enable VR mode. * @param packageName The package name of the requested VrListenerService to bind. Loading @@ -52,6 +55,18 @@ public abstract class VrManagerInternal { public abstract void setVrMode(boolean enabled, @NonNull ComponentName packageName, int userId, @NonNull ComponentName calling); /** * Set the current VR mode state immediately. * * @param enabled {@code true} to enable VR mode. * @param packageName The package name of the requested VrListenerService to bind. * @param userId the user requesting the VrListenerService component. * @param calling the component currently using VR mode, or null to leave unchanged. */ public abstract void setVrModeImmediate(boolean enabled, @NonNull ComponentName packageName, int userId, @NonNull ComponentName calling); /** * Return NO_ERROR if the given package is installed on the device and enabled as a * VrListenerService for the given current user, or a negative error code indicating a failure. Loading
services/core/java/com/android/server/vr/VrManagerService.java +9 −3 Original line number Diff line number Diff line Loading @@ -373,7 +373,13 @@ public class VrManagerService extends SystemService implements EnabledComponentC @Override public void setVrMode(boolean enabled, ComponentName packageName, int userId, ComponentName callingPackage) { VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage); VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage, false); } @Override public void setVrModeImmediate(boolean enabled, ComponentName packageName, int userId, ComponentName callingPackage) { VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage, true); } @Override Loading Loading @@ -916,11 +922,11 @@ public class VrManagerService extends SystemService implements EnabledComponentC */ private void setVrMode(boolean enabled, @NonNull ComponentName targetPackageName, int userId, @NonNull ComponentName callingPackage) { int userId, @NonNull ComponentName callingPackage, boolean immediate) { synchronized (mLock) { if (!enabled && mCurrentVrService != null) { if (!enabled && mCurrentVrService != null && !immediate) { // If we're transitioning out of VR mode, delay briefly to avoid expensive HAL calls // and service bind/unbind in case we are immediately switching to another VR app. if (mPendingState == null) { Loading