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

Commit 12d0eff0 authored by Thales Lima's avatar Thales Lima
Browse files

Make inline qsb part of grid attrs

This should make it more configurable, and be independent of the screen size set by the user.

Fix: 223726518
Test: atest Launcher3Tests:HotseatSizeTest
Test: atest Launcher3Tests:InlineQsbTest
Change-Id: If04f3fb0f556103f60b580c757a9fc06da561516
parent ee09cd03
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -316,6 +316,18 @@
        <attr name="horizontalMarginTwoPanelLandscape" format="float"/>
        <!-- defaults to horizontalMargin if not specified -->
        <attr name="horizontalMarginTwoPanelPortrait" format="float"/>

        <!-- By default all are false -->
        <attr name="inlineQsb" format="integer" >
            <!-- Enable on landscape only -->
            <flag name="portrait" value="1" />
            <!-- Enable on portrait only -->
            <flag name="landscape" value="2" />
            <!-- Enable on two panel portrait only -->
            <flag name="twoPanelPortrait" value="4" />
            <!-- Enable on two panel landscape only -->
            <flag name="twoPanelLandscape" value="8" />
        </attr>
    </declare-styleable>

    <declare-styleable name="CellLayout">
+18 −14
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@

package com.android.launcher3;

import static com.android.launcher3.InvariantDeviceProfile.INDEX_DEFAULT;
import static com.android.launcher3.InvariantDeviceProfile.INDEX_LANDSCAPE;
import static com.android.launcher3.InvariantDeviceProfile.INDEX_TWO_PANEL_LANDSCAPE;
import static com.android.launcher3.InvariantDeviceProfile.INDEX_TWO_PANEL_PORTRAIT;
import static com.android.launcher3.ResourceUtils.pxFromDp;
import static com.android.launcher3.Utilities.dpiFromPx;
import static com.android.launcher3.Utilities.pxFromSp;
@@ -58,7 +62,6 @@ public class DeviceProfile {

    // Device properties
    public final boolean isTablet;
    public final boolean isLargeTablet;
    public final boolean isPhone;
    public final boolean transposeLayoutWithOrientation;
    public final boolean isTwoPanels;
@@ -253,7 +256,6 @@ public class DeviceProfile {
        // Determine device posture.
        mInfo = info;
        isTablet = info.isTablet(windowBounds);
        isLargeTablet = info.isLargeTablet(windowBounds);
        isPhone = !isTablet;
        isTwoPanels = isTablet && useTwoPanels;
        isTaskbarPresent = isTablet && ApiWrapper.TASKBAR_DRAWN_IN_PROCESS;
@@ -278,15 +280,15 @@ public class DeviceProfile {

        if (isTwoPanels) {
            if (isLandscape) {
                mTypeIndex = InvariantDeviceProfile.INDEX_TWO_PANEL_LANDSCAPE;
                mTypeIndex = INDEX_TWO_PANEL_LANDSCAPE;
            } else {
                mTypeIndex = InvariantDeviceProfile.INDEX_TWO_PANEL_PORTRAIT;
                mTypeIndex = INDEX_TWO_PANEL_PORTRAIT;
            }
        } else {
            if (isLandscape) {
                mTypeIndex = InvariantDeviceProfile.INDEX_LANDSCAPE;
                mTypeIndex = INDEX_LANDSCAPE;
            } else {
                mTypeIndex = InvariantDeviceProfile.INDEX_DEFAULT;
                mTypeIndex = INDEX_DEFAULT;
            }
        }

@@ -348,9 +350,12 @@ public class DeviceProfile {
        workspaceCellPaddingXPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_padding_x);

        hotseatQsbHeight = res.getDimensionPixelSize(R.dimen.qsb_widget_height);
        // Whether QSB might be inline in appropriate orientation (landscape).
        boolean canQsbInline = isLargeTablet && hotseatQsbHeight > 0;
        isQsbInline = canQsbInline && isLandscape;
        // Whether QSB might be inline in appropriate orientation (e.g. landscape).
        boolean canQsbInline = (isTwoPanels ? inv.inlineQsb[INDEX_TWO_PANEL_PORTRAIT]
                || inv.inlineQsb[INDEX_TWO_PANEL_LANDSCAPE]
                : inv.inlineQsb[INDEX_DEFAULT] || inv.inlineQsb[INDEX_LANDSCAPE])
                && hotseatQsbHeight > 0;
        isQsbInline = inv.inlineQsb[mTypeIndex] && canQsbInline;

        // We shrink hotseat sizes regardless of orientation, if nav buttons are inline and QSB
        // might be inline in either orientations, to keep hotseat size consistent across rotation.
@@ -388,7 +393,7 @@ public class DeviceProfile {
                res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_extra_vertical_size);
        hotseatBorderSpace = pxFromDp(inv.hotseatBorderSpaces[mTypeIndex], mMetrics);
        updateHotseatIconSize(
                pxFromDp(inv.iconSize[InvariantDeviceProfile.INDEX_DEFAULT], mMetrics));
                pxFromDp(inv.iconSize[INDEX_DEFAULT], mMetrics));

        qsbBottomMarginOriginalPx = isScalableGrid
                ? res.getDimensionPixelSize(R.dimen.scalable_grid_qsb_bottom_margin)
@@ -812,11 +817,11 @@ public class DeviceProfile {

    private void updateFolderCellSize(float scale, Resources res) {
        float invIconSizeDp = isVerticalBarLayout()
                ? inv.iconSize[InvariantDeviceProfile.INDEX_LANDSCAPE]
                : inv.iconSize[InvariantDeviceProfile.INDEX_DEFAULT];
                ? inv.iconSize[INDEX_LANDSCAPE]
                : inv.iconSize[INDEX_DEFAULT];
        folderChildIconSizePx = Math.max(1, pxFromDp(invIconSizeDp, mMetrics, scale));
        folderChildTextSizePx =
                pxFromSp(inv.iconTextSize[InvariantDeviceProfile.INDEX_DEFAULT], mMetrics, scale);
                pxFromSp(inv.iconTextSize[INDEX_DEFAULT], mMetrics, scale);
        folderLabelTextSizePx = (int) (folderChildTextSizePx * folderLabelTextScale);

        int textHeight = Utilities.calculateTextHeight(folderChildTextSizePx);
@@ -1167,7 +1172,6 @@ public class DeviceProfile {
        writer.println(prefix + "\t1 dp = " + mMetrics.density + " px");

        writer.println(prefix + "\tisTablet:" + isTablet);
        writer.println(prefix + "\tisLargeTablet:" + isLargeTablet);
        writer.println(prefix + "\tisPhone:" + isPhone);
        writer.println(prefix + "\ttransposeLayoutWithOrientation:"
                + transposeLayoutWithOrientation);
+26 −0
Original line number Diff line number Diff line
@@ -167,6 +167,7 @@ public class InvariantDeviceProfile {
    public String dbFile;
    public int defaultLayoutId;
    int demoModeLayoutId;
    boolean[] inlineQsb = new boolean[COUNT_SIZES];

    /**
     * An immutable list of supported profiles.
@@ -250,6 +251,8 @@ public class InvariantDeviceProfile {
                COUNT_SIZES);
        System.arraycopy(defaultDisplayOption.borderSpaces, 0, result.borderSpaces, 0,
                COUNT_SIZES);
        System.arraycopy(defaultDisplayOption.inlineQsb, 0, result.inlineQsb, 0,
                COUNT_SIZES);

        initGrid(context, myInfo, result, deviceType);
    }
@@ -371,6 +374,8 @@ public class InvariantDeviceProfile {
            devicePaddings = new DevicePaddings(context, devicePaddingId);
        }

        inlineQsb = displayOption.inlineQsb;

        // If the partner customization apk contains any grid overrides, apply them
        // Supported overrides: numRows, numColumns, iconSize
        applyPartnerDeviceProfileOverrides(context, metrics);
@@ -783,12 +788,18 @@ public class InvariantDeviceProfile {

    @VisibleForTesting
    static final class DisplayOption {
        private static final int INLINE_QSB_FOR_PORTRAIT = 1 << 0;
        private static final int INLINE_QSB_FOR_LANDSCAPE = 1 << 1;
        private static final int INLINE_QSB_FOR_TWO_PANEL_PORTRAIT = 1 << 2;
        private static final int INLINE_QSB_FOR_TWO_PANEL_LANDSCAPE = 1 << 3;
        private static final int DONT_INLINE_QSB = 0;

        public final GridOption grid;

        private final float minWidthDps;
        private final float minHeightDps;
        private final boolean canBeDefault;
        private final boolean[] inlineQsb = new boolean[COUNT_SIZES];

        private final PointF[] minCellSize = new PointF[COUNT_SIZES];

@@ -815,6 +826,19 @@ public class InvariantDeviceProfile {

            canBeDefault = a.getBoolean(R.styleable.ProfileDisplayOption_canBeDefault, false);

            int inlineForRotation = a.getInt(R.styleable.ProfileDisplayOption_inlineQsb,
                    DONT_INLINE_QSB);
            inlineQsb[INDEX_DEFAULT] =
                    (inlineForRotation & INLINE_QSB_FOR_PORTRAIT) == INLINE_QSB_FOR_PORTRAIT;
            inlineQsb[INDEX_LANDSCAPE] =
                    (inlineForRotation & INLINE_QSB_FOR_LANDSCAPE) == INLINE_QSB_FOR_LANDSCAPE;
            inlineQsb[INDEX_TWO_PANEL_PORTRAIT] =
                    (inlineForRotation & INLINE_QSB_FOR_TWO_PANEL_PORTRAIT)
                            == INLINE_QSB_FOR_TWO_PANEL_PORTRAIT;
            inlineQsb[INDEX_TWO_PANEL_LANDSCAPE] =
                    (inlineForRotation & INLINE_QSB_FOR_TWO_PANEL_LANDSCAPE)
                            == INLINE_QSB_FOR_TWO_PANEL_LANDSCAPE;

            float x;
            float y;

@@ -1004,6 +1028,7 @@ public class InvariantDeviceProfile {
                allAppsIconSizes[i] = 0;
                allAppsIconTextSizes[i] = 0;
                allAppsBorderSpaces[i] = new PointF();
                inlineQsb[i] = false;
            }
        }

@@ -1046,6 +1071,7 @@ public class InvariantDeviceProfile {
                allAppsIconTextSizes[i] += p.allAppsIconTextSizes[i];
                allAppsBorderSpaces[i].x += p.allAppsBorderSpaces[i].x;
                allAppsBorderSpaces[i].y += p.allAppsBorderSpaces[i].y;
                inlineQsb[i] |= p.inlineQsb[i];
            }

            folderBorderSpace += p.folderBorderSpace;
+0 −8
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_NAVIGATION_MODE_GESTURE_BUTTON;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.PackageManagerHelper.getPackageFilter;
import static com.android.launcher3.util.window.WindowManagerProxy.MIN_LARGE_TABLET_WIDTH;
import static com.android.launcher3.util.window.WindowManagerProxy.MIN_TABLET_WIDTH;

import android.annotation.SuppressLint;
@@ -348,13 +347,6 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable {
            return smallestSizeDp(bounds) >= MIN_TABLET_WIDTH;
        }

        /**
         * Returns {@code true} if the bounds represent a large tablet.
         */
        public boolean isLargeTablet(WindowBounds bounds) {
            return smallestSizeDp(bounds) >= MIN_LARGE_TABLET_WIDTH;
        }

        /**
         * Returns smallest size in dp for given bounds.
         */
+0 −1
Original line number Diff line number Diff line
@@ -58,7 +58,6 @@ import com.android.launcher3.util.WindowBounds;
public class WindowManagerProxy implements ResourceBasedOverride {

    public static final int MIN_TABLET_WIDTH = 600;
    public static final int MIN_LARGE_TABLET_WIDTH = 720;

    public static final MainThreadInitializedObject<WindowManagerProxy> INSTANCE =
            forOverride(WindowManagerProxy.class, R.string.window_manager_proxy_class);
Loading