diff options
| author | Marco Nelissen <marcone@google.com> | 2011-12-08 14:53:23 -0800 |
|---|---|---|
| committer | Marco Nelissen <marcone@google.com> | 2011-12-08 14:53:23 -0800 |
| commit | 0962a4b159ae5d4ea427c9e6fc32ff3722cbc16c (patch) | |
| tree | 7be3fb315c46ff1326d23f02bb1226dd3035fe41 /src/com/android | |
| parent | 388c77797b17e80836d0a4ff80c13aaaa85d37c9 (diff) | |
| download | platform_packages_apps_MusicFX-0962a4b159ae5d4ea427c9e6fc32ff3722cbc16c.tar.gz platform_packages_apps_MusicFX-0962a4b159ae5d4ea427c9e6fc32ff3722cbc16c.tar.bz2 platform_packages_apps_MusicFX-0962a4b159ae5d4ea427c9e6fc32ff3722cbc16c.zip | |
Pull in recent seek/progress bar changes.
Change-Id: I4fb8dba0dfa9aabe17542ed518d6f677b442080d
Diffstat (limited to 'src/com/android')
| -rw-r--r-- | src/com/android/musicfx/seekbar/AbsSeekBar.java | 59 | ||||
| -rw-r--r-- | src/com/android/musicfx/seekbar/ProgressBar.java | 26 | ||||
| -rw-r--r-- | src/com/android/musicfx/seekbar/SeekBar.java | 2 |
3 files changed, 76 insertions, 11 deletions
diff --git a/src/com/android/musicfx/seekbar/AbsSeekBar.java b/src/com/android/musicfx/seekbar/AbsSeekBar.java index 026bcba..35e0e80 100644 --- a/src/com/android/musicfx/seekbar/AbsSeekBar.java +++ b/src/com/android/musicfx/seekbar/AbsSeekBar.java @@ -24,6 +24,7 @@ import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; +import android.view.ViewConfiguration; public abstract class AbsSeekBar extends ProgressBar { private Drawable mThumb; @@ -50,6 +51,10 @@ public abstract class AbsSeekBar extends ProgressBar { private static final int NO_ALPHA = 0xFF; private float mDisabledAlpha; + private int mScaledTouchSlop; + private float mTouchDownX; + private boolean mIsDragging; + public AbsSeekBar(Context context) { super(context); } @@ -75,6 +80,8 @@ public abstract class AbsSeekBar extends ProgressBar { com.android.internal.R.styleable.Theme, 0, 0); mDisabledAlpha = a.getFloat(com.android.internal.R.styleable.Theme_disabledAlpha, 0.5f); a.recycle(); + + mScaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } /** @@ -394,20 +401,48 @@ public abstract class AbsSeekBar extends ProgressBar { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - setPressed(true); - onStartTrackingTouch(); - trackTouchEvent(event); + if (isInScrollingContainer()) { + mTouchDownX = event.getX(); + } else { + setPressed(true); + if (mThumb != null) { + invalidate(mThumb.getBounds()); // This may be within the padding region + } + onStartTrackingTouch(); + trackTouchEvent(event); + attemptClaimDrag(); + } break; case MotionEvent.ACTION_MOVE: - trackTouchEvent(event); - attemptClaimDrag(); + if (mIsDragging) { + trackTouchEvent(event); + } else { + final float x = event.getX(); + if (Math.abs(x - mTouchDownX) > mScaledTouchSlop) { + setPressed(true); + if (mThumb != null) { + invalidate(mThumb.getBounds()); // This may be within the padding region + } + onStartTrackingTouch(); + trackTouchEvent(event); + attemptClaimDrag(); + } + } break; case MotionEvent.ACTION_UP: - trackTouchEvent(event); - onStopTrackingTouch(); - setPressed(false); + if (mIsDragging) { + trackTouchEvent(event); + onStopTrackingTouch(); + setPressed(false); + } else { + // Touch up when we never crossed the touch slop threshold should + // be interpreted as a tap-seek to that location. + onStartTrackingTouch(); + trackTouchEvent(event); + onStopTrackingTouch(); + } // ProgressBar doesn't know to repaint the thumb drawable // in its inactive state when the touch stops (because the // value has not apparently changed) @@ -415,8 +450,10 @@ public abstract class AbsSeekBar extends ProgressBar { break; case MotionEvent.ACTION_CANCEL: - onStopTrackingTouch(); - setPressed(false); + if (mIsDragging) { + onStopTrackingTouch(); + setPressed(false); + } invalidate(); // see above explanation break; } @@ -476,6 +513,7 @@ public abstract class AbsSeekBar extends ProgressBar { * This is called when the user has started touching this widget. */ void onStartTrackingTouch() { + mIsDragging = true; } /** @@ -483,6 +521,7 @@ public abstract class AbsSeekBar extends ProgressBar { * canceled. */ void onStopTrackingTouch() { + mIsDragging = false; } /** diff --git a/src/com/android/musicfx/seekbar/ProgressBar.java b/src/com/android/musicfx/seekbar/ProgressBar.java index b31f65d..57d8da2 100644 --- a/src/com/android/musicfx/seekbar/ProgressBar.java +++ b/src/com/android/musicfx/seekbar/ProgressBar.java @@ -933,9 +933,33 @@ public class ProgressBar extends View { // onDraw will translate the canvas so we draw starting at 0,0 int right = w - mPaddingRight - mPaddingLeft; int bottom = h - mPaddingBottom - mPaddingTop; + int top = 0; + int left = 0; if (mIndeterminateDrawable != null) { - mIndeterminateDrawable.setBounds(0, 0, right, bottom); + // Aspect ratio logic does not apply to AnimationDrawables + if (mOnlyIndeterminate && !(mIndeterminateDrawable instanceof AnimationDrawable)) { + // Maintain aspect ratio. Certain kinds of animated drawables + // get very confused otherwise. + final int intrinsicWidth = mIndeterminateDrawable.getIntrinsicWidth(); + final int intrinsicHeight = mIndeterminateDrawable.getIntrinsicHeight(); + final float intrinsicAspect = (float) intrinsicWidth / intrinsicHeight; + final float boundAspect = (float) w / h; + if (intrinsicAspect != boundAspect) { + if (boundAspect > intrinsicAspect) { + // New width is larger. Make it smaller to match height. + final int width = (int) (h * intrinsicAspect); + left = (w - width) / 2; + right = left + width; + } else { + // New height is larger. Make it smaller to match width. + final int height = (int) (w * (1 / intrinsicAspect)); + top = (h - height) / 2; + bottom = top + height; + } + } + } + mIndeterminateDrawable.setBounds(left, top, right, bottom); } if (mProgressDrawable != null) { diff --git a/src/com/android/musicfx/seekbar/SeekBar.java b/src/com/android/musicfx/seekbar/SeekBar.java index 24c4b61..2be99ce 100644 --- a/src/com/android/musicfx/seekbar/SeekBar.java +++ b/src/com/android/musicfx/seekbar/SeekBar.java @@ -104,6 +104,7 @@ public class SeekBar extends AbsSeekBar { @Override void onStartTrackingTouch() { + super.onStartTrackingTouch(); if (mOnSeekBarChangeListener != null) { mOnSeekBarChangeListener.onStartTrackingTouch(this); } @@ -111,6 +112,7 @@ public class SeekBar extends AbsSeekBar { @Override void onStopTrackingTouch() { + super.onStopTrackingTouch(); if (mOnSeekBarChangeListener != null) { mOnSeekBarChangeListener.onStopTrackingTouch(this); } |
