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

Commit aa14b197 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes Id68b6c37,I16d39d3e into sc-dev

* changes:
  Fix a couple of crashes when taskbar isn't yet attached
  Subtract taskbar size from DeviceProfile#availableHeight
parents 42364510 786dd93f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -222,7 +222,7 @@ public abstract class BaseQuickstepLauncher extends Launcher
            mTaskbarController.cleanup();
            mTaskbarController = null;
        }
        if (FeatureFlags.ENABLE_TASKBAR.get() && mDeviceProfile.isTablet) {
        if (mDeviceProfile.isTaskbarPresent) {
            TaskbarActivityContext taskbarActivityContext = new TaskbarActivityContext(this);
            mTaskbarController = new TaskbarController(this,
                    taskbarActivityContext.getTaskbarContainerView());
+4 −8
Original line number Diff line number Diff line
@@ -89,8 +89,7 @@ public class TaskbarController {
        mTaskbarView = mTaskbarContainerView.findViewById(R.id.taskbar_view);
        mTaskbarView.construct(createTaskbarViewCallbacks());
        mWindowManager = mLauncher.getWindowManager();
        mTaskbarSize = new Point(MATCH_PARENT,
                mLauncher.getResources().getDimensionPixelSize(R.dimen.taskbar_size));
        mTaskbarSize = new Point(MATCH_PARENT, mLauncher.getDeviceProfile().taskbarSize);
        mTaskbarStateHandler = mLauncher.getTaskbarStateHandler();
        mTaskbarVisibilityController = new TaskbarVisibilityController(mLauncher,
                createTaskbarVisibilityControllerCallbacks());
@@ -233,14 +232,10 @@ public class TaskbarController {
    }

    private void removeFromWindowManager() {
        if (mTaskbarContainerView.isAttachedToWindow()) {
        mWindowManager.removeViewImmediate(mTaskbarContainerView);
    }
    }

    private void addToWindowManager() {
        removeFromWindowManager();

        final int gravity = Gravity.BOTTOM;

        mWindowLayoutParams = new WindowManager.LayoutParams(
@@ -378,7 +373,8 @@ public class TaskbarController {
     * @return Whether the given View is in the same window as Taskbar.
     */
    public boolean isViewInTaskbar(View v) {
        return mTaskbarContainerView.getWindowId().equals(v.getWindowId());
        return mTaskbarContainerView.isAttachedToWindow()
                && mTaskbarContainerView.getWindowId().equals(v.getWindowId());
    }

    /**
+3 −0
Original line number Diff line number Diff line
@@ -260,4 +260,7 @@
    <dimen name="search_settings_icon_vertical_offset">16dp</dimen>
    <dimen name="search_line_spacing">4dp</dimen>

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

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

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

     // Taskbar
    public boolean isTaskbarPresent;
    public int taskbarSize;

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

        mInfo = info;
@@ -192,6 +200,22 @@ public class DeviceProfile {
                : Configuration.ORIENTATION_PORTRAIT);
        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);
        desiredWorkspaceLeftRightMarginPx = isVerticalBarLayout() ? 0 : edgeMarginPx;

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

        public Context getDisplayContext() {
            return mDisplayContext;
        }

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