Merge "Correct the translationY of the empty notification panel." into honeycomb
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
index 1004e18..372aa90 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
@@ -60,6 +60,9 @@
View mSettingsView;
ViewGroup mContentParent;
+ // amount to slide mContentParent down by when mContentFrame is missing
+ float mContentFrameMissingTranslation;
+
Choreographer mChoreo = new Choreographer();
public NotificationPanel(Context context, AttributeSet attrs) {
@@ -87,11 +90,17 @@
mNotificationScroller = findViewById(R.id.notification_scroller);
mContentFrame = (ViewGroup)findViewById(R.id.content_frame);
+ mContentFrameMissingTranslation =
+ mContentFrame.getBackground().getMinimumHeight() + 10;
+
+ mShowing = false;
+
+ setContentFrameVisible(mNotificationCount > 0, false);
}
public void show(boolean show, boolean animate) {
if (show && !mShowing) {
- setContentFrameVisible(mNotificationCount > 0, false);
+ setContentFrameVisible(mSettingsView != null || mNotificationCount > 0, false);
}
if (animate) {
@@ -120,7 +129,7 @@
public void onVisibilityChanged(View v, int vis) {
super.onVisibilityChanged(v, vis);
// when we hide, put back the notifications
- if (!isShown()) {
+ if (vis != View.VISIBLE) {
if (mSettingsView != null) removeSettingsView();
mNotificationScroller.setVisibility(View.VISIBLE);
mNotificationScroller.setAlpha(1f);
@@ -161,10 +170,8 @@
setContentFrameVisible(n > 0, false);
} else if (mSettingsView == null) {
// we're looking at the notifications; time to maybe make some changes
- if (mNotificationCount == 0 && n > 0) {
- setContentFrameVisible(true, true);
- } else if (mNotificationCount > 0 && n == 0) {
- setContentFrameVisible(false, true);
+ if (mNotificationCount != n) {
+ setContentFrameVisible(n > 0, true);
}
}
mNotificationCount = n;
@@ -173,22 +180,35 @@
public void setContentFrameVisible(final boolean showing, boolean animate) {
if (!animate) {
mContentFrame.setVisibility(showing ? View.VISIBLE : View.GONE);
- mContentParent.setTranslationY(showing ? 0f : 100f);
+ mContentFrame.setAlpha(1f);
+ // the translation will be patched up when the window is slid into place
return;
}
- mContentFrame.setVisibility(showing ? View.VISIBLE : View.GONE);
+ if (showing) {
+ mContentFrame.setVisibility(View.VISIBLE);
+ }
AnimatorSet set = new AnimatorSet();
- float adjust = mContentFrame.getBackground().getMinimumHeight() + 8; // fudge factor
set.play(ObjectAnimator.ofFloat(
mContentFrame, "alpha",
showing ? 0f : 1f,
showing ? 1f : 0f))
.with(ObjectAnimator.ofFloat(
mContentParent, "translationY",
- showing ? adjust : 0f,
- showing ? 0f : adjust));
+ showing ? mContentFrameMissingTranslation : 0f,
+ showing ? 0f : mContentFrameMissingTranslation))
+ ;
+
set.setDuration(200);
+ if (!showing) {
+ set.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator _a) {
+ mContentFrame.setVisibility(View.GONE);
+ mContentFrame.setAlpha(1f);
+ }
+ });
+ }
set.start();
}
@@ -238,10 +258,15 @@
}
public boolean isInContentArea(int x, int y) {
- mContentArea.left = mContentFrame.getLeft() + mContentFrame.getPaddingLeft();
- mContentArea.top = mTitleArea.getTop() + mTitleArea.getPaddingTop();
- mContentArea.right = mContentFrame.getRight() - mContentFrame.getPaddingRight();
- mContentArea.bottom = mContentFrame.getBottom() - mContentFrame.getPaddingBottom();
+ mContentArea.left = mTitleArea.getLeft() + mTitleArea.getPaddingLeft();
+ mContentArea.top = mTitleArea.getTop() + mTitleArea.getPaddingTop()
+ + (int)mContentParent.getTranslationY(); // account for any adjustment
+ mContentArea.right = mTitleArea.getRight() - mTitleArea.getPaddingRight();
+
+ View theBottom = (mContentFrame.getVisibility() == View.VISIBLE)
+ ? mContentFrame : mTitleArea;
+ mContentArea.bottom = theBottom.getBottom() - theBottom.getPaddingBottom();
+
offsetDescendantRectToMyCoords(mContentParent, mContentArea);
return mContentArea.contains(x, y);
}
@@ -291,12 +316,16 @@
if (appearing) {
// we want to go from near-the-top to the top, unless we're half-open in the right
// general vicinity
- start = (y < HYPERSPACE_OFFRAMP) ? y : HYPERSPACE_OFFRAMP;
end = 0;
+ if (mNotificationCount == 0) {
+ end += mContentFrameMissingTranslation;
+ }
+ start = (y < (HYPERSPACE_OFFRAMP+end)) ? y : (HYPERSPACE_OFFRAMP+end);
} else {
start = y;
end = y + HYPERSPACE_OFFRAMP;
}
+
Animator posAnim = ObjectAnimator.ofFloat(mContentParent, "translationY",
start, end);
posAnim.setInterpolator(appearing