Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 973ae3b1 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Inline Reply] Fix RemoteInputView visibility listener leak" into main

parents 50a9cfa1 1973f979
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1477,7 +1477,7 @@ public class NotificationContentView extends FrameLayout implements Notification
            }
            if (hasRemoteInput) {
                result.mView.setWrapper(wrapper);
                result.mView.addOnVisibilityChangedListener(this::setRemoteInputVisible);
                result.mView.setOnVisibilityChangedListener(this::setRemoteInputVisible);

                if (existingPendingIntent != null || result.mView.isActive()) {
                    // The current action could be gone, or the pending intent no longer valid.
+6 −13
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
    private final SendButtonTextWatcher mTextWatcher;
    private final TextView.OnEditorActionListener mEditorActionHandler;
    private final ArrayList<Runnable> mOnSendListeners = new ArrayList<>();
    private final ArrayList<Consumer<Boolean>> mOnVisibilityChangedListeners = new ArrayList<>();
    private Consumer<Boolean> mOnVisibilityChangedListener = null;
    private final ArrayList<OnFocusChangeListener> mEditTextFocusChangeListeners =
            new ArrayList<>();

@@ -733,24 +733,17 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
     * {@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);
    public void setOnVisibilityChangedListener(Consumer<Boolean> listener) {
        mOnVisibilityChangedListener = listener;
    }

    @Override
    protected void onVisibilityChanged(View changedView, int visibility) {
        super.onVisibilityChanged(changedView, visibility);
        if (changedView == this) {
            for (Consumer<Boolean> listener : new ArrayList<>(mOnVisibilityChangedListeners)) {
                listener.accept(visibility == VISIBLE);
            final Consumer<Boolean> visibilityChangedListener = mOnVisibilityChangedListener;
            if (visibilityChangedListener != null) {
                visibilityChangedListener.accept(visibility == VISIBLE);
            }
            // Hide soft-keyboard when the input view became invisible
            // (i.e. The notification shade collapsed by pressing the home key)
+1 −1
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ public class RemoteInputViewTest extends SysuiTestCase {
        ExpandableNotificationRow row = helper.createRow();
        RemoteInputView view = RemoteInputView.inflate(mContext, null, row.getEntry(), mController);

        view.addOnVisibilityChangedListener(null);
        view.setOnVisibilityChangedListener(null);
        view.setVisibility(View.INVISIBLE);
        view.setVisibility(View.VISIBLE);
    }