From 49aaae4269854d5c48700f9b5a55905b17ef57b6 Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Sun, 11 Apr 2010 18:09:01 -0500 Subject: [PATCH] Keep track of the timeline pos in CoverView This way we don't cause funkiness when we store covers due to repeat that don't correspond to a timeline position --- src/org/kreed/vanilla/CoverView.java | 14 +++++++++++--- src/org/kreed/vanilla/IPlaybackService.aidl | 3 ++- src/org/kreed/vanilla/PlaybackService.java | 8 +++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/org/kreed/vanilla/CoverView.java b/src/org/kreed/vanilla/CoverView.java index 24799b19..e9f33af9 100644 --- a/src/org/kreed/vanilla/CoverView.java +++ b/src/org/kreed/vanilla/CoverView.java @@ -60,6 +60,7 @@ public final class CoverView extends View { private Song[] mSongs = new Song[3]; private Bitmap[] mBitmaps = new Bitmap[3]; + private int mTimelinePos; private VelocityTracker mVelocityTracker; private float mLastMotionX; private float mStartX; @@ -120,6 +121,11 @@ public final class CoverView extends View { public void setPlaybackService(IPlaybackService service) { mService = service; + try { + mTimelinePos = mService.getTimelinePos(); + } catch (RemoteException e) { + mService = null; + } refreshSongs(); } @@ -399,6 +405,7 @@ public final class CoverView extends View { System.arraycopy(mBitmaps, from, mBitmaps, to, STORE_SIZE - 1); mSongs[i] = null; mBitmaps[i] = null; + mTimelinePos += delta; reset(); invalidate(); @@ -491,7 +498,7 @@ public final class CoverView extends View { mLastMotionX = x; if (deltaX < 0) { - int availableToScroll = scrollX - (mBitmaps[0] == null ? width : 0); + int availableToScroll = scrollX - (mBitmaps[0] == null || mTimelinePos == 0 ? width : 0); if (availableToScroll > 0) scrollBy(Math.max(-availableToScroll, deltaX), 0); } else if (deltaX > 0) { @@ -508,7 +515,7 @@ public final class CoverView extends View { velocityTracker.computeCurrentVelocity(250); int velocity = (int) velocityTracker.getXVelocity(); - int min = mBitmaps[0] == null ? 1 : 0; + int min = mBitmaps[0] == null || mTimelinePos == 0 ? 1 : 0; int max = mBitmaps[2] == null ? 1 : 2; int nearestCover = (scrollX + width / 2) / width; int whichCover = Math.max(min, Math.min(nearestCover, max)); @@ -591,8 +598,9 @@ public final class CoverView extends View { } else if (PlaybackService.EVENT_CHANGED.equals(action)) { Song currentSong = mSongs[STORE_SIZE / 2]; Song playingSong = intent.getParcelableExtra("song"); + mTimelinePos = intent.getIntExtra("pos", 0); if (currentSong == null || !currentSong.equals(playingSong)) refreshSongs(); } } -} \ No newline at end of file +} diff --git a/src/org/kreed/vanilla/IPlaybackService.aidl b/src/org/kreed/vanilla/IPlaybackService.aidl index f2258ab6..732924d0 100644 --- a/src/org/kreed/vanilla/IPlaybackService.aidl +++ b/src/org/kreed/vanilla/IPlaybackService.aidl @@ -25,8 +25,9 @@ interface IPlaybackService { int getState(); int getPosition(); int getDuration(); + int getTimelinePos(); void setCurrentSong(int delta); void toggleFlag(int flag); void seekToProgress(int progress); -} \ No newline at end of file +} diff --git a/src/org/kreed/vanilla/PlaybackService.java b/src/org/kreed/vanilla/PlaybackService.java index f201cc60..75946333 100644 --- a/src/org/kreed/vanilla/PlaybackService.java +++ b/src/org/kreed/vanilla/PlaybackService.java @@ -347,6 +347,7 @@ public class PlaybackService extends Service implements Handler.Callback, MediaP Intent intent = new Intent(EVENT_CHANGED); intent.putExtra("state", state); intent.putExtra("song", song); + intent.putExtra("pos", mCurrentSong); sendBroadcast(intent); if (mScrobble) { @@ -870,6 +871,11 @@ public class PlaybackService extends Service implements Handler.Callback, MediaP } } + public int getTimelinePos() + { + return mCurrentSong; + } + public void setCurrentSong(int delta) { PlaybackService.this.setCurrentSong(delta); @@ -896,4 +902,4 @@ public class PlaybackService extends Service implements Handler.Callback, MediaP { return mBinder; } -} \ No newline at end of file +}