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

Commit 9bf8edfc authored by Selim Cinek's avatar Selim Cinek Committed by android-build-merger
Browse files

Merge "Handling the touch better when the screen turns off" into oc-dev

am: bd54d2c2

Change-Id: Id015cd13042de40521b2d5b951ce39cab53d5e49
parents 5c6486b3 bd54d2c2
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -168,7 +168,8 @@ public class KeyguardAffordanceHelper {
                        distance = mTranslationOnDown + distance;
                        distance = Math.max(0, distance);
                    }
                    setTranslation(distance, false /* isReset */, false /* animateReset */);
                    setTranslation(distance, false /* isReset */, false /* animateReset */,
                            false /* force */);
                }
                break;

@@ -373,11 +374,12 @@ public class KeyguardAffordanceHelper {
        targetView.finishAnimation(velocity, mAnimationEndRunnable);
    }

    private void setTranslation(float translation, boolean isReset, boolean animateReset) {
    private void setTranslation(float translation, boolean isReset, boolean animateReset,
            boolean force) {
        translation = rightSwipePossible() ? translation : Math.max(0, translation);
        translation = leftSwipePossible() ? translation : Math.min(0, translation);
        float absTranslation = Math.abs(translation);
        if (translation != mTranslation || isReset) {
        if (translation != mTranslation || isReset || force) {
            KeyguardAffordanceView targetView = translation > 0 ? mLeftIcon : mRightIcon;
            KeyguardAffordanceView otherView = translation > 0 ? mRightIcon : mLeftIcon;
            float alpha = absTranslation / getMinTranslationAmount();
@@ -392,15 +394,15 @@ public class KeyguardAffordanceHelper {
            boolean slowAnimation = isReset && isBelowFalsingThreshold();
            if (!isReset) {
                updateIcon(targetView, radius, alpha + fadeOutAlpha * targetView.getRestingAlpha(),
                        false, false, false, false);
                        false, false, force, false);
            } else {
                updateIcon(targetView, 0.0f, fadeOutAlpha * targetView.getRestingAlpha(),
                        animateIcons, slowAnimation, false, forceNoCircleAnimation);
                        animateIcons, slowAnimation, force, forceNoCircleAnimation);
            }
            updateIcon(otherView, 0.0f, fadeOutAlpha * otherView.getRestingAlpha(),
                    animateIcons, slowAnimation, false, forceNoCircleAnimation);
                    animateIcons, slowAnimation, force, forceNoCircleAnimation);
            updateIcon(mCenterIcon, 0.0f, fadeOutAlpha * mCenterIcon.getRestingAlpha(),
                    animateIcons, slowAnimation, false, forceNoCircleAnimation);
                    animateIcons, slowAnimation, force, forceNoCircleAnimation);

            mTranslation = translation;
        }
@@ -508,8 +510,12 @@ public class KeyguardAffordanceHelper {
    }

    public void reset(boolean animate) {
        reset(animate, false /* force */);
    }

    public void reset(boolean animate, boolean force) {
        cancelAnimation();
        setTranslation(0.0f, true, animate);
        setTranslation(0.0f, true, animate, force);
        mMotionCancelled = true;
        if (mSwipingInProgress) {
            mCallback.onSwipingAborted();
@@ -517,6 +523,10 @@ public class KeyguardAffordanceHelper {
        }
    }

    public void resetImmediately() {
        reset(false /* animate */, true /* force */);
    }

    public boolean isSwipingInProgress() {
        return mSwipingInProgress;
    }
+8 −1
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.keyguard.KeyguardStatusView;
import com.android.systemui.DejankUtils;
import com.android.systemui.EventLogTags;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.classifier.FalsingManager;
@@ -2463,6 +2462,14 @@ public class NotificationPanelView extends PanelView implements
        }
    };

    @Override
    public void setTouchDisabled(boolean disabled) {
        super.setTouchDisabled(disabled);
        if (disabled && mAffordanceHelper.isSwipingInProgress() && !mIsLaunchTransitionRunning) {
            mAffordanceHelper.resetImmediately();
        }
    }

    public void setDark(boolean dark) {
        mDark = dark;
        mKeyguardStatusView.setDark(dark);
+5 −2
Original line number Diff line number Diff line
@@ -221,10 +221,13 @@ public abstract class PanelView extends FrameLayout {

    public void setTouchDisabled(boolean disabled) {
        mTouchDisabled = disabled;
        if (mTouchDisabled && mTracking) {
        if (mTouchDisabled) {
            cancelHeightAnimator();
            if (mTracking) {
                onTrackingStopped(true /* expanded */);
            }
        }
    }

    public void startExpandLatencyTracking() {
        if (LatencyTracker.isEnabled(mContext)) {
+6 −7
Original line number Diff line number Diff line
@@ -4056,13 +4056,6 @@ public class StatusBar extends SystemUI implements DemoMode,
            setBarState(StatusBarState.KEYGUARD);
        }
        updateKeyguardState(false /* goingToFullShade */, false /* fromShadeLocked */);
        if (!mDeviceInteractive) {

            // If the screen is off already, we need to disable touch events because these might
            // collapse the panel after we expanded it, and thus we would end up with a blank
            // Keyguard.
            mNotificationPanel.setTouchDisabled(true);
        }
        if (mState == StatusBarState.KEYGUARD) {
            instantExpandNotificationsPanel();
        } else if (mState == StatusBarState.FULLSCREEN_USER_SWITCHER) {
@@ -4861,6 +4854,12 @@ public class StatusBar extends SystemUI implements DemoMode,
        mStackScroller.setAnimationsEnabled(false);
        mVisualStabilityManager.setScreenOn(false);
        updateVisibleToUser();

        // We need to disable touch events because these might
        // collapse the panel after we expanded it, and thus we would end up with a blank
        // Keyguard.
        mNotificationPanel.setTouchDisabled(true);
        mStatusBarWindow.cancelCurrentTouch();
        if (mLaunchCameraOnFinishedGoingToSleep) {
            mLaunchCameraOnFinishedGoingToSleep = false;

+28 −3
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.os.IBinder;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.ActionMode;
import android.view.InputDevice;
import android.view.InputQueue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -84,6 +85,8 @@ public class StatusBarWindowView extends FrameLayout {
    private ActionMode mFloatingActionMode;
    private FloatingToolbar mFloatingToolbar;
    private ViewTreeObserver.OnPreDrawListener mFloatingToolbarPreDrawListener;
    private boolean mTouchCancelled;
    private boolean mTouchActive;

    public StatusBarWindowView(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -239,10 +242,20 @@ public class StatusBarWindowView extends FrameLayout {

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getActionMasked() == MotionEvent.ACTION_DOWN
                && mNotificationPanel.isFullyCollapsed()) {
        boolean isDown = ev.getActionMasked() == MotionEvent.ACTION_DOWN;
        if (isDown && mNotificationPanel.isFullyCollapsed()) {
            mNotificationPanel.startExpandLatencyTracking();
        }
        if (isDown) {
            mTouchActive = true;
            mTouchCancelled = false;
        } else if (ev.getActionMasked() == MotionEvent.ACTION_UP
                || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
            mTouchActive = false;
        }
        if (mTouchCancelled) {
            return false;
        }
        mFalsingManager.onTouchEvent(ev, getWidth(), getHeight());
        if (mBrightnessMirror != null && mBrightnessMirror.getVisibility() == VISIBLE) {
            // Disallow new pointers while the brightness mirror is visible. This is so that you
@@ -252,7 +265,7 @@ public class StatusBarWindowView extends FrameLayout {
                return false;
            }
        }
        if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
        if (isDown) {
            mStackScrollLayout.closeControlsIfOutsideTouch(ev);
        }
        if (mService.isDozing()) {
@@ -349,6 +362,18 @@ public class StatusBarWindowView extends FrameLayout {
        }
    }

    public void cancelCurrentTouch() {
        if (mTouchActive) {
            final long now = SystemClock.uptimeMillis();
            MotionEvent event = MotionEvent.obtain(now, now,
                    MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
            event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
            dispatchTouchEvent(event);
            event.recycle();
            mTouchCancelled = true;
        }
    }

    public class LayoutParams extends FrameLayout.LayoutParams {

        public boolean ignoreRightInset;