Skip to content

Commit 26f544a

Browse files
dsandlerAndroid (Google) Code Review
authored andcommitted
Merge "For Matias." into jb-mr1-dev
2 parents d4a149d + 040c2e4 commit 26f544a

File tree

4 files changed

+170
-95
lines changed

4 files changed

+170
-95
lines changed

packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import android.graphics.Canvas;
2222
import android.graphics.drawable.Drawable;
2323
import android.util.AttributeSet;
24+
import android.util.Slog;
25+
import android.view.MotionEvent;
2426
import android.view.View;
2527

2628
import com.android.systemui.R;
@@ -31,11 +33,18 @@ public class NotificationPanelView extends PanelView {
3133
Drawable mHandleBar;
3234
float mHandleBarHeight;
3335
View mHandleView;
36+
int mFingers;
37+
PhoneStatusBar mStatusBar;
38+
private boolean mFlipped;
3439

3540
public NotificationPanelView(Context context, AttributeSet attrs) {
3641
super(context, attrs);
3742
}
3843

44+
public void setStatusBar(PhoneStatusBar bar) {
45+
mStatusBar = bar;
46+
}
47+
3948
@Override
4049
protected void onFinishInflate() {
4150
super.onFinishInflate();
@@ -79,4 +88,35 @@ public void draw(Canvas canvas) {
7988
mHandleBar.draw(canvas);
8089
canvas.translate(0, -off);
8190
}
91+
92+
@Override
93+
public boolean onTouchEvent(MotionEvent event) {
94+
if (PhoneStatusBar.SETTINGS_DRAG_SHORTCUT && mStatusBar.mHasFlipSettings) {
95+
switch (event.getActionMasked()) {
96+
case MotionEvent.ACTION_DOWN:
97+
mFlipped = false;
98+
break;
99+
case MotionEvent.ACTION_POINTER_DOWN:
100+
if (!mFlipped) {
101+
float miny = event.getY(0);
102+
float maxy = miny;
103+
for (int i=1; i<event.getPointerCount(); i++) {
104+
final float y = event.getY(i);
105+
if (y < miny) miny = y;
106+
if (y > maxy) maxy = y;
107+
}
108+
if (maxy - miny < mHandleBarHeight) {
109+
if (getMeasuredHeight() < mHandleBarHeight) {
110+
mStatusBar.switchToSettings();
111+
} else {
112+
mStatusBar.flipToSettings();
113+
}
114+
mFlipped = true;
115+
}
116+
}
117+
break;
118+
}
119+
}
120+
return mHandleView.dispatchTouchEvent(event);
121+
}
82122
}

packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public boolean onTouchEvent(MotionEvent event) {
102102
startOpeningPanel(panel);
103103
}
104104
final boolean result = mTouchingPanel != null
105-
? mTouchingPanel.getHandle().dispatchTouchEvent(event)
105+
? mTouchingPanel.onTouchEvent(event)
106106
: true;
107107
return result;
108108
}

packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ public boolean onTouch(View v, MotionEvent event) {
250250
case MotionEvent.ACTION_DOWN:
251251
mTracking = true;
252252
mHandleView.setPressed(true);
253+
postInvalidate(); // catch the press state change
253254
mInitialTouchY = y;
254255
mVelocityTracker = VelocityTracker.obtain();
255256
trackMovement(event);
@@ -283,6 +284,7 @@ public boolean onTouch(View v, MotionEvent event) {
283284
mFinalTouchY = y;
284285
mTracking = false;
285286
mHandleView.setPressed(false);
287+
postInvalidate(); // catch the press state change
286288
mBar.onTrackingStopped(PanelView.this);
287289
trackMovement(event);
288290

packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

Lines changed: 127 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ public class PhoneStatusBar extends BaseStatusBar {
110110

111111
public static final boolean ENABLE_NOTIFICATION_PANEL_CLING = false;
112112

113+
public static final boolean SETTINGS_DRAG_SHORTCUT = true;
114+
113115
// additional instrumentation for testing purposes; intended to be left on during development
114116
public static final boolean CHATTY = DEBUG;
115117

@@ -180,7 +182,7 @@ public class PhoneStatusBar extends BaseStatusBar {
180182
View mMoreIcon;
181183

182184
// expanded notifications
183-
PanelView mNotificationPanel; // the sliding/resizing panel within the notification window
185+
NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
184186
ScrollView mScrollView;
185187
View mExpandedContents;
186188
int mNotificationPanelGravity;
@@ -363,7 +365,8 @@ public boolean onTouch(View v, MotionEvent event) {
363365
PanelHolder holder = (PanelHolder) mStatusBarWindow.findViewById(R.id.panel_holder);
364366
mStatusBarView.setPanelHolder(holder);
365367

366-
mNotificationPanel = (PanelView) mStatusBarWindow.findViewById(R.id.notification_panel);
368+
mNotificationPanel = (NotificationPanelView) mStatusBarWindow.findViewById(R.id.notification_panel);
369+
mNotificationPanel.setStatusBar(this);
367370
mNotificationPanelIsFullScreenWidth =
368371
(mNotificationPanel.getLayoutParams().width == ViewGroup.LayoutParams.MATCH_PARENT);
369372

@@ -1285,6 +1288,10 @@ public void handleMessage(Message m) {
12851288
}
12861289
}
12871290

1291+
public Handler getHandler() {
1292+
return mHandler;
1293+
}
1294+
12881295
View.OnFocusChangeListener mFocusChangeListener = new View.OnFocusChangeListener() {
12891296
public void onFocusChange(View v, boolean hasFocus) {
12901297
// Because 'v' is a ViewGroup, all its children will be (un)selected
@@ -1299,18 +1306,6 @@ void makeExpandedVisible(boolean revealAfterDraw) {
12991306
return;
13001307
}
13011308

1302-
if (mHasFlipSettings && !mExpandedVisible) {
1303-
// reset things to their proper state
1304-
mScrollView.setScaleX(1f);
1305-
mScrollView.setVisibility(View.VISIBLE);
1306-
mSettingsButton.setAlpha(1f);
1307-
mSettingsButton.setVisibility(View.VISIBLE);
1308-
mNotificationPanel.setVisibility(View.GONE);
1309-
mFlipSettingsView.setVisibility(View.GONE);
1310-
mNotificationButton.setVisibility(View.GONE);
1311-
setAreThereNotifications(); // show the clear button
1312-
}
1313-
13141309
mExpandedVisible = true;
13151310
mPile.setLayoutTransitionsEnabled(true);
13161311
if (mNavigationBarView != null)
@@ -1420,51 +1415,53 @@ public void animateExpandNotificationsPanel() {
14201415
}
14211416

14221417
mNotificationPanel.expand();
1423-
if (mHasFlipSettings) {
1424-
if (mScrollView.getVisibility() != View.VISIBLE) {
1425-
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
1426-
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
1427-
if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
1428-
if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
1429-
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
1430-
1431-
mScrollView.setVisibility(View.VISIBLE);
1432-
mScrollViewAnim = start(
1433-
startDelay(FLIP_DURATION_OUT,
1434-
interpolator(mDecelerateInterpolator,
1435-
ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 0f, 1f)
1436-
.setDuration(FLIP_DURATION_IN)
1437-
)));
1438-
mFlipSettingsViewAnim = start(
1439-
setVisibilityWhenDone(
1440-
interpolator(mAccelerateInterpolator,
1441-
ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 1f, 0f)
1442-
)
1443-
.setDuration(FLIP_DURATION_OUT),
1444-
mFlipSettingsView, View.INVISIBLE));
1445-
mNotificationButtonAnim = start(
1446-
setVisibilityWhenDone(
1447-
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
1448-
.setDuration(FLIP_DURATION),
1449-
mNotificationButton, View.INVISIBLE));
1450-
mSettingsButton.setVisibility(View.VISIBLE);
1451-
mSettingsButtonAnim = start(
1452-
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
1453-
.setDuration(FLIP_DURATION));
1454-
mClearButton.setVisibility(View.VISIBLE);
1455-
mClearButton.setAlpha(0f);
1456-
setAreThereNotifications(); // this will show/hide the button as necessary
1457-
mNotificationPanel.postDelayed(new Runnable() {
1458-
public void run() {
1459-
updateCarrierLabelVisibility(false);
1460-
}
1461-
}, FLIP_DURATION - 150);
1462-
}
1418+
if (mHasFlipSettings && mScrollView.getVisibility() != View.VISIBLE) {
1419+
flipToNotifications();
14631420
}
14641421

14651422
if (false) postStartTracing();
14661423
}
14671424

1425+
public void flipToNotifications() {
1426+
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
1427+
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
1428+
if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
1429+
if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
1430+
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
1431+
1432+
mScrollView.setVisibility(View.VISIBLE);
1433+
mScrollViewAnim = start(
1434+
startDelay(FLIP_DURATION_OUT,
1435+
interpolator(mDecelerateInterpolator,
1436+
ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 0f, 1f)
1437+
.setDuration(FLIP_DURATION_IN)
1438+
)));
1439+
mFlipSettingsViewAnim = start(
1440+
setVisibilityWhenDone(
1441+
interpolator(mAccelerateInterpolator,
1442+
ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 1f, 0f)
1443+
)
1444+
.setDuration(FLIP_DURATION_OUT),
1445+
mFlipSettingsView, View.INVISIBLE));
1446+
mNotificationButtonAnim = start(
1447+
setVisibilityWhenDone(
1448+
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
1449+
.setDuration(FLIP_DURATION),
1450+
mNotificationButton, View.INVISIBLE));
1451+
mSettingsButton.setVisibility(View.VISIBLE);
1452+
mSettingsButtonAnim = start(
1453+
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
1454+
.setDuration(FLIP_DURATION));
1455+
mClearButton.setVisibility(View.VISIBLE);
1456+
mClearButton.setAlpha(0f);
1457+
setAreThereNotifications(); // this will show/hide the button as necessary
1458+
mNotificationPanel.postDelayed(new Runnable() {
1459+
public void run() {
1460+
updateCarrierLabelVisibility(false);
1461+
}
1462+
}, FLIP_DURATION - 150);
1463+
}
1464+
14681465
@Override
14691466
public void animateExpandSettingsPanel() {
14701467
if (SPEW) Slog.d(TAG, "animateExpand: mExpandedVisible=" + mExpandedVisible);
@@ -1475,46 +1472,7 @@ public void animateExpandSettingsPanel() {
14751472
if (mHasFlipSettings) {
14761473
mNotificationPanel.expand();
14771474
if (mFlipSettingsView.getVisibility() != View.VISIBLE) {
1478-
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
1479-
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
1480-
if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
1481-
if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
1482-
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
1483-
1484-
mFlipSettingsView.setVisibility(View.VISIBLE);
1485-
mFlipSettingsView.setScaleX(0f);
1486-
mFlipSettingsViewAnim = start(
1487-
startDelay(FLIP_DURATION_OUT,
1488-
interpolator(mDecelerateInterpolator,
1489-
ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 0f, 1f)
1490-
.setDuration(FLIP_DURATION_IN)
1491-
)));
1492-
mScrollViewAnim = start(
1493-
setVisibilityWhenDone(
1494-
interpolator(mAccelerateInterpolator,
1495-
ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 1f, 0f)
1496-
)
1497-
.setDuration(FLIP_DURATION_OUT),
1498-
mScrollView, View.INVISIBLE));
1499-
mSettingsButtonAnim = start(
1500-
setVisibilityWhenDone(
1501-
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
1502-
.setDuration(FLIP_DURATION),
1503-
mScrollView, View.INVISIBLE));
1504-
mNotificationButton.setVisibility(View.VISIBLE);
1505-
mNotificationButtonAnim = start(
1506-
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
1507-
.setDuration(FLIP_DURATION));
1508-
mClearButtonAnim = start(
1509-
setVisibilityWhenDone(
1510-
ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
1511-
.setDuration(FLIP_DURATION),
1512-
mClearButton, View.INVISIBLE));
1513-
mNotificationPanel.postDelayed(new Runnable() {
1514-
public void run() {
1515-
updateCarrierLabelVisibility(false);
1516-
}
1517-
}, FLIP_DURATION - 150);
1475+
flipToSettings();
15181476
}
15191477
} else if (mSettingsPanel != null) {
15201478
mSettingsPanel.expand();
@@ -1523,6 +1481,69 @@ public void run() {
15231481
if (false) postStartTracing();
15241482
}
15251483

1484+
public void switchToSettings() {
1485+
mFlipSettingsView.setScaleX(1f);
1486+
mFlipSettingsView.setVisibility(View.VISIBLE);
1487+
mSettingsButton.setVisibility(View.GONE);
1488+
mScrollView.setVisibility(View.GONE);
1489+
mNotificationButton.setVisibility(View.VISIBLE);
1490+
mNotificationButton.setAlpha(1f);
1491+
mClearButton.setVisibility(View.GONE);
1492+
}
1493+
1494+
public void flipToSettings() {
1495+
if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
1496+
if (mScrollViewAnim != null) mScrollViewAnim.cancel();
1497+
if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
1498+
if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
1499+
if (mClearButtonAnim != null) mClearButtonAnim.cancel();
1500+
1501+
mFlipSettingsView.setVisibility(View.VISIBLE);
1502+
mFlipSettingsView.setScaleX(0f);
1503+
mFlipSettingsViewAnim = start(
1504+
startDelay(FLIP_DURATION_OUT,
1505+
interpolator(mDecelerateInterpolator,
1506+
ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 0f, 1f)
1507+
.setDuration(FLIP_DURATION_IN)
1508+
)));
1509+
mScrollViewAnim = start(
1510+
setVisibilityWhenDone(
1511+
interpolator(mAccelerateInterpolator,
1512+
ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 1f, 0f)
1513+
)
1514+
.setDuration(FLIP_DURATION_OUT),
1515+
mScrollView, View.INVISIBLE));
1516+
mSettingsButtonAnim = start(
1517+
setVisibilityWhenDone(
1518+
ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
1519+
.setDuration(FLIP_DURATION),
1520+
mScrollView, View.INVISIBLE));
1521+
mNotificationButton.setVisibility(View.VISIBLE);
1522+
mNotificationButtonAnim = start(
1523+
ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
1524+
.setDuration(FLIP_DURATION));
1525+
mClearButtonAnim = start(
1526+
setVisibilityWhenDone(
1527+
ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
1528+
.setDuration(FLIP_DURATION),
1529+
mClearButton, View.INVISIBLE));
1530+
mNotificationPanel.postDelayed(new Runnable() {
1531+
public void run() {
1532+
updateCarrierLabelVisibility(false);
1533+
}
1534+
}, FLIP_DURATION - 150);
1535+
}
1536+
1537+
public void flipPanels() {
1538+
if (mHasFlipSettings) {
1539+
if (mFlipSettingsView.getVisibility() != View.VISIBLE) {
1540+
flipToSettings();
1541+
} else {
1542+
flipToNotifications();
1543+
}
1544+
}
1545+
}
1546+
15261547
public void animateCollapseQuickSettings() {
15271548
mStatusBarView.collapseAllPanels(true);
15281549
}
@@ -1542,6 +1563,18 @@ void makeExpandedInvisible() {
15421563
// Ensure the panel is fully collapsed (just in case; bug 6765842, 7260868)
15431564
mStatusBarView.collapseAllPanels(/*animate=*/ false);
15441565

1566+
if (mHasFlipSettings) {
1567+
// reset things to their proper state
1568+
mScrollView.setScaleX(1f);
1569+
mScrollView.setVisibility(View.VISIBLE);
1570+
mSettingsButton.setAlpha(1f);
1571+
mSettingsButton.setVisibility(View.VISIBLE);
1572+
mNotificationPanel.setVisibility(View.GONE);
1573+
mFlipSettingsView.setVisibility(View.GONE);
1574+
mNotificationButton.setVisibility(View.GONE);
1575+
setAreThereNotifications(); // show the clear button
1576+
}
1577+
15451578
mExpandedVisible = false;
15461579
mPile.setLayoutTransitionsEnabled(false);
15471580
if (mNavigationBarView != null)

0 commit comments

Comments
 (0)