[Predictive Back] Remove OnBackPressedHandler
OnBackPressedHandler was mimicking android.window.OnBackAnimationCallback because later one was hidden API to T.
Now that we have moved to U, we can remove the former handler.
Test: manual
Bug: 272797556
Change-Id: Ic5302cfa0a6fb15c4a64bdf5dc331834b1f06f38
diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java
index c6f7561..9db4ddd 100644
--- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java
@@ -23,8 +23,6 @@
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.animation.Interpolator;
-import android.window.BackEvent;
-import android.window.OnBackAnimationCallback;
import android.window.OnBackInvokedDispatcher;
import com.android.launcher3.DeviceProfile;
@@ -57,28 +55,6 @@
mAllAppsCallbacks = callbacks;
}
- private final OnBackAnimationCallback mOnBackAnimationCallback = new OnBackAnimationCallback() {
- @Override
- public void onBackCancelled() {
- TaskbarAllAppsSlideInView.this.onBackCancelled();
- }
-
- @Override
- public void onBackInvoked() {
- TaskbarAllAppsSlideInView.this.onBackInvoked();
- }
-
- @Override
- public void onBackProgressed(BackEvent backEvent) {
- TaskbarAllAppsSlideInView.this.onBackProgressed(backEvent.getProgress());
- }
-
- @Override
- public void onBackStarted(BackEvent backEvent) {
- TaskbarAllAppsSlideInView.this.onBackStarted();
- }
- };
-
/** Opens the all apps view. */
void show(boolean animate) {
if (mIsOpen || mOpenCloseAnimator.isRunning()) {
@@ -100,7 +76,7 @@
mAppsView.getAppsRecyclerViewContainer().setOutlineProvider(mViewOutlineProvider);
mAppsView.getAppsRecyclerViewContainer().setClipToOutline(true);
findOnBackInvokedDispatcher().registerOnBackInvokedCallback(
- OnBackInvokedDispatcher.PRIORITY_DEFAULT, mOnBackAnimationCallback);
+ OnBackInvokedDispatcher.PRIORITY_DEFAULT, this);
}
}
@@ -113,7 +89,7 @@
protected void handleClose(boolean animate) {
handleClose(animate, mAllAppsCallbacks.getCloseDuration());
if (FeatureFlags.ENABLE_BACK_SWIPE_LAUNCHER_ANIMATION.get()) {
- findOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(mOnBackAnimationCallback);
+ findOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(this);
}
}
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index 768b364..d00b781 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -97,7 +97,6 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.LauncherState;
-import com.android.launcher3.OnBackPressedHandler;
import com.android.launcher3.QuickstepAccessibilityDelegate;
import com.android.launcher3.QuickstepTransitionManager;
import com.android.launcher3.R;
@@ -172,7 +171,6 @@
import com.android.quickstep.views.OverviewActionsView;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;
-import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.unfold.RemoteUnfoldSharedComponent;
import com.android.systemui.unfold.UnfoldSharedComponent;
@@ -192,7 +190,6 @@
import java.util.Collections;
import java.util.List;
import java.util.Objects;
-import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
@@ -745,48 +742,50 @@
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
new OnBackAnimationCallback() {
- @Nullable OnBackPressedHandler mActiveOnBackPressedHandler;
+ @Nullable OnBackAnimationCallback mActiveOnBackAnimationCallback;
@Override
public void onBackStarted(@NonNull BackEvent backEvent) {
- if (mActiveOnBackPressedHandler != null) {
- mActiveOnBackPressedHandler.onBackCancelled();
+ if (mActiveOnBackAnimationCallback != null) {
+ mActiveOnBackAnimationCallback.onBackCancelled();
}
- mActiveOnBackPressedHandler = getOnBackPressedHandler();
- mActiveOnBackPressedHandler.onBackStarted();
+ mActiveOnBackAnimationCallback = getOnBackAnimationCallback();
+ mActiveOnBackAnimationCallback.onBackStarted(backEvent);
}
@Override
public void onBackInvoked() {
- // Recreate mActiveOnBackPressedHandler if necessary to avoid NPE because:
+ // Recreate mActiveOnBackAnimationCallback if necessary to avoid NPE
+ // because:
// 1. b/260636433: In 3-button-navigation mode, onBackStarted() is not
// called on ACTION_DOWN before onBackInvoked() is called in ACTION_UP.
// 2. Launcher#onBackPressed() will call onBackInvoked() without calling
// onBackInvoked() beforehand.
- if (mActiveOnBackPressedHandler == null) {
- mActiveOnBackPressedHandler = getOnBackPressedHandler();
+ if (mActiveOnBackAnimationCallback == null) {
+ mActiveOnBackAnimationCallback = getOnBackAnimationCallback();
}
- mActiveOnBackPressedHandler.onBackInvoked();
- mActiveOnBackPressedHandler = null;
+ mActiveOnBackAnimationCallback.onBackInvoked();
+ mActiveOnBackAnimationCallback = null;
TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "onBackInvoked");
}
@Override
public void onBackProgressed(@NonNull BackEvent backEvent) {
- if (!FeatureFlags.IS_STUDIO_BUILD && mActiveOnBackPressedHandler == null) {
+ if (!FeatureFlags.IS_STUDIO_BUILD
+ && mActiveOnBackAnimationCallback == null) {
return;
}
- mActiveOnBackPressedHandler
- .onBackProgressed(backEvent.getProgress());
+ mActiveOnBackAnimationCallback.onBackProgressed(backEvent);
}
@Override
public void onBackCancelled() {
- if (!FeatureFlags.IS_STUDIO_BUILD && mActiveOnBackPressedHandler == null) {
+ if (!FeatureFlags.IS_STUDIO_BUILD
+ && mActiveOnBackAnimationCallback == null) {
return;
}
- mActiveOnBackPressedHandler.onBackCancelled();
- mActiveOnBackPressedHandler = null;
+ mActiveOnBackAnimationCallback.onBackCancelled();
+ mActiveOnBackAnimationCallback = null;
}
});
}
diff --git a/src/com/android/launcher3/AbstractFloatingView.java b/src/com/android/launcher3/AbstractFloatingView.java
index 796fa80..cd9e598 100644
--- a/src/com/android/launcher3/AbstractFloatingView.java
+++ b/src/com/android/launcher3/AbstractFloatingView.java
@@ -24,7 +24,9 @@
import static com.android.launcher3.compat.AccessibilityManagerCompat.sendCustomAccessibilityEvent;
import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
import android.content.Context;
+import android.os.Build;
import android.util.AttributeSet;
import android.util.Pair;
import android.view.MotionEvent;
@@ -32,6 +34,7 @@
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.Interpolator;
import android.widget.LinearLayout;
+import android.window.OnBackAnimationCallback;
import androidx.annotation.IntDef;
@@ -46,8 +49,9 @@
/**
* Base class for a View which shows a floating UI on top of the launcher UI.
*/
+@TargetApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
public abstract class AbstractFloatingView extends LinearLayout implements TouchController,
- OnBackPressedHandler {
+ OnBackAnimationCallback {
@IntDef(flag = true, value = {
TYPE_FOLDER,
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 22b07ef..80895f4 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -116,9 +116,10 @@
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.OvershootInterpolator;
import android.widget.Toast;
+import android.window.BackEvent;
+import android.window.OnBackAnimationCallback;
import androidx.annotation.CallSuper;
-import androidx.annotation.FloatRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
@@ -560,7 +561,7 @@
}
/**
- * Provide {@link OnBackPressedHandler} in below order:
+ * Provide {@link OnBackAnimationCallback} in below order:
* <ol>
* <li> auto cancel action mode handler
* <li> drag handler
@@ -575,7 +576,8 @@
* Note that state handler will always be handling the back press event if the previous 3 don't.
*/
@NonNull
- protected OnBackPressedHandler getOnBackPressedHandler() {
+ @TargetApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+ protected OnBackAnimationCallback getOnBackAnimationCallback() {
// #1 auto cancel action mode handler
if (isInAutoCancelActionMode()) {
return this::finishAutoCancelActionMode;
@@ -594,17 +596,16 @@
}
// #4 state handler
- return new OnBackPressedHandler() {
+ return new OnBackAnimationCallback() {
@Override
public void onBackInvoked() {
onStateBack();
}
@Override
- public void onBackProgressed(
- @FloatRange(from = 0.0, to = 1.0) float backProgress) {
+ public void onBackProgressed(@NonNull BackEvent backEvent) {
mStateManager.getState().onBackProgressed(
- Launcher.this, backProgress);
+ Launcher.this, backEvent.getProgress());
}
@Override
@@ -2117,8 +2118,9 @@
}
@Override
+ @TargetApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
public void onBackPressed() {
- getOnBackPressedHandler().onBackInvoked();
+ getOnBackAnimationCallback().onBackInvoked();
}
protected void onStateBack() {
diff --git a/src/com/android/launcher3/OnBackPressedHandler.java b/src/com/android/launcher3/OnBackPressedHandler.java
deleted file mode 100644
index 485aa0a..0000000
--- a/src/com/android/launcher3/OnBackPressedHandler.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3;
-
-import androidx.annotation.FloatRange;
-
-/**
- * Interface that mimics {@link android.window.OnBackInvokedCallback} without dependencies on U's
- * API such as {@link android.window.BackEvent}.
- *
- * <p> Impl can assume below order during a back gesture:
- * <ol>
- * <li> [optional] one {@link #onBackStarted()} will be called to start the gesture
- * <li> zero or multiple {@link #onBackProgressed(float)} will be called during swipe gesture
- * <li> either one of {@link #onBackInvoked()} or {@link #onBackCancelled()} will be called to end
- * the gesture
- */
-public interface OnBackPressedHandler {
-
- /** Called when back has started. */
- default void onBackStarted() {}
-
- /** Called when back is committed. */
- void onBackInvoked();
-
- /** Called with back gesture's progress. */
- default void onBackProgressed(@FloatRange(from = 0.0, to = 1.0) float backProgress) {}
-
- /** Called when user drops the back gesture. */
- default void onBackCancelled() {}
-}
diff --git a/src/com/android/launcher3/views/AbstractSlideInView.java b/src/com/android/launcher3/views/AbstractSlideInView.java
index 8a9b179..5730582 100644
--- a/src/com/android/launcher3/views/AbstractSlideInView.java
+++ b/src/com/android/launcher3/views/AbstractSlideInView.java
@@ -28,10 +28,12 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
+import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Outline;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.util.AttributeSet;
import android.util.Property;
import android.view.MotionEvent;
@@ -39,8 +41,8 @@
import android.view.ViewGroup;
import android.view.ViewOutlineProvider;
import android.view.animation.Interpolator;
+import android.window.BackEvent;
-import androidx.annotation.FloatRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Px;
@@ -193,8 +195,9 @@
}
@Override
- public void onBackProgressed(@FloatRange(from = 0.0, to = 1.0) float progress) {
- super.onBackProgressed(progress);
+ @TargetApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+ public void onBackProgressed(BackEvent backEvent) {
+ final float progress = backEvent.getProgress();
float deceleratedProgress =
Interpolators.PREDICTIVE_BACK_DECELERATED_EASE.getInterpolation(progress);
mIsBackProgressing = progress > 0f;
diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
index 0403249..0b2f5a5 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java
@@ -25,11 +25,13 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.PropertyValuesHolder;
+import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.LauncherApps;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
+import android.os.Build;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
@@ -47,8 +49,8 @@
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
+import android.window.BackEvent;
-import androidx.annotation.FloatRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Px;
@@ -360,9 +362,10 @@
}
@Override
- public void onBackProgressed(@FloatRange(from = 0.0, to = 1.0) float progress) {
- super.onBackProgressed(progress);
- mFastScroller.setVisibility(progress > 0 ? View.INVISIBLE : View.VISIBLE);
+ @TargetApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+ public void onBackProgressed(@NonNull BackEvent backEvent) {
+ super.onBackProgressed(backEvent);
+ mFastScroller.setVisibility(backEvent.getProgress() > 0 ? View.INVISIBLE : View.VISIBLE);
}
private void attachScrollbarToRecyclerView(WidgetsRecyclerView recyclerView) {