Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86ecf34c authored by Karthik Ravi Shankar's avatar Karthik Ravi Shankar
Browse files

Handle volume keys to apps in Vr mode



When a device is in Vr mode -
 - Volume key event must be passed to the audio subsystem to reflect
 changes when the configuration is enabled.
 - When the configuration is disabled, neither the apps not the audio
 subsystem should be able to receive the volume key events

Bug: 37625887
Bug: 36280728
Test:
- Verified that the app doesn't receive volume events
- Verified that the system volume bar is also not triggered

Change-Id: I245f7797873f764d0b017879723a6dbff1bb4d36
Signed-off-by: default avatarKarthik Ravi Shankar <karthikrs@google.com>
parent e4e953ae
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2872,4 +2872,8 @@

    <!-- Additional non-platform defined secure settings exposed to Instant Apps -->
    <string-array name="config_allowedSecureInstantAppSettings"></string-array>

    <!-- Handle volume keys directly in Window Manager without passing them to the foreground app -->
    <bool name="config_handleVolumeKeysInWindowManager">false</bool>

</resources>
+1 −0
Original line number Diff line number Diff line
@@ -3010,4 +3010,5 @@
  <java-symbol type="array" name="config_allowedSystemInstantAppSettings" />
  <java-symbol type="array" name="config_allowedSecureInstantAppSettings" />

  <java-symbol type="bool" name="config_handleVolumeKeysInWindowManager" />
</resources>
+16 −4
Original line number Diff line number Diff line
@@ -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.
@@ -1928,6 +1930,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(
@@ -3522,11 +3527,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;
@@ -5911,8 +5923,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) {