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

Commit 15883891 authored by Tony Wickham's avatar Tony Wickham
Browse files

Subtract taskbar size from DeviceProfile#availableHeight

Normally availableHeight excludes system insets, but taskbar is added
after availableHeight is calculated. This discrepency causes some bad
calculations such as TaskView size.

Test: touch nav bar when in an app with taskbar present, ensure the
task doesn't jump due to incorrect calculation

Fixes: 179478728
Bug: 171917176
Change-Id: I16d39d3e1d9708e2a64c81b1ac24466f9567d1b9
parent e1a8440d
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -222,7 +222,7 @@ public abstract class BaseQuickstepLauncher extends Launcher
            mTaskbarController.cleanup();
            mTaskbarController.cleanup();
            mTaskbarController = null;
            mTaskbarController = null;
        }
        }
        if (FeatureFlags.ENABLE_TASKBAR.get() && mDeviceProfile.isTablet) {
        if (mDeviceProfile.isTaskbarPresent) {
            TaskbarActivityContext taskbarActivityContext = new TaskbarActivityContext(this);
            TaskbarActivityContext taskbarActivityContext = new TaskbarActivityContext(this);
            mTaskbarController = new TaskbarController(this,
            mTaskbarController = new TaskbarController(this,
                    taskbarActivityContext.getTaskbarContainerView());
                    taskbarActivityContext.getTaskbarContainerView());
+1 −2
Original line number Original line Diff line number Diff line
@@ -89,8 +89,7 @@ public class TaskbarController {
        mTaskbarView = mTaskbarContainerView.findViewById(R.id.taskbar_view);
        mTaskbarView = mTaskbarContainerView.findViewById(R.id.taskbar_view);
        mTaskbarView.construct(createTaskbarViewCallbacks());
        mTaskbarView.construct(createTaskbarViewCallbacks());
        mWindowManager = mLauncher.getWindowManager();
        mWindowManager = mLauncher.getWindowManager();
        mTaskbarSize = new Point(MATCH_PARENT,
        mTaskbarSize = new Point(MATCH_PARENT, mLauncher.getDeviceProfile().taskbarSize);
                mLauncher.getResources().getDimensionPixelSize(R.dimen.taskbar_size));
        mTaskbarStateHandler = mLauncher.getTaskbarStateHandler();
        mTaskbarStateHandler = mLauncher.getTaskbarStateHandler();
        mTaskbarVisibilityController = new TaskbarVisibilityController(mLauncher,
        mTaskbarVisibilityController = new TaskbarVisibilityController(mLauncher,
                createTaskbarVisibilityControllerCallbacks());
                createTaskbarVisibilityControllerCallbacks());
+3 −0
Original line number Original line Diff line number Diff line
@@ -259,4 +259,7 @@
    <dimen name="search_settings_icon_vertical_offset">16dp</dimen>
    <dimen name="search_settings_icon_vertical_offset">16dp</dimen>
    <dimen name="search_line_spacing">4dp</dimen>
    <dimen name="search_line_spacing">4dp</dimen>


<!-- Taskbar related (placeholders to compile in Launcher3 without Quickstep) -->
    <dimen name="taskbar_size">0dp</dimen>

</resources>
</resources>
+26 −2
Original line number Original line Diff line number Diff line
@@ -25,9 +25,12 @@ import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.Rect;
import android.view.Surface;
import android.view.Surface;
import android.view.WindowInsets;
import android.view.WindowManager;


import com.android.launcher3.CellLayout.ContainerType;
import com.android.launcher3.CellLayout.ContainerType;
import com.android.launcher3.DevicePaddings.DevicePadding;
import com.android.launcher3.DevicePaddings.DevicePadding;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.graphics.IconShape;
import com.android.launcher3.graphics.IconShape;
import com.android.launcher3.icons.DotRenderer;
import com.android.launcher3.icons.DotRenderer;
import com.android.launcher3.icons.IconNormalizer;
import com.android.launcher3.icons.IconNormalizer;
@@ -149,6 +152,10 @@ public class DeviceProfile {
    public DotRenderer mDotRendererWorkSpace;
    public DotRenderer mDotRendererWorkSpace;
    public DotRenderer mDotRendererAllApps;
    public DotRenderer mDotRendererAllApps;


     // Taskbar
    public boolean isTaskbarPresent;
    public int taskbarSize;

    DeviceProfile(Context context, InvariantDeviceProfile inv, Info info,
    DeviceProfile(Context context, InvariantDeviceProfile inv, Info info,
            Point minSize, Point maxSize, int width, int height, boolean isLandscape,
            Point minSize, Point maxSize, int width, int height, boolean isLandscape,
            boolean isMultiWindowMode, boolean transposeLayoutWithOrientation,
            boolean isMultiWindowMode, boolean transposeLayoutWithOrientation,
@@ -163,12 +170,13 @@ public class DeviceProfile {
        // Determine sizes.
        // Determine sizes.
        widthPx = width;
        widthPx = width;
        heightPx = height;
        heightPx = height;
        int nonFinalAvailableHeightPx;
        if (isLandscape) {
        if (isLandscape) {
            availableWidthPx = maxSize.x;
            availableWidthPx = maxSize.x;
            availableHeightPx = minSize.y;
            nonFinalAvailableHeightPx = minSize.y;
        } else {
        } else {
            availableWidthPx = minSize.x;
            availableWidthPx = minSize.x;
            availableHeightPx = maxSize.y;
            nonFinalAvailableHeightPx = maxSize.y;
        }
        }


        mInfo = info;
        mInfo = info;
@@ -192,6 +200,22 @@ public class DeviceProfile {
                : Configuration.ORIENTATION_PORTRAIT);
                : Configuration.ORIENTATION_PORTRAIT);
        final Resources res = context.getResources();
        final Resources res = context.getResources();


        isTaskbarPresent = isTablet && FeatureFlags.ENABLE_TASKBAR.get();
        if (isTaskbarPresent) {
            // Taskbar will be added later, but provides bottom insets that we should subtract
            // from availableHeightPx.
            taskbarSize = res.getDimensionPixelSize(R.dimen.taskbar_size);
            WindowInsets windowInsets = DisplayController.INSTANCE.get(context).getHolder(mInfo.id)
                    .getDisplayContext().getSystemService(WindowManager.class)
                    .getCurrentWindowMetrics().getWindowInsets();
            int nonOverlappingTaskbarInset =
                    taskbarSize - windowInsets.getSystemWindowInsetBottom();
            if (nonOverlappingTaskbarInset > 0) {
                nonFinalAvailableHeightPx -= nonOverlappingTaskbarInset;
            }
        }
        availableHeightPx = nonFinalAvailableHeightPx;

        edgeMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_edge_margin);
        edgeMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_edge_margin);
        desiredWorkspaceLeftRightMarginPx = isVerticalBarLayout() ? 0 : edgeMarginPx;
        desiredWorkspaceLeftRightMarginPx = isVerticalBarLayout() ? 0 : edgeMarginPx;


+4 −0
Original line number Original line Diff line number Diff line
@@ -193,6 +193,10 @@ public class DisplayController implements DisplayListener {
                    : new Info(context, display);
                    : new Info(context, display);
        }
        }


        public Context getDisplayContext() {
            return mDisplayContext;
        }

        protected void handleOnChange() {
        protected void handleOnChange() {
            Info oldInfo = mInfo;
            Info oldInfo = mInfo;
            Info newInfo = createInfoForContext(mDisplayContext);
            Info newInfo = createInfoForContext(mDisplayContext);