Loading core/java/android/widget/Editor.java +44 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewParent; import android.view.ViewRootImpl; import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.accessibility.AccessibilityNodeInfo; Loading @@ -129,6 +130,9 @@ import android.view.textclassifier.TextClassificationManager; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView.Drawables; import android.widget.TextView.OnEditorActionListener; import android.window.OnBackInvokedCallback; import android.window.OnBackInvokedDispatcher; import android.window.WindowOnBackInvokedDispatcher; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.inputmethod.EditableInputConnection; Loading Loading @@ -235,6 +239,14 @@ public class Editor { private boolean mSelectionControllerEnabled; private final boolean mHapticTextHandleEnabled; /** Handles OnBackInvokedCallback back dispatch */ private final OnBackInvokedCallback mBackCallback = new OnBackInvokedCallback() { @Override public void onBackInvoked() { stopTextActionMode(); } }; private boolean mBackCallbackRegistered; @Nullable private MagnifierMotionAnimator mMagnifierAnimator; Loading Loading @@ -753,6 +765,35 @@ public class Editor { stopTextActionModeWithPreservingSelection(); mDefaultOnReceiveContentListener.clearInputConnectionInfo(); unregisterOnBackInvokedCallback(); } private void unregisterOnBackInvokedCallback() { if (!mBackCallbackRegistered) { return; } ViewRootImpl viewRootImpl = getTextView().getViewRootImpl(); if (viewRootImpl != null && WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled( viewRootImpl.mContext)) { viewRootImpl.getOnBackInvokedDispatcher() .unregisterOnBackInvokedCallback(mBackCallback); mBackCallbackRegistered = false; } } private void registerOnBackInvokedCallback() { if (mBackCallbackRegistered) { return; } ViewRootImpl viewRootImpl = mTextView.getViewRootImpl(); if (viewRootImpl != null && WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled( viewRootImpl.mContext)) { viewRootImpl.getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, mBackCallback); mBackCallbackRegistered = true; } } private void discardTextDisplayLists() { Loading Loading @@ -2370,6 +2411,7 @@ public class Editor { new TextActionModeCallback(TextActionMode.INSERTION); mTextActionMode = mTextView.startActionMode( actionModeCallback, ActionMode.TYPE_FLOATING); registerOnBackInvokedCallback(); if (mTextActionMode != null && getInsertionController() != null) { getInsertionController().show(); } Loading Loading @@ -2485,6 +2527,7 @@ public class Editor { ActionMode.Callback actionModeCallback = new TextActionModeCallback(actionMode); mTextActionMode = mTextView.startActionMode(actionModeCallback, ActionMode.TYPE_FLOATING); registerOnBackInvokedCallback(); final boolean selectableText = mTextView.isTextEditable() || mTextView.isTextSelectable(); if (actionMode == TextActionMode.TEXT_LINK && !selectableText Loading Loading @@ -2660,6 +2703,7 @@ public class Editor { // This will hide the mSelectionModifierCursorController mTextActionMode.finish(); } unregisterOnBackInvokedCallback(); } private void stopTextActionModeWithPreservingSelection() { Loading Loading
core/java/android/widget/Editor.java +44 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewParent; import android.view.ViewRootImpl; import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.accessibility.AccessibilityNodeInfo; Loading @@ -129,6 +130,9 @@ import android.view.textclassifier.TextClassificationManager; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView.Drawables; import android.widget.TextView.OnEditorActionListener; import android.window.OnBackInvokedCallback; import android.window.OnBackInvokedDispatcher; import android.window.WindowOnBackInvokedDispatcher; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.inputmethod.EditableInputConnection; Loading Loading @@ -235,6 +239,14 @@ public class Editor { private boolean mSelectionControllerEnabled; private final boolean mHapticTextHandleEnabled; /** Handles OnBackInvokedCallback back dispatch */ private final OnBackInvokedCallback mBackCallback = new OnBackInvokedCallback() { @Override public void onBackInvoked() { stopTextActionMode(); } }; private boolean mBackCallbackRegistered; @Nullable private MagnifierMotionAnimator mMagnifierAnimator; Loading Loading @@ -753,6 +765,35 @@ public class Editor { stopTextActionModeWithPreservingSelection(); mDefaultOnReceiveContentListener.clearInputConnectionInfo(); unregisterOnBackInvokedCallback(); } private void unregisterOnBackInvokedCallback() { if (!mBackCallbackRegistered) { return; } ViewRootImpl viewRootImpl = getTextView().getViewRootImpl(); if (viewRootImpl != null && WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled( viewRootImpl.mContext)) { viewRootImpl.getOnBackInvokedDispatcher() .unregisterOnBackInvokedCallback(mBackCallback); mBackCallbackRegistered = false; } } private void registerOnBackInvokedCallback() { if (mBackCallbackRegistered) { return; } ViewRootImpl viewRootImpl = mTextView.getViewRootImpl(); if (viewRootImpl != null && WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled( viewRootImpl.mContext)) { viewRootImpl.getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, mBackCallback); mBackCallbackRegistered = true; } } private void discardTextDisplayLists() { Loading Loading @@ -2370,6 +2411,7 @@ public class Editor { new TextActionModeCallback(TextActionMode.INSERTION); mTextActionMode = mTextView.startActionMode( actionModeCallback, ActionMode.TYPE_FLOATING); registerOnBackInvokedCallback(); if (mTextActionMode != null && getInsertionController() != null) { getInsertionController().show(); } Loading Loading @@ -2485,6 +2527,7 @@ public class Editor { ActionMode.Callback actionModeCallback = new TextActionModeCallback(actionMode); mTextActionMode = mTextView.startActionMode(actionModeCallback, ActionMode.TYPE_FLOATING); registerOnBackInvokedCallback(); final boolean selectableText = mTextView.isTextEditable() || mTextView.isTextSelectable(); if (actionMode == TextActionMode.TEXT_LINK && !selectableText Loading Loading @@ -2660,6 +2703,7 @@ public class Editor { // This will hide the mSelectionModifierCursorController mTextActionMode.finish(); } unregisterOnBackInvokedCallback(); } private void stopTextActionModeWithPreservingSelection() { Loading