diff options
author | Karl Rosaen <krosaen@android.com> | 2009-09-16 10:51:10 -0700 |
---|---|---|
committer | Karl Rosaen <krosaen@android.com> | 2009-09-16 10:51:10 -0700 |
commit | 1ca654e1193010365de10f55cbfebe1521c71db4 (patch) | |
tree | 84dc11f561a7df9c05300f83516315eb4f1c1c54 /core/java/com/android/internal | |
parent | 6cf05f1c3d6f4585573c8663a62848a09f6a08ff (diff) | |
download | frameworks_base-1ca654e1193010365de10f55cbfebe1521c71db4.zip frameworks_base-1ca654e1193010365de10f55cbfebe1521c71db4.tar.gz frameworks_base-1ca654e1193010365de10f55cbfebe1521c71db4.tar.bz2 |
Address romain's code review comments
Diffstat (limited to 'core/java/com/android/internal')
-rw-r--r-- | core/java/com/android/internal/widget/RotarySelector.java | 153 |
1 files changed, 79 insertions, 74 deletions
diff --git a/core/java/com/android/internal/widget/RotarySelector.java b/core/java/com/android/internal/widget/RotarySelector.java index 7b940c9..aff92b8 100644 --- a/core/java/com/android/internal/widget/RotarySelector.java +++ b/core/java/com/android/internal/widget/RotarySelector.java @@ -19,8 +19,6 @@ package com.android.internal.widget; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Vibrator; import android.util.AttributeSet; @@ -28,7 +26,7 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.animation.AccelerateInterpolator; - +import static android.view.animation.AnimationUtils.currentAnimationTimeMillis; import com.android.internal.R; @@ -69,7 +67,7 @@ public class RotarySelector extends View { private boolean mAnimating = false; private long mAnimationEndTime; private int mAnimatingDelta; - AccelerateInterpolator mInterpolator; + private AccelerateInterpolator mInterpolator; /** * True after triggering an action if the user of {@link OnDialTriggerListener} wants to @@ -96,12 +94,6 @@ public class RotarySelector extends View { private static final long VIBRATE_SHORT = 60; // msec private static final long VIBRATE_LONG = 100; // msec - // Various tweakable layout or behavior parameters: - - // How close to the edge of the screen, we let the handle get before - // triggering an action: - private static final int EDGE_THRESHOLD_DIP = 70; - /** * The drawable for the arrows need to be scrunched this many dips towards the rotary bg below * it. @@ -122,6 +114,11 @@ public class RotarySelector extends View { private static final boolean DRAW_CENTER_DIMPLE = false; + public RotarySelector(Context context) { + this(context, null); + } + + /** * Constructor used when this widget is created from a layout file. */ @@ -132,8 +129,6 @@ public class RotarySelector extends View { Resources r = getResources(); mDensity = r.getDisplayMetrics().density; if (DBG) log("- Density: " + mDensity); - // Density is 1.0 on HVGA (like Dream), and 1.5 on WVGA. - // Usage: raw_pixel_value = (int) (dpi_value * mDensity + 0.5f) // Assets (all are BitmapDrawables). mBackground = r.getDrawable(R.drawable.jog_dial_bg_cropped); @@ -143,6 +138,15 @@ public class RotarySelector extends View { mArrowLongRight = r.getDrawable(R.drawable.jog_dial_arrow_long_right_red); mArrowShortLeftAndRight = r.getDrawable(R.drawable.jog_dial_arrow_short_left_and_right); + // Arrows: + // All arrow assets are the same size (they're the full width of + // the screen) regardless of which arrows are actually visible. + int arrowW = mArrowShortLeftAndRight.getIntrinsicWidth(); + int arrowH = mArrowShortLeftAndRight.getIntrinsicHeight(); + mArrowShortLeftAndRight.setBounds(0, 0, arrowW, arrowH); + mArrowLongLeft.setBounds(0, 0, arrowW, arrowH); + mArrowLongRight.setBounds(0, 0, arrowW, arrowH); + mInterpolator = new AccelerateInterpolator(); } @@ -237,7 +241,7 @@ public class RotarySelector extends View { // update animating state before we draw anything if (mAnimating && !mFrozen) { - long millisLeft = mAnimationEndTime - System.currentTimeMillis(); + long millisLeft = mAnimationEndTime - currentAnimationTimeMillis(); if (DBG) log("millisleft for animating: " + millisLeft); if (millisLeft <= 0) { reset(); @@ -259,11 +263,6 @@ public class RotarySelector extends View { if (DBG) log(" Background BOUNDS: " + mBackground.getBounds()); mBackground.draw(canvas); - // Arrows: - // All arrow assets are the same size (they're the full width of - // the screen) regardless of which arrows are actually visible. - int arrowW = mArrowShortLeftAndRight.getIntrinsicWidth(); - int arrowH = mArrowShortLeftAndRight.getIntrinsicHeight(); // Draw the correct arrow(s) depending on the current state: Drawable currentArrow; @@ -280,7 +279,6 @@ public class RotarySelector extends View { default: throw new IllegalStateException("invalid mGrabbedState: " + mGrabbedState); } - currentArrow.setBounds(0, 0, arrowW, arrowH); currentArrow.draw(canvas); // debug: draw circle that should match the outer arc (good sanity check) @@ -382,63 +380,70 @@ public class RotarySelector extends View { final int eventX = (int) event.getX(); final int hitWindow = mDimple.getIntrinsicWidth(); - if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (DBG) log("touch-down"); - mTriggered = false; - if (mGrabbedState != RotarySelector.NOTHING_GRABBED) { - reset(); - invalidate(); - } - if (eventX < mLeftHandleX + hitWindow) { - mTouchDragOffset = eventX - mLeftHandleX; - mGrabbedState = RotarySelector.LEFT_HANDLE_GRABBED; - invalidate(); - vibrate(VIBRATE_SHORT); - } else if (eventX > mRightHandleX - hitWindow) { - mTouchDragOffset = eventX - mRightHandleX; - mGrabbedState = RotarySelector.RIGHT_HANDLE_GRABBED; - invalidate(); - vibrate(VIBRATE_SHORT); - } - } else if (event.getAction() == MotionEvent.ACTION_MOVE) { - if (DBG) log("touch-move"); - if (mGrabbedState == RotarySelector.LEFT_HANDLE_GRABBED) { - mTouchDragOffset = eventX - mLeftHandleX; - invalidate(); - if (eventX >= mRightHandleX - EDGE_PADDING_DIP && !mTriggered) { - mTriggered = true; - mFrozen = dispatchTriggerEvent(OnDialTriggerListener.LEFT_HANDLE); + final int action = event.getAction(); + switch (action) { + case MotionEvent.ACTION_DOWN: + if (DBG) log("touch-down"); + mTriggered = false; + if (mGrabbedState != NOTHING_GRABBED) { + reset(); + invalidate(); } - } else if (mGrabbedState == RotarySelector.RIGHT_HANDLE_GRABBED) { - mTouchDragOffset = eventX - mRightHandleX; - invalidate(); - if (eventX <= mLeftHandleX + EDGE_PADDING_DIP && !mTriggered) { - mTriggered = true; - mFrozen = dispatchTriggerEvent(OnDialTriggerListener.RIGHT_HANDLE); + if (eventX < mLeftHandleX + hitWindow) { + mTouchDragOffset = eventX - mLeftHandleX; + mGrabbedState = LEFT_HANDLE_GRABBED; + invalidate(); + vibrate(VIBRATE_SHORT); + } else if (eventX > mRightHandleX - hitWindow) { + mTouchDragOffset = eventX - mRightHandleX; + mGrabbedState = RIGHT_HANDLE_GRABBED; + invalidate(); + vibrate(VIBRATE_SHORT); } - } - } else if ((event.getAction() == MotionEvent.ACTION_UP)) { - if (DBG) log("touch-up"); - // handle animating back to start if they didn't trigger - if (mGrabbedState == RotarySelector.LEFT_HANDLE_GRABBED - && Math.abs(eventX - mLeftHandleX) > 5) { - mAnimating = true; - mAnimationEndTime = System.currentTimeMillis() + ANIMATION_DURATION_MILLIS; - mAnimatingDelta = eventX - mLeftHandleX; - } else if (mGrabbedState == RotarySelector.RIGHT_HANDLE_GRABBED - && Math.abs(eventX - mRightHandleX) > 5) { - mAnimating = true; - mAnimationEndTime = System.currentTimeMillis() + ANIMATION_DURATION_MILLIS; - mAnimatingDelta = eventX - mRightHandleX; - } + break; - mTouchDragOffset = 0; - mGrabbedState = RotarySelector.NOTHING_GRABBED; - invalidate(); - } else if (event.getAction() == MotionEvent.ACTION_CANCEL) { - if (DBG) log("touch-cancel"); - reset(); - invalidate(); + case MotionEvent.ACTION_MOVE: + if (DBG) log("touch-move"); + if (mGrabbedState == LEFT_HANDLE_GRABBED) { + mTouchDragOffset = eventX - mLeftHandleX; + invalidate(); + if (eventX >= mRightHandleX - EDGE_PADDING_DIP && !mTriggered) { + mTriggered = true; + mFrozen = dispatchTriggerEvent(OnDialTriggerListener.LEFT_HANDLE); + } + } else if (mGrabbedState == RIGHT_HANDLE_GRABBED) { + mTouchDragOffset = eventX - mRightHandleX; + invalidate(); + if (eventX <= mLeftHandleX + EDGE_PADDING_DIP && !mTriggered) { + mTriggered = true; + mFrozen = dispatchTriggerEvent(OnDialTriggerListener.RIGHT_HANDLE); + } + } + break; + case MotionEvent.ACTION_UP: + if (DBG) log("touch-up"); + // handle animating back to start if they didn't trigger + if (mGrabbedState == LEFT_HANDLE_GRABBED + && Math.abs(eventX - mLeftHandleX) > 5) { + mAnimating = true; + mAnimationEndTime = currentAnimationTimeMillis() + ANIMATION_DURATION_MILLIS; + mAnimatingDelta = eventX - mLeftHandleX; + } else if (mGrabbedState == RIGHT_HANDLE_GRABBED + && Math.abs(eventX - mRightHandleX) > 5) { + mAnimating = true; + mAnimationEndTime = currentAnimationTimeMillis() + ANIMATION_DURATION_MILLIS; + mAnimatingDelta = eventX - mRightHandleX; + } + + mTouchDragOffset = 0; + mGrabbedState = NOTHING_GRABBED; + invalidate(); + break; + case MotionEvent.ACTION_CANCEL: + if (DBG) log("touch-cancel"); + reset(); + invalidate(); + break; } return true; } @@ -446,7 +451,7 @@ public class RotarySelector extends View { private void reset() { mAnimating = false; mTouchDragOffset = 0; - mGrabbedState = RotarySelector.NOTHING_GRABBED; + mGrabbedState = NOTHING_GRABBED; mTriggered = false; } |