From 3a30cfeb7c805bf99dba9002ac8b22ae66d84378 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 16 Jul 2015 17:27:43 -0700 Subject: Adding minSpanX and minSpanY for all the launcher widgets Bug: 22353460 Change-Id: Id4450dee42a83e4603dcd56e1c4dec2b0e405858 --- protos/backup.proto | 12 ++++++---- src/com/android/launcher3/CellLayout.java | 8 +++++-- .../launcher3/LauncherBackupAgentHelper.java | 2 +- .../android/launcher3/LauncherBackupHelper.java | 26 ++++++++++++++++------ 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/protos/backup.proto b/protos/backup.proto index 09330ee06..d8d94e8cb 100644 --- a/protos/backup.proto +++ b/protos/backup.proto @@ -102,17 +102,17 @@ message Favorite { optional string iconResource = 17; optional bytes icon = 18; optional TargetType targetType = 19 [default = TARGET_NONE]; - } +} message Screen { required int64 id = 1; optional int32 rank = 2; - } +} message Resource { required int32 dpi = 1; required bytes data = 2; - } +} message Widget { required string provider = 1; @@ -120,4 +120,8 @@ message Widget { optional bool configure = 3; optional Resource icon = 4; optional Resource preview = 5; - } + + // Assume that a widget is resizable upto 2x2 if no data is available + optional int32 minSpanX = 6 [default = 2]; + optional int32 minSpanY = 7 [default = 2]; +} diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index 2cde3d53d..809688712 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -2690,8 +2690,12 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { * @param result An array of length 2 in which to store the result (may be null). */ public static int[] rectToCell(Launcher launcher, int width, int height, int[] result) { - DeviceProfile grid = launcher.getDeviceProfile(); - Rect padding = grid.getWorkspacePadding(Utilities.isRtl(launcher.getResources())); + return rectToCell(launcher.getDeviceProfile(), launcher, width, height, result); + } + + public static int[] rectToCell(DeviceProfile grid, Context context, int width, int height, + int[] result) { + Rect padding = grid.getWorkspacePadding(Utilities.isRtl(context.getResources())); // Always assume we're working with the smallest span to make sure we // reserve enough space in both orientations. diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java index e607a0faf..a92a889f9 100644 --- a/src/com/android/launcher3/LauncherBackupAgentHelper.java +++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java @@ -92,7 +92,7 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper { LauncherClings.synchonouslyMarkFirstRunClingDismissed(this); // TODO: Update the backup set to include rank. - if (mHelper.restoredBackupVersion <= 2) { + if (mHelper.restoredBackupVersion <= 3) { LauncherAppState.getLauncherProvider().updateFolderItemsRank(); LauncherAppState.getLauncherProvider().convertShortcutsToLauncherActivities(); } diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index f2097366a..8c6fedbdc 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -75,7 +75,7 @@ public class LauncherBackupHelper implements BackupHelper { private static final boolean VERBOSE = LauncherBackupAgentHelper.VERBOSE; private static final boolean DEBUG = LauncherBackupAgentHelper.DEBUG; - private static final int BACKUP_VERSION = 2; + private static final int BACKUP_VERSION = 3; private static final int MAX_JOURNAL_SIZE = 1000000; // Journal key is such that it is always smaller than any dynamically generated @@ -148,6 +148,7 @@ public class LauncherBackupHelper implements BackupHelper { private IconCache mIconCache; private DeviceProfieData mDeviceProfileData; + private InvariantDeviceProfile mIdp; boolean restoreSuccessful; int restoredBackupVersion = 1; @@ -178,6 +179,7 @@ public class LauncherBackupHelper implements BackupHelper { mExistingKeys.add(keyToBackupKey(key)); } } + restoredBackupVersion = journal.backupVersion; } /** @@ -206,7 +208,8 @@ public class LauncherBackupHelper implements BackupHelper { if (mDeviceProfileData == null) { LauncherAppState app = LauncherAppState.getInstance(); - mDeviceProfileData = initDeviceProfileData(app.getInvariantDeviceProfile()); + mIdp = app.getInvariantDeviceProfile(); + mDeviceProfileData = initDeviceProfileData(mIdp); mIconCache = app.getIconCache(); } @@ -308,9 +311,9 @@ public class LauncherBackupHelper implements BackupHelper { if (mDeviceProfileData == null) { // This call does not happen on a looper thread. So LauncherAppState // can't be created . Instead initialize required dependencies directly. - InvariantDeviceProfile profile = new InvariantDeviceProfile(mContext); - mDeviceProfileData = initDeviceProfileData(profile); - mIconCache = new IconCache(mContext, profile); + mIdp = new InvariantDeviceProfile(mContext); + mDeviceProfileData = initDeviceProfileData(mIdp); + mIconCache = new IconCache(mContext, mIdp); } int dataSize = data.size(); @@ -335,7 +338,6 @@ public class LauncherBackupHelper implements BackupHelper { MessageNano.mergeFrom(journal, readCheckedBytes(mBuffer, dataSize)); applyJournal(journal); restoreSuccessful = isBackupCompatible(journal); - restoredBackupVersion = journal.backupVersion; return; } @@ -636,7 +638,7 @@ public class LauncherBackupHelper implements BackupHelper { } else { Log.w(TAG, "empty intent on appwidget: " + id); } - if (mExistingKeys.contains(backupKey)) { + if (mExistingKeys.contains(backupKey) && restoredBackupVersion >= BACKUP_VERSION) { if (DEBUG) Log.d(TAG, "already saved widget " + backupKey); // remember that we already backed this up previously @@ -969,6 +971,16 @@ public class LauncherBackupHelper implements BackupHelper { widget.icon.data = Utilities.flattenBitmap(icon); widget.icon.dpi = dpi; } + + // Calculate the spans corresponding to any one of the orientations as it should not change + // based on orientation. + int[] minSpans = CellLayout.rectToCell( + mIdp.portraitProfile, mContext, info.minResizeWidth, info.minResizeHeight, null); + widget.minSpanX = (info.resizeMode & LauncherAppWidgetProviderInfo.RESIZE_HORIZONTAL) != 0 + ? minSpans[0] : -1; + widget.minSpanY = (info.resizeMode & LauncherAppWidgetProviderInfo.RESIZE_VERTICAL) != 0 + ? minSpans[1] : -1; + return widget; } -- cgit v1.2.3