Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +40 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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(); Loading Loading @@ -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); } } packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +127 −94 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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 Loading @@ -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) Loading Loading @@ -1420,8 +1415,14 @@ public class PhoneStatusBar extends BaseStatusBar { } mNotificationPanel.expand(); if (mHasFlipSettings) { if (mScrollView.getVisibility() != View.VISIBLE) { 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(); Loading Loading @@ -1460,10 +1461,6 @@ public class PhoneStatusBar extends BaseStatusBar { } }, FLIP_DURATION - 150); } } if (false) postStartTracing(); } @Override public void animateExpandSettingsPanel() { Loading @@ -1475,6 +1472,26 @@ public class PhoneStatusBar extends BaseStatusBar { if (mHasFlipSettings) { mNotificationPanel.expand(); if (mFlipSettingsView.getVisibility() != View.VISIBLE) { flipToSettings(); } } else if (mSettingsPanel != null) { mSettingsPanel.expand(); } 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(); Loading Loading @@ -1516,11 +1533,15 @@ public class PhoneStatusBar extends BaseStatusBar { } }, FLIP_DURATION - 150); } } else if (mSettingsPanel != null) { mSettingsPanel.expand(); } if (false) postStartTracing(); public void flipPanels() { if (mHasFlipSettings) { if (mFlipSettingsView.getVisibility() != View.VISIBLE) { flipToSettings(); } else { flipToNotifications(); } } } public void animateCollapseQuickSettings() { Loading @@ -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) Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +40 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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(); Loading Loading @@ -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); } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +127 −94 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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 Loading @@ -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) Loading Loading @@ -1420,8 +1415,14 @@ public class PhoneStatusBar extends BaseStatusBar { } mNotificationPanel.expand(); if (mHasFlipSettings) { if (mScrollView.getVisibility() != View.VISIBLE) { 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(); Loading Loading @@ -1460,10 +1461,6 @@ public class PhoneStatusBar extends BaseStatusBar { } }, FLIP_DURATION - 150); } } if (false) postStartTracing(); } @Override public void animateExpandSettingsPanel() { Loading @@ -1475,6 +1472,26 @@ public class PhoneStatusBar extends BaseStatusBar { if (mHasFlipSettings) { mNotificationPanel.expand(); if (mFlipSettingsView.getVisibility() != View.VISIBLE) { flipToSettings(); } } else if (mSettingsPanel != null) { mSettingsPanel.expand(); } 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(); Loading Loading @@ -1516,11 +1533,15 @@ public class PhoneStatusBar extends BaseStatusBar { } }, FLIP_DURATION - 150); } } else if (mSettingsPanel != null) { mSettingsPanel.expand(); } if (false) postStartTracing(); public void flipPanels() { if (mHasFlipSettings) { if (mFlipSettingsView.getVisibility() != View.VISIBLE) { flipToSettings(); } else { flipToNotifications(); } } } public void animateCollapseQuickSettings() { Loading @@ -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) Loading