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

Commit dc4d27df authored by Justin Weir's avatar Justin Weir Committed by Android (Google) Code Review
Browse files

Merge "Move tracking booleans to ShadeRepository" into main

parents 71d19fb9 d3c939a9
Loading
Loading
Loading
Loading
+25 −25
Original line number Diff line number Diff line
@@ -235,7 +235,6 @@ import kotlin.Unit;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;

@@ -367,7 +366,6 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
    private float mExpandedHeight = 0;
    /** The current squish amount for the predictive back animation */
    private float mCurrentBackProgress = 0.0f;
    private boolean mTracking;
    @Deprecated
    private KeyguardBottomAreaView mKeyguardBottomArea;
    private boolean mExpanding;
@@ -1001,7 +999,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
        // cause blurring. This will eventually be re-enabled by the panel view on
        // ACTION_UP, since the user's finger might still be down after a swipe to
        // unlock gesture, and we don't want that to cause blurring either.
        mDepthController.setBlursDisabledForUnlock(mTracking);
        mDepthController.setBlursDisabledForUnlock(isTracking());

        if (playingCannedAnimation && !isWakeAndUnlockNotFromDream) {
            // Hide the panel so it's not in the way or the surface behind the
@@ -2544,10 +2542,10 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
    private void onHeightUpdated(float expandedHeight) {
        if (expandedHeight <= 0) {
            mShadeLog.logExpansionChanged("onHeightUpdated: fully collapsed.",
                    mExpandedFraction, isExpanded(), mTracking, mExpansionDragDownAmountPx);
                    mExpandedFraction, isExpanded(), isTracking(), mExpansionDragDownAmountPx);
        } else if (isFullyExpanded()) {
            mShadeLog.logExpansionChanged("onHeightUpdated: fully expanded.",
                    mExpandedFraction, isExpanded(), mTracking, mExpansionDragDownAmountPx);
                    mExpandedFraction, isExpanded(), isTracking(), mExpansionDragDownAmountPx);
        }
        if (!mQsController.getExpanded() || mQsController.isExpandImmediate()
                || mIsExpandingOrCollapsing && mQsController.getExpandedWhenExpandingStarted()) {
@@ -2740,7 +2738,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
            mAnimateAfterExpanding = animate;
            mUpdateFlingOnLayout = false;
            abortAnimations();
            if (mTracking) {
            if (isTracking()) {
                // The panel is expanded after this call.
                onTrackingStopped(true /* expands */);
            }
@@ -2827,7 +2825,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump

    private void onTrackingStarted() {
        endClosing();
        mTracking = true;
        mShadeRepository.setLegacyShadeTracking(true);
        mTrackingStartedListener.onTrackingStarted();
        notifyExpandingStarted();
        updateExpansionAndVisibility();
@@ -2841,7 +2839,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
    }

    private void onTrackingStopped(boolean expand) {
        mTracking = false;
        mShadeRepository.setLegacyShadeTracking(false);

        updateExpansionAndVisibility();
        if (expand) {
@@ -3013,7 +3011,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
    }

    private void updateExpandedHeight(float expandedHeight) {
        if (mTracking) {
        if (isTracking()) {
            mNotificationStackScrollLayoutController
                    .setExpandingVelocity(getCurrentExpandVelocity());
        }
@@ -3102,7 +3100,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
        mTouchDisabled = disabled;
        if (mTouchDisabled) {
            cancelHeightAnimator();
            if (mTracking) {
            if (isTracking()) {
                onTrackingStopped(true /* expanded */);
            }
            notifyExpandingFinished();
@@ -3341,7 +3339,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump

    @Override
    public void blockExpansionForCurrentTouch() {
        mBlockingExpansionForCurrentTouch = mTracking;
        mBlockingExpansionForCurrentTouch = isTracking();
    }

    @Override
@@ -3355,7 +3353,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
        ipw.print("mIsLaunchAnimationRunning="); ipw.println(mIsLaunchAnimationRunning);
        ipw.print("mOverExpansion="); ipw.println(mOverExpansion);
        ipw.print("mExpandedHeight="); ipw.println(mExpandedHeight);
        ipw.print("mTracking="); ipw.println(mTracking);
        ipw.print("isTracking()="); ipw.println(isTracking());
        ipw.print("mExpanding="); ipw.println(mExpanding);
        ipw.print("mSplitShadeEnabled="); ipw.println(mSplitShadeEnabled);
        ipw.print("mKeyguardNotificationBottomPadding=");
@@ -3693,7 +3691,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
            mQsController.beginJankMonitoring(isFullyCollapsed());
        }
        mInitialOffsetOnTouch = expandedHeight;
        if (!mTracking || isFullyCollapsed()) {
        if (!isTracking() || isFullyCollapsed()) {
            mInitialExpandY = newY;
            mInitialExpandX = newX;
        } else {
@@ -3711,7 +3709,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
        mShadeLog.logEndMotionEvent("endMotionEvent called", forceCancel, false);
        mTrackingPointer = -1;
        mAmbientState.setSwipingUp(false);
        if ((mTracking && mTouchSlopExceeded) || Math.abs(x - mInitialExpandX) > mTouchSlop
        if ((isTracking() && mTouchSlopExceeded) || Math.abs(x - mInitialExpandX) > mTouchSlop
                || Math.abs(y - mInitialExpandY) > mTouchSlop
                || (!isFullyExpanded() && !isFullyCollapsed())
                || event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) {
@@ -3875,7 +3873,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
            return;
        }

        if (mTracking && !(mBlockingExpansionForCurrentTouch
        if (isTracking() && !(mBlockingExpansionForCurrentTouch
                || mQsController.isTrackingBlocked())) {
            return;
        }
@@ -3901,7 +3899,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
            float maxPanelHeight = getMaxPanelTransitionDistance();
            if (mHeightAnimator == null) {
                // Split shade has its own overscroll logic
                if (mTracking) {
                if (isTracking()) {
                    float overExpansionPixels = Math.max(0, h - maxPanelHeight);
                    setOverExpansionInternal(overExpansionPixels, true /* isFromGesture */);
                }
@@ -3988,12 +3986,12 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
    }

    public boolean isTracking() {
        return mTracking;
        return mShadeRepository.getLegacyShadeTracking().getValue();
    }

    @Override
    public boolean canBeCollapsed() {
        return !isFullyCollapsed() && !mTracking && !mClosing;
        return !isFullyCollapsed() && !isTracking() && !mClosing;
    }

    @Override
@@ -4085,7 +4083,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
    @Override
    public void updateExpansionAndVisibility() {
        mShadeExpansionStateManager.onPanelExpansionChanged(
                mExpandedFraction, isExpanded(), mTracking, mExpansionDragDownAmountPx);
                mExpandedFraction, isExpanded(), isTracking(), mExpansionDragDownAmountPx);

        updateVisibility();
    }
@@ -4095,7 +4093,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
        return mExpandedFraction > 0f
                || mInstantExpanding
                || isPanelVisibleBecauseOfHeadsUp()
                || mTracking
                || isTracking()
                || mHeightAnimator != null
                || isPanelVisibleBecauseScrimIsAnimatingOff()
                && !mIsSpringBackAnimation;
@@ -4798,7 +4796,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
                                + " mAnimatingOnDown: true, mClosing: true");
                        return true;
                    }
                    if (!mTracking || isFullyCollapsed()) {
                    if (!isTracking() || isFullyCollapsed()) {
                        mInitialExpandY = y;
                        mInitialExpandX = x;
                    } else {
@@ -4975,7 +4973,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump

            // If dragging should not expand the notifications shade, then return false.
            if (!mNotificationsDragEnabled) {
                if (mTracking) {
                if (isTracking()) {
                    // Turn off tracking if it's on or the shade can get stuck in the down position.
                    onTrackingStopped(true /* expand */);
                }
@@ -5101,7 +5099,9 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
                            && (Math.abs(h) > Math.abs(x - mInitialExpandX)
                            || mIgnoreXTouchSlop)) {
                        mTouchSlopExceeded = true;
                        if (mGestureWaitForTouchSlop && !mTracking && !mCollapsedAndHeadsUpOnDown) {
                        if (mGestureWaitForTouchSlop
                                && !isTracking()
                                && !mCollapsedAndHeadsUpOnDown) {
                            if (mInitialOffsetOnTouch != 0f) {
                                startExpandMotion(x, y, false /* startTracking */, mExpandedHeight);
                                h = 0;
@@ -5116,7 +5116,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
                        mTouchAboveFalsingThreshold = true;
                        mUpwardsWhenThresholdReached = isDirectionUpwards(x, y);
                    }
                    if ((!mGestureWaitForTouchSlop || mTracking)
                    if ((!mGestureWaitForTouchSlop || isTracking())
                            && !(mBlockingExpansionForCurrentTouch
                            || mQsController.isTrackingBlocked())) {
                        // Count h==0 as part of swipe-up,
@@ -5142,7 +5142,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
                    }
                    break;
            }
            return !mGestureWaitForTouchSlop || mTracking;
            return !mGestureWaitForTouchSlop || isTracking();
        }
    }

+17 −15
Original line number Diff line number Diff line
@@ -201,8 +201,6 @@ public class QuickSettingsController implements Dumpable {
    private float mInitialTouchY;
    /** whether current touch Y delta is above falsing threshold */
    private boolean mTouchAboveFalsingThreshold;
    /** whether we are tracking a touch on QS container */
    private boolean mTracking;
    /** pointerId of the pointer we're currently tracking */
    private int mTrackingPointer;

@@ -600,7 +598,7 @@ public class QuickSettingsController implements Dumpable {

    @VisibleForTesting
    boolean isTracking() {
        return mTracking;
        return mShadeRepository.getLegacyQsTracking().getValue();
    }

    public boolean getFullyExpanded() {
@@ -613,10 +611,14 @@ public class QuickSettingsController implements Dumpable {
        // split shade as there QS are always expanded so every collapsing motion is motion from
        // expanded QS to closed panel
        return mExpandImmediate || (mExpanded
                && !mTracking && !isExpansionAnimating()
                && !isTracking() && !isExpansionAnimating()
                && !mExpansionFromOverscroll);
    }

    private void setTracking(boolean tracking) {
        mShadeRepository.setLegacyQsTracking(tracking);
    }

    private boolean isQsFragmentCreated() {
        return mQs != null;
    }
@@ -1601,7 +1603,7 @@ public class QuickSettingsController implements Dumpable {
        if (action == MotionEvent.ACTION_DOWN && expandedShadeCollapsedQs) {
            // Down in the empty area while fully expanded - go to QS.
            mShadeLog.logMotionEvent(event, "handleQsTouch: down action, QS tracking enabled");
            mTracking = true;
            setTracking(true);
            traceQsJank(true, false);
            mConflictingExpansionGesture = true;
            onExpansionStarted();
@@ -1616,9 +1618,9 @@ public class QuickSettingsController implements Dumpable {
        // as sometimes the qsExpansionFraction can be a tiny value instead of 0 when in QQS.
        if (!mSplitShadeEnabled && !mLastShadeFlingWasExpanding
                && computeExpansionFraction() <= 0.01 && mShadeExpandedFraction < 1.0) {
            mTracking = false;
            setTracking(false);
        }
        if (!isExpandImmediate() && mTracking) {
        if (!isExpandImmediate() && isTracking()) {
            onTouch(event);
            if (!mConflictingExpansionGesture && !mSplitShadeEnabled) {
                return true;
@@ -1662,7 +1664,7 @@ public class QuickSettingsController implements Dumpable {
            if (shouldQuickSettingsIntercept(event.getX(), event.getY(), -1)) {
                mShadeLog.logMotionEvent(event,
                        "handleQsDown: down action, QS tracking enabled");
                mTracking = true;
                setTracking(true);
                onExpansionStarted();
                mInitialHeightOnTouch = mExpansionHeight;
                mInitialTouchY = event.getY();
@@ -1688,7 +1690,7 @@ public class QuickSettingsController implements Dumpable {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                mShadeLog.logMotionEvent(event, "onQsTouch: down action, QS tracking enabled");
                mTracking = true;
                setTracking(true);
                traceQsJank(true, false);
                mInitialTouchY = y;
                mInitialTouchX = x;
@@ -1725,7 +1727,7 @@ public class QuickSettingsController implements Dumpable {
            case MotionEvent.ACTION_CANCEL:
                mShadeLog.logMotionEvent(event,
                        "onQsTouch: up/cancel action, QS tracking disabled");
                mTracking = false;
                setTracking(false);
                mTrackingPointer = -1;
                trackMovement(event);
                float fraction = computeExpansionFraction();
@@ -1780,7 +1782,7 @@ public class QuickSettingsController implements Dumpable {
                    mInitialHeightOnTouch = mExpansionHeight;
                    mShadeLog.logMotionEvent(event,
                            "onQsIntercept: down action, QS tracking enabled");
                    mTracking = true;
                    setTracking(true);
                    traceQsJank(true, false);
                    mNotificationStackScrollLayoutController.cancelLongPress();
                }
@@ -1799,7 +1801,7 @@ public class QuickSettingsController implements Dumpable {
            case MotionEvent.ACTION_MOVE:
                final float h = y - mInitialTouchY;
                trackMovement(event);
                if (mTracking) {
                if (isTracking()) {
                    // Already tracking because onOverscrolled was called. We need to update here
                    // so we don't stop for a frame until the next touch event gets handled in
                    // onTouchEvent.
@@ -1819,7 +1821,7 @@ public class QuickSettingsController implements Dumpable {
                        mInitialTouchX, mInitialTouchY, h)) {
                    mPanelView.getParent().requestDisallowInterceptTouchEvent(true);
                    mShadeLog.onQsInterceptMoveQsTrackingEnabled(h);
                    mTracking = true;
                    setTracking(true);
                    traceQsJank(true, false);
                    onExpansionStarted();
                    mPanelViewControllerLazy.get().notifyExpandingFinished();
@@ -1839,7 +1841,7 @@ public class QuickSettingsController implements Dumpable {
            case MotionEvent.ACTION_UP:
                trackMovement(event);
                mShadeLog.logMotionEvent(event, "onQsIntercept: up action, QS tracking disabled");
                mTracking = false;
                setTracking(false);
                break;
        }
        return false;
@@ -2065,7 +2067,7 @@ public class QuickSettingsController implements Dumpable {
        ipw.print("mTouchAboveFalsingThreshold=");
        ipw.println(mTouchAboveFalsingThreshold);
        ipw.print("mTracking=");
        ipw.println(mTracking);
        ipw.println(isTracking());
        ipw.print("mTrackingPointer=");
        ipw.println(mTrackingPointer);
        ipw.print("mExpanded=");
+42 −0
Original line number Diff line number Diff line
@@ -56,6 +56,30 @@ interface ShadeRepository {
    @Deprecated("Use ShadeInteractor.shadeExpansion instead")
    val legacyShadeExpansion: StateFlow<Float>

    /**
     * NotificationPanelViewController.mTracking as a flow. "Tracking" means that the user is moving
     * the shade up or down with a pointer. Going forward, this concept will be replaced by checks
     * for whether a transition was driven by user input instead of whether a pointer is currently
     * touching the screen, i.e. after the user has lifted their finger to fling the shade, these
     * values would be different.
     */
    @Deprecated("Use ShadeInteractor instead") val legacyShadeTracking: StateFlow<Boolean>

    /**
     * QuickSettingsController.mTracking as a flow. "Tracking" means that the user is moving quick
     * settings up or down with a pointer. Going forward, this concept will be replaced by checks
     * for whether a transition was driven by user input instead of whether a pointer is currently
     * touching the screen, i.e. after the user has lifted their finger to fling the QS, these
     * values would be different.
     */
    @Deprecated("Use ShadeInteractor instead") val legacyQsTracking: StateFlow<Boolean>

    /** Sets whether the user is moving Quick Settings with a pointer */
    fun setLegacyQsTracking(legacyQsTracking: Boolean)

    /** Sets whether the user is moving the shade with a pointer */
    fun setLegacyShadeTracking(tracking: Boolean)

    /** Amount shade has expanded with regard to the UDFPS location */
    val udfpsTransitionToFullShadeProgress: StateFlow<Float>

@@ -123,6 +147,24 @@ constructor(shadeExpansionStateManager: ShadeExpansionStateManager) : ShadeRepos
    @Deprecated("Use ShadeInteractor.shadeExpansion instead")
    override val legacyShadeExpansion: StateFlow<Float> = _legacyShadeExpansion.asStateFlow()

    private val _legacyShadeTracking = MutableStateFlow(false)
    @Deprecated("Use ShadeInteractor instead")
    override val legacyShadeTracking: StateFlow<Boolean> = _legacyShadeTracking.asStateFlow()

    private val _legacyQsTracking = MutableStateFlow(false)
    @Deprecated("Use ShadeInteractor instead")
    override val legacyQsTracking: StateFlow<Boolean> = _legacyQsTracking.asStateFlow()

    @Deprecated("Should only be called by NPVC and tests")
    override fun setLegacyQsTracking(legacyQsTracking: Boolean) {
        _legacyQsTracking.value = legacyQsTracking
    }

    @Deprecated("Should only be called by NPVC and tests")
    override fun setLegacyShadeTracking(tracking: Boolean) {
        _legacyShadeTracking.value = tracking
    }

    override fun setQsExpansion(qsExpansion: Float) {
        _qsExpansion.value = qsExpansion
    }
+3 −1
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.qs.QSFragment;
import com.android.systemui.screenrecord.RecordingController;
import com.android.systemui.shade.data.repository.FakeShadeRepository;
import com.android.systemui.shade.data.repository.ShadeRepository;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
import com.android.systemui.shade.transition.ShadeTransitionController;
@@ -321,7 +322,6 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase {
            mEmptySpaceClickListenerCaptor;
    @Mock protected ActivityStarter mActivityStarter;
    @Mock protected KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor;
    @Mock protected ShadeRepository mShadeRepository;
    @Mock private ShadeInteractor mShadeInteractor;
    @Mock private JavaAdapter mJavaAdapter;
    @Mock private CastController mCastController;
@@ -342,6 +342,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase {
    protected Handler mMainHandler;
    protected View.OnLayoutChangeListener mLayoutChangeListener;
    protected KeyguardStatusViewController mKeyguardStatusViewController;
    protected ShadeRepository mShadeRepository;

    protected final FalsingManagerFake mFalsingManager = new FalsingManagerFake();
    protected final Optional<SysUIUnfoldComponent> mSysUIUnfoldComponent = Optional.empty();
@@ -363,6 +364,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase {
        mFakeKeyguardRepository = keyguardInteractorDeps.getRepository();
        mKeyguardBottomAreaInteractor = new KeyguardBottomAreaInteractor(mFakeKeyguardRepository);
        mKeyguardInteractor = keyguardInteractorDeps.getKeyguardInteractor();
        mShadeRepository = new FakeShadeRepository();

        SystemClock systemClock = new FakeSystemClock();
        mStatusBarStateController = new StatusBarStateControllerImpl(mUiEventLogger, mDumpManager,
+18 −0
Original line number Diff line number Diff line
@@ -150,6 +150,24 @@ class ShadeRepositoryImplTest : SysuiTestCase() {
            assertThat(underTest.legacyShadeExpansion.value).isEqualTo(1f)
        }

    @Test
    fun updateLegacyShadeTracking() =
        testScope.runTest {
            assertThat(underTest.legacyShadeTracking.value).isEqualTo(false)

            underTest.setLegacyShadeTracking(true)
            assertThat(underTest.legacyShadeTracking.value).isEqualTo(true)
        }

    @Test
    fun updateLegacyQsTracking() =
        testScope.runTest {
            assertThat(underTest.legacyQsTracking.value).isEqualTo(false)

            underTest.setLegacyQsTracking(true)
            assertThat(underTest.legacyQsTracking.value).isEqualTo(true)
        }

    @Test
    fun updateUdfpsTransitionToFullShadeProgress() =
        testScope.runTest {
Loading