mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-03 09:26:51 +00:00
Allow 2x2 and 3x3 to be migrated after restore
- Allow disabled grid to be used during restore - Remove all inactive grid dbFiles to allow grid migration to happen - Set the proper grid after restore to trigger migration Bug: 202125760 Test: Restore a 2x2,3x3 grid, icons and widgets are migrated to 4x4 grid Test: Restore a 4x4 grid, icons and widgetse stays in original position Change-Id: Ie59e1ca0ca56ed2de52d88cd5f51b980788afa52
This commit is contained in:
@@ -46,6 +46,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.launcher3.model.DeviceGridState;
|
||||
import com.android.launcher3.provider.RestoreDbTask;
|
||||
import com.android.launcher3.util.DisplayController;
|
||||
import com.android.launcher3.util.DisplayController.Info;
|
||||
import com.android.launcher3.util.IntArray;
|
||||
@@ -204,11 +205,11 @@ public class InvariantDeviceProfile {
|
||||
// Get the display info based on default display and interpolate it to existing display
|
||||
DisplayOption defaultDisplayOption = invDistWeightedInterpolate(
|
||||
DisplayController.INSTANCE.get(context).getInfo(),
|
||||
getPredefinedDeviceProfiles(context, gridName, false), false);
|
||||
getPredefinedDeviceProfiles(context, gridName, false, false), false);
|
||||
|
||||
Info myInfo = new Info(context, display);
|
||||
DisplayOption myDisplayOption = invDistWeightedInterpolate(
|
||||
myInfo, getPredefinedDeviceProfiles(context, gridName, false), false);
|
||||
myInfo, getPredefinedDeviceProfiles(context, gridName, false, false), false);
|
||||
|
||||
DisplayOption result = new DisplayOption(defaultDisplayOption.grid)
|
||||
.add(myDisplayOption);
|
||||
@@ -227,6 +228,29 @@ public class InvariantDeviceProfile {
|
||||
initGrid(context, myInfo, result, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reinitialize the current grid after a restore, where some grids might now be disabled.
|
||||
*/
|
||||
public void reinitializeAfterRestore(Context context) {
|
||||
String currentDbFile = dbFile;
|
||||
String gridName = getCurrentGridName(context);
|
||||
String newGridName = initGrid(context, gridName);
|
||||
if (!newGridName.equals(gridName)) {
|
||||
Log.d(TAG, "Restored grid is disabled : " + gridName
|
||||
+ ", migrating to: " + newGridName
|
||||
+ ", removing all other grid db files");
|
||||
for (String gridDbFile : LauncherFiles.GRID_DB_FILES) {
|
||||
if (gridDbFile.equals(currentDbFile)) {
|
||||
continue;
|
||||
}
|
||||
if (context.getDatabasePath(gridDbFile).delete()) {
|
||||
Log.d(TAG, "Removed old grid db file: " + gridDbFile);
|
||||
}
|
||||
}
|
||||
setCurrentGrid(context, gridName);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getCurrentGridName(Context context) {
|
||||
return Utilities.isGridOptionsEnabled(context)
|
||||
? Utilities.getPrefs(context).getString(KEY_IDP_GRID_NAME, null) : null;
|
||||
@@ -240,7 +264,8 @@ public class InvariantDeviceProfile {
|
||||
displayInfo.supportedBounds.size() >= 4 && ENABLE_TWO_PANEL_HOME.get();
|
||||
|
||||
ArrayList<DisplayOption> allOptions =
|
||||
getPredefinedDeviceProfiles(context, gridName, isSplitDisplay);
|
||||
getPredefinedDeviceProfiles(context, gridName, isSplitDisplay,
|
||||
RestoreDbTask.isPending(context));
|
||||
DisplayOption displayOption =
|
||||
invDistWeightedInterpolate(displayInfo, allOptions, isSplitDisplay);
|
||||
initGrid(context, displayInfo, displayOption, isSplitDisplay);
|
||||
@@ -366,7 +391,7 @@ public class InvariantDeviceProfile {
|
||||
}
|
||||
|
||||
private static ArrayList<DisplayOption> getPredefinedDeviceProfiles(
|
||||
Context context, String gridName, boolean isSplitDisplay) {
|
||||
Context context, String gridName, boolean isSplitDisplay, boolean allowDisabledGrid) {
|
||||
ArrayList<DisplayOption> profiles = new ArrayList<>();
|
||||
try (XmlResourceParser parser = context.getResources().getXml(R.xml.device_profiles)) {
|
||||
final int depth = parser.getDepth();
|
||||
@@ -378,7 +403,7 @@ public class InvariantDeviceProfile {
|
||||
|
||||
GridOption gridOption =
|
||||
new GridOption(context, Xml.asAttributeSet(parser), isSplitDisplay);
|
||||
if (gridOption.isEnabled) {
|
||||
if (gridOption.isEnabled || allowDisabledGrid) {
|
||||
final int displayDepth = parser.getDepth();
|
||||
while (((type = parser.next()) != XmlPullParser.END_TAG
|
||||
|| parser.getDepth() > displayDepth)
|
||||
@@ -400,7 +425,8 @@ public class InvariantDeviceProfile {
|
||||
ArrayList<DisplayOption> filteredProfiles = new ArrayList<>();
|
||||
if (!TextUtils.isEmpty(gridName)) {
|
||||
for (DisplayOption option : profiles) {
|
||||
if (gridName.equals(option.grid.name) && option.grid.isEnabled) {
|
||||
if (gridName.equals(option.grid.name)
|
||||
&& (option.grid.isEnabled || allowDisabledGrid)) {
|
||||
filteredProfiles.add(option);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user