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

Commit e73db2a0 authored by Fengjiang Li's avatar Fengjiang Li Committed by Android (Google) Code Review
Browse files

Merge "Predictive back: widget to all apps" into tm-qpr-dev

parents 68f56673 6bb8d795
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -194,7 +194,8 @@ public class TaskbarDragLayer extends BaseDragLayer<TaskbarActivityContext> {
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getAction() == ACTION_UP && event.getKeyCode() == KEYCODE_BACK) {
            AbstractFloatingView topView = AbstractFloatingView.getTopOpenView(mActivity);
            if (topView != null && topView.onBackPressed()) {
            if (topView != null && topView.canHandleBack()) {
                topView.onBackInvoked();
                // Handled by the floating view.
                return true;
            }
+2 −1
Original line number Diff line number Diff line
@@ -71,7 +71,8 @@ public class TaskbarOverlayDragLayer extends
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getAction() == ACTION_UP && event.getKeyCode() == KEYCODE_BACK) {
            AbstractFloatingView topView = AbstractFloatingView.getTopOpenView(mActivity);
            if (topView != null && topView.onBackPressed()) {
            if (topView != null && topView.canHandleBack()) {
                topView.onBackInvoked();
                return true;
            }
        }
+33 −3
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ import com.android.launcher3.DeviceProfile;
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;
@@ -638,20 +639,49 @@ public class QuickstepLauncher extends Launcher {
        getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
                OnBackInvokedDispatcher.PRIORITY_DEFAULT,
                new OnBackAnimationCallback() {

                    @Nullable OnBackPressedHandler mActiveOnBackPressedHandler;

                    @Override
                    public void onBackStarted(@NonNull BackEvent backEvent) {
                        if (mActiveOnBackPressedHandler != null) {
                            mActiveOnBackPressedHandler.onBackCancelled();
                        }
                        mActiveOnBackPressedHandler = getOnBackPressedHandler();
                        mActiveOnBackPressedHandler.onBackStarted();
                    }

                    @Override
                    public void onBackInvoked() {
                        onBackPressed();
                        // Recreate mActiveOnBackPressedHandler 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();
                        }
                        mActiveOnBackPressedHandler.onBackInvoked();
                        mActiveOnBackPressedHandler = null;
                        TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "onBackInvoked");
                    }

                    @Override
                    public void onBackProgressed(@NonNull BackEvent backEvent) {
                        QuickstepLauncher.this.onBackProgressed(backEvent.getProgress());
                        if (!FeatureFlags.IS_STUDIO_BUILD && mActiveOnBackPressedHandler == null) {
                            return;
                        }
                        mActiveOnBackPressedHandler
                                .onBackProgressed(backEvent.getProgress());
                    }

                    @Override
                    public void onBackCancelled() {
                        QuickstepLauncher.this.onBackCancelled();
                        if (!FeatureFlags.IS_STUDIO_BUILD && mActiveOnBackPressedHandler == null) {
                            return;
                        }
                        mActiveOnBackPressedHandler.onBackCancelled();
                        mActiveOnBackPressedHandler = null;
                    }
                });
    }
+0 −5
Original line number Diff line number Diff line
@@ -111,11 +111,6 @@ public class AllAppsEduView extends AbstractFloatingView {
        return (type & TYPE_ALL_APPS_EDU) != 0;
    }

    @Override
    public boolean onBackPressed() {
        return true;
    }

    @Override
    public boolean canInterceptEventsInSystemGestureRegion() {
        return true;
+9 −4
Original line number Diff line number Diff line
@@ -46,7 +46,8 @@ import java.lang.annotation.RetentionPolicy;
/**
 * Base class for a View which shows a floating UI on top of the launcher UI.
 */
public abstract class AbstractFloatingView extends LinearLayout implements TouchController {
public abstract class AbstractFloatingView extends LinearLayout implements TouchController,
        OnBackPressedHandler {

    @IntDef(flag = true, value = {
            TYPE_FOLDER,
@@ -165,12 +166,16 @@ public abstract class AbstractFloatingView extends LinearLayout implements Touch

    protected abstract boolean isOfType(@FloatingViewType int type);

    /** @return Whether the back is consumed. If false, Launcher will handle the back as well. */
    public boolean onBackPressed() {
        close(true);
    /** Return true if this view can consume back press. */
    public boolean canHandleBack() {
        return true;
    }

    @Override
    public void onBackInvoked() {
        close(true);
    }

    @Override
    public boolean onControllerTouchEvent(MotionEvent ev) {
        return false;
Loading