summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2025-03-19 19:56:24 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-19 19:56:24 -0700
commit2978481cf6feb7caf7625dbc37310d216debc058 (patch)
treee5e83f64717e2ce9fc925ba2b64110fc81b5e3af
parente7e530bac20c988187a07bda06c9baa574ee95ff (diff)
parent7f3f9971268da7f79b6e72542c0ddc9034ed7b4a (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.java5
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()));
}
}