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

Commit 36941636 authored by Winson Chung's avatar Winson Chung
Browse files

Allow gestural nav to trigger the transient bars when swiping on side edges

Bug: 130907345
Test: Enable gestural nav, enter immersive mode, swipe from edges
Change-Id: If7c29b92f027b9995a8a535756d8fdb5b81d7543
parent 2f1382ea
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -3268,6 +3268,10 @@
    <!-- Controls whether the navigation bar lets through taps. -->
    <!-- Controls whether the navigation bar lets through taps. -->
    <bool name="config_navBarTapThrough">false</bool>
    <bool name="config_navBarTapThrough">false</bool>


    <!-- Controls whether the side edge gestures can always trigger the transient nav bar to
         show. -->
    <bool name="config_navBarAlwaysShowOnSideEdgeGesture">false</bool>

    <!-- Controls the size of the back gesture inset. -->
    <!-- Controls the size of the back gesture inset. -->
    <dimen name="config_backGestureInset">0dp</dimen>
    <dimen name="config_backGestureInset">0dp</dimen>


+1 −0
Original line number Original line Diff line number Diff line
@@ -2858,6 +2858,7 @@
  <java-symbol type="integer" name="config_navBarInteractionMode" />
  <java-symbol type="integer" name="config_navBarInteractionMode" />
  <java-symbol type="bool" name="config_navBarCanMove" />
  <java-symbol type="bool" name="config_navBarCanMove" />
  <java-symbol type="bool" name="config_navBarTapThrough" />
  <java-symbol type="bool" name="config_navBarTapThrough" />
  <java-symbol type="bool" name="config_navBarAlwaysShowOnSideEdgeGesture" />
  <java-symbol type="bool" name="config_navBarNeedsScrim" />
  <java-symbol type="bool" name="config_navBarNeedsScrim" />
  <java-symbol type="dimen" name="config_backGestureInset" />
  <java-symbol type="dimen" name="config_backGestureInset" />
  <java-symbol type="color" name="system_bar_background_semi_transparent" />
  <java-symbol type="color" name="system_bar_background_semi_transparent" />
+4 −0
Original line number Original line Diff line number Diff line
@@ -37,4 +37,8 @@
     {@link Window#setEnsuringNavigationBarContrastWhenTransparent}. -->
     {@link Window#setEnsuringNavigationBarContrastWhenTransparent}. -->
    <bool name="config_navBarNeedsScrim">false</bool>
    <bool name="config_navBarNeedsScrim">false</bool>


    <!-- Controls whether the side edge gestures can always trigger the transient nav bar to
         show. -->
    <bool name="config_navBarAlwaysShowOnSideEdgeGesture">true</bool>

</resources>
</resources>
+18 −5
Original line number Original line Diff line number Diff line
@@ -123,6 +123,7 @@ import android.content.res.Resources;
import android.graphics.Insets;
import android.graphics.Insets;
import android.graphics.PixelFormat;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.Region;
import android.hardware.input.InputManager;
import android.hardware.input.InputManager;
import android.hardware.power.V1_0.PowerHint;
import android.hardware.power.V1_0.PowerHint;
import android.os.Handler;
import android.os.Handler;
@@ -228,7 +229,6 @@ public class DisplayPolicy {
    private int mBottomGestureAdditionalInset;
    private int mBottomGestureAdditionalInset;
    @Px
    @Px
    private int mSideGestureInset;
    private int mSideGestureInset;
    private boolean mNavigationBarLetsThroughTaps;


    private StatusBarManagerInternal getStatusBarManagerInternal() {
    private StatusBarManagerInternal getStatusBarManagerInternal() {
        synchronized (mServiceAcquireLock) {
        synchronized (mServiceAcquireLock) {
@@ -250,6 +250,8 @@ public class DisplayPolicy {
    private volatile boolean mHasNavigationBar;
    private volatile boolean mHasNavigationBar;
    // Can the navigation bar ever move to the side?
    // Can the navigation bar ever move to the side?
    private volatile boolean mNavigationBarCanMove;
    private volatile boolean mNavigationBarCanMove;
    private volatile boolean mNavigationBarLetsThroughTaps;
    private volatile boolean mNavigationBarAlwaysShowOnSideGesture;


    // Written by vr manager thread, only read in this class.
    // Written by vr manager thread, only read in this class.
    private volatile boolean mPersistentVrModeEnabled;
    private volatile boolean mPersistentVrModeEnabled;
@@ -461,22 +463,31 @@ public class DisplayPolicy {


                    @Override
                    @Override
                    public void onSwipeFromBottom() {
                    public void onSwipeFromBottom() {
                        if (mNavigationBar != null
                        if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_BOTTOM) {
                                && mNavigationBarPosition == NAV_BAR_BOTTOM) {
                            requestTransientBars(mNavigationBar);
                            requestTransientBars(mNavigationBar);
                        }
                        }
                    }
                    }


                    @Override
                    @Override
                    public void onSwipeFromRight() {
                    public void onSwipeFromRight() {
                        if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_RIGHT) {
                        final Region excludedRegion =
                                mDisplayContent.calculateSystemGestureExclusion();
                        final boolean sideAllowed = mNavigationBarAlwaysShowOnSideGesture
                                || mNavigationBarPosition == NAV_BAR_RIGHT;
                        if (mNavigationBar != null && sideAllowed
                                && !mSystemGestures.currentGestureStartedInRegion(excludedRegion)) {
                            requestTransientBars(mNavigationBar);
                            requestTransientBars(mNavigationBar);
                        }
                        }
                    }
                    }


                    @Override
                    @Override
                    public void onSwipeFromLeft() {
                    public void onSwipeFromLeft() {
                        if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_LEFT) {
                        final Region excludedRegion =
                                mDisplayContent.calculateSystemGestureExclusion();
                        final boolean sideAllowed = mNavigationBarAlwaysShowOnSideGesture
                                || mNavigationBarPosition == NAV_BAR_LEFT;
                        if (mNavigationBar != null && sideAllowed
                                && !mSystemGestures.currentGestureStartedInRegion(excludedRegion)) {
                            requestTransientBars(mNavigationBar);
                            requestTransientBars(mNavigationBar);
                        }
                        }
                    }
                    }
@@ -2694,6 +2705,8 @@ public class DisplayPolicy {
        mNavBarOpacityMode = res.getInteger(R.integer.config_navBarOpacityMode);
        mNavBarOpacityMode = res.getInteger(R.integer.config_navBarOpacityMode);
        mSideGestureInset = res.getDimensionPixelSize(R.dimen.config_backGestureInset);
        mSideGestureInset = res.getDimensionPixelSize(R.dimen.config_backGestureInset);
        mNavigationBarLetsThroughTaps = res.getBoolean(R.bool.config_navBarTapThrough);
        mNavigationBarLetsThroughTaps = res.getBoolean(R.bool.config_navBarTapThrough);
        mNavigationBarAlwaysShowOnSideGesture =
                res.getBoolean(R.bool.config_navBarAlwaysShowOnSideEdgeGesture);


        // This should calculate how much above the frame we accept gestures.
        // This should calculate how much above the frame we accept gestures.
        mBottomGestureAdditionalInset = Math.max(0,
        mBottomGestureAdditionalInset = Math.max(0,
+5 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.wm;


import android.content.Context;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.Region;
import android.hardware.display.DisplayManagerGlobal;
import android.hardware.display.DisplayManagerGlobal;
import android.os.Handler;
import android.os.Handler;
import android.os.SystemClock;
import android.os.SystemClock;
@@ -201,6 +202,10 @@ class SystemGesturesPointerEventListener implements PointerEventListener {
        }
        }
    }
    }


    protected boolean currentGestureStartedInRegion(Region r) {
        return r.contains((int) mDownX[0], (int) mDownY[0]);
    }

    private int findIndex(int pointerId) {
    private int findIndex(int pointerId) {
        for (int i = 0; i < mDownPointers; i++) {
        for (int i = 0; i < mDownPointers; i++) {
            if (mDownPointerId[i] == pointerId) {
            if (mDownPointerId[i] == pointerId) {