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

Commit cb69608f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Migrate AutoCompleteTextView to use OnBackInvokedDispatcher." into...

Merge "Migrate AutoCompleteTextView to use OnBackInvokedDispatcher." into tm-dev am: d1263fb5 am: b97f7b47

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18432995



Change-Id: I3d7275f78da9130a6891bc38b3ffc0d98d79086f
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents ed83ebe1 b97f7b47
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
@@ -42,6 +42,9 @@ import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inspector.InspectableProperty;
import android.window.OnBackInvokedCallback;
import android.window.OnBackInvokedDispatcher;
import android.window.WindowOnBackInvokedDispatcher;

import com.android.internal.R;

@@ -143,6 +146,14 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
    @UnsupportedAppUsage
    private PopupDataSetObserver mObserver;

    private boolean mBackCallbackRegistered;
    /** Handles back invocation */
    private final OnBackInvokedCallback mBackCallback = () -> {
        if (isPopupShowing()) {
            dismissDropDown();
        }
    };

    /**
     * Constructs a new auto-complete text view with the given context's theme.
     *
@@ -272,6 +283,9 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
        }

        mPopup = new ListPopupWindow(mPopupContext, attrs, defStyleAttr, defStyleRes);
        mPopup.setOnDismissListener(() -> {
            unregisterOnBackInvokedCallback();
        });
        mPopup.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        mPopup.setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW);
        mPopup.setListSelector(popupListSelector);
@@ -734,6 +748,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
            wrappedListener = new PopupWindow.OnDismissListener() {
                @Override public void onDismiss() {
                    dismissListener.onDismiss();
                    unregisterOnBackInvokedCallback();
                }
            };
        }
@@ -1315,6 +1330,9 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
            mPopup.setListItemExpandMax(EXPAND_MAX);
        }
        mPopup.show();
        if (!mPopup.isDropDownAlwaysVisible()) {
            registerOnBackInvokedCallback();
        }
        mPopup.getListView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
    }

@@ -1414,6 +1432,35 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
        return AutoCompleteTextView.class.getName();
    }

    private void unregisterOnBackInvokedCallback() {
        if (!mBackCallbackRegistered) {
            return;
        }
        OnBackInvokedDispatcher dispatcher = findOnBackInvokedDispatcher();
        if (dispatcher == null) {
            return;
        }
        if (WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(mPopupContext)) {
            dispatcher.unregisterOnBackInvokedCallback(mBackCallback);
        }
        mBackCallbackRegistered = false;
    }

    private void registerOnBackInvokedCallback() {
        if (mBackCallbackRegistered) {
            return;
        }
        OnBackInvokedDispatcher dispatcher =  findOnBackInvokedDispatcher();
        if (dispatcher == null) {
            return;
        }
        if (WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(mPopupContext)) {
            dispatcher.registerOnBackInvokedCallback(
                    OnBackInvokedDispatcher.PRIORITY_OVERLAY, mBackCallback);
        }
        mBackCallbackRegistered = true;
    }

    private class DropDownItemClickListener implements AdapterView.OnItemClickListener {
        public void onItemClick(AdapterView parent, View v, int position, long id) {
            performCompletion(v, position, id);