diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2016-05-17 21:25:48 +0000 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2016-05-17 21:25:48 +0000 |
commit | 90cb3e51af988d526912aed7a532745d729a844c (patch) | |
tree | 5c2642da8d0a12e4c2ac7ec27b369e7116ae00ac | |
parent | e48644a6cc3024399ee2c9509d42ef6c2770ef61 (diff) | |
download | android_packages_apps_Trebuchet-90cb3e51af988d526912aed7a532745d729a844c.tar.gz android_packages_apps_Trebuchet-90cb3e51af988d526912aed7a532745d729a844c.tar.bz2 android_packages_apps_Trebuchet-90cb3e51af988d526912aed7a532745d729a844c.zip |
Revert "Wrapping folderLisners with weak reference, and storing it as an array"
This reverts commit e48644a6cc3024399ee2c9509d42ef6c2770ef61.
Change-Id: I7bd1d09cae42193de228cb58c08526eeaf57ec04
-rw-r--r-- | src/com/android/launcher3/FolderInfo.java | 51 | ||||
-rw-r--r-- | src/com/android/launcher3/folder/Folder.java | 12 | ||||
-rw-r--r-- | src/com/android/launcher3/folder/FolderIcon.java | 7 | ||||
-rw-r--r-- | src/com/android/launcher3/folder/MultiFolderListener.java | 52 |
4 files changed, 37 insertions, 85 deletions
diff --git a/src/com/android/launcher3/FolderInfo.java b/src/com/android/launcher3/FolderInfo.java index 0dfe525b7..6c9d969a3 100644 --- a/src/com/android/launcher3/FolderInfo.java +++ b/src/com/android/launcher3/FolderInfo.java @@ -21,7 +21,6 @@ import android.content.Context; import com.android.launcher3.compat.UserHandleCompat; -import java.lang.ref.WeakReference; import java.util.ArrayList; /** @@ -58,11 +57,7 @@ public class FolderInfo extends ItemInfo { */ 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 class FolderInfo extends ItemInfo { */ 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 class FolderInfo extends ItemInfo { */ 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 @@ public class FolderInfo extends ItemInfo { } - /** - * 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 diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java index 2ea198647..1ebe8fdfb 100644 --- a/src/com/android/launcher3/folder/Folder.java +++ b/src/com/android/launcher3/folder/Folder.java @@ -348,14 +348,13 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList mFolderName.setHint(sHintText); // Convert to a string here to ensure that no other state associated with the text field // gets saved. - mInfo.title = mFolderName.getText().toString(); - mFolderIcon.onTitleChanged(mInfo.title); - + String newTitle = mFolderName.getText().toString(); + mInfo.setTitle(newTitle); LauncherModel.updateItemInDatabase(mLauncher, mInfo); if (commit) { sendCustomAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED, - getContext().getString(R.string.folder_renamed, mInfo.title)); + getContext().getString(R.string.folder_renamed, newTitle)); } // This ensures that focus is gained every time the field is clicked, which selects all @@ -449,6 +448,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList mItemsInvalidated = true; updateTextViewFocus(); + mInfo.addListener(this); if (!sDefaultFolderName.contentEquals(mInfo.title)) { mFolderName.setText(mInfo.title); @@ -1349,7 +1349,6 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList mLauncher, item, mInfo.id, 0, item.cellX, item.cellY); } - @Override public void onRemove(ShortcutInfo item) { mItemsInvalidated = true; // If this item is being dragged from this open folder, we have already handled @@ -1386,6 +1385,9 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList updateTextViewFocus(); } + public void onTitleChanged(CharSequence title) { + } + public ArrayList<View> getItemsInReadingOrder() { if (mItemsInvalidated) { mItemsInReadingOrder.clear(); diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java index 4a4f7cff5..1e4eb7f27 100644 --- a/src/com/android/launcher3/folder/FolderIcon.java +++ b/src/com/android/launcher3/folder/FolderIcon.java @@ -183,9 +183,10 @@ public class FolderIcon extends FrameLayout implements FolderListener { folder.setFolderIcon(icon); folder.bind(folderInfo); icon.setFolder(folder); - icon.setOnFocusChangeListener(launcher.mFocusHandler); - folderInfo.setListener(new MultiFolderListener(folder, icon)); + folderInfo.addListener(icon); + + icon.setOnFocusChangeListener(launcher.mFocusHandler); return icon; } @@ -943,13 +944,11 @@ public class FolderIcon extends FrameLayout implements FolderListener { requestLayout(); } - @Override public void onAdd(ShortcutInfo item) { invalidate(); requestLayout(); } - @Override public void onRemove(ShortcutInfo item) { invalidate(); requestLayout(); diff --git a/src/com/android/launcher3/folder/MultiFolderListener.java b/src/com/android/launcher3/folder/MultiFolderListener.java deleted file mode 100644 index 103011200..000000000 --- a/src/com/android/launcher3/folder/MultiFolderListener.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2016 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. - */ - -package com.android.launcher3.folder; - -import com.android.launcher3.FolderInfo.FolderListener; -import com.android.launcher3.ShortcutInfo; - -/** - * An implementation of {@link FolderListener} which passes the events to 2 children. - */ -public class MultiFolderListener implements FolderListener { - - private final FolderListener mListener1; - private final FolderListener mListener2; - - public MultiFolderListener(FolderListener listener1, FolderListener listener2) { - mListener1 = listener1; - mListener2 = listener2; - } - - @Override - public void onAdd(ShortcutInfo item) { - mListener1.onAdd(item); - mListener2.onAdd(item); - } - - @Override - public void onRemove(ShortcutInfo item) { - mListener1.onRemove(item); - mListener2.onRemove(item); - } - - @Override - public void onItemsChanged(boolean animate) { - mListener1.onItemsChanged(animate); - mListener2.onItemsChanged(animate); - } -} |