Revert "Wrapping folderLisners with weak reference, and storing it as an array"

This reverts commit e48644a6cc3024399ee2c9509d42ef6c2770ef61.

Change-Id: I7bd1d09cae42193de228cb58c08526eeaf57ec04
diff --git a/src/com/android/launcher3/FolderInfo.java b/src/com/android/launcher3/FolderInfo.java
index 0dfe525..6c9d969 100644
--- a/src/com/android/launcher3/FolderInfo.java
+++ b/src/com/android/launcher3/FolderInfo.java
@@ -21,7 +21,6 @@
 
 import com.android.launcher3.compat.UserHandleCompat;
 
-import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 
 /**
@@ -58,11 +57,7 @@
      */
     public ArrayList<ShortcutInfo> contents = new ArrayList<ShortcutInfo>();
 
-    /**
-     * 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;
+    ArrayList<FolderListener> listeners = new ArrayList<FolderListener>();
 
     public FolderInfo() {
         itemType = LauncherSettings.Favorites.ITEM_TYPE_FOLDER;
@@ -76,9 +71,8 @@
      */
     public void add(ShortcutInfo item, boolean animate) {
         contents.add(item);
-        FolderListener listener = mListener == null ? null : mListener.get();
-        if (listener != null) {
-            listener.onAdd(item);
+        for (int i = 0; i < listeners.size(); i++) {
+            listeners.get(i).onAdd(item);
         }
         itemsChanged(animate);
     }
@@ -90,13 +84,19 @@
      */
     public void remove(ShortcutInfo item, boolean animate) {
         contents.remove(item);
-        FolderListener listener = mListener == null ? null : mListener.get();
-        if (listener != null) {
-            listener.onRemove(item);
+        for (int i = 0; i < listeners.size(); i++) {
+            listeners.get(i).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,30 +105,33 @@
 
     }
 
-    /**
-     * Registers a listener for info change events.
-     */
-    public void setListener(FolderListener listener) {
-        mListener = new WeakReference<>(listener);
+    public void addListener(FolderListener listener) {
+        listeners.add(listener);
+    }
+
+    void removeListener(FolderListener listener) {
+        if (listeners.contains(listener)) {
+            listeners.remove(listener);
+        }
     }
 
     public void itemsChanged(boolean animate) {
-        FolderListener listener = mListener == null ? null : mListener.get();
-        if (listener != null) {
-            listener.onItemsChanged(animate);
+        for (int i = 0; i < listeners.size(); i++) {
+            listeners.get(i).onItemsChanged(animate);
         }
     }
 
     @Override
     void unbind() {
         super.unbind();
-        mListener = null;
+        listeners.clear();
     }
 
     public interface FolderListener {
-        void onAdd(ShortcutInfo item);
-        void onRemove(ShortcutInfo item);
-        void onItemsChanged(boolean animate);
+        public void onAdd(ShortcutInfo item);
+        public void onRemove(ShortcutInfo item);
+        public void onTitleChanged(CharSequence title);
+        public void onItemsChanged(boolean animate);
     }
 
     @Override