summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ben Lin <linben@google.com> 2016-11-16 13:21:40 -0800
committer Ben Lin <linben@google.com> 2016-11-17 14:57:17 -0800
commitd8d7c255cde4da887bb83667520a54e01726b6b1 (patch)
treeead883be4dade8e3ed2e65431f9efe029d0c2e65
parentbf01dcab88930b75f6c0f2387cdbb8f934bf5bf6 (diff)
Drag and Drop UI Polish.
Bug: 31182423 Change-Id: I2bf644c788ba2431ef3ff8ca9155c661f21c64c8
-rw-r--r--res/drawable/drag_shadow_background.xml3
-rw-r--r--res/drawable/ic_drop_not_ok_badge.xml8
-rw-r--r--res/drawable/ic_drop_ok_badge.xml8
-rw-r--r--res/layout/drag_shadow_layout.xml42
-rw-r--r--res/layout/drop_badge.xml4
-rw-r--r--res/values/dimens.xml10
-rw-r--r--src/com/android/documentsui/DragShadowBuilder.java29
-rw-r--r--src/com/android/documentsui/DropBadgeView.java3
8 files changed, 70 insertions, 37 deletions
diff --git a/res/drawable/drag_shadow_background.xml b/res/drawable/drag_shadow_background.xml
index 5940bb375..58c0e1afd 100644
--- a/res/drawable/drag_shadow_background.xml
+++ b/res/drawable/drag_shadow_background.xml
@@ -17,9 +17,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/item_drag_shadow_background" />
- <stroke
- android:width="1dp"
- android:color="#ff9f9f9f" />
<corners
android:bottomRightRadius="2dp"
android:bottomLeftRadius="2dp"
diff --git a/res/drawable/ic_drop_not_ok_badge.xml b/res/drawable/ic_drop_not_ok_badge.xml
index 45c8b6dd7..402aff8f8 100644
--- a/res/drawable/ic_drop_not_ok_badge.xml
+++ b/res/drawable/ic_drop_not_ok_badge.xml
@@ -15,10 +15,10 @@ Copyright (C) 2016 The Android Open Source Project
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="15dp"
- android:height="15dp"
- android:viewportWidth="30.0"
- android:viewportHeight="30.0">
+ android:width="14dp"
+ android:height="14dp"
+ android:viewportWidth="28.0"
+ android:viewportHeight="28.0">
<group
android:name="whiteBg">
diff --git a/res/drawable/ic_drop_ok_badge.xml b/res/drawable/ic_drop_ok_badge.xml
index 48e3e838a..7f1be3151 100644
--- a/res/drawable/ic_drop_ok_badge.xml
+++ b/res/drawable/ic_drop_ok_badge.xml
@@ -14,10 +14,10 @@ Copyright (C) 2016 The Android Open Source Project
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="15dp"
- android:height="15dp"
- android:viewportWidth="30.0"
- android:viewportHeight="30.0">
+ android:width="14dp"
+ android:height="14dp"
+ android:viewportWidth="28.0"
+ android:viewportHeight="28.0">
<group
android:name="whiteBg">
diff --git a/res/layout/drag_shadow_layout.xml b/res/layout/drag_shadow_layout.xml
index e94c443ae..0f0671820 100644
--- a/res/layout/drag_shadow_layout.xml
+++ b/res/layout/drag_shadow_layout.xml
@@ -14,25 +14,35 @@
limitations under the License.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<!-- Transparent container so shadow layer can be drawn -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingStart="8dp"
- android:paddingEnd="8dp"
- android:orientation="horizontal"
- android:gravity="center_vertical|left"
- android:background="@drawable/drag_shadow_background">
+ android:padding="8dp"
+ android:background="@*android:color/transparent">
- <include layout="@layout/drop_badge"/>
-
- <TextView
- android:id="@android:id/title"
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:maxLines="1"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- android:textColor="@color/item_title"
- android:paddingStart="8dp"/>
+ android:layout_height="match_parent"
+ android:paddingStart="12dp"
+ android:paddingEnd="12dp"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:background="@drawable/drag_shadow_background">
+
+ <include layout="@layout/drop_badge"/>
+
+ <TextView
+ android:id="@android:id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:maxLines="1"
+ android:ellipsize="end"
+ android:textAlignment="viewStart"
+ android:textColor="@color/item_title"
+ android:paddingStart="6dp"
+ android:paddingBottom="1dp"/>
+ </LinearLayout>
</LinearLayout>
diff --git a/res/layout/drop_badge.xml b/res/layout/drop_badge.xml
index 485f400f2..e17fa1ce0 100644
--- a/res/layout/drop_badge.xml
+++ b/res/layout/drop_badge.xml
@@ -17,8 +17,8 @@
<com.android.documentsui.DropBadgeView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/icon"
- android:layout_width="@dimen/root_icon_size"
- android:layout_height="@dimen/root_icon_size"
+ android:layout_width="26dp"
+ android:layout_height="26dp"
android:scaleType="centerInside"
android:contentDescription="@null"
android:duplicateParentState="true"/> \ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 2c4ff9977..a9be865e3 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -43,8 +43,10 @@
<dimen name="drawer_edge_width">12dp</dimen>
- <dimen name="drag_shadow_width">160dp</dimen>
- <dimen name="drag_shadow_height">48dp</dimen>
+ <dimen name="drag_shadow_width">176dp</dimen>
+ <dimen name="drag_shadow_height">64dp</dimen>
+ <dimen name="drag_shadow_radius">4dp</dimen>
+ <dimen name="drag_shadow_padding">8dp</dimen>
<dimen name="doc_header_sort_icon_size">16dp</dimen>
<dimen name="doc_header_height">60dp</dimen>
@@ -52,6 +54,6 @@
<dimen name="dropdown_sort_widget_margin">20dp</dimen>
<dimen name="dropdown_sort_widget_icon_size">30dp</dimen>
- <dimen name="drop_icon_height">15dp</dimen>
- <dimen name="drop_icon_width">15dp</dimen>
+ <dimen name="drop_icon_height">14dp</dimen>
+ <dimen name="drop_icon_width">14dp</dimen>
</resources>
diff --git a/src/com/android/documentsui/DragShadowBuilder.java b/src/com/android/documentsui/DragShadowBuilder.java
index 24e037da9..2bc6dde65 100644
--- a/src/com/android/documentsui/DragShadowBuilder.java
+++ b/src/com/android/documentsui/DragShadowBuilder.java
@@ -18,6 +18,8 @@ package com.android.documentsui;
import android.content.Context;
import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
@@ -41,18 +43,23 @@ public final class DragShadowBuilder extends View.DragShadowBuilder {
private final DropBadgeView mIcon;
private final int mWidth;
private final int mHeight;
+ private final int mShadowRadius;
+ private int mPadding;
+ private Paint paint;
public DragShadowBuilder(Context context) {
mWidth = context.getResources().getDimensionPixelSize(R.dimen.drag_shadow_width);
mHeight = context.getResources().getDimensionPixelSize(R.dimen.drag_shadow_height);
+ mShadowRadius = context.getResources().getDimensionPixelSize(R.dimen.drag_shadow_radius);
+ mPadding = context.getResources().getDimensionPixelSize(R.dimen.drag_shadow_padding);
mShadowView = LayoutInflater.from(context).inflate(R.layout.drag_shadow_layout, null);
mTitle = (TextView) mShadowView.findViewById(android.R.id.title);
mIcon = (DropBadgeView) mShadowView.findViewById(android.R.id.icon);
- mShadowView
- .setBackground(context.getResources().getDrawable(R.drawable.drag_shadow_background,
- null));
+ // Important for certain APIs
+ mShadowView.setLayerType(View.LAYER_TYPE_SOFTWARE, paint);
+ paint = new Paint(Paint.ANTI_ALIAS_FLAG);
}
@Override
@@ -68,8 +75,22 @@ public final class DragShadowBuilder extends View.DragShadowBuilder {
// Calling measure is necessary in order for all child views to get correctly laid out.
mShadowView.measure(
View.MeasureSpec.makeMeasureSpec(r.right- r.left, View.MeasureSpec.EXACTLY),
- View.MeasureSpec.makeMeasureSpec(r.top- r.bottom, View.MeasureSpec.EXACTLY));
+ View.MeasureSpec.makeMeasureSpec(r.bottom - r.top , View.MeasureSpec.EXACTLY));
mShadowView.layout(r.left, r.top, r.right, r.bottom);
+
+ // Since DragShadow is not an actual view drawn in hardware-accelerated window,
+ // android:elevation does not work; we need to draw the shadow ourselves manually.
+ paint.setColor(Color.TRANSPARENT);
+ // Shadow 1
+ int opacity = (int) (255 * 0.1);
+ paint.setShadowLayer(mShadowRadius, 0, 0, Color.argb(opacity, 0, 0, 0));
+ canvas.drawRect(r.left + mPadding, r.top + mPadding, r.right - mPadding,
+ r.bottom - mPadding, paint);
+ // Shadow 2
+ opacity = (int) (255 * 0.24);
+ paint.setShadowLayer(mShadowRadius, 0, mShadowRadius, Color.argb(opacity, 0, 0, 0));
+ canvas.drawRect(r.left + mPadding, r.top + mPadding, r.right - mPadding,
+ r.bottom - mPadding, paint);
mShadowView.draw(canvas);
}
diff --git a/src/com/android/documentsui/DropBadgeView.java b/src/com/android/documentsui/DropBadgeView.java
index 8ed67013d..6d18af0ab 100644
--- a/src/com/android/documentsui/DropBadgeView.java
+++ b/src/com/android/documentsui/DropBadgeView.java
@@ -41,6 +41,7 @@ public final class DropBadgeView extends ImageView {
.getDimensionPixelSize(R.dimen.drop_icon_height);
final int badgeWidth = context.getResources()
.getDimensionPixelSize(R.dimen.drop_icon_width);
+ final int iconSize = context.getResources().getDimensionPixelSize(R.dimen.root_icon_size);
Drawable okBadge = context.getResources().getDrawable(R.drawable.drop_badge_states, null);
Drawable defaultIcon = context.getResources()
@@ -50,7 +51,9 @@ public final class DropBadgeView extends ImageView {
mBackground = new LayerDrawable(list);
mBackground.setLayerGravity(1, Gravity.BOTTOM | Gravity.RIGHT);
+ mBackground.setLayerGravity(0, Gravity.TOP | Gravity.LEFT);
mBackground.setLayerSize(1, badgeWidth, badgeHeight);
+ mBackground.setLayerSize(0, iconSize, iconSize);
setBackground(mBackground);
}