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

Commit 110c3f38 authored by Matthew Ng's avatar Matthew Ng Committed by android-build-merger
Browse files

Merge "Removed the experimental code for gestural mode" into qt-dev

am: 04f13b42

Change-Id: I47d96024a90b12b657ec09d72bed1a822e546c93
parents 7acc3301 04f13b42
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -51,18 +51,23 @@
         that just start below the notch. -->
    <dimen name="display_cutout_touchable_region_size">12dp</dimen>

    <!-- EXPERIMENT BEGIN -->
    <!-- Height of the bottom navigation bar frame; this is different than navigation_bar_height
         where that is the height reported to all the other windows to resize themselves around the
         navigation bar window but navigation_bar_frame_height is reported to SystemUI navigation
         bar view's window -->
    <dimen name="navigation_bar_frame_height">@dimen/navigation_bar_height</dimen>
    <!-- Height of the bottom navigation bar frame in landscape -->
    <dimen name="navigation_bar_frame_height_landscape">@dimen/navigation_bar_frame_height</dimen>
    <!-- Width of the left/right navigation bar frame; this is different than navigation_bar_width
         where that is the width reported to all the other windows to resize themselves around the
         navigation bar window but navigation_bar_frame_width is reported to SystemUI navigation
         bar view's window -->
    <dimen name="navigation_bar_frame_width">@dimen/navigation_bar_width</dimen>
    <!-- EXPERIMENT END-->

    <!-- The height of the navigation gesture area; if the size is larger than the navigation bar
        frame width/height, then the difference is the spacing from the navigation bar window to
        the area that detects gestures. -->
    <dimen name="navigation_bar_gesture_height">@dimen/navigation_bar_frame_height</dimen>

    <!-- Height of the bottom navigation / system bar in car mode. -->
    <dimen name="navigation_bar_height_car_mode">96dp</dimen>
+2 −0
Original line number Diff line number Diff line
@@ -1747,6 +1747,8 @@
  <java-symbol type="dimen" name="navigation_bar_height_landscape" />
  <java-symbol type="dimen" name="navigation_bar_width" />
  <java-symbol type="dimen" name="navigation_bar_frame_height" />
  <java-symbol type="dimen" name="navigation_bar_frame_height_landscape" />
  <java-symbol type="dimen" name="navigation_bar_gesture_height" />
  <java-symbol type="dimen" name="navigation_bar_frame_width" />
  <java-symbol type="dimen" name="navigation_bar_height_car_mode" />
  <java-symbol type="dimen" name="navigation_bar_height_landscape_car_mode" />
+54 −31
Original line number Diff line number Diff line
@@ -268,6 +268,9 @@ public class DisplayPolicy {
    private int[] mNavigationBarHeightForRotationInCarMode = new int[4];
    private int[] mNavigationBarWidthForRotationInCarMode = new int[4];

    /** See {@link #getNavigationBarFrameHeight} */
    private int[] mNavigationBarFrameHeightForRotationDefault = new int[4];

    /** Cached value of {@link ScreenShapeHelper#getWindowOutsetBottomPx} */
    @Px private int mWindowOutsetBottom;

@@ -286,10 +289,6 @@ public class DisplayPolicy {
                }
            };

    // EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
    private NavigationBarExperiments mExperiments = new NavigationBarExperiments();
    // EXPERIMENT END

    @GuardedBy("mHandler")
    private SleepToken mDreamingSleepToken;

@@ -1621,11 +1620,9 @@ public class DisplayPolicy {
            // It's a system nav bar or a portrait screen; nav bar goes on bottom.
            final int top = cutoutSafeUnrestricted.bottom
                    - getNavigationBarHeight(rotation, uiMode);
            // EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
            final int topNavBar = cutoutSafeUnrestricted.bottom
                    - mExperiments.getNavigationBarFrameHeight();
                    - getNavigationBarFrameHeight(rotation, uiMode);
            navigationFrame.set(0, topNavBar, displayWidth, displayFrames.mUnrestricted.bottom);
            // EXPERIMENT END
            displayFrames.mStable.bottom = displayFrames.mStableFullscreen.bottom = top;
            if (transientNavBarShowing) {
                mNavigationBarController.setBarShowingLw(true);
@@ -1648,11 +1645,7 @@ public class DisplayPolicy {
            // Landscape screen; nav bar goes to the right.
            final int left = cutoutSafeUnrestricted.right
                    - getNavigationBarWidth(rotation, uiMode);
            // EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
            final int leftNavBar = cutoutSafeUnrestricted.right
                    - mExperiments.getNavigationBarFrameWidth();
            navigationFrame.set(leftNavBar, 0, displayFrames.mUnrestricted.right, displayHeight);
            // EXPERIMENT END
            navigationFrame.set(left, 0, displayFrames.mUnrestricted.right, displayHeight);
            displayFrames.mStable.right = displayFrames.mStableFullscreen.right = left;
            if (transientNavBarShowing) {
                mNavigationBarController.setBarShowingLw(true);
@@ -1675,11 +1668,7 @@ public class DisplayPolicy {
            // Seascape screen; nav bar goes to the left.
            final int right = cutoutSafeUnrestricted.left
                    + getNavigationBarWidth(rotation, uiMode);
            // EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
            final int rightNavBar = cutoutSafeUnrestricted.left
                    + mExperiments.getNavigationBarFrameWidth();
            navigationFrame.set(displayFrames.mUnrestricted.left, 0, rightNavBar, displayHeight);
            // EXPERIMENT END
            navigationFrame.set(displayFrames.mUnrestricted.left, 0, right, displayHeight);
            displayFrames.mStable.left = displayFrames.mStableFullscreen.left = right;
            if (transientNavBarShowing) {
                mNavigationBarController.setBarShowingLw(true);
@@ -1887,10 +1876,21 @@ public class DisplayPolicy {
                }
            }

            // EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
            // Offset the ime to avoid overlapping with the nav bar
            mExperiments.offsetWindowFramesForNavBar(mNavigationBarPosition, win);
            // EXPERIMENT END
            // In case the navigation bar is on the bottom, we use the frame height instead of the
            // regular height for the insets we send to the IME as we need some space to show
            // additional buttons in SystemUI when the IME is up.
            if (mNavigationBarPosition == NAV_BAR_BOTTOM) {
                final int rotation = displayFrames.mRotation;
                final int uimode = mService.mPolicy.getUiMode();
                final int navHeightOffset = getNavigationBarFrameHeight(rotation, uimode)
                        - getNavigationBarHeight(rotation, uimode);
                if (navHeightOffset > 0) {
                    cf.bottom -= navHeightOffset;
                    sf.bottom -= navHeightOffset;
                    vf.bottom -= navHeightOffset;
                    dcf.bottom -= navHeightOffset;
                }
            }

            // IM dock windows always go to the bottom of the screen.
            attrs.gravity = Gravity.BOTTOM;
@@ -2623,6 +2623,7 @@ public class DisplayPolicy {
        final int upsideDownRotation = displayRotation.getUpsideDownRotation();
        final int landscapeRotation = displayRotation.getLandscapeRotation();
        final int seascapeRotation = displayRotation.getSeascapeRotation();
        final int uiMode = mService.mPolicy.getUiMode();

        if (hasStatusBar()) {
            mStatusBarHeightForRotation[portraitRotation] =
@@ -2646,6 +2647,14 @@ public class DisplayPolicy {
        mNavigationBarHeightForRotationDefault[seascapeRotation] =
                res.getDimensionPixelSize(R.dimen.navigation_bar_height_landscape);

        // Height of the navigation bar frame when presented horizontally at bottom
        mNavigationBarFrameHeightForRotationDefault[portraitRotation] =
        mNavigationBarFrameHeightForRotationDefault[upsideDownRotation] =
                res.getDimensionPixelSize(R.dimen.navigation_bar_frame_height);
        mNavigationBarFrameHeightForRotationDefault[landscapeRotation] =
        mNavigationBarFrameHeightForRotationDefault[seascapeRotation] =
                res.getDimensionPixelSize(R.dimen.navigation_bar_frame_height_landscape);

        // Width of the navigation bar when presented vertically along one side
        mNavigationBarWidthForRotationDefault[portraitRotation] =
        mNavigationBarWidthForRotationDefault[upsideDownRotation] =
@@ -2674,16 +2683,10 @@ public class DisplayPolicy {
        mSideGestureInset = res.getDimensionPixelSize(R.dimen.config_backGestureInset);
        mNavigationBarLetsThroughTaps = res.getBoolean(R.bool.config_navBarTapThrough);

        // EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
        mExperiments.onConfigurationChanged(uiContext);
        // EXPERIMENT END

        // EXPERIMENT: TODO(b/113952590): Replace with real code after experiment.
        // This should calculate how much above the frame we accept gestures. Currently,
        // we extend the frame to capture the gestures, so this is 0.
        mBottomGestureAdditionalInset = mExperiments.getNavigationBarFrameHeight()
                - mExperiments.getNavigationBarFrameHeight();
        // EXPERIMENT END
        // This should calculate how much above the frame we accept gestures.
        mBottomGestureAdditionalInset = Math.max(0,
                res.getDimensionPixelSize(R.dimen.navigation_bar_gesture_height)
                        - getNavigationBarFrameHeight(portraitRotation, uiMode));

        updateConfigurationAndScreenSizeDependentBehaviors();
        mWindowOutsetBottom = ScreenShapeHelper.getWindowOutsetBottomPx(mContext.getResources());
@@ -2748,6 +2751,26 @@ public class DisplayPolicy {
        }
    }

    /**
     * Get the Navigation Bar Frame height. This dimension is the height of the navigation bar that
     * is used for spacing to show additional buttons on the navigation bar (such as the ime
     * switcher when ime is visible) while {@link #getNavigationBarHeight} is used for the visible
     * height that we send to the app as content insets that can be smaller.
     * <p>
     * In car mode it will return the same height as {@link #getNavigationBarHeight}
     *
     * @param rotation specifies rotation to return dimension from
     * @param uiMode to determine if in car mode
     * @return navigation bar frame height
     */
    private int getNavigationBarFrameHeight(int rotation, int uiMode) {
        if (ALTERNATE_CAR_MODE_NAV_SIZE && (uiMode & UI_MODE_TYPE_MASK) == UI_MODE_TYPE_CAR) {
            return mNavigationBarHeightForRotationInCarMode[rotation];
        } else {
            return mNavigationBarFrameHeightForRotationDefault[rotation];
        }
    }

    /**
     * Return the display height available after excluding any screen
     * decorations that could never be removed in Honeycomb. That is, system bar or
+0 −120
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.wm;

import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_BOTTOM;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_LEFT;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_RIGHT;

import android.content.Context;
import android.graphics.Rect;

/**
 * This class acts as a proxy for Navigation Bar experiments enabled with custom overlays
 * {@see OverlayManagerService}. By default with no overlays, this class will essentially do nothing
 * and pass the original resource data back. By default the navigation bar height/width is the same
 * as the frame height/width and therefore any offsets calculated will cancel out and do nothing.
 * TODO(b/113952590): Remove class once experiment in bug is completed
 */
public class NavigationBarExperiments {

    private int mNavigationBarHeight;
    private int mNavigationBarWidth;

    /**
     * This represents the height of the navigation bar buttons. With no experiments or overlays
     * enabled, the frame height is the same as the normal navigation bar height.
     */
    private int mNavigationBarFrameHeight;

    /**
     * This represents the width of the navigation bar buttons. With no experiments or overlays
     * enabled, the frame width is the same as the normal navigation bar width.
     */
    private int mNavigationBarFrameWidth;

    /**
     * Call when configuration change to refresh resource dimensions
     * @param systemUiContext to get the resource values
     */
    public void onConfigurationChanged(Context systemUiContext) {
        // Cache all the values again
        mNavigationBarHeight = systemUiContext.getResources().getDimensionPixelSize(
                com.android.internal.R.dimen.navigation_bar_height);
        mNavigationBarWidth = systemUiContext.getResources().getDimensionPixelSize(
                com.android.internal.R.dimen.navigation_bar_width);
        mNavigationBarFrameHeight = systemUiContext.getResources().getDimensionPixelSize(
                com.android.internal.R.dimen.navigation_bar_frame_height);
        mNavigationBarFrameWidth = systemUiContext.getResources().getDimensionPixelSize(
                com.android.internal.R.dimen.navigation_bar_frame_width);
    }

    public int getNavigationBarHeight() {
        return mNavigationBarHeight;
    }

    public int getNavigationBarWidth() {
        return mNavigationBarWidth;
    }

    public int getNavigationBarFrameHeight() {
        return mNavigationBarFrameHeight;
    }

    public int getNavigationBarFrameWidth() {
        return mNavigationBarFrameWidth;
    }

    /**
     * If navigation frame width/height is different than navigation bar width/height then only
     * offset the ime's and home activity's window rects depending on the navigation bar position to
     * add a gap where the navigation bar would have been drawn. With no experiments or overlays
     * enabled, the height/width is the same as the frame height/width and the offsets calculated
     * will be 0 and this function will do nothing.
     * @param navPosition position of navigation bar (left, right or bottom)
     * @param w the window that is being offset by experiment
     */
    public void offsetWindowFramesForNavBar(int navPosition, WindowState w) {
        if (w.getAttrs().type != TYPE_INPUT_METHOD) {
            return;
        }

        final WindowFrames windowFrames = w.getWindowFrames();
        final Rect cf = windowFrames.mContentFrame;
        switch (navPosition) {
            case NAV_BAR_BOTTOM:
                int navHeight = getNavigationBarFrameHeight() - getNavigationBarHeight();
                if (navHeight > 0) {
                    cf.bottom -= navHeight;
                    windowFrames.mStableFrame.bottom -= navHeight;
                }
                break;
            case NAV_BAR_LEFT:
            case NAV_BAR_RIGHT:
                int navWidth = getNavigationBarFrameWidth() - getNavigationBarWidth();
                if (navWidth > 0) {
                    if (navPosition == NAV_BAR_LEFT) {
                        cf.left += navWidth;
                    } else {
                        cf.right -= navWidth;
                    }
                }
                break;
        }
    }
}