diff options
author | Jim Miller <jaggies@google.com> | 2012-03-19 17:18:34 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-19 17:18:34 -0700 |
commit | 5d189e12d73c6dfd40be49a1f65434512b4d8eb5 (patch) | |
tree | 9d5f236c7f1d247c8242a835fb929877b95d04f2 /core/java/com | |
parent | 219be44a4f96bd5dfc275aecf9eb2ba5a233ef84 (diff) | |
parent | b030476d193a423f6c1baf3053f66fc768c925e0 (diff) | |
download | frameworks_base-5d189e12d73c6dfd40be49a1f65434512b4d8eb5.zip frameworks_base-5d189e12d73c6dfd40be49a1f65434512b4d8eb5.tar.gz frameworks_base-5d189e12d73c6dfd40be49a1f65434512b4d8eb5.tar.bz2 |
Merge "Fix 6021938: Improved target support in lock screen"
Diffstat (limited to 'core/java/com')
-rw-r--r-- | core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java | 48 | ||||
-rw-r--r-- | core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java | 22 |
2 files changed, 55 insertions, 15 deletions
diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java index d51ced1..f2b6e45 100644 --- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java +++ b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java @@ -164,9 +164,10 @@ public class MultiWaveView extends View { mFeedbackCount = a.getInt(R.styleable.MultiWaveView_feedbackCount, mFeedbackCount); mHandleDrawable = new TargetDrawable(res, - a.getDrawable(R.styleable.MultiWaveView_handleDrawable)); + a.peekValue(R.styleable.MultiWaveView_handleDrawable).resourceId); mTapRadius = mHandleDrawable.getWidth()/2; - mOuterRing = new TargetDrawable(res, a.getDrawable(R.styleable.MultiWaveView_waveDrawable)); + mOuterRing = new TargetDrawable(res, + a.peekValue(R.styleable.MultiWaveView_waveDrawable).resourceId); // Read chevron animation drawables final int chevrons[] = { R.styleable.MultiWaveView_leftChevronDrawable, @@ -174,11 +175,12 @@ public class MultiWaveView extends View { R.styleable.MultiWaveView_topChevronDrawable, R.styleable.MultiWaveView_bottomChevronDrawable }; + for (int chevron : chevrons) { - Drawable chevronDrawable = a.getDrawable(chevron); + TypedValue typedValue = a.peekValue(chevron); for (int i = 0; i < mFeedbackCount; i++) { mChevronDrawables.add( - chevronDrawable != null ? new TargetDrawable(res, chevronDrawable) : null); + typedValue != null ? new TargetDrawable(res, typedValue.resourceId) : null); } } @@ -519,8 +521,8 @@ public class MultiWaveView extends View { int count = array.length(); ArrayList<TargetDrawable> targetDrawables = new ArrayList<TargetDrawable>(count); for (int i = 0; i < count; i++) { - Drawable drawable = array.getDrawable(i); - targetDrawables.add(new TargetDrawable(res, drawable)); + TypedValue value = array.peekValue(i); + targetDrawables.add(new TargetDrawable(res, value != null ? value.resourceId : 0)); } array.recycle(); mTargetResourceId = resourceId; @@ -679,7 +681,7 @@ public class MultiWaveView extends View { if (DEBUG && mDragging) Log.v(TAG, "** Handle RELEASE"); switchToState(STATE_FINISH, event.getX(), event.getY()); } - + private void handleCancel(MotionEvent event) { if (DEBUG && mDragging) Log.v(TAG, "** Handle CANCEL"); mActiveTarget = -1; // Drop the active target if canceled. @@ -723,7 +725,7 @@ public class MultiWaveView extends View { float dx = limitX - target.getX(); float dy = limitY - target.getY(); float dist2 = dx*dx + dy*dy; - if (target.isValid() && dist2 < hitRadius2 && dist2 < best) { + if (target.isEnabled() && dist2 < hitRadius2 && dist2 < best) { activeTarget = i; best = dist2; } @@ -968,4 +970,34 @@ public class MultiWaveView extends View { array.recycle(); return targetContentDescriptions; } + + public int getResourceIdForTarget(int index) { + final TargetDrawable drawable = mTargetDrawables.get(index); + return drawable == null ? 0 : drawable.getResourceId(); + } + + public void setEnableTarget(int resourceId, boolean enabled) { + for (int i = 0; i < mTargetDrawables.size(); i++) { + final TargetDrawable target = mTargetDrawables.get(i); + if (target.getResourceId() == resourceId) { + target.setEnabled(enabled); + break; // should never be more than one match + } + } + } + + /** + * Gets the position of a target in the array that matches the given resource. + * @param resourceId + * @return the index or -1 if not found + */ + public int getTargetPosition(int resourceId) { + for (int i = 0; i < mTargetDrawables.size(); i++) { + final TargetDrawable target = mTargetDrawables.get(i); + if (target.getResourceId() == resourceId) { + return i; // should never be more than one match + } + } + return -1; + } } diff --git a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java index aa9fa45..ec2c945 100644 --- a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java +++ b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java @@ -40,6 +40,8 @@ public class TargetDrawable { private float mScaleY = 1.0f; private float mAlpha = 1.0f; private Drawable mDrawable; + private boolean mEnabled = true; + private int mResourceId; /* package */ static class DrawableWithAlpha extends Drawable { private float mAlpha = 1.0f; @@ -72,10 +74,8 @@ public class TargetDrawable { } public TargetDrawable(Resources res, int resId) { - this(res, resId == 0 ? null : res.getDrawable(resId)); - } - - public TargetDrawable(Resources res, Drawable drawable) { + mResourceId = resId; + Drawable drawable = resId == 0 ? null : res.getDrawable(resId); // Mutate the drawable so we can animate shared drawable properties. mDrawable = drawable != null ? drawable.mutate() : null; resizeDrawables(); @@ -122,8 +122,8 @@ public class TargetDrawable { * * @return */ - public boolean isValid() { - return mDrawable != null; + public boolean isEnabled() { + return mDrawable != null && mEnabled; } /** @@ -205,7 +205,7 @@ public class TargetDrawable { } public void draw(Canvas canvas) { - if (mDrawable == null) { + if (mDrawable == null || !mEnabled) { return; } canvas.save(Canvas.MATRIX_SAVE_FLAG); @@ -216,4 +216,12 @@ public class TargetDrawable { mDrawable.draw(canvas); canvas.restore(); } + + public void setEnabled(boolean enabled) { + mEnabled = enabled; + } + + public int getResourceId() { + return mResourceId; + } } |