From b6ccae999fe285eb9c0c17ca88c271046afdfc20 Mon Sep 17 00:00:00 2001 From: Craig Donner Date: Wed, 13 Apr 2016 10:19:04 -0700 Subject: [PATCH] Fix VR mode handling when the screen blanks and unblanks. When blanking the screen, turn off VR mode if it's enabled, and when waking up after the keyboard goes away, turn it on if the top activity has requested VR mode. Bug: 26751056 Change-Id: Ib57b1c59e083e3615a02408d922c8c7be645ce92 --- .../server/am/ActivityManagerService.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 3ec51e3dfa42f..bf1cb798577c8 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1468,6 +1468,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final int NOTIFY_PINNED_STACK_ANIMATION_ENDED_LISTENERS_MSG = 66; static final int NOTIFY_FORCED_RESIZABLE_MSG = 67; static final int NOTIFY_ACTIVITY_DISMISSING_DOCKED_STACK_MSG = 68; + static final int VR_MODE_APPLY_IF_NEEDED_MSG = 69; static final int FIRST_ACTIVITY_STACK_MSG = 100; static final int FIRST_BROADCAST_QUEUE_MSG = 200; @@ -2238,6 +2239,17 @@ public final class ActivityManagerService extends ActivityManagerNative } vrService.setVrMode(vrMode, requestedPackage, userId, callingPackage); } break; + case VR_MODE_APPLY_IF_NEEDED_MSG: { + 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()); + } + } break; } } }; @@ -3018,6 +3030,11 @@ public final class ActivityManagerService extends ActivityManagerNative mHandler.obtainMessage(VR_MODE_CHANGE_MSG, 0, 0, r)); } + private void applyVrModeIfNeededLocked(ActivityRecord r, boolean enable) { + mHandler.sendMessage( + mHandler.obtainMessage(VR_MODE_APPLY_IF_NEEDED_MSG, enable ? 1 : 0, 0, r)); + } + final void showAskCompatModeDialogLocked(ActivityRecord r) { Message msg = Message.obtain(); msg.what = SHOW_COMPAT_MODE_DIALOG_UI_MSG; @@ -6534,6 +6551,7 @@ public final class ActivityManagerService extends ActivityManagerNative // Some stack visibility might change (e.g. docked stack) mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); + applyVrModeIfNeededLocked(mFocusedActivity, true); } } } finally { @@ -20905,6 +20923,7 @@ public final class ActivityManagerService extends ActivityManagerNative SleepTokenImpl token = new SleepTokenImpl(tag); mSleepTokens.add(token); updateSleepIfNeededLocked(); + applyVrModeIfNeededLocked(mFocusedActivity, false); return token; } }