am f610c295: am 26f544ae: Merge "For Matias." into jb-mr1-dev

* commit 'f610c295049e03d524577f602e9cf17cf07793c9':
  For Matias.
This commit is contained in:
Daniel Sandler
2012-10-17 12:01:54 -07:00
committed by Android Git Automerger
4 changed files with 170 additions and 95 deletions

View File

@@ -21,6 +21,8 @@ import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Slog;
import android.view.MotionEvent;
import android.view.View;
import com.android.systemui.R;
@@ -31,11 +33,18 @@ public class NotificationPanelView extends PanelView {
Drawable mHandleBar;
float mHandleBarHeight;
View mHandleView;
int mFingers;
PhoneStatusBar mStatusBar;
private boolean mFlipped;
public NotificationPanelView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setStatusBar(PhoneStatusBar bar) {
mStatusBar = bar;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
@@ -79,4 +88,35 @@ public class NotificationPanelView extends PanelView {
mHandleBar.draw(canvas);
canvas.translate(0, -off);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (PhoneStatusBar.SETTINGS_DRAG_SHORTCUT && mStatusBar.mHasFlipSettings) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mFlipped = false;
break;
case MotionEvent.ACTION_POINTER_DOWN:
if (!mFlipped) {
float miny = event.getY(0);
float maxy = miny;
for (int i=1; i<event.getPointerCount(); i++) {
final float y = event.getY(i);
if (y < miny) miny = y;
if (y > maxy) maxy = y;
}
if (maxy - miny < mHandleBarHeight) {
if (getMeasuredHeight() < mHandleBarHeight) {
mStatusBar.switchToSettings();
} else {
mStatusBar.flipToSettings();
}
mFlipped = true;
}
}
break;
}
}
return mHandleView.dispatchTouchEvent(event);
}
}

View File

@@ -102,7 +102,7 @@ public class PanelBar extends FrameLayout {
startOpeningPanel(panel);
}
final boolean result = mTouchingPanel != null
? mTouchingPanel.getHandle().dispatchTouchEvent(event)
? mTouchingPanel.onTouchEvent(event)
: true;
return result;
}

View File

@@ -250,6 +250,7 @@ public class PanelView extends FrameLayout {
case MotionEvent.ACTION_DOWN:
mTracking = true;
mHandleView.setPressed(true);
postInvalidate(); // catch the press state change
mInitialTouchY = y;
mVelocityTracker = VelocityTracker.obtain();
trackMovement(event);
@@ -283,6 +284,7 @@ public class PanelView extends FrameLayout {
mFinalTouchY = y;
mTracking = false;
mHandleView.setPressed(false);
postInvalidate(); // catch the press state change
mBar.onTrackingStopped(PanelView.this);
trackMovement(event);

View File

@@ -110,6 +110,8 @@ public class PhoneStatusBar extends BaseStatusBar {
public static final boolean ENABLE_NOTIFICATION_PANEL_CLING = false;
public static final boolean SETTINGS_DRAG_SHORTCUT = true;
// additional instrumentation for testing purposes; intended to be left on during development
public static final boolean CHATTY = DEBUG;
@@ -180,7 +182,7 @@ public class PhoneStatusBar extends BaseStatusBar {
View mMoreIcon;
// expanded notifications
PanelView mNotificationPanel; // the sliding/resizing panel within the notification window
NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
ScrollView mScrollView;
View mExpandedContents;
int mNotificationPanelGravity;
@@ -363,7 +365,8 @@ public class PhoneStatusBar extends BaseStatusBar {
PanelHolder holder = (PanelHolder) mStatusBarWindow.findViewById(R.id.panel_holder);
mStatusBarView.setPanelHolder(holder);
mNotificationPanel = (PanelView) mStatusBarWindow.findViewById(R.id.notification_panel);
mNotificationPanel = (NotificationPanelView) mStatusBarWindow.findViewById(R.id.notification_panel);
mNotificationPanel.setStatusBar(this);
mNotificationPanelIsFullScreenWidth =
(mNotificationPanel.getLayoutParams().width == ViewGroup.LayoutParams.MATCH_PARENT);
@@ -1285,6 +1288,10 @@ public class PhoneStatusBar extends BaseStatusBar {
}
}
public Handler getHandler() {
return mHandler;
}
View.OnFocusChangeListener mFocusChangeListener = new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
// Because 'v' is a ViewGroup, all its children will be (un)selected
@@ -1299,18 +1306,6 @@ public class PhoneStatusBar extends BaseStatusBar {
return;
}
if (mHasFlipSettings && !mExpandedVisible) {
// reset things to their proper state
mScrollView.setScaleX(1f);
mScrollView.setVisibility(View.VISIBLE);
mSettingsButton.setAlpha(1f);
mSettingsButton.setVisibility(View.VISIBLE);
mNotificationPanel.setVisibility(View.GONE);
mFlipSettingsView.setVisibility(View.GONE);
mNotificationButton.setVisibility(View.GONE);
setAreThereNotifications(); // show the clear button
}
mExpandedVisible = true;
mPile.setLayoutTransitionsEnabled(true);
if (mNavigationBarView != null)
@@ -1420,51 +1415,53 @@ public class PhoneStatusBar extends BaseStatusBar {
}
mNotificationPanel.expand();
if (mHasFlipSettings) {
if (mScrollView.getVisibility() != View.VISIBLE) {
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
mScrollView.setVisibility(View.VISIBLE);
mScrollViewAnim = start(
startDelay(FLIP_DURATION_OUT,
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 0f, 1f)
.setDuration(FLIP_DURATION_IN)
)));
mFlipSettingsViewAnim = start(
setVisibilityWhenDone(
interpolator(mAccelerateInterpolator,
ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 1f, 0f)
)
.setDuration(FLIP_DURATION_OUT),
mFlipSettingsView, View.INVISIBLE));
mNotificationButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION),
mNotificationButton, View.INVISIBLE));
mSettingsButton.setVisibility(View.VISIBLE);
mSettingsButtonAnim = start(
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
.setDuration(FLIP_DURATION));
mClearButton.setVisibility(View.VISIBLE);
mClearButton.setAlpha(0f);
setAreThereNotifications(); // this will show/hide the button as necessary
mNotificationPanel.postDelayed(new Runnable() {
public void run() {
updateCarrierLabelVisibility(false);
}
}, FLIP_DURATION - 150);
}
if (mHasFlipSettings && mScrollView.getVisibility() != View.VISIBLE) {
flipToNotifications();
}
if (false) postStartTracing();
}
public void flipToNotifications() {
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
mScrollView.setVisibility(View.VISIBLE);
mScrollViewAnim = start(
startDelay(FLIP_DURATION_OUT,
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 0f, 1f)
.setDuration(FLIP_DURATION_IN)
)));
mFlipSettingsViewAnim = start(
setVisibilityWhenDone(
interpolator(mAccelerateInterpolator,
ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 1f, 0f)
)
.setDuration(FLIP_DURATION_OUT),
mFlipSettingsView, View.INVISIBLE));
mNotificationButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION),
mNotificationButton, View.INVISIBLE));
mSettingsButton.setVisibility(View.VISIBLE);
mSettingsButtonAnim = start(
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
.setDuration(FLIP_DURATION));
mClearButton.setVisibility(View.VISIBLE);
mClearButton.setAlpha(0f);
setAreThereNotifications(); // this will show/hide the button as necessary
mNotificationPanel.postDelayed(new Runnable() {
public void run() {
updateCarrierLabelVisibility(false);
}
}, FLIP_DURATION - 150);
}
@Override
public void animateExpandSettingsPanel() {
if (SPEW) Slog.d(TAG, "animateExpand: mExpandedVisible=" + mExpandedVisible);
@@ -1475,46 +1472,7 @@ public class PhoneStatusBar extends BaseStatusBar {
if (mHasFlipSettings) {
mNotificationPanel.expand();
if (mFlipSettingsView.getVisibility() != View.VISIBLE) {
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
mFlipSettingsView.setVisibility(View.VISIBLE);
mFlipSettingsView.setScaleX(0f);
mFlipSettingsViewAnim = start(
startDelay(FLIP_DURATION_OUT,
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 0f, 1f)
.setDuration(FLIP_DURATION_IN)
)));
mScrollViewAnim = start(
setVisibilityWhenDone(
interpolator(mAccelerateInterpolator,
ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 1f, 0f)
)
.setDuration(FLIP_DURATION_OUT),
mScrollView, View.INVISIBLE));
mSettingsButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION),
mScrollView, View.INVISIBLE));
mNotificationButton.setVisibility(View.VISIBLE);
mNotificationButtonAnim = start(
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
.setDuration(FLIP_DURATION));
mClearButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION),
mClearButton, View.INVISIBLE));
mNotificationPanel.postDelayed(new Runnable() {
public void run() {
updateCarrierLabelVisibility(false);
}
}, FLIP_DURATION - 150);
flipToSettings();
}
} else if (mSettingsPanel != null) {
mSettingsPanel.expand();
@@ -1523,6 +1481,69 @@ public class PhoneStatusBar extends BaseStatusBar {
if (false) postStartTracing();
}
public void switchToSettings() {
mFlipSettingsView.setScaleX(1f);
mFlipSettingsView.setVisibility(View.VISIBLE);
mSettingsButton.setVisibility(View.GONE);
mScrollView.setVisibility(View.GONE);
mNotificationButton.setVisibility(View.VISIBLE);
mNotificationButton.setAlpha(1f);
mClearButton.setVisibility(View.GONE);
}
public void flipToSettings() {
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
mFlipSettingsView.setVisibility(View.VISIBLE);
mFlipSettingsView.setScaleX(0f);
mFlipSettingsViewAnim = start(
startDelay(FLIP_DURATION_OUT,
interpolator(mDecelerateInterpolator,
ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 0f, 1f)
.setDuration(FLIP_DURATION_IN)
)));
mScrollViewAnim = start(
setVisibilityWhenDone(
interpolator(mAccelerateInterpolator,
ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 1f, 0f)
)
.setDuration(FLIP_DURATION_OUT),
mScrollView, View.INVISIBLE));
mSettingsButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION),
mScrollView, View.INVISIBLE));
mNotificationButton.setVisibility(View.VISIBLE);
mNotificationButtonAnim = start(
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
.setDuration(FLIP_DURATION));
mClearButtonAnim = start(
setVisibilityWhenDone(
ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
.setDuration(FLIP_DURATION),
mClearButton, View.INVISIBLE));
mNotificationPanel.postDelayed(new Runnable() {
public void run() {
updateCarrierLabelVisibility(false);
}
}, FLIP_DURATION - 150);
}
public void flipPanels() {
if (mHasFlipSettings) {
if (mFlipSettingsView.getVisibility() != View.VISIBLE) {
flipToSettings();
} else {
flipToNotifications();
}
}
}
public void animateCollapseQuickSettings() {
mStatusBarView.collapseAllPanels(true);
}
@@ -1542,6 +1563,18 @@ public class PhoneStatusBar extends BaseStatusBar {
// Ensure the panel is fully collapsed (just in case; bug 6765842, 7260868)
mStatusBarView.collapseAllPanels(/*animate=*/ false);
if (mHasFlipSettings) {
// reset things to their proper state
mScrollView.setScaleX(1f);
mScrollView.setVisibility(View.VISIBLE);
mSettingsButton.setAlpha(1f);
mSettingsButton.setVisibility(View.VISIBLE);
mNotificationPanel.setVisibility(View.GONE);
mFlipSettingsView.setVisibility(View.GONE);
mNotificationButton.setVisibility(View.GONE);
setAreThereNotifications(); // show the clear button
}
mExpandedVisible = false;
mPile.setLayoutTransitionsEnabled(false);
if (mNavigationBarView != null)