diff options
author | Hyunyoung Song <hyunyoungs@google.com> | 2015-04-08 19:01:34 -0700 |
---|---|---|
committer | Hyunyoung Song <hyunyoungs@google.com> | 2015-04-08 19:01:34 -0700 |
commit | 3f471440a8b6b71d4c15501a96befd3b715c9e8f (patch) | |
tree | d5da39d089eed5096a4b10204153d5d6bb798624 /src/com/android/launcher3/widget/WidgetsModel.java | |
parent | 85e3d4cc5ea4e554639868069f4fd409731f7bbb (diff) | |
download | android_packages_apps_Trebuchet-3f471440a8b6b71d4c15501a96befd3b715c9e8f.tar.gz android_packages_apps_Trebuchet-3f471440a8b6b71d4c15501a96befd3b715c9e8f.tar.bz2 android_packages_apps_Trebuchet-3f471440a8b6b71d4c15501a96befd3b715c9e8f.zip |
WidgetTray revamp work
- RecyclerView is rendering
- Animation is connected
- Drag and drop is now handled
- UI tweaking: background, margins, more to come.
- Flicker and preview not loading issue:
fixed height for the horizontal scroll view.
- Shortcuts are added
- Widget Preview loading should support shortPress for drop
- UI tweaks left: overlay of arrow when there are more items to scroll
- icons are added in the section header
- Sorting of widget sections and widget horizontal list
- Adding all the padding constants to dimen.xml file
- RecyclerView should only support one view type
For items to be addressed in follow up patches OR CLs,
TODO is added to the comment.
b/19897708
Change-Id: Ibfc4da1696a23d20bada93db46e126706eb13cdc
Diffstat (limited to 'src/com/android/launcher3/widget/WidgetsModel.java')
-rw-r--r-- | src/com/android/launcher3/widget/WidgetsModel.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/com/android/launcher3/widget/WidgetsModel.java b/src/com/android/launcher3/widget/WidgetsModel.java new file mode 100644 index 000000000..c400d6366 --- /dev/null +++ b/src/com/android/launcher3/widget/WidgetsModel.java @@ -0,0 +1,136 @@ + +package com.android.launcher3.widget; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.support.v7.widget.RecyclerView; +import android.util.Log; + +import com.android.launcher3.IconCache; +import com.android.launcher3.LauncherAppState; +import com.android.launcher3.LauncherAppWidgetProviderInfo; +import com.android.launcher3.LauncherModel.WidgetAndShortcutNameComparator; +import com.android.launcher3.compat.UserHandleCompat; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Widgets data model that is used by the adapters of the widget views and controllers. + * + * <p> The widgets and shortcuts are organized using package name as its index. + */ +public class WidgetsModel { + + private static final String TAG = "WidgetsModel"; + private static final boolean DEBUG = false; + + /* List of packages that is tracked by this model. */ + private List<String> mPackageNames = new ArrayList<>(); + + private Map<String, PackageItemInfo> mPackageItemInfoList = new HashMap<>(); + + /* Map of widgets and shortcuts that are tracked per package. */ + private Map<String, ArrayList<Object>> mWidgetsList = new HashMap<>(); + + /* Notifies the adapter when data changes. */ + private RecyclerView.Adapter mAdapter; + + private Comparator mWidgetAndShortcutNameComparator; + + private IconCache mIconCache; + + public WidgetsModel(Context context, RecyclerView.Adapter adapter) { + mAdapter = adapter; + mWidgetAndShortcutNameComparator = new WidgetAndShortcutNameComparator(context); + mIconCache = LauncherAppState.getInstance().getIconCache(); + } + + // Access methods that may be deleted if the private fields are made package-private. + public int getPackageSize() { + return mPackageNames.size(); + } + + // Access methods that may be deleted if the private fields are made package-private. + public String getPackageName(int pos) { + return mPackageNames.get(pos); + } + + public PackageItemInfo getPackageItemInfo(String packageName) { + return mPackageItemInfoList.get(packageName); + } + + public List<Object> getSortedWidgets(String packageName) { + return mWidgetsList.get(packageName); + } + + public void addWidgetsAndShortcuts(ArrayList<Object> widgetsShortcuts, PackageManager pm) { + if (DEBUG) { + Log.d(TAG, "addWidgetsAndShortcuts, widgetsShortcuts#=" + widgetsShortcuts.size()); + } + + // clear the lists. + mPackageNames.clear(); + mWidgetsList.clear(); + + // add and update. + for (Object o: widgetsShortcuts) { + String packageName = ""; + if (o instanceof LauncherAppWidgetProviderInfo) { + LauncherAppWidgetProviderInfo widgetInfo = (LauncherAppWidgetProviderInfo) o; + packageName = widgetInfo.provider.getPackageName(); + } else if (o instanceof ResolveInfo) { + ResolveInfo resolveInfo = (ResolveInfo) o; + packageName = resolveInfo.activityInfo.packageName; + } else { + Log.e(TAG, String.format("addWidgetsAndShortcuts, nothing added for class=%s", + o.getClass().toString())); + + } + + ArrayList<Object> widgetsShortcutsList = mWidgetsList.get(packageName); + if (widgetsShortcutsList != null) { + widgetsShortcutsList.add(o); + } else { + widgetsShortcutsList = new ArrayList<Object>(); + widgetsShortcutsList.add(o); + mWidgetsList.put(packageName, widgetsShortcutsList); + mPackageNames.add(packageName); + } + } + for (String packageName: mPackageNames) { + PackageItemInfo pInfo = mPackageItemInfoList.get(packageName); + if (pInfo == null) { + pInfo = new PackageItemInfo(); + mIconCache.getTitleAndIconForApp(packageName, UserHandleCompat.myUserHandle(), + true /* useLowResIcon */, pInfo); + mPackageItemInfoList.put(packageName, pInfo); + } + } + + // sort. + sortPackageList(); + for (String packageName: mPackageNames) { + Collections.sort(mWidgetsList.get(packageName), mWidgetAndShortcutNameComparator); + } + + // notify. + mAdapter.notifyDataSetChanged(); + } + + private void sortPackageList() { + Collections.sort(mPackageNames, new Comparator<String>() { + @Override + public int compare(String lhs, String rhs) { + String lhsTitle = mPackageItemInfoList.get(lhs).title.toString(); + String rhsTitle = mPackageItemInfoList.get(rhs).title.toString(); + return lhsTitle.compareTo(rhsTitle); + } + }); + } +} |