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

This commit is contained in:
TreeHugger Robot
2017-05-09 04:54:20 +00:00
committed by Android (Google) Code Review
5 changed files with 65 additions and 21 deletions

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -221,8 +221,11 @@ public abstract class PanelView extends FrameLayout {
public void setTouchDisabled(boolean disabled) {
mTouchDisabled = disabled;
if (mTouchDisabled && mTracking) {
onTrackingStopped(true /* expanded */);
if (mTouchDisabled) {
cancelHeightAnimator();
if (mTracking) {
onTrackingStopped(true /* expanded */);
}
}
}

View File

@@ -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;

View File

@@ -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;