diff options
author | Andrew Lee <anwlee@google.com> | 2015-06-15 16:06:14 -0700 |
---|---|---|
committer | Andrew Lee <anwlee@google.com> | 2015-06-15 17:43:52 -0700 |
commit | bae7b937b6cf6e7eb26d07bec95de38083923614 (patch) | |
tree | 6662774c617e202e85bea437ea503ba78923247d /src/com/android/dialer/voicemail | |
parent | becbb119bdcd96257106b990ce84bac99388deac (diff) |
Add play voicemail primary action to call log.
+ Add voicemail primary action button, which expands the call log
and plays immediately when clicked.
+ Pass expand/collapse listener into the view holder. This is
necessary because it needs to be triggered when the "play" primary
action is clicked so that the CallLogAdapter correctly registers
what has been added and binded.
+ Update primary action button state when showing or hiding actions,
so the visibility of the voicemail play button is managed properly.
+ Ensure voicemail playback state is consistent between multiple
call log items when the user initiates a collapse or expand. Add
reset function to help manage this.
+ With the reset, protect against the possibility of functions in
the presenter being called when no voicemail playback view is set.
Bug: 21654755
Change-Id: I7bcf67d27fa08fe77d1334dc084b52effe8d3ccc
Diffstat (limited to 'src/com/android/dialer/voicemail')
-rw-r--r-- | src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java index d47e9e213..cc6437627 100644 --- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java +++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java @@ -178,6 +178,18 @@ public class VoicemailPlaybackPresenter mMediaPlayer.setOnCompletionListener(this); } + public void reset() { + pausePlayback(); + + mView = null; + mVoicemailUri = null; + + mIsPrepared = false; + mIsPlaying = false; + mPosition = 0; + mDuration.set(0); + } + /** * Specify the view which this presenter controls and the voicemail for playback. */ @@ -204,7 +216,6 @@ public class VoicemailPlaybackPresenter mView.onSpeakerphoneOn(false); checkForContent(); - } } @@ -341,7 +352,9 @@ public class VoicemailPlaybackPresenter public void run() { if (mIsWaitingForResult.getAndSet(false)) { mContext.getContentResolver().unregisterContentObserver(this); - mView.setFetchContentTimeout(); + if (mView != null) { + mView.setFetchContentTimeout(); + } } } @@ -384,7 +397,11 @@ public class VoicemailPlaybackPresenter * and it will call {@link #onError()} otherwise. */ private void prepareToPlayContent() { + if (mView == null) { + return; + } mIsPrepared = false; + mView.setIsBuffering(); try { @@ -402,7 +419,11 @@ public class VoicemailPlaybackPresenter */ @Override public void onPrepared(MediaPlayer mp) { + if (mView == null) { + return; + } mIsPrepared = true; + mDuration.set(mMediaPlayer.getDuration()); mView.enableUiElements(); @@ -421,7 +442,7 @@ public class VoicemailPlaybackPresenter */ @Override public boolean onError(MediaPlayer mp, int what, int extra) { - handleError(new IllegalStateException("MediaPlayer error listener invoked")); + handleError(new IllegalStateException("MediaPlayer error listener invoked: " + extra)); return true; } |