diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index a921fd740b7ea..8006f786d4a8e 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2872,4 +2872,8 @@ + + + false + diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 1966f6a894127..cff6eb198473e 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3010,4 +3010,5 @@ + diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index ccdf61fa04921..f0ae1a7354437 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -584,6 +584,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mTranslucentDecorEnabled = true; boolean mUseTvRouting; + private boolean mHandleVolumeKeysInWM; + int mPointerLocationMode = 0; // guarded by mLock // The last window we were told about in focusChanged. @@ -1938,6 +1940,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { mUseTvRouting = AudioSystem.getPlatformType(mContext) == AudioSystem.PLATFORM_TELEVISION; + mHandleVolumeKeysInWM = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_handleVolumeKeysInWindowManager); + readConfigurationDependentBehaviors(); mAccessibilityManager = (AccessibilityManager) context.getSystemService( @@ -3544,11 +3549,18 @@ public class PhoneWindowManager implements WindowManagerPolicy { } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) { - if (mUseTvRouting) { - // On TVs volume keys never go to the foreground app. + if (mUseTvRouting || mHandleVolumeKeysInWM) { + // On TVs or when the configuration is enabled, volume keys never + // go to the foreground app. dispatchDirectAudioEvent(event); return -1; } + + // If the device is in Vr mode, drop the volume keys and don't + // forward it to the application/dispatch the audio event. + if (mPersistentVrModeEnabled) { + return -1; + } } else if (keyCode == KeyEvent.KEYCODE_TAB && event.isMetaPressed()) { // Pass through keyboard navigation keys. return 0; @@ -5957,8 +5969,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } } - if (mUseTvRouting) { - // On TVs, defer special key handlings to + if (mUseTvRouting || mHandleVolumeKeysInWM) { + // Defer special key handlings to // {@link interceptKeyBeforeDispatching()}. result |= ACTION_PASS_TO_USER; } else if ((result & ACTION_PASS_TO_USER) == 0) {