Fix panel handles on large screens.

Bug: 7171620
Change-Id: If8445210fe654aa0b8ba508f4e6f93ad6d4fca14
This commit is contained in:
Daniel Sandler
2012-09-27 14:46:58 -04:00
parent 9a4a0376a7
commit 13522a2e40
7 changed files with 74 additions and 31 deletions

View File

@@ -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 >

View File

@@ -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 -->

View File

@@ -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>

View File

@@ -36,7 +36,9 @@ public class CloseDragHandle extends LinearLayout {
*/
@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;

View File

@@ -21,19 +21,28 @@ import android.content.res.Resources;
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 @@ public class NotificationPanelView extends PanelView {
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);
}
}

View File

@@ -220,6 +220,7 @@ public class PanelView extends FrameLayout {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mTracking = true;
mHandleView.setPressed(true);
mInitialTouchY = y;
mVelocityTracker = VelocityTracker.obtain();
trackMovement(event);
@@ -239,6 +240,7 @@ public class PanelView extends FrameLayout {
case MotionEvent.ACTION_CANCEL:
mFinalTouchY = y;
mTracking = false;
mHandleView.setPressed(false);
mBar.onTrackingStopped(PanelView.this);
trackMovement(event);
mVelocityTracker.computeCurrentVelocity(1000);

View File

@@ -20,6 +20,8 @@ import android.animation.LayoutTransition;
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 @@ public class SettingsPanelView extends PanelView {
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 @@ public class SettingsPanelView extends PanelView {
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 @@ public class SettingsPanelView extends PanelView {
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);
}
}