Merge "[RemoteInputView] Reorder fields + clean listener registration APIs" into sc-v2-dev

This commit is contained in:
TreeHugger Robot
2021-11-01 19:45:05 +00:00
committed by Android (Google) Code Review
3 changed files with 44 additions and 27 deletions

View File

@@ -1253,7 +1253,7 @@ public class NotificationContentView extends FrameLayout {
} }
if (hasRemoteInput) { if (hasRemoteInput) {
existing.setWrapper(wrapper); existing.setWrapper(wrapper);
existing.setOnVisibilityChangedListener(this::setRemoteInputVisible); existing.addOnVisibilityChangedListener(this::setRemoteInputVisible);
if (existingPendingIntent != null || existing.isActive()) { if (existingPendingIntent != null || existing.isActive()) {
// The current action could be gone, or the pending intent no longer valid. // The current action could be gone, or the pending intent no longer valid.

View File

@@ -108,36 +108,36 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
private final SendButtonTextWatcher mTextWatcher; private final SendButtonTextWatcher mTextWatcher;
private final TextView.OnEditorActionListener mEditorActionHandler; private final TextView.OnEditorActionListener mEditorActionHandler;
private final UiEventLogger mUiEventLogger; private final ArrayList<OnSendRemoteInputListener> mOnSendListeners = new ArrayList<>();
private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler; private final ArrayList<Consumer<Boolean>> mOnVisibilityChangedListeners = new ArrayList<>();
private final List<OnFocusChangeListener> mEditTextFocusChangeListeners = new ArrayList<>(); private final ArrayList<OnFocusChangeListener> mEditTextFocusChangeListeners =
private final List<OnSendRemoteInputListener> mOnSendListeners = new ArrayList<>(); new ArrayList<>();
private RemoteEditText mEditText; private RemoteEditText mEditText;
private ImageButton mSendButton; private ImageButton mSendButton;
private GradientDrawable mContentBackground; private GradientDrawable mContentBackground;
private ProgressBar mProgressBar; private ProgressBar mProgressBar;
private PendingIntent mPendingIntent; private ImageView mDelete;
private RemoteInput[] mRemoteInputs; private ImageView mDeleteBg;
private RemoteInput mRemoteInput; // TODO(b/193539698): remove reveal param fields, turn them into parameters where needed
private RemoteInputController mController;
private NotificationEntry mEntry;
private boolean mRemoved;
private int mRevealCx; private int mRevealCx;
private int mRevealCy; private int mRevealCy;
private int mRevealR; private int mRevealR;
private boolean mColorized; private boolean mColorized;
private int mTint; private int mTint;
private boolean mResetting; 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 NotificationRemoteInputManager.BouncerChecker mBouncerChecker;
private ImageView mDelete; private boolean mRemoved;
private ImageView mDeleteBg; private NotificationViewWrapper mWrapper;
/** /**
* Enum for logged notification remote input UiEvents. * Enum for logged notification remote input UiEvents.
@@ -382,7 +382,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
private void sendRemoteInput(Intent intent) { private void sendRemoteInput(Intent intent) {
if (mBouncerChecker != null && mBouncerChecker.showBouncerIfNecessary()) { if (mBouncerChecker != null && mBouncerChecker.showBouncerIfNecessary()) {
mEditText.hideIme(); mEditText.hideIme();
for (OnSendRemoteInputListener listener : mOnSendListeners) { for (OnSendRemoteInputListener listener : new ArrayList<>(mOnSendListeners)) {
listener.onSendRequestBounced(); listener.onSendRequestBounced();
} }
return; return;
@@ -399,7 +399,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mController.remoteInputSent(mEntry); mController.remoteInputSent(mEntry);
mEntry.setHasSentReply(); mEntry.setHasSentReply();
for (OnSendRemoteInputListener listener : mOnSendListeners) { for (OnSendRemoteInputListener listener : new ArrayList<>(mOnSendListeners)) {
listener.onSendRemoteInput(); listener.onSendRemoteInput();
} }
@@ -760,15 +760,32 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mWrapper = wrapper; 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 @Override
protected void onVisibilityChanged(View changedView, int visibility) { protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility); super.onVisibilityChanged(changedView, visibility);
if (changedView == this && mOnVisibilityChangedListener != null) { if (changedView == this) {
mOnVisibilityChangedListener.accept(visibility == VISIBLE); for (Consumer<Boolean> listener : new ArrayList<>(mOnVisibilityChangedListeners)) {
listener.accept(visibility == VISIBLE);
}
// Hide soft-keyboard when the input view became invisible // Hide soft-keyboard when the input view became invisible
// (i.e. The notification shade collapsed by pressing the home key) // (i.e. The notification shade collapsed by pressing the home key)
if (visibility != VISIBLE && !mEditText.isVisibleToUser() if (visibility != VISIBLE && !mEditText.isVisibleToUser()

View File

@@ -205,7 +205,7 @@ public class RemoteInputViewTest extends SysuiTestCase {
ExpandableNotificationRow row = helper.createRow(); ExpandableNotificationRow row = helper.createRow();
RemoteInputView view = RemoteInputView.inflate(mContext, null, row.getEntry(), mController); RemoteInputView view = RemoteInputView.inflate(mContext, null, row.getEntry(), mController);
view.setOnVisibilityChangedListener(null); view.addOnVisibilityChangedListener(null);
view.setVisibility(View.INVISIBLE); view.setVisibility(View.INVISIBLE);
view.setVisibility(View.VISIBLE); view.setVisibility(View.VISIBLE);
} }