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
new file mode 100644
index 0000000000000..6002cfbe95d77
Binary files /dev/null and b/packages/SystemUI/res/drawable-sw600dp-xhdpi/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
new file mode 100644
index 0000000000000..42e5593f8206c
Binary files /dev/null and b/packages/SystemUI/res/drawable-xhdpi/heads_up_window_bg.9.png differ
diff --git a/packages/SystemUI/res/drawable/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable/heads_up_window_bg.9.png
deleted file mode 100644
index c68ccdca0749e..0000000000000
Binary files a/packages/SystemUI/res/drawable/heads_up_window_bg.9.png and /dev/null differ
diff --git a/packages/SystemUI/res/layout/heads_up.xml b/packages/SystemUI/res/layout/heads_up.xml
index 95eec0f6a47c1..564dc51cbe661 100644
--- a/packages/SystemUI/res/layout/heads_up.xml
+++ b/packages/SystemUI/res/layout/heads_up.xml
@@ -24,12 +24,18 @@
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical"
- android:paddingTop="@*android:dimen/status_bar_height"
>
+ android:layout_height="wrap_content"
+ android:layout_width="@dimen/notification_panel_width"
+ android:id="@+id/content_slider"
+ android:layout_marginStart="@dimen/notification_panel_margin_left"
+ >
+
+
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index f90f08a948985..e0b3bc62bb72c 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -212,4 +212,7 @@
17dp
32dp
+
+
+ -1dp
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 3a8145408c6f8..fc6e74e2dd018 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -362,8 +362,6 @@ public class PhoneStatusBar extends BaseStatusBar {
addNavigationBar();
- if (ENABLE_HEADS_UP) addHeadsUpView();
-
// Lastly, call to the icon policy to install/update all the icons.
mIconPolicy = new PhoneStatusBarPolicy(mContext);
}
@@ -840,9 +838,8 @@ public class PhoneStatusBar extends BaseStatusBar {
private void addHeadsUpView() {
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.WRAP_CONTENT,
- WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL, // above the status bar!
+ LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT,
+ WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL, // below the status bar!
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
@@ -851,7 +848,8 @@ public class PhoneStatusBar extends BaseStatusBar {
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
PixelFormat.TRANSLUCENT);
lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
- lp.gravity = Gravity.TOP | Gravity.FILL_HORIZONTAL;
+ lp.gravity = Gravity.TOP;
+ lp.y = getStatusBarHeight();
lp.setTitle("Heads Up");
lp.packageName = mContext.getPackageName();
lp.windowAnimations = R.style.Animation_StatusBar_HeadsUp;
@@ -2293,6 +2291,7 @@ public class PhoneStatusBar extends BaseStatusBar {
@Override
public void createAndAddWindows() {
addStatusBarWindow();
+ if (ENABLE_HEADS_UP) addHeadsUpView();
}
private void addStatusBarWindow() {
@@ -2364,6 +2363,10 @@ public class PhoneStatusBar extends BaseStatusBar {
mSettingsPanel.setLayoutParams(lp);
}
+ if (ENABLE_HEADS_UP && mHeadsUpNotificationView != null) {
+ mHeadsUpNotificationView.setMargin(mNotificationPanelMarginPx);
+ }
+
updateCarrierLabelVisibility(false);
}
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 7a8ce4f8a6ef9..4920ba575e7a0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
@@ -26,6 +26,7 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
+import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.android.systemui.ExpandHelper;
@@ -34,7 +35,7 @@ import com.android.systemui.SwipeHelper;
import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.NotificationData;
-public class HeadsUpNotificationView extends LinearLayout implements SwipeHelper.Callback, ExpandHelper.Callback {
+public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.Callback, ExpandHelper.Callback {
private static final String TAG = "HeadsUpNotificationView";
private static final boolean DEBUG = false;
@@ -47,11 +48,8 @@ public class HeadsUpNotificationView extends LinearLayout implements SwipeHelper
private ExpandHelper mExpandHelper;
private long mStartTouchTime;
- public ViewGroup getHolder() {
- return mContentHolder;
- }
-
private ViewGroup mContentHolder;
+ private ViewGroup mContentSlider;
private NotificationData.Entry mHeadsUp;
@@ -61,101 +59,18 @@ public class HeadsUpNotificationView extends LinearLayout implements SwipeHelper
public HeadsUpNotificationView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
- setOrientation(LinearLayout.VERTICAL);
mTouchSensitivityDelay = getResources().getInteger(R.integer.heads_up_sensitivity_delay);
if (DEBUG) Log.v(TAG, "create() " + mTouchSensitivityDelay);
}
- @Override
- public void onAttachedToWindow() {
- float densityScale = getResources().getDisplayMetrics().density;
- float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
- mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop);
-
- int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height);
- int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height);
- mExpandHelper = new ExpandHelper(mContext, this, minHeight, maxHeight);
-
- mContentHolder = (ViewGroup) findViewById(R.id.contentHolder);
- if (mHeadsUp != null) {
- // whoops, we're on already!
- setNotification(mHeadsUp);
- }
- }
-
public void setBar(BaseStatusBar bar) {
mBar = bar;
}
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- if (DEBUG) Log.v(TAG, "onInterceptTouchEvent()");
- if (System.currentTimeMillis() < mStartTouchTime) {
- return true;
- }
- return mSwipeHelper.onInterceptTouchEvent(ev)
- || mExpandHelper.onInterceptTouchEvent(ev)
- || super.onInterceptTouchEvent(ev);
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- if (System.currentTimeMillis() < mStartTouchTime) {
- return false;
- }
- mBar.resetHeadsUpDecayTimer();
- return mSwipeHelper.onTouchEvent(ev)
- || mExpandHelper.onTouchEvent(ev)
- || super.onTouchEvent(ev);
- }
-
- public boolean canChildBeDismissed(View v) {
- return true;
- }
-
- public void onChildDismissed(View v) {
- Log.v(TAG, "User swiped heads up to dismiss");
- mBar.onHeadsUpDismissed();
- }
-
- public void onBeginDrag(View v) {
- }
-
- public void onDragCancelled(View v) {
- mContentHolder.setAlpha(1f); // sometimes this isn't quite reset
- }
-
- public View getChildAtPosition(MotionEvent ev) {
+ public ViewGroup getHolder() {
return mContentHolder;
}
- public View getChildContentView(View v) {
- return v;
- }
-
- @Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- float densityScale = getResources().getDisplayMetrics().density;
- mSwipeHelper.setDensityScale(densityScale);
- float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
- mSwipeHelper.setPagingTouchSlop(pagingTouchSlop);
- }
-
- @Override
- public void onDraw(android.graphics.Canvas c) {
- super.onDraw(c);
- if (DEBUG) {
- //Log.d(TAG, "onDraw: canvas height: " + c.getHeight() + "px; measured height: "
- // + getMeasuredHeight() + "px");
- c.save();
- c.clipRect(6, 6, c.getWidth() - 6, getMeasuredHeight() - 6,
- android.graphics.Region.Op.DIFFERENCE);
- c.drawColor(0xFFcc00cc);
- c.restore();
- }
- }
-
public boolean setNotification(NotificationData.Entry headsUp) {
mHeadsUp = headsUp;
mHeadsUp.row.setExpanded(false);
@@ -172,6 +87,92 @@ public class HeadsUpNotificationView extends LinearLayout implements SwipeHelper
return true;
}
+ public boolean isInsistent() {
+ return mHeadsUp != null
+ && (mHeadsUp.notification.getNotification().flags & Notification.FLAG_INSISTENT) != 0;
+ }
+
+ public void setMargin(int notificationPanelMarginPx) {
+ if (DEBUG) Log.v(TAG, "setMargin() " + notificationPanelMarginPx);
+ if (mContentSlider != null) {
+ FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mContentSlider.getLayoutParams();
+ lp.setMarginStart(notificationPanelMarginPx);
+ mContentSlider.setLayoutParams(lp);
+ }
+ }
+
+ // LinearLayout methods
+
+ @Override
+ public void onDraw(android.graphics.Canvas c) {
+ super.onDraw(c);
+ if (DEBUG) {
+ //Log.d(TAG, "onDraw: canvas height: " + c.getHeight() + "px; measured height: "
+ // + getMeasuredHeight() + "px");
+ c.save();
+ c.clipRect(6, 6, c.getWidth() - 6, getMeasuredHeight() - 6,
+ android.graphics.Region.Op.DIFFERENCE);
+ c.drawColor(0xFFcc00cc);
+ c.restore();
+ }
+ }
+
+ // ViewGroup methods
+
+ @Override
+ public void onAttachedToWindow() {
+ float densityScale = getResources().getDisplayMetrics().density;
+ float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
+ mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop);
+
+ int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height);
+ int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height);
+ mExpandHelper = new ExpandHelper(mContext, 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!
+ setNotification(mHeadsUp);
+ }
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ if (DEBUG) Log.v(TAG, "onInterceptTouchEvent()");
+ if (System.currentTimeMillis() < mStartTouchTime) {
+ return true;
+ }
+ return mSwipeHelper.onInterceptTouchEvent(ev)
+ || mExpandHelper.onInterceptTouchEvent(ev)
+ || super.onInterceptTouchEvent(ev);
+ }
+
+ // View methods
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ if (System.currentTimeMillis() < mStartTouchTime) {
+ return false;
+ }
+ mBar.resetHeadsUpDecayTimer();
+ return mSwipeHelper.onTouchEvent(ev)
+ || mExpandHelper.onTouchEvent(ev)
+ || super.onTouchEvent(ev);
+ }
+
+ @Override
+ protected void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ float densityScale = getResources().getDisplayMetrics().density;
+ mSwipeHelper.setDensityScale(densityScale);
+ float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
+ mSwipeHelper.setPagingTouchSlop(pagingTouchSlop);
+ }
+
+ // ExpandHelper.Callback methods
+
@Override
public View getChildAtRawPosition(float x, float y) {
return getChildAtPosition(x, y);
@@ -201,8 +202,35 @@ public class HeadsUpNotificationView extends LinearLayout implements SwipeHelper
}
}
- public boolean isInsistent() {
- return mHeadsUp != null
- && (mHeadsUp.notification.getNotification().flags & Notification.FLAG_INSISTENT) != 0;
+ // SwipeHelper.Callback methods
+
+ @Override
+ public boolean canChildBeDismissed(View v) {
+ return true;
+ }
+
+ @Override
+ public void onChildDismissed(View v) {
+ Log.v(TAG, "User swiped heads up to dismiss");
+ mBar.onHeadsUpDismissed();
+ }
+
+ @Override
+ public void onBeginDrag(View v) {
+ }
+
+ @Override
+ public void onDragCancelled(View v) {
+ mContentHolder.setAlpha(1f); // sometimes this isn't quite reset
+ }
+
+ @Override
+ public View getChildAtPosition(MotionEvent ev) {
+ return mContentSlider;
+ }
+
+ @Override
+ public View getChildContentView(View v) {
+ return v;
}
}
\ No newline at end of file