Merge "Remove "fade in" animation for search + voice search." into jb-mr1-dev
diff --git a/src/com/android/launcher2/AppWidgetResizeFrame.java b/src/com/android/launcher2/AppWidgetResizeFrame.java
index eb60054..7762ece 100644
--- a/src/com/android/launcher2/AppWidgetResizeFrame.java
+++ b/src/com/android/launcher2/AppWidgetResizeFrame.java
@@ -64,6 +64,8 @@
final float DIMMED_HANDLE_ALPHA = 0f;
final float RESIZE_THRESHOLD = 0.66f;
+ private static Rect mTmpRect = new Rect();
+
public static final int LEFT = 0;
public static final int TOP = 1;
public static final int RIGHT = 2;
@@ -336,6 +338,16 @@
static void updateWidgetSizeRanges(AppWidgetHostView widgetView, Launcher launcher,
int spanX, int spanY) {
+
+ getWidgetSizeRanges(launcher, spanX, spanY, mTmpRect);
+ widgetView.updateAppWidgetSize(null, mTmpRect.left, mTmpRect.top,
+ mTmpRect.right, mTmpRect.bottom);
+ }
+
+ static Rect getWidgetSizeRanges(Launcher launcher, int spanX, int spanY, Rect rect) {
+ if (rect == null) {
+ rect = new Rect();
+ }
Rect landMetrics = Workspace.getCellLayoutMetrics(launcher, CellLayout.LANDSCAPE);
Rect portMetrics = Workspace.getCellLayoutMetrics(launcher, CellLayout.PORTRAIT);
final float density = launcher.getResources().getDisplayMetrics().density;
@@ -355,8 +367,8 @@
heightGap = portMetrics.bottom;
int portWidth = (int) ((spanX * cellWidth + (spanX - 1) * widthGap) / density);
int portHeight = (int) ((spanY * cellHeight + (spanY - 1) * heightGap) / density);
-
- widgetView.updateAppWidgetSize(null, portWidth, landHeight, landWidth, portHeight);
+ rect.set(portWidth, landHeight, landWidth, portHeight);
+ return rect;
}
/**
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 48f5623..817eb41 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -43,6 +43,8 @@
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
+import android.os.Build;
+import android.os.Bundle;
import android.os.Process;
import android.util.AttributeSet;
import android.util.Log;
@@ -309,6 +311,8 @@
private ArrayList<Runnable> mDeferredPrepareLoadWidgetPreviewsTasks =
new ArrayList<Runnable>();
+ private Rect mTmpRect = new Rect();
+
// Used for drawing shortcut previews
BitmapCache mCachedShortcutPreviewBitmap = new BitmapCache();
PaintCache mCachedShortcutPreviewPaint = new PaintCache();
@@ -368,14 +372,6 @@
setDragSlopeThreshold(r.getInteger(R.integer.config_appsCustomizeDragSlopeThreshold)/100f);
}
- @Override
- protected void onUnhandledTap(MotionEvent ev) {
- if (LauncherApplication.isScreenLarge()) {
- // Dismiss AppsCustomize if we tap
- mLauncher.showWorkspace(true);
- }
- }
-
/** Returns the item index of the center item on this page so that we can restore to this
* item index when we rotate. */
private int getMiddleComponentIndexOnCurrentPage() {
@@ -617,6 +613,19 @@
mLauncher.getWorkspace().beginDragShared(v, this);
}
+ Bundle getDefaultOptionsForWidget(Launcher launcher, PendingAddWidgetInfo info) {
+ Bundle options = null;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ AppWidgetResizeFrame.getWidgetSizeRanges(mLauncher, info.spanX, info.spanY, mTmpRect);
+ options = new Bundle();
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, mTmpRect.left);
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, mTmpRect.top);
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, mTmpRect.right);
+ options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, mTmpRect.bottom);
+ }
+ return options;
+ }
+
private void preloadWidget(final PendingAddWidgetInfo info) {
final AppWidgetProviderInfo pInfo = info.info;
if (pInfo.configure != null) {
@@ -628,9 +637,20 @@
@Override
public void run() {
mWidgetLoadingId = mLauncher.getAppWidgetHost().allocateAppWidgetId();
- if (AppWidgetManager.getInstance(mLauncher)
- .bindAppWidgetIdIfAllowed(mWidgetLoadingId, info.componentName)) {
- mWidgetCleanupState = WIDGET_BOUND;
+
+ Bundle options = getDefaultOptionsForWidget(mLauncher, info);
+ // Options will be null for platforms with JB or lower, so this serves as an
+ // SDK level check.
+ if (options == null) {
+ if (AppWidgetManager.getInstance(mLauncher).bindAppWidgetIdIfAllowed(
+ mWidgetLoadingId, info.componentName)) {
+ mWidgetCleanupState = WIDGET_BOUND;
+ }
+ } else {
+ if (AppWidgetManager.getInstance(mLauncher).bindAppWidgetIdIfAllowed(
+ mWidgetLoadingId, info.componentName, options)) {
+ mWidgetCleanupState = WIDGET_BOUND;
+ }
}
}
};
@@ -1691,7 +1711,7 @@
public void setApps(ArrayList<ApplicationInfo> list) {
mApps = list;
- Collections.sort(mApps, LauncherModel.APP_NAME_COMPARATOR);
+ Collections.sort(mApps, LauncherModel.getAppNameComparator());
updatePageCounts();
invalidateOnDataChange();
}
@@ -1700,7 +1720,7 @@
int count = list.size();
for (int i = 0; i < count; ++i) {
ApplicationInfo info = list.get(i);
- int index = Collections.binarySearch(mApps, info, LauncherModel.APP_NAME_COMPARATOR);
+ int index = Collections.binarySearch(mApps, info, LauncherModel.getAppNameComparator());
if (index < 0) {
mApps.add(-(index + 1), info);
}
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 896c192..8c73c29 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -55,6 +55,7 @@
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
@@ -1190,7 +1191,9 @@
launcherInfo.hostView.setTag(launcherInfo);
launcherInfo.hostView.setVisibility(View.VISIBLE);
- launcherInfo.notifyWidgetSizeChanged(this);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ launcherInfo.notifyWidgetSizeChanged(this);
+ }
mWorkspace.addInScreen(launcherInfo.hostView, container, screen, cellXY[0], cellXY[1],
launcherInfo.spanX, launcherInfo.spanY, isWorkspaceLocked());
diff --git a/src/com/android/launcher2/LauncherAppWidgetInfo.java b/src/com/android/launcher2/LauncherAppWidgetInfo.java
index f001b2b..5c8fb38 100644
--- a/src/com/android/launcher2/LauncherAppWidgetInfo.java
+++ b/src/com/android/launcher2/LauncherAppWidgetInfo.java
@@ -19,6 +19,7 @@
import android.appwidget.AppWidgetHostView;
import android.content.ComponentName;
import android.content.ContentValues;
+import android.os.Build;
/**
* Represents a widget (either instantiated or about to be) in the Launcher.
@@ -72,7 +73,8 @@
* done so already (only really for default workspace widgets).
*/
void onBindAppWidget(Launcher launcher) {
- if (!mHasNotifiedInitialWidgetSizeChanged) {
+ if (!mHasNotifiedInitialWidgetSizeChanged &&
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
notifyWidgetSizeChanged(launcher);
}
}
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 909cc79..11beda8 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -2437,17 +2437,18 @@
return folderInfo;
}
- private static final Collator sCollator = Collator.getInstance();
- public static final Comparator<ApplicationInfo> APP_NAME_COMPARATOR
- = new Comparator<ApplicationInfo>() {
- public final int compare(ApplicationInfo a, ApplicationInfo b) {
- int result = sCollator.compare(a.title.toString(), b.title.toString());
- if (result == 0) {
- result = a.componentName.compareTo(b.componentName);
+ public static final Comparator<ApplicationInfo> getAppNameComparator() {
+ final Collator collator = Collator.getInstance();
+ return new Comparator<ApplicationInfo>() {
+ public final int compare(ApplicationInfo a, ApplicationInfo b) {
+ int result = collator.compare(a.title.toString(), b.title.toString());
+ if (result == 0) {
+ result = a.componentName.compareTo(b.componentName);
+ }
+ return result;
}
- return result;
- }
- };
+ };
+ }
public static final Comparator<ApplicationInfo> APP_INSTALL_TIME_COMPARATOR
= new Comparator<ApplicationInfo>() {
public final int compare(ApplicationInfo a, ApplicationInfo b) {
@@ -2456,12 +2457,14 @@
return 0;
}
};
- public static final Comparator<AppWidgetProviderInfo> WIDGET_NAME_COMPARATOR
- = new Comparator<AppWidgetProviderInfo>() {
- public final int compare(AppWidgetProviderInfo a, AppWidgetProviderInfo b) {
- return sCollator.compare(a.label.toString(), b.label.toString());
- }
- };
+ public static final Comparator<AppWidgetProviderInfo> getWidgetNameComparator() {
+ final Collator collator = Collator.getInstance();
+ return new Comparator<AppWidgetProviderInfo>() {
+ public final int compare(AppWidgetProviderInfo a, AppWidgetProviderInfo b) {
+ return collator.compare(a.label.toString(), b.label.toString());
+ }
+ };
+ }
static ComponentName getComponentNameFromResolveInfo(ResolveInfo info) {
if (info.activityInfo != null) {
return new ComponentName(info.activityInfo.packageName, info.activityInfo.name);
@@ -2470,15 +2473,18 @@
}
}
public static class ShortcutNameComparator implements Comparator<ResolveInfo> {
+ private Collator mCollator;
private PackageManager mPackageManager;
private HashMap<Object, CharSequence> mLabelCache;
ShortcutNameComparator(PackageManager pm) {
mPackageManager = pm;
mLabelCache = new HashMap<Object, CharSequence>();
+ mCollator = Collator.getInstance();
}
ShortcutNameComparator(PackageManager pm, HashMap<Object, CharSequence> labelCache) {
mPackageManager = pm;
mLabelCache = labelCache;
+ mCollator = Collator.getInstance();
}
public final int compare(ResolveInfo a, ResolveInfo b) {
CharSequence labelA, labelB;
@@ -2498,15 +2504,17 @@
mLabelCache.put(keyB, labelB);
}
- return sCollator.compare(labelA, labelB);
+ return mCollator.compare(labelA, labelB);
}
};
public static class WidgetAndShortcutNameComparator implements Comparator<Object> {
+ private Collator mCollator;
private PackageManager mPackageManager;
private HashMap<Object, String> mLabelCache;
WidgetAndShortcutNameComparator(PackageManager pm) {
mPackageManager = pm;
mLabelCache = new HashMap<Object, String>();
+ mCollator = Collator.getInstance();
}
public final int compare(Object a, Object b) {
String labelA, labelB;
@@ -2526,7 +2534,7 @@
((ResolveInfo) b).loadLabel(mPackageManager).toString();
mLabelCache.put(b, labelB);
}
- return sCollator.compare(labelA, labelB);
+ return mCollator.compare(labelA, labelB);
}
};
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 897e95a..7d17249 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -39,6 +39,7 @@
import android.graphics.Rect;
import android.graphics.Region.Op;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.os.IBinder;
import android.os.Parcelable;
import android.util.AttributeSet;
@@ -2228,7 +2229,12 @@
mTargetCell, resultSpan, CellLayout.MODE_ON_DROP);
boolean foundCell = mTargetCell[0] >= 0 && mTargetCell[1] >= 0;
- if (foundCell && (resultSpan[0] != item.spanX || resultSpan[1] != item.spanY)) {
+
+ // if the widget resizes on drop, or the sdk level is less than JBMR1, then we
+ // need to update the size.
+ if (foundCell && (cell instanceof AppWidgetHostView) &&
+ (resultSpan[0] != item.spanX || resultSpan[1] != item.spanY ||
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)) {
resizeOnDrop = true;
item.spanX = resultSpan[0];
item.spanY = resultSpan[1];
@@ -3037,6 +3043,7 @@
}
final ItemInfo item = (ItemInfo) d.dragInfo;
+ boolean updateWidgetSize = Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN;
if (findNearestVacantCell) {
int minSpanX = item.spanX;
int minSpanY = item.spanY;
@@ -3048,6 +3055,10 @@
mTargetCell = cellLayout.createArea((int) mDragViewVisualCenter[0],
(int) mDragViewVisualCenter[1], minSpanX, minSpanY, info.spanX, info.spanY,
null, mTargetCell, resultSpan, CellLayout.MODE_ON_DROP_EXTERNAL);
+
+ if (resultSpan[0] != item.spanX || resultSpan[1] != item.spanY) {
+ updateWidgetSize = true;
+ }
item.spanX = resultSpan[0];
item.spanY = resultSpan[1];
}
@@ -3077,6 +3088,13 @@
};
View finalView = pendingInfo.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET
? ((PendingAddWidgetInfo) pendingInfo).boundWidget : null;
+
+ if (finalView instanceof AppWidgetHostView && updateWidgetSize) {
+ AppWidgetHostView awhv = (AppWidgetHostView) finalView;
+ AppWidgetResizeFrame.updateWidgetSizeRanges(awhv, mLauncher, item.spanX,
+ item.spanY);
+ }
+
int animationStyle = ANIMATE_INTO_POSITION_AND_DISAPPEAR;
if (pendingInfo.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET &&
((PendingAddWidgetInfo) pendingInfo).info.configure != null) {
@@ -3697,13 +3715,12 @@
}
// Clean up new-apps animation list
- final LauncherModel model = mLauncher.getModel();
final Context context = getContext();
post(new Runnable() {
@Override
public void run() {
String spKey = LauncherApplication.getSharedPreferencesKey();
- SharedPreferences sp = getContext().getSharedPreferences(spKey,
+ SharedPreferences sp = context.getSharedPreferences(spKey,
Context.MODE_PRIVATE);
Set<String> newApps = sp.getStringSet(InstallShortcutReceiver.NEW_APPS_LIST_KEY,
null);
@@ -3722,10 +3739,11 @@
// It is possible that we've queued an item to be loaded, yet it has
// not been added to the workspace, so remove those items as well.
- ArrayList<ItemInfo> shortcuts =
- model.getWorkspaceShortcutItemInfosWithIntent(intent);
+ ArrayList<ItemInfo> shortcuts;
+ shortcuts = LauncherModel.getWorkspaceShortcutItemInfosWithIntent(
+ intent);
for (ItemInfo info : shortcuts) {
- model.deleteItemFromDatabase(context, info);
+ LauncherModel.deleteItemFromDatabase(context, info);
}
} catch (URISyntaxException e) {}
}