Merge "Breaking icon update task so that it doesn't block worker thread" into ub-launcher3-burnaby
diff --git a/res/drawable-hdpi/ic_launcher_info_active.png b/res/drawable-hdpi/ic_launcher_info_active.png
deleted file mode 100644
index f7a3b68..0000000
--- a/res/drawable-hdpi/ic_launcher_info_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_remove_active.png b/res/drawable-hdpi/ic_launcher_remove_active.png
deleted file mode 100644
index e53de0d..0000000
--- a/res/drawable-hdpi/ic_launcher_remove_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_uninstall_active.png b/res/drawable-hdpi/ic_launcher_uninstall_active.png
deleted file mode 100644
index 22b97ee..0000000
--- a/res/drawable-hdpi/ic_launcher_uninstall_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_info_active.png b/res/drawable-mdpi/ic_launcher_info_active.png
deleted file mode 100644
index ea71272..0000000
--- a/res/drawable-mdpi/ic_launcher_info_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_remove_active.png b/res/drawable-mdpi/ic_launcher_remove_active.png
deleted file mode 100644
index f36cfdd..0000000
--- a/res/drawable-mdpi/ic_launcher_remove_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_uninstall_active.png b/res/drawable-mdpi/ic_launcher_uninstall_active.png
deleted file mode 100644
index e4ee911..0000000
--- a/res/drawable-mdpi/ic_launcher_uninstall_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher_info_active.png b/res/drawable-xhdpi/ic_launcher_info_active.png
deleted file mode 100644
index b438f9e..0000000
--- a/res/drawable-xhdpi/ic_launcher_info_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher_remove_active.png b/res/drawable-xhdpi/ic_launcher_remove_active.png
deleted file mode 100644
index 14ac79d..0000000
--- a/res/drawable-xhdpi/ic_launcher_remove_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher_uninstall_active.png b/res/drawable-xhdpi/ic_launcher_uninstall_active.png
deleted file mode 100644
index 2c19b32..0000000
--- a/res/drawable-xhdpi/ic_launcher_uninstall_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_launcher_info_active.png b/res/drawable-xxhdpi/ic_launcher_info_active.png
deleted file mode 100644
index d354dd3..0000000
--- a/res/drawable-xxhdpi/ic_launcher_info_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_launcher_remove_active.png b/res/drawable-xxhdpi/ic_launcher_remove_active.png
deleted file mode 100644
index 9df4404..0000000
--- a/res/drawable-xxhdpi/ic_launcher_remove_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_launcher_uninstall_active.png b/res/drawable-xxhdpi/ic_launcher_uninstall_active.png
deleted file mode 100644
index db7d339..0000000
--- a/res/drawable-xxhdpi/ic_launcher_uninstall_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_launcher_info_active.png b/res/drawable-xxxhdpi/ic_launcher_info_active.png
deleted file mode 100644
index 162e23d..0000000
--- a/res/drawable-xxxhdpi/ic_launcher_info_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_launcher_remove_active.png b/res/drawable-xxxhdpi/ic_launcher_remove_active.png
deleted file mode 100644
index c0b8ea2..0000000
--- a/res/drawable-xxxhdpi/ic_launcher_remove_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_launcher_uninstall_active.png b/res/drawable-xxxhdpi/ic_launcher_uninstall_active.png
deleted file mode 100644
index 75896f3..0000000
--- a/res/drawable-xxxhdpi/ic_launcher_uninstall_active.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/info_target_selector.xml b/res/drawable/info_target_selector.xml
deleted file mode 100644
index 51caece..0000000
--- a/res/drawable/info_target_selector.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, 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.
-*/
--->
-
-<transition xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:drawable="@drawable/ic_launcher_info_normal" />
- <item android:drawable="@drawable/ic_launcher_info_active" />
-</transition>
diff --git a/res/drawable/remove_target_selector.xml b/res/drawable/remove_target_selector.xml
deleted file mode 100644
index 9025e8a..0000000
--- a/res/drawable/remove_target_selector.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2007, 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.
-*/
--->
-
-<transition xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:drawable="@drawable/ic_launcher_remove_normal" />
- <item android:drawable="@drawable/ic_launcher_remove_active" />
-</transition>
diff --git a/res/drawable/uninstall_target_selector.xml b/res/drawable/uninstall_target_selector.xml
deleted file mode 100644
index 175cc20..0000000
--- a/res/drawable/uninstall_target_selector.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2007, 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.
-*/
--->
-
-<transition xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:drawable="@drawable/ic_launcher_uninstall_normal" />
- <item android:drawable="@drawable/ic_launcher_uninstall_active" />
-</transition>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 1e89615..a5db2fc 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -20,9 +20,9 @@
<resources>
<!-- The color tints to apply to the text and drag view when hovering
over the delete target or the info target -->
- <color name="delete_target_hover_tint">#DAC1C1C1</color>
- <color name="uninstall_target_hover_tint">#DAF0592B</color>
- <color name="info_target_hover_tint">#DA009688</color>
+ <color name="delete_target_hover_tint">#FFC1C1C1</color>
+ <color name="uninstall_target_hover_tint">#FFF0592B</color>
+ <color name="info_target_hover_tint">#FF009688</color>
<color name="cling_scrim_background">#80000000</color>
<color name="focused_background">#80c6c5c5</color>
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java
index 3b3b9bf..d530009 100644
--- a/src/com/android/launcher3/BubbleTextView.java
+++ b/src/com/android/launcher3/BubbleTextView.java
@@ -38,7 +38,7 @@
import android.widget.TextView;
import com.android.launcher3.IconCache.IconLoadRequest;
-import com.android.launcher3.widget.PackageItemInfo;
+import com.android.launcher3.model.PackageItemInfo;
/**
* TextView that draws a bubble behind the text. We cannot use a LineBackgroundSpan
diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java
index 80b542f..4cd28c0 100644
--- a/src/com/android/launcher3/ButtonDropTarget.java
+++ b/src/com/android/launcher3/ButtonDropTarget.java
@@ -16,14 +16,20 @@
package com.android.launcher3;
+import android.animation.AnimatorSet;
+import android.animation.FloatArrayEvaluator;
import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
import android.graphics.PointF;
import android.graphics.Rect;
-import android.graphics.drawable.TransitionDrawable;
+import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
@@ -55,9 +61,11 @@
protected int mHoverColor = 0;
protected ColorStateList mOriginalTextColor;
- protected TransitionDrawable mDrawable;
+ protected Drawable mDrawable;
- private ObjectAnimator mCurrentColorAnim;
+ private AnimatorSet mCurrentColorAnim;
+ private ColorMatrix mSrcFilter, mDstFilter, mCurrentFilter;
+
public ButtonDropTarget(Context context, AttributeSet attrs) {
this(context, attrs, 0);
@@ -86,8 +94,7 @@
protected void setDrawable(int resId) {
// We do not set the drawable in the xml as that inflates two drawables corresponding to
// drawableLeft and drawableStart.
- mDrawable = (TransitionDrawable) getResources().getDrawable(resId);
- mDrawable.setCrossFadeEnabled(true);
+ mDrawable = getResources().getDrawable(resId);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
setCompoundDrawablesRelativeWithIntrinsicBounds(mDrawable, null, null, null);
@@ -111,10 +118,13 @@
public final void onDragEnter(DragObject d) {
d.dragView.setColor(mHoverColor);
if (Utilities.isLmpOrAbove()) {
- mDrawable.startTransition(DragView.COLOR_CHANGE_DURATION);
animateTextColor(mHoverColor);
} else {
- mDrawable.startTransition(0);
+ if (mCurrentFilter == null) {
+ mCurrentFilter = new ColorMatrix();
+ }
+ DragView.setColorScale(mHoverColor, mCurrentFilter);
+ mDrawable.setColorFilter(new ColorMatrixColorFilter(mCurrentFilter));
setTextColor(mHoverColor);
}
}
@@ -124,12 +134,11 @@
// Do nothing
}
- protected void resetHoverColor() {
+ protected void resetHoverColor() {
if (Utilities.isLmpOrAbove()) {
- mDrawable.reverseTransition(DragView.COLOR_CHANGE_DURATION);
animateTextColor(mOriginalTextColor.getDefaultColor());
} else {
- mDrawable.resetTransition();
+ mDrawable.setColorFilter(null);
setTextColor(mOriginalTextColor);
}
}
@@ -139,8 +148,32 @@
if (mCurrentColorAnim != null) {
mCurrentColorAnim.cancel();
}
- mCurrentColorAnim = ObjectAnimator.ofArgb(this, "textColor", targetColor);
+
+ mCurrentColorAnim = new AnimatorSet();
mCurrentColorAnim.setDuration(DragView.COLOR_CHANGE_DURATION);
+
+ if (mSrcFilter == null) {
+ mSrcFilter = new ColorMatrix();
+ mDstFilter = new ColorMatrix();
+ mCurrentFilter = new ColorMatrix();
+ }
+
+ DragView.setColorScale(getTextColor(), mSrcFilter);
+ DragView.setColorScale(targetColor, mDstFilter);
+ ValueAnimator anim1 = ValueAnimator.ofObject(
+ new FloatArrayEvaluator(mCurrentFilter.getArray()),
+ mSrcFilter.getArray(), mDstFilter.getArray());
+ anim1.addUpdateListener(new AnimatorUpdateListener() {
+
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ mDrawable.setColorFilter(new ColorMatrixColorFilter(mCurrentFilter));
+ invalidate();
+ }
+ });
+
+ mCurrentColorAnim.play(anim1);
+ mCurrentColorAnim.play(ObjectAnimator.ofArgb(this, "textColor", targetColor));
mCurrentColorAnim.start();
}
@@ -155,10 +188,10 @@
}
}
- @Override
+ @Override
public final void onDragStart(DragSource source, Object info, int dragAction) {
mActive = supportsDrop(source, info);
- mDrawable.resetTransition();
+ mDrawable.setColorFilter(null);
if (mCurrentColorAnim != null) {
mCurrentColorAnim.cancel();
mCurrentColorAnim = null;
diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java
index 08186f5..fa6e74f 100644
--- a/src/com/android/launcher3/DeleteDropTarget.java
+++ b/src/com/android/launcher3/DeleteDropTarget.java
@@ -43,7 +43,7 @@
// Get the hover color
mHoverColor = getResources().getColor(R.color.delete_target_hover_tint);
- setDrawable(R.drawable.remove_target_selector);
+ setDrawable(R.drawable.ic_launcher_remove_normal);
}
public static boolean supportsDrop(Object info) {
diff --git a/src/com/android/launcher3/DragView.java b/src/com/android/launcher3/DragView.java
index 120299e..b332338 100644
--- a/src/com/android/launcher3/DragView.java
+++ b/src/com/android/launcher3/DragView.java
@@ -38,7 +38,7 @@
import java.util.Arrays;
public class DragView extends View {
- public static int COLOR_CHANGE_DURATION = 200;
+ public static int COLOR_CHANGE_DURATION = 120;
@Thunk static float sDragAlpha = 1f;
@@ -249,8 +249,7 @@
m1.setSaturation(0);
ColorMatrix m2 = new ColorMatrix();
- m2.setScale(Color.red(color) / 255f, Color.green(color) / 255f,
- Color.blue(color) / 255f, Color.alpha(color) / 255f);
+ setColorScale(color, m2);
m1.postConcat(m2);
if (Utilities.isLmpOrAbove()) {
@@ -355,4 +354,9 @@
mDragLayer.removeView(DragView.this);
}
}
+
+ public static void setColorScale(int color, ColorMatrix target) {
+ target.setScale(Color.red(color) / 255f, Color.green(color) / 255f,
+ Color.blue(color) / 255f, Color.alpha(color) / 255f);
+ }
}
diff --git a/src/com/android/launcher3/FolderInfo.java b/src/com/android/launcher3/FolderInfo.java
index 930f911..aea21c9 100644
--- a/src/com/android/launcher3/FolderInfo.java
+++ b/src/com/android/launcher3/FolderInfo.java
@@ -92,7 +92,7 @@
}
public void setTitle(CharSequence title) {
- this.title = Utilities.trim(title);
+ this.title = title;
for (int i = 0; i < listeners.size(); i++) {
listeners.get(i).onTitleChanged(title);
}
diff --git a/src/com/android/launcher3/IconCache.java b/src/com/android/launcher3/IconCache.java
index ac257b5..8b5f747 100644
--- a/src/com/android/launcher3/IconCache.java
+++ b/src/com/android/launcher3/IconCache.java
@@ -43,9 +43,9 @@
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.UserHandleCompat;
import com.android.launcher3.compat.UserManagerCompat;
+import com.android.launcher3.model.PackageItemInfo;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.Thunk;
-import com.android.launcher3.widget.PackageItemInfo;
import java.util.HashMap;
import java.util.HashSet;
diff --git a/src/com/android/launcher3/InfoDropTarget.java b/src/com/android/launcher3/InfoDropTarget.java
index f3383cc..0f139fa 100644
--- a/src/com/android/launcher3/InfoDropTarget.java
+++ b/src/com/android/launcher3/InfoDropTarget.java
@@ -41,7 +41,7 @@
// Get the hover color
mHoverColor = getResources().getColor(R.color.info_target_hover_tint);
- setDrawable(R.drawable.info_target_selector);
+ setDrawable(R.drawable.ic_launcher_info_normal);
}
public static void startDetailsActivityForInfo(Object info, Launcher launcher) {
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 7b7b617..59ca978 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -102,6 +102,7 @@
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.compat.UserHandleCompat;
import com.android.launcher3.compat.UserManagerCompat;
+import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.util.LongArrayMap;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.widget.PendingAddWidgetInfo;
@@ -268,8 +269,9 @@
// Main container view for the all apps screen.
@Thunk AppsContainerView mAppsView;
- // Main container view for the widget tray screen.
- private WidgetsContainerView mWidgetsView;
+ // Main container view and the model for the widget tray screen.
+ @Thunk WidgetsContainerView mWidgetsView;
+ @Thunk WidgetsModel mWidgetsModel;
private boolean mAutoAdvanceRunning = false;
private AppWidgetHostView mQsb;
@@ -4365,23 +4367,22 @@
}
}
- @Thunk ArrayList<Object> mWidgetsAndShortcuts;
private Runnable mBindPackagesUpdatedRunnable = new Runnable() {
public void run() {
- bindAllPackages(mWidgetsAndShortcuts);
+ bindAllPackages(mWidgetsModel);
}
};
@Override
- public void bindAllPackages(final ArrayList<Object> widgetsAndShortcuts) {
+ public void bindAllPackages(final WidgetsModel model) {
if (waitUntilResume(mBindPackagesUpdatedRunnable, true)) {
- mWidgetsAndShortcuts = widgetsAndShortcuts;
+ mWidgetsModel = model;
return;
}
- if (mWidgetsView != null && widgetsAndShortcuts != null) {
- mWidgetsView.addWidgets(widgetsAndShortcuts, getPackageManager());
- mWidgetsAndShortcuts = null;
+ if (mWidgetsView != null && model != null) {
+ mWidgetsView.addWidgets(model);
+ mWidgetsModel = null;
}
}
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 9deee43..d994dc7 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -58,6 +58,7 @@
import com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo;
import com.android.launcher3.compat.UserHandleCompat;
import com.android.launcher3.compat.UserManagerCompat;
+import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.LongArrayMap;
import com.android.launcher3.util.ManagedProfileHeuristic;
@@ -203,7 +204,7 @@
public void bindRestoreItemsChange(HashSet<ItemInfo> updates);
public void bindComponentsRemoved(ArrayList<String> packageNames,
ArrayList<AppInfo> appInfos, UserHandleCompat user, int reason);
- public void bindAllPackages(ArrayList<Object> widgetsAndShortcuts);
+ public void bindAllPackages(WidgetsModel model);
public void bindSearchablesChanged();
public boolean isAllAppsButtonRank(int rank);
public void onPageBoundSynchronously(int page);
@@ -968,7 +969,8 @@
break;
}
- folderInfo.title = Utilities.trim(c.getString(titleIndex));
+ // Do not trim the folder label, as is was set by the user.
+ folderInfo.title = c.getString(titleIndex);
folderInfo.id = id;
folderInfo.container = c.getInt(containerIndex);
folderInfo.screenId = c.getInt(screenIndex);
@@ -2110,7 +2112,8 @@
id = c.getLong(idIndex);
FolderInfo folderInfo = findOrMakeFolder(sBgFolders, id);
- folderInfo.title = Utilities.trim(c.getString(titleIndex));
+ // Do not trim the folder label, as is was set by the user.
+ folderInfo.title = c.getString(titleIndex);
folderInfo.id = id;
container = c.getInt(containerIndex);
folderInfo.container = container;
@@ -3334,18 +3337,19 @@
runOnWorkerThread(new Runnable(){
@Override
public void run() {
- final ArrayList<Object> list = getWidgetsAndShortcuts(context, refresh);
+ final WidgetsModel model = createWidgetsModel(context, refresh);
mHandler.post(new Runnable() {
@Override
public void run() {
Callbacks cb = getCallback();
if (callbacks == cb && cb != null) {
- callbacks.bindAllPackages(list);
+ callbacks.bindAllPackages(model);
}
}
});
// update the Widget entries inside DB on the worker thread.
- LauncherAppState.getInstance().getWidgetCache().removeObsoletePreviews(list);
+ LauncherAppState.getInstance().getWidgetCache().removeObsoletePreviews(
+ model.getRawList());
}
});
}
@@ -3355,13 +3359,15 @@
*
* @see #loadAndBindWidgetsAndShortcuts
*/
- private ArrayList<Object> getWidgetsAndShortcuts(Context context, boolean refresh) {
+ private WidgetsModel createWidgetsModel(Context context, boolean refresh) {
PackageManager packageManager = context.getPackageManager();
final ArrayList<Object> widgetsAndShortcuts = new ArrayList<Object>();
widgetsAndShortcuts.addAll(getWidgetProviders(context, refresh));
Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
widgetsAndShortcuts.addAll(packageManager.queryIntentActivities(shortcutsIntent, 0));
- return widgetsAndShortcuts;
+ WidgetsModel model = new WidgetsModel(context);
+ model.addWidgetsAndShortcuts(widgetsAndShortcuts);
+ return model;
}
@Thunk static boolean isPackageDisabled(Context context, String packageName,
diff --git a/src/com/android/launcher3/UninstallDropTarget.java b/src/com/android/launcher3/UninstallDropTarget.java
index 0fc8f32..4199390 100644
--- a/src/com/android/launcher3/UninstallDropTarget.java
+++ b/src/com/android/launcher3/UninstallDropTarget.java
@@ -28,7 +28,7 @@
// Get the hover color
mHoverColor = getResources().getColor(R.color.uninstall_target_hover_tint);
- setDrawable(R.drawable.uninstall_target_selector);
+ setDrawable(R.drawable.ic_launcher_uninstall_normal);
}
@Override
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index 6734fdc..1f8a6f2 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -44,6 +44,7 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.PaintDrawable;
import android.os.Build;
+import android.os.Process;
import android.util.Log;
import android.util.Pair;
import android.util.SparseArray;
@@ -57,6 +58,8 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import junit.framework.Assert;
+
/**
* Various utilities shared amongst the Launcher's classes.
*/
@@ -641,4 +644,10 @@
return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) &&
(res.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL);
}
+
+ public static void assertWorkerThread() {
+ if (LauncherAppState.isDogfoodBuild()) {
+ Assert.assertTrue(LauncherModel.sWorkerThread.getThreadId() == Process.myTid());
+ }
+ }
}
diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java
index bbcdaae..5ee1f26 100644
--- a/src/com/android/launcher3/WidgetPreviewLoader.java
+++ b/src/com/android/launcher3/WidgetPreviewLoader.java
@@ -206,8 +206,7 @@
* This ensures that we remove entries for packages which changed while the launcher was dead.
*/
public void removeObsoletePreviews(ArrayList<Object> list) {
- // This method should always be called from the worker thread.
- Assert.assertTrue(LauncherModel.sWorkerThread.getThreadId() == Process.myTid());
+ Utilities.assertWorkerThread();
LongSparseArray<UserHandleCompat> userIdCache = new LongSparseArray<>();
LongSparseArray<HashSet<String>> validPackages = new LongSparseArray<>();
diff --git a/src/com/android/launcher3/widget/PackageItemInfo.java b/src/com/android/launcher3/model/PackageItemInfo.java
similarity index 97%
rename from src/com/android/launcher3/widget/PackageItemInfo.java
rename to src/com/android/launcher3/model/PackageItemInfo.java
index 8f45a77..0f0134a 100644
--- a/src/com/android/launcher3/widget/PackageItemInfo.java
+++ b/src/com/android/launcher3/model/PackageItemInfo.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.launcher3.widget;
+package com.android.launcher3.model;
import android.content.ComponentName;
import android.graphics.Bitmap;
diff --git a/src/com/android/launcher3/widget/WidgetsModel.java b/src/com/android/launcher3/model/WidgetsModel.java
similarity index 81%
rename from src/com/android/launcher3/widget/WidgetsModel.java
rename to src/com/android/launcher3/model/WidgetsModel.java
index 5a920e8..b72b981 100644
--- a/src/com/android/launcher3/widget/WidgetsModel.java
+++ b/src/com/android/launcher3/model/WidgetsModel.java
@@ -1,18 +1,19 @@
-package com.android.launcher3.widget;
+package com.android.launcher3.model;
import android.content.Context;
-import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.support.v7.widget.RecyclerView;
+import android.os.Handler;
+import android.os.Process;
import android.util.Log;
import com.android.launcher3.IconCache;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
+
+import com.android.launcher3.LauncherModel;
+import com.android.launcher3.Utilities;
import com.android.launcher3.compat.UserHandleCompat;
-import com.android.launcher3.model.AppNameComparator;
-import com.android.launcher3.model.WidgetsAndShortcutNameComparator;
import java.util.ArrayList;
import java.util.Collections;
@@ -37,19 +38,19 @@
/* Map of widgets and shortcuts that are tracked per package. */
private Map<PackageItemInfo, ArrayList<Object>> mWidgetsList = new HashMap<>();
- /* Notifies the adapter when data changes. */
- private RecyclerView.Adapter mAdapter;
+ private ArrayList<Object> mRawList;
- private Comparator mWidgetAndShortcutNameComparator;
- private Comparator mAppNameComparator;
+ private final Comparator mWidgetAndShortcutNameComparator;
+ private final Comparator mAppNameComparator;
- private IconCache mIconCache;
+ private final IconCache mIconCache;
+ private final Handler mWorkerHandler;
- public WidgetsModel(Context context, RecyclerView.Adapter adapter) {
- mAdapter = adapter;
+ public WidgetsModel(Context context) {
mWidgetAndShortcutNameComparator = new WidgetsAndShortcutNameComparator(context);
mAppNameComparator = (new AppNameComparator(context)).getAppInfoComparator();
mIconCache = LauncherAppState.getInstance().getIconCache();
+ mWorkerHandler = new Handler(LauncherModel.getWorkerLooper());
}
// Access methods that may be deleted if the private fields are made package-private.
@@ -66,9 +67,15 @@
return mWidgetsList.get(mPackageItemInfos.get(pos));
}
- public void addWidgetsAndShortcuts(ArrayList<Object> widgetsShortcuts, PackageManager pm) {
+ public ArrayList<Object> getRawList() {
+ return mRawList;
+ }
+
+ public void addWidgetsAndShortcuts(ArrayList<Object> rawWidgetsShortcuts) {
+ Utilities.assertWorkerThread();
+ mRawList = rawWidgetsShortcuts;
if (DEBUG) {
- Log.d(TAG, "addWidgetsAndShortcuts, widgetsShortcuts#=" + widgetsShortcuts.size());
+ Log.d(TAG, "addWidgetsAndShortcuts, widgetsShortcuts#=" + rawWidgetsShortcuts.size());
}
// Temporary list for {@link PackageItemInfos} to avoid having to go through
@@ -80,7 +87,7 @@
mPackageItemInfos.clear();
// add and update.
- for (Object o: widgetsShortcuts) {
+ for (Object o: rawWidgetsShortcuts) {
String packageName = "";
if (o instanceof LauncherAppWidgetProviderInfo) {
LauncherAppWidgetProviderInfo widgetInfo = (LauncherAppWidgetProviderInfo) o;
@@ -100,10 +107,9 @@
} else {
widgetsShortcutsList = new ArrayList<Object>();
widgetsShortcutsList.add(o);
-
pInfo = new PackageItemInfo(packageName);
mIconCache.getTitleAndIconForApp(packageName, UserHandleCompat.myUserHandle(),
- true /* useLowResIcon */, pInfo);
+ true /* userLowResIcon */, pInfo);
mWidgetsList.put(pInfo, widgetsShortcutsList);
tmpPackageItemInfos.put(packageName, pInfo);
mPackageItemInfos.add(pInfo);
@@ -115,8 +121,5 @@
for (PackageItemInfo p: mPackageItemInfos) {
Collections.sort(mWidgetsList.get(p), mWidgetAndShortcutNameComparator);
}
-
- // notify.
- mAdapter.notifyDataSetChanged();
}
}
\ No newline at end of file
diff --git a/src/com/android/launcher3/widget/WidgetsContainerView.java b/src/com/android/launcher3/widget/WidgetsContainerView.java
index 7a7895f..5a879fa 100644
--- a/src/com/android/launcher3/widget/WidgetsContainerView.java
+++ b/src/com/android/launcher3/widget/WidgetsContainerView.java
@@ -17,7 +17,6 @@
package com.android.launcher3.widget;
import android.content.Context;
-import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
@@ -36,6 +35,7 @@
import com.android.launcher3.DragController;
import com.android.launcher3.DragSource;
import com.android.launcher3.DropTarget.DragObject;
+import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.Folder;
import com.android.launcher3.IconCache;
import com.android.launcher3.ItemInfo;
@@ -47,8 +47,6 @@
import com.android.launcher3.WidgetPreviewLoader;
import com.android.launcher3.Workspace;
-import java.util.ArrayList;
-
/**
* The widgets list view container.
*/
@@ -68,9 +66,6 @@
private DragController mDragController;
private IconCache mIconCache;
- /* Data model for the widget */
- private WidgetsModel mWidgets;
-
/* Recycler view related member variables */
private RecyclerView mView;
private WidgetsListAdapter mAdapter;
@@ -98,8 +93,6 @@
mDragController = mLauncher.getDragController();
mWidgetHostViewLoader = new WidgetHostViewLoader(mLauncher);
mAdapter = new WidgetsListAdapter(context, this, this, mLauncher);
- mWidgets = new WidgetsModel(context, mAdapter);
- mAdapter.setWidgetsModel(mWidgets);
mIconCache = (LauncherAppState.getInstance()).getIconCache();
if (DEBUG) {
@@ -109,10 +102,6 @@
@Override
protected void onFinishInflate() {
- if (DEBUG) {
- Log.d(TAG, String.format("onFinishInflate [widgets size=%d]",
- mWidgets.getPackageSize()));
- }
mView = (RecyclerView) findViewById(R.id.widgets_list_view);
mView.setAdapter(mAdapter);
@@ -145,10 +134,6 @@
public void scrollToTop() {
mView.scrollToPosition(0);
- if (DEBUG) {
- Log.d(TAG, String.format("scrollToTop, [widgets size=%d]",
- mWidgets.getPackageSize()));
- }
}
//
@@ -374,8 +359,9 @@
/**
* Initialize the widget data model.
*/
- public void addWidgets(ArrayList<Object> widgetsShortcuts, PackageManager pm) {
- mWidgets.addWidgetsAndShortcuts(widgetsShortcuts, pm);
+ public void addWidgets(WidgetsModel model) {
+ mAdapter.setWidgetsModel(model);
+ mAdapter.notifyDataSetChanged();
}
private WidgetPreviewLoader getWidgetPreviewLoader() {
diff --git a/src/com/android/launcher3/widget/WidgetsListAdapter.java b/src/com/android/launcher3/widget/WidgetsListAdapter.java
index 3916c00..918ec1b 100644
--- a/src/com/android/launcher3/widget/WidgetsListAdapter.java
+++ b/src/com/android/launcher3/widget/WidgetsListAdapter.java
@@ -38,6 +38,8 @@
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.R;
import com.android.launcher3.WidgetPreviewLoader;
+import com.android.launcher3.model.PackageItemInfo;
+import com.android.launcher3.model.WidgetsModel;
import java.util.List;