From 1e847545ea6e7fbabc55af2b555e92a50ea1a1f5 Mon Sep 17 00:00:00 2001 From: Mostafa Gazar Date: Thu, 9 Apr 2015 19:17:02 +1200 Subject: [PATCH 1/3] Remove unnecessary lollipop checks --- .../com/ninja/vectorcompat/MorphButton.java | 55 ++++--------------- 1 file changed, 11 insertions(+), 44 deletions(-) diff --git a/library/src/main/java/com/ninja/vectorcompat/MorphButton.java b/library/src/main/java/com/ninja/vectorcompat/MorphButton.java index cdbb756..3efaa0d 100644 --- a/library/src/main/java/com/ninja/vectorcompat/MorphButton.java +++ b/library/src/main/java/com/ninja/vectorcompat/MorphButton.java @@ -1,11 +1,10 @@ package com.ninja.vectorcompat; -import android.annotation.TargetApi; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; +import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; -import android.os.Build; import android.util.AttributeSet; import android.view.View; import android.widget.ImageButton; @@ -17,8 +16,6 @@ public class MorphButton extends ImageButton implements View.OnClickListener{ @SuppressWarnings("UnusedDeclaration") public static final String TAG = MorphButton.class.getSimpleName(); - public static final boolean LOLLIPOP = Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP; - private static enum MorphState { START, @@ -67,7 +64,6 @@ public MorphButton(Context context, AttributeSet attrs, int defStyleAttr) { mEndCanMorph = isMorphable(mEndMorph); } - setBackgroundDrawable(mStartMorph); if (autoStart) { beginStartAnimation(); @@ -75,30 +71,20 @@ public MorphButton(Context context, AttributeSet attrs, int defStyleAttr) { } } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) private boolean isMorphable(Drawable d) { if (d != null) { - if (LOLLIPOP) { - return (d instanceof android.graphics.drawable.AnimatedVectorDrawable); - } else { - return (d instanceof AnimatedVectorDrawable); - } + return (d instanceof Animatable); } + return false; } @SuppressWarnings("deprecation") - @TargetApi(Build.VERSION_CODES.LOLLIPOP) public Drawable getDrawable(Context c, int resId) { Drawable d; try { - if (LOLLIPOP) { - d = c.getResources().getDrawable(resId, null); - } else { - d = c.getResources().getDrawable(resId); - } + d = c.getResources().getDrawable(resId); } catch (Resources.NotFoundException e) { - try { d = VectorDrawable.create(c.getResources(), resId); } catch (IllegalArgumentException e1) { @@ -112,13 +98,14 @@ public Drawable getDrawable(Context c, int resId) { } } } + return d; } @Override public void setOnClickListener(OnClickListener l) { //Make sure we always have an onClick listener to handle animations - super.setOnClickListener(l==null?this:l); + super.setOnClickListener(l == null ? this : l); } @Override @@ -144,56 +131,36 @@ public boolean performClick() { return super.performClick(); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) public boolean beginStartAnimation() { if (mStartMorph != null && mStartCanMorph) { - if (LOLLIPOP) { - ((android.graphics.drawable.AnimatedVectorDrawable) mStartMorph).start(); - } else { - ((AnimatedVectorDrawable) mStartMorph).start(); - } + ((Animatable) mStartMorph).start(); return true; } return false; } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) public boolean endStartAnimation() { if (mStartMorph != null && mStartCanMorph) { - if (LOLLIPOP) { - ((android.graphics.drawable.AnimatedVectorDrawable) mStartMorph).stop(); - } else { - ((AnimatedVectorDrawable) mStartMorph).stop(); - } + ((Animatable) mStartMorph).stop(); return true; } return false; } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) public boolean beginEndAnimation() { if (mEndMorph != null && mEndCanMorph) { - if (LOLLIPOP) { - ((android.graphics.drawable.AnimatedVectorDrawable) mEndMorph).start(); - } else { - ((AnimatedVectorDrawable) mEndMorph).start(); - } + ((Animatable) mEndMorph).start(); return true; } return false; } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) public boolean endEndAnimation() { if (mEndMorph != null && mEndCanMorph) { - if (LOLLIPOP) { - ((android.graphics.drawable.AnimatedVectorDrawable) mEndMorph).stop(); - } else { - ((AnimatedVectorDrawable) mEndMorph).stop(); - } + ((Animatable) mEndMorph).stop(); return true; } return false; } -} +} \ No newline at end of file From a11a03e0a4349fc7f38f71b0fa2c110a32191aa6 Mon Sep 17 00:00:00 2001 From: Mostafa Gazar Date: Wed, 28 Oct 2015 01:18:08 +1300 Subject: [PATCH 2/3] Delete unused MorphButton --- .../com/ninja/vectorcompat/MorphButton.java | 166 ------------------ 1 file changed, 166 deletions(-) delete mode 100644 library/src/main/java/com/ninja/vectorcompat/MorphButton.java diff --git a/library/src/main/java/com/ninja/vectorcompat/MorphButton.java b/library/src/main/java/com/ninja/vectorcompat/MorphButton.java deleted file mode 100644 index 3efaa0d..0000000 --- a/library/src/main/java/com/ninja/vectorcompat/MorphButton.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.ninja.vectorcompat; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.graphics.drawable.Animatable; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.view.View; -import android.widget.ImageButton; - -import com.ninja.vectorcompat.v14.AnimatedVectorDrawable; -import com.ninja.vectorcompat.v14.VectorDrawable; - -public class MorphButton extends ImageButton implements View.OnClickListener{ - - @SuppressWarnings("UnusedDeclaration") - public static final String TAG = MorphButton.class.getSimpleName(); - - private static enum MorphState { - START, - END - } - - MorphState mState = MorphState.END; - - Drawable mStartMorph = null; - Drawable mEndMorph = null; - - boolean mStartCanMorph = false; - boolean mEndCanMorph = false; - - public MorphButton(Context context) { - this(context, null); - } - - public MorphButton(Context context, AttributeSet attrs) { - this(context, attrs, R.attr.morphButtonStyle); - - } - - @SuppressWarnings("deprecation") - public MorphButton(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - //Add dummy onClick listener to intercept clicks for handling animations - setOnClickListener(this); - - final Resources.Theme theme = context.getTheme(); - TypedArray a = theme.obtainStyledAttributes(attrs, R.styleable.MorphButton, defStyleAttr, 0); - - int startResId = a.getResourceId(R.styleable.MorphButton_morphStartDrawableBackground, -1); - int endResId = a.getResourceId(R.styleable.MorphButton_morphEndDrawableBackground, -1); - boolean autoStart = a.getBoolean(R.styleable.MorphButton_autoStartAnimation, false); - a.recycle(); - - if (startResId > 0) { - mStartMorph = getDrawable(context, startResId); - mStartCanMorph = isMorphable(mStartMorph); - } - - if (endResId > 0) { - mEndMorph = getDrawable(context, endResId); - mEndCanMorph = isMorphable(mEndMorph); - } - - setBackgroundDrawable(mStartMorph); - if (autoStart) { - beginStartAnimation(); - mState = MorphState.START; - } - } - - private boolean isMorphable(Drawable d) { - if (d != null) { - return (d instanceof Animatable); - } - - return false; - } - - @SuppressWarnings("deprecation") - public Drawable getDrawable(Context c, int resId) { - Drawable d; - try { - d = c.getResources().getDrawable(resId); - } catch (Resources.NotFoundException e) { - try { - d = VectorDrawable.create(c.getResources(), resId); - } catch (IllegalArgumentException e1) { - - //We're not a VectorDrawable, try AnimatedVectorDrawable - try { - d = AnimatedVectorDrawable.create(c, c.getResources(), resId); - } catch (IllegalArgumentException e2) { - //Throw NotFoundException - throw e; - } - } - } - - return d; - } - - @Override - public void setOnClickListener(OnClickListener l) { - //Make sure we always have an onClick listener to handle animations - super.setOnClickListener(l == null ? this : l); - } - - @Override - public void onClick(View view) { - // dummy - } - - @SuppressWarnings("deprecation") - @Override - public boolean performClick() { - if (mState == MorphState.START) { - setBackgroundDrawable(mEndMorph); - endStartAnimation(); - beginEndAnimation(); - mState = MorphState.END; - } else { - setBackgroundDrawable(mStartMorph); - endEndAnimation(); - beginStartAnimation(); - mState = MorphState.START; - } - - return super.performClick(); - } - - public boolean beginStartAnimation() { - if (mStartMorph != null && mStartCanMorph) { - ((Animatable) mStartMorph).start(); - return true; - } - return false; - } - - public boolean endStartAnimation() { - if (mStartMorph != null && mStartCanMorph) { - ((Animatable) mStartMorph).stop(); - return true; - } - return false; - } - - public boolean beginEndAnimation() { - if (mEndMorph != null && mEndCanMorph) { - ((Animatable) mEndMorph).start(); - return true; - } - return false; - } - - public boolean endEndAnimation() { - if (mEndMorph != null && mEndCanMorph) { - ((Animatable) mEndMorph).stop(); - return true; - } - return false; - } - -} \ No newline at end of file From d854922920c27f3fbb99a08dadf705073df6bb08 Mon Sep 17 00:00:00 2001 From: Mostafa Gazar Date: Wed, 28 Oct 2015 01:22:23 +1300 Subject: [PATCH 3/3] Supporting the new setLayoutDirection in v23 --- library/build.gradle | 4 ++-- .../java/com/wnafee/vector/MorphButton.java | 2 +- .../vector/compat/AnimatedVectorDrawable.java | 4 ++-- .../wnafee/vector/compat/DrawableCompat.java | 21 +++++++++++++------ .../wnafee/vector/compat/VectorDrawable.java | 2 +- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/library/build.gradle b/library/build.gradle index 0830d96..fe3c589 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 22 + compileSdkVersion 23 buildToolsVersion "22.0.1" lintOptions { @@ -10,7 +10,7 @@ android { defaultConfig { minSdkVersion 14 - targetSdkVersion 22 + targetSdkVersion 23 versionCode 1 versionName "1.0" } diff --git a/library/src/main/java/com/wnafee/vector/MorphButton.java b/library/src/main/java/com/wnafee/vector/MorphButton.java index fe684c5..e00758d 100644 --- a/library/src/main/java/com/wnafee/vector/MorphButton.java +++ b/library/src/main/java/com/wnafee/vector/MorphButton.java @@ -194,7 +194,7 @@ private void updateDrawable(Drawable d, MorphState state) { if (d != null) { d.setCallback(this); //TODO: Adjust layout direction -// d.setLayoutDirection(getLayoutDirection()); +// d.setSupportLayoutDirection(getSupportLayoutDirection()); if (d.isStateful()) { d.setState(getDrawableState()); } diff --git a/library/src/main/java/com/wnafee/vector/compat/AnimatedVectorDrawable.java b/library/src/main/java/com/wnafee/vector/compat/AnimatedVectorDrawable.java index 4539c4f..1982918 100644 --- a/library/src/main/java/com/wnafee/vector/compat/AnimatedVectorDrawable.java +++ b/library/src/main/java/com/wnafee/vector/compat/AnimatedVectorDrawable.java @@ -152,8 +152,8 @@ public boolean setVisible(boolean visible, boolean restart) { return super.setVisible(visible, restart); } - public void setLayoutDirection(int layoutDirection) { - mAnimatedVectorState.mVectorDrawable.setLayoutDirection(layoutDirection); + public boolean setSupportLayoutDirection(int layoutDirection) { + return mAnimatedVectorState.mVectorDrawable.setSupportLayoutDirection(layoutDirection); } @Override diff --git a/library/src/main/java/com/wnafee/vector/compat/DrawableCompat.java b/library/src/main/java/com/wnafee/vector/compat/DrawableCompat.java index 68eaae0..21998eb 100644 --- a/library/src/main/java/com/wnafee/vector/compat/DrawableCompat.java +++ b/library/src/main/java/com/wnafee/vector/compat/DrawableCompat.java @@ -22,12 +22,15 @@ import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.os.Build; import android.support.annotation.NonNull; import android.util.AttributeSet; +import android.util.LayoutDirection; +import android.view.View; public abstract class DrawableCompat extends Drawable { - int mLayoutDirection; + int mSupportLayoutDirection; public static abstract class ConstantStateCompat extends ConstantState { @@ -77,14 +80,20 @@ public void getHotspotBounds(Rect outRect) { outRect.set(getBounds()); } - public int getLayoutDirection() { - return mLayoutDirection; + public int getSupportLayoutDirection() { + return mSupportLayoutDirection; } - public void setLayoutDirection(int layoutDirection) { - if (getLayoutDirection() != layoutDirection) { - mLayoutDirection = layoutDirection; + public boolean setSupportLayoutDirection(int layoutDirection) { + if (getSupportLayoutDirection() != layoutDirection) { + mSupportLayoutDirection = layoutDirection; + +// if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { +// return onLayoutDirectionChanged(mSupportLayoutDirection); +// } } + + return false; } /** diff --git a/library/src/main/java/com/wnafee/vector/compat/VectorDrawable.java b/library/src/main/java/com/wnafee/vector/compat/VectorDrawable.java index 51d1aaa..0857729 100644 --- a/library/src/main/java/com/wnafee/vector/compat/VectorDrawable.java +++ b/library/src/main/java/com/wnafee/vector/compat/VectorDrawable.java @@ -503,7 +503,7 @@ void setAllowCaching(boolean allowCaching) { } private boolean needMirroring() { - return isAutoMirrored() && getLayoutDirection() == 1; // 1 is for LayoutDirection.RTL + return isAutoMirrored() && getSupportLayoutDirection() == 1; // 1 is for LayoutDirection.RTL } @Override