summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2021-11-01 19:50:48 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2021-11-01 19:50:48 +0000
commit9231b6726cf44840d44b3ac17a212ab22987e11c (patch)
treed3d6d4994356a0ca3cbd1c7c49cbd2710c49995b
parent39258b6945edd752c17b3324e510f9dd191e452e (diff)
parent6afd143ea03f9a4f65fe8cc6e0268c3d0d734c76 (diff)
Merge "[RemoteInputView] Reorder fields + clean listener registration APIs" into sc-v2-dev am: 6afd143ea0
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15950145 Change-Id: Iadec09eb6433a38136eeb531a2530aeeeac1725d
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java67
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java2
3 files changed, 44 insertions, 27 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index 4f54e4feb21d..1be0a960087c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -1253,7 +1253,7 @@ public class NotificationContentView extends FrameLayout {
}
if (hasRemoteInput) {
existing.setWrapper(wrapper);
- existing.setOnVisibilityChangedListener(this::setRemoteInputVisible);
+ existing.addOnVisibilityChangedListener(this::setRemoteInputVisible);
if (existingPendingIntent != null || existing.isActive()) {
// The current action could be gone, or the pending intent no longer valid.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
index 5d7d4809dd57..aa8d95fdb625 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
@@ -108,36 +108,36 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
private final SendButtonTextWatcher mTextWatcher;
private final TextView.OnEditorActionListener mEditorActionHandler;
- private final UiEventLogger mUiEventLogger;
- private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
- private final List<OnFocusChangeListener> mEditTextFocusChangeListeners = new ArrayList<>();
- private final List<OnSendRemoteInputListener> mOnSendListeners = new ArrayList<>();
+ private final ArrayList<OnSendRemoteInputListener> mOnSendListeners = new ArrayList<>();
+ private final ArrayList<Consumer<Boolean>> mOnVisibilityChangedListeners = new ArrayList<>();
+ private final ArrayList<OnFocusChangeListener> mEditTextFocusChangeListeners =
+ new ArrayList<>();
+
private RemoteEditText mEditText;
private ImageButton mSendButton;
private GradientDrawable mContentBackground;
private ProgressBar mProgressBar;
- private PendingIntent mPendingIntent;
- private RemoteInput[] mRemoteInputs;
- private RemoteInput mRemoteInput;
- private RemoteInputController mController;
-
- private NotificationEntry mEntry;
-
- private boolean mRemoved;
-
+ private ImageView mDelete;
+ private ImageView mDeleteBg;
+ // TODO(b/193539698): remove reveal param fields, turn them into parameters where needed
private int mRevealCx;
private int mRevealCy;
private int mRevealR;
-
private boolean mColorized;
private int mTint;
-
private boolean mResetting;
- private NotificationViewWrapper mWrapper;
- private Consumer<Boolean> mOnVisibilityChangedListener;
+
+ // TODO(b/193539698): move these to a Controller
+ private RemoteInputController mController;
+ private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
+ private final UiEventLogger mUiEventLogger;
+ private NotificationEntry mEntry;
+ private PendingIntent mPendingIntent;
+ private RemoteInput mRemoteInput;
+ private RemoteInput[] mRemoteInputs;
private NotificationRemoteInputManager.BouncerChecker mBouncerChecker;
- private ImageView mDelete;
- private ImageView mDeleteBg;
+ private boolean mRemoved;
+ private NotificationViewWrapper mWrapper;
/**
* Enum for logged notification remote input UiEvents.
@@ -382,7 +382,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
private void sendRemoteInput(Intent intent) {
if (mBouncerChecker != null && mBouncerChecker.showBouncerIfNecessary()) {
mEditText.hideIme();
- for (OnSendRemoteInputListener listener : mOnSendListeners) {
+ for (OnSendRemoteInputListener listener : new ArrayList<>(mOnSendListeners)) {
listener.onSendRequestBounced();
}
return;
@@ -399,7 +399,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mController.remoteInputSent(mEntry);
mEntry.setHasSentReply();
- for (OnSendRemoteInputListener listener : mOnSendListeners) {
+ for (OnSendRemoteInputListener listener : new ArrayList<>(mOnSendListeners)) {
listener.onSendRemoteInput();
}
@@ -760,15 +760,32 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mWrapper = wrapper;
}
- public void setOnVisibilityChangedListener(Consumer<Boolean> visibilityChangedListener) {
- mOnVisibilityChangedListener = visibilityChangedListener;
+ /**
+ * Register a listener to be notified when this view's visibility changes.
+ *
+ * Specifically, the passed {@link Consumer} will receive {@code true} when
+ * {@link #getVisibility()} would return {@link View#VISIBLE}, and {@code false} it would return
+ * any other value.
+ */
+ public void addOnVisibilityChangedListener(Consumer<Boolean> listener) {
+ mOnVisibilityChangedListeners.add(listener);
+ }
+
+ /**
+ * Unregister a listener previously registered via
+ * {@link #addOnVisibilityChangedListener(Consumer)}.
+ */
+ public void removeOnVisibilityChangedListener(Consumer<Boolean> listener) {
+ mOnVisibilityChangedListeners.remove(listener);
}
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
- if (changedView == this && mOnVisibilityChangedListener != null) {
- mOnVisibilityChangedListener.accept(visibility == VISIBLE);
+ if (changedView == this) {
+ for (Consumer<Boolean> listener : new ArrayList<>(mOnVisibilityChangedListeners)) {
+ listener.accept(visibility == VISIBLE);
+ }
// Hide soft-keyboard when the input view became invisible
// (i.e. The notification shade collapsed by pressing the home key)
if (visibility != VISIBLE && !mEditText.isVisibleToUser()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
index dd8354dedafd..97e1edb9ac74 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
@@ -205,7 +205,7 @@ public class RemoteInputViewTest extends SysuiTestCase {
ExpandableNotificationRow row = helper.createRow();
RemoteInputView view = RemoteInputView.inflate(mContext, null, row.getEntry(), mController);
- view.setOnVisibilityChangedListener(null);
+ view.addOnVisibilityChangedListener(null);
view.setVisibility(View.INVISIBLE);
view.setVisibility(View.VISIBLE);
}