Hide status bar in bouncer
Also, it gets faded in synchronously with the other unlock
animations.
Bug: 15407838
Change-Id: Ie161dfe970a2b4035a2d4cc7bb847285160cf691
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 1da7dab..0a10f28 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -82,7 +82,6 @@
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 @@
boolean mLeaveOpenOnKeyguardHide;
KeyguardIndicationController mKeyguardIndicationController;
+ private boolean mKeyguardFadingAway;
+ private long mKeyguardFadingAwayDelay;
+ private long mKeyguardFadingAwayDuration;
+
int mKeyguardMaxNotificationCount;
View mDateTimeView;
@@ -399,7 +402,9 @@
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 @@
}
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 @@
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 @@
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 @@
mStatusBarWindowManager.setStatusBarExpanded(true);
visibilityChanged(true);
+ mWaitingForKeyguardExit = false;
disable(mDisabledUnmodified);
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
}
@@ -1859,8 +1878,8 @@
}
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
- disable(mDisabledUnmodified);
showBouncer();
+ disable(mDisabledUnmodified);
}
public boolean interceptTouchEvent(MotionEvent event) {
@@ -2574,6 +2593,8 @@
if (mQSPanel != null) mQSPanel.updateResources();
loadDimens();
+ mLinearOutSlowIn = AnimationUtils.loadInterpolator(
+ mContext, android.R.interpolator.linear_out_slow_in);
}
protected void loadDimens() {
@@ -2901,6 +2922,27 @@
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 @@
private void showBouncer() {
if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) {
+ mWaitingForKeyguardExit = true;
mStatusBarKeyguardViewManager.dismiss();
}
}
@@ -3125,6 +3168,12 @@
mSystemIconArea.addView(mSystemIcons, 0);
}
+ @Override
+ public void setBouncerShowing(boolean bouncerShowing) {
+ super.setBouncerShowing(bouncerShowing);
+ disable(mDisabledUnmodified);
+ }
+
public void onScreenTurnedOff() {
mStackScroller.setAnimationsEnabled(false);
}