diff options
| author | 2016-04-14 01:45:33 +0000 | |
|---|---|---|
| committer | 2016-04-14 01:45:35 +0000 | |
| commit | 8bb7ad598560fda42ec256f02ba69cf54b433a85 (patch) | |
| tree | 3734f756f925b68f23d5858277468e8c01bdd96c | |
| parent | 6309cabcda6a6a3e2e397808f34ec6cc91b535aa (diff) | |
| parent | b0e22ecf7d00a5fe5c5999c2d39b191ceed64d83 (diff) | |
Merge "Add scroll indicators to resolver list" into nyc-dev
| -rw-r--r-- | core/java/com/android/internal/widget/ResolverDrawerLayout.java | 59 | ||||
| -rw-r--r-- | core/res/res/layout/resolver_list.xml | 106 | ||||
| -rw-r--r-- | core/res/res/layout/resolver_list_with_default.xml | 165 | ||||
| -rw-r--r-- | core/res/res/values/attrs.xml | 1 |
4 files changed, 202 insertions, 129 deletions
diff --git a/core/java/com/android/internal/widget/ResolverDrawerLayout.java b/core/java/com/android/internal/widget/ResolverDrawerLayout.java index c4347f832bd5..8b9d5034b0c2 100644 --- a/core/java/com/android/internal/widget/ResolverDrawerLayout.java +++ b/core/java/com/android/internal/widget/ResolverDrawerLayout.java @@ -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(); @@ -709,6 +725,15 @@ public class ResolverDrawerLayout extends ViewGroup { } @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); int widthSize = sourceWidth; @@ -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) { diff --git a/core/res/res/layout/resolver_list.xml b/core/res/res/layout/resolver_list.xml index 5850e5090926..ae945031f11d 100644 --- a/core/res/res/layout/resolver_list.xml +++ b/core/res/res/layout/resolver_list.xml @@ -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> diff --git a/core/res/res/layout/resolver_list_with_default.xml b/core/res/res/layout/resolver_list_with_default.xml index 31361e5f9c48..02dc2ede430d 100644 --- a/core/res/res/layout/resolver_list_with_default.xml +++ b/core/res/res/layout/resolver_list_with_default.xml @@ -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> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index a320ef63face..85e0b88bd937 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -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 --> |