diff options
| author | Jeff Sharkey <jsharkey@android.com> | 2010-02-08 17:40:30 -0800 |
|---|---|---|
| committer | Jeff Sharkey <jsharkey@android.com> | 2010-02-17 15:03:32 -0800 |
| commit | 2b95c2413838c2e2b127ebab8fb4fead7d52e460 (patch) | |
| tree | 152840f97e63ab28962c5f351217fa8088686f13 | |
| parent | 6a70d7d1e28bd0b98d03e7ecab3fd08ea5973e34 (diff) | |
| download | frameworks_base-2b95c2413838c2e2b127ebab8fb4fead7d52e460.zip frameworks_base-2b95c2413838c2e2b127ebab8fb4fead7d52e460.tar.gz frameworks_base-2b95c2413838c2e2b127ebab8fb4fead7d52e460.tar.bz2 | |
Added more @RemotableViewMethod methods, mutate ImageView.
Catch some View methods missed during the first pass of
marking with @RemotableViewMethod annotation. Also adds new
ImageView.setColorFilter(int) to match the android:tint XML
attribute.
When ImageView touches ColorFilter or alpha, mutate the
underlying Drawable. Fix NPE in StateListDrawable.mutate().
| -rw-r--r-- | api/current.xml | 13 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 1 | ||||
| -rw-r--r-- | core/java/android/widget/ImageView.java | 25 | ||||
| -rw-r--r-- | core/java/android/widget/ViewFlipper.java | 2 | ||||
| -rw-r--r-- | graphics/java/android/graphics/drawable/StateListDrawable.java | 5 |
5 files changed, 42 insertions, 4 deletions
diff --git a/api/current.xml b/api/current.xml index 1608ebf..c3a7b26 100644 --- a/api/current.xml +++ b/api/current.xml @@ -201496,6 +201496,19 @@ native="false" synchronized="false" static="false" + final="true" + deprecated="not deprecated" + visibility="public" +> +<parameter name="color" type="int"> +</parameter> +</method> +<method name="setColorFilter" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" final="false" deprecated="not deprecated" visibility="public" diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index e5db120..bc49439 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -3050,6 +3050,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * * @param enabled True if this view is enabled, false otherwise. */ + @RemotableViewMethod public void setEnabled(boolean enabled) { if (enabled == isEnabled()) return; diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index 3853359..233ce30 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -32,6 +32,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.util.AttributeSet; import android.util.Log; +import android.view.RemotableViewMethod; import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; @@ -69,6 +70,7 @@ public class ImageView extends View { private ColorFilter mColorFilter; private int mAlpha = 255; private int mViewAlphaScale = 256; + private boolean mColorMod = false; private Drawable mDrawable = null; private int[] mState = null; @@ -138,7 +140,7 @@ public class ImageView extends View { int tint = a.getInt(com.android.internal.R.styleable.ImageView_tint, 0); if (tint != 0) { - setColorFilter(tint, PorterDuff.Mode.SRC_ATOP); + setColorFilter(tint); } mCropToPadding = a.getBoolean( @@ -877,6 +879,18 @@ public class ImageView extends View { setColorFilter(new PorterDuffColorFilter(color, mode)); } + /** + * Set a tinting option for the image. Assumes + * {@link PorterDuff.Mode#SRC_ATOP} blending mode. + * + * @param color Color tint to apply. + * @attr ref android.R.styleable#ImageView_tint + */ + @RemotableViewMethod + public final void setColorFilter(int color) { + setColorFilter(color, PorterDuff.Mode.SRC_ATOP); + } + public final void clearColorFilter() { setColorFilter(null); } @@ -889,22 +903,29 @@ public class ImageView extends View { public void setColorFilter(ColorFilter cf) { if (mColorFilter != cf) { mColorFilter = cf; + mColorMod = true; applyColorMod(); invalidate(); } } + @RemotableViewMethod public void setAlpha(int alpha) { alpha &= 0xFF; // keep it legal if (mAlpha != alpha) { mAlpha = alpha; + mColorMod = true; applyColorMod(); invalidate(); } } private void applyColorMod() { - if (mDrawable != null) { + // Only mutate and apply when modifications have occurred. This should + // not reset the mColorMod flag, since these filters need to be + // re-applied if the Drawable is changed. + if (mDrawable != null && mColorMod) { + mDrawable = mDrawable.mutate(); mDrawable.setColorFilter(mColorFilter); mDrawable.setAlpha(mAlpha * mViewAlphaScale >> 8); } diff --git a/core/java/android/widget/ViewFlipper.java b/core/java/android/widget/ViewFlipper.java index aee25b0..8034961 100644 --- a/core/java/android/widget/ViewFlipper.java +++ b/core/java/android/widget/ViewFlipper.java @@ -38,7 +38,7 @@ import android.widget.RemoteViews.RemoteView; @RemoteView public class ViewFlipper extends ViewAnimator { private static final String TAG = "ViewFlipper"; - private static final boolean LOGD = true; + private static final boolean LOGD = false; private static final int DEFAULT_INTERVAL = 3000; diff --git a/graphics/java/android/graphics/drawable/StateListDrawable.java b/graphics/java/android/graphics/drawable/StateListDrawable.java index b1d588e..b94df84 100644 --- a/graphics/java/android/graphics/drawable/StateListDrawable.java +++ b/graphics/java/android/graphics/drawable/StateListDrawable.java @@ -238,7 +238,10 @@ public class StateListDrawable extends DrawableContainer { final int count = sets.length; mStateListState.mStateSets = new int[count][]; for (int i = 0; i < count; i++) { - mStateListState.mStateSets[i] = sets[i].clone(); + final int[] set = sets[i]; + if (set != null) { + mStateListState.mStateSets[i] = set.clone(); + } } mMutated = true; } |
