@@ -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
@@ -1280,6 +1283,10 @@ public void handleMessage(Message m) {
12801283 }
12811284 }
12821285
1286+ public Handler getHandler () {
1287+ return mHandler ;
1288+ }
1289+
12831290 View .OnFocusChangeListener mFocusChangeListener = new View .OnFocusChangeListener () {
12841291 public void onFocusChange (View v , boolean hasFocus ) {
12851292 // Because 'v' is a ViewGroup, all its children will be (un)selected
@@ -1294,18 +1301,6 @@ void makeExpandedVisible(boolean revealAfterDraw) {
12941301 return ;
12951302 }
12961303
1297- if (mHasFlipSettings && !mExpandedVisible ) {
1298- // reset things to their proper state
1299- mScrollView .setScaleX (1f );
1300- mScrollView .setVisibility (View .VISIBLE );
1301- mSettingsButton .setAlpha (1f );
1302- mSettingsButton .setVisibility (View .VISIBLE );
1303- mNotificationPanel .setVisibility (View .GONE );
1304- mFlipSettingsView .setVisibility (View .GONE );
1305- mNotificationButton .setVisibility (View .GONE );
1306- setAreThereNotifications (); // show the clear button
1307- }
1308-
13091304 mExpandedVisible = true ;
13101305 mPile .setLayoutTransitionsEnabled (true );
13111306 if (mNavigationBarView != null )
@@ -1415,51 +1410,53 @@ public void animateExpandNotificationsPanel() {
14151410 }
14161411
14171412 mNotificationPanel .expand ();
1418- if (mHasFlipSettings ) {
1419- if (mScrollView .getVisibility () != View .VISIBLE ) {
1420- if (mFlipSettingsViewAnim != null ) mFlipSettingsViewAnim .cancel ();
1421- if (mScrollViewAnim != null ) mScrollViewAnim .cancel ();
1422- if (mSettingsButtonAnim != null ) mSettingsButtonAnim .cancel ();
1423- if (mNotificationButtonAnim != null ) mNotificationButtonAnim .cancel ();
1424- if (mClearButtonAnim != null ) mClearButtonAnim .cancel ();
1425-
1426- mScrollView .setVisibility (View .VISIBLE );
1427- mScrollViewAnim = start (
1428- startDelay (FLIP_DURATION_OUT ,
1429- interpolator (mDecelerateInterpolator ,
1430- ObjectAnimator .ofFloat (mScrollView , View .SCALE_X , 0f , 1f )
1431- .setDuration (FLIP_DURATION_IN )
1432- )));
1433- mFlipSettingsViewAnim = start (
1434- setVisibilityWhenDone (
1435- interpolator (mAccelerateInterpolator ,
1436- ObjectAnimator .ofFloat (mFlipSettingsView , View .SCALE_X , 1f , 0f )
1437- )
1438- .setDuration (FLIP_DURATION_OUT ),
1439- mFlipSettingsView , View .INVISIBLE ));
1440- mNotificationButtonAnim = start (
1441- setVisibilityWhenDone (
1442- ObjectAnimator .ofFloat (mNotificationButton , View .ALPHA , 0f )
1443- .setDuration (FLIP_DURATION ),
1444- mNotificationButton , View .INVISIBLE ));
1445- mSettingsButton .setVisibility (View .VISIBLE );
1446- mSettingsButtonAnim = start (
1447- ObjectAnimator .ofFloat (mSettingsButton , View .ALPHA , 1f )
1448- .setDuration (FLIP_DURATION ));
1449- mClearButton .setVisibility (View .VISIBLE );
1450- mClearButton .setAlpha (0f );
1451- setAreThereNotifications (); // this will show/hide the button as necessary
1452- mNotificationPanel .postDelayed (new Runnable () {
1453- public void run () {
1454- updateCarrierLabelVisibility (false );
1455- }
1456- }, FLIP_DURATION - 150 );
1457- }
1413+ if (mHasFlipSettings && mScrollView .getVisibility () != View .VISIBLE ) {
1414+ flipToNotifications ();
14581415 }
14591416
14601417 if (false ) postStartTracing ();
14611418 }
14621419
1420+ public void flipToNotifications () {
1421+ if (mFlipSettingsViewAnim != null ) mFlipSettingsViewAnim .cancel ();
1422+ if (mScrollViewAnim != null ) mScrollViewAnim .cancel ();
1423+ if (mSettingsButtonAnim != null ) mSettingsButtonAnim .cancel ();
1424+ if (mNotificationButtonAnim != null ) mNotificationButtonAnim .cancel ();
1425+ if (mClearButtonAnim != null ) mClearButtonAnim .cancel ();
1426+
1427+ mScrollView .setVisibility (View .VISIBLE );
1428+ mScrollViewAnim = start (
1429+ startDelay (FLIP_DURATION_OUT ,
1430+ interpolator (mDecelerateInterpolator ,
1431+ ObjectAnimator .ofFloat (mScrollView , View .SCALE_X , 0f , 1f )
1432+ .setDuration (FLIP_DURATION_IN )
1433+ )));
1434+ mFlipSettingsViewAnim = start (
1435+ setVisibilityWhenDone (
1436+ interpolator (mAccelerateInterpolator ,
1437+ ObjectAnimator .ofFloat (mFlipSettingsView , View .SCALE_X , 1f , 0f )
1438+ )
1439+ .setDuration (FLIP_DURATION_OUT ),
1440+ mFlipSettingsView , View .INVISIBLE ));
1441+ mNotificationButtonAnim = start (
1442+ setVisibilityWhenDone (
1443+ ObjectAnimator .ofFloat (mNotificationButton , View .ALPHA , 0f )
1444+ .setDuration (FLIP_DURATION ),
1445+ mNotificationButton , View .INVISIBLE ));
1446+ mSettingsButton .setVisibility (View .VISIBLE );
1447+ mSettingsButtonAnim = start (
1448+ ObjectAnimator .ofFloat (mSettingsButton , View .ALPHA , 1f )
1449+ .setDuration (FLIP_DURATION ));
1450+ mClearButton .setVisibility (View .VISIBLE );
1451+ mClearButton .setAlpha (0f );
1452+ setAreThereNotifications (); // this will show/hide the button as necessary
1453+ mNotificationPanel .postDelayed (new Runnable () {
1454+ public void run () {
1455+ updateCarrierLabelVisibility (false );
1456+ }
1457+ }, FLIP_DURATION - 150 );
1458+ }
1459+
14631460 @ Override
14641461 public void animateExpandSettingsPanel () {
14651462 if (SPEW ) Slog .d (TAG , "animateExpand: mExpandedVisible=" + mExpandedVisible );
@@ -1470,46 +1467,7 @@ public void animateExpandSettingsPanel() {
14701467 if (mHasFlipSettings ) {
14711468 mNotificationPanel .expand ();
14721469 if (mFlipSettingsView .getVisibility () != View .VISIBLE ) {
1473- if (mFlipSettingsViewAnim != null ) mFlipSettingsViewAnim .cancel ();
1474- if (mScrollViewAnim != null ) mScrollViewAnim .cancel ();
1475- if (mSettingsButtonAnim != null ) mSettingsButtonAnim .cancel ();
1476- if (mNotificationButtonAnim != null ) mNotificationButtonAnim .cancel ();
1477- if (mClearButtonAnim != null ) mClearButtonAnim .cancel ();
1478-
1479- mFlipSettingsView .setVisibility (View .VISIBLE );
1480- mFlipSettingsView .setScaleX (0f );
1481- mFlipSettingsViewAnim = start (
1482- startDelay (FLIP_DURATION_OUT ,
1483- interpolator (mDecelerateInterpolator ,
1484- ObjectAnimator .ofFloat (mFlipSettingsView , View .SCALE_X , 0f , 1f )
1485- .setDuration (FLIP_DURATION_IN )
1486- )));
1487- mScrollViewAnim = start (
1488- setVisibilityWhenDone (
1489- interpolator (mAccelerateInterpolator ,
1490- ObjectAnimator .ofFloat (mScrollView , View .SCALE_X , 1f , 0f )
1491- )
1492- .setDuration (FLIP_DURATION_OUT ),
1493- mScrollView , View .INVISIBLE ));
1494- mSettingsButtonAnim = start (
1495- setVisibilityWhenDone (
1496- ObjectAnimator .ofFloat (mSettingsButton , View .ALPHA , 0f )
1497- .setDuration (FLIP_DURATION ),
1498- mScrollView , View .INVISIBLE ));
1499- mNotificationButton .setVisibility (View .VISIBLE );
1500- mNotificationButtonAnim = start (
1501- ObjectAnimator .ofFloat (mNotificationButton , View .ALPHA , 1f )
1502- .setDuration (FLIP_DURATION ));
1503- mClearButtonAnim = start (
1504- setVisibilityWhenDone (
1505- ObjectAnimator .ofFloat (mClearButton , View .ALPHA , 0f )
1506- .setDuration (FLIP_DURATION ),
1507- mClearButton , View .INVISIBLE ));
1508- mNotificationPanel .postDelayed (new Runnable () {
1509- public void run () {
1510- updateCarrierLabelVisibility (false );
1511- }
1512- }, FLIP_DURATION - 150 );
1470+ flipToSettings ();
15131471 }
15141472 } else if (mSettingsPanel != null ) {
15151473 mSettingsPanel .expand ();
@@ -1518,6 +1476,69 @@ public void run() {
15181476 if (false ) postStartTracing ();
15191477 }
15201478
1479+ public void switchToSettings () {
1480+ mFlipSettingsView .setScaleX (1f );
1481+ mFlipSettingsView .setVisibility (View .VISIBLE );
1482+ mSettingsButton .setVisibility (View .GONE );
1483+ mScrollView .setVisibility (View .GONE );
1484+ mNotificationButton .setVisibility (View .VISIBLE );
1485+ mNotificationButton .setAlpha (1f );
1486+ mClearButton .setVisibility (View .GONE );
1487+ }
1488+
1489+ public void flipToSettings () {
1490+ if (mFlipSettingsViewAnim != null ) mFlipSettingsViewAnim .cancel ();
1491+ if (mScrollViewAnim != null ) mScrollViewAnim .cancel ();
1492+ if (mSettingsButtonAnim != null ) mSettingsButtonAnim .cancel ();
1493+ if (mNotificationButtonAnim != null ) mNotificationButtonAnim .cancel ();
1494+ if (mClearButtonAnim != null ) mClearButtonAnim .cancel ();
1495+
1496+ mFlipSettingsView .setVisibility (View .VISIBLE );
1497+ mFlipSettingsView .setScaleX (0f );
1498+ mFlipSettingsViewAnim = start (
1499+ startDelay (FLIP_DURATION_OUT ,
1500+ interpolator (mDecelerateInterpolator ,
1501+ ObjectAnimator .ofFloat (mFlipSettingsView , View .SCALE_X , 0f , 1f )
1502+ .setDuration (FLIP_DURATION_IN )
1503+ )));
1504+ mScrollViewAnim = start (
1505+ setVisibilityWhenDone (
1506+ interpolator (mAccelerateInterpolator ,
1507+ ObjectAnimator .ofFloat (mScrollView , View .SCALE_X , 1f , 0f )
1508+ )
1509+ .setDuration (FLIP_DURATION_OUT ),
1510+ mScrollView , View .INVISIBLE ));
1511+ mSettingsButtonAnim = start (
1512+ setVisibilityWhenDone (
1513+ ObjectAnimator .ofFloat (mSettingsButton , View .ALPHA , 0f )
1514+ .setDuration (FLIP_DURATION ),
1515+ mScrollView , View .INVISIBLE ));
1516+ mNotificationButton .setVisibility (View .VISIBLE );
1517+ mNotificationButtonAnim = start (
1518+ ObjectAnimator .ofFloat (mNotificationButton , View .ALPHA , 1f )
1519+ .setDuration (FLIP_DURATION ));
1520+ mClearButtonAnim = start (
1521+ setVisibilityWhenDone (
1522+ ObjectAnimator .ofFloat (mClearButton , View .ALPHA , 0f )
1523+ .setDuration (FLIP_DURATION ),
1524+ mClearButton , View .INVISIBLE ));
1525+ mNotificationPanel .postDelayed (new Runnable () {
1526+ public void run () {
1527+ updateCarrierLabelVisibility (false );
1528+ }
1529+ }, FLIP_DURATION - 150 );
1530+ }
1531+
1532+ public void flipPanels () {
1533+ if (mHasFlipSettings ) {
1534+ if (mFlipSettingsView .getVisibility () != View .VISIBLE ) {
1535+ flipToSettings ();
1536+ } else {
1537+ flipToNotifications ();
1538+ }
1539+ }
1540+ }
1541+
15211542 public void animateCollapseQuickSettings () {
15221543 mStatusBarView .collapseAllPanels (true );
15231544 }
@@ -1533,6 +1554,18 @@ void makeExpandedInvisible() {
15331554 // Ensure the panel is fully collapsed (just in case; bug 6765842, 7260868)
15341555 mStatusBarView .collapseAllPanels (/*animate=*/ false );
15351556
1557+ if (mHasFlipSettings ) {
1558+ // reset things to their proper state
1559+ mScrollView .setScaleX (1f );
1560+ mScrollView .setVisibility (View .VISIBLE );
1561+ mSettingsButton .setAlpha (1f );
1562+ mSettingsButton .setVisibility (View .VISIBLE );
1563+ mNotificationPanel .setVisibility (View .GONE );
1564+ mFlipSettingsView .setVisibility (View .GONE );
1565+ mNotificationButton .setVisibility (View .GONE );
1566+ setAreThereNotifications (); // show the clear button
1567+ }
1568+
15361569 mExpandedVisible = false ;
15371570 mPile .setLayoutTransitionsEnabled (false );
15381571 if (mNavigationBarView != null )
0 commit comments