Merge "Register back action to close the KQS view" into main

This commit is contained in:
Wen-chien Wang
2024-12-02 22:04:11 +00:00
committed by Android (Google) Code Review
2 changed files with 38 additions and 0 deletions
@@ -35,6 +35,8 @@ import android.view.ViewTreeObserver;
import android.view.animation.Interpolator;
import android.widget.HorizontalScrollView;
import android.widget.TextView;
import android.window.OnBackInvokedDispatcher;
import android.window.WindowOnBackInvokedDispatcher;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
@@ -109,6 +111,8 @@ public class KeyboardQuickSwitchView extends ConstraintLayout {
@Nullable private AnimatorSet mOpenAnimation;
private boolean mIsBackCallbackRegistered = false;
@Nullable private KeyboardQuickSwitchViewController.ViewCallbacks mViewCallbacks;
public KeyboardQuickSwitchView(@NonNull Context context) {
@@ -158,6 +162,34 @@ public class KeyboardQuickSwitchView extends ConstraintLayout {
mIsRtl = Utilities.isRtl(resources);
}
private void registerOnBackInvokedCallback() {
OnBackInvokedDispatcher dispatcher = findOnBackInvokedDispatcher();
if (isOnBackInvokedCallbackEnabled(dispatcher)
&& !mIsBackCallbackRegistered) {
dispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_OVERLAY, mViewCallbacks.onBackInvokedCallback);
mIsBackCallbackRegistered = true;
}
}
private void unregisterOnBackInvokedCallback() {
OnBackInvokedDispatcher dispatcher = findOnBackInvokedDispatcher();
if (isOnBackInvokedCallbackEnabled(dispatcher)
&& mIsBackCallbackRegistered) {
dispatcher.unregisterOnBackInvokedCallback(
mViewCallbacks.onBackInvokedCallback);
mIsBackCallbackRegistered = false;
}
}
private boolean isOnBackInvokedCallbackEnabled(OnBackInvokedDispatcher dispatcher) {
return dispatcher instanceof WindowOnBackInvokedDispatcher
&& ((WindowOnBackInvokedDispatcher) dispatcher).isOnBackInvokedCallbackEnabled()
&& mViewCallbacks != null;
}
private KeyboardQuickSwitchTaskView createAndAddTaskView(
int index,
boolean isFinalView,
@@ -277,6 +309,7 @@ public class KeyboardQuickSwitchView extends ConstraintLayout {
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
registerOnBackInvokedCallback();
animateOpen(currentFocusIndexOverride);
getViewTreeObserver().removeOnGlobalLayoutListener(this);
@@ -293,6 +326,9 @@ public class KeyboardQuickSwitchView extends ConstraintLayout {
}
void resetViewCallbacks() {
// Unregister the back invoked callback after the view is closed and before the
// mViewCallbacks is reset.
unregisterOnBackInvokedCallback();
mViewCallbacks = null;
}
@@ -25,6 +25,7 @@ import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.animation.AnimationUtils;
import android.window.OnBackInvokedCallback;
import android.window.RemoteTransition;
import androidx.annotation.NonNull;
@@ -331,6 +332,7 @@ public class KeyboardQuickSwitchViewController {
}
class ViewCallbacks {
public final OnBackInvokedCallback onBackInvokedCallback = () -> closeQuickSwitchView(true);
boolean onKeyUp(int keyCode, KeyEvent event, boolean isRTL, boolean allowTraversal) {
if (keyCode != KeyEvent.KEYCODE_TAB