diff options
25 files changed, 328 insertions, 431 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 1fb8e8d01..3af38f384 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -53,7 +53,6 @@ <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.BIND_APPWIDGET" /> - <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.BROADCAST_STICKY"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 88dc3e22b..c723b39be 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -100,6 +100,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { @Thunk LinearLayout mWallpapersView; @Thunk HorizontalScrollView mWallpaperScrollContainer; + @Thunk View mWallpaperStrip; @Thunk ActionMode.Callback mActionModeCallback; @Thunk ActionMode mActionMode; @@ -379,6 +380,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mProgressView = findViewById(R.id.loading); mWallpaperScrollContainer = (HorizontalScrollView) findViewById(R.id.wallpaper_scroll_container); + mWallpaperStrip = findViewById(R.id.wallpaper_strip); mCropView.setTouchCallback(new CropView.TouchCallback() { ViewPropertyAnimator mAnim; @Override @@ -386,15 +388,15 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (mAnim != null) { mAnim.cancel(); } - if (mWallpaperScrollContainer.getAlpha() == 1f) { + if (mWallpaperStrip.getAlpha() == 1f) { mIgnoreNextTap = true; } - mAnim = mWallpaperScrollContainer.animate(); + mAnim = mWallpaperStrip.animate(); mAnim.alpha(0f) .setDuration(150) .withEndAction(new Runnable() { public void run() { - mWallpaperScrollContainer.setVisibility(View.INVISIBLE); + mWallpaperStrip.setVisibility(View.INVISIBLE); } }); mAnim.setInterpolator(new AccelerateInterpolator(0.75f)); @@ -412,8 +414,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (mAnim != null) { mAnim.cancel(); } - mWallpaperScrollContainer.setVisibility(View.VISIBLE); - mAnim = mWallpaperScrollContainer.animate(); + mWallpaperStrip.setVisibility(View.VISIBLE); + mAnim = mWallpaperStrip.animate(); mAnim.alpha(1f) .setDuration(150) .setInterpolator(new DecelerateInterpolator(0.75f)); @@ -713,10 +715,10 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public void onStop() { super.onStop(); - mWallpaperScrollContainer = (HorizontalScrollView) findViewById(R.id.wallpaper_scroll_container); - if (mWallpaperScrollContainer.getAlpha() < 1f) { - mWallpaperScrollContainer.setAlpha(1f); - mWallpaperScrollContainer.setVisibility(View.VISIBLE); + mWallpaperStrip = findViewById(R.id.wallpaper_strip); + if (mWallpaperStrip.getAlpha() < 1f) { + mWallpaperStrip.setAlpha(1f); + mWallpaperStrip.setVisibility(View.VISIBLE); } } diff --git a/res/xml/default_workspace_4x4.xml b/res/xml/default_workspace_4x4.xml index 9bec86aa8..060a1f880 100644 --- a/res/xml/default_workspace_4x4.xml +++ b/res/xml/default_workspace_4x4.xml @@ -15,102 +15,33 @@ --> <favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3"> - <!-- Far-left screen [0] --> - <!-- Left screen [1] --> - <appwidget - launcher:packageName="com.android.settings" - launcher:className="com.android.settings.widget.SettingsAppWidgetProvider" - launcher:screen="1" - launcher:x="0" - launcher:y="3" - launcher:spanX="4" - launcher:spanY="1" /> - - <!-- Middle screen [2] --> - <appwidget - launcher:packageName="com.android.deskclock" - launcher:className="com.android.alarmclock.AnalogAppWidgetProvider" - launcher:screen="2" - launcher:x="1" - launcher:y="0" - launcher:spanX="2" - launcher:spanY="2" /> - <favorite - launcher:packageName="com.android.camera" - launcher:className="com.android.camera.Camera" - launcher:screen="2" - launcher:x="0" - launcher:y="3" /> + <!-- Hotseat --> + <include launcher:workspace="@xml/dw_phone_hotseat" /> - <!-- Right screen [3] --> - <favorite - launcher:packageName="com.android.gallery3d" - launcher:className="com.android.gallery3d.app.Gallery" - launcher:screen="3" - launcher:x="1" - launcher:y="3" /> - <favorite - launcher:packageName="com.android.settings" - launcher:className="com.android.settings.Settings" - launcher:screen="3" - launcher:x="2" - launcher:y="3" /> - - <!-- Far-right screen [4] --> - - <!-- Hotseat (We use the screen as the position of the item in the hotseat) --> - <!-- Dialer, Contacts, [All Apps], Messaging, Browser --> + <!-- Bottom row --> <resolve - launcher:container="-101" launcher:screen="0" launcher:x="0" - launcher:y="0" > - <favorite launcher:uri="#Intent;action=android.intent.action.DIAL;end" /> - <favorite launcher:uri="tel:123" /> - <favorite launcher:uri="#Intent;action=android.intent.action.CALL_BUTTON;end" /> - - <favorite - launcher:packageName="com.android.dialer" - launcher:className="com.android.dialer.DialtactsActivity" /> + launcher:y="3" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_EMAIL;end" /> + <favorite launcher:uri="mailto:" /> </resolve> - <favorite - launcher:packageName="com.android.contacts" - launcher:className="com.android.contacts.activities.PeopleActivity" - launcher:container="-101" - launcher:screen="1" + <resolve + launcher:screen="0" launcher:x="1" - launcher:y="0" /> + launcher:y="3" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_GALLERY;end" /> + <favorite launcher:uri="#Intent;type=images/*;end" /> + </resolve> <resolve - launcher:container="-101" - launcher:screen="3" + launcher:screen="0" launcher:x="3" - launcher:y="0" > - <favorite - launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MESSAGING;end" /> - <favorite launcher:uri="sms:" /> - <favorite launcher:uri="smsto:" /> - <favorite launcher:uri="mms:" /> - <favorite launcher:uri="mmsto:" /> - - <favorite - launcher:packageName="com.android.mms" - launcher:className="com.android.mms.ui.ConversationList" /> - </resolve> - <resolve - launcher:container="-101" - launcher:screen="4" - launcher:x="4" - launcher:y="0" > - <favorite - launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_BROWSER;end" /> - <favorite launcher:uri="http://www.example.com/" /> - - <favorite - launcher:packageName="com.android.browser" - launcher:className="com.android.browser.BrowserActivity" /> + launcher:y="3" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MARKET;end" /> + <favorite launcher:uri="market://details?id=com.android.launcher" /> </resolve> </favorites> diff --git a/res/xml/default_workspace_5x5.xml b/res/xml/default_workspace_5x5.xml index 9bec86aa8..322661720 100644 --- a/res/xml/default_workspace_5x5.xml +++ b/res/xml/default_workspace_5x5.xml @@ -15,102 +15,34 @@ --> <favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3"> - <!-- Far-left screen [0] --> - <!-- Left screen [1] --> - <appwidget - launcher:packageName="com.android.settings" - launcher:className="com.android.settings.widget.SettingsAppWidgetProvider" - launcher:screen="1" - launcher:x="0" - launcher:y="3" - launcher:spanX="4" - launcher:spanY="1" /> - - <!-- Middle screen [2] --> - <appwidget - launcher:packageName="com.android.deskclock" - launcher:className="com.android.alarmclock.AnalogAppWidgetProvider" - launcher:screen="2" - launcher:x="1" - launcher:y="0" - launcher:spanX="2" - launcher:spanY="2" /> - <favorite - launcher:packageName="com.android.camera" - launcher:className="com.android.camera.Camera" - launcher:screen="2" - launcher:x="0" - launcher:y="3" /> + <!-- Hotseat --> + <include launcher:workspace="@xml/dw_phone_hotseat" /> - <!-- Right screen [3] --> - <favorite - launcher:packageName="com.android.gallery3d" - launcher:className="com.android.gallery3d.app.Gallery" - launcher:screen="3" - launcher:x="1" - launcher:y="3" /> - <favorite - launcher:packageName="com.android.settings" - launcher:className="com.android.settings.Settings" - launcher:screen="3" - launcher:x="2" - launcher:y="3" /> - - <!-- Far-right screen [4] --> - - <!-- Hotseat (We use the screen as the position of the item in the hotseat) --> - <!-- Dialer, Contacts, [All Apps], Messaging, Browser --> + <!-- Bottom row --> <resolve - launcher:container="-101" launcher:screen="0" launcher:x="0" - launcher:y="0" > - <favorite launcher:uri="#Intent;action=android.intent.action.DIAL;end" /> - <favorite launcher:uri="tel:123" /> - <favorite launcher:uri="#Intent;action=android.intent.action.CALL_BUTTON;end" /> + launcher:y="4" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_EMAIL;end" /> + <favorite launcher:uri="mailto:" /> - <favorite - launcher:packageName="com.android.dialer" - launcher:className="com.android.dialer.DialtactsActivity" /> </resolve> - <favorite - launcher:packageName="com.android.contacts" - launcher:className="com.android.contacts.activities.PeopleActivity" - launcher:container="-101" - launcher:screen="1" - launcher:x="1" - launcher:y="0" /> - <resolve - launcher:container="-101" - launcher:screen="3" - launcher:x="3" - launcher:y="0" > - <favorite - launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MESSAGING;end" /> - <favorite launcher:uri="sms:" /> - <favorite launcher:uri="smsto:" /> - <favorite launcher:uri="mms:" /> - <favorite launcher:uri="mmsto:" /> + launcher:screen="0" + launcher:x="1" + launcher:y="4" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_GALLERY;end" /> + <favorite launcher:uri="#Intent;type=images/*;end" /> - <favorite - launcher:packageName="com.android.mms" - launcher:className="com.android.mms.ui.ConversationList" /> </resolve> + <resolve - launcher:container="-101" - launcher:screen="4" + launcher:screen="0" launcher:x="4" - launcher:y="0" > - <favorite - launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_BROWSER;end" /> - <favorite launcher:uri="http://www.example.com/" /> - - <favorite - launcher:packageName="com.android.browser" - launcher:className="com.android.browser.BrowserActivity" /> + launcher:y="4" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MARKET;end" /> + <favorite launcher:uri="market://details?id=com.android.launcher" /> </resolve> - </favorites> diff --git a/res/xml/default_workspace_5x6.xml b/res/xml/default_workspace_5x6.xml index d42a93a6a..bc236fb14 100644 --- a/res/xml/default_workspace_5x6.xml +++ b/res/xml/default_workspace_5x6.xml @@ -15,101 +15,23 @@ --> <favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3"> - <!-- Far-left screen [0] --> - <!-- Left screen [1] --> - <appwidget - launcher:packageName="com.android.settings" - launcher:className="com.android.settings.widget.SettingsAppWidgetProvider" - launcher:screen="1" - launcher:x="0" - launcher:y="3" - launcher:spanX="4" - launcher:spanY="1" /> + <!-- Hotseat --> + <include launcher:workspace="@xml/dw_tablet_hotseat" /> - <!-- Middle screen [2] --> - <appwidget - launcher:packageName="com.android.deskclock" - launcher:className="com.android.alarmclock.AnalogAppWidgetProvider" - launcher:screen="2" - launcher:x="1" - launcher:y="0" - launcher:spanX="2" - launcher:spanY="2" /> + <!-- Bottom row --> <favorite - launcher:packageName="com.android.camera" - launcher:className="com.android.camera.Camera" - launcher:screen="2" + launcher:screen="0" launcher:x="0" - launcher:y="3" /> - - <!-- Right screen [3] --> - <favorite - launcher:packageName="com.android.gallery3d" - launcher:className="com.android.gallery3d.app.Gallery" - launcher:screen="3" - launcher:x="1" - launcher:y="3" /> - <favorite - launcher:packageName="com.android.settings" - launcher:className="com.android.settings.Settings" - launcher:screen="3" - launcher:x="2" - launcher:y="3" /> - - <!-- Far-right screen [4] --> - - <!-- Hotseat (We use the screen as the position of the item in the hotseat) --> - <!-- Dialer, Contacts, [All Apps], Messaging, Browser --> - <resolve - launcher:container="-101" - launcher:screen="1" - launcher:x="1" - launcher:y="0" > - <favorite launcher:uri="#Intent;action=android.intent.action.DIAL;end" /> - <favorite launcher:uri="tel:123" /> - <favorite launcher:uri="#Intent;action=android.intent.action.CALL_BUTTON;end" /> - - <favorite - launcher:packageName="com.android.dialer" - launcher:className="com.android.dialer.DialtactsActivity" /> - </resolve> - - <favorite - launcher:packageName="com.android.contacts" - launcher:className="com.android.contacts.activities.PeopleActivity" - launcher:container="-101" - launcher:screen="2" - launcher:x="2" - launcher:y="0" /> - - <resolve - launcher:container="-101" - launcher:screen="4" - launcher:x="4" - launcher:y="0" > - <favorite - launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MESSAGING;end" /> - <favorite launcher:uri="sms:" /> - <favorite launcher:uri="smsto:" /> - <favorite launcher:uri="mms:" /> - <favorite launcher:uri="mmsto:" /> + launcher:y="4" + launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_CONTACTS;end" /> - <favorite - launcher:packageName="com.android.mms" - launcher:className="com.android.mms.ui.ConversationList" /> - </resolve> <resolve - launcher:container="-101" - launcher:screen="5" + launcher:screen="0" launcher:x="5" - launcher:y="0" > - <favorite - launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_BROWSER;end" /> - <favorite launcher:uri="http://www.example.com/" /> - - <favorite - launcher:packageName="com.android.browser" - launcher:className="com.android.browser.BrowserActivity" /> + launcher:y="4" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MARKET;end" /> + <favorite launcher:uri="market://details?id=com.android.launcher" /> </resolve> + </favorites> diff --git a/res/xml/dw_phone_hotseat.xml b/res/xml/dw_phone_hotseat.xml new file mode 100644 index 000000000..b58994d1d --- /dev/null +++ b/res/xml/dw_phone_hotseat.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3"> + <!-- Hotseat (We use the screen as the position of the item in the hotseat) --> + <!-- Dialer, Messaging, [All Apps], Browser, Camera --> + <resolve + launcher:container="-101" + launcher:screen="0" + launcher:x="0" + launcher:y="0" > + <favorite launcher:uri="#Intent;action=android.intent.action.DIAL;end" /> + <favorite launcher:uri="tel:123" /> + <favorite launcher:uri="#Intent;action=android.intent.action.CALL_BUTTON;end" /> + </resolve> + + <resolve + launcher:container="-101" + launcher:screen="1" + launcher:x="1" + launcher:y="0" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MESSAGING;end" /> + <favorite launcher:uri="sms:" /> + <favorite launcher:uri="smsto:" /> + <favorite launcher:uri="mms:" /> + <favorite launcher:uri="mmsto:" /> + </resolve> + + <!-- All Apps --> + + <resolve + launcher:container="-101" + launcher:screen="3" + launcher:x="3" + launcher:y="0" > + <favorite + launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_BROWSER;end" /> + <favorite launcher:uri="http://www.example.com/" /> + </resolve> + + <resolve + launcher:container="-101" + launcher:screen="4" + launcher:x="4" + launcher:y="0" > + <favorite launcher:uri="#Intent;action=android.media.action.STILL_IMAGE_CAMERA;end" /> + <favorite launcher:uri="#Intent;action=android.intent.action.CAMERA_BUTTON;end" /> + </resolve> + +</favorites> diff --git a/res/xml/dw_tablet_hotseat.xml b/res/xml/dw_tablet_hotseat.xml new file mode 100644 index 000000000..671ccba3c --- /dev/null +++ b/res/xml/dw_tablet_hotseat.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3"> + <!-- Hotseat (We use the screen as the position of the item in the hotseat) --> + <!-- Messaging, Email, Browser, [All Apps], Music, Gallery, Camera --> + <resolve + launcher:container="-101" + launcher:screen="0" + launcher:x="0" + launcher:y="0" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MESSAGING;end" /> + <favorite launcher:uri="sms:" /> + <favorite launcher:uri="smsto:" /> + <favorite launcher:uri="mms:" /> + <favorite launcher:uri="mmsto:" /> + </resolve> + + <resolve + launcher:container="-101" + launcher:screen="1" + launcher:x="1" + launcher:y="0" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_EMAIL;end" /> + <favorite launcher:uri="mailto:" /> + </resolve> + + <resolve + launcher:container="-101" + launcher:screen="2" + launcher:x="2" + launcher:y="0" > + <favorite + launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_BROWSER;end" /> + <favorite launcher:uri="http://www.example.com/" /> + </resolve> + + <!-- All Apps --> + + <favorite + launcher:container="-101" + launcher:screen="4" + launcher:x="4" + launcher:y="0" + launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MUSIC;end" /> + + <resolve + launcher:container="-101" + launcher:screen="5" + launcher:x="5" + launcher:y="0" > + <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_GALLERY;end" /> + <favorite launcher:uri="#Intent;type=images/*;end" /> + </resolve> + + <resolve + launcher:container="-101" + launcher:screen="6" + launcher:x="6" + launcher:y="0" > + <favorite launcher:uri="#Intent;action=android.media.action.STILL_IMAGE_CAMERA;end" /> + <favorite launcher:uri="#Intent;action=android.intent.action.CAMERA_BUTTON;end" /> + </resolve> + +</favorites> diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java index ea7c22189..e6bf52531 100644 --- a/src/com/android/launcher3/AppWidgetResizeFrame.java +++ b/src/com/android/launcher3/AppWidgetResizeFrame.java @@ -75,8 +75,8 @@ public class AppWidgetResizeFrame extends FrameLayout { mResizeMode = info.resizeMode; mDragLayer = dragLayer; - mMinHSpan = info.getMinSpanX(mLauncher); - mMinVSpan = info.getMinSpanY(mLauncher); + mMinHSpan = info.minSpanX; + mMinVSpan = info.minSpanY; setBackgroundResource(R.drawable.widget_resize_shadow); setForeground(getResources().getDrawable(R.drawable.widget_resize_frame)); diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index a0be8ea2b..1bcaab519 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -34,11 +34,13 @@ import android.util.SparseArray; import android.util.TypedValue; import android.view.KeyEvent; import android.view.MotionEvent; +import android.view.View; import android.view.ViewConfiguration; import android.view.ViewParent; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.widget.TextView; + import com.android.launcher3.IconCache.IconLoadRequest; import com.android.launcher3.model.PackageItemInfo; @@ -538,6 +540,13 @@ public class BubbleTextView extends TextView } else if (info instanceof ShortcutInfo) { applyFromShortcutInfo((ShortcutInfo) info, LauncherAppState.getInstance().getIconCache()); + if ((info.rank < FolderIcon.NUM_ITEMS_IN_PREVIEW) && (info.container >= 0)) { + View folderIcon = + mLauncher.getWorkspace().getHomescreenIconByItemId(info.container); + if (folderIcon != null) { + folderIcon.invalidate(); + } + } } else if (info instanceof PackageItemInfo) { applyFromPackageItemInfo((PackageItemInfo) info); } diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index b875d22e6..84e2d49c2 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -54,7 +54,6 @@ import com.android.launcher3.accessibility.DragAndDropAccessibilityDelegate; import com.android.launcher3.accessibility.FolderAccessibilityHelper; import com.android.launcher3.accessibility.WorkspaceAccessibilityHelper; import com.android.launcher3.util.Thunk; -import com.android.launcher3.widget.PendingAddWidgetInfo; import java.util.ArrayList; import java.util.Arrays; @@ -2686,65 +2685,6 @@ public class CellLayout extends ViewGroup implements BubbleTextShadowHandler { resultRect.set(x, y, x + width, y + height); } - /** - * Computes the required horizontal and vertical cell spans to always - * fit the given rectangle. - * - * @param width Width in pixels - * @param height Height in pixels - * @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) { - 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. - int parentWidth = DeviceProfile.calculateCellWidth(grid.widthPx - - padding.left - padding.right, (int) grid.inv.numColumns); - int parentHeight = DeviceProfile.calculateCellHeight(grid.heightPx - - padding.top - padding.bottom, (int) grid.inv.numRows); - int smallerSize = Math.min(parentWidth, parentHeight); - - // Always round up to next largest cell - int spanX = (int) Math.ceil(width / (float) smallerSize); - int spanY = (int) Math.ceil(height / (float) smallerSize); - - if (result == null) { - return new int[] { spanX, spanY }; - } - result[0] = spanX; - result[1] = spanY; - return result; - } - - /** - * Calculate the grid spans needed to fit given item - */ - public void calculateSpans(ItemInfo info) { - final int minWidth; - final int minHeight; - - if (info instanceof LauncherAppWidgetInfo) { - minWidth = ((LauncherAppWidgetInfo) info).minWidth; - minHeight = ((LauncherAppWidgetInfo) info).minHeight; - } else if (info instanceof PendingAddWidgetInfo) { - minWidth = ((PendingAddWidgetInfo) info).minWidth; - minHeight = ((PendingAddWidgetInfo) info).minHeight; - } else { - // It's not a widget, so it must be 1x1 - info.spanX = info.spanY = 1; - return; - } - int[] spans = rectToCell(mLauncher, minWidth, minHeight, null); - info.spanX = spans[0]; - info.spanY = spans[1]; - } - private void clearOccupiedCells() { for (int x = 0; x < mCountX; x++) { for (int y = 0; y < mCountY; y++) { diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 535d1a443..5e713b21f 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -1389,7 +1389,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList } // Compares item position based on rank and position giving priority to the rank. - private static final Comparator<ItemInfo> ITEM_POS_COMPARATOR = new Comparator<ItemInfo>() { + public static final Comparator<ItemInfo> ITEM_POS_COMPARATOR = new Comparator<ItemInfo>() { @Override public int compare(ItemInfo lhs, ItemInfo rhs) { diff --git a/src/com/android/launcher3/FolderPagedView.java b/src/com/android/launcher3/FolderPagedView.java index f2ec1b68c..cc9c5738a 100644 --- a/src/com/android/launcher3/FolderPagedView.java +++ b/src/com/android/launcher3/FolderPagedView.java @@ -329,6 +329,10 @@ public class FolderPagedView extends PagedView { lp.cellY = info.cellY; currentPage.addViewToCellLayout( v, -1, mFolder.mLauncher.getViewIdForItem(info), lp, true); + + if (rank < FolderIcon.NUM_ITEMS_IN_PREVIEW && v instanceof BubbleTextView) { + ((BubbleTextView) v).verifyHighRes(); + } } rank ++; diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index aee044097..9d04770af 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1552,23 +1552,6 @@ public class Launcher extends Activity } } - private int[] getSpanForWidget(ComponentName component, int minWidth, int minHeight) { - Rect padding = AppWidgetHostView.getDefaultPaddingForWidget(this, component, null); - // 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 - int requiredWidth = minWidth + padding.left + padding.right; - int requiredHeight = minHeight + padding.top + padding.bottom; - return CellLayout.rectToCell(this, requiredWidth, requiredHeight, null); - } - - public int[] getSpanForWidget(AppWidgetProviderInfo info) { - return getSpanForWidget(info.provider, info.minWidth, info.minHeight); - } - - public int[] getMinSpanForWidget(AppWidgetProviderInfo info) { - return getSpanForWidget(info.provider, info.minResizeWidth, info.minResizeHeight); - } - /** * Add a widget to the workspace. * @@ -2217,7 +2200,7 @@ public class Launcher extends Activity mPendingAddInfo.screenId = -1; mPendingAddInfo.cellX = mPendingAddInfo.cellY = -1; mPendingAddInfo.spanX = mPendingAddInfo.spanY = -1; - mPendingAddInfo.minSpanX = mPendingAddInfo.minSpanY = -1; + mPendingAddInfo.minSpanX = mPendingAddInfo.minSpanY = 1; mPendingAddInfo.dropPos = null; } @@ -2678,6 +2661,7 @@ public class Launcher extends Activity throw new IllegalArgumentException("Input must be a FolderIcon"); } + // TODO(sunnygoyal): Re-evaluate this code. FolderIcon folderIcon = (FolderIcon) v; final FolderInfo info = folderIcon.getFolderInfo(); Folder openFolder = mWorkspace.getFolderForTag(info); @@ -3943,6 +3927,8 @@ public class Launcher extends Activity } item.hostView = mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo); + item.minSpanX = appWidgetInfo.minSpanX; + item.minSpanY = appWidgetInfo.minSpanY; } else { appWidgetInfo = null; PendingAppWidgetHostView view = new PendingAppWidgetHostView(this, item, diff --git a/src/com/android/launcher3/LauncherAppWidgetInfo.java b/src/com/android/launcher3/LauncherAppWidgetInfo.java index aad18b578..882f7e202 100644 --- a/src/com/android/launcher3/LauncherAppWidgetInfo.java +++ b/src/com/android/launcher3/LauncherAppWidgetInfo.java @@ -68,10 +68,6 @@ public class LauncherAppWidgetInfo extends ItemInfo { ComponentName providerName; - // TODO: Are these necessary here? - int minWidth = -1; - int minHeight = -1; - /** * Indicates the restore status of the widget. */ diff --git a/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java index 9ba78530d..71a08a853 100644 --- a/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java +++ b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java @@ -1,11 +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; @@ -20,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) { @@ -42,6 +44,7 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo { public LauncherAppWidgetProviderInfo(Parcel in) { super(in); + initSpans(); } public LauncherAppWidgetProviderInfo(Context context, CustomAppWidget widget) { @@ -53,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) @@ -80,46 +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) { - // Calculate the spans corresponding to any one of the orientations as it should not change - // based on orientation. - // TODO: Use the max of both profiles - int[] minSpans = CellLayout.rectToCell( - idp.portraitProfile, context, minResizeWidth, minResizeHeight, null); return new Point( - (resizeMode & RESIZE_HORIZONTAL) != 0 ? minSpans[0] : -1, - (resizeMode & RESIZE_VERTICAL) != 0 ? minSpans[1] : -1); + (resizeMode & RESIZE_HORIZONTAL) != 0 ? minSpanX : -1, + (resizeMode & RESIZE_VERTICAL) != 0 ? minSpanY : -1); } } diff --git a/src/com/android/launcher3/LauncherClings.java b/src/com/android/launcher3/LauncherClings.java index c13752cb1..c44ea6bcd 100644 --- a/src/com/android/launcher3/LauncherClings.java +++ b/src/com/android/launcher3/LauncherClings.java @@ -44,8 +44,6 @@ class LauncherClings implements OnClickListener { private static final String TAG_CROP_TOP_AND_SIDES = "crop_bg_top_and_sides"; - private static final boolean DISABLE_CLINGS = false; - private static final int SHOW_CLING_DURATION = 250; private static final int DISMISS_CLING_DURATION = 200; @@ -215,10 +213,6 @@ class LauncherClings implements OnClickListener { /** Returns whether the clings are enabled or should be shown */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) private boolean areClingsEnabled() { - if (DISABLE_CLINGS) { - return false; - } - // disable clings when running in a test harness if(ActivityManager.isRunningInTestHarness()) return false; @@ -231,10 +225,7 @@ class LauncherClings implements OnClickListener { // Restricted secondary users (child mode) will potentially have very few apps // seeded when they start up for the first time. Clings won't work well with that - boolean supportsLimitedUsers = - android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2; - Account[] accounts = AccountManager.get(mLauncher).getAccounts(); - if (supportsLimitedUsers && accounts.length == 0) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { UserManager um = (UserManager) mLauncher.getSystemService(Context.USER_SERVICE); Bundle restrictions = um.getUserRestrictions(); if (restrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS, false)) { diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 2e66d34f6..c6fa8acf6 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2303,6 +2303,21 @@ public class LauncherModel extends BroadcastReceiver } } + // Sort all the folder items and make sure the first 3 items are high resolution. + for (FolderInfo folder : sBgFolders) { + Collections.sort(folder.contents, Folder.ITEM_POS_COMPARATOR); + int pos = 0; + for (ShortcutInfo info : folder.contents) { + if (info.usingLowResIcon) { + info.updateIcon(mIconCache, false); + } + pos ++; + if (pos >= FolderIcon.NUM_ITEMS_IN_PREVIEW) { + break; + } + } + } + if (restoredRows.size() > 0) { // Update restored items that no longer require special handling ContentValues values = new ContentValues(); diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java index 56c0b9d2f..5766cf2f2 100644 --- a/src/com/android/launcher3/ShortcutInfo.java +++ b/src/com/android/launcher3/ShortcutInfo.java @@ -198,13 +198,17 @@ public class ShortcutInfo extends ItemInfo { return mIcon; } - public void updateIcon(IconCache iconCache) { + public void updateIcon(IconCache iconCache, boolean useLowRes) { if (itemType == Favorites.ITEM_TYPE_APPLICATION) { iconCache.getTitleAndIcon(this, promisedIntent != null ? promisedIntent : intent, user, - shouldUseLowResIcon()); + useLowRes); } } + public void updateIcon(IconCache iconCache) { + updateIcon(iconCache, shouldUseLowResIcon()); + } + @Override void onAddToDatabase(Context context, ContentValues values) { super.onAddToDatabase(context, values); diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index 2a8053d52..1fb795add 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -361,8 +361,8 @@ public class WidgetPreviewLoader { } final boolean widgetPreviewExists = (drawable != null); - final int spanX = info.getSpanX(launcher) < 1 ? 1 : info.getSpanX(launcher); - final int spanY = info.getSpanY(launcher) < 1 ? 1 : info.getSpanY(launcher); + final int spanX = info.spanX; + final int spanY = info.spanY; int previewWidth; int previewHeight; diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index bbcabe1c2..17e59a6d7 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -3785,7 +3785,11 @@ public class Workspace extends PagedView if (parentCell != null) { parentCell.removeView(v); } else if (LauncherAppState.isDogfoodBuild()) { - throw new NullPointerException("mDragInfo.cell has null parent"); + // When an app is uninstalled using the drop target, we wait until resume to remove + // the icon. We also remove all the corresponding items from the workspace at + // {@link Launcher#bindComponentsRemoved}. That call can come before or after + // {@link Launcher#mOnResumeCallbacks} depending on how busy the worker thread is. + Log.e(TAG, "mDragInfo.cell has null parent"); } if (v instanceof DropTarget) { mDragController.removeDropTarget((DropTarget) v); @@ -4072,6 +4076,16 @@ public class Workspace extends PagedView }); } + public View getHomescreenIconByItemId(final long id) { + return getFirstMatch(new ItemOperator() { + + @Override + public boolean evaluate(ItemInfo info, View v, View parent) { + return info.id == id; + } + }); + } + public View getViewForTag(final Object tag) { return getFirstMatch(new ItemOperator() { diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 67d572819..010b2cb48 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -528,7 +528,6 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc CellLayout layout = (CellLayout) workspace.getChildAt(currentScreen); ItemInfo itemInfo = (ItemInfo) d.dragInfo; if (layout != null) { - layout.calculateSpans(itemInfo); showOutOfSpaceMessage = !layout.findCellForSpan(null, itemInfo.spanX, itemInfo.spanY); } diff --git a/src/com/android/launcher3/model/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java index cabff148f..eef4f9173 100644 --- a/src/com/android/launcher3/model/WidgetsModel.java +++ b/src/com/android/launcher3/model/WidgetsModel.java @@ -8,6 +8,9 @@ import android.util.Log; import com.android.launcher3.AppFilter; import com.android.launcher3.IconCache; +import com.android.launcher3.InvariantDeviceProfile; +import com.android.launcher3.ItemInfo; +import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetProviderInfo; import com.android.launcher3.Utilities; import com.android.launcher3.compat.AlphabeticIndexCompat; @@ -40,7 +43,7 @@ public class WidgetsModel { private final AppWidgetManagerCompat mAppWidgetMgr; private final WidgetsAndShortcutNameComparator mWidgetAndShortcutNameComparator; - private final Comparator mAppNameComparator; + private final Comparator<ItemInfo> mAppNameComparator; private final IconCache mIconCache; private final AppFilter mAppFilter; private AlphabeticIndexCompat mIndexer; @@ -54,6 +57,7 @@ public class WidgetsModel { mIndexer = new AlphabeticIndexCompat(context); } + @SuppressWarnings("unchecked") private WidgetsModel(WidgetsModel model) { mAppWidgetMgr = model.mAppWidgetMgr; mPackageItemInfos = (ArrayList<PackageItemInfo>) model.mPackageItemInfos.clone(); @@ -105,6 +109,8 @@ public class WidgetsModel { mPackageItemInfos.clear(); mWidgetAndShortcutNameComparator.reset(); + InvariantDeviceProfile idp = LauncherAppState.getInstance().getInvariantDeviceProfile(); + // add and update. for (Object o: rawWidgetsShortcuts) { String packageName = ""; @@ -112,9 +118,23 @@ public class WidgetsModel { ComponentName componentName = null; if (o instanceof LauncherAppWidgetProviderInfo) { LauncherAppWidgetProviderInfo widgetInfo = (LauncherAppWidgetProviderInfo) o; - componentName = widgetInfo.provider; - packageName = widgetInfo.provider.getPackageName(); - userHandle = mAppWidgetMgr.getUser(widgetInfo); + + // Ensure that all widgets we show can be added on a workspace of this size + int minSpanX = Math.min(widgetInfo.spanX, widgetInfo.minSpanX); + int minSpanY = Math.min(widgetInfo.spanY, widgetInfo.minSpanY); + if (minSpanX <= (int) idp.numColumns && + minSpanY <= (int) idp.numRows) { + componentName = widgetInfo.provider; + packageName = widgetInfo.provider.getPackageName(); + userHandle = mAppWidgetMgr.getUser(widgetInfo); + } else { + if (DEBUG) { + Log.d(TAG, String.format( + "Widget %s : (%d X %d) can't fit on this device", + widgetInfo.provider, minSpanX, minSpanY)); + } + continue; + } } else if (o instanceof ResolveInfo) { ResolveInfo resolveInfo = (ResolveInfo) o; componentName = new ComponentName(resolveInfo.activityInfo.packageName, diff --git a/src/com/android/launcher3/widget/PendingAddWidgetInfo.java b/src/com/android/launcher3/widget/PendingAddWidgetInfo.java index 758287af3..fcb714ff1 100644 --- a/src/com/android/launcher3/widget/PendingAddWidgetInfo.java +++ b/src/com/android/launcher3/widget/PendingAddWidgetInfo.java @@ -31,10 +31,6 @@ import com.android.launcher3.compat.AppWidgetManagerCompat; * @see {@link PendingAddItemInfo} */ public class PendingAddWidgetInfo extends PendingAddItemInfo { - public int minWidth; - public int minHeight; - public int minResizeWidth; - public int minResizeHeight; public int previewImage; public int icon; public LauncherAppWidgetProviderInfo info; @@ -50,17 +46,13 @@ public class PendingAddWidgetInfo extends PendingAddItemInfo { this.info = i; user = AppWidgetManagerCompat.getInstance(launcher).getUser(i); componentName = i.provider; - minWidth = i.minWidth; - minHeight = i.minHeight; - minResizeWidth = i.minResizeWidth; - minResizeHeight = i.minResizeHeight; previewImage = i.previewImage; icon = i.icon; - spanX = i.getSpanX(launcher); - spanY = i.getSpanY(launcher); - minSpanX = i.getMinSpanX(launcher); - minSpanY = i.getMinSpanY(launcher); + spanX = i.spanX; + spanY = i.spanY; + minSpanX = i.minSpanX; + minSpanY = i.minSpanY; } public boolean isCustomWidget() { diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java index 7496ea2ef..94bbd929f 100644 --- a/src/com/android/launcher3/widget/WidgetCell.java +++ b/src/com/android/launcher3/widget/WidgetCell.java @@ -146,8 +146,8 @@ public class WidgetCell extends LinearLayout implements OnLayoutChangeListener { mInfo = info; // TODO(hyunyoungs): setup a cache for these labels. mWidgetName.setText(AppWidgetManagerCompat.getInstance(getContext()).loadLabel(info)); - int hSpan = Math.min(info.getSpanX(mLauncher), profile.numColumns); - int vSpan = Math.min(info.getSpanY(mLauncher), profile.numRows); + int hSpan = Math.min(info.spanX, profile.numColumns); + int vSpan = Math.min(info.spanY, profile.numRows); mWidgetDims.setText(String.format(mDimensionsFormatString, hSpan, vSpan)); mWidgetPreviewLoader = loader; } diff --git a/src/com/android/launcher3/widget/WidgetsContainerView.java b/src/com/android/launcher3/widget/WidgetsContainerView.java index 5afd7c493..0c6ea31bb 100644 --- a/src/com/android/launcher3/widget/WidgetsContainerView.java +++ b/src/com/android/launcher3/widget/WidgetsContainerView.java @@ -319,7 +319,6 @@ public class WidgetsContainerView extends BaseContainerView CellLayout layout = (CellLayout) workspace.getChildAt(currentScreen); ItemInfo itemInfo = (ItemInfo) d.dragInfo; if (layout != null) { - layout.calculateSpans(itemInfo); showOutOfSpaceMessage = !layout.findCellForSpan(null, itemInfo.spanX, itemInfo.spanY); } |