PlaybackStateCompat.java revision 84b0350796e4ae8a113ce1abba54f07a2605cc5c
124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown/* 224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Copyright (C) 2014 The Android Open Source Project 324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * you may not use this file except in compliance with the License. 624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * You may obtain a copy of the License at 724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 1024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Unless required by applicable law or agreed to in writing, software 1124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 1224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * See the License for the specific language governing permissions and 1424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * limitations under the License. 1524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 1624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownpackage android.support.v4.media.session; 1724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 1824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.Build; 1924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.Parcel; 2024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.Parcelable; 2124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.SystemClock; 2224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.text.TextUtils; 2324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 2424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown/** 2524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Playback state for a {@link MediaSessionCompat}. This includes a state like 2624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * {@link PlaybackStateCompat#STATE_PLAYING}, the current playback position, 2724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * and the current control capabilities. 2824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 2924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownpublic final class PlaybackStateCompat implements Parcelable { 3024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 3124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the stop command. 3224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 3324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 3424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 3524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_STOP = 1 << 0; 3624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 3724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 3824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the pause command. 3924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 4024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 4124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 4224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_PAUSE = 1 << 1; 4324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 4424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 4524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the play command. 4624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 4724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 4824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 4924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_PLAY = 1 << 2; 5024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 5124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 5224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the rewind command. 5324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 5424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 5524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 5624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_REWIND = 1 << 3; 5724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 5824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 5924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the previous command. 6024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 6124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 6224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 6324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_SKIP_TO_PREVIOUS = 1 << 4; 6424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 6524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 6624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the next command. 6724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 6824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 6924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 7024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_SKIP_TO_NEXT = 1 << 5; 7124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 7224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 7324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the fast forward command. 7424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 7524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 7624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 7724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_FAST_FORWARD = 1 << 6; 7824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 7924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 8024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the set rating command. 8124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 8224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 8324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 8424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_SET_RATING = 1 << 7; 8524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 8624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 8724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the seek to command. 8824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 8924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 9024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 9124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_SEEK_TO = 1 << 8; 9224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 9324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 9424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Indicates this performer supports the play/pause toggle command. 9524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 9624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setActions 9724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 9824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final long ACTION_PLAY_PAUSE = 1 << 9; 9924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 10024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 10124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * This is the default playback state and indicates that no media has been 10224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * added yet, or the performer has been reset and has no content to play. 10324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 10424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 10524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 10624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_NONE = 0; 10724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 10824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 10924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating this item is currently stopped. 11024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 11124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 11224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 11324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_STOPPED = 1; 11424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 11524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 11624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating this item is currently paused. 11724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 11824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 11924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 12024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_PAUSED = 2; 12124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 12224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 12324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating this item is currently playing. 12424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 12524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 12624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 12724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_PLAYING = 3; 12824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 12924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 13024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating this item is currently fast forwarding. 13124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 13224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 13324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 13424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_FAST_FORWARDING = 4; 13524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 13624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 13724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating this item is currently rewinding. 13824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 13924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 14024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 14124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_REWINDING = 5; 14224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 14324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 14424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating this item is currently buffering and will begin playing 14524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * when enough data has buffered. 14624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 14724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 14824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 14924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_BUFFERING = 6; 15024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 15124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 15224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating this item is currently in an error state. The error 15324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * message should also be set when entering this state. 15424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 15524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 15624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 15724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_ERROR = 7; 15824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 15924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 16024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating the class doing playback is currently connecting to a 16124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * route. Depending on the implementation you may return to the previous 16224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * state when the connection finishes or enter {@link #STATE_NONE}. If 16324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * the connection failed {@link #STATE_ERROR} should be used. 16424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @hide 16524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 16624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_CONNECTING = 8; 16724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 16824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 16924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating the player is currently skipping to the previous item. 17024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 17124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 17224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 17324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_SKIPPING_TO_PREVIOUS = 9; 17424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 17524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 17624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * State indicating the player is currently skipping to the next item. 17724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 17824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @see Builder#setState 17924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 18024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static int STATE_SKIPPING_TO_NEXT = 10; 18124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 18224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 18324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Use this value for the position to indicate the position is not known. 18424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 18524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public final static long PLAYBACK_POSITION_UNKNOWN = -1; 18624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 18724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private final int mState; 18824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private final long mPosition; 18924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private final long mBufferPosition; 19084b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik private final float mSpeed; 19124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private final long mActions; 19224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private final CharSequence mErrorMessage; 19324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private final long mUpdateTime; 19424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 19524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private Object mStateObj; 19624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 19724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private PlaybackStateCompat(int state, long position, long bufferPosition, 19824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown float rate, long actions, CharSequence errorMessage, long updateTime) { 19924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mState = state; 20024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mPosition = position; 20124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mBufferPosition = bufferPosition; 20284b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik mSpeed = rate; 20324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mActions = actions; 20424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mErrorMessage = errorMessage; 20524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mUpdateTime = updateTime; 20624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 20724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 20824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private PlaybackStateCompat(Parcel in) { 20924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mState = in.readInt(); 21024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mPosition = in.readLong(); 21184b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik mSpeed = in.readFloat(); 21224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mUpdateTime = in.readLong(); 21324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mBufferPosition = in.readLong(); 21424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mActions = in.readLong(); 21524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mErrorMessage = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 21624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 21724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 21824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown @Override 21924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public String toString() { 22024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown StringBuilder bob = new StringBuilder("PlaybackState {"); 22124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown bob.append("state=").append(mState); 22224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown bob.append(", position=").append(mPosition); 22324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown bob.append(", buffered position=").append(mBufferPosition); 22484b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik bob.append(", speed=").append(mSpeed); 22524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown bob.append(", updated=").append(mUpdateTime); 22624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown bob.append(", actions=").append(mActions); 22724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown bob.append(", error=").append(mErrorMessage); 22824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown bob.append("}"); 22924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return bob.toString(); 23024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 23124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 23224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown @Override 23324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public int describeContents() { 23424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return 0; 23524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 23624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 23724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown @Override 23824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void writeToParcel(Parcel dest, int flags) { 23924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown dest.writeInt(mState); 24024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown dest.writeLong(mPosition); 24184b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik dest.writeFloat(mSpeed); 24224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown dest.writeLong(mUpdateTime); 24324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown dest.writeLong(mBufferPosition); 24424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown dest.writeLong(mActions); 24524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown TextUtils.writeToParcel(mErrorMessage, dest, flags); 24624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 24724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 24824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 24924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Get the current state of playback. One of the following: 25024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <ul> 25124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_NONE}</li> 25224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_STOPPED}</li> 25324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_PLAYING}</li> 25424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_PAUSED}</li> 25524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_FAST_FORWARDING}</li> 25624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_REWINDING}</li> 25724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_BUFFERING}</li> 25824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_ERROR}</li> 25924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 26024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public int getState() { 26124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return mState; 26224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 26324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 26424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 26524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Get the current playback position in ms. 26624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 26724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public long getPosition() { 26824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return mPosition; 26924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 27024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 27124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 27224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Get the current buffer position in ms. This is the farthest playback 27324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * point that can be reached from the current position using only buffered 27424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * content. 27524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 27624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public long getBufferPosition() { 27724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return mBufferPosition; 27824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 27924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 28024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 28184b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik * Get the current playback speed as a multiple of normal playback. This 28224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * should be negative when rewinding. A value of 1 means normal playback and 28324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 0 means paused. 28424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 28584b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik * @return The current speed of playback. 28624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 28784b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik public float getPlaybackSpeed() { 28884b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik return mSpeed; 28924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 29024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 29124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 29224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Get the current actions available on this session. This should use a 29324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * bitmask of the available actions. 29424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <ul> 29524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_SKIP_TO_PREVIOUS}</li> 29624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_REWIND}</li> 29724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_PLAY}</li> 29824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_PAUSE}</li> 29924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_STOP}</li> 30024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_FAST_FORWARD}</li> 30124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_SKIP_TO_NEXT}</li> 30224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_SEEK_TO}</li> 30324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_SET_RATING}</li> 30424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * </ul> 30524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 30624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public long getActions() { 30724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return mActions; 30824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 30924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 31024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 31124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Get a user readable error message. This should be set when the state is 31224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * {@link PlaybackStateCompat#STATE_ERROR}. 31324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 31424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public CharSequence getErrorMessage() { 31524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return mErrorMessage; 31624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 31724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 31824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 31924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Get the elapsed real time at which position was last updated. If the 32024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * position has never been set this will return 0; 32124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 32224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @return The last time the position was updated. 32324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 32424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public long getLastPositionUpdateTime() { 32524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return mUpdateTime; 32624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 32724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 32824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 32924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Creates an instance from a framework {@link android.media.session.PlaybackState} object. 33024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <p> 33124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * This method is only supported on API 21+. 33224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * </p> 33324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 33424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @param stateObj A {@link android.media.session.PlaybackState} object, or null if none. 33524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @return An equivalent {@link PlaybackStateCompat} object, or null if none. 33624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 33724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static PlaybackStateCompat fromPlaybackState(Object stateObj) { 33824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown if (stateObj == null || Build.VERSION.SDK_INT < 21) { 33924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return null; 34024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 34124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 34224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown PlaybackStateCompat state = new PlaybackStateCompat( 34324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown PlaybackStateCompatApi21.getState(stateObj), 34424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown PlaybackStateCompatApi21.getPosition(stateObj), 34524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown PlaybackStateCompatApi21.getBufferPosition(stateObj), 34684b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik PlaybackStateCompatApi21.getPlaybackSpeed(stateObj), 34724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown PlaybackStateCompatApi21.getActions(stateObj), 34824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown PlaybackStateCompatApi21.getErrorMessage(stateObj), 34924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown PlaybackStateCompatApi21.getLastPositionUpdateTime(stateObj)); 35024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown state.mStateObj = stateObj; 35124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return state; 35224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 35324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 35424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 35524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Gets the underlying framework {@link android.media.session.PlaybackState} object. 35624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <p> 35724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * This method is only supported on API 21+. 35824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * </p> 35924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 36024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @return An equivalent {@link android.media.session.PlaybackState} object, or null if none. 36124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 36224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public Object getPlaybackState() { 36324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown if (mStateObj != null || Build.VERSION.SDK_INT < 21) { 36424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return mStateObj; 36524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 36624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 36724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mStateObj = PlaybackStateCompatApi21.newInstance(mState, mPosition, mBufferPosition, 36884b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik mSpeed, mActions, mErrorMessage, mUpdateTime); 36924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return mStateObj; 37024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 37124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 37224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final Parcelable.Creator<PlaybackStateCompat> CREATOR = 37324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown new Parcelable.Creator<PlaybackStateCompat>() { 37424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown @Override 37524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public PlaybackStateCompat createFromParcel(Parcel in) { 37624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return new PlaybackStateCompat(in); 37724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 37824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 37924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown @Override 38024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public PlaybackStateCompat[] newArray(int size) { 38124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return new PlaybackStateCompat[size]; 38224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 38324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown }; 38424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 38524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 38624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Builder for {@link PlaybackStateCompat} objects. 38724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 38824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static final class Builder { 38924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private int mState; 39024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private long mPosition; 39124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private long mBufferPosition; 39224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private float mRate; 39324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private long mActions; 39424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private CharSequence mErrorMessage; 39524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown private long mUpdateTime; 39624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 39724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 39824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Create an empty Builder. 39924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 40024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public Builder() { 40124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 40224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 40324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 40424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Create a Builder using a {@link PlaybackStateCompat} instance to set the 40524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * initial values. 40624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 40724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @param source The playback state to copy. 40824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 40924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public Builder(PlaybackStateCompat source) { 41024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mState = source.mState; 41124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mPosition = source.mPosition; 41284b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik mRate = source.mSpeed; 41324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mUpdateTime = source.mUpdateTime; 41424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mBufferPosition = source.mBufferPosition; 41524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mActions = source.mActions; 41624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mErrorMessage = source.mErrorMessage; 41724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 41824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 41924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 42024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Set the current state of playback. 42124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <p> 42224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * The position must be in ms and indicates the current playback position 42324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * within the track. If the position is unknown use 42424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * {@link #PLAYBACK_POSITION_UNKNOWN}. 42524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <p> 42624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * The rate is a multiple of normal playback and should be 0 when paused and 42724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * negative when rewinding. Normal playback rate is 1.0. 42824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <p> 42924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * The state must be one of the following: 43024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <ul> 43124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_NONE}</li> 43224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_STOPPED}</li> 43324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_PLAYING}</li> 43424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_PAUSED}</li> 43524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_FAST_FORWARDING}</li> 43624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_REWINDING}</li> 43724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_BUFFERING}</li> 43824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#STATE_ERROR}</li> 43924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * </ul> 44024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * 44124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @param state The current state of playback. 44224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @param position The position in the current track in ms. 44324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * @param playbackRate The current rate of playback as a multiple of normal 44424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * playback. 44524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 44624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void setState(int state, long position, float playbackRate) { 44724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown this.mState = state; 44824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown this.mPosition = position; 44924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown this.mRate = playbackRate; 45024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mUpdateTime = SystemClock.elapsedRealtime(); 45124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 45224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 45324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 45424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Set the current buffer position in ms. This is the farthest playback 45524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * point that can be reached from the current position using only buffered 45624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * content. 45724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 45824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void setBufferPosition(long bufferPosition) { 45924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mBufferPosition = bufferPosition; 46024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 46124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 46224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 46324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Set the current capabilities available on this session. This should use a 46424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * bitmask of the available capabilities. 46524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <ul> 46624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_SKIP_TO_PREVIOUS}</li> 46724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_REWIND}</li> 46824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_PLAY}</li> 46924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_PAUSE}</li> 47024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_STOP}</li> 47124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_FAST_FORWARD}</li> 47224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_SKIP_TO_NEXT}</li> 47324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_SEEK_TO}</li> 47424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * <li> {@link PlaybackStateCompat#ACTION_SET_RATING}</li> 47524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * </ul> 47624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 47724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void setActions(long capabilities) { 47824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mActions = capabilities; 47924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 48024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 48124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 48224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Set a user readable error message. This should be set when the state is 48324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * {@link PlaybackStateCompat#STATE_ERROR}. 48424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 48524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void setErrorMessage(CharSequence errorMessage) { 48624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mErrorMessage = errorMessage; 48724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 48824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 48924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown /** 49024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Creates the playback state object. 49124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */ 49224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public PlaybackStateCompat build() { 49324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return new PlaybackStateCompat(mState, mPosition, mBufferPosition, 49424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mRate, mActions, mErrorMessage, mUpdateTime); 49524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 49624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 49724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown} 498