Loading core/java/android/service/vr/IVrListener.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -20,5 +20,5 @@ import android.content.ComponentName; /** @hide */ oneway interface IVrListener { void focusedActivityChanged(in ComponentName component); void focusedActivityChanged(in ComponentName component, boolean running2dInVr, int pid); } core/java/android/service/vr/VrListenerService.java +29 −3 Original line number Diff line number Diff line Loading @@ -70,8 +70,10 @@ public abstract class VrListenerService extends Service { private final IVrListener.Stub mBinder = new IVrListener.Stub() { @Override public void focusedActivityChanged(ComponentName component) { mHandler.obtainMessage(MSG_ON_CURRENT_VR_ACTIVITY_CHANGED, component).sendToTarget(); public void focusedActivityChanged( ComponentName component, boolean running2dInVr, int pid) { mHandler.obtainMessage(MSG_ON_CURRENT_VR_ACTIVITY_CHANGED, running2dInVr ? 1 : 0, pid, component).sendToTarget(); } }; Loading @@ -84,7 +86,8 @@ public abstract class VrListenerService extends Service { public void handleMessage(Message msg) { switch (msg.what) { case MSG_ON_CURRENT_VR_ACTIVITY_CHANGED: { VrListenerService.this.onCurrentVrActivityChanged((ComponentName) msg.obj); VrListenerService.this.onCurrentVrActivityChanged( (ComponentName) msg.obj, msg.arg1 == 1, msg.arg2); } break; } } Loading Loading @@ -119,6 +122,29 @@ public abstract class VrListenerService extends Service { // Override to implement } /** * An extended version of onCurrentVrActivityChanged * * <p>This will be called when this service is initially bound, but is not * guaranteed to be called before onUnbind. In general, this is intended to be used to * determine when user focus has transitioned between two VR activities, or between a * VR activity and a 2D activity. This should be overridden instead of the above * onCurrentVrActivityChanged as that version is deprecated.</p> * * @param component the {@link ComponentName} of the VR activity or the 2D intent. * @param running2dInVr true if the component is a 2D component. * @param pid the process the component is running in. * * @see android.app.Activity#setVrModeEnabled * @see android.R.attr#enableVrMode * @hide */ public void onCurrentVrActivityChanged( ComponentName component, boolean running2dInVr, int pid) { // Override to implement. Default to old behaviour of sending null for 2D. onCurrentVrActivityChanged(running2dInVr ? null : component); } /** * Checks if the given component is enabled in user settings. * Loading services/core/java/com/android/server/am/VrController.java +6 −1 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ final class VrController { ComponentName requestedPackage; ComponentName callingPackage; int userId; int processId = -1; boolean changed = false; synchronized (mGlobalAmLock) { vrMode = record.requestedVrComponent != null; Loading @@ -172,11 +173,15 @@ final class VrController { // Tell the VrController that a VR mode change is requested. changed = changeVrModeLocked(vrMode, record.app); if (record.app != null) { processId = record.app.pid; } } // Tell VrManager that a VR mode changed is requested, VrManager will handle // notifying all non-AM dependencies if needed. vrService.setVrMode(vrMode, requestedPackage, userId, callingPackage); vrService.setVrMode(vrMode, requestedPackage, userId, processId, callingPackage); return changed; } Loading services/core/java/com/android/server/vr/VrManagerInternal.java +2 −1 Original line number Diff line number Diff line Loading @@ -52,10 +52,11 @@ public abstract class VrManagerInternal { * @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 processId the process the component is running in. * @param calling the component currently using VR mode, or null to leave unchanged. */ public abstract void setVrMode(boolean enabled, @NonNull ComponentName packageName, int userId, @NonNull ComponentName calling); int userId, int processId, @NonNull ComponentName calling); /** * Set whether the system has acquired a sleep token. Loading services/core/java/com/android/server/vr/VrManagerService.java +46 −33 Original line number Diff line number Diff line Loading @@ -128,6 +128,8 @@ public class VrManagerService extends SystemService implements EnabledComponentC private boolean mVrModeAllowed; private boolean mVrModeEnabled; private boolean mPersistentVrModeEnabled; private boolean mRunning2dInVr; private int mVrAppProcessId; private EnabledComponentsObserver mComponentObserver; private ManagedApplicationService mCurrentVrService; private ComponentName mDefaultVrService; Loading Loading @@ -178,7 +180,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC } consumeAndApplyPendingStateLocked(); if (mBootsToVr && !mVrModeEnabled) { setVrMode(true, mDefaultVrService, 0, null); setVrMode(true, mDefaultVrService, 0, -1, null); } } else { // Disable persistent mode when VR mode isn't allowed, allows an escape hatch to Loading @@ -187,12 +189,12 @@ public class VrManagerService extends SystemService implements EnabledComponentC // Set pending state to current state. mPendingState = (mVrModeEnabled && mCurrentVrService != null) ? new VrState(mVrModeEnabled, mCurrentVrService.getComponent(), mCurrentVrService.getUserId(), mCurrentVrModeComponent) ? new VrState(mVrModeEnabled, mRunning2dInVr, mCurrentVrService.getComponent(), mCurrentVrService.getUserId(), mVrAppProcessId, mCurrentVrModeComponent) : null; // Unbind current VR service and do necessary callbacks. updateCurrentVrServiceLocked(false, null, 0, null); updateCurrentVrServiceLocked(false, false, null, 0, -1, null); } } } Loading Loading @@ -274,26 +276,33 @@ public class VrManagerService extends SystemService implements EnabledComponentC private static class VrState { final boolean enabled; final boolean running2dInVr; final int userId; final int processId; final ComponentName targetPackageName; final ComponentName callingPackage; final long timestamp; final boolean defaultPermissionsGranted; VrState(boolean enabled, ComponentName targetPackageName, int userId, ComponentName callingPackage) { VrState(boolean enabled, boolean running2dInVr, ComponentName targetPackageName, int userId, int processId, ComponentName callingPackage) { this.enabled = enabled; this.running2dInVr = running2dInVr; this.userId = userId; this.processId = processId; this.targetPackageName = targetPackageName; this.callingPackage = callingPackage; this.defaultPermissionsGranted = false; this.timestamp = System.currentTimeMillis(); } VrState(boolean enabled, ComponentName targetPackageName, int userId, ComponentName callingPackage, boolean defaultPermissionsGranted) { VrState(boolean enabled, boolean running2dInVr, ComponentName targetPackageName, int userId, int processId, ComponentName callingPackage, boolean defaultPermissionsGranted) { this.enabled = enabled; this.running2dInVr = running2dInVr; this.userId = userId; this.processId = processId; this.targetPackageName = targetPackageName; this.callingPackage = callingPackage; this.defaultPermissionsGranted = defaultPermissionsGranted; Loading Loading @@ -394,8 +403,9 @@ public class VrManagerService extends SystemService implements EnabledComponentC } // There is an active service, update it if needed updateCurrentVrServiceLocked(mVrModeEnabled, mCurrentVrService.getComponent(), mCurrentVrService.getUserId(), mCurrentVrModeComponent); updateCurrentVrServiceLocked(mVrModeEnabled, mRunning2dInVr, mCurrentVrService.getComponent(), mCurrentVrService.getUserId(), mVrAppProcessId, mCurrentVrModeComponent); } } Loading Loading @@ -531,9 +541,9 @@ public class VrManagerService extends SystemService implements EnabledComponentC */ private final class LocalService extends VrManagerInternal { @Override public void setVrMode(boolean enabled, ComponentName packageName, int userId, public void setVrMode(boolean enabled, ComponentName packageName, int userId, int processId, ComponentName callingPackage) { VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage); VrManagerService.this.setVrMode(enabled, packageName, userId, processId, callingPackage); } @Override Loading Loading @@ -710,14 +720,16 @@ public class VrManagerService extends SystemService implements EnabledComponentC * Note: Must be called while holding {@code mLock}. * * @param enabled new state for VR mode. * @param running2dInVr true if we have a top-level 2D intent. * @param component new component to be bound as a VR listener. * @param userId user owning the component to be bound. * @param calling the component currently using VR mode. * @param processId the process hosting the activity specified by calling. * @param calling the component currently using VR mode or a 2D intent. * * @return {@code true} if the component/user combination specified is valid. */ private boolean updateCurrentVrServiceLocked(boolean enabled, @NonNull ComponentName component, int userId, ComponentName calling) { private boolean updateCurrentVrServiceLocked(boolean enabled, boolean running2dInVr, @NonNull ComponentName component, int userId, int processId, ComponentName calling) { boolean sendUpdatedCaller = false; final long identity = Binder.clearCallingIdentity(); Loading Loading @@ -777,6 +789,8 @@ public class VrManagerService extends SystemService implements EnabledComponentC sendUpdatedCaller = true; } mCurrentVrModeComponent = calling; mRunning2dInVr = running2dInVr; mVrAppProcessId = processId; if (mCurrentVrModeUser != userId) { mCurrentVrModeUser = userId; Loading @@ -794,11 +808,13 @@ public class VrManagerService extends SystemService implements EnabledComponentC if (mCurrentVrService != null && sendUpdatedCaller) { final ComponentName c = mCurrentVrModeComponent; final boolean b = running2dInVr; final int pid = processId; mCurrentVrService.sendEvent(new PendingEvent() { @Override public void runEvent(IInterface service) throws RemoteException { IVrListener l = (IVrListener) service; l.focusedActivityChanged(c); l.focusedActivityChanged(c, b, pid); } }); } Loading Loading @@ -1001,20 +1017,20 @@ public class VrManagerService extends SystemService implements EnabledComponentC */ private void consumeAndApplyPendingStateLocked(boolean disconnectIfNoPendingState) { if (mPendingState != null) { updateCurrentVrServiceLocked(mPendingState.enabled, mPendingState.targetPackageName, mPendingState.userId, updateCurrentVrServiceLocked(mPendingState.enabled, mPendingState.running2dInVr, mPendingState.targetPackageName, mPendingState.userId, mPendingState.processId, mPendingState.callingPackage); mPendingState = null; } else if (disconnectIfNoPendingState) { updateCurrentVrServiceLocked(false, null, 0, null); updateCurrentVrServiceLocked(false, false, null, 0, -1, null); } } private void logStateLocked() { ComponentName currentBoundService = (mCurrentVrService == null) ? null : mCurrentVrService.getComponent(); VrState current = new VrState(mVrModeEnabled, currentBoundService, mCurrentVrModeUser, mCurrentVrModeComponent, mWasDefaultGranted); VrState current = new VrState(mVrModeEnabled, mRunning2dInVr, currentBoundService, mCurrentVrModeUser, mVrAppProcessId, mCurrentVrModeComponent, mWasDefaultGranted); if (mLoggingDeque.size() == EVENT_LOG_SIZE) { mLoggingDeque.removeFirst(); } Loading Loading @@ -1058,27 +1074,24 @@ public class VrManagerService extends SystemService implements EnabledComponentC * Implementation of VrManagerInternal calls. These are callable from system services. */ private void setVrMode(boolean enabled, @NonNull ComponentName targetPackageName, int userId, @NonNull ComponentName callingPackage) { int userId, int processId, @NonNull ComponentName callingPackage) { synchronized (mLock) { VrState pending; ComponentName targetListener; ComponentName foregroundVrComponent; // If the device is in persistent VR mode, then calls to disable VR mode are ignored, // and the system default VR listener is used. boolean targetEnabledState = enabled || mPersistentVrModeEnabled; if (!enabled && mPersistentVrModeEnabled) { boolean running2dInVr = !enabled && mPersistentVrModeEnabled; if (running2dInVr) { targetListener = mDefaultVrService; // Current foreground component isn't a VR one (in 2D app case) foregroundVrComponent = null; } else { targetListener = targetPackageName; foregroundVrComponent = callingPackage; } pending = new VrState( targetEnabledState, targetListener, userId, foregroundVrComponent); pending = new VrState(targetEnabledState, running2dInVr, targetListener, userId, processId, callingPackage); if (!mVrModeAllowed) { // We're not allowed to be in VR mode. Make this state pending. This will be Loading @@ -1103,8 +1116,8 @@ public class VrManagerService extends SystemService implements EnabledComponentC mPendingState = null; } updateCurrentVrServiceLocked( targetEnabledState, targetListener, userId, foregroundVrComponent); updateCurrentVrServiceLocked(targetEnabledState, running2dInVr, targetListener, userId, processId, callingPackage); } } Loading @@ -1113,7 +1126,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC setPersistentModeAndNotifyListenersLocked(enabled); // Disabling persistent mode when not showing a VR should disable the overall vr mode. if (!enabled && mCurrentVrModeComponent == null) { setVrMode(false, null, 0, null); setVrMode(false, null, 0, -1, null); } } } Loading Loading
core/java/android/service/vr/IVrListener.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -20,5 +20,5 @@ import android.content.ComponentName; /** @hide */ oneway interface IVrListener { void focusedActivityChanged(in ComponentName component); void focusedActivityChanged(in ComponentName component, boolean running2dInVr, int pid); }
core/java/android/service/vr/VrListenerService.java +29 −3 Original line number Diff line number Diff line Loading @@ -70,8 +70,10 @@ public abstract class VrListenerService extends Service { private final IVrListener.Stub mBinder = new IVrListener.Stub() { @Override public void focusedActivityChanged(ComponentName component) { mHandler.obtainMessage(MSG_ON_CURRENT_VR_ACTIVITY_CHANGED, component).sendToTarget(); public void focusedActivityChanged( ComponentName component, boolean running2dInVr, int pid) { mHandler.obtainMessage(MSG_ON_CURRENT_VR_ACTIVITY_CHANGED, running2dInVr ? 1 : 0, pid, component).sendToTarget(); } }; Loading @@ -84,7 +86,8 @@ public abstract class VrListenerService extends Service { public void handleMessage(Message msg) { switch (msg.what) { case MSG_ON_CURRENT_VR_ACTIVITY_CHANGED: { VrListenerService.this.onCurrentVrActivityChanged((ComponentName) msg.obj); VrListenerService.this.onCurrentVrActivityChanged( (ComponentName) msg.obj, msg.arg1 == 1, msg.arg2); } break; } } Loading Loading @@ -119,6 +122,29 @@ public abstract class VrListenerService extends Service { // Override to implement } /** * An extended version of onCurrentVrActivityChanged * * <p>This will be called when this service is initially bound, but is not * guaranteed to be called before onUnbind. In general, this is intended to be used to * determine when user focus has transitioned between two VR activities, or between a * VR activity and a 2D activity. This should be overridden instead of the above * onCurrentVrActivityChanged as that version is deprecated.</p> * * @param component the {@link ComponentName} of the VR activity or the 2D intent. * @param running2dInVr true if the component is a 2D component. * @param pid the process the component is running in. * * @see android.app.Activity#setVrModeEnabled * @see android.R.attr#enableVrMode * @hide */ public void onCurrentVrActivityChanged( ComponentName component, boolean running2dInVr, int pid) { // Override to implement. Default to old behaviour of sending null for 2D. onCurrentVrActivityChanged(running2dInVr ? null : component); } /** * Checks if the given component is enabled in user settings. * Loading
services/core/java/com/android/server/am/VrController.java +6 −1 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ final class VrController { ComponentName requestedPackage; ComponentName callingPackage; int userId; int processId = -1; boolean changed = false; synchronized (mGlobalAmLock) { vrMode = record.requestedVrComponent != null; Loading @@ -172,11 +173,15 @@ final class VrController { // Tell the VrController that a VR mode change is requested. changed = changeVrModeLocked(vrMode, record.app); if (record.app != null) { processId = record.app.pid; } } // Tell VrManager that a VR mode changed is requested, VrManager will handle // notifying all non-AM dependencies if needed. vrService.setVrMode(vrMode, requestedPackage, userId, callingPackage); vrService.setVrMode(vrMode, requestedPackage, userId, processId, callingPackage); return changed; } Loading
services/core/java/com/android/server/vr/VrManagerInternal.java +2 −1 Original line number Diff line number Diff line Loading @@ -52,10 +52,11 @@ public abstract class VrManagerInternal { * @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 processId the process the component is running in. * @param calling the component currently using VR mode, or null to leave unchanged. */ public abstract void setVrMode(boolean enabled, @NonNull ComponentName packageName, int userId, @NonNull ComponentName calling); int userId, int processId, @NonNull ComponentName calling); /** * Set whether the system has acquired a sleep token. Loading
services/core/java/com/android/server/vr/VrManagerService.java +46 −33 Original line number Diff line number Diff line Loading @@ -128,6 +128,8 @@ public class VrManagerService extends SystemService implements EnabledComponentC private boolean mVrModeAllowed; private boolean mVrModeEnabled; private boolean mPersistentVrModeEnabled; private boolean mRunning2dInVr; private int mVrAppProcessId; private EnabledComponentsObserver mComponentObserver; private ManagedApplicationService mCurrentVrService; private ComponentName mDefaultVrService; Loading Loading @@ -178,7 +180,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC } consumeAndApplyPendingStateLocked(); if (mBootsToVr && !mVrModeEnabled) { setVrMode(true, mDefaultVrService, 0, null); setVrMode(true, mDefaultVrService, 0, -1, null); } } else { // Disable persistent mode when VR mode isn't allowed, allows an escape hatch to Loading @@ -187,12 +189,12 @@ public class VrManagerService extends SystemService implements EnabledComponentC // Set pending state to current state. mPendingState = (mVrModeEnabled && mCurrentVrService != null) ? new VrState(mVrModeEnabled, mCurrentVrService.getComponent(), mCurrentVrService.getUserId(), mCurrentVrModeComponent) ? new VrState(mVrModeEnabled, mRunning2dInVr, mCurrentVrService.getComponent(), mCurrentVrService.getUserId(), mVrAppProcessId, mCurrentVrModeComponent) : null; // Unbind current VR service and do necessary callbacks. updateCurrentVrServiceLocked(false, null, 0, null); updateCurrentVrServiceLocked(false, false, null, 0, -1, null); } } } Loading Loading @@ -274,26 +276,33 @@ public class VrManagerService extends SystemService implements EnabledComponentC private static class VrState { final boolean enabled; final boolean running2dInVr; final int userId; final int processId; final ComponentName targetPackageName; final ComponentName callingPackage; final long timestamp; final boolean defaultPermissionsGranted; VrState(boolean enabled, ComponentName targetPackageName, int userId, ComponentName callingPackage) { VrState(boolean enabled, boolean running2dInVr, ComponentName targetPackageName, int userId, int processId, ComponentName callingPackage) { this.enabled = enabled; this.running2dInVr = running2dInVr; this.userId = userId; this.processId = processId; this.targetPackageName = targetPackageName; this.callingPackage = callingPackage; this.defaultPermissionsGranted = false; this.timestamp = System.currentTimeMillis(); } VrState(boolean enabled, ComponentName targetPackageName, int userId, ComponentName callingPackage, boolean defaultPermissionsGranted) { VrState(boolean enabled, boolean running2dInVr, ComponentName targetPackageName, int userId, int processId, ComponentName callingPackage, boolean defaultPermissionsGranted) { this.enabled = enabled; this.running2dInVr = running2dInVr; this.userId = userId; this.processId = processId; this.targetPackageName = targetPackageName; this.callingPackage = callingPackage; this.defaultPermissionsGranted = defaultPermissionsGranted; Loading Loading @@ -394,8 +403,9 @@ public class VrManagerService extends SystemService implements EnabledComponentC } // There is an active service, update it if needed updateCurrentVrServiceLocked(mVrModeEnabled, mCurrentVrService.getComponent(), mCurrentVrService.getUserId(), mCurrentVrModeComponent); updateCurrentVrServiceLocked(mVrModeEnabled, mRunning2dInVr, mCurrentVrService.getComponent(), mCurrentVrService.getUserId(), mVrAppProcessId, mCurrentVrModeComponent); } } Loading Loading @@ -531,9 +541,9 @@ public class VrManagerService extends SystemService implements EnabledComponentC */ private final class LocalService extends VrManagerInternal { @Override public void setVrMode(boolean enabled, ComponentName packageName, int userId, public void setVrMode(boolean enabled, ComponentName packageName, int userId, int processId, ComponentName callingPackage) { VrManagerService.this.setVrMode(enabled, packageName, userId, callingPackage); VrManagerService.this.setVrMode(enabled, packageName, userId, processId, callingPackage); } @Override Loading Loading @@ -710,14 +720,16 @@ public class VrManagerService extends SystemService implements EnabledComponentC * Note: Must be called while holding {@code mLock}. * * @param enabled new state for VR mode. * @param running2dInVr true if we have a top-level 2D intent. * @param component new component to be bound as a VR listener. * @param userId user owning the component to be bound. * @param calling the component currently using VR mode. * @param processId the process hosting the activity specified by calling. * @param calling the component currently using VR mode or a 2D intent. * * @return {@code true} if the component/user combination specified is valid. */ private boolean updateCurrentVrServiceLocked(boolean enabled, @NonNull ComponentName component, int userId, ComponentName calling) { private boolean updateCurrentVrServiceLocked(boolean enabled, boolean running2dInVr, @NonNull ComponentName component, int userId, int processId, ComponentName calling) { boolean sendUpdatedCaller = false; final long identity = Binder.clearCallingIdentity(); Loading Loading @@ -777,6 +789,8 @@ public class VrManagerService extends SystemService implements EnabledComponentC sendUpdatedCaller = true; } mCurrentVrModeComponent = calling; mRunning2dInVr = running2dInVr; mVrAppProcessId = processId; if (mCurrentVrModeUser != userId) { mCurrentVrModeUser = userId; Loading @@ -794,11 +808,13 @@ public class VrManagerService extends SystemService implements EnabledComponentC if (mCurrentVrService != null && sendUpdatedCaller) { final ComponentName c = mCurrentVrModeComponent; final boolean b = running2dInVr; final int pid = processId; mCurrentVrService.sendEvent(new PendingEvent() { @Override public void runEvent(IInterface service) throws RemoteException { IVrListener l = (IVrListener) service; l.focusedActivityChanged(c); l.focusedActivityChanged(c, b, pid); } }); } Loading Loading @@ -1001,20 +1017,20 @@ public class VrManagerService extends SystemService implements EnabledComponentC */ private void consumeAndApplyPendingStateLocked(boolean disconnectIfNoPendingState) { if (mPendingState != null) { updateCurrentVrServiceLocked(mPendingState.enabled, mPendingState.targetPackageName, mPendingState.userId, updateCurrentVrServiceLocked(mPendingState.enabled, mPendingState.running2dInVr, mPendingState.targetPackageName, mPendingState.userId, mPendingState.processId, mPendingState.callingPackage); mPendingState = null; } else if (disconnectIfNoPendingState) { updateCurrentVrServiceLocked(false, null, 0, null); updateCurrentVrServiceLocked(false, false, null, 0, -1, null); } } private void logStateLocked() { ComponentName currentBoundService = (mCurrentVrService == null) ? null : mCurrentVrService.getComponent(); VrState current = new VrState(mVrModeEnabled, currentBoundService, mCurrentVrModeUser, mCurrentVrModeComponent, mWasDefaultGranted); VrState current = new VrState(mVrModeEnabled, mRunning2dInVr, currentBoundService, mCurrentVrModeUser, mVrAppProcessId, mCurrentVrModeComponent, mWasDefaultGranted); if (mLoggingDeque.size() == EVENT_LOG_SIZE) { mLoggingDeque.removeFirst(); } Loading Loading @@ -1058,27 +1074,24 @@ public class VrManagerService extends SystemService implements EnabledComponentC * Implementation of VrManagerInternal calls. These are callable from system services. */ private void setVrMode(boolean enabled, @NonNull ComponentName targetPackageName, int userId, @NonNull ComponentName callingPackage) { int userId, int processId, @NonNull ComponentName callingPackage) { synchronized (mLock) { VrState pending; ComponentName targetListener; ComponentName foregroundVrComponent; // If the device is in persistent VR mode, then calls to disable VR mode are ignored, // and the system default VR listener is used. boolean targetEnabledState = enabled || mPersistentVrModeEnabled; if (!enabled && mPersistentVrModeEnabled) { boolean running2dInVr = !enabled && mPersistentVrModeEnabled; if (running2dInVr) { targetListener = mDefaultVrService; // Current foreground component isn't a VR one (in 2D app case) foregroundVrComponent = null; } else { targetListener = targetPackageName; foregroundVrComponent = callingPackage; } pending = new VrState( targetEnabledState, targetListener, userId, foregroundVrComponent); pending = new VrState(targetEnabledState, running2dInVr, targetListener, userId, processId, callingPackage); if (!mVrModeAllowed) { // We're not allowed to be in VR mode. Make this state pending. This will be Loading @@ -1103,8 +1116,8 @@ public class VrManagerService extends SystemService implements EnabledComponentC mPendingState = null; } updateCurrentVrServiceLocked( targetEnabledState, targetListener, userId, foregroundVrComponent); updateCurrentVrServiceLocked(targetEnabledState, running2dInVr, targetListener, userId, processId, callingPackage); } } Loading @@ -1113,7 +1126,7 @@ public class VrManagerService extends SystemService implements EnabledComponentC setPersistentModeAndNotifyListenersLocked(enabled); // Disabling persistent mode when not showing a VR should disable the overall vr mode. if (!enabled && mCurrentVrModeComponent == null) { setVrMode(false, null, 0, null); setVrMode(false, null, 0, -1, null); } } } Loading