Merge "Add scroll indicators to resolver list" into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8bb7ad5985
@@ -17,9 +17,15 @@
|
||||
|
||||
package com.android.internal.widget;
|
||||
|
||||
import com.android.internal.R;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
@@ -38,7 +44,6 @@ import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.AbsListView;
|
||||
import android.widget.OverScroller;
|
||||
import com.android.internal.R;
|
||||
|
||||
public class ResolverDrawerLayout extends ViewGroup {
|
||||
private static final String TAG = "ResolverDrawerLayout";
|
||||
@@ -86,6 +91,8 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
private final OverScroller mScroller;
|
||||
private final VelocityTracker mVelocityTracker;
|
||||
|
||||
private Drawable mScrollIndicatorDrawable;
|
||||
|
||||
private OnDismissedListener mOnDismissedListener;
|
||||
private RunOnDismissedListener mRunOnDismissedListener;
|
||||
|
||||
@@ -127,6 +134,8 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
mMaxCollapsedHeight);
|
||||
a.recycle();
|
||||
|
||||
mScrollIndicatorDrawable = mContext.getDrawable(R.drawable.scroll_indicator_material);
|
||||
|
||||
mScroller = new OverScroller(context, AnimationUtils.loadInterpolator(context,
|
||||
android.R.interpolator.decelerate_quint));
|
||||
mVelocityTracker = VelocityTracker.obtain();
|
||||
@@ -202,8 +211,7 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
}
|
||||
final boolean isCollapsedNew = mCollapseOffset != 0;
|
||||
if (isCollapsedOld != isCollapsedNew) {
|
||||
notifyViewAccessibilityStateChangedIfNeeded(
|
||||
AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);
|
||||
onCollapsedChanged(isCollapsedNew);
|
||||
}
|
||||
} else {
|
||||
// Start out collapsed at first unless we restored state for otherwise
|
||||
@@ -442,8 +450,7 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
mTopOffset += dy;
|
||||
final boolean isCollapsedNew = newPos != 0;
|
||||
if (isCollapsedOld != isCollapsedNew) {
|
||||
notifyViewAccessibilityStateChangedIfNeeded(
|
||||
AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);
|
||||
onCollapsedChanged(isCollapsedNew);
|
||||
}
|
||||
postInvalidateOnAnimation();
|
||||
return dy;
|
||||
@@ -451,6 +458,15 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void onCollapsedChanged(boolean isCollapsed) {
|
||||
notifyViewAccessibilityStateChangedIfNeeded(
|
||||
AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);
|
||||
|
||||
if (mScrollIndicatorDrawable != null) {
|
||||
setWillNotDraw(!isCollapsed);
|
||||
}
|
||||
}
|
||||
|
||||
void dispatchOnDismissed() {
|
||||
if (mOnDismissedListener != null) {
|
||||
mOnDismissedListener.onDismissed();
|
||||
@@ -708,6 +724,15 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawForeground(Canvas canvas) {
|
||||
if (mScrollIndicatorDrawable != null) {
|
||||
mScrollIndicatorDrawable.draw(canvas);
|
||||
}
|
||||
|
||||
super.onDrawForeground(canvas);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
final int sourceWidth = MeasureSpec.getSize(widthMeasureSpec);
|
||||
@@ -794,6 +819,8 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||
final int width = getWidth();
|
||||
|
||||
View indicatorHost = null;
|
||||
|
||||
int ypos = mTopOffset;
|
||||
int leftEdge = getPaddingLeft();
|
||||
int rightEdge = width - getPaddingRight();
|
||||
@@ -802,6 +829,9 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
final View child = getChildAt(i);
|
||||
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
|
||||
if (lp.hasNestedScrollIndicator) {
|
||||
indicatorHost = child;
|
||||
}
|
||||
|
||||
if (child.getVisibility() == GONE) {
|
||||
continue;
|
||||
@@ -822,6 +852,20 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
|
||||
ypos = bottom + lp.bottomMargin;
|
||||
}
|
||||
|
||||
if (mScrollIndicatorDrawable != null) {
|
||||
if (indicatorHost != null) {
|
||||
final int left = indicatorHost.getLeft();
|
||||
final int right = indicatorHost.getRight();
|
||||
final int bottom = indicatorHost.getTop();
|
||||
final int top = bottom - mScrollIndicatorDrawable.getIntrinsicHeight();
|
||||
mScrollIndicatorDrawable.setBounds(left, top, right, bottom);
|
||||
setWillNotDraw(!isCollapsed());
|
||||
} else {
|
||||
mScrollIndicatorDrawable = null;
|
||||
setWillNotDraw(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -861,6 +905,7 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
public static class LayoutParams extends MarginLayoutParams {
|
||||
public boolean alwaysShow;
|
||||
public boolean ignoreOffset;
|
||||
public boolean hasNestedScrollIndicator;
|
||||
|
||||
public LayoutParams(Context c, AttributeSet attrs) {
|
||||
super(c, attrs);
|
||||
@@ -873,6 +918,9 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
ignoreOffset = a.getBoolean(
|
||||
R.styleable.ResolverDrawerLayout_LayoutParams_layout_ignoreOffset,
|
||||
false);
|
||||
hasNestedScrollIndicator = a.getBoolean(
|
||||
R.styleable.ResolverDrawerLayout_LayoutParams_layout_hasNestedScrollIndicator,
|
||||
false);
|
||||
a.recycle();
|
||||
}
|
||||
|
||||
@@ -884,6 +932,7 @@ public class ResolverDrawerLayout extends ViewGroup {
|
||||
super(source);
|
||||
this.alwaysShow = source.alwaysShow;
|
||||
this.ignoreOffset = source.ignoreOffset;
|
||||
this.hasNestedScrollIndicator = source.hasNestedScrollIndicator;
|
||||
}
|
||||
|
||||
public LayoutParams(MarginLayoutParams source) {
|
||||
|
||||
@@ -30,33 +30,37 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alwaysShow="true"
|
||||
android:elevation="8dp"
|
||||
android:background="@color/white" >
|
||||
<TextView android:id="@+id/profile_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:visibility="gone"
|
||||
style="?attr/borderlessButtonStyle"
|
||||
android:textAppearance="?attr/textAppearanceButton"
|
||||
android:textColor="@color/material_deep_teal_500"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:singleLine="true"/>
|
||||
<TextView android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="56dp"
|
||||
android:textAppearance="?attr/textAppearanceMedium"
|
||||
android:gravity="start|center_vertical"
|
||||
android:paddingStart="?attr/dialogPreferredPadding"
|
||||
android:paddingEnd="?attr/dialogPreferredPadding"
|
||||
android:paddingTop="8dp"
|
||||
android:layout_below="@id/profile_button"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:paddingBottom="8dp" />
|
||||
android:background="@color/white">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profile_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:visibility="gone"
|
||||
style="?attr/borderlessButtonStyle"
|
||||
android:textAppearance="?attr/textAppearanceButton"
|
||||
android:textColor="@color/material_deep_teal_500"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:singleLine="true" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="56dp"
|
||||
android:textAppearance="?attr/textAppearanceMedium"
|
||||
android:gravity="start|center_vertical"
|
||||
android:paddingStart="?attr/dialogPreferredPadding"
|
||||
android:paddingEnd="?attr/dialogPreferredPadding"
|
||||
android:paddingTop="8dp"
|
||||
android:layout_below="@id/profile_button"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:paddingBottom="8dp" />
|
||||
</RelativeLayout>
|
||||
|
||||
<ListView
|
||||
@@ -68,6 +72,7 @@
|
||||
android:background="@color/white"
|
||||
android:elevation="8dp"
|
||||
android:nestedScrollingEnabled="true"
|
||||
android:scrollIndicators="top|bottom"
|
||||
android:divider="@null" />
|
||||
|
||||
<TextView android:id="@+id/empty"
|
||||
@@ -84,11 +89,12 @@
|
||||
<LinearLayout
|
||||
android:id="@+id/button_bar"
|
||||
android:visibility="gone"
|
||||
style="?android:attr/buttonBarStyle"
|
||||
style="?attr/buttonBarStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_ignoreOffset="true"
|
||||
android:layout_alwaysShow="true"
|
||||
android:layout_hasNestedScrollIndicator="true"
|
||||
android:gravity="end|center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:layoutDirection="locale"
|
||||
@@ -99,26 +105,30 @@
|
||||
android:paddingStart="12dp"
|
||||
android:paddingEnd="12dp"
|
||||
android:elevation="8dp">
|
||||
<Button android:id="@+id/button_once"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:maxLines="2"
|
||||
style="?android:attr/buttonBarNegativeButtonStyle"
|
||||
android:minHeight="@dimen/alert_dialog_button_bar_height"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="false"
|
||||
android:text="@string/activity_resolver_use_once"
|
||||
android:onClick="onButtonClick" />
|
||||
<Button android:id="@+id/button_always"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:maxLines="2"
|
||||
android:minHeight="@dimen/alert_dialog_button_bar_height"
|
||||
style="?android:attr/buttonBarPositiveButtonStyle"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="false"
|
||||
android:text="@string/activity_resolver_use_always"
|
||||
android:onClick="onButtonClick" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_once"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:maxLines="2"
|
||||
style="?attr/buttonBarNegativeButtonStyle"
|
||||
android:minHeight="@dimen/alert_dialog_button_bar_height"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="false"
|
||||
android:text="@string/activity_resolver_use_once"
|
||||
android:onClick="onButtonClick" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_always"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:maxLines="2"
|
||||
android:minHeight="@dimen/alert_dialog_button_bar_height"
|
||||
style="?attr/buttonBarPositiveButtonStyle"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="false"
|
||||
android:text="@string/activity_resolver_use_always"
|
||||
android:onClick="onButtonClick" />
|
||||
</LinearLayout>
|
||||
|
||||
</com.android.internal.widget.ResolverDrawerLayout>
|
||||
|
||||
@@ -22,8 +22,7 @@
|
||||
android:layout_height="match_parent"
|
||||
android:maxWidth="@dimen/resolver_max_width"
|
||||
android:maxCollapsedHeight="144dp"
|
||||
android:id="@id/contentPanel"
|
||||
>
|
||||
android:id="@id/contentPanel">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -31,66 +30,75 @@
|
||||
android:layout_alwaysShow="true"
|
||||
android:orientation="vertical"
|
||||
android:background="@color/white"
|
||||
android:elevation="8dp" >
|
||||
android:elevation="8dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="64dp"
|
||||
android:orientation="horizontal" >
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView android:id="@+id/icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_gravity="start|top"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:scaleType="fitCenter" />
|
||||
<TextView android:id="@+id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="?android:attr/listPreferredItemHeight"
|
||||
android:layout_marginStart="16dp"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:gravity="start|center_vertical"
|
||||
android:paddingEnd="16dp" />
|
||||
<LinearLayout android:id="@+id/profile_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingBottom="4dp"
|
||||
android:focusable="true"
|
||||
android:visibility="gone"
|
||||
style="?attr/borderlessButtonStyle">
|
||||
<ImageView android:id="@+id/icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_gravity="start|center_vertical"
|
||||
android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:scaleType="fitCenter" />
|
||||
<TextView android:id="@id/text1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start|center_vertical"
|
||||
android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
|
||||
android:textAppearance="?attr/textAppearanceButton"
|
||||
android:textColor="?attr/textColorPrimary"
|
||||
android:minLines="1"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="marquee" />
|
||||
<ImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_gravity="start|top"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:scaleType="fitCenter" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="?attr/listPreferredItemHeight"
|
||||
android:layout_marginStart="16dp"
|
||||
android:textAppearance="?attr/textAppearanceMedium"
|
||||
android:gravity="start|center_vertical"
|
||||
android:paddingEnd="16dp" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/profile_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingBottom="4dp"
|
||||
android:focusable="true"
|
||||
android:visibility="gone"
|
||||
style="?attr/borderlessButtonStyle">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_gravity="start|center_vertical"
|
||||
android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:scaleType="fitCenter" />
|
||||
|
||||
<TextView
|
||||
android:id="@id/text1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start|center_vertical"
|
||||
android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
|
||||
android:textAppearance="?attr/textAppearanceButton"
|
||||
android:textColor="?attr/textColorPrimary"
|
||||
android:minLines="1"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="marquee" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/button_bar"
|
||||
android:visibility="gone"
|
||||
style="?android:attr/buttonBarStyle"
|
||||
style="?attr/buttonBarStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alwaysShow="true"
|
||||
@@ -104,30 +112,36 @@
|
||||
android:paddingEnd="12dp"
|
||||
android:background="@color/white"
|
||||
android:elevation="8dp">
|
||||
<Button android:id="@+id/button_once"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:maxLines="2"
|
||||
style="?android:attr/buttonBarNegativeButtonStyle"
|
||||
android:minHeight="@dimen/alert_dialog_button_bar_height"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="false"
|
||||
android:text="@string/activity_resolver_use_once"
|
||||
android:onClick="onButtonClick" />
|
||||
<Button android:id="@+id/button_always"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:maxLines="2"
|
||||
android:minHeight="@dimen/alert_dialog_button_bar_height"
|
||||
style="?android:attr/buttonBarPositiveButtonStyle"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="false"
|
||||
android:text="@string/activity_resolver_use_always"
|
||||
android:onClick="onButtonClick" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_once"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:maxLines="2"
|
||||
style="?attr/buttonBarNegativeButtonStyle"
|
||||
android:minHeight="@dimen/alert_dialog_button_bar_height"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="false"
|
||||
android:text="@string/activity_resolver_use_once"
|
||||
android:onClick="onButtonClick" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_always"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:maxLines="2"
|
||||
android:minHeight="@dimen/alert_dialog_button_bar_height"
|
||||
style="?attr/buttonBarPositiveButtonStyle"
|
||||
android:layout_height="wrap_content"
|
||||
android:enabled="false"
|
||||
android:text="@string/activity_resolver_use_always"
|
||||
android:onClick="onButtonClick" />
|
||||
</LinearLayout>
|
||||
<View android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?android:attr/dividerVertical" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dividerVertical" />
|
||||
</LinearLayout>
|
||||
|
||||
<ListView
|
||||
@@ -139,7 +153,6 @@
|
||||
android:background="@color/white"
|
||||
android:elevation="8dp"
|
||||
android:nestedScrollingEnabled="true"
|
||||
android:divider="@null"
|
||||
/>
|
||||
android:divider="@null" />
|
||||
|
||||
</com.android.internal.widget.ResolverDrawerLayout>
|
||||
|
||||
@@ -8138,6 +8138,7 @@ i
|
||||
<attr name="layout_alwaysShow" format="boolean" />
|
||||
<attr name="layout_ignoreOffset" format="boolean" />
|
||||
<attr name="layout_gravity" />
|
||||
<attr name="layout_hasNestedScrollIndicator" format="boolean" />
|
||||
</declare-styleable>
|
||||
|
||||
<!-- @hide -->
|
||||
|
||||
Reference in New Issue
Block a user