fixed error

This commit is contained in:
MrSluffy committed 2024-09-21 13:02:25 +08:00
1 parent 77e0a795b5
commit 7036792c9e
7 files changed
+174 -170

No files matched your search

+3
View File
@@ -408,6 +408,9 @@ dependencies {
implementation "androidx.room:room-ktx:$roomVersion"
ksp "androidx.room:room-compiler:$roomVersion"
def core_version = "1.13.1"
implementation "androidx.core:core:$core_version"
implementation "com.github.topjohnwu.libsu:service:6.0.0"
// Persian Date
-1
View File
@@ -168,7 +168,6 @@
launcher:numFolderRows="3"
launcher:numFolderColumns="3"
launcher:numHotseatIcons="6"
launcher:hotseatColumnSpanLandscape="4"
launcher:numAllAppsColumns="6"
launcher:isScalable="true"
launcher:inlineNavButtonsEndSpacing="@dimen/taskbar_button_margin_6_5"
Binary file not shown.
-4
View File
@@ -5,10 +5,6 @@
<SplitPairRule
window:splitRatio="@dimen/activity_split_ratio"
window:splitLayoutDirection="locale"
window:splitMinWidthDp="@integer/min_width_split"
window:splitMaxAspectRatioInPortrait="alwaysAllow"
window:finishPrimaryWithSecondary="never"
window:finishSecondaryWithPrimary="always"
window:clearTop="false">
<SplitPairFilter
window:primaryActivityName="com.android.launcher3.settings.SettingsActivity"
@@ -16,18 +16,18 @@
package com.android.launcher3;
import static com.android.launcher3.LauncherPrefs.GRID_NAME;
import static com.android.launcher3.Utilities.dpiFromPx;
import static com.android.launcher3.testing.shared.ResourceUtils.INVALID_RESOURCE_HANDLE;
import static com.android.launcher3.util.DisplayController.CHANGE_DENSITY;
import static com.android.launcher3.util.DisplayController.CHANGE_DESKTOP_MODE;
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.DisplayController.CHANGE_TASKBAR_PINNING;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import android.annotation.TargetApi;
import android.appwidget.AppWidgetHostView;
import android.content.ComponentName;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
@@ -63,6 +63,7 @@ import com.android.launcher3.util.Partner;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.util.WindowBounds;
import com.android.launcher3.util.window.WindowManagerProxy;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -73,10 +74,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import app.lawnchair.DeviceProfileOverrides;
public class InvariantDeviceProfile implements SafeCloseable {
public static final String TAG = "IDP";
@@ -84,11 +84,6 @@ public class InvariantDeviceProfile implements SafeCloseable {
public static final MainThreadInitializedObject<InvariantDeviceProfile> INSTANCE =
new MainThreadInitializedObject<>(InvariantDeviceProfile::new);
@Override
public void close() {
}
@Retention(RetentionPolicy.SOURCE)
@IntDef({TYPE_PHONE, TYPE_MULTI_DISPLAY, TYPE_TABLET})
public @interface DeviceType {}
@@ -110,17 +105,15 @@ public class InvariantDeviceProfile implements SafeCloseable {
// Used for arrays to specify different sizes (e.g. border spaces, width/height) in different
// constraints
static final int COUNT_SIZES = 4;
public static final int INDEX_DEFAULT = 0;
public static final int INDEX_LANDSCAPE = 1;
public static final int INDEX_TWO_PANEL_PORTRAIT = 2;
public static final int INDEX_TWO_PANEL_LANDSCAPE = 3;
static final int INDEX_DEFAULT = 0;
static final int INDEX_LANDSCAPE = 1;
static final int INDEX_TWO_PANEL_PORTRAIT = 2;
static final int INDEX_TWO_PANEL_LANDSCAPE = 3;
/** These resources are used to override the device profile */
public static final String RES_GRID_NUM_ROWS = "grid_num_rows";
public static final String RES_GRID_NUM_COLUMNS = "grid_num_columns";
public static final String RES_GRID_ICON_SIZE_DP = "grid_icon_size_dp";
private static final String KEY_IDP_GRID_NAME = "idp_grid_name";
/** These resources are used to override the device profile */
private static final String RES_GRID_NUM_ROWS = "grid_num_rows";
private static final String RES_GRID_NUM_COLUMNS = "grid_num_columns";
private static final String RES_GRID_ICON_SIZE_DP = "grid_icon_size_dp";
/**
* Number of icons per row and column in the workspace.
@@ -129,21 +122,16 @@ public class InvariantDeviceProfile implements SafeCloseable {
public int numColumns;
public int numSearchContainerColumns;
/**
* Original profile before preference overrides
*/
public GridOption closestProfile;
/**
* Number of icons per row and column in the folder.
*/
public int numFolderRows;
public int numFolderColumns;
public int[] numFolderRows;
public int[] numFolderColumns;
public float[] iconSize;
public float[] iconTextSize;
public int iconBitmapSize;
public int fillResIconDpi;
public static @DeviceType int deviceType;
public @DeviceType int deviceType;
public PointF[] minCellSize;
@@ -177,7 +165,6 @@ public class InvariantDeviceProfile implements SafeCloseable {
*/
public int numDatabaseHotseatIcons;
public int[] hotseatColumnSpan;
public float[] hotseatBarBottomSpace;
public float[] hotseatQsbSpace;
@@ -185,6 +172,7 @@ public class InvariantDeviceProfile implements SafeCloseable {
* Number of columns in the all apps list.
*/
public int numAllAppsColumns;
public int numAllAppsRowsForCellHeightCalculation;
public int numDatabaseAllAppsColumns;
public @StyleRes int allAppsStyle;
@@ -194,16 +182,10 @@ public class InvariantDeviceProfile implements SafeCloseable {
protected boolean isScalable;
@XmlRes
public int devicePaddingId = INVALID_RESOURCE_HANDLE;
public String dbFile;
public int defaultLayoutId;
@XmlRes
public int workspaceSpecsId = INVALID_RESOURCE_HANDLE;
@XmlRes
public int workspaceSpecsTwoPanelId = INVALID_RESOURCE_HANDLE;
@XmlRes
public int allAppsSpecsId = INVALID_RESOURCE_HANDLE;
@XmlRes
@@ -216,7 +198,6 @@ public class InvariantDeviceProfile implements SafeCloseable {
public int hotseatSpecsId = INVALID_RESOURCE_HANDLE;
@XmlRes
public int hotseatSpecsTwoPanelId = INVALID_RESOURCE_HANDLE;
@XmlRes
public int workspaceCellSpecsId = INVALID_RESOURCE_HANDLE;
@XmlRes
@@ -225,6 +206,9 @@ public class InvariantDeviceProfile implements SafeCloseable {
public int allAppsCellSpecsId = INVALID_RESOURCE_HANDLE;
@XmlRes
public int allAppsCellSpecsTwoPanelId = INVALID_RESOURCE_HANDLE;
public String dbFile;
public int defaultLayoutId;
public int demoModeLayoutId;
public boolean[] inlineQsb = new boolean[COUNT_SIZES];
@@ -234,7 +218,6 @@ public class InvariantDeviceProfile implements SafeCloseable {
public List<DeviceProfile> supportedProfiles = Collections.EMPTY_LIST;
public Point defaultWallpaperSize;
public Rect defaultWidgetPadding;
private final ArrayList<OnIDPChangeListener> mChangeListeners = new ArrayList<>();
@@ -246,16 +229,16 @@ public class InvariantDeviceProfile implements SafeCloseable {
String gridName = getCurrentGridName(context);
String newGridName = initGrid(context, gridName);
if (!newGridName.equals(gridName)) {
Utilities.getPrefs(context).edit().putString(KEY_IDP_GRID_NAME, newGridName).apply();
LauncherPrefs.get(context).put(GRID_NAME, newGridName);
}
LockedUserState.get(context).runOnUserUnlocked(() -> {
new DeviceGridState(this).writeToPrefs(context);
});
LockedUserState.get(context).runOnUserUnlocked(() ->
new DeviceGridState(this).writeToPrefs(context));
DisplayController.INSTANCE.get(context).setPriorityListener(
(displayContext, info, flags) -> {
if ((flags & (CHANGE_DENSITY | CHANGE_SUPPORTED_BOUNDS
| CHANGE_NAVIGATION_MODE)) != 0) {
| CHANGE_NAVIGATION_MODE | CHANGE_TASKBAR_PINNING
| CHANGE_DESKTOP_MODE)) != 0) {
onConfigChanged(displayContext);
}
});
@@ -265,12 +248,10 @@ public class InvariantDeviceProfile implements SafeCloseable {
* This constructor should NOT have any monitors by design.
*/
public InvariantDeviceProfile(Context context, String gridName) {
this(context, DeviceProfileOverrides.INSTANCE.get(context).getGridInfo(gridName));
}
public InvariantDeviceProfile(Context context, DeviceProfileOverrides.DBGridInfo dbGridInfo) {
String gridName = DeviceProfileOverrides.INSTANCE.get(context).getGridName(dbGridInfo);
initGrid(context, gridName, dbGridInfo);
String newName = initGrid(context, gridName);
if (newName == null || !newName.equals(gridName)) {
throw new IllegalArgumentException("Unknown grid name: " + gridName);
}
}
/**
@@ -283,7 +264,7 @@ public class InvariantDeviceProfile implements SafeCloseable {
// Get the display info based on default display and interpolate it to existing display
Info defaultInfo = DisplayController.INSTANCE.get(context).getInfo();
@DeviceType int defaultDeviceType = getDeviceType(defaultInfo);
@DeviceType int defaultDeviceType = defaultInfo.getDeviceType();
DisplayOption defaultDisplayOption = invDistWeightedInterpolate(
defaultInfo,
getPredefinedDeviceProfiles(context, gridName, defaultDeviceType,
@@ -292,7 +273,7 @@ public class InvariantDeviceProfile implements SafeCloseable {
Context displayContext = context.createDisplayContext(display);
Info myInfo = new Info(displayContext);
@DeviceType int deviceType = getDeviceType(myInfo);
@DeviceType int deviceType = myInfo.getDeviceType();
DisplayOption myDisplayOption = invDistWeightedInterpolate(
myInfo,
getPredefinedDeviceProfiles(context, gridName, deviceType,
@@ -316,6 +297,11 @@ public class InvariantDeviceProfile implements SafeCloseable {
initGrid(context, myInfo, result, deviceType);
}
@Override
public void close() {
DisplayController.INSTANCE.executeIfCreated(dc -> dc.setPriorityListener(null));
}
/**
* Reinitialize the current grid after a restore, where some grids might now be disabled.
*/
@@ -324,8 +310,13 @@ public class InvariantDeviceProfile implements SafeCloseable {
String currentDbFile = dbFile;
String newGridName = initGrid(context, currentGridName);
String newDbFile = dbFile;
FileLog.d(TAG, "Reinitializing grid after restore."
+ " currentGridName=" + currentGridName
+ ", currentDbFile=" + currentDbFile
+ ", newGridName=" + newGridName
+ ", newDbFile=" + newDbFile);
if (!newDbFile.equals(currentDbFile)) {
Log.d(TAG, "Restored grid is disabled : " + currentGridName
FileLog.d(TAG, "Restored grid is disabled : " + currentGridName
+ ", migrating to: " + newGridName
+ ", removing all other grid db files");
for (String gridDbFile : LauncherFiles.GRID_DB_FILES) {
@@ -333,58 +324,37 @@ public class InvariantDeviceProfile implements SafeCloseable {
continue;
}
if (context.getDatabasePath(gridDbFile).delete()) {
Log.d(TAG, "Removed old grid db file: " + gridDbFile);
FileLog.d(TAG, "Removed old grid db file: " + gridDbFile);
}
}
setCurrentGrid(context, newGridName);
}
}
public static @DeviceType int getDeviceType(Info displayInfo) {
int flagPhone = 1 << 0;
int flagTablet = 1 << 1;
int type = displayInfo.supportedBounds.stream()
.mapToInt(bounds -> displayInfo.isTablet(bounds) ? flagTablet : flagPhone)
.reduce(0, (a, b) -> a | b);
if ((type == (flagPhone | flagTablet))) {
// device has profiles supporting both phone and table modes
return TYPE_MULTI_DISPLAY;
} else if (type == flagTablet) {
return TYPE_TABLET;
} else {
return TYPE_PHONE;
}
}
public static String getCurrentGridName(Context context) {
return DeviceProfileOverrides.INSTANCE.get(context).getCurrentGridName();
return LauncherPrefs.get(context).get(GRID_NAME);
}
private String initGrid(Context context, String gridName, DeviceProfileOverrides.DBGridInfo dbGridInfo) {
private String initGrid(Context context, String gridName) {
Info displayInfo = DisplayController.INSTANCE.get(context).getInfo();
@DeviceType int deviceType = getDeviceType(displayInfo);
@DeviceType int deviceType = displayInfo.getDeviceType();
ArrayList<DisplayOption> allOptions =
getPredefinedDeviceProfiles(context, gridName, deviceType,
RestoreDbTask.isPending(context));
DisplayOption displayOption =
invDistWeightedInterpolate(displayInfo, allOptions, deviceType);
initGrid(context, displayInfo, displayOption, deviceType, dbGridInfo);
initGrid(context, displayInfo, displayOption, deviceType);
return displayOption.grid.name;
}
private void initGrid(Context context, Info displayInfo, DisplayOption displayOption,
@DeviceType int deviceType) {
DeviceProfileOverrides.DBGridInfo dbGridInfo = DeviceProfileOverrides.INSTANCE.get(context)
.getGridInfo();
initGrid(context, displayInfo, displayOption, deviceType, dbGridInfo);
}
private String initGrid(Context context, String gridName) {
DeviceProfileOverrides.DBGridInfo dbGridInfo = DeviceProfileOverrides.INSTANCE.get(context)
.getGridInfo();
return initGrid(context, gridName, dbGridInfo);
/**
* @deprecated This is a temporary solution because on the backup and restore case we modify the
* IDP, this resets it. b/332974074
*/
@Deprecated
public void reset(Context context) {
initGrid(context, getCurrentGridName(context));
}
@VisibleForTesting
@@ -393,15 +363,13 @@ public class InvariantDeviceProfile implements SafeCloseable {
}
private void initGrid(Context context, Info displayInfo, DisplayOption displayOption,
@DeviceType int deviceType, DeviceProfileOverrides.DBGridInfo dbGridInfo) {
DeviceProfileOverrides.Options overrideOptions = DeviceProfileOverrides.INSTANCE.get(context)
.getOverrides(displayOption.grid);
@DeviceType int deviceType) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
closestProfile = displayOption.grid;
numRows = dbGridInfo.getNumRows();
numColumns = dbGridInfo.getNumColumns();
GridOption closestProfile = displayOption.grid;
numRows = closestProfile.numRows;
numColumns = closestProfile.numColumns;
numSearchContainerColumns = closestProfile.numSearchContainerColumns;
dbFile = dbGridInfo.getDbFile();
dbFile = closestProfile.dbFile;
defaultLayoutId = closestProfile.defaultLayoutId;
demoModeLayoutId = closestProfile.demoModeLayoutId;
@@ -425,7 +393,8 @@ public class InvariantDeviceProfile implements SafeCloseable {
workspaceCellSpecsTwoPanelId = closestProfile.mWorkspaceCellSpecsTwoPanelId;
allAppsCellSpecsId = closestProfile.mAllAppsCellSpecsId;
allAppsCellSpecsTwoPanelId = closestProfile.mAllAppsCellSpecsTwoPanelId;
numAllAppsRowsForCellHeightCalculation =
closestProfile.mNumAllAppsRowsForCellHeightCalculation;
this.deviceType = deviceType;
inlineNavButtonsEndSpacing = closestProfile.inlineNavButtonsEndSpacing;
@@ -446,17 +415,16 @@ public class InvariantDeviceProfile implements SafeCloseable {
horizontalMargin = displayOption.horizontalMargin;
numShownHotseatIcons = deviceType == TYPE_MULTI_DISPLAY
? closestProfile.numHotseatIcons : dbGridInfo.getNumHotseatColumns();
numShownHotseatIcons = closestProfile.numHotseatIcons;
numDatabaseHotseatIcons = deviceType == TYPE_MULTI_DISPLAY
? closestProfile.numDatabaseHotseatIcons : numShownHotseatIcons;
hotseatColumnSpan = closestProfile.hotseatColumnSpan;
? closestProfile.numDatabaseHotseatIcons : closestProfile.numHotseatIcons;
hotseatBarBottomSpace = displayOption.hotseatBarBottomSpace;
hotseatQsbSpace = displayOption.hotseatQsbSpace;
allAppsStyle = closestProfile.allAppsStyle;
numAllAppsColumns = closestProfile.numAllAppsColumns;
numDatabaseAllAppsColumns = deviceType == TYPE_MULTI_DISPLAY
? closestProfile.numDatabaseAllAppsColumns : closestProfile.numAllAppsColumns;
@@ -475,9 +443,6 @@ public class InvariantDeviceProfile implements SafeCloseable {
// Supported overrides: numRows, numColumns, iconSize
applyPartnerDeviceProfileOverrides(context, metrics);
// Lawnchair ignores partner overrides and allows the user to customize the grid themselves
overrideOptions.applyUi(this);
final List<DeviceProfile> localSupportedProfiles = new ArrayList<>();
defaultWallpaperSize = new Point(displayInfo.currentSize);
SparseArray<DotRenderer> dotRendererCache = new SparseArray<>();
@@ -529,15 +494,10 @@ public class InvariantDeviceProfile implements SafeCloseable {
mChangeListeners.remove(listener);
}
public void onPreferencesChanged(Context context) {
Context appContext = context.getApplicationContext();
MAIN_EXECUTOR.execute(() -> onConfigChanged(appContext));
}
public void setCurrentGrid(Context context, String gridName) {
DeviceProfileOverrides.INSTANCE.get(context).setCurrentGrid(gridName);
Context appContext = context.getApplicationContext();
MAIN_EXECUTOR.execute(() -> onConfigChanged(appContext));
LauncherPrefs.get(context).put(GRID_NAME, gridName);
MAIN_EXECUTOR.execute(() -> onConfigChanged(context.getApplicationContext()));
}
private Object[] toModelState() {
@@ -546,7 +506,9 @@ public class InvariantDeviceProfile implements SafeCloseable {
iconBitmapSize, fillResIconDpi, numDatabaseAllAppsColumns, dbFile};
}
private void onConfigChanged(Context context) {
/** Updates IDP using the provided context. Notifies listeners of change. */
@VisibleForTesting
public void onConfigChanged(Context context) {
Object[] oldState = toModelState();
// Re-init grid
@@ -613,10 +575,49 @@ public class InvariantDeviceProfile implements SafeCloseable {
return filteredProfiles;
}
/**
* Returns the GridOption associated to the given file name or null if the fileName is not
* supported.
* Ej, launcher.db -> "normal grid", launcher_4_by_4.db -> "practical grid"
*/
public GridOption getGridOptionFromFileName(Context context, String fileName) {
return parseAllGridOptions(context).stream()
.filter(gridOption -> Objects.equals(gridOption.dbFile, fileName))
.findFirst()
.orElse(null);
}
/**
* Returns the name of the given size on the current device or empty string if the size is not
* supported. Ej. 4x4 -> normal, 5x4 -> practical, etc.
* (Note: the name of the grid can be different for the same grid size depending of
* the values of the InvariantDeviceProfile)
*
*/
public String getGridNameFromSize(Context context, Point size) {
return parseAllGridOptions(context).stream()
.filter(gridOption -> gridOption.numColumns == size.x
&& gridOption.numRows == size.y)
.map(gridOption -> gridOption.name)
.findFirst()
.orElse("");
}
/**
* Returns the grid option for the given gridName on the current device (Note: the gridOption
* be different for the same gridName depending on the values of the InvariantDeviceProfile).
*/
public GridOption getGridOptionFromName(Context context, String gridName) {
return parseAllGridOptions(context).stream()
.filter(gridOption -> Objects.equals(gridOption.name, gridName))
.findFirst()
.orElse(null);
}
/**
* @return all the grid options that can be shown on the device
*/
public static List<GridOption> parseAllGridOptions(Context context) {
public List<GridOption> parseAllGridOptions(Context context) {
return parseAllDefinedGridOptions(context)
.stream()
.filter(go -> go.isEnabled(deviceType))
@@ -758,14 +759,11 @@ public class InvariantDeviceProfile implements SafeCloseable {
}
public DeviceProfile getDeviceProfile(Context context) {
Resources res = context.getResources();
Configuration config = context.getResources().getConfiguration();
WindowManagerProxy windowManagerProxy = WindowManagerProxy.INSTANCE.get(context);
Rect bounds = windowManagerProxy.getCurrentBounds(context);
int rotation = windowManagerProxy.getRotation(context);
float screenWidth = config.screenWidthDp * res.getDisplayMetrics().density;
float screenHeight = config.screenHeightDp * res.getDisplayMetrics().density;
int rotation = WindowManagerProxy.INSTANCE.get(context).getRotation(context);
return getBestMatch(screenWidth, screenHeight, rotation);
return getBestMatch(bounds.width(), bounds.height(), rotation);
}
/**
@@ -857,28 +855,29 @@ public class InvariantDeviceProfile implements SafeCloseable {
public final int numSearchContainerColumns;
public final int deviceCategory;
public final int numFolderRows;
public final int numFolderColumns;
private final int[] numFolderRows = new int[COUNT_SIZES];
private final int[] numFolderColumns = new int[COUNT_SIZES];
private final @StyleRes int folderStyle;
private final @StyleRes int cellStyle;
private final @StyleRes int allAppsStyle;
public final int numAllAppsColumns;
public final int numDatabaseAllAppsColumns;
public final int numHotseatIcons;
public final int numDatabaseHotseatIcons;
private final int[] hotseatColumnSpan = new int[COUNT_SIZES];
private final int numAllAppsColumns;
private final int mNumAllAppsRowsForCellHeightCalculation;
private final int numDatabaseAllAppsColumns;
private final int numHotseatIcons;
private final int numDatabaseHotseatIcons;
private final boolean[] inlineQsb = new boolean[COUNT_SIZES];
private @DimenRes int inlineNavButtonsEndSpacing;
public final String dbFile;
private final String dbFile;
private final int defaultLayoutId;
private final int demoModeLayoutId;
private final int mWorkspaceSpecsId;
private final boolean isScalable;
private final int devicePaddingId;
private final int mWorkspaceSpecsId;
private final int mWorkspaceSpecsTwoPanelId;
private final int mAllAppsSpecsId;
private final int mAllAppsSpecsTwoPanelId;
@@ -891,15 +890,12 @@ public class InvariantDeviceProfile implements SafeCloseable {
private final int mAllAppsCellSpecsId;
private final int mAllAppsCellSpecsTwoPanelId;
private final boolean isScalable;
private final int devicePaddingId;
public GridOption(Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.GridDisplayOption);
name = a.getString(R.styleable.GridDisplayOption_name);
numRows = a.getInt(R.styleable.GridDisplayOption_numRows, 0);
numColumns = a.getInt(R.styleable.GridDisplayOption_numColumns, 4);
numColumns = a.getInt(R.styleable.GridDisplayOption_numColumns, 0);
numSearchContainerColumns = a.getInt(
R.styleable.GridDisplayOption_numSearchContainerColumns, numColumns);
@@ -914,33 +910,50 @@ public class InvariantDeviceProfile implements SafeCloseable {
numAllAppsColumns = a.getInt(
R.styleable.GridDisplayOption_numAllAppsColumns, numColumns);
numDatabaseAllAppsColumns = a.getInt(
R.styleable.GridDisplayOption_numExtendedAllAppsColumns, numAllAppsColumns);
R.styleable.GridDisplayOption_numExtendedAllAppsColumns, 2 * numAllAppsColumns);
numHotseatIcons = a.getInt(
R.styleable.GridDisplayOption_numHotseatIcons, numColumns);
numDatabaseHotseatIcons = a.getInt(
R.styleable.GridDisplayOption_numExtendedHotseatIcons, 2 * numHotseatIcons);
hotseatColumnSpan[INDEX_DEFAULT] = a.getInt(
R.styleable.GridDisplayOption_hotseatColumnSpan, numColumns);
hotseatColumnSpan[INDEX_LANDSCAPE] = a.getInt(
R.styleable.GridDisplayOption_hotseatColumnSpanLandscape, numColumns);
hotseatColumnSpan[INDEX_TWO_PANEL_LANDSCAPE] = a.getInt(
R.styleable.GridDisplayOption_hotseatColumnSpanTwoPanelLandscape,
numColumns);
hotseatColumnSpan[INDEX_TWO_PANEL_PORTRAIT] = a.getInt(
R.styleable.GridDisplayOption_hotseatColumnSpanTwoPanelPortrait,
numColumns);
inlineNavButtonsEndSpacing =
a.getResourceId(R.styleable.GridDisplayOption_inlineNavButtonsEndSpacing,
R.dimen.taskbar_button_margin_default);
numFolderRows = a.getInt(
numFolderRows[INDEX_DEFAULT] = a.getInt(
R.styleable.GridDisplayOption_numFolderRows, numRows);
numFolderColumns = a.getInt(
numFolderColumns[INDEX_DEFAULT] = a.getInt(
R.styleable.GridDisplayOption_numFolderColumns, numColumns);
if (FeatureFlags.enableResponsiveWorkspace()) {
numFolderRows[INDEX_LANDSCAPE] = a.getInt(
R.styleable.GridDisplayOption_numFolderRowsLandscape,
numFolderRows[INDEX_DEFAULT]);
numFolderColumns[INDEX_LANDSCAPE] = a.getInt(
R.styleable.GridDisplayOption_numFolderColumnsLandscape,
numFolderColumns[INDEX_DEFAULT]);
numFolderRows[INDEX_TWO_PANEL_PORTRAIT] = a.getInt(
R.styleable.GridDisplayOption_numFolderRowsTwoPanelPortrait,
numFolderRows[INDEX_DEFAULT]);
numFolderColumns[INDEX_TWO_PANEL_PORTRAIT] = a.getInt(
R.styleable.GridDisplayOption_numFolderColumnsTwoPanelPortrait,
numFolderColumns[INDEX_DEFAULT]);
numFolderRows[INDEX_TWO_PANEL_LANDSCAPE] = a.getInt(
R.styleable.GridDisplayOption_numFolderRowsTwoPanelLandscape,
numFolderRows[INDEX_DEFAULT]);
numFolderColumns[INDEX_TWO_PANEL_LANDSCAPE] = a.getInt(
R.styleable.GridDisplayOption_numFolderColumnsTwoPanelLandscape,
numFolderColumns[INDEX_DEFAULT]);
} else {
numFolderRows[INDEX_LANDSCAPE] = numFolderRows[INDEX_DEFAULT];
numFolderColumns[INDEX_LANDSCAPE] = numFolderColumns[INDEX_DEFAULT];
numFolderRows[INDEX_TWO_PANEL_PORTRAIT] = numFolderRows[INDEX_DEFAULT];
numFolderColumns[INDEX_TWO_PANEL_PORTRAIT] = numFolderColumns[INDEX_DEFAULT];
numFolderRows[INDEX_TWO_PANEL_LANDSCAPE] = numFolderRows[INDEX_DEFAULT];
numFolderColumns[INDEX_TWO_PANEL_LANDSCAPE] = numFolderColumns[INDEX_DEFAULT];
}
folderStyle = a.getResourceId(R.styleable.GridDisplayOption_folderStyle,
INVALID_RESOURCE_HANDLE);
@@ -954,39 +967,42 @@ public class InvariantDeviceProfile implements SafeCloseable {
deviceCategory = a.getInt(R.styleable.GridDisplayOption_deviceCategory,
DEVICE_CATEGORY_ALL);
if (FeatureFlags.ENABLE_RESPONSIVE_WORKSPACE.get()) {
if (FeatureFlags.enableResponsiveWorkspace()) {
mWorkspaceSpecsId = a.getResourceId(
R.styleable.GridDisplayOption_workspaceSpecsId, INVALID_RESOURCE_HANDLE);
mWorkspaceSpecsTwoPanelId = a.getResourceId(
R.styleable.GridDisplayOption_workspaceSpecsTwoPanelId,
INVALID_RESOURCE_HANDLE);
mWorkspaceSpecsId);
mAllAppsSpecsId = a.getResourceId(
R.styleable.GridDisplayOption_allAppsSpecsId, INVALID_RESOURCE_HANDLE);
mAllAppsSpecsTwoPanelId = a.getResourceId(
R.styleable.GridDisplayOption_allAppsSpecsTwoPanelId,
INVALID_RESOURCE_HANDLE);
mAllAppsSpecsId);
mFolderSpecsId = a.getResourceId(
R.styleable.GridDisplayOption_folderSpecsId, INVALID_RESOURCE_HANDLE);
mFolderSpecsTwoPanelId = a.getResourceId(
R.styleable.GridDisplayOption_folderSpecsTwoPanelId,
INVALID_RESOURCE_HANDLE);
mFolderSpecsId);
mHotseatSpecsId = a.getResourceId(
R.styleable.GridDisplayOption_hotseatSpecsId, INVALID_RESOURCE_HANDLE);
mHotseatSpecsTwoPanelId = a.getResourceId(
R.styleable.GridDisplayOption_hotseatSpecsTwoPanelId,
INVALID_RESOURCE_HANDLE);
mHotseatSpecsId);
mWorkspaceCellSpecsId = a.getResourceId(
R.styleable.GridDisplayOption_workspaceCellSpecsId,
INVALID_RESOURCE_HANDLE);
mWorkspaceCellSpecsTwoPanelId = a.getResourceId(
R.styleable.GridDisplayOption_workspaceCellSpecsTwoPanelId,
INVALID_RESOURCE_HANDLE);
mWorkspaceCellSpecsId);
mAllAppsCellSpecsId = a.getResourceId(
R.styleable.GridDisplayOption_allAppsCellSpecsId,
INVALID_RESOURCE_HANDLE);
mAllAppsCellSpecsTwoPanelId = a.getResourceId(
R.styleable.GridDisplayOption_allAppsCellSpecsTwoPanelId,
INVALID_RESOURCE_HANDLE);
mAllAppsCellSpecsId);
mNumAllAppsRowsForCellHeightCalculation = a.getInt(
R.styleable.GridDisplayOption_numAllAppsRowsForCellHeightCalculation,
numRows);
} else {
mWorkspaceSpecsId = INVALID_RESOURCE_HANDLE;
mWorkspaceSpecsTwoPanelId = INVALID_RESOURCE_HANDLE;
@@ -1000,6 +1016,7 @@ public class InvariantDeviceProfile implements SafeCloseable {
mWorkspaceCellSpecsTwoPanelId = INVALID_RESOURCE_HANDLE;
mAllAppsCellSpecsId = INVALID_RESOURCE_HANDLE;
mAllAppsCellSpecsTwoPanelId = INVALID_RESOURCE_HANDLE;
mNumAllAppsRowsForCellHeightCalculation = numRows;
}
int inlineForRotation = a.getInt(R.styleable.GridDisplayOption_inlineQsb,
@@ -1014,6 +1031,7 @@ public class InvariantDeviceProfile implements SafeCloseable {
inlineQsb[INDEX_TWO_PANEL_LANDSCAPE] =
(inlineForRotation & INLINE_QSB_FOR_TWO_PANEL_LANDSCAPE)
== INLINE_QSB_FOR_TWO_PANEL_LANDSCAPE;
a.recycle();
}
+3
View File
@@ -136,6 +136,9 @@ public final class Utilities {
public static final boolean ATLEAST_O_MR1 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1;
@ChecksSdkIntAtLeast(api = VERSION_CODES.R)
public static final boolean ATLEAST_R = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R;
@ChecksSdkIntAtLeast(api = VERSION_CODES.S)
public static final boolean ATLEAST_S = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S;
@@ -452,21 +452,6 @@ public class WindowManagerProxy implements ResourceBasedOverride, SafeCloseable
return new Rect(0, 0, (int) screenWidth, (int) screenHeight);
}
/**
* Returns bounds of the display associated with the context, or bounds of
* DEFAULT_DISPLAY
* if the context isn't associated with a display.
*/
public Rect getCurrentBounds(Context displayInfoContext) {
Resources res = displayInfoContext.getResources();
Configuration config = res.getConfiguration();
float screenWidth = config.screenWidthDp * res.getDisplayMetrics().density;
float screenHeight = config.screenHeightDp * res.getDisplayMetrics().density;
return new Rect(0, 0, (int) screenWidth, (int) screenHeight);
}
/**
* Returns rotation of the display associated with the context, or rotation of
* DEFAULT_DISPLAY