From f944e7e9eead78c7efe1823c8839b2a10d92fbb3 Mon Sep 17 00:00:00 2001 From: Raj Yengisetty Date: Thu, 26 Mar 2015 09:28:56 -0700 Subject: ProtectedApps: map items without componentNames by position Repro: - Add a contact widget to a folder - Open the hidden apps fragment - Attempt to remove an entry from the fragment - Observe: Force close Change-Id: I3ca2c62283af5232534b766d7579413c060a5403 (cherry picked from commit f963b11485ceef70bbce7a9a4b98415ac2672b5b) (cherry picked from commit 660761014f5ab0d6ebada8a1579db4da910643fe) (cherry picked from commit 8055e99967a786545f55ea4b3f4351583ee7f7b1) --- src/com/android/launcher3/Folder.java | 12 ++++++++++++ src/com/android/launcher3/HiddenFolderFragment.java | 21 ++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index ff8f347f5..3319b74c7 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -1490,6 +1490,18 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList return null; } + public ShortcutInfo getShortcutForPosition(int position) { + if (position < 0 || position >= mItemsInReadingOrder.size()) { + return null; + } + View v = mItemsInReadingOrder.get(position); + Object tag = v.getTag(); + if (tag instanceof ShortcutInfo) { + return (ShortcutInfo) tag; + } + return null; + } + public void getLocationInDragLayer(int[] loc) { mLauncher.getDragLayer().getLocationInDragLayer(this, loc); } diff --git a/src/com/android/launcher3/HiddenFolderFragment.java b/src/com/android/launcher3/HiddenFolderFragment.java index db5e51fb1..7d3835ecc 100644 --- a/src/com/android/launcher3/HiddenFolderFragment.java +++ b/src/com/android/launcher3/HiddenFolderFragment.java @@ -128,16 +128,25 @@ public class HiddenFolderFragment extends Fragment { private ArrayList loadApps(List> items) { ArrayList apps = new ArrayList(); + int pos = 0; for (Pair item : items) { - apps.add(new AppEntry(item.first, item.second)); + apps.add(new AppEntry(item.first, item.second, pos)); + pos++; } return apps; } private void removeComponentFromFolder(AppEntry app) { - mLauncher.mHiddenFolderIcon.getFolderInfo().remove( - mLauncher.mHiddenFolderIcon.getFolder() - .getShortcutForComponent(app.componentName)); + ShortcutInfo info; + if (app.componentName != null) { + info = mLauncher.mHiddenFolderIcon.getFolder() + .getShortcutForComponent(app.componentName); + } else { + // Shortcut does not have componentName, use position since it maps to + // reading order position in the folder + info = mLauncher.mHiddenFolderIcon.getFolder().getShortcutForPosition(app.position); + } + mLauncher.mHiddenFolderIcon.getFolderInfo().remove(info); mAppEntries.remove(app); mAppsAdapter.remove(app); @@ -315,10 +324,12 @@ public class HiddenFolderFragment extends Fragment { private final class AppEntry { public final ComponentName componentName; public final CharSequence title; + public final int position; - public AppEntry(ComponentName component, CharSequence title) { + public AppEntry(ComponentName component, CharSequence title, int position) { this.componentName = component; this.title = title; + this.position = position; } } -- cgit v1.2.3