summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/LauncherAppWidgetProviderInfo.java')
-rw-r--r--src/com/android/launcher3/LauncherAppWidgetProviderInfo.java81
1 files changed, 47 insertions, 34 deletions
diff --git a/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java
index 85af92f30..71a08a853 100644
--- a/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java
+++ b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java
@@ -1,10 +1,13 @@
package com.android.launcher3;
import android.annotation.TargetApi;
+import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
+import android.graphics.Point;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Parcel;
@@ -19,10 +22,10 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo {
public boolean isCustomWidget = false;
- private int mSpanX = -1;
- private int mSpanY = -1;
- private int mMinSpanX = -1;
- private int mMinSpanY = -1;
+ public int spanX;
+ public int spanY;
+ public int minSpanX;
+ public int minSpanY;
public static LauncherAppWidgetProviderInfo fromProviderInfo(Context context,
AppWidgetProviderInfo info) {
@@ -41,6 +44,7 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo {
public LauncherAppWidgetProviderInfo(Parcel in) {
super(in);
+ initSpans();
}
public LauncherAppWidgetProviderInfo(Context context, CustomAppWidget widget) {
@@ -52,6 +56,41 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo {
previewImage = widget.getPreviewImage();
initialLayout = widget.getWidgetLayout();
resizeMode = widget.getResizeMode();
+ initSpans();
+ }
+
+ private void initSpans() {
+ LauncherAppState app = LauncherAppState.getInstance();
+ InvariantDeviceProfile idp = app.getInvariantDeviceProfile();
+
+ // We only care out the cell size, which is independent of the the layout direction.
+ Rect paddingLand = idp.landscapeProfile.getWorkspacePadding(false /* isLayoutRtl */);
+ Rect paddingPort = idp.portraitProfile.getWorkspacePadding(false /* isLayoutRtl */);
+
+ // Always assume we're working with the smallest span to make sure we
+ // reserve enough space in both orientations.
+ float smallestCellWidth = DeviceProfile.calculateCellWidth(Math.min(
+ idp.landscapeProfile.widthPx - paddingLand.left - paddingLand.right,
+ idp.portraitProfile.widthPx - paddingPort.left - paddingPort.right),
+ idp.numColumns);
+ float smallestCellHeight = DeviceProfile.calculateCellWidth(Math.min(
+ idp.landscapeProfile.heightPx - paddingLand.top - paddingLand.bottom,
+ idp.portraitProfile.heightPx - paddingPort.top - paddingPort.bottom),
+ idp.numRows);
+
+ // We want to account for the extra amount of padding that we are adding to the widget
+ // to ensure that it gets the full amount of space that it has requested.
+ Rect widgetPadding = AppWidgetHostView.getDefaultPaddingForWidget(
+ app.getContext(), provider, null);
+ spanX = Math.max(1, (int) Math.ceil(
+ (minWidth + widgetPadding.left + widgetPadding.right) / smallestCellWidth));
+ spanY = Math.max(1, (int) Math.ceil(
+ (minHeight + widgetPadding.top + widgetPadding.bottom) / smallestCellHeight));
+
+ minSpanX = Math.max(1, (int) Math.ceil(
+ (minResizeWidth + widgetPadding.left + widgetPadding.right) / smallestCellWidth));
+ minSpanY = Math.max(1, (int) Math.ceil(
+ (minResizeHeight + widgetPadding.top + widgetPadding.bottom) / smallestCellHeight));
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@@ -79,35 +118,9 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo {
provider.toString(), provider.getPackageName(), provider.getShortClassName(), getLabel(pm));
}
- public int getSpanX(Launcher launcher) {
- lazyLoadSpans(launcher);
- return mSpanX;
- }
-
- public int getSpanY(Launcher launcher) {
- lazyLoadSpans(launcher);
- return mSpanY;
- }
-
- public int getMinSpanX(Launcher launcher) {
- lazyLoadSpans(launcher);
- return mMinSpanX;
- }
-
- public int getMinSpanY(Launcher launcher) {
- lazyLoadSpans(launcher);
- return mMinSpanY;
- }
-
- private void lazyLoadSpans(Launcher launcher) {
- if (mSpanX < 0 || mSpanY < 0 || mMinSpanX < 0 || mMinSpanY < 0) {
- int[] minResizeSpan = launcher.getMinSpanForWidget(this);
- int[] span = launcher.getSpanForWidget(this);
-
- mSpanX = span[0];
- mSpanY = span[1];
- mMinSpanX = minResizeSpan[0];
- mMinSpanY = minResizeSpan[1];
- }
+ public Point getMinSpans(InvariantDeviceProfile idp, Context context) {
+ return new Point(
+ (resizeMode & RESIZE_HORIZONTAL) != 0 ? minSpanX : -1,
+ (resizeMode & RESIZE_VERTICAL) != 0 ? minSpanY : -1);
}
}