diff --git a/packages/SystemUI/res/anim/heads_up_exit.xml b/packages/SystemUI/res/anim/heads_up_exit.xml index 05c144a1720d8..2cad8f6fc2a4c 100644 --- a/packages/SystemUI/res/anim/heads_up_exit.xml +++ b/packages/SystemUI/res/anim/heads_up_exit.xml @@ -1,13 +1,11 @@ - - + diff --git a/packages/SystemUI/res/drawable-hdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-hdpi/heads_up_window_bg.9.png deleted file mode 100644 index 3b952d0f06aac..0000000000000 Binary files a/packages/SystemUI/res/drawable-hdpi/heads_up_window_bg.9.png and /dev/null differ diff --git a/packages/SystemUI/res/drawable-mdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-mdpi/heads_up_window_bg.9.png deleted file mode 100644 index a0ab991185f58..0000000000000 Binary files a/packages/SystemUI/res/drawable-mdpi/heads_up_window_bg.9.png and /dev/null differ diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/heads_up_window_bg.9.png index 6002cfbe95d77..31eb8f72010b7 100644 Binary files a/packages/SystemUI/res/drawable-sw600dp-xhdpi/heads_up_window_bg.9.png and b/packages/SystemUI/res/drawable-sw600dp-xhdpi/heads_up_window_bg.9.png differ diff --git a/packages/SystemUI/res/drawable-sw600dp-xxhdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-sw600dp-xxhdpi/heads_up_window_bg.9.png index 586a7385993f0..c76d0e1788d18 100644 Binary files a/packages/SystemUI/res/drawable-sw600dp-xxhdpi/heads_up_window_bg.9.png and b/packages/SystemUI/res/drawable-sw600dp-xxhdpi/heads_up_window_bg.9.png differ diff --git a/packages/SystemUI/res/drawable-xhdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-xhdpi/heads_up_window_bg.9.png deleted file mode 100644 index 42e5593f8206c..0000000000000 Binary files a/packages/SystemUI/res/drawable-xhdpi/heads_up_window_bg.9.png and /dev/null differ diff --git a/packages/SystemUI/res/drawable-xxhdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-xxhdpi/heads_up_window_bg.9.png deleted file mode 100644 index 586a7385993f0..0000000000000 Binary files a/packages/SystemUI/res/drawable-xxhdpi/heads_up_window_bg.9.png and /dev/null differ diff --git a/packages/SystemUI/res/drawable/heads_up_notification_row_bg.xml b/packages/SystemUI/res/drawable/heads_up_notification_row_bg.xml deleted file mode 100644 index 59d9fcfc7a16c..0000000000000 --- a/packages/SystemUI/res/drawable/heads_up_notification_row_bg.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - diff --git a/packages/SystemUI/res/layout-sw600dp/heads_up.xml b/packages/SystemUI/res/layout-sw600dp/heads_up.xml new file mode 100644 index 0000000000000..71f7c212d4fa8 --- /dev/null +++ b/packages/SystemUI/res/layout-sw600dp/heads_up.xml @@ -0,0 +1,31 @@ + + + + + diff --git a/packages/SystemUI/res/layout/heads_up.xml b/packages/SystemUI/res/layout/heads_up.xml index 564dc51cbe661..3a58b845eb921 100644 --- a/packages/SystemUI/res/layout/heads_up.xml +++ b/packages/SystemUI/res/layout/heads_up.xml @@ -17,25 +17,11 @@ ** limitations under the License. */ --> - - - - - - + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_height="wrap_content" + android:layout_width="@dimen/notification_panel_width" + android:id="@+id/content_holder" + android:layout_marginStart="@dimen/notification_panel_margin_left" + android:background="@drawable/notification_panel_bg" + /> \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 2114991327413..f5f61f4991b7b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -855,7 +855,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { PixelFormat.TRANSLUCENT); lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; lp.gravity = Gravity.TOP; - lp.y = getStatusBarHeight(); lp.setTitle("Heads Up"); lp.packageName = mContext.getPackageName(); lp.windowAnimations = R.style.Animation_StatusBar_HeadsUp; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java index 491c35e5c6d38..f4bc4a46e2046 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java @@ -28,6 +28,7 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import com.android.systemui.ExpandHelper; +import com.android.systemui.Gefingerpoken; import com.android.systemui.R; import com.android.systemui.SwipeHelper; import com.android.systemui.statusbar.BaseStatusBar; @@ -42,13 +43,13 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. private final int mTouchSensitivityDelay; private SwipeHelper mSwipeHelper; + private EdgeSwipeHelper mEdgeSwipeHelper; private BaseStatusBar mBar; private ExpandHelper mExpandHelper; - private long mStartTouchTime; + private long mStartTouchTime; private ViewGroup mContentHolder; - private ViewGroup mContentSlider; private NotificationData.Entry mHeadsUp; @@ -72,7 +73,7 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. public boolean setNotification(NotificationData.Entry headsUp) { mHeadsUp = headsUp; - mHeadsUp.row.setExpanded(false); + mHeadsUp.row.setExpanded(true); mHeadsUp.row.setShowingPublic(false); if (mContentHolder == null) { // too soon! @@ -83,7 +84,7 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. mContentHolder.setAlpha(1f); mContentHolder.removeAllViews(); mContentHolder.addView(mHeadsUp.row); - mSwipeHelper.snapChild(mContentSlider, 1f); + mSwipeHelper.snapChild(mContentHolder, 1f); mStartTouchTime = System.currentTimeMillis() + mTouchSensitivityDelay; return true; } @@ -94,10 +95,11 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. public void setMargin(int notificationPanelMarginPx) { if (SPEW) Log.v(TAG, "setMargin() " + notificationPanelMarginPx); - if (mContentSlider != null) { - FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mContentSlider.getLayoutParams(); + if (mContentHolder != null && + mContentHolder.getLayoutParams() instanceof FrameLayout.LayoutParams) { + FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mContentHolder.getLayoutParams(); lp.setMarginStart(notificationPanelMarginPx); - mContentSlider.setLayoutParams(lp); + mContentHolder.setLayoutParams(lp); } } @@ -122,15 +124,17 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. @Override public void onAttachedToWindow() { float densityScale = getResources().getDisplayMetrics().density; - float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop(); + final ViewConfiguration viewConfiguration = ViewConfiguration.get(getContext()); + float pagingTouchSlop = viewConfiguration.getScaledPagingTouchSlop(); + float touchSlop = viewConfiguration.getScaledTouchSlop(); mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop); + mEdgeSwipeHelper = new EdgeSwipeHelper(touchSlop); int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height); int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height); mExpandHelper = new ExpandHelper(getContext(), this, minHeight, maxHeight); mContentHolder = (ViewGroup) findViewById(R.id.content_holder); - mContentSlider = (ViewGroup) findViewById(R.id.content_slider); if (mHeadsUp != null) { // whoops, we're on already! @@ -144,7 +148,8 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. if (System.currentTimeMillis() < mStartTouchTime) { return true; } - return mSwipeHelper.onInterceptTouchEvent(ev) + return mEdgeSwipeHelper.onInterceptTouchEvent(ev) + || mSwipeHelper.onInterceptTouchEvent(ev) || mExpandHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev); } @@ -157,7 +162,8 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. return false; } mBar.resetHeadsUpDecayTimer(); - return mSwipeHelper.onTouchEvent(ev) + return mEdgeSwipeHelper.onTouchEvent(ev) + || mSwipeHelper.onTouchEvent(ev) || mExpandHelper.onTouchEvent(ev) || super.onTouchEvent(ev); } @@ -226,11 +232,65 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. @Override public View getChildAtPosition(MotionEvent ev) { - return mContentSlider; + return mContentHolder; } @Override public View getChildContentView(View v) { - return mContentSlider; + return mContentHolder; + } + + private class EdgeSwipeHelper implements Gefingerpoken { + private static final boolean DEBUG_EDGE_SWIPE = false; + private final float mTouchSlop; + private boolean mConsuming; + private float mFirstY; + private float mFirstX; + + public EdgeSwipeHelper(float touchSlop) { + mTouchSlop = touchSlop; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + switch (ev.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + if (DEBUG_EDGE_SWIPE) Log.d(TAG, "action down " + ev.getY()); + mFirstX = ev.getX(); + mFirstY = ev.getY(); + mConsuming = false; + break; + + case MotionEvent.ACTION_MOVE: + if (DEBUG_EDGE_SWIPE) Log.d(TAG, "action move " + ev.getY()); + final float dY = ev.getY() - mFirstY; + final float daX = Math.abs(ev.getX() - mFirstX); + final float daY = Math.abs(dY); + if (!mConsuming && (4f * daX) < daY && daY > mTouchSlop) { + if (dY > 0) { + if (DEBUG_EDGE_SWIPE) Log.d(TAG, "found an open"); + mBar.animateExpandNotificationsPanel(); + } + if (dY < 0) { + if (DEBUG_EDGE_SWIPE) Log.d(TAG, "found a close"); + mBar.onHeadsUpDismissed(); + } + mConsuming = true; + } + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + if (DEBUG_EDGE_SWIPE) Log.d(TAG, "action done" ); + mConsuming = false; + break; + } + return mConsuming; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + return mConsuming; + } } } \ No newline at end of file