3535import android .os .Handler ;
3636import android .os .Message ;
3737import android .os .RemoteException ;
38+ import android .os .SystemClock ;
3839import android .text .Spannable ;
3940import android .text .TextUtils ;
4041import android .text .style .ForegroundColorSpan ;
@@ -59,6 +60,7 @@ public class TransportControlView extends FrameLayout implements OnClickListener
5960 private static final int MSG_SET_ARTWORK = 103 ;
6061 private static final int MSG_SET_GENERATION_ID = 104 ;
6162 private static final int MAXDIM = 512 ;
63+ private static final int DISPLAY_TIMEOUT_MS = 5000 ; // 5s
6264 protected static final boolean DEBUG = true ;
6365 protected static final String TAG = "TransportControlView" ;
6466
@@ -142,7 +144,7 @@ private static class IRemoteControlDisplayWeak extends IRemoteControlDisplay.Stu
142144 mLocalHandler = new WeakReference <Handler >(handler );
143145 }
144146
145- public void setPlaybackState (int generationId , int state ) {
147+ public void setPlaybackState (int generationId , int state , long stateChangeTimeMs ) {
146148 Handler handler = mLocalHandler .get ();
147149 if (handler != null ) {
148150 handler .obtainMessage (MSG_UPDATE_STATE , generationId , state ).sendToTarget ();
@@ -401,4 +403,33 @@ public boolean providesClock() {
401403 return false ;
402404 }
403405
406+ private boolean wasPlayingRecently (int state , long stateChangeTimeMs ) {
407+ switch (state ) {
408+ case RemoteControlClient .PLAYSTATE_PLAYING :
409+ case RemoteControlClient .PLAYSTATE_FAST_FORWARDING :
410+ case RemoteControlClient .PLAYSTATE_REWINDING :
411+ case RemoteControlClient .PLAYSTATE_SKIPPING_FORWARDS :
412+ case RemoteControlClient .PLAYSTATE_SKIPPING_BACKWARDS :
413+ case RemoteControlClient .PLAYSTATE_BUFFERING :
414+ // actively playing or about to play
415+ return true ;
416+ case RemoteControlClient .PLAYSTATE_NONE :
417+ return false ;
418+ case RemoteControlClient .PLAYSTATE_STOPPED :
419+ case RemoteControlClient .PLAYSTATE_PAUSED :
420+ case RemoteControlClient .PLAYSTATE_ERROR :
421+ // we have stopped playing, check how long ago
422+ if (DEBUG ) {
423+ if ((SystemClock .elapsedRealtime () - stateChangeTimeMs ) < DISPLAY_TIMEOUT_MS ) {
424+ Log .v (TAG , "wasPlayingRecently: time < TIMEOUT was playing recently" );
425+ } else {
426+ Log .v (TAG , "wasPlayingRecently: time > TIMEOUT" );
427+ }
428+ }
429+ return ((SystemClock .elapsedRealtime () - stateChangeTimeMs ) < DISPLAY_TIMEOUT_MS );
430+ default :
431+ Log .e (TAG , "Unknown playback state " + state + " in wasPlayingRecently()" );
432+ return false ;
433+ }
434+ }
404435}
0 commit comments