Merge "Fix panel handles on large screens." into jb-mr1-dev
diff --git a/packages/SystemUI/res/layout/quick_settings.xml b/packages/SystemUI/res/layout/quick_settings.xml
index da4b133..c1bcdfe 100644
--- a/packages/SystemUI/res/layout/quick_settings.xml
+++ b/packages/SystemUI/res/layout/quick_settings.xml
@@ -24,27 +24,21 @@
<!-- TODO: Put into ScrollView -->
<ScrollView
android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <com.android.systemui.statusbar.phone.QuickSettingsContainerView
- android:id="@+id/quick_settings_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:animateLayoutChanges="true"
- android:columnCount="@integer/quick_settings_num_columns"
- />
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/close_handle_underlap"
+ >
+ <com.android.systemui.statusbar.phone.QuickSettingsContainerView
+ android:id="@+id/quick_settings_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:animateLayoutChanges="true"
+ android:columnCount="@integer/quick_settings_num_columns"
+ />
</ScrollView>
- <LinearLayout android:id="@+id/handle"
+
+ <View
+ android:id="@+id/handle"
android:layout_width="match_parent"
android:layout_height="@dimen/close_handle_height"
- android:layout_gravity="bottom"
- android:orientation="vertical"
- >
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="@dimen/close_handle_height"
- android:layout_gravity="bottom"
- android:scaleType="fitXY"
- android:src="@drawable/status_bar_close"
- />
- </LinearLayout>
+ />
</com.android.systemui.statusbar.phone.SettingsPanelView >
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml
index 6436a7f..ffcead0 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded.xml
@@ -76,10 +76,9 @@
</ScrollView>
</LinearLayout>
- <View android:id="@+id/handle"
+ <View
+ android:id="@+id/handle"
android:layout_width="match_parent"
android:layout_height="@dimen/close_handle_height"
- android:layout_gravity="bottom"
/>
-
</com.android.systemui.statusbar.phone.NotificationPanelView><!-- end of sliding panel -->
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 46c3903..5b15844 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -146,10 +146,10 @@
<dimen name="navbar_search_panel_height">230dip</dimen>
<!-- Height of the draggable handle at the bottom of the phone notification panel -->
- <dimen name="close_handle_height">32dp</dimen>
+ <dimen name="close_handle_height">36dp</dimen>
- <!-- Amount of close_handle that will not overlap the notification list -->
- <dimen name="close_handle_underlap">18dp</dimen>
+ <!-- Amount of close_handle that will NOT overlap the notification list -->
+ <dimen name="close_handle_underlap">32dp</dimen>
<!-- Height of the notification panel header bar -->
<dimen name="notification_panel_header_height">48dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CloseDragHandle.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CloseDragHandle.java
index ba64282..ee01489 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CloseDragHandle.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CloseDragHandle.java
@@ -36,7 +36,9 @@
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
- if (event.getAction() != MotionEvent.ACTION_DOWN) {
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ setPressed(true);
+ } else {
mService.interceptTouchEvent(event);
}
return true;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index 9c978d5..c9ec481 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -21,19 +21,28 @@
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.view.View;
+
import com.android.systemui.R;
public class NotificationPanelView extends PanelView {
Drawable mHandleBar;
float mHandleBarHeight;
+ View mHandleView;
public NotificationPanelView(Context context, AttributeSet attrs) {
super(context, attrs);
+ }
- Resources resources = context.getResources();
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+
+ Resources resources = getContext().getResources();
mHandleBar = resources.getDrawable(R.drawable.status_bar_close);
mHandleBarHeight = resources.getDimension(R.dimen.close_handle_height);
+ mHandleView = findViewById(R.id.handle);
}
@Override
@@ -44,19 +53,24 @@
super.fling(vel, always);
}
+ // We draw the handle ourselves so that it's always glued to the bottom of the window.
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (changed) {
- mHandleBar.setBounds(0, 0, getWidth(), (int) mHandleBarHeight);
+ final int pl = getPaddingLeft();
+ final int pr = getPaddingRight();
+ mHandleBar.setBounds(pl, 0, getWidth() - pr, (int) mHandleBarHeight);
}
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
- canvas.translate(0, getHeight() - mHandleBarHeight);
+ final int off = (int) (getHeight() - mHandleBarHeight - getPaddingBottom());
+ canvas.translate(0, off);
+ mHandleBar.setState(mHandleView.getDrawableState());
mHandleBar.draw(canvas);
- canvas.translate(0, -getHeight() + mHandleBarHeight);
+ canvas.translate(0, -off);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index 45a107d..d94dbe4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -220,6 +220,7 @@
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mTracking = true;
+ mHandleView.setPressed(true);
mInitialTouchY = y;
mVelocityTracker = VelocityTracker.obtain();
trackMovement(event);
@@ -239,6 +240,7 @@
case MotionEvent.ACTION_CANCEL:
mFinalTouchY = y;
mTracking = false;
+ mHandleView.setPressed(false);
mBar.onTrackingStopped(PanelView.this);
trackMovement(event);
mVelocityTracker.computeCurrentVelocity(1000);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
index 2ed450dd..f9d9dac0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
@@ -20,6 +20,8 @@
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
@@ -37,6 +39,10 @@
private QuickSettings mQS;
private QuickSettingsContainerView mQSContainer;
+ Drawable mHandleBar;
+ float mHandleBarHeight;
+ View mHandleView;
+
public SettingsPanelView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@@ -47,6 +53,11 @@
mQSContainer = (QuickSettingsContainerView) findViewById(R.id.quick_settings_container);
mQS = new QuickSettings(getContext(), mQSContainer);
+
+ Resources resources = getContext().getResources();
+ mHandleBar = resources.getDrawable(R.drawable.status_bar_close);
+ mHandleBarHeight = resources.getDimension(R.dimen.close_handle_height);
+ mHandleView = findViewById(R.id.handle);
}
@Override
@@ -95,4 +106,25 @@
mQS.setService(phoneStatusBar);
}
}
+
+ // We draw the handle ourselves so that it's always glued to the bottom of the window.
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ if (changed) {
+ final int pl = getPaddingLeft();
+ final int pr = getPaddingRight();
+ mHandleBar.setBounds(pl, 0, getWidth() - pr, (int) mHandleBarHeight);
+ }
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ super.draw(canvas);
+ final int off = (int) (getHeight() - mHandleBarHeight - getPaddingBottom());
+ canvas.translate(0, off);
+ mHandleBar.setState(mHandleView.getDrawableState());
+ mHandleBar.draw(canvas);
+ canvas.translate(0, -off);
+ }
}