Speedup unlock when authenticating with fingerprint

Change-Id: Ib76ff7a2a42cf6fc77848ef799c2a13b77cfebb2
This commit is contained in:
Jorim Jaggi
2015-04-16 14:57:34 -07:00
parent 1dfab471ed
commit f3b3bee129
6 changed files with 53 additions and 24 deletions

View File

@@ -171,6 +171,11 @@ public class KeyguardViewMediator extends SystemUI {
*/
private static final String KEYGUARD_ANALYTICS_SETTING = "keyguard_analytics";
/**
* How much faster we collapse the lockscreen when authenticating with fingerprint.
*/
private static final float FINGERPRINT_COLLAPSE_SPEEDUP_FACTOR = 1.3f;
/** The stream type that the lock sounds are tied to. */
private int mUiSoundsStreamType;
@@ -441,7 +446,8 @@ public class KeyguardViewMediator extends SystemUI {
if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
mViewMediatorCallback.keyguardDone(true);
} else {
mStatusBarKeyguardViewManager.animateCollapsePanels();
mStatusBarKeyguardViewManager.animateCollapsePanels(
FINGERPRINT_COLLAPSE_SPEEDUP_FACTOR);
}
};

View File

@@ -511,9 +511,10 @@ public class NotificationPanelView extends PanelView implements
}
@Override
protected void flingToHeight(float vel, boolean expand, float target) {
protected void flingToHeight(float vel, boolean expand, float target,
float collapseSpeedUpFactor) {
mHeadsUpTouchHelper.notifyFling(!expand);
super.flingToHeight(vel, expand, target);
super.flingToHeight(vel, expand, target, collapseSpeedUpFactor);
}
@Override

View File

@@ -140,7 +140,7 @@ public class PanelBar extends FrameLayout {
mPanelHolder.setSelectedPanel(mTouchingPanel);
for (PanelView pv : mPanels) {
if (pv != panel) {
pv.collapse(false /* delayed */);
pv.collapse(false /* delayed */, 1.0f /* speedUpFactor */);
}
}
}
@@ -186,11 +186,11 @@ public class PanelBar extends FrameLayout {
(fullyOpenedPanel!=null)?" fullyOpened":"", fullyClosed?" fullyClosed":"");
}
public void collapseAllPanels(boolean animate, boolean delayed) {
public void collapseAllPanels(boolean animate, boolean delayed, float speedUpFactor) {
boolean waiting = false;
for (PanelView pv : mPanels) {
if (animate && !pv.isFullyCollapsed()) {
pv.collapse(delayed);
pv.collapse(delayed, speedUpFactor);
waiting = true;
} else {
pv.resetViews();

View File

@@ -101,6 +101,12 @@ public abstract class PanelView extends FrameLayout {
private boolean mPeekPending;
private boolean mCollapseAfterPeek;
/**
* Speed-up factor to be used when {@link #mFlingCollapseRunnable} runs the next time.
*/
private float mNextCollapseSpeedUpFactor = 1.0f;
private boolean mExpanding;
private boolean mGestureWaitForTouchSlop;
private Runnable mPeekRunnable = new Runnable() {
@@ -164,7 +170,7 @@ public abstract class PanelView extends FrameLayout {
postOnAnimation(new Runnable() {
@Override
public void run() {
collapse(false /* delayed */);
collapse(false /* delayed */, 1.0f /* speedUpFactor */);
}
});
}
@@ -563,12 +569,17 @@ public abstract class PanelView extends FrameLayout {
}
protected void fling(float vel, boolean expand) {
cancelPeek();
float target = expand ? getMaxPanelHeight() : 0.0f;
flingToHeight(vel, expand, target);
fling(vel, expand, 1.0f /* collapseSpeedUpFactor */);
}
protected void flingToHeight(float vel, boolean expand, float target) {
protected void fling(float vel, boolean expand, float collapseSpeedUpFactor) {
cancelPeek();
float target = expand ? getMaxPanelHeight() : 0.0f;
flingToHeight(vel, expand, target, collapseSpeedUpFactor);
}
protected void flingToHeight(float vel, boolean expand, float target,
float collapseSpeedUpFactor) {
// Hack to make the expand transition look nice when clear all button is visible - we make
// the animation only to the last notification, and then jump to the maximum panel height so
// clear all just fades in and the decelerating motion is towards the last notification.
@@ -600,7 +611,8 @@ public abstract class PanelView extends FrameLayout {
// Make it shorter if we run a canned animation
if (vel == 0) {
animator.setDuration((long)
(animator.getDuration() * getCannedFlingDurationFactor()));
(animator.getDuration() * getCannedFlingDurationFactor()
/ collapseSpeedUpFactor));
}
}
animator.addListener(new AnimatorListenerAdapter() {
@@ -745,7 +757,7 @@ public abstract class PanelView extends FrameLayout {
mBar = panelBar;
}
public void collapse(boolean delayed) {
public void collapse(boolean delayed, float speedUpFactor) {
if (DEBUG) logf("collapse: " + this);
if (mPeekPending || mPeekAnimator != null) {
mCollapseAfterPeek = true;
@@ -761,9 +773,10 @@ public abstract class PanelView extends FrameLayout {
mClosing = true;
notifyExpandingStarted();
if (delayed) {
mNextCollapseSpeedUpFactor = speedUpFactor;
postDelayed(mFlingCollapseRunnable, 120);
} else {
fling(0, false /* expand */);
fling(0, false /* expand */, speedUpFactor);
}
}
}
@@ -771,7 +784,7 @@ public abstract class PanelView extends FrameLayout {
private final Runnable mFlingCollapseRunnable = new Runnable() {
@Override
public void run() {
fling(0, false /* expand */);
fling(0, false /* expand */, mNextCollapseSpeedUpFactor);
}
};
@@ -975,7 +988,7 @@ public abstract class PanelView extends FrameLayout {
protected final Runnable mPostCollapseRunnable = new Runnable() {
@Override
public void run() {
collapse(false /* delayed */);
collapse(false /* delayed */, 1.0f /* speedUpFactor */);
}
};

View File

@@ -1981,14 +1981,20 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
public void animateCollapsePanels(int flags) {
animateCollapsePanels(flags, false /* force */, false /* delayed */);
animateCollapsePanels(flags, false /* force */, false /* delayed */,
1.0f /* speedUpFactor */);
}
public void animateCollapsePanels(int flags, boolean force) {
animateCollapsePanels(flags, force, false /* delayed*/);
animateCollapsePanels(flags, force, false /* delayed */, 1.0f /* speedUpFactor */);
}
public void animateCollapsePanels(int flags, boolean force, boolean delayed) {
animateCollapsePanels(flags, force, delayed, 1.0f /* speedUpFactor */);
}
public void animateCollapsePanels(int flags, boolean force, boolean delayed,
float speedUpFactor) {
if (!force &&
(mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED)) {
runPostCollapseRunnables();
@@ -2012,7 +2018,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mStatusBarWindowManager.setStatusBarFocusable(false);
mStatusBarWindow.cancelExpandHelper();
mStatusBarView.collapseAllPanels(true /* animate */, delayed);
mStatusBarView.collapseAllPanels(true /* animate */, delayed, speedUpFactor);
}
}
@@ -2055,7 +2061,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
public void animateCollapseQuickSettings() {
if (mState == StatusBarState.SHADE) {
mStatusBarView.collapseAllPanels(true, false /* delayed */);
mStatusBarView.collapseAllPanels(true, false /* delayed */, 1.0f /* speedUpFactor */);
}
}
@@ -2068,7 +2074,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
// Ensure the panel is fully collapsed (just in case; bug 6765842, 7260868)
mStatusBarView.collapseAllPanels(/*animate=*/ false, false /* delayed*/);
mStatusBarView.collapseAllPanels(/*animate=*/ false, false /* delayed*/,
1.0f /* speedUpFactor */);
mNotificationPanel.closeQs();
@@ -2158,7 +2165,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mStatusBarWindowState = state;
if (DEBUG_WINDOW_STATE) Log.d(TAG, "Status bar " + windowStateToString(state));
if (!showing && mState == StatusBarState.SHADE) {
mStatusBarView.collapseAllPanels(false /* animate */, false /* delayed */);
mStatusBarView.collapseAllPanels(false /* animate */, false /* delayed */,
1.0f /* speedUpFactor */);
}
}
if (mNavigationBarView != null

View File

@@ -441,7 +441,8 @@ public class StatusBarKeyguardViewManager {
mPhoneStatusBar.keyguardGoingAway();
}
public void animateCollapsePanels() {
mPhoneStatusBar.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */);
public void animateCollapsePanels(float speedUpFactor) {
mPhoneStatusBar.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */,
false /* delayed */, speedUpFactor);
}
}