summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/FolderInfo.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-05-16 16:16:14 -0700
committerSunny Goyal <sunnygoyal@google.com>2016-05-17 12:44:15 -0700
commite48644a6cc3024399ee2c9509d42ef6c2770ef61 (patch)
tree1ce1304b4f152c9ce0c809d1bc6cf7095cd7f2b6 /src/com/android/launcher3/FolderInfo.java
parent840e1b3a82a1c8dd35d4d16fcf8673fe8a3ca965 (diff)
downloadandroid_packages_apps_Trebuchet-e48644a6cc3024399ee2c9509d42ef6c2770ef61.tar.gz
android_packages_apps_Trebuchet-e48644a6cc3024399ee2c9509d42ef6c2770ef61.tar.bz2
android_packages_apps_Trebuchet-e48644a6cc3024399ee2c9509d42ef6c2770ef61.zip
Wrapping folderLisners with weak reference, and storing it as an array
Storing as an array allows the listeners to be overriten on next bind. These changes remove the need to unbind the item Bug: 28740269 Change-Id: Ibbe4b760d64784fbe3075d18e2b946b366d631c5
Diffstat (limited to 'src/com/android/launcher3/FolderInfo.java')
-rw-r--r--src/com/android/launcher3/FolderInfo.java51
1 files changed, 24 insertions, 27 deletions
diff --git a/src/com/android/launcher3/FolderInfo.java b/src/com/android/launcher3/FolderInfo.java
index 6c9d969a3..0dfe525b7 100644
--- a/src/com/android/launcher3/FolderInfo.java
+++ b/src/com/android/launcher3/FolderInfo.java
@@ -21,6 +21,7 @@ import android.content.Context;
import com.android.launcher3.compat.UserHandleCompat;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
/**
@@ -57,7 +58,11 @@ public class FolderInfo extends ItemInfo {
*/
public ArrayList<ShortcutInfo> contents = new ArrayList<ShortcutInfo>();
- ArrayList<FolderListener> listeners = new ArrayList<FolderListener>();
+ /**
+ * A collection of listeners for folder info changes. Since this listeners are implemented by
+ * the UI objects, using a WeakReference prevents context leaks.
+ */
+ private WeakReference<FolderListener> mListener;
public FolderInfo() {
itemType = LauncherSettings.Favorites.ITEM_TYPE_FOLDER;
@@ -71,8 +76,9 @@ public class FolderInfo extends ItemInfo {
*/
public void add(ShortcutInfo item, boolean animate) {
contents.add(item);
- for (int i = 0; i < listeners.size(); i++) {
- listeners.get(i).onAdd(item);
+ FolderListener listener = mListener == null ? null : mListener.get();
+ if (listener != null) {
+ listener.onAdd(item);
}
itemsChanged(animate);
}
@@ -84,19 +90,13 @@ public class FolderInfo extends ItemInfo {
*/
public void remove(ShortcutInfo item, boolean animate) {
contents.remove(item);
- for (int i = 0; i < listeners.size(); i++) {
- listeners.get(i).onRemove(item);
+ FolderListener listener = mListener == null ? null : mListener.get();
+ if (listener != null) {
+ listener.onRemove(item);
}
itemsChanged(animate);
}
- public void setTitle(CharSequence title) {
- this.title = title;
- for (int i = 0; i < listeners.size(); i++) {
- listeners.get(i).onTitleChanged(title);
- }
- }
-
@Override
void onAddToDatabase(Context context, ContentValues values) {
super.onAddToDatabase(context, values);
@@ -105,33 +105,30 @@ public class FolderInfo extends ItemInfo {
}
- public void addListener(FolderListener listener) {
- listeners.add(listener);
- }
-
- void removeListener(FolderListener listener) {
- if (listeners.contains(listener)) {
- listeners.remove(listener);
- }
+ /**
+ * Registers a listener for info change events.
+ */
+ public void setListener(FolderListener listener) {
+ mListener = new WeakReference<>(listener);
}
public void itemsChanged(boolean animate) {
- for (int i = 0; i < listeners.size(); i++) {
- listeners.get(i).onItemsChanged(animate);
+ FolderListener listener = mListener == null ? null : mListener.get();
+ if (listener != null) {
+ listener.onItemsChanged(animate);
}
}
@Override
void unbind() {
super.unbind();
- listeners.clear();
+ mListener = null;
}
public interface FolderListener {
- public void onAdd(ShortcutInfo item);
- public void onRemove(ShortcutInfo item);
- public void onTitleChanged(CharSequence title);
- public void onItemsChanged(boolean animate);
+ void onAdd(ShortcutInfo item);
+ void onRemove(ShortcutInfo item);
+ void onItemsChanged(boolean animate);
}
@Override