@@ -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