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

Commit 0c947f97 authored by Tony Wickham's avatar Tony Wickham
Browse files

Update sysui flags

- Launcher always controlls sysui flags during quickstep gestures.
  - If we passed window threshold (i.e. window isn't under system
    bars), use same flags as home screen
  - Else use sysui flags of the centermost TaskView
- Update sysui flags based on home animation progress as well
  (otherwise we weren't applying home screen sysui flags until
  the end of the animation if you ended the swipe before crossing
  the window threshold).
- Update sysui flags for quick switch from home
- Specify that the activity controller animation is user-controlled
  so we don't reapply state when re-setting  it. This happens when
  we get window insets, for instance, which we get when changing
  sysui flags.

Bug: 131360249
Bug: 130020567
Change-Id: If82dbf75fe663fd690b816cdc1c4366cc2bf75b1
parent 752df2ce
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -28,9 +28,13 @@ import static com.android.launcher3.anim.Interpolators.ACCEL_2;
import static com.android.launcher3.anim.Interpolators.DEACCEL_2;
import static com.android.launcher3.anim.Interpolators.INSTANT;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD;

import android.view.MotionEvent;

import androidx.annotation.Nullable;

import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.LauncherStateManager;
@@ -45,8 +49,6 @@ import com.android.quickstep.SysUINavigationMode.Mode;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;

import androidx.annotation.Nullable;

/**
 * Handles quick switching to a recent task from the home screen.
 */
@@ -128,6 +130,10 @@ public class QuickSwitchTouchController extends AbstractStateChangeTouchControll
    private void updateFullscreenProgress(float progress) {
        if (mTaskToLaunch != null) {
            mTaskToLaunch.setFullscreenProgress(progress);
            int sysuiFlags = progress > UPDATE_SYSUI_FLAGS_THRESHOLD
                    ? mTaskToLaunch.getThumbnail().getSysUiStatusNavFlags()
                    : 0;
            mLauncher.getSystemUiController().updateUiState(UI_STATE_OVERVIEW, sysuiFlags);
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -270,9 +270,9 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe
        playScaleDownAnim(anim, activity, endState);

        anim.setDuration(transitionLength * 2);
        activity.getStateManager().setCurrentAnimation(anim);
        AnimatorPlaybackController controller =
                AnimatorPlaybackController.wrap(anim, transitionLength * 2);
        activity.getStateManager().setCurrentUserControlledAnimation(controller);

        // Since we are changing the start position of the UI, reapply the state, at the end
        controller.setEndAction(() -> {
+15 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TI
import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS;
import static com.android.launcher3.util.RaceConditionTracker.ENTER;
import static com.android.launcher3.util.RaceConditionTracker.EXIT;
import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION;
import static com.android.quickstep.ActivityControlHelper.AnimationFactory.ShelfAnimState.HIDE;
import static com.android.quickstep.ActivityControlHelper.AnimationFactory.ShelfAnimState.PEEK;
@@ -654,8 +655,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
            mTransformParams.setProgress(shift).setOffsetX(offsetX).setOffsetScale(offsetScale);
            mClipAnimationHelper.applyTransform(mRecentsAnimationWrapper.targetSet,
                    mTransformParams);
            mRecentsAnimationWrapper.setWindowThresholdCrossed(
                    shift > 1 - UPDATE_SYSUI_FLAGS_THRESHOLD);
            updateSysUiFlags(shift);
        }

        if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
@@ -700,6 +700,18 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
                        ? 0 : (progress - mShiftAtGestureStart) / (1 - mShiftAtGestureStart));
    }

    private void updateSysUiFlags(float windowProgress) {
        if (mRecentsView != null) {
            // We will handle the sysui flags based on the centermost task view.
            mRecentsAnimationWrapper.setWindowThresholdCrossed(true);
            int sysuiFlags = windowProgress > 1 - UPDATE_SYSUI_FLAGS_THRESHOLD
                    ? 0
                    : mRecentsView.getTaskViewAt(mRecentsView.getPageNearestToCenterOfScreen())
                            .getThumbnail().getSysUiStatusNavFlags();
            mActivity.getSystemUiController().updateUiState(UI_STATE_OVERVIEW, sysuiFlags);
        }
    }

    @Override
    public void onRecentsAnimationStart(SwipeAnimationTargetSet targetSet) {
        DeviceProfile dp = InvariantDeviceProfile.INSTANCE.get(mContext).getDeviceProfile(mContext);
@@ -1091,6 +1103,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
                        windowAlphaThreshold, mClipAnimationHelper.getCurrentCornerRadius(), false);
            }

            updateSysUiFlags(Math.max(progress, mCurrentShift.value));
        });
        anim.addAnimatorListener(new AnimationSuccessListener() {
            @Override