Hide status bar in bouncer

Also, it gets faded in synchronously with the other unlock
animations.

Bug: 15407838
Change-Id: Ie161dfe970a2b4035a2d4cc7bb847285160cf691
This commit is contained in:
Jorim Jaggi
2014-06-17 19:16:00 -07:00
parent ca48160138
commit 44cf91960d
3 changed files with 86 additions and 33 deletions

View File

@@ -18,7 +18,7 @@
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:detachWallpaper="true" android:shareInterpolator="false" android:startOffset="60">
android:detachWallpaper="true" android:shareInterpolator="false" android:startOffset="100">
<alpha
android:fromAlpha="0.0" android:toAlpha="1.0"
android:fillEnabled="true" android:fillBefore="true"

View File

@@ -82,7 +82,6 @@ import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewPropertyAnimator;
import android.view.ViewStub;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
@@ -260,6 +259,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
boolean mLeaveOpenOnKeyguardHide;
KeyguardIndicationController mKeyguardIndicationController;
private boolean mKeyguardFadingAway;
private long mKeyguardFadingAwayDelay;
private long mKeyguardFadingAwayDuration;
int mKeyguardMaxNotificationCount;
View mDateTimeView;
@@ -399,7 +402,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
private boolean mSettingsCancelled;
private boolean mSettingsClosing;
private boolean mVisible;
private boolean mWaitingForKeyguardExit;
private Interpolator mLinearOutSlowIn;
private Interpolator mAlphaOut = new PathInterpolator(0f, 0.4f, 1f, 1f);
private Interpolator mAlphaIn = new PathInterpolator(0f, 0f, 0.8f, 1f);
@@ -1453,7 +1458,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
private int adjustDisableFlags(int state) {
if (mExpandedVisible) {
if (mExpandedVisible || mBouncerShowing || mWaitingForKeyguardExit) {
state |= StatusBarManager.DISABLE_NOTIFICATION_ICONS;
state |= StatusBarManager.DISABLE_SYSTEM_INFO;
}
@@ -1501,19 +1506,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if ((diff & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
mSystemIconArea.animate().cancel();
if ((state & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) {
mSystemIconArea.animate()
.alpha(0f)
.withLayer()
.setDuration(160)
.setInterpolator(mAlphaIn)
.setListener(mMakeIconsInvisible);
animateStatusBarHide(mSystemIconArea);
} else {
mSystemIconArea.setVisibility(View.VISIBLE);
mSystemIconArea.animate()
.alpha(1f)
.withLayer()
.setInterpolator(mAlphaOut)
.setDuration(320);
animateStatusBarShow(mSystemIconArea);
}
}
@@ -1546,25 +1541,48 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (mTicking) {
haltTicker();
}
mNotificationIcons.animate()
.alpha(0f)
.withLayer()
.setDuration(160)
.setInterpolator(mAlphaIn)
.setListener(mMakeIconsInvisible)
.start();
animateStatusBarHide(mNotificationIcons);
} else {
mNotificationIcons.setVisibility(View.VISIBLE);
mNotificationIcons.animate()
.alpha(1f)
.withLayer()
.setInterpolator(mAlphaOut)
.setDuration(320);
animateStatusBarShow(mNotificationIcons);
}
}
}
/**
* Animates {@code v}, a view that is part of the status bar, out.
*/
private void animateStatusBarHide(View v) {
v.animate()
.alpha(0f)
.withLayer()
.setDuration(160)
.setInterpolator(mAlphaIn)
.setStartDelay(0)
.setListener(mMakeIconsInvisible)
.start();
}
/**
* Animates {@code v}, a view that is part of the status bar, in.
*/
private void animateStatusBarShow(View v) {
v.setVisibility(View.VISIBLE);
v.animate()
.alpha(1f)
.withLayer()
.setInterpolator(mAlphaOut)
.setDuration(320)
.setStartDelay(0);
// Synchronize the motion with the Keyguard fading if necessary.
if (mKeyguardFadingAway) {
v.animate()
.setDuration(mKeyguardFadingAwayDuration)
.setInterpolator(mLinearOutSlowIn)
.setStartDelay(mKeyguardFadingAwayDelay);
}
}
@Override
protected BaseStatusBar.H createHandler() {
return new PhoneStatusBar.H();
@@ -1666,6 +1684,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mStatusBarWindowManager.setStatusBarExpanded(true);
visibilityChanged(true);
mWaitingForKeyguardExit = false;
disable(mDisabledUnmodified);
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
}
@@ -1859,8 +1878,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
disable(mDisabledUnmodified);
showBouncer();
disable(mDisabledUnmodified);
}
public boolean interceptTouchEvent(MotionEvent event) {
@@ -2574,6 +2593,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (mQSPanel != null) mQSPanel.updateResources();
loadDimens();
mLinearOutSlowIn = AnimationUtils.loadInterpolator(
mContext, android.R.interpolator.linear_out_slow_in);
}
protected void loadDimens() {
@@ -2901,6 +2922,27 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
updateKeyguardState();
}
/**
* Notifies the status bar the Keyguard is fading away with the specified timings.
*
* @param delay the animation delay in miliseconds
* @param fadeoutDuration the duration of the exit animation, in milliseconds
*/
public void setKeyguardFadingAway(long delay, long fadeoutDuration) {
mKeyguardFadingAway = true;
mKeyguardFadingAwayDelay = delay;
mKeyguardFadingAwayDuration = fadeoutDuration;
mWaitingForKeyguardExit = false;
disable(mDisabledUnmodified);
}
/**
* Notifies that the Keyguard fading away animation is done.
*/
public void finishKeyguardFadingAway() {
mKeyguardFadingAway = false;
}
private void updatePublicMode() {
setLockscreenPublicMode(
(mStatusBarKeyguardViewManager.isShowing() ||
@@ -2975,6 +3017,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
private void showBouncer() {
if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) {
mWaitingForKeyguardExit = true;
mStatusBarKeyguardViewManager.dismiss();
}
}
@@ -3125,6 +3168,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mSystemIconArea.addView(mSystemIcons, 0);
}
@Override
public void setBouncerShowing(boolean bouncerShowing) {
super.setBouncerShowing(bouncerShowing);
disable(mDisabledUnmodified);
}
public void onScreenTurnedOff() {
mStackScroller.setAnimationsEnabled(false);
}

View File

@@ -190,19 +190,23 @@ public class StatusBarKeyguardViewManager {
*/
public void hide(long startTime, long fadeoutDuration) {
mShowing = false;
mPhoneStatusBar.hideKeyguard();
mStatusBarWindowManager.setKeyguardFadingAway(true);
mStatusBarWindowManager.setKeyguardShowing(false);
long uptimeMillis = SystemClock.uptimeMillis();
long delay = startTime - uptimeMillis;
if (delay < 0) {
delay = 0;
}
mPhoneStatusBar.setKeyguardFadingAway(delay, fadeoutDuration);
mPhoneStatusBar.hideKeyguard();
mStatusBarWindowManager.setKeyguardFadingAway(true);
mStatusBarWindowManager.setKeyguardShowing(false);
mBouncer.animateHide(delay, fadeoutDuration);
mScrimController.animateKeyguardFadingOut(delay, fadeoutDuration, new Runnable() {
@Override
public void run() {
mStatusBarWindowManager.setKeyguardFadingAway(false);
mPhoneStatusBar.finishKeyguardFadingAway();
}
});
mViewMediatorCallback.keyguardGone();