From ee3e1603fdbbe24b0cbf3cb85c456696cf3b7941 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 1 Oct 2013 15:32:13 -0700 Subject: [PATCH] Fix animations, padding in RTL mode. Show directory animations coming in from left-side when in RTL language. Also fix NinePatchDrawable to correctly mirror its padding when auto-mirrored, and fix InsetDrawable to propagate the layout direction to the wrapped Drawable. Bug: 10987190, 11030793 Change-Id: I1213802a07d0c4ced93438df1e6ddf5aed3df677 --- .../graphics/drawable/InsetDrawable.java | 8 +++++- .../graphics/drawable/NinePatchDrawable.java | 24 +++++++++++++----- .../res/animator-ldrtl/dir_down.xml | 22 ++++++++++++++++ .../DocumentsUI/res/animator-ldrtl/dir_up.xml | 22 ++++++++++++++++ ...ir_shadow.9.png => ic_dir_shadow_am.9.png} | Bin ...9.png => ic_drawer_shadow_tablet_am.9.png} | Bin ...ir_shadow.9.png => ic_dir_shadow_am.9.png} | Bin ...9.png => ic_drawer_shadow_tablet_am.9.png} | Bin ...ir_shadow.9.png => ic_dir_shadow_am.9.png} | Bin ...9.png => ic_drawer_shadow_tablet_am.9.png} | Bin ...ir_shadow.9.png => ic_dir_shadow_am.9.png} | Bin ...9.png => ic_drawer_shadow_tablet_am.9.png} | Bin .../res/drawable/ic_dir_shadow.xml | 23 +++++++++++++++++ .../res/drawable/ic_drawer_shadow_tablet.xml | 23 +++++++++++++++++ .../android/documentsui/DirectoryView.java | 2 +- 15 files changed, 116 insertions(+), 8 deletions(-) create mode 100644 packages/DocumentsUI/res/animator-ldrtl/dir_down.xml create mode 100644 packages/DocumentsUI/res/animator-ldrtl/dir_up.xml rename packages/DocumentsUI/res/drawable-hdpi/{ic_dir_shadow.9.png => ic_dir_shadow_am.9.png} (100%) rename packages/DocumentsUI/res/drawable-hdpi/{ic_drawer_shadow_tablet.9.png => ic_drawer_shadow_tablet_am.9.png} (100%) rename packages/DocumentsUI/res/drawable-mdpi/{ic_dir_shadow.9.png => ic_dir_shadow_am.9.png} (100%) rename packages/DocumentsUI/res/drawable-mdpi/{ic_drawer_shadow_tablet.9.png => ic_drawer_shadow_tablet_am.9.png} (100%) rename packages/DocumentsUI/res/drawable-xhdpi/{ic_dir_shadow.9.png => ic_dir_shadow_am.9.png} (100%) rename packages/DocumentsUI/res/drawable-xhdpi/{ic_drawer_shadow_tablet.9.png => ic_drawer_shadow_tablet_am.9.png} (100%) rename packages/DocumentsUI/res/drawable-xxhdpi/{ic_dir_shadow.9.png => ic_dir_shadow_am.9.png} (100%) rename packages/DocumentsUI/res/drawable-xxhdpi/{ic_drawer_shadow_tablet.9.png => ic_drawer_shadow_tablet_am.9.png} (100%) create mode 100644 packages/DocumentsUI/res/drawable/ic_dir_shadow.xml create mode 100644 packages/DocumentsUI/res/drawable/ic_drawer_shadow_tablet.xml diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java index e3a7e2bfa84ea..818878254acb8 100644 --- a/graphics/java/android/graphics/drawable/InsetDrawable.java +++ b/graphics/java/android/graphics/drawable/InsetDrawable.java @@ -202,7 +202,13 @@ public class InsetDrawable extends Drawable implements Drawable.Callback public void setColorFilter(ColorFilter cf) { mInsetState.mDrawable.setColorFilter(cf); } - + + /** {@hide} */ + @Override + public void setLayoutDirection(int layoutDirection) { + mInsetState.mDrawable.setLayoutDirection(layoutDirection); + } + @Override public int getOpacity() { return mInsetState.mDrawable.getOpacity(); diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java index 720494be4b7b0..ab34c0fd5649a 100644 --- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java +++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java @@ -219,16 +219,15 @@ public class NinePatchDrawable extends Drawable { @Override public void draw(Canvas canvas) { final Rect bounds = getBounds(); - final boolean needMirroring = isAutoMirrored() && - getLayoutDirection() == LayoutDirection.RTL; - if (needMirroring) { + final boolean needsMirroring = needsMirroring(); + if (needsMirroring) { canvas.save(); // Mirror the 9patch canvas.translate(bounds.right - bounds.left, 0); canvas.scale(-1.0f, 1.0f); } mNinePatch.draw(canvas, bounds, mPaint); - if (needMirroring) { + if (needsMirroring) { canvas.restore(); } } @@ -240,7 +239,11 @@ public class NinePatchDrawable extends Drawable { @Override public boolean getPadding(Rect padding) { - padding.set(mPadding); + if (needsMirroring()) { + padding.set(mPadding.right, mPadding.top, mPadding.left, mPadding.bottom); + } else { + padding.set(mPadding); + } return true; } @@ -249,7 +252,12 @@ public class NinePatchDrawable extends Drawable { */ @Override public Insets getOpticalInsets() { - return mOpticalInsets; + if (needsMirroring()) { + return Insets.of(mOpticalInsets.right, mOpticalInsets.top, mOpticalInsets.right, + mOpticalInsets.bottom); + } else { + return mOpticalInsets; + } } @Override @@ -297,6 +305,10 @@ public class NinePatchDrawable extends Drawable { mNinePatchState.mAutoMirrored = mirrored; } + private boolean needsMirroring() { + return isAutoMirrored() && getLayoutDirection() == LayoutDirection.RTL; + } + @Override public boolean isAutoMirrored() { return mNinePatchState.mAutoMirrored; diff --git a/packages/DocumentsUI/res/animator-ldrtl/dir_down.xml b/packages/DocumentsUI/res/animator-ldrtl/dir_down.xml new file mode 100644 index 0000000000000..6c7e2244c7129 --- /dev/null +++ b/packages/DocumentsUI/res/animator-ldrtl/dir_down.xml @@ -0,0 +1,22 @@ + + + diff --git a/packages/DocumentsUI/res/animator-ldrtl/dir_up.xml b/packages/DocumentsUI/res/animator-ldrtl/dir_up.xml new file mode 100644 index 0000000000000..8e2925c9760dd --- /dev/null +++ b/packages/DocumentsUI/res/animator-ldrtl/dir_up.xml @@ -0,0 +1,22 @@ + + + diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_dir_shadow.9.png b/packages/DocumentsUI/res/drawable-hdpi/ic_dir_shadow_am.9.png similarity index 100% rename from packages/DocumentsUI/res/drawable-hdpi/ic_dir_shadow.9.png rename to packages/DocumentsUI/res/drawable-hdpi/ic_dir_shadow_am.9.png diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow_tablet.9.png b/packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow_tablet_am.9.png similarity index 100% rename from packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow_tablet.9.png rename to packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow_tablet_am.9.png diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_dir_shadow.9.png b/packages/DocumentsUI/res/drawable-mdpi/ic_dir_shadow_am.9.png similarity index 100% rename from packages/DocumentsUI/res/drawable-mdpi/ic_dir_shadow.9.png rename to packages/DocumentsUI/res/drawable-mdpi/ic_dir_shadow_am.9.png diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow_tablet.9.png b/packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow_tablet_am.9.png similarity index 100% rename from packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow_tablet.9.png rename to packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow_tablet_am.9.png diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_dir_shadow.9.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_dir_shadow_am.9.png similarity index 100% rename from packages/DocumentsUI/res/drawable-xhdpi/ic_dir_shadow.9.png rename to packages/DocumentsUI/res/drawable-xhdpi/ic_dir_shadow_am.9.png diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow_tablet.9.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow_tablet_am.9.png similarity index 100% rename from packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow_tablet.9.png rename to packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow_tablet_am.9.png diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_dir_shadow.9.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_dir_shadow_am.9.png similarity index 100% rename from packages/DocumentsUI/res/drawable-xxhdpi/ic_dir_shadow.9.png rename to packages/DocumentsUI/res/drawable-xxhdpi/ic_dir_shadow_am.9.png diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow_tablet.9.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow_tablet_am.9.png similarity index 100% rename from packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow_tablet.9.png rename to packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow_tablet_am.9.png diff --git a/packages/DocumentsUI/res/drawable/ic_dir_shadow.xml b/packages/DocumentsUI/res/drawable/ic_dir_shadow.xml new file mode 100644 index 0000000000000..1153e693f4d3b --- /dev/null +++ b/packages/DocumentsUI/res/drawable/ic_dir_shadow.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/packages/DocumentsUI/res/drawable/ic_drawer_shadow_tablet.xml b/packages/DocumentsUI/res/drawable/ic_drawer_shadow_tablet.xml new file mode 100644 index 0000000000000..382ebff764aff --- /dev/null +++ b/packages/DocumentsUI/res/drawable/ic_drawer_shadow_tablet.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java index 28e2bd90a1555..b552e5aa838ce 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java @@ -40,7 +40,7 @@ public class DirectoryView extends FrameLayout { public void setBackground(Drawable background) { final Rect rect = new Rect(); background.getPadding(rect); - final InsetDrawable inset = new InsetDrawable(background, -rect.left, 0, 0, 0); + final InsetDrawable inset = new InsetDrawable(background, -rect.left, 0, -rect.right, 0); super.setBackground(inset); }