am bcc6ae88: Merge "Let RemoteControlDisplay know more about playback position" into jb-mr2-dev
* commit 'bcc6ae88f97caa7591a7507a90ec1152ee7cab7a': Let RemoteControlDisplay know more about playback position
This commit is contained in:
@@ -40,6 +40,33 @@ oneway interface IRemoteControlDisplay
|
||||
void setCurrentClientId(int clientGeneration, in PendingIntent clientMediaIntent,
|
||||
boolean clearing);
|
||||
|
||||
/**
|
||||
* Sets the playback information (state, position and speed) of a client.
|
||||
* @param generationId the current generation ID as known by this client
|
||||
* @param state the current playback state, one of the following values:
|
||||
* {@link RemoteControlClient#PLAYSTATE_STOPPED},
|
||||
* {@link RemoteControlClient#PLAYSTATE_PAUSED},
|
||||
* {@link RemoteControlClient#PLAYSTATE_PLAYING},
|
||||
* {@link RemoteControlClient#PLAYSTATE_FAST_FORWARDING},
|
||||
* {@link RemoteControlClient#PLAYSTATE_REWINDING},
|
||||
* {@link RemoteControlClient#PLAYSTATE_SKIPPING_FORWARDS},
|
||||
* {@link RemoteControlClient#PLAYSTATE_SKIPPING_BACKWARDS},
|
||||
* {@link RemoteControlClient#PLAYSTATE_BUFFERING},
|
||||
* {@link RemoteControlClient#PLAYSTATE_ERROR}.
|
||||
* @param stateChangeTimeMs the time at which the client reported the playback information
|
||||
* @param currentPosMs a 0 or positive value for the current media position expressed in ms
|
||||
* Strictly negative values imply that position is not known:
|
||||
* a value of {@link RemoteControlClient#PLAYBACK_POSITION_INVALID} is intended to express
|
||||
* that an application doesn't know the position (e.g. listening to a live stream of a radio)
|
||||
* or that the position information is not applicable (e.g. when state
|
||||
* is {@link RemoteControlClient#PLAYSTATE_BUFFERING} and nothing had played yet);
|
||||
* a value of {@link RemoteControlClient#PLAYBACK_POSITION_ALWAYS_UNKNOWN} implies that the
|
||||
* application uses {@link RemoteControlClient#setPlaybackState(int)} (legacy API) and will
|
||||
* never pass a playback position.
|
||||
* @param speed a value expressed as a ratio of 1x playback: 1.0f is normal playback,
|
||||
* 2.0f is 2x, 0.5f is half-speed, -2.0f is rewind at 2x speed. 0.0f means nothing is
|
||||
* playing (e.g. when state is {@link RemoteControlClient#PLAYSTATE_ERROR}).
|
||||
*/
|
||||
void setPlaybackState(int generationId, int state, long stateChangeTimeMs, long currentPosMs,
|
||||
float speed);
|
||||
|
||||
|
||||
@@ -178,6 +178,12 @@ public class RemoteControlClient
|
||||
* An unknown or invalid playback position value.
|
||||
*/
|
||||
public final static long PLAYBACK_POSITION_INVALID = -1;
|
||||
/**
|
||||
* @hide
|
||||
* An invalid playback position value associated with the use of {@link #setPlaybackState(int)}
|
||||
* used to indicate that playback position will remain unknown.
|
||||
*/
|
||||
public final static long PLAYBACK_POSITION_ALWAYS_UNKNOWN = 0x8019771980198300L;
|
||||
/**
|
||||
* @hide
|
||||
* The default playback speed, 1x.
|
||||
@@ -602,7 +608,8 @@ public class RemoteControlClient
|
||||
* {@link #PLAYSTATE_ERROR}.
|
||||
*/
|
||||
public void setPlaybackState(int state) {
|
||||
setPlaybackState(state, PLAYBACK_POSITION_INVALID, PLAYBACK_SPEED_1X);
|
||||
setPlaybackStateInt(state, PLAYBACK_POSITION_ALWAYS_UNKNOWN, PLAYBACK_SPEED_1X,
|
||||
false /* legacy API, converting to method with position and speed */);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -629,12 +636,28 @@ public class RemoteControlClient
|
||||
* playing (e.g. when state is {@link #PLAYSTATE_ERROR}).
|
||||
*/
|
||||
public void setPlaybackState(int state, long timeInMs, float playbackSpeed) {
|
||||
setPlaybackStateInt(state, timeInMs, playbackSpeed, true);
|
||||
}
|
||||
|
||||
private void setPlaybackStateInt(int state, long timeInMs, float playbackSpeed,
|
||||
boolean hasPosition) {
|
||||
synchronized(mCacheLock) {
|
||||
if ((mPlaybackState != state) || (mPlaybackPositionMs != timeInMs)
|
||||
|| (mPlaybackSpeed != playbackSpeed)) {
|
||||
// store locally
|
||||
mPlaybackState = state;
|
||||
mPlaybackPositionMs = timeInMs;
|
||||
// distinguish between an application not knowing the current playback position
|
||||
// at the moment and an application using the API where only the playback state
|
||||
// is passed, not the playback position.
|
||||
if (hasPosition) {
|
||||
if (timeInMs < 0) {
|
||||
mPlaybackPositionMs = PLAYBACK_POSITION_INVALID;
|
||||
} else {
|
||||
mPlaybackPositionMs = timeInMs;
|
||||
}
|
||||
} else {
|
||||
mPlaybackPositionMs = PLAYBACK_POSITION_ALWAYS_UNKNOWN;
|
||||
}
|
||||
mPlaybackSpeed = playbackSpeed;
|
||||
// keep track of when the state change occurred
|
||||
mPlaybackStateChangeTimeMs = SystemClock.elapsedRealtime();
|
||||
|
||||
Reference in New Issue
Block a user