Loading packages/SystemUI/res/layout/status_bar_expanded.xml +3 −1 Original line number Diff line number Diff line Loading @@ -23,10 +23,11 @@ xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui" android:id="@+id/notification_panel" android:layout_width="0dp" android:layout_height="0dp" android:layout_height="wrap_content" android:background="@drawable/notification_panel_bg" android:paddingTop="@dimen/notification_panel_padding_top" android:layout_marginLeft="@dimen/notification_panel_margin_left" android:animateLayoutChanges="true" > <TextView Loading @@ -45,6 +46,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="@dimen/close_handle_underlap" android:orientation="vertical" android:animateLayoutChanges="true" > <include layout="@layout/status_bar_expanded_header" Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +2 −2 Original line number Diff line number Diff line Loading @@ -69,14 +69,14 @@ public class PanelBar extends FrameLayout { return mPanels.get((int)(N * x / getMeasuredWidth())); } public boolean isEnabled() { public boolean panelsEnabled() { return true; } @Override public boolean onTouchEvent(MotionEvent event) { // Allow subclasses to implement enable/disable semantics if (!isEnabled()) return false; if (!panelsEnabled()) return false; // figure out which panel needs to be talked to here if (event.getAction() == MotionEvent.ACTION_DOWN) { Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +38 −16 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ public class PanelView extends FrameLayout { } public static final boolean BRAKES = false; private static final boolean STRETCH_PAST_CONTENTS = true; private float mSelfExpandVelocityPx; // classic value: 2000px/s private float mSelfCollapseVelocityPx; // classic value: 2000px/s (will be negated to collapse "up") Loading @@ -45,6 +46,9 @@ public class PanelView extends FrameLayout { private float mTouchOffset; private float mExpandedFraction = 0; private float mExpandedHeight = 0; private boolean mClosing; private boolean mRubberbanding; private boolean mTracking; private TimeAnimator mTimeAnimator; private VelocityTracker mVelocityTracker; Loading @@ -61,7 +65,8 @@ public class PanelView extends FrameLayout { private final Runnable mStopAnimator = new Runnable() { public void run() { if (mTimeAnimator.isStarted()) { mTimeAnimator.end(); } mTimeAnimator.end(); } }}; private float mVel, mAccel; Loading @@ -75,16 +80,18 @@ public class PanelView extends FrameLayout { mTimeAnimator.setTimeListener(mAnimationCallback); mTimeAnimator.start(); mRubberbanding = STRETCH_PAST_CONTENTS && mExpandedHeight > getFullHeight(); mClosing = (mExpandedHeight > 0 && mVel < 0) || mRubberbanding; } else if (dtms > 0) { final float dt = dtms * 0.001f; // ms -> s LOG("tick: v=%.2fpx/s dt=%.4fs", mVel, dt); LOG("tick: before: h=%d", (int) mExpandedHeight); final float fh = getFullHeight(); final boolean closing = mExpandedHeight > 0 && mVel < 0; boolean braking = false; if (BRAKES) { if (closing) { if (mClosing) { braking = mExpandedHeight <= mCollapseBrakingDistancePx; mAccel = braking ? 10*mCollapseAccelPx : -mCollapseAccelPx; } else { Loading @@ -92,36 +99,40 @@ public class PanelView extends FrameLayout { mAccel = braking ? 10*-mExpandAccelPx : mExpandAccelPx; } } else { mAccel = closing ? -mCollapseAccelPx : mExpandAccelPx; mAccel = mClosing ? -mCollapseAccelPx : mExpandAccelPx; } mVel += mAccel * dt; if (braking) { if (closing && mVel > -mBrakingSpeedPx) { if (mClosing && mVel > -mBrakingSpeedPx) { mVel = -mBrakingSpeedPx; } else if (!closing && mVel < mBrakingSpeedPx) { } else if (!mClosing && mVel < mBrakingSpeedPx) { mVel = mBrakingSpeedPx; } } else { if (closing && mVel > -mFlingCollapseMinVelocityPx) { if (mClosing && mVel > -mFlingCollapseMinVelocityPx) { mVel = -mFlingCollapseMinVelocityPx; } else if (!closing && mVel > mFlingGestureMaxOutputVelocityPx) { } else if (!mClosing && mVel > mFlingGestureMaxOutputVelocityPx) { mVel = mFlingGestureMaxOutputVelocityPx; } } float h = mExpandedHeight + mVel * dt; LOG("tick: new h=%d closing=%s", (int) h, closing?"true":"false"); if (mRubberbanding && h < fh) { h = fh; } LOG("tick: new h=%d closing=%s", (int) h, mClosing?"true":"false"); setExpandedHeightInternal(h); mBar.panelExpansionChanged(PanelView.this, mExpandedFraction); if (mVel == 0 || (closing && mExpandedHeight == 0) || (!closing && mExpandedHeight == getFullHeight())) { || (mClosing && mExpandedHeight == 0) || ((mRubberbanding || !mClosing) && mExpandedHeight == fh)) { post(mStopAnimator); } } Loading Loading @@ -183,6 +194,7 @@ public class PanelView extends FrameLayout { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mTracking = true; mVelocityTracker = VelocityTracker.obtain(); trackMovement(event); mBar.onTrackingStarted(PanelView.this); Loading @@ -190,7 +202,7 @@ public class PanelView extends FrameLayout { break; case MotionEvent.ACTION_MOVE: PanelView.this.setExpandedHeight(rawY - mAbsPos[1] - mTouchOffset); PanelView.this.setExpandedHeightInternal(rawY - mAbsPos[1] - mTouchOffset); mBar.panelExpansionChanged(PanelView.this, mExpandedFraction); Loading @@ -199,6 +211,7 @@ public class PanelView extends FrameLayout { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: mTracking = false; mBar.onTrackingStopped(PanelView.this); trackMovement(event); mVelocityTracker.computeCurrentVelocity(1000); Loading Loading @@ -275,6 +288,10 @@ public class PanelView extends FrameLayout { LOG("onMeasure(%d, %d) -> (%d, %d)", widthMeasureSpec, heightMeasureSpec, getMeasuredWidth(), getMeasuredHeight()); mFullHeight = getMeasuredHeight(); // if one of our children is getting smaller, we should track that if (!mTracking && !mRubberbanding && !mTimeAnimator.isStarted() && mExpandedHeight > 0 && mExpandedHeight != mFullHeight) { mExpandedHeight = mFullHeight; } heightMeasureSpec = MeasureSpec.makeMeasureSpec( (int) mExpandedHeight, MeasureSpec.AT_MOST); // MeasureSpec.getMode(heightMeasureSpec)); setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); Loading @@ -286,17 +303,22 @@ public class PanelView extends FrameLayout { setExpandedHeightInternal(height); } @Override protected void onLayout (boolean changed, int left, int top, int right, int bottom) { LOG("onLayout: changed=%s, bottom=%d eh=%d fh=%d", changed?"T":"f", bottom, (int)mExpandedHeight, (int)mFullHeight); super.onLayout(changed, left, top, right, bottom); } public void setExpandedHeightInternal(float h) { float fh = getFullHeight(); if (fh == 0) { // Hmm, full height hasn't been computed yet } LOG("setExpansion: height=%.1f fh=%.1f", h, fh); LOG("setExpansion: height=%.1f fh=%.1f tracking=%s rubber=%s", h, fh, mTracking?"T":"f", mRubberbanding?"T":"f"); if (h < 0) h = 0; else if (h > fh) h = fh; if (!(STRETCH_PAST_CONTENTS && (mTracking || mRubberbanding)) && h > fh) h = fh; mExpandedHeight = h; requestLayout(); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +1 −1 Original line number Diff line number Diff line Loading @@ -109,7 +109,7 @@ public class PhoneStatusBar extends BaseStatusBar { public static final String ACTION_STATUSBAR_START = "com.android.internal.policy.statusbar.START"; private static final boolean SHOW_CARRIER_LABEL = true; private static final boolean SHOW_CARRIER_LABEL = false; // XXX: doesn't work with rubberband panels right now private static final int MSG_OPEN_NOTIFICATION_PANEL = 1000; private static final int MSG_CLOSE_NOTIFICATION_PANEL = 1001; Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +1 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ public class PhoneStatusBarView extends PanelBar { } @Override public boolean isEnabled() { public boolean panelsEnabled() { return ((mBar.mDisabled & StatusBarManager.DISABLE_EXPAND) == 0); } Loading Loading
packages/SystemUI/res/layout/status_bar_expanded.xml +3 −1 Original line number Diff line number Diff line Loading @@ -23,10 +23,11 @@ xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui" android:id="@+id/notification_panel" android:layout_width="0dp" android:layout_height="0dp" android:layout_height="wrap_content" android:background="@drawable/notification_panel_bg" android:paddingTop="@dimen/notification_panel_padding_top" android:layout_marginLeft="@dimen/notification_panel_margin_left" android:animateLayoutChanges="true" > <TextView Loading @@ -45,6 +46,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="@dimen/close_handle_underlap" android:orientation="vertical" android:animateLayoutChanges="true" > <include layout="@layout/status_bar_expanded_header" Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +2 −2 Original line number Diff line number Diff line Loading @@ -69,14 +69,14 @@ public class PanelBar extends FrameLayout { return mPanels.get((int)(N * x / getMeasuredWidth())); } public boolean isEnabled() { public boolean panelsEnabled() { return true; } @Override public boolean onTouchEvent(MotionEvent event) { // Allow subclasses to implement enable/disable semantics if (!isEnabled()) return false; if (!panelsEnabled()) return false; // figure out which panel needs to be talked to here if (event.getAction() == MotionEvent.ACTION_DOWN) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +38 −16 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ public class PanelView extends FrameLayout { } public static final boolean BRAKES = false; private static final boolean STRETCH_PAST_CONTENTS = true; private float mSelfExpandVelocityPx; // classic value: 2000px/s private float mSelfCollapseVelocityPx; // classic value: 2000px/s (will be negated to collapse "up") Loading @@ -45,6 +46,9 @@ public class PanelView extends FrameLayout { private float mTouchOffset; private float mExpandedFraction = 0; private float mExpandedHeight = 0; private boolean mClosing; private boolean mRubberbanding; private boolean mTracking; private TimeAnimator mTimeAnimator; private VelocityTracker mVelocityTracker; Loading @@ -61,7 +65,8 @@ public class PanelView extends FrameLayout { private final Runnable mStopAnimator = new Runnable() { public void run() { if (mTimeAnimator.isStarted()) { mTimeAnimator.end(); } mTimeAnimator.end(); } }}; private float mVel, mAccel; Loading @@ -75,16 +80,18 @@ public class PanelView extends FrameLayout { mTimeAnimator.setTimeListener(mAnimationCallback); mTimeAnimator.start(); mRubberbanding = STRETCH_PAST_CONTENTS && mExpandedHeight > getFullHeight(); mClosing = (mExpandedHeight > 0 && mVel < 0) || mRubberbanding; } else if (dtms > 0) { final float dt = dtms * 0.001f; // ms -> s LOG("tick: v=%.2fpx/s dt=%.4fs", mVel, dt); LOG("tick: before: h=%d", (int) mExpandedHeight); final float fh = getFullHeight(); final boolean closing = mExpandedHeight > 0 && mVel < 0; boolean braking = false; if (BRAKES) { if (closing) { if (mClosing) { braking = mExpandedHeight <= mCollapseBrakingDistancePx; mAccel = braking ? 10*mCollapseAccelPx : -mCollapseAccelPx; } else { Loading @@ -92,36 +99,40 @@ public class PanelView extends FrameLayout { mAccel = braking ? 10*-mExpandAccelPx : mExpandAccelPx; } } else { mAccel = closing ? -mCollapseAccelPx : mExpandAccelPx; mAccel = mClosing ? -mCollapseAccelPx : mExpandAccelPx; } mVel += mAccel * dt; if (braking) { if (closing && mVel > -mBrakingSpeedPx) { if (mClosing && mVel > -mBrakingSpeedPx) { mVel = -mBrakingSpeedPx; } else if (!closing && mVel < mBrakingSpeedPx) { } else if (!mClosing && mVel < mBrakingSpeedPx) { mVel = mBrakingSpeedPx; } } else { if (closing && mVel > -mFlingCollapseMinVelocityPx) { if (mClosing && mVel > -mFlingCollapseMinVelocityPx) { mVel = -mFlingCollapseMinVelocityPx; } else if (!closing && mVel > mFlingGestureMaxOutputVelocityPx) { } else if (!mClosing && mVel > mFlingGestureMaxOutputVelocityPx) { mVel = mFlingGestureMaxOutputVelocityPx; } } float h = mExpandedHeight + mVel * dt; LOG("tick: new h=%d closing=%s", (int) h, closing?"true":"false"); if (mRubberbanding && h < fh) { h = fh; } LOG("tick: new h=%d closing=%s", (int) h, mClosing?"true":"false"); setExpandedHeightInternal(h); mBar.panelExpansionChanged(PanelView.this, mExpandedFraction); if (mVel == 0 || (closing && mExpandedHeight == 0) || (!closing && mExpandedHeight == getFullHeight())) { || (mClosing && mExpandedHeight == 0) || ((mRubberbanding || !mClosing) && mExpandedHeight == fh)) { post(mStopAnimator); } } Loading Loading @@ -183,6 +194,7 @@ public class PanelView extends FrameLayout { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mTracking = true; mVelocityTracker = VelocityTracker.obtain(); trackMovement(event); mBar.onTrackingStarted(PanelView.this); Loading @@ -190,7 +202,7 @@ public class PanelView extends FrameLayout { break; case MotionEvent.ACTION_MOVE: PanelView.this.setExpandedHeight(rawY - mAbsPos[1] - mTouchOffset); PanelView.this.setExpandedHeightInternal(rawY - mAbsPos[1] - mTouchOffset); mBar.panelExpansionChanged(PanelView.this, mExpandedFraction); Loading @@ -199,6 +211,7 @@ public class PanelView extends FrameLayout { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: mTracking = false; mBar.onTrackingStopped(PanelView.this); trackMovement(event); mVelocityTracker.computeCurrentVelocity(1000); Loading Loading @@ -275,6 +288,10 @@ public class PanelView extends FrameLayout { LOG("onMeasure(%d, %d) -> (%d, %d)", widthMeasureSpec, heightMeasureSpec, getMeasuredWidth(), getMeasuredHeight()); mFullHeight = getMeasuredHeight(); // if one of our children is getting smaller, we should track that if (!mTracking && !mRubberbanding && !mTimeAnimator.isStarted() && mExpandedHeight > 0 && mExpandedHeight != mFullHeight) { mExpandedHeight = mFullHeight; } heightMeasureSpec = MeasureSpec.makeMeasureSpec( (int) mExpandedHeight, MeasureSpec.AT_MOST); // MeasureSpec.getMode(heightMeasureSpec)); setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); Loading @@ -286,17 +303,22 @@ public class PanelView extends FrameLayout { setExpandedHeightInternal(height); } @Override protected void onLayout (boolean changed, int left, int top, int right, int bottom) { LOG("onLayout: changed=%s, bottom=%d eh=%d fh=%d", changed?"T":"f", bottom, (int)mExpandedHeight, (int)mFullHeight); super.onLayout(changed, left, top, right, bottom); } public void setExpandedHeightInternal(float h) { float fh = getFullHeight(); if (fh == 0) { // Hmm, full height hasn't been computed yet } LOG("setExpansion: height=%.1f fh=%.1f", h, fh); LOG("setExpansion: height=%.1f fh=%.1f tracking=%s rubber=%s", h, fh, mTracking?"T":"f", mRubberbanding?"T":"f"); if (h < 0) h = 0; else if (h > fh) h = fh; if (!(STRETCH_PAST_CONTENTS && (mTracking || mRubberbanding)) && h > fh) h = fh; mExpandedHeight = h; requestLayout(); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +1 −1 Original line number Diff line number Diff line Loading @@ -109,7 +109,7 @@ public class PhoneStatusBar extends BaseStatusBar { public static final String ACTION_STATUSBAR_START = "com.android.internal.policy.statusbar.START"; private static final boolean SHOW_CARRIER_LABEL = true; private static final boolean SHOW_CARRIER_LABEL = false; // XXX: doesn't work with rubberband panels right now private static final int MSG_OPEN_NOTIFICATION_PANEL = 1000; private static final int MSG_CLOSE_NOTIFICATION_PANEL = 1001; Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +1 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ public class PhoneStatusBarView extends PanelBar { } @Override public boolean isEnabled() { public boolean panelsEnabled() { return ((mBar.mDisabled & StatusBarManager.DISABLE_EXPAND) == 0); } Loading