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

Commit a40adc92 authored by Thales Lima's avatar Thales Lima Committed by Android (Google) Code Review
Browse files

Merge changes from topic "cherrypicker-L55500000962914710:N74000001402311199" into main

* changes:
  Create new hotseat spec tests
  Add new attribute to hotseat specs
parents 50939148 1f19c95d
Loading
Loading
Loading
Loading
+56 −43
Original line number Diff line number Diff line
@@ -205,9 +205,11 @@ public class DeviceProfile {
    public int hotseatBarEndOffset;
    public int hotseatQsbSpace;
    public int springLoadedHotseatBarTopMarginPx;
    // Start is the side next to the nav bar, end is the side next to the workspace
    public final int hotseatBarSidePaddingStartPx;
    public final int hotseatBarSidePaddingEndPx;
    // These 2 values are only used for isVerticalBar
    // Padding between edge of screen and hotseat
    public final int mHotseatBarEdgePaddingPx;
    // Space between hotseat and workspace (not used in responsive)
    public final int mHotseatBarWorkspaceSpacePx;
    public int hotseatQsbWidth; // only used when isQsbInline
    public final int hotseatQsbHeight;
    public final int hotseatQsbVisualHeight;
@@ -497,19 +499,32 @@ public class DeviceProfile {
        numShownAllAppsColumns =
                isTwoPanels ? inv.numDatabaseAllAppsColumns : inv.numAllAppsColumns;

        int hotseatBarBottomSpace = pxFromDp(inv.hotseatBarBottomSpace[mTypeIndex], mMetrics);
        int hotseatBarBottomSpace;
        int minQsbMargin = res.getDimensionPixelSize(R.dimen.min_qsb_margin);

        if (mIsResponsiveGrid) {
            HotseatSpecs hotseatSpecs =
                    HotseatSpecs.create(new ResourceHelper(context,
                            isTwoPanels ? inv.hotseatSpecsTwoPanelId : inv.hotseatSpecsId));
            mResponsiveHotseatSpec = hotseatSpecs.getCalculatedHeightSpec(heightPx);
            mResponsiveHotseatSpec =
                    isVerticalBarLayout() ? hotseatSpecs.getCalculatedWidthSpec(widthPx)
                            : hotseatSpecs.getCalculatedHeightSpec(heightPx);
            hotseatQsbSpace = mResponsiveHotseatSpec.getHotseatQsbSpace();
            hotseatBarBottomSpace =
                    isVerticalBarLayout() ? 0 : mResponsiveHotseatSpec.getEdgePadding();
            mHotseatBarEdgePaddingPx =
                    isVerticalBarLayout() ? mResponsiveHotseatSpec.getEdgePadding() : 0;
            mHotseatBarWorkspaceSpacePx = 0;
        } else {
            hotseatQsbSpace = pxFromDp(inv.hotseatQsbSpace[mTypeIndex], mMetrics);
            hotseatBarBottomSpace = pxFromDp(inv.hotseatBarBottomSpace[mTypeIndex], mMetrics);
            mHotseatBarEdgePaddingPx =
                    isVerticalBarLayout() ? workspacePageIndicatorHeight : 0;
            mHotseatBarWorkspaceSpacePx =
                    res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_side_padding);
        }

        if (!isVerticalBarLayout()) {
            // Have a little space between the inset and the QSB
            if (mInsets.bottom + minQsbMargin > hotseatBarBottomSpace) {
                int availableSpace = hotseatQsbSpace - (mInsets.bottom - hotseatBarBottomSpace);
@@ -529,14 +544,11 @@ public class DeviceProfile {
            } else {
                hotseatBarBottomSpacePx = hotseatBarBottomSpace;
            }
        }

        springLoadedHotseatBarTopMarginPx = res.getDimensionPixelSize(
                R.dimen.spring_loaded_hotseat_top_margin);
        hotseatBarSidePaddingEndPx =
                res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_side_padding);
        // Add a bit of space between nav bar and hotseat in vertical bar layout.
        hotseatBarSidePaddingStartPx = isVerticalBarLayout() ? workspacePageIndicatorHeight : 0;
        updateHotseatSizes(pxFromDp(inv.iconSize[INDEX_DEFAULT], mMetrics));
        updateHotseatSizes(pxFromDp(inv.iconSize[mTypeIndex], mMetrics));
        if (areNavButtonsInline && !isPhone) {
            inlineNavButtonsEndSpacingPx =
                    res.getDimensionPixelSize(inv.inlineNavButtonsEndSpacing);
@@ -562,10 +574,9 @@ public class DeviceProfile {
            int availableResponsiveWidth =
                    availableWidthPx - (isVerticalBarLayout() ? hotseatBarSizePx : 0);
            int numColumns = getPanelCount() * inv.numColumns;
            // don't use availableHeightPx because it subtracts bottom padding,
            // but the workspace go behind it
            int availableResponsiveHeight =
                    heightPx - mInsets.top - (isVerticalBarLayout() ? 0 : hotseatBarSizePx);
            // don't use availableHeightPx because it subtracts mInsets.bottom
            int availableResponsiveHeight = heightPx - mInsets.top
                            - (isVerticalBarLayout() ? 0 : hotseatBarSizePx);
            mResponsiveWidthSpec = workspaceSpecs.getCalculatedWidthSpec(numColumns,
                    availableResponsiveWidth);
            mResponsiveHeightSpec = workspaceSpecs.getCalculatedHeightSpec(inv.numRows,
@@ -738,8 +749,8 @@ public class DeviceProfile {
        hotseatCellHeightPx = getIconSizeWithOverlap(hotseatIconSizePx);

        if (isVerticalBarLayout()) {
            hotseatBarSizePx = hotseatIconSizePx + hotseatBarSidePaddingStartPx
                    + hotseatBarSidePaddingEndPx;
            hotseatBarSizePx = hotseatIconSizePx + mHotseatBarEdgePaddingPx
                    + mHotseatBarWorkspaceSpacePx;
        } else if (isQsbInline) {
            hotseatBarSizePx = Math.max(hotseatIconSizePx, hotseatQsbVisualHeight)
                    + hotseatBarBottomSpacePx;
@@ -1007,6 +1018,7 @@ public class DeviceProfile {
                iconSizePx = mIconSizeSteps.getIconSmallerThan(cellWidthPx);
            }

            // TODO(b/296400197): isVerticalBar shouldn't show labels anymore
            iconDrawablePaddingPx = getNormalizedIconDrawablePadding();
            int iconTextHeight = Utilities.calculateTextHeight(iconTextSizePx);
            int cellContentHeight = iconSizePx + iconDrawablePaddingPx + iconTextHeight;
@@ -1491,7 +1503,8 @@ public class DeviceProfile {
        if (isVerticalBarLayout()) {
            if (mIsResponsiveGrid) {
                padding.top = mResponsiveHeightSpec.getStartPaddingPx();
                padding.bottom = mResponsiveHeightSpec.getEndPaddingPx();
                padding.bottom = Math.max(0,
                        mResponsiveHeightSpec.getEndPaddingPx() - mInsets.bottom);
                if (isSeascape()) {
                    padding.left = hotseatBarSizePx + mResponsiveWidthSpec.getEndPaddingPx();
                    padding.right = mResponsiveWidthSpec.getStartPaddingPx();
@@ -1504,9 +1517,9 @@ public class DeviceProfile {
                padding.bottom = edgeMarginPx;
                if (isSeascape()) {
                    padding.left = hotseatBarSizePx;
                    padding.right = hotseatBarSidePaddingStartPx;
                    padding.right = mHotseatBarEdgePaddingPx;
                } else {
                    padding.left = hotseatBarSidePaddingStartPx;
                    padding.left = mHotseatBarEdgePaddingPx;
                    padding.right = hotseatBarSizePx;
                }
            }
@@ -1560,11 +1573,11 @@ public class DeviceProfile {
                    + diffOverlapFactor), 0);

            if (isSeascape()) {
                hotseatBarPadding.set(mInsets.left + hotseatBarSidePaddingStartPx, paddingTop,
                        hotseatBarSidePaddingEndPx, paddingBottom);
                hotseatBarPadding.set(mInsets.left + mHotseatBarEdgePaddingPx, paddingTop,
                        mHotseatBarWorkspaceSpacePx, paddingBottom);
            } else {
                hotseatBarPadding.set(hotseatBarSidePaddingEndPx, paddingTop,
                        mInsets.right + hotseatBarSidePaddingStartPx, paddingBottom);
                hotseatBarPadding.set(mHotseatBarWorkspaceSpacePx, paddingTop,
                        mInsets.right + mHotseatBarEdgePaddingPx, paddingBottom);
            }
        } else if (isTaskbarPresent) {
            // Center the QSB vertically with hotseat
@@ -1910,10 +1923,10 @@ public class DeviceProfile {
        writer.println(prefix + "\tinv.hotseatColumnSpan: " + inv.hotseatColumnSpan[mTypeIndex]);
        writer.println(prefix + pxToDpStr("hotseatCellHeightPx", hotseatCellHeightPx));
        writer.println(prefix + pxToDpStr("hotseatBarBottomSpacePx", hotseatBarBottomSpacePx));
        writer.println(prefix + pxToDpStr("hotseatBarSidePaddingStartPx",
                hotseatBarSidePaddingStartPx));
        writer.println(prefix + pxToDpStr("hotseatBarSidePaddingEndPx",
                hotseatBarSidePaddingEndPx));
        writer.println(prefix + pxToDpStr("mHotseatBarEdgePaddingPx",
                mHotseatBarEdgePaddingPx));
        writer.println(prefix + pxToDpStr("mHotseatBarWorkspaceSpacePx",
                mHotseatBarWorkspaceSpacePx));
        writer.println(prefix + pxToDpStr("hotseatBarEndOffset", hotseatBarEndOffset));
        writer.println(prefix + pxToDpStr("hotseatQsbSpace", hotseatQsbSpace));
        writer.println(prefix + pxToDpStr("hotseatQsbHeight", hotseatQsbHeight));
+26 −6
Original line number Diff line number Diff line
@@ -21,14 +21,20 @@ import android.util.Log
import com.android.launcher3.R
import com.android.launcher3.util.ResourceHelper

class HotseatSpecs(val specs: List<HotseatSpec>) {
class HotseatSpecs(val widthSpecs: List<HotseatSpec>, val heightSpecs: List<HotseatSpec>) {

    fun getCalculatedHeightSpec(availableHeight: Int): CalculatedHotseatSpec {
        val spec = specs.firstOrNull { availableHeight <= it.maxAvailableSize }
        val spec = heightSpecs.firstOrNull { availableHeight <= it.maxAvailableSize }
        check(spec != null) { "No available height spec found within $availableHeight." }
        return CalculatedHotseatSpec(availableHeight, spec)
    }

    fun getCalculatedWidthSpec(availableWidth: Int): CalculatedHotseatSpec {
        val spec = widthSpecs.firstOrNull { availableWidth <= it.maxAvailableSize }
        check(spec != null) { "No available width spec found within $availableWidth." }
        return CalculatedHotseatSpec(availableWidth, spec)
    }

    companion object {
        private const val XML_HOTSEAT_SPEC = "hotseatSpec"

@@ -36,7 +42,9 @@ class HotseatSpecs(val specs: List<HotseatSpec>) {
        fun create(resourceHelper: ResourceHelper): HotseatSpecs {
            val parser = ResponsiveSpecsParser(resourceHelper)
            val specs = parser.parseXML(XML_HOTSEAT_SPEC, ::HotseatSpec)
            return HotseatSpecs(specs.filter { it.specType == ResponsiveSpec.SpecType.HEIGHT })
            val (widthSpecs, heightSpecs) =
                specs.partition { it.specType == ResponsiveSpec.SpecType.WIDTH }
            return HotseatSpecs(widthSpecs, heightSpecs)
        }
    }
}
@@ -44,7 +52,8 @@ class HotseatSpecs(val specs: List<HotseatSpec>) {
data class HotseatSpec(
    val maxAvailableSize: Int,
    val specType: ResponsiveSpec.SpecType,
    val hotseatQsbSpace: SizeSpec
    val hotseatQsbSpace: SizeSpec,
    val edgePadding: SizeSpec
) {

    init {
@@ -63,7 +72,8 @@ data class HotseatSpec(
                        R.styleable.ResponsiveSpec_specType,
                        ResponsiveSpec.SpecType.HEIGHT.ordinal
                    )],
        hotseatQsbSpace = specs.getOrError(SizeSpec.XmlTags.HOTSEAT_QSB_SPACE)
        hotseatQsbSpace = specs.getOrError(SizeSpec.XmlTags.HOTSEAT_QSB_SPACE),
        edgePadding = specs.getOrError(SizeSpec.XmlTags.EDGE_PADDING)
    )

    fun isValid(): Boolean {
@@ -82,7 +92,10 @@ data class HotseatSpec(
    }

    private fun allSpecsAreValid(): Boolean {
        return hotseatQsbSpace.isValid() && hotseatQsbSpace.onlyFixedSize()
        return hotseatQsbSpace.isValid() &&
            hotseatQsbSpace.onlyFixedSize() &&
            edgePadding.isValid() &&
            edgePadding.onlyFixedSize()
    }

    companion object {
@@ -95,13 +108,18 @@ class CalculatedHotseatSpec(val availableSpace: Int, val spec: HotseatSpec) {
    var hotseatQsbSpace: Int = 0
        private set

    var edgePadding: Int = 0
        private set

    init {
        hotseatQsbSpace = spec.hotseatQsbSpace.getCalculatedValue(availableSpace)
        edgePadding = spec.edgePadding.getCalculatedValue(availableSpace)
    }

    override fun hashCode(): Int {
        var result = availableSpace.hashCode()
        result = 31 * result + hotseatQsbSpace.hashCode()
        result = 31 * result + edgePadding.hashCode()
        result = 31 * result + spec.hashCode()
        return result
    }
@@ -110,12 +128,14 @@ class CalculatedHotseatSpec(val availableSpace: Int, val spec: HotseatSpec) {
        return other is CalculatedHotseatSpec &&
            availableSpace == other.availableSpace &&
            hotseatQsbSpace == other.hotseatQsbSpace &&
            edgePadding == other.edgePadding &&
            spec == other.spec
    }

    override fun toString(): String {
        return "${this::class.simpleName}(" +
            "availableSpace=$availableSpace, hotseatQsbSpace=$hotseatQsbSpace, " +
            "edgePadding=$edgePadding, " +
            "${spec::class.simpleName}.maxAvailableSize=${spec.maxAvailableSize}" +
            ")"
    }
+1 −0
Original line number Diff line number Diff line
@@ -121,6 +121,7 @@ data class SizeSpec(
        const val GUTTER = "gutter"
        const val CELL_SIZE = "cellSize"
        const val HOTSEAT_QSB_SPACE = "hotseatQsbSpace"
        const val EDGE_PADDING = "edgePadding"
    }

    companion object {
+127 −0
Original line number Diff line number Diff line
DeviceProfile:
	1 dp = 2.625 px
	isTablet:false
	isPhone:true
	transposeLayoutWithOrientation:true
	isGestureMode:true
	isLandscape:false
	isMultiWindowMode:false
	isTwoPanels:false
	windowX: 0.0px (0.0dp)
	windowY: 0.0px (0.0dp)
	widthPx: 1080.0px (411.42856dp)
	heightPx: 2400.0px (914.2857dp)
	availableWidthPx: 1080.0px (411.42856dp)
	availableHeightPx: 2219.0px (845.3333dp)
	mInsets.left: 0.0px (0.0dp)
	mInsets.top: 118.0px (44.95238dp)
	mInsets.right: 0.0px (0.0dp)
	mInsets.bottom: 63.0px (24.0dp)
	aspectRatio:2.2222223
	isResponsiveGrid:false
	isScalableGrid:false
	inv.numRows: 5
	inv.numColumns: 5
	inv.numSearchContainerColumns: 5
	minCellSize: PointF(0.0, 0.0)dp
	cellWidthPx: 159.0px (60.57143dp)
	cellHeightPx: 229.0px (87.2381dp)
	getCellSize().x: 207.0px (78.85714dp)
	getCellSize().y: 383.0px (145.90475dp)
	cellLayoutBorderSpacePx Horizontal: 0.0px (0.0dp)
	cellLayoutBorderSpacePx Vertical: 0.0px (0.0dp)
	cellLayoutPaddingPx.left: 21.0px (8.0dp)
	cellLayoutPaddingPx.top: 28.0px (10.666667dp)
	cellLayoutPaddingPx.right: 21.0px (8.0dp)
	cellLayoutPaddingPx.bottom: 28.0px (10.666667dp)
	iconSizePx: 147.0px (56.0dp)
	iconTextSizePx: 38.0px (14.476191dp)
	iconDrawablePaddingPx: 12.0px (4.571429dp)
	inv.numFolderRows: 4
	inv.numFolderColumns: 4
	folderCellWidthPx: 195.0px (74.28571dp)
	folderCellHeightPx: 230.0px (87.61905dp)
	folderChildIconSizePx: 147.0px (56.0dp)
	folderChildTextSizePx: 38.0px (14.476191dp)
	folderChildDrawablePaddingPx: 4.0px (1.5238096dp)
	folderCellLayoutBorderSpacePx.x: 0.0px (0.0dp)
	folderCellLayoutBorderSpacePx.y: 0.0px (0.0dp)
	folderContentPaddingLeftRight: 21.0px (8.0dp)
	folderTopPadding: 63.0px (24.0dp)
	folderFooterHeight: 147.0px (56.0dp)
	bottomSheetTopPadding: 146.0px (55.61905dp)
	bottomSheetOpenDuration: 267
	bottomSheetCloseDuration: 267
	bottomSheetWorkspaceScale: 1.0
	bottomSheetDepth: 0.0
	allAppsShiftRange: 788.0px (300.1905dp)
	allAppsTopPadding: 0.0px (0.0dp)
	allAppsOpenDuration: 600
	allAppsCloseDuration: 300
	allAppsIconSizePx: 147.0px (56.0dp)
	allAppsIconTextSizePx: 38.0px (14.476191dp)
	allAppsIconDrawablePaddingPx: 21.0px (8.0dp)
	allAppsCellHeightPx: 315.0px (120.0dp)
	allAppsCellWidthPx: 189.0px (72.0dp)
	allAppsBorderSpacePxX: 42.0px (16.0dp)
	allAppsBorderSpacePxY: 42.0px (16.0dp)
	numShownAllAppsColumns: 5
	allAppsLeftRightPadding: 0.0px (0.0dp)
	allAppsLeftRightMargin: 0.0px (0.0dp)
	hotseatBarSizePx: 273.0px (104.0dp)
	inv.hotseatColumnSpan: 5
	hotseatCellHeightPx: 166.0px (63.238094dp)
	hotseatBarBottomSpacePx: 126.0px (48.0dp)
	mHotseatBarEdgePaddingPx: 0.0px (0.0dp)
	mHotseatBarWorkspaceSpacePx: 0.0px (0.0dp)
	hotseatBarEndOffset: 0.0px (0.0dp)
	hotseatQsbSpace: 0.0px (0.0dp)
	hotseatQsbHeight: 0.0px (0.0dp)
	springLoadedHotseatBarTopMarginPx: 200.0px (76.190475dp)
	getHotseatLayoutPadding(context).top: 0.0px (0.0dp)
	getHotseatLayoutPadding(context).bottom: 107.0px (40.761906dp)
	getHotseatLayoutPadding(context).left: 21.0px (8.0dp)
	getHotseatLayoutPadding(context).right: 21.0px (8.0dp)
	numShownHotseatIcons: 5
	hotseatBorderSpace: 0.0px (0.0dp)
	isQsbInline: false
	hotseatQsbWidth: 0.0px (0.0dp)
	isTaskbarPresent:false
	isTaskbarPresentInApps:false
	taskbarHeight: 0.0px (0.0dp)
	stashedTaskbarHeight: 0.0px (0.0dp)
	taskbarBottomMargin: 0.0px (0.0dp)
	taskbarIconSize: 0.0px (0.0dp)
	desiredWorkspaceHorizontalMarginPx: 21.0px (8.0dp)
	workspacePadding.left: 0.0px (0.0dp)
	workspacePadding.top: 0.0px (0.0dp)
	workspacePadding.right: 0.0px (0.0dp)
	workspacePadding.bottom: 245.0px (93.333336dp)
	iconScale: 1.0px (0.3809524dp)
	cellScaleToFit : 1.0px (0.3809524dp)
	extraSpace: 773.0px (294.4762dp)
	unscaled extraSpace: 773.0px (294.4762dp)
	maxEmptySpace: 0.0px (0.0dp)
	workspaceTopPadding: 0.0px (0.0dp)
	workspaceBottomPadding: 0.0px (0.0dp)
	overviewTaskMarginPx: 0.0px (0.0dp)
	overviewTaskIconSizePx: 0.0px (0.0dp)
	overviewTaskIconDrawableSizePx: 0.0px (0.0dp)
	overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp)
	overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp)
	overviewActionsTopMarginPx: 0.0px (0.0dp)
	overviewActionsHeight: 0.0px (0.0dp)
	overviewActionsClaimedSpaceBelow: 63.0px (24.0dp)
	overviewActionsButtonSpacing: 0.0px (0.0dp)
	overviewPageSpacing: 0.0px (0.0dp)
	overviewRowSpacing: 0.0px (0.0dp)
	overviewGridSideMargin: 0.0px (0.0dp)
	dropTargetBarTopMarginPx: 84.0px (32.0dp)
	dropTargetBarSizePx: 147.0px (56.0dp)
	dropTargetBarBottomMarginPx: 42.0px (16.0dp)
	getCellLayoutSpringLoadShrunkTop(): 391.0px (148.95238dp)
	getCellLayoutSpringLoadShrunkBottom(): 1927.0px (734.0952dp)
	workspaceSpringLoadedMinNextPageVisiblePx: 63.0px (24.0dp)
	getWorkspaceSpringLoadScale(): 0.7781155px (0.29642496dp)
	getCellLayoutHeight(): 1974.0px (752.0dp)
	getCellLayoutWidth(): 1080.0px (411.42856dp)
+127 −0
Original line number Diff line number Diff line
DeviceProfile:
	1 dp = 2.625 px
	isTablet:false
	isPhone:true
	transposeLayoutWithOrientation:true
	isGestureMode:false
	isLandscape:false
	isMultiWindowMode:false
	isTwoPanels:false
	windowX: 0.0px (0.0dp)
	windowY: 0.0px (0.0dp)
	widthPx: 1080.0px (411.42856dp)
	heightPx: 2400.0px (914.2857dp)
	availableWidthPx: 1080.0px (411.42856dp)
	availableHeightPx: 2156.0px (821.3333dp)
	mInsets.left: 0.0px (0.0dp)
	mInsets.top: 118.0px (44.95238dp)
	mInsets.right: 0.0px (0.0dp)
	mInsets.bottom: 126.0px (48.0dp)
	aspectRatio:2.2222223
	isResponsiveGrid:false
	isScalableGrid:false
	inv.numRows: 5
	inv.numColumns: 5
	inv.numSearchContainerColumns: 5
	minCellSize: PointF(0.0, 0.0)dp
	cellWidthPx: 159.0px (60.57143dp)
	cellHeightPx: 229.0px (87.2381dp)
	getCellSize().x: 207.0px (78.85714dp)
	getCellSize().y: 379.0px (144.38095dp)
	cellLayoutBorderSpacePx Horizontal: 0.0px (0.0dp)
	cellLayoutBorderSpacePx Vertical: 0.0px (0.0dp)
	cellLayoutPaddingPx.left: 21.0px (8.0dp)
	cellLayoutPaddingPx.top: 28.0px (10.666667dp)
	cellLayoutPaddingPx.right: 21.0px (8.0dp)
	cellLayoutPaddingPx.bottom: 28.0px (10.666667dp)
	iconSizePx: 147.0px (56.0dp)
	iconTextSizePx: 38.0px (14.476191dp)
	iconDrawablePaddingPx: 12.0px (4.571429dp)
	inv.numFolderRows: 4
	inv.numFolderColumns: 4
	folderCellWidthPx: 195.0px (74.28571dp)
	folderCellHeightPx: 230.0px (87.61905dp)
	folderChildIconSizePx: 147.0px (56.0dp)
	folderChildTextSizePx: 38.0px (14.476191dp)
	folderChildDrawablePaddingPx: 4.0px (1.5238096dp)
	folderCellLayoutBorderSpacePx.x: 0.0px (0.0dp)
	folderCellLayoutBorderSpacePx.y: 0.0px (0.0dp)
	folderContentPaddingLeftRight: 21.0px (8.0dp)
	folderTopPadding: 63.0px (24.0dp)
	folderFooterHeight: 147.0px (56.0dp)
	bottomSheetTopPadding: 146.0px (55.61905dp)
	bottomSheetOpenDuration: 267
	bottomSheetCloseDuration: 267
	bottomSheetWorkspaceScale: 1.0
	bottomSheetDepth: 0.0
	allAppsShiftRange: 788.0px (300.1905dp)
	allAppsTopPadding: 0.0px (0.0dp)
	allAppsOpenDuration: 600
	allAppsCloseDuration: 300
	allAppsIconSizePx: 147.0px (56.0dp)
	allAppsIconTextSizePx: 38.0px (14.476191dp)
	allAppsIconDrawablePaddingPx: 21.0px (8.0dp)
	allAppsCellHeightPx: 315.0px (120.0dp)
	allAppsCellWidthPx: 189.0px (72.0dp)
	allAppsBorderSpacePxX: 42.0px (16.0dp)
	allAppsBorderSpacePxY: 42.0px (16.0dp)
	numShownAllAppsColumns: 5
	allAppsLeftRightPadding: 0.0px (0.0dp)
	allAppsLeftRightMargin: 0.0px (0.0dp)
	hotseatBarSizePx: 294.0px (112.0dp)
	inv.hotseatColumnSpan: 5
	hotseatCellHeightPx: 166.0px (63.238094dp)
	hotseatBarBottomSpacePx: 147.0px (56.0dp)
	mHotseatBarEdgePaddingPx: 0.0px (0.0dp)
	mHotseatBarWorkspaceSpacePx: 0.0px (0.0dp)
	hotseatBarEndOffset: 0.0px (0.0dp)
	hotseatQsbSpace: 0.0px (0.0dp)
	hotseatQsbHeight: 0.0px (0.0dp)
	springLoadedHotseatBarTopMarginPx: 200.0px (76.190475dp)
	getHotseatLayoutPadding(context).top: 0.0px (0.0dp)
	getHotseatLayoutPadding(context).bottom: 128.0px (48.761906dp)
	getHotseatLayoutPadding(context).left: 21.0px (8.0dp)
	getHotseatLayoutPadding(context).right: 21.0px (8.0dp)
	numShownHotseatIcons: 5
	hotseatBorderSpace: 0.0px (0.0dp)
	isQsbInline: false
	hotseatQsbWidth: 0.0px (0.0dp)
	isTaskbarPresent:false
	isTaskbarPresentInApps:false
	taskbarHeight: 0.0px (0.0dp)
	stashedTaskbarHeight: 0.0px (0.0dp)
	taskbarBottomMargin: 0.0px (0.0dp)
	taskbarIconSize: 0.0px (0.0dp)
	desiredWorkspaceHorizontalMarginPx: 21.0px (8.0dp)
	workspacePadding.left: 0.0px (0.0dp)
	workspacePadding.top: 0.0px (0.0dp)
	workspacePadding.right: 0.0px (0.0dp)
	workspacePadding.bottom: 203.0px (77.333336dp)
	iconScale: 1.0px (0.3809524dp)
	cellScaleToFit : 1.0px (0.3809524dp)
	extraSpace: 752.0px (286.4762dp)
	unscaled extraSpace: 752.0px (286.4762dp)
	maxEmptySpace: 0.0px (0.0dp)
	workspaceTopPadding: 0.0px (0.0dp)
	workspaceBottomPadding: 0.0px (0.0dp)
	overviewTaskMarginPx: 0.0px (0.0dp)
	overviewTaskIconSizePx: 0.0px (0.0dp)
	overviewTaskIconDrawableSizePx: 0.0px (0.0dp)
	overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp)
	overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp)
	overviewActionsTopMarginPx: 0.0px (0.0dp)
	overviewActionsHeight: 0.0px (0.0dp)
	overviewActionsClaimedSpaceBelow: 126.0px (48.0dp)
	overviewActionsButtonSpacing: 0.0px (0.0dp)
	overviewPageSpacing: 0.0px (0.0dp)
	overviewRowSpacing: 0.0px (0.0dp)
	overviewGridSideMargin: 0.0px (0.0dp)
	dropTargetBarTopMarginPx: 84.0px (32.0dp)
	dropTargetBarSizePx: 147.0px (56.0dp)
	dropTargetBarBottomMarginPx: 42.0px (16.0dp)
	getCellLayoutSpringLoadShrunkTop(): 391.0px (148.95238dp)
	getCellLayoutSpringLoadShrunkBottom(): 1906.0px (726.0952dp)
	workspaceSpringLoadedMinNextPageVisiblePx: 63.0px (24.0dp)
	getWorkspaceSpringLoadScale(): 0.77572966px (0.29551607dp)
	getCellLayoutHeight(): 1953.0px (744.0dp)
	getCellLayoutWidth(): 1080.0px (411.42856dp)
Loading