diff options
| author | 2021-11-01 19:50:48 +0000 | |
|---|---|---|
| committer | 2021-11-01 19:50:48 +0000 | |
| commit | 9231b6726cf44840d44b3ac17a212ab22987e11c (patch) | |
| tree | d3d6d4994356a0ca3cbd1c7c49cbd2710c49995b | |
| parent | 39258b6945edd752c17b3324e510f9dd191e452e (diff) | |
| parent | 6afd143ea03f9a4f65fe8cc6e0268c3d0d734c76 (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
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); } |