diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 21 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityRecord.java | 5 |
2 files changed, 25 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 7ef38b278868..73aeee920a0b 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2384,7 +2384,19 @@ public class ActivityManagerService extends IActivityManager.Stub idleUids(); } break; case VR_MODE_CHANGE_MSG: { - mVrController.onVrModeChanged((ActivityRecord) msg.obj); + if (mVrController.onVrModeChanged((ActivityRecord) msg.obj)) { + synchronized (ActivityManagerService.this) { + if (mVrController.shouldDisableNonVrUiLocked()) { + // If we are in a VR mode where Picture-in-Picture mode is unsupported, + // then remove the pinned stack. + final PinnedActivityStack pinnedStack = mStackSupervisor.getStack( + PINNED_STACK_ID); + if (pinnedStack != null) { + mStackSupervisor.removeStackLocked(PINNED_STACK_ID); + } + } + } + } } break; case NOTIFY_VR_SLEEPING_MSG: { notifyVrManagerOfSleepState(msg.arg1 != 0); @@ -13329,6 +13341,13 @@ public class ActivityManagerService extends IActivityManager.Stub } } + /** + * @return whether the system should disable UI modes incompatible with VR mode. + */ + boolean shouldDisableNonVrUiLocked() { + return mVrController.shouldDisableNonVrUiLocked(); + } + @Override public boolean isTopOfTask(IBinder token) { synchronized (this) { diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 3a2941467cb6..6e7ad177fc07 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -1164,6 +1164,11 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo return false; } + // Check to see if we are in VR mode, and disallow PiP if so + if (service.shouldDisableNonVrUiLocked()) { + return false; + } + boolean isCurrentAppLocked = mStackSupervisor.getLockTaskModeState() != LOCK_TASK_MODE_NONE; boolean isKeyguardLocked = service.isKeyguardLocked(); boolean hasPinnedStack = mStackSupervisor.getStack(PINNED_STACK_ID) != null; |