diff options
| author | 2025-03-19 19:56:24 -0700 | |
|---|---|---|
| committer | 2025-03-19 19:56:24 -0700 | |
| commit | 2978481cf6feb7caf7625dbc37310d216debc058 (patch) | |
| tree | e5e83f64717e2ce9fc925ba2b64110fc81b5e3af | |
| parent | e7e530bac20c988187a07bda06c9baa574ee95ff (diff) | |
| parent | 7f3f9971268da7f79b6e72542c0ddc9034ed7b4a (diff) | |
Merge "Refactor listener to centralize value logic." into main
| -rw-r--r-- | core/java/android/view/ListenerGroup.java (renamed from core/java/android/view/translation/ListenerGroup.java) | 24 | ||||
| -rw-r--r-- | core/java/android/view/WindowManagerGlobal.java | 5 |
2 files changed, 20 insertions, 9 deletions
diff --git a/core/java/android/view/translation/ListenerGroup.java b/core/java/android/view/ListenerGroup.java index 5c70805042fa..889caec3f5d1 100644 --- a/core/java/android/view/translation/ListenerGroup.java +++ b/core/java/android/view/ListenerGroup.java @@ -14,10 +14,9 @@ * limitations under the License. */ -package android.view.translation; +package android.view; import android.annotation.NonNull; -import android.view.ListenerWrapper; import java.util.ArrayList; import java.util.List; @@ -32,26 +31,39 @@ import java.util.function.Consumer; */ public class ListenerGroup<T> { private final List<ListenerWrapper<T>> mListeners = new ArrayList<>(); + @NonNull + private T mLastValue; + + /** + * Constructs a {@link ListenerGroup} that will replay the last reported value whenever a new + * listener is registered. + * @param value the initial value + */ + public ListenerGroup(@NonNull T value) { + mLastValue = value; + } /** * Relays the value to all the registered {@link java.util.function.Consumer} */ public void accept(@NonNull T value) { - Objects.requireNonNull(value); + mLastValue = Objects.requireNonNull(value); for (int i = 0; i < mListeners.size(); i++) { mListeners.get(i).accept(value); } } /** - * Adds a {@link Consumer} to the group. If the {@link Consumer} is already present then this - * is a no op. + * Adds a {@link Consumer} to the group and replays the last reported value. If the + * {@link Consumer} is already present then this is a no op. */ public void addListener(@NonNull Executor executor, @NonNull Consumer<T> consumer) { if (isConsumerPresent(consumer)) { return; } - mListeners.add(new ListenerWrapper<>(executor, consumer)); + final ListenerWrapper<T> listenerWrapper = new ListenerWrapper<>(executor, consumer); + mListeners.add(listenerWrapper); + listenerWrapper.accept(mLastValue); } /** diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java index b97f28da7559..5fdb387c0f73 100644 --- a/core/java/android/view/WindowManagerGlobal.java +++ b/core/java/android/view/WindowManagerGlobal.java @@ -44,7 +44,6 @@ import android.util.Log; import android.util.Pair; import android.util.SparseArray; import android.view.inputmethod.InputMethodManager; -import android.view.translation.ListenerGroup; import android.window.ITrustedPresentationListener; import android.window.InputTransferToken; import android.window.TrustedPresentationThresholds; @@ -154,7 +153,8 @@ public final class WindowManagerGlobal { * @hide */ @GuardedBy("mLock") - private final ListenerGroup<List<View>> mWindowViewsListenerGroup = new ListenerGroup<>(); + private final ListenerGroup<List<View>> mWindowViewsListenerGroup = + new ListenerGroup<>(new ArrayList<>()); @UnsupportedAppUsage private final ArrayList<ViewRootImpl> mRoots = new ArrayList<ViewRootImpl>(); @UnsupportedAppUsage @@ -339,7 +339,6 @@ public final class WindowManagerGlobal { return; } mWindowViewsListenerGroup.addListener(executor, consumer); - executor.execute(() -> consumer.accept(getWindowViews())); } } |