Loading res/values/attrs.xml +3 −0 Original line number Diff line number Diff line Loading @@ -152,6 +152,9 @@ <!-- numHotseatIcons defaults to numColumns, if not specified --> <attr name="numHotseatIcons" format="integer" /> <!-- Number of icons to use when shrinking the hotseat size, defaults to numHotseatIcons / 2 --> <attr name="numShrunkenHotseatIcons" format="integer" /> <!-- Number of icons to use when extending the hotseat size, defaults to 2 * numHotseatIcons --> <attr name="numExtendedHotseatIcons" format="integer" /> Loading src/com/android/launcher3/DeviceProfile.java +29 −8 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import android.view.Surface; import com.android.launcher3.CellLayout.ContainerType; import com.android.launcher3.DevicePaddings.DevicePadding; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.icons.DotRenderer; import com.android.launcher3.icons.GraphicsUtils; import com.android.launcher3.icons.IconNormalizer; Loading @@ -59,6 +58,7 @@ 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; Loading @@ -67,6 +67,7 @@ public class DeviceProfile { // Device properties in current orientation public final boolean isLandscape; public final boolean isMultiWindowMode; public final boolean isGestureMode; public final int windowX; public final int windowY; Loading Loading @@ -229,12 +230,13 @@ public class DeviceProfile { /** TODO: Once we fully migrate to staged split, remove "isMultiWindowMode" */ DeviceProfile(Context context, InvariantDeviceProfile inv, Info info, WindowBounds windowBounds, boolean isMultiWindowMode, boolean transposeLayoutWithOrientation, boolean useTwoPanels) { boolean useTwoPanels, boolean isGestureMode) { this.inv = inv; this.isLandscape = windowBounds.isLandscape(); this.isMultiWindowMode = isMultiWindowMode; this.transposeLayoutWithOrientation = transposeLayoutWithOrientation; this.isGestureMode = isGestureMode; windowX = windowBounds.bounds.left; windowY = windowBounds.bounds.top; Loading @@ -243,6 +245,7 @@ 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; Loading Loading @@ -343,9 +346,15 @@ public class DeviceProfile { workspaceCellPaddingXPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_padding_x); hotseatQsbHeight = res.getDimensionPixelSize(R.dimen.qsb_widget_height); isQsbInline = isTablet && isLandscape && !isTwoPanels && hotseatQsbHeight > 0; isQsbInline = isLargeTablet && isLandscape && hotseatQsbHeight > 0; if (isTaskbarPresent && !isGestureMode && isQsbInline) { numShownHotseatIcons = inv.numShrunkenHotseatIcons; } else { numShownHotseatIcons = isTwoPanels ? inv.numDatabaseHotseatIcons : inv.numShownHotseatIcons; } numShownAllAppsColumns = isTwoPanels ? inv.numDatabaseAllAppsColumns : inv.numAllAppsColumns; hotseatBarSizeExtraSpacePx = 0; Loading Loading @@ -540,7 +549,8 @@ public class DeviceProfile { return new Builder(context, inv, mInfo) .setWindowBounds(bounds) .setUseTwoPanels(isTwoPanels) .setMultiWindowMode(isMultiWindowMode); .setMultiWindowMode(isMultiWindowMode) .setGestureMode(isGestureMode); } public DeviceProfile copy(Context context) { Loading Loading @@ -1081,9 +1091,11 @@ 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); writer.println(prefix + "\tisGestureMode:" + isGestureMode); writer.println(prefix + "\tisLandscape:" + isLandscape); writer.println(prefix + "\tisMultiWindowMode:" + isMultiWindowMode); Loading Loading @@ -1266,6 +1278,7 @@ public class DeviceProfile { private boolean mIsMultiWindowMode = false; private Boolean mTransposeLayoutWithOrientation; private Boolean mIsGestureMode; public Builder(Context context, InvariantDeviceProfile inv, Info info) { mContext = context; Loading Loading @@ -1294,6 +1307,11 @@ public class DeviceProfile { return this; } public Builder setGestureMode(boolean isGestureMode) { mIsGestureMode = isGestureMode; return this; } public DeviceProfile build() { if (mWindowBounds == null) { throw new IllegalArgumentException("Window bounds not set"); Loading @@ -1301,8 +1319,11 @@ public class DeviceProfile { if (mTransposeLayoutWithOrientation == null) { mTransposeLayoutWithOrientation = !mInfo.isTablet(mWindowBounds); } return new DeviceProfile(mContext, mInv, mInfo, mWindowBounds, mIsMultiWindowMode, mTransposeLayoutWithOrientation, mUseTwoPanels); if (mIsGestureMode == null) { mIsGestureMode = DisplayController.getNavigationMode(mContext).hasGestures; } return new DeviceProfile(mContext, mInv, mInfo, mWindowBounds, mIsMultiWindowMode, mTransposeLayoutWithOrientation, mUseTwoPanels, mIsGestureMode); } } Loading src/com/android/launcher3/InvariantDeviceProfile.java +14 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.launcher3; import static com.android.launcher3.Utilities.dpiFromPx; import static com.android.launcher3.config.FeatureFlags.ENABLE_TWO_PANEL_HOME; import static com.android.launcher3.util.DisplayController.CHANGE_DENSITY; import static com.android.launcher3.util.DisplayController.CHANGE_NAVIGATION_MODE; import static com.android.launcher3.util.DisplayController.CHANGE_SUPPORTED_BOUNDS; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; Loading Loading @@ -137,6 +138,11 @@ public class InvariantDeviceProfile { */ public int numShownHotseatIcons; /** * Number of icons inside the hotseat area when using 3 buttons navigation. */ public int numShrunkenHotseatIcons; /** * Number of icons inside the hotseat area that is stored in the database. This is greater than * or equal to numnShownHotseatIcons, allowing for a seamless transition between two hotseat Loading Loading @@ -188,7 +194,8 @@ public class InvariantDeviceProfile { DisplayController.INSTANCE.get(context).setPriorityListener( (displayContext, info, flags) -> { if ((flags & (CHANGE_DENSITY | CHANGE_SUPPORTED_BOUNDS)) != 0) { if ((flags & (CHANGE_DENSITY | CHANGE_SUPPORTED_BOUNDS | CHANGE_NAVIGATION_MODE)) != 0) { onConfigChanged(displayContext); } }); Loading Loading @@ -336,6 +343,7 @@ public class InvariantDeviceProfile { horizontalMargin = displayOption.horizontalMargin; numShownHotseatIcons = closestProfile.numHotseatIcons; numShrunkenHotseatIcons = closestProfile.numShrunkenHotseatIcons; numDatabaseHotseatIcons = deviceType == TYPE_MULTI_DISPLAY ? closestProfile.numDatabaseHotseatIcons : closestProfile.numHotseatIcons; hotseatBorderSpaces = displayOption.hotseatBorderSpaces; Loading Loading @@ -365,7 +373,8 @@ public class InvariantDeviceProfile { for (WindowBounds bounds : displayInfo.supportedBounds) { localSupportedProfiles.add(new DeviceProfile.Builder(context, this, displayInfo) .setUseTwoPanels(deviceType == TYPE_MULTI_DISPLAY) .setWindowBounds(bounds).build()); .setWindowBounds(bounds) .build()); // Wallpaper size should be the maximum of the all possible sizes Launcher expects int displayWidth = bounds.bounds.width(); Loading Loading @@ -691,6 +700,7 @@ public class InvariantDeviceProfile { private final int numAllAppsColumns; private final int numDatabaseAllAppsColumns; private final int numHotseatIcons; private final int numShrunkenHotseatIcons; private final int numDatabaseHotseatIcons; private final String dbFile; Loading Loading @@ -727,6 +737,8 @@ public class InvariantDeviceProfile { numHotseatIcons = a.getInt( R.styleable.GridDisplayOption_numHotseatIcons, numColumns); numShrunkenHotseatIcons = a.getInt( R.styleable.GridDisplayOption_numShrunkenHotseatIcons, numHotseatIcons / 2); numDatabaseHotseatIcons = a.getInt( R.styleable.GridDisplayOption_numExtendedHotseatIcons, 2 * numHotseatIcons); Loading src/com/android/launcher3/util/DisplayController.java +10 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ 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.WindowManagerCompat.MIN_LARGE_TABLET_WIDTH; import static com.android.launcher3.util.WindowManagerCompat.MIN_TABLET_WIDTH; import static java.util.Collections.emptyMap; Loading Loading @@ -369,12 +370,20 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { } /** * Returns true if the bounds represent a tablet * Returns {@code true} if the bounds represent a tablet. */ public boolean isTablet(WindowBounds bounds) { return dpiFromPx(Math.min(bounds.bounds.width(), bounds.bounds.height()), densityDpi) >= MIN_TABLET_WIDTH; } /** * Returns {@code true} if the bounds represent a large tablet. */ public boolean isLargeTablet(WindowBounds bounds) { return dpiFromPx(Math.min(bounds.bounds.width(), bounds.bounds.height()), densityDpi) >= MIN_LARGE_TABLET_WIDTH; } } /** Loading src/com/android/launcher3/util/WindowManagerCompat.java +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import java.util.Set; public class WindowManagerCompat { public static final int MIN_TABLET_WIDTH = 600; public static final int MIN_LARGE_TABLET_WIDTH = 720; /** * Returns a set of supported render sizes for a internal display. Loading Loading
res/values/attrs.xml +3 −0 Original line number Diff line number Diff line Loading @@ -152,6 +152,9 @@ <!-- numHotseatIcons defaults to numColumns, if not specified --> <attr name="numHotseatIcons" format="integer" /> <!-- Number of icons to use when shrinking the hotseat size, defaults to numHotseatIcons / 2 --> <attr name="numShrunkenHotseatIcons" format="integer" /> <!-- Number of icons to use when extending the hotseat size, defaults to 2 * numHotseatIcons --> <attr name="numExtendedHotseatIcons" format="integer" /> Loading
src/com/android/launcher3/DeviceProfile.java +29 −8 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import android.view.Surface; import com.android.launcher3.CellLayout.ContainerType; import com.android.launcher3.DevicePaddings.DevicePadding; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.icons.DotRenderer; import com.android.launcher3.icons.GraphicsUtils; import com.android.launcher3.icons.IconNormalizer; Loading @@ -59,6 +58,7 @@ 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; Loading @@ -67,6 +67,7 @@ public class DeviceProfile { // Device properties in current orientation public final boolean isLandscape; public final boolean isMultiWindowMode; public final boolean isGestureMode; public final int windowX; public final int windowY; Loading Loading @@ -229,12 +230,13 @@ public class DeviceProfile { /** TODO: Once we fully migrate to staged split, remove "isMultiWindowMode" */ DeviceProfile(Context context, InvariantDeviceProfile inv, Info info, WindowBounds windowBounds, boolean isMultiWindowMode, boolean transposeLayoutWithOrientation, boolean useTwoPanels) { boolean useTwoPanels, boolean isGestureMode) { this.inv = inv; this.isLandscape = windowBounds.isLandscape(); this.isMultiWindowMode = isMultiWindowMode; this.transposeLayoutWithOrientation = transposeLayoutWithOrientation; this.isGestureMode = isGestureMode; windowX = windowBounds.bounds.left; windowY = windowBounds.bounds.top; Loading @@ -243,6 +245,7 @@ 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; Loading Loading @@ -343,9 +346,15 @@ public class DeviceProfile { workspaceCellPaddingXPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_padding_x); hotseatQsbHeight = res.getDimensionPixelSize(R.dimen.qsb_widget_height); isQsbInline = isTablet && isLandscape && !isTwoPanels && hotseatQsbHeight > 0; isQsbInline = isLargeTablet && isLandscape && hotseatQsbHeight > 0; if (isTaskbarPresent && !isGestureMode && isQsbInline) { numShownHotseatIcons = inv.numShrunkenHotseatIcons; } else { numShownHotseatIcons = isTwoPanels ? inv.numDatabaseHotseatIcons : inv.numShownHotseatIcons; } numShownAllAppsColumns = isTwoPanels ? inv.numDatabaseAllAppsColumns : inv.numAllAppsColumns; hotseatBarSizeExtraSpacePx = 0; Loading Loading @@ -540,7 +549,8 @@ public class DeviceProfile { return new Builder(context, inv, mInfo) .setWindowBounds(bounds) .setUseTwoPanels(isTwoPanels) .setMultiWindowMode(isMultiWindowMode); .setMultiWindowMode(isMultiWindowMode) .setGestureMode(isGestureMode); } public DeviceProfile copy(Context context) { Loading Loading @@ -1081,9 +1091,11 @@ 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); writer.println(prefix + "\tisGestureMode:" + isGestureMode); writer.println(prefix + "\tisLandscape:" + isLandscape); writer.println(prefix + "\tisMultiWindowMode:" + isMultiWindowMode); Loading Loading @@ -1266,6 +1278,7 @@ public class DeviceProfile { private boolean mIsMultiWindowMode = false; private Boolean mTransposeLayoutWithOrientation; private Boolean mIsGestureMode; public Builder(Context context, InvariantDeviceProfile inv, Info info) { mContext = context; Loading Loading @@ -1294,6 +1307,11 @@ public class DeviceProfile { return this; } public Builder setGestureMode(boolean isGestureMode) { mIsGestureMode = isGestureMode; return this; } public DeviceProfile build() { if (mWindowBounds == null) { throw new IllegalArgumentException("Window bounds not set"); Loading @@ -1301,8 +1319,11 @@ public class DeviceProfile { if (mTransposeLayoutWithOrientation == null) { mTransposeLayoutWithOrientation = !mInfo.isTablet(mWindowBounds); } return new DeviceProfile(mContext, mInv, mInfo, mWindowBounds, mIsMultiWindowMode, mTransposeLayoutWithOrientation, mUseTwoPanels); if (mIsGestureMode == null) { mIsGestureMode = DisplayController.getNavigationMode(mContext).hasGestures; } return new DeviceProfile(mContext, mInv, mInfo, mWindowBounds, mIsMultiWindowMode, mTransposeLayoutWithOrientation, mUseTwoPanels, mIsGestureMode); } } Loading
src/com/android/launcher3/InvariantDeviceProfile.java +14 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.launcher3; import static com.android.launcher3.Utilities.dpiFromPx; import static com.android.launcher3.config.FeatureFlags.ENABLE_TWO_PANEL_HOME; import static com.android.launcher3.util.DisplayController.CHANGE_DENSITY; import static com.android.launcher3.util.DisplayController.CHANGE_NAVIGATION_MODE; import static com.android.launcher3.util.DisplayController.CHANGE_SUPPORTED_BOUNDS; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; Loading Loading @@ -137,6 +138,11 @@ public class InvariantDeviceProfile { */ public int numShownHotseatIcons; /** * Number of icons inside the hotseat area when using 3 buttons navigation. */ public int numShrunkenHotseatIcons; /** * Number of icons inside the hotseat area that is stored in the database. This is greater than * or equal to numnShownHotseatIcons, allowing for a seamless transition between two hotseat Loading Loading @@ -188,7 +194,8 @@ public class InvariantDeviceProfile { DisplayController.INSTANCE.get(context).setPriorityListener( (displayContext, info, flags) -> { if ((flags & (CHANGE_DENSITY | CHANGE_SUPPORTED_BOUNDS)) != 0) { if ((flags & (CHANGE_DENSITY | CHANGE_SUPPORTED_BOUNDS | CHANGE_NAVIGATION_MODE)) != 0) { onConfigChanged(displayContext); } }); Loading Loading @@ -336,6 +343,7 @@ public class InvariantDeviceProfile { horizontalMargin = displayOption.horizontalMargin; numShownHotseatIcons = closestProfile.numHotseatIcons; numShrunkenHotseatIcons = closestProfile.numShrunkenHotseatIcons; numDatabaseHotseatIcons = deviceType == TYPE_MULTI_DISPLAY ? closestProfile.numDatabaseHotseatIcons : closestProfile.numHotseatIcons; hotseatBorderSpaces = displayOption.hotseatBorderSpaces; Loading Loading @@ -365,7 +373,8 @@ public class InvariantDeviceProfile { for (WindowBounds bounds : displayInfo.supportedBounds) { localSupportedProfiles.add(new DeviceProfile.Builder(context, this, displayInfo) .setUseTwoPanels(deviceType == TYPE_MULTI_DISPLAY) .setWindowBounds(bounds).build()); .setWindowBounds(bounds) .build()); // Wallpaper size should be the maximum of the all possible sizes Launcher expects int displayWidth = bounds.bounds.width(); Loading Loading @@ -691,6 +700,7 @@ public class InvariantDeviceProfile { private final int numAllAppsColumns; private final int numDatabaseAllAppsColumns; private final int numHotseatIcons; private final int numShrunkenHotseatIcons; private final int numDatabaseHotseatIcons; private final String dbFile; Loading Loading @@ -727,6 +737,8 @@ public class InvariantDeviceProfile { numHotseatIcons = a.getInt( R.styleable.GridDisplayOption_numHotseatIcons, numColumns); numShrunkenHotseatIcons = a.getInt( R.styleable.GridDisplayOption_numShrunkenHotseatIcons, numHotseatIcons / 2); numDatabaseHotseatIcons = a.getInt( R.styleable.GridDisplayOption_numExtendedHotseatIcons, 2 * numHotseatIcons); Loading
src/com/android/launcher3/util/DisplayController.java +10 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ 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.WindowManagerCompat.MIN_LARGE_TABLET_WIDTH; import static com.android.launcher3.util.WindowManagerCompat.MIN_TABLET_WIDTH; import static java.util.Collections.emptyMap; Loading Loading @@ -369,12 +370,20 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { } /** * Returns true if the bounds represent a tablet * Returns {@code true} if the bounds represent a tablet. */ public boolean isTablet(WindowBounds bounds) { return dpiFromPx(Math.min(bounds.bounds.width(), bounds.bounds.height()), densityDpi) >= MIN_TABLET_WIDTH; } /** * Returns {@code true} if the bounds represent a large tablet. */ public boolean isLargeTablet(WindowBounds bounds) { return dpiFromPx(Math.min(bounds.bounds.width(), bounds.bounds.height()), densityDpi) >= MIN_LARGE_TABLET_WIDTH; } } /** Loading
src/com/android/launcher3/util/WindowManagerCompat.java +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import java.util.Set; public class WindowManagerCompat { public static final int MIN_TABLET_WIDTH = 600; public static final int MIN_LARGE_TABLET_WIDTH = 720; /** * Returns a set of supported render sizes for a internal display. Loading