Add missing 25.2.0 API file
am: 4ea4223933
Change-Id: Ice9f9557420dbc10430b64d20e5a1874a4784de8
diff --git a/api/current.txt b/api/current.txt
index 38fb0b6..b420217 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -5909,72 +5909,72 @@
field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
}
- public abstract class TransportController {
- ctor public TransportController();
- method public abstract int getBufferPercentage();
- method public abstract long getCurrentPosition();
- method public abstract long getDuration();
- method public abstract int getTransportControlFlags();
- method public abstract boolean isPlaying();
- method public abstract void pausePlaying();
- method public abstract void registerStateListener(android.support.v4.media.TransportStateListener);
- method public abstract void seekTo(long);
- method public abstract void startPlaying();
- method public abstract void stopPlaying();
- method public abstract void unregisterStateListener(android.support.v4.media.TransportStateListener);
+ public abstract deprecated class TransportController {
+ ctor public deprecated TransportController();
+ method public abstract deprecated int getBufferPercentage();
+ method public abstract deprecated long getCurrentPosition();
+ method public abstract deprecated long getDuration();
+ method public abstract deprecated int getTransportControlFlags();
+ method public abstract deprecated boolean isPlaying();
+ method public abstract deprecated void pausePlaying();
+ method public abstract deprecated void registerStateListener(android.support.v4.media.TransportStateListener);
+ method public abstract deprecated void seekTo(long);
+ method public abstract deprecated void startPlaying();
+ method public abstract deprecated void stopPlaying();
+ method public abstract deprecated void unregisterStateListener(android.support.v4.media.TransportStateListener);
}
- public class TransportMediator extends android.support.v4.media.TransportController {
- ctor public TransportMediator(android.app.Activity, android.support.v4.media.TransportPerformer);
- ctor public TransportMediator(android.view.View, android.support.v4.media.TransportPerformer);
- method public void destroy();
- method public boolean dispatchKeyEvent(android.view.KeyEvent);
- method public int getBufferPercentage();
- method public long getCurrentPosition();
- method public long getDuration();
- method public java.lang.Object getRemoteControlClient();
- method public int getTransportControlFlags();
- method public boolean isPlaying();
- method public void pausePlaying();
- method public void refreshState();
- method public void registerStateListener(android.support.v4.media.TransportStateListener);
- method public void seekTo(long);
- method public void startPlaying();
- method public void stopPlaying();
- method public void unregisterStateListener(android.support.v4.media.TransportStateListener);
- field public static final int FLAG_KEY_MEDIA_FAST_FORWARD = 64; // 0x40
- field public static final int FLAG_KEY_MEDIA_NEXT = 128; // 0x80
- field public static final int FLAG_KEY_MEDIA_PAUSE = 16; // 0x10
- field public static final int FLAG_KEY_MEDIA_PLAY = 4; // 0x4
- field public static final int FLAG_KEY_MEDIA_PLAY_PAUSE = 8; // 0x8
- field public static final int FLAG_KEY_MEDIA_PREVIOUS = 1; // 0x1
- field public static final int FLAG_KEY_MEDIA_REWIND = 2; // 0x2
- field public static final int FLAG_KEY_MEDIA_STOP = 32; // 0x20
- field public static final int KEYCODE_MEDIA_PAUSE = 127; // 0x7f
- field public static final int KEYCODE_MEDIA_PLAY = 126; // 0x7e
- field public static final int KEYCODE_MEDIA_RECORD = 130; // 0x82
+ public deprecated class TransportMediator extends android.support.v4.media.TransportController {
+ ctor public deprecated TransportMediator(android.app.Activity, android.support.v4.media.TransportPerformer);
+ ctor public deprecated TransportMediator(android.view.View, android.support.v4.media.TransportPerformer);
+ method public deprecated void destroy();
+ method public deprecated boolean dispatchKeyEvent(android.view.KeyEvent);
+ method public deprecated int getBufferPercentage();
+ method public deprecated long getCurrentPosition();
+ method public deprecated long getDuration();
+ method public deprecated java.lang.Object getRemoteControlClient();
+ method public deprecated int getTransportControlFlags();
+ method public deprecated boolean isPlaying();
+ method public deprecated void pausePlaying();
+ method public deprecated void refreshState();
+ method public deprecated void registerStateListener(android.support.v4.media.TransportStateListener);
+ method public deprecated void seekTo(long);
+ method public deprecated void startPlaying();
+ method public deprecated void stopPlaying();
+ method public deprecated void unregisterStateListener(android.support.v4.media.TransportStateListener);
+ field public static final deprecated int FLAG_KEY_MEDIA_FAST_FORWARD = 64; // 0x40
+ field public static final deprecated int FLAG_KEY_MEDIA_NEXT = 128; // 0x80
+ field public static final deprecated int FLAG_KEY_MEDIA_PAUSE = 16; // 0x10
+ field public static final deprecated int FLAG_KEY_MEDIA_PLAY = 4; // 0x4
+ field public static final deprecated int FLAG_KEY_MEDIA_PLAY_PAUSE = 8; // 0x8
+ field public static final deprecated int FLAG_KEY_MEDIA_PREVIOUS = 1; // 0x1
+ field public static final deprecated int FLAG_KEY_MEDIA_REWIND = 2; // 0x2
+ field public static final deprecated int FLAG_KEY_MEDIA_STOP = 32; // 0x20
+ field public static final deprecated int KEYCODE_MEDIA_PAUSE = 127; // 0x7f
+ field public static final deprecated int KEYCODE_MEDIA_PLAY = 126; // 0x7e
+ field public static final deprecated int KEYCODE_MEDIA_RECORD = 130; // 0x82
}
- public abstract class TransportPerformer {
- ctor public TransportPerformer();
- method public void onAudioFocusChange(int);
- method public int onGetBufferPercentage();
- method public abstract long onGetCurrentPosition();
- method public abstract long onGetDuration();
- method public int onGetTransportControlFlags();
- method public abstract boolean onIsPlaying();
- method public boolean onMediaButtonDown(int, android.view.KeyEvent);
- method public boolean onMediaButtonUp(int, android.view.KeyEvent);
- method public abstract void onPause();
- method public abstract void onSeekTo(long);
- method public abstract void onStart();
- method public abstract void onStop();
+ public abstract deprecated class TransportPerformer {
+ ctor public deprecated TransportPerformer();
+ method public deprecated void onAudioFocusChange(int);
+ method public deprecated int onGetBufferPercentage();
+ method public abstract deprecated long onGetCurrentPosition();
+ method public abstract deprecated long onGetDuration();
+ method public deprecated int onGetTransportControlFlags();
+ method public abstract deprecated boolean onIsPlaying();
+ method public deprecated boolean onMediaButtonDown(int, android.view.KeyEvent);
+ method public deprecated boolean onMediaButtonUp(int, android.view.KeyEvent);
+ method public abstract deprecated void onPause();
+ method public abstract deprecated void onSeekTo(long);
+ method public abstract deprecated void onStart();
+ method public abstract deprecated void onStop();
}
- public class TransportStateListener {
- ctor public TransportStateListener();
- method public void onPlayingChanged(android.support.v4.media.TransportController);
- method public void onTransportControlsChanged(android.support.v4.media.TransportController);
+ public deprecated class TransportStateListener {
+ ctor public deprecated TransportStateListener();
+ method public deprecated void onPlayingChanged(android.support.v4.media.TransportController);
+ method public deprecated void onTransportControlsChanged(android.support.v4.media.TransportController);
}
public abstract class VolumeProviderCompat {
@@ -6012,6 +6012,8 @@
public final class MediaControllerCompat {
ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat);
ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token) throws android.os.RemoteException;
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat, int);
method public void adjustVolume(int, int);
method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
method public android.os.Bundle getExtras();
@@ -6032,6 +6034,8 @@
method public boolean isShuffleModeEnabled();
method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler);
+ method public void removeQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public void removeQueueItemAt(int);
method public void sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
method public static void setMediaController(android.app.Activity, android.support.v4.media.session.MediaControllerCompat);
method public void setVolumeTo(int, int);
@@ -6118,11 +6122,14 @@
method public void setSessionActivity(android.app.PendingIntent);
method public void setShuffleModeEnabled(boolean);
field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+ field public static final int FLAG_HANDLES_QUEUE_COMMANDS = 4; // 0x4
field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
}
public static abstract class MediaSessionCompat.Callback {
ctor public MediaSessionCompat.Callback();
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat, int);
method public void onCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
method public void onCustomAction(java.lang.String, android.os.Bundle);
method public void onFastForward();
@@ -6136,6 +6143,8 @@
method public void onPrepareFromMediaId(java.lang.String, android.os.Bundle);
method public void onPrepareFromSearch(java.lang.String, android.os.Bundle);
method public void onPrepareFromUri(android.net.Uri, android.os.Bundle);
+ method public void onRemoveQueueItem(android.support.v4.media.MediaDescriptionCompat);
+ method public void onRemoveQueueItemAt(int);
method public void onRewind();
method public void onSeekTo(long);
method public void onSetRating(android.support.v4.media.RatingCompat);
diff --git a/design/tests/src/android/support/design/widget/AppBarWithToolbarAndTabsTest.java b/design/tests/src/android/support/design/widget/AppBarWithToolbarAndTabsTest.java
index c745f17..23ef7c5 100644
--- a/design/tests/src/android/support/design/widget/AppBarWithToolbarAndTabsTest.java
+++ b/design/tests/src/android/support/design/widget/AppBarWithToolbarAndTabsTest.java
@@ -27,7 +27,9 @@
import android.support.annotation.StringRes;
import android.support.design.test.R;
import android.support.design.testutils.Cheeses;
+import android.support.test.filters.FlakyTest;
import android.support.test.filters.LargeTest;
+import android.support.test.filters.Suppress;
import org.junit.Test;
@@ -232,6 +234,8 @@
assertAppBarElevation(mDefaultElevationValue);
}
+ @Suppress
+ @FlakyTest(bugId = 30701044)
@LargeTest
@Test
public void testSnappingToolbarAndSnappingTabs() throws Throwable {
diff --git a/media-compat/api23/android/support/v4/media/MediaBrowserCompatApi23.java b/media-compat/api23/android/support/v4/media/MediaBrowserCompatApi23.java
index 308c490..dfab20b 100644
--- a/media-compat/api23/android/support/v4/media/MediaBrowserCompatApi23.java
+++ b/media-compat/api23/android/support/v4/media/MediaBrowserCompatApi23.java
@@ -48,9 +48,13 @@
@Override
public void onItemLoaded(MediaBrowser.MediaItem item) {
- Parcel parcel = Parcel.obtain();
- item.writeToParcel(parcel, 0);
- mItemCallback.onItemLoaded(parcel);
+ if (item == null) {
+ mItemCallback.onItemLoaded(null);
+ } else {
+ Parcel parcel = Parcel.obtain();
+ item.writeToParcel(parcel, 0);
+ mItemCallback.onItemLoaded(parcel);
+ }
}
@Override
diff --git a/media-compat/java/android/support/v4/media/MediaBrowserCompat.java b/media-compat/java/android/support/v4/media/MediaBrowserCompat.java
index 214c815..414662a 100644
--- a/media-compat/java/android/support/v4/media/MediaBrowserCompat.java
+++ b/media-compat/java/android/support/v4/media/MediaBrowserCompat.java
@@ -778,10 +778,15 @@
@Override
public void onItemLoaded(Parcel itemParcel) {
- itemParcel.setDataPosition(0);
- MediaItem item = MediaBrowserCompat.MediaItem.CREATOR.createFromParcel(itemParcel);
- itemParcel.recycle();
- ItemCallback.this.onItemLoaded(item);
+ if (itemParcel == null) {
+ ItemCallback.this.onItemLoaded(null);
+ } else {
+ itemParcel.setDataPosition(0);
+ MediaItem item =
+ MediaBrowserCompat.MediaItem.CREATOR.createFromParcel(itemParcel);
+ itemParcel.recycle();
+ ItemCallback.this.onItemLoaded(item);
+ }
}
@Override
diff --git a/media-compat/java/android/support/v4/media/MediaDescriptionCompat.aidl b/media-compat/java/android/support/v4/media/MediaDescriptionCompat.aidl
new file mode 100644
index 0000000..f002cdd
--- /dev/null
+++ b/media-compat/java/android/support/v4/media/MediaDescriptionCompat.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2017, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+package android.support.v4.media;
+
+parcelable MediaDescriptionCompat;
diff --git a/media-compat/java/android/support/v4/media/TransportController.java b/media-compat/java/android/support/v4/media/TransportController.java
index b92a4a1..d1d2649 100644
--- a/media-compat/java/android/support/v4/media/TransportController.java
+++ b/media-compat/java/android/support/v4/media/TransportController.java
@@ -16,64 +16,111 @@
package android.support.v4.media;
+import android.support.v4.media.session.MediaControllerCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
+
/**
* Base interface to controlling a media transport. This is the
* interface for implementing things like on-screen controls: it
* allows them to request changes in playback, retrieve the current
* playback state, and monitor for changes to the playback state.
+ *
+ * @deprecated Use {@link MediaControllerCompat}.
*/
+@Deprecated
public abstract class TransportController {
/**
- * Start listening to changes in playback state.
+ * @deprecated Use {@link MediaControllerCompat}.
*/
+ @Deprecated
+ public TransportController() {
+ }
+
+ /**
+ * Start listening to changes in playback state.
+ *
+ * @deprecated Use
+ * {@link MediaControllerCompat#registerCallback(MediaControllerCompat.Callback)}.
+ */
+ @Deprecated
public abstract void registerStateListener(TransportStateListener listener);
/**
* Stop listening to changes in playback state.
+ *
+ * @deprecated Use
+ * {@link MediaControllerCompat#unregisterCallback(MediaControllerCompat.Callback)}.
*/
+ @Deprecated
public abstract void unregisterStateListener(TransportStateListener listener);
/**
* Request that the player start its playback at its current position.
+ *
+ * @deprecated Use {@link MediaControllerCompat.TransportControls#play}.
*/
+ @Deprecated
public abstract void startPlaying();
/**
* Request that the player pause its playback and stay at its current position.
+ *
+ * @deprecated Use {@link MediaControllerCompat.TransportControls#pause}.
*/
+ @Deprecated
public abstract void pausePlaying();
/**
* Request that the player stop its playback; it may clear its state in whatever
* way is appropriate.
+ *
+ * @deprecated Use {@link MediaControllerCompat.TransportControls#stop}.
*/
+ @Deprecated
public abstract void stopPlaying();
/**
* Retrieve the total duration of the media stream, in milliseconds.
+ *
+ * @deprecated Use {@link MediaMetadataCompat#METADATA_KEY_DURATION}.
*/
+ @Deprecated
public abstract long getDuration();
/**
* Retrieve the current playback location in the media stream, in milliseconds.
+ *
+ * @deprecated Use {@link PlaybackStateCompat#getPosition} and
+ * {@link PlaybackStateCompat#getLastPositionUpdateTime}.
*/
+ @Deprecated
public abstract long getCurrentPosition();
/**
* Move to a new location in the media stream.
* @param pos Position to move to, in milliseconds.
+ *
+ * @deprecated Use {@link MediaControllerCompat.TransportControls#seekTo}.
*/
+ @Deprecated
public abstract void seekTo(long pos);
/**
* Return whether the player is currently playing its stream.
+ *
+ * @deprecated Use {@link PlaybackStateCompat#getState}.
*/
+ @Deprecated
public abstract boolean isPlaying();
/**
* Retrieve amount, in percentage (0-100), that the media stream has been buffered
* on to the local device. Return 100 if the stream is always local.
+ *
+ * @deprecated Use {@link PlaybackStateCompat#getBufferedPosition} and
+ * {@link MediaMetadataCompat#METADATA_KEY_DURATION}.
*/
+ @Deprecated
public abstract int getBufferPercentage();
/**
@@ -87,6 +134,9 @@
* {@link TransportMediator#FLAG_KEY_MEDIA_STOP},
* {@link TransportMediator#FLAG_KEY_MEDIA_FAST_FORWARD},
* {@link TransportMediator#FLAG_KEY_MEDIA_NEXT}
+ *
+ * @deprecated Use {@link PlaybackStateCompat#getActions}.
*/
+ @Deprecated
public abstract int getTransportControlFlags();
}
diff --git a/media-compat/java/android/support/v4/media/TransportMediator.java b/media-compat/java/android/support/v4/media/TransportMediator.java
index ec3baec..40c245c 100644
--- a/media-compat/java/android/support/v4/media/TransportMediator.java
+++ b/media-compat/java/android/support/v4/media/TransportMediator.java
@@ -19,7 +19,10 @@
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
+import android.media.RemoteControlClient;
import android.os.Build;
+import android.support.v4.media.session.MediaControllerCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
import android.view.KeyEvent;
import android.view.View;
@@ -43,7 +46,10 @@
*
* {@sample frameworks/support/samples/Support4Demos/src/com/example/android/supportv4/media/TransportControllerActivity.java
* complete}
+ *
+ * @deprecated Use {@link MediaControllerCompat}.
*/
+@Deprecated
public class TransportMediator extends TransportController {
final Context mContext;
final TransportPerformer mCallbacks;
@@ -75,36 +81,91 @@
}
};
- /** Synonym for {@link KeyEvent#KEYCODE_MEDIA_PLAY KeyEvent.KEYCODE_MEDIA_PLAY} */
+ /**
+ * Synonym for {@link KeyEvent#KEYCODE_MEDIA_PLAY KeyEvent.KEYCODE_MEDIA_PLAY}
+ *
+ * @deprecated Use {@link KeyEvent#KEYCODE_MEDIA_PLAY}.
+ */
+ @Deprecated
public static final int KEYCODE_MEDIA_PLAY = 126;
- /** Synonym for {@link KeyEvent#KEYCODE_MEDIA_PAUSE KeyEvent.KEYCODE_MEDIA_PAUSE} */
+ /**
+ * Synonym for {@link KeyEvent#KEYCODE_MEDIA_PAUSE KeyEvent.KEYCODE_MEDIA_PAUSE}
+ *
+ * @deprecated Use {@link KeyEvent#KEYCODE_MEDIA_PAUSE}.
+ */
+ @Deprecated
public static final int KEYCODE_MEDIA_PAUSE = 127;
- /** Synonym for {@link KeyEvent#KEYCODE_MEDIA_RECORD KeyEvent.KEYCODE_MEDIA_RECORD} */
+ /**
+ * Synonym for {@link KeyEvent#KEYCODE_MEDIA_RECORD KeyEvent.KEYCODE_MEDIA_RECORD}
+ *
+ * @deprecated Use {@link KeyEvent#KEYCODE_MEDIA_RECORD}.
+ */
+ @Deprecated
public static final int KEYCODE_MEDIA_RECORD = 130;
- /** Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PREVIOUS
- * RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS} */
+ /**
+ * Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PREVIOUS
+ * RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS}
+ *
+ * @deprecated Use {@link RemoteControlClient#FLAG_KEY_MEDIA_PREVIOUS}.
+ */
+ @Deprecated
public final static int FLAG_KEY_MEDIA_PREVIOUS = 1 << 0;
- /** Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_REWIND
- * RemoteControlClient.FLAG_KEY_MEDIA_REWIND} */
+ /**
+ * Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_REWIND
+ * RemoteControlClient.FLAG_KEY_MEDIA_REWIND}
+ *
+ * @deprecated Use {@link RemoteControlClient#FLAG_KEY_MEDIA_REWIND}.
+ */
+ @Deprecated
public final static int FLAG_KEY_MEDIA_REWIND = 1 << 1;
- /** Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PLAY
- * RemoteControlClient.FLAG_KEY_MEDIA_PLAY} */
+ /**
+ * Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PLAY
+ * RemoteControlClient.FLAG_KEY_MEDIA_PLAY}
+ *
+ * @deprecated Use {@link RemoteControlClient#FLAG_KEY_MEDIA_PLAY}.
+ */
+ @Deprecated
public final static int FLAG_KEY_MEDIA_PLAY = 1 << 2;
- /** Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PLAY_PAUSE
- * RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE} */
+ /**
+ * Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PLAY_PAUSE
+ * RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE}
+ *
+ * @deprecated Use {@link RemoteControlClient#FLAG_KEY_MEDIA_PLAY_PAUSE}.
+ */
+ @Deprecated
public final static int FLAG_KEY_MEDIA_PLAY_PAUSE = 1 << 3;
- /** Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PAUSE
- * RemoteControlClient.FLAG_KEY_MEDIA_PAUSE} */
+ /**
+ * Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PAUSE
+ * RemoteControlClient.FLAG_KEY_MEDIA_PAUSE}
+ *
+ * @deprecated Use {@link RemoteControlClient#FLAG_KEY_MEDIA_PAUSE}.
+ */
+ @Deprecated
public final static int FLAG_KEY_MEDIA_PAUSE = 1 << 4;
- /** Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_STOP
- * RemoteControlClient.FLAG_KEY_MEDIA_STOP} */
+ /**
+ * Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_STOP
+ * RemoteControlClient.FLAG_KEY_MEDIA_STOP}
+ *
+ * @deprecated Use {@link RemoteControlClient#FLAG_KEY_MEDIA_STOP}.
+ */
+ @Deprecated
public final static int FLAG_KEY_MEDIA_STOP = 1 << 5;
- /** Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_FAST_FORWARD
- * RemoteControlClient.FLAG_KEY_MEDIA_FAST_FORWARD} */
+ /**
+ * Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_FAST_FORWARD
+ * RemoteControlClient.FLAG_KEY_MEDIA_FAST_FORWARD}
+ *
+ * @deprecated Use {@link RemoteControlClient#FLAG_KEY_MEDIA_FAST_FORWARD}.
+ */
+ @Deprecated
public final static int FLAG_KEY_MEDIA_FAST_FORWARD = 1 << 6;
- /** Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_NEXT
- * RemoteControlClient.FLAG_KEY_MEDIA_NEXT} */
+ /**
+ * Synonym for {@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_NEXT
+ * RemoteControlClient.FLAG_KEY_MEDIA_NEXT}
+ *
+ * @deprecated Use {@link RemoteControlClient#FLAG_KEY_MEDIA_NEXT}.
+ */
+ @Deprecated
public final static int FLAG_KEY_MEDIA_NEXT = 1 << 7;
static boolean isMediaKey(int keyCode) {
@@ -148,10 +209,18 @@
}
};
+ /**
+ * @deprecated Use {@link MediaControllerCompat}.
+ */
+ @Deprecated
public TransportMediator(Activity activity, TransportPerformer callbacks) {
this(activity, null, callbacks);
}
+ /**
+ * @deprecated Use {@link MediaControllerCompat}.
+ */
+ @Deprecated
public TransportMediator(View view, TransportPerformer callbacks) {
this(null, view, callbacks);
}
@@ -185,7 +254,10 @@
* you will interact with these through
* {@link TransportPerformer#onGetCurrentPosition() TransportPerformer.onGetCurrentPosition} and
* {@link TransportPerformer#onSeekTo TransportPerformer.onSeekTo}, respectively.</p>
+ *
+ * @deprecated Use {@link MediaControllerCompat}.
*/
+ @Deprecated
public Object getRemoteControlClient() {
return mController != null ? mController.getRemoteControlClient() : null;
}
@@ -195,16 +267,33 @@
* the transport an opportunity to intercept media keys. Any such keys will show up
* in {@link TransportPerformer}.
* @param event
+ *
+ * @deprecated Use {@link MediaControllerCompat#dispatchMediaButtonEvent}.
*/
+ @Deprecated
public boolean dispatchKeyEvent(KeyEvent event) {
return event.dispatch(mKeyEventCallback, (KeyEvent.DispatcherState) mDispatcherState, this);
}
+ /**
+ * Start listening to changes in playback state.
+ *
+ * @deprecated Use
+ * {@link MediaControllerCompat#registerCallback(MediaControllerCompat.Callback)}.
+ */
+ @Deprecated
@Override
public void registerStateListener(TransportStateListener listener) {
mListeners.add(listener);
}
+ /**
+ * Stop listening to changes in playback state.
+ *
+ * @deprecated Use
+ * {@link MediaControllerCompat#unregisterCallback(MediaControllerCompat.Callback)}.
+ */
+ @Deprecated
@Override
public void unregisterStateListener(TransportStateListener listener) {
mListeners.remove(listener);
@@ -245,6 +334,10 @@
}
}
+ /**
+ * @deprecated Not needed when you use {@link MediaControllerCompat}.
+ */
+ @Deprecated
public void refreshState() {
pushControllerState();
reportPlayingChanged();
@@ -254,7 +347,10 @@
/**
* Move the controller into the playing state. This updates the remote control
* client to indicate it is playing, and takes audio focus for the app.
+ *
+ * @deprecated Use {@link MediaControllerCompat.TransportControls#play}.
*/
+ @Deprecated
@Override
public void startPlaying() {
if (mController != null) {
@@ -268,7 +364,10 @@
/**
* Move the controller into the paused state. This updates the remote control
* client to indicate it is paused, but keeps audio focus.
+ *
+ * @deprecated Use {@link MediaControllerCompat.TransportControls#pause}.
*/
+ @Deprecated
@Override
public void pausePlaying() {
if (mController != null) {
@@ -282,7 +381,10 @@
/**
* Move the controller into the stopped state. This updates the remote control
* client to indicate it is stopped, and removes audio focus from the app.
+ *
+ * @deprecated Use {@link MediaControllerCompat.TransportControls#stop}.
*/
+ @Deprecated
@Override
public void stopPlaying() {
if (mController != null) {
@@ -293,33 +395,67 @@
reportPlayingChanged();
}
+ /**
+ * Retrieve the total duration of the media stream, in milliseconds.
+ *
+ * @deprecated Use {@link MediaMetadataCompat#METADATA_KEY_DURATION}.
+ */
+ @Deprecated
@Override
public long getDuration() {
return mCallbacks.onGetDuration();
}
+ /**
+ * Retrieve the current playback location in the media stream, in milliseconds.
+ *
+ * @deprecated Use {@link PlaybackStateCompat#getPosition} and
+ * {@link PlaybackStateCompat#getLastPositionUpdateTime}.
+ */
+ @Deprecated
@Override
public long getCurrentPosition() {
return mCallbacks.onGetCurrentPosition();
}
+ /**
+ * Move to a new location in the media stream.
+ * @param pos Position to move to, in milliseconds.
+ *
+ * @deprecated Use {@link MediaControllerCompat.TransportControls#seekTo}.
+ */
+ @Deprecated
@Override
public void seekTo(long pos) {
mCallbacks.onSeekTo(pos);
}
+ /**
+ * Return whether the player is currently playing its stream.
+ *
+ * @deprecated Use {@link PlaybackStateCompat#getState}.
+ */
+ @Deprecated
@Override
public boolean isPlaying() {
return mCallbacks.onIsPlaying();
}
+ /**
+ * Retrieve amount, in percentage (0-100), that the media stream has been buffered
+ * on to the local device. Return 100 if the stream is always local.
+ *
+ * @deprecated Use {@link PlaybackStateCompat#getBufferedPosition} and
+ * {@link MediaMetadataCompat#METADATA_KEY_DURATION}.
+ */
+ @Deprecated
@Override
public int getBufferPercentage() {
return mCallbacks.onGetBufferPercentage();
}
/**
- * Retrieves the flags for the media transport control buttons that this transport supports.
+ * Retrieve the flags for the media transport control buttons that this transport supports.
* Result is a combination of the following flags:
* {@link #FLAG_KEY_MEDIA_PREVIOUS},
* {@link #FLAG_KEY_MEDIA_REWIND},
@@ -329,7 +465,10 @@
* {@link #FLAG_KEY_MEDIA_STOP},
* {@link #FLAG_KEY_MEDIA_FAST_FORWARD},
* {@link #FLAG_KEY_MEDIA_NEXT}
+ *
+ * @deprecated Use {@link PlaybackStateCompat#getActions}.
*/
+ @Deprecated
@Override
public int getTransportControlFlags() {
return mCallbacks.onGetTransportControlFlags();
@@ -339,7 +478,10 @@
* Optionally call when no longer using the TransportController. Its resources
* will also be automatically cleaned up when your activity/view is detached from
* its window, so you don't normally need to call this explicitly.
+ *
+ * @deprecated Not needed when you use {@link MediaControllerCompat}.
*/
+ @Deprecated
public void destroy() {
mController.destroy();
}
diff --git a/media-compat/java/android/support/v4/media/TransportPerformer.java b/media-compat/java/android/support/v4/media/TransportPerformer.java
index 2d3afc9..79e4869 100644
--- a/media-compat/java/android/support/v4/media/TransportPerformer.java
+++ b/media-compat/java/android/support/v4/media/TransportPerformer.java
@@ -17,6 +17,8 @@
package android.support.v4.media;
import android.os.SystemClock;
+import android.support.v4.media.session.MediaSessionCompat;
+import android.support.v4.media.session.PlaybackStateCompat.Builder;
import android.view.KeyEvent;
/**
@@ -25,45 +27,77 @@
* requests may either come from key events dispatched directly to your UI, or
* events sent over a media button event receiver that this class keeps active
* while your window is in focus.
+ *
+ * @deprecated Use {@link MediaSessionCompat}.
*/
+@Deprecated
public abstract class TransportPerformer {
/**
+ * @deprecated Use {@link MediaSessionCompat}.
+ */
+ @Deprecated
+ public TransportPerformer() {
+ }
+
+ /**
* Request to start playback on the media, resuming from whatever current state
* (position etc) it is in.
+ *
+ * @deprecated Use {@link MediaSessionCompat.Callback#onPlay}.
*/
+ @Deprecated
public abstract void onStart();
/**
* Request to pause playback of the media, staying at the current playback position
* and other state so a later call to {@link #onStart()} will resume at the same place.
+ *
+ * @deprecated Use {@link MediaSessionCompat.Callback#onPause}.
*/
+ @Deprecated
public abstract void onPause();
/**
* Request to completely stop playback of the media, clearing whatever state the
* player thinks is appropriate.
+ *
+ * @deprecated Use {@link MediaSessionCompat.Callback#onStop}.
*/
+ @Deprecated
public abstract void onStop();
/**
* Request to return the duration of the current media, in milliseconds.
+ *
+ * @deprecated Use {@link MediaMetadataCompat.Builder#putLong} with
+ * {@link MediaMetadataCompat#METADATA_KEY_DURATION}.
*/
+ @Deprecated
public abstract long onGetDuration();
/**
* Request to return the current playback position, in milliseconds.
+ *
+ * @deprecated Use {@link Builder#setState(int, long, float)}.
*/
+ @Deprecated
public abstract long onGetCurrentPosition();
/**
* Request to move the current playback position.
* @param pos New position to move to, in milliseconds.
+ *
+ * @deprecated Use {@link MediaSessionCompat.Callback#onSeekTo}.
*/
+ @Deprecated
public abstract void onSeekTo(long pos);
/**
* Request to find out whether the player is currently playing its media.
+ *
+ * @deprecated Use {@link Builder#setState(int, long, float)}.
*/
+ @Deprecated
public abstract boolean onIsPlaying();
/**
@@ -71,7 +105,10 @@
* @return Return a percentage (0-100) indicating how much of the total data
* has been buffered. The default implementation returns 100, meaning the content
* is always on the local device.
+ *
+ * @deprecated Use {@link Builder#setBufferedPosition}.
*/
+ @Deprecated
public int onGetBufferPercentage() {
return 100;
}
@@ -93,7 +130,10 @@
* {@link TransportMediator#FLAG_KEY_MEDIA_PLAY_PAUSE},
* {@link TransportMediator#FLAG_KEY_MEDIA_PAUSE}, and
* {@link TransportMediator#FLAG_KEY_MEDIA_STOP}</p>
+ *
+ * @deprecated Use {@link Builder#setActions}.
*/
+ @Deprecated
public int onGetTransportControlFlags() {
return TransportMediator.FLAG_KEY_MEDIA_PLAY
| TransportMediator.FLAG_KEY_MEDIA_PLAY_PAUSE
@@ -122,7 +162,10 @@
* continues on to its default key handling (which for media keys means
* being delivered to the current media remote control, which should
* be us).
+ *
+ * @deprecated Use {@link MediaSessionCompat.Callback#onMediaButtonEvent}.
*/
+ @Deprecated
public boolean onMediaButtonDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case TransportMediator.KEYCODE_MEDIA_PLAY:
@@ -159,7 +202,10 @@
* continues on to its default key handling (which for media keys means
* being delivered to the current media remote control, which should
* be us).
+ *
+ * @deprecated Use {@link MediaSessionCompat.Callback#onMediaButtonEvent}.
*/
+ @Deprecated
public boolean onMediaButtonUp(int keyCode, KeyEvent event) {
return true;
}
@@ -183,7 +229,10 @@
* OnAudioFocusChangeListener.onAudioFocusChange}. The default implementation will
* deliver a {@link KeyEvent#KEYCODE_MEDIA_STOP}
* when receiving {@link android.media.AudioManager#AUDIOFOCUS_LOSS}.
+ *
+ * @deprecated You must implement your own audio focus handler.
*/
+ @Deprecated
public void onAudioFocusChange(int focusChange) {
int keyCode = 0;
switch (focusChange) {
diff --git a/media-compat/java/android/support/v4/media/TransportStateListener.java b/media-compat/java/android/support/v4/media/TransportStateListener.java
index 384cca2..554983e 100644
--- a/media-compat/java/android/support/v4/media/TransportStateListener.java
+++ b/media-compat/java/android/support/v4/media/TransportStateListener.java
@@ -16,16 +16,31 @@
package android.support.v4.media;
+import android.support.v4.media.session.MediaControllerCompat.Callback;
+
/**
* A listener for playback changes that can be registered with
* {@link TransportController}.
+ *
+ * @deprecated Use {@link Callback}.
*/
+@Deprecated
public class TransportStateListener {
/**
+ * @deprecated Use {@link Callback}.
+ */
+ @Deprecated
+ public TransportStateListener() {
+ }
+
+ /**
* The play state of the transport changed. Use
* {@link android.support.v4.media.TransportController#isPlaying()
* TransportController.isPlaying()} to determine the new state.
+ *
+ * @deprecated Use {@link Callback#onPlaybackStateChanged}.
*/
+ @Deprecated
public void onPlayingChanged(TransportController controller) {
}
@@ -33,7 +48,10 @@
* The available controls of the transport changed. Use
* {@link TransportController#getTransportControlFlags()}
* TransportController.getTransportControlFlags()} to determine the new state.
+ *
+ * @deprecated Use {@link Callback#onPlaybackStateChanged}.
*/
+ @Deprecated
public void onTransportControlsChanged(TransportController controller) {
}
}
diff --git a/media-compat/java/android/support/v4/media/session/IMediaSession.aidl b/media-compat/java/android/support/v4/media/session/IMediaSession.aidl
index 4f2e38a..969b803 100644
--- a/media-compat/java/android/support/v4/media/session/IMediaSession.aidl
+++ b/media-compat/java/android/support/v4/media/session/IMediaSession.aidl
@@ -17,6 +17,7 @@
import android.app.PendingIntent;
import android.content.Intent;
+import android.support.v4.media.MediaDescriptionCompat;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.RatingCompat;
import android.support.v4.media.session.IMediaControllerCallback;
@@ -33,7 +34,7 @@
* @hide
*/
interface IMediaSession {
- // Next ID: 40
+ // Next ID: 44
void sendCommand(String command, in Bundle args, in MediaSessionCompat.ResultReceiverWrapper cb) = 0;
boolean sendMediaButton(in KeyEvent mediaButton) = 1;
void registerCallbackListener(in IMediaControllerCallback cb) = 2;
@@ -54,6 +55,10 @@
int getRatingType() = 31;
int getRepeatMode() = 36;
boolean isShuffleModeEnabled() = 37;
+ void addQueueItem(in MediaDescriptionCompat description) = 40;
+ void addQueueItemAt(in MediaDescriptionCompat description, int index) = 41;
+ void removeQueueItem(in MediaDescriptionCompat description) = 42;
+ void removeQueueItemAt(int index) = 43;
// These commands are for the TransportControls
void prepare() = 32;
diff --git a/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java b/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java
index 3e0bf4d..2783d3b 100644
--- a/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java
+++ b/media-compat/java/android/support/v4/media/session/MediaControllerCompat.java
@@ -28,8 +28,10 @@
import android.os.Message;
import android.os.RemoteException;
import android.os.ResultReceiver;
+import android.support.annotation.VisibleForTesting;
import android.support.v4.app.BundleCompat;
import android.support.v4.app.SupportActivity;
+import android.support.v4.media.MediaDescriptionCompat;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.RatingCompat;
import android.support.v4.media.VolumeProviderCompat;
@@ -62,6 +64,19 @@
static final String COMMAND_GET_EXTRA_BINDER =
"android.support.v4.media.session.command.GET_EXTRA_BINDER";
+ static final String COMMAND_ADD_QUEUE_ITEM =
+ "android.support.v4.media.session.command.ADD_QUEUE_ITEM";
+ static final String COMMAND_ADD_QUEUE_ITEM_AT =
+ "android.support.v4.media.session.command.ADD_QUEUE_ITEM_AT";
+ static final String COMMAND_REMOVE_QUEUE_ITEM =
+ "android.support.v4.media.session.command.REMOVE_QUEUE_ITEM";
+ static final String COMMAND_REMOVE_QUEUE_ITEM_AT =
+ "android.support.v4.media.session.command.REMOVE_QUEUE_ITEM_AT";
+
+ static final String COMMAND_ARGUMENT_MEDIA_DESCRIPTION =
+ "android.support.v4.media.session.command.ARGUMENT_MEDIA_DESCRIPTION";
+ static final String COMMAND_ARGUMENT_INDEX =
+ "android.support.v4.media.session.command.ARGUMENT_INDEX";
private static class MediaControllerExtraData extends SupportActivity.ExtraData {
private final MediaControllerCompat mMediaController;
@@ -129,7 +144,7 @@
return new MediaControllerCompat(activity,
MediaSessionCompat.Token.fromToken(sessionTokenObj));
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getMediaController. " + e);
+ Log.e(TAG, "Dead object in getMediaController.", e);
}
}
return null;
@@ -237,6 +252,62 @@
}
/**
+ * Add a queue item from the given {@code description} at the end of the play queue
+ * of this session. Not all sessions may support this.
+ *
+ * @param description The {@link MediaDescriptionCompat} for creating the
+ * {@link MediaSessionCompat.QueueItem} to be inserted.
+ * @throws UnsupportedOperationException If this session doesn't support this.
+ * @see MediaSessionCompat#FLAG_HANDLES_QUEUE_COMMANDS
+ */
+ public void addQueueItem(MediaDescriptionCompat description) {
+ mImpl.addQueueItem(description);
+ }
+
+ /**
+ * Add a queue item from the given {@code description} at the specified position
+ * in the play queue of this session. Shifts the queue item currently at that position
+ * (if any) and any subsequent queue items to the right (adds one to their indices).
+ * Not all sessions may support this.
+ *
+ * @param description The {@link MediaDescriptionCompat} for creating the
+ * {@link MediaSessionCompat.QueueItem} to be inserted.
+ * @param index The index at which the created {@link MediaSessionCompat.QueueItem}
+ * is to be inserted.
+ * @throws UnsupportedOperationException If this session doesn't support this.
+ * @see MediaSessionCompat#FLAG_HANDLES_QUEUE_COMMANDS
+ */
+ public void addQueueItem(MediaDescriptionCompat description, int index) {
+ mImpl.addQueueItem(description, index);
+ }
+
+ /**
+ * Remove the first occurrence of the specified {@link MediaSessionCompat.QueueItem}
+ * with the given {@link MediaDescriptionCompat description} in the play queue of the
+ * associated session. Not all sessions may support this.
+ *
+ * @param description The {@link MediaDescriptionCompat} for denoting the
+ * {@link MediaSessionCompat.QueueItem} to be removed.
+ * @throws UnsupportedOperationException If this session doesn't support this.
+ * @see MediaSessionCompat#FLAG_HANDLES_QUEUE_COMMANDS
+ */
+ public void removeQueueItem(MediaDescriptionCompat description) {
+ mImpl.removeQueueItem(description);
+ }
+
+ /**
+ * Remove an queue item at the specified position in the play queue
+ * of this session. Not all sessions may support this.
+ *
+ * @param index The index of the element to be removed.
+ * @throws UnsupportedOperationException If this session doesn't support this.
+ * @see MediaSessionCompat#FLAG_HANDLES_QUEUE_COMMANDS
+ */
+ public void removeQueueItemAt(int index) {
+ mImpl.removeQueueItemAt(index);
+ }
+
+ /**
* Get the queue title for this session.
*/
public CharSequence getQueueTitle() {
@@ -423,6 +494,15 @@
return mImpl.getPackageName();
}
+ @VisibleForTesting
+ boolean isExtraBinderReady() {
+ if (mImpl instanceof MediaControllerImplApi21) {
+ return ((MediaControllerImplApi21) mImpl).mExtraBinder != null;
+ } else {
+ return false;
+ }
+ }
+
/**
* Gets the underlying framework
* {@link android.media.session.MediaController} object.
@@ -580,7 +660,7 @@
@Override
public void onPlaybackStateChanged(Object stateObj) {
- if (mHasExtraCallback && android.os.Build.VERSION.SDK_INT < 22) {
+ if (mHasExtraCallback) {
// Ignore. ExtraCallback will handle this.
} else {
Callback.this.onPlaybackStateChanged(
@@ -1033,6 +1113,10 @@
MediaMetadataCompat getMetadata();
List<MediaSessionCompat.QueueItem> getQueue();
+ void addQueueItem(MediaDescriptionCompat description);
+ void addQueueItem(MediaDescriptionCompat description, int index);
+ void removeQueueItem(MediaDescriptionCompat description);
+ void removeQueueItemAt(int index);
CharSequence getQueueTitle();
Bundle getExtras();
int getRatingType();
@@ -1071,7 +1155,7 @@
callback.setHandler(handler);
callback.mRegistered = true;
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in registerCallback. " + e);
+ Log.e(TAG, "Dead object in registerCallback.", e);
callback.onSessionDestroyed();
}
}
@@ -1087,7 +1171,7 @@
mBinder.asBinder().unlinkToDeath(callback, 0);
callback.mRegistered = false;
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in unregisterCallback. " + e);
+ Log.e(TAG, "Dead object in unregisterCallback.", e);
}
}
@@ -1099,7 +1183,7 @@
try {
mBinder.sendMediaButton(event);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in dispatchMediaButtonEvent. " + e);
+ Log.e(TAG, "Dead object in dispatchMediaButtonEvent.", e);
}
return false;
}
@@ -1118,7 +1202,7 @@
try {
return mBinder.getPlaybackState();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getPlaybackState. " + e);
+ Log.e(TAG, "Dead object in getPlaybackState.", e);
}
return null;
}
@@ -1128,7 +1212,7 @@
try {
return mBinder.getMetadata();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getMetadata. " + e);
+ Log.e(TAG, "Dead object in getMetadata.", e);
}
return null;
}
@@ -1138,17 +1222,73 @@
try {
return mBinder.getQueue();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getQueue. " + e);
+ Log.e(TAG, "Dead object in getQueue.", e);
}
return null;
}
@Override
+ public void addQueueItem(MediaDescriptionCompat description) {
+ try {
+ long flags = mBinder.getFlags();
+ if ((flags & MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS) == 0) {
+ throw new UnsupportedOperationException(
+ "This session doesn't support queue management operations");
+ }
+ mBinder.addQueueItem(description);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in addQueueItem.", e);
+ }
+ }
+
+ @Override
+ public void addQueueItem(MediaDescriptionCompat description, int index) {
+ try {
+ long flags = mBinder.getFlags();
+ if ((flags & MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS) == 0) {
+ throw new UnsupportedOperationException(
+ "This session doesn't support queue management operations");
+ }
+ mBinder.addQueueItemAt(description, index);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in addQueueItemAt.", e);
+ }
+ }
+
+ @Override
+ public void removeQueueItem(MediaDescriptionCompat description) {
+ try {
+ long flags = mBinder.getFlags();
+ if ((flags & MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS) == 0) {
+ throw new UnsupportedOperationException(
+ "This session doesn't support queue management operations");
+ }
+ mBinder.removeQueueItem(description);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in removeQueueItem.", e);
+ }
+ }
+
+ @Override
+ public void removeQueueItemAt(int index) {
+ try {
+ long flags = mBinder.getFlags();
+ if ((flags & MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS) == 0) {
+ throw new UnsupportedOperationException(
+ "This session doesn't support queue management operations");
+ }
+ mBinder.removeQueueItemAt(index);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in removeQueueItemAt.", e);
+ }
+ }
+
+ @Override
public CharSequence getQueueTitle() {
try {
return mBinder.getQueueTitle();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getQueueTitle. " + e);
+ Log.e(TAG, "Dead object in getQueueTitle.", e);
}
return null;
}
@@ -1158,7 +1298,7 @@
try {
return mBinder.getExtras();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getExtras. " + e);
+ Log.e(TAG, "Dead object in getExtras.", e);
}
return null;
}
@@ -1168,7 +1308,7 @@
try {
return mBinder.getRatingType();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getRatingType. " + e);
+ Log.e(TAG, "Dead object in getRatingType.", e);
}
return 0;
}
@@ -1178,7 +1318,7 @@
try {
return mBinder.getRepeatMode();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getRepeatMode. " + e);
+ Log.e(TAG, "Dead object in getRepeatMode.", e);
}
return 0;
}
@@ -1188,7 +1328,7 @@
try {
return mBinder.isShuffleModeEnabled();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in isShuffleModeEnabled. " + e);
+ Log.e(TAG, "Dead object in isShuffleModeEnabled.", e);
}
return false;
}
@@ -1198,7 +1338,7 @@
try {
return mBinder.getFlags();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getFlags. " + e);
+ Log.e(TAG, "Dead object in getFlags.", e);
}
return 0;
}
@@ -1211,7 +1351,7 @@
info.controlType, info.maxVolume, info.currentVolume);
return pi;
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getPlaybackInfo. " + e);
+ Log.e(TAG, "Dead object in getPlaybackInfo.", e);
}
return null;
}
@@ -1221,7 +1361,7 @@
try {
return mBinder.getLaunchPendingIntent();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getSessionActivity. " + e);
+ Log.e(TAG, "Dead object in getSessionActivity.", e);
}
return null;
}
@@ -1231,7 +1371,7 @@
try {
mBinder.setVolumeTo(value, flags, null);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in setVolumeTo. " + e);
+ Log.e(TAG, "Dead object in setVolumeTo.", e);
}
}
@@ -1240,7 +1380,7 @@
try {
mBinder.adjustVolume(direction, flags, null);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in adjustVolume. " + e);
+ Log.e(TAG, "Dead object in adjustVolume.", e);
}
}
@@ -1250,7 +1390,7 @@
mBinder.sendCommand(command, params,
new MediaSessionCompat.ResultReceiverWrapper(cb));
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in sendCommand. " + e);
+ Log.e(TAG, "Dead object in sendCommand.", e);
}
}
@@ -1259,7 +1399,7 @@
try {
return mBinder.getPackageName();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getPackageName. " + e);
+ Log.e(TAG, "Dead object in getPackageName.", e);
}
return null;
}
@@ -1282,7 +1422,7 @@
try {
mBinder.prepare();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in prepare. " + e);
+ Log.e(TAG, "Dead object in prepare.", e);
}
}
@@ -1291,7 +1431,7 @@
try {
mBinder.prepareFromMediaId(mediaId, extras);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in prepareFromMediaId. " + e);
+ Log.e(TAG, "Dead object in prepareFromMediaId.", e);
}
}
@@ -1300,7 +1440,7 @@
try {
mBinder.prepareFromSearch(query, extras);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in prepareFromSearch. " + e);
+ Log.e(TAG, "Dead object in prepareFromSearch.", e);
}
}
@@ -1309,7 +1449,7 @@
try {
mBinder.prepareFromUri(uri, extras);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in prepareFromUri. " + e);
+ Log.e(TAG, "Dead object in prepareFromUri.", e);
}
}
@@ -1318,7 +1458,7 @@
try {
mBinder.play();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in play. " + e);
+ Log.e(TAG, "Dead object in play.", e);
}
}
@@ -1327,7 +1467,7 @@
try {
mBinder.playFromMediaId(mediaId, extras);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in playFromMediaId. " + e);
+ Log.e(TAG, "Dead object in playFromMediaId.", e);
}
}
@@ -1336,7 +1476,7 @@
try {
mBinder.playFromSearch(query, extras);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in playFromSearch. " + e);
+ Log.e(TAG, "Dead object in playFromSearch.", e);
}
}
@@ -1345,7 +1485,7 @@
try {
mBinder.playFromUri(uri, extras);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in playFromUri. " + e);
+ Log.e(TAG, "Dead object in playFromUri.", e);
}
}
@@ -1354,7 +1494,7 @@
try {
mBinder.skipToQueueItem(id);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in skipToQueueItem. " + e);
+ Log.e(TAG, "Dead object in skipToQueueItem.", e);
}
}
@@ -1363,7 +1503,7 @@
try {
mBinder.pause();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in pause. " + e);
+ Log.e(TAG, "Dead object in pause.", e);
}
}
@@ -1372,7 +1512,7 @@
try {
mBinder.stop();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in stop. " + e);
+ Log.e(TAG, "Dead object in stop.", e);
}
}
@@ -1381,7 +1521,7 @@
try {
mBinder.seekTo(pos);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in seekTo. " + e);
+ Log.e(TAG, "Dead object in seekTo.", e);
}
}
@@ -1390,7 +1530,7 @@
try {
mBinder.fastForward();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in fastForward. " + e);
+ Log.e(TAG, "Dead object in fastForward.", e);
}
}
@@ -1399,7 +1539,7 @@
try {
mBinder.next();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in skipToNext. " + e);
+ Log.e(TAG, "Dead object in skipToNext.", e);
}
}
@@ -1408,7 +1548,7 @@
try {
mBinder.rewind();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in rewind. " + e);
+ Log.e(TAG, "Dead object in rewind.", e);
}
}
@@ -1417,7 +1557,7 @@
try {
mBinder.previous();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in skipToPrevious. " + e);
+ Log.e(TAG, "Dead object in skipToPrevious.", e);
}
}
@@ -1426,7 +1566,7 @@
try {
mBinder.rate(rating);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in setRating. " + e);
+ Log.e(TAG, "Dead object in setRating.", e);
}
}
@@ -1435,7 +1575,7 @@
try {
mBinder.setRepeatMode(repeatMode);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in setRepeatMode. " + e);
+ Log.e(TAG, "Dead object in setRepeatMode.", e);
}
}
@@ -1444,7 +1584,7 @@
try {
mBinder.setShuffleModeEnabled(enabled);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in setShuffleModeEnabled. " + e);
+ Log.e(TAG, "Dead object in setShuffleModeEnabled.", e);
}
}
@@ -1458,7 +1598,7 @@
try {
mBinder.sendCustomAction(action, args);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in sendCustomAction. " + e);
+ Log.e(TAG, "Dead object in sendCustomAction.", e);
}
}
}
@@ -1470,7 +1610,7 @@
// after API 21.
private IMediaSession mExtraBinder;
private HashMap<Callback, ExtraCallback> mCallbackMap = new HashMap<>();
- private List<Callback> mPendingCallbacks;
+ private List<Callback> mPendingCallbacks = new ArrayList<>();
public MediaControllerImplApi21(Context context, MediaSessionCompat session) {
mControllerObj = MediaControllerCompatApi21.fromToken(context,
@@ -1498,14 +1638,13 @@
try {
mExtraBinder.registerCallbackListener(extraCallback);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in registerCallback. " + e);
+ Log.e(TAG, "Dead object in registerCallback.", e);
}
} else {
- if (mPendingCallbacks == null) {
- mPendingCallbacks = new ArrayList<>();
- }
callback.setHandler(handler);
- mPendingCallbacks.add(callback);
+ synchronized (mPendingCallbacks) {
+ mPendingCallbacks.add(callback);
+ }
}
}
@@ -1519,13 +1658,12 @@
mExtraBinder.unregisterCallbackListener(extraCallback);
}
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in unregisterCallback. " + e);
+ Log.e(TAG, "Dead object in unregisterCallback.", e);
}
} else {
- if (mPendingCallbacks == null) {
- mPendingCallbacks = new ArrayList<>();
+ synchronized (mPendingCallbacks) {
+ mPendingCallbacks.remove(callback);
}
- mPendingCallbacks.remove(callback);
}
}
@@ -1542,11 +1680,11 @@
@Override
public PlaybackStateCompat getPlaybackState() {
- if (android.os.Build.VERSION.SDK_INT < 22 && mExtraBinder != null) {
+ if (mExtraBinder != null) {
try {
return mExtraBinder.getPlaybackState();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getPlaybackState. " + e);
+ Log.e(TAG, "Dead object in getPlaybackState.", e);
}
}
Object stateObj = MediaControllerCompatApi21.getPlaybackState(mControllerObj);
@@ -1567,6 +1705,35 @@
}
@Override
+ public void addQueueItem(MediaDescriptionCompat description) {
+ Bundle params = new Bundle();
+ params.putParcelable(COMMAND_ARGUMENT_MEDIA_DESCRIPTION, description);
+ sendCommand(COMMAND_ADD_QUEUE_ITEM, params, null);
+ }
+
+ @Override
+ public void addQueueItem(MediaDescriptionCompat description, int index) {
+ Bundle params = new Bundle();
+ params.putParcelable(COMMAND_ARGUMENT_MEDIA_DESCRIPTION, description);
+ params.putInt(COMMAND_ARGUMENT_INDEX, index);
+ sendCommand(COMMAND_ADD_QUEUE_ITEM_AT, params, null);
+ }
+
+ @Override
+ public void removeQueueItem(MediaDescriptionCompat description) {
+ Bundle params = new Bundle();
+ params.putParcelable(COMMAND_ARGUMENT_MEDIA_DESCRIPTION, description);
+ sendCommand(COMMAND_REMOVE_QUEUE_ITEM, params, null);
+ }
+
+ @Override
+ public void removeQueueItemAt(int index) {
+ Bundle params = new Bundle();
+ params.putInt(COMMAND_ARGUMENT_INDEX, index);
+ sendCommand(COMMAND_REMOVE_QUEUE_ITEM_AT, params, null);
+ }
+
+ @Override
public CharSequence getQueueTitle() {
return MediaControllerCompatApi21.getQueueTitle(mControllerObj);
}
@@ -1582,7 +1749,7 @@
try {
return mExtraBinder.getRatingType();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getRatingType. " + e);
+ Log.e(TAG, "Dead object in getRatingType.", e);
}
}
return MediaControllerCompatApi21.getRatingType(mControllerObj);
@@ -1594,7 +1761,7 @@
try {
return mExtraBinder.getRepeatMode();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in getRepeatMode. " + e);
+ Log.e(TAG, "Dead object in getRepeatMode.", e);
}
}
return PlaybackStateCompat.REPEAT_MODE_NONE;
@@ -1606,7 +1773,7 @@
try {
return mExtraBinder.isShuffleModeEnabled();
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in isShuffleModeEnabled. " + e);
+ Log.e(TAG, "Dead object in isShuffleModeEnabled.", e);
}
}
return false;
@@ -1665,21 +1832,23 @@
}
private void processPendingCallbacks() {
- if (mPendingCallbacks == null || mExtraBinder == null) {
+ if (mExtraBinder == null) {
return;
}
- for (Callback callback : mPendingCallbacks) {
- ExtraCallback extraCallback = new ExtraCallback(callback);
- mCallbackMap.put(callback, extraCallback);
- callback.mHasExtraCallback = true;
- try {
- mExtraBinder.registerCallbackListener(extraCallback);
- } catch (RemoteException e) {
- Log.e(TAG, "Dead object in registerCallback. " + e);
- break;
+ synchronized (mPendingCallbacks) {
+ for (Callback callback : mPendingCallbacks) {
+ ExtraCallback extraCallback = new ExtraCallback(callback);
+ mCallbackMap.put(callback, extraCallback);
+ callback.mHasExtraCallback = true;
+ try {
+ mExtraBinder.registerCallbackListener(extraCallback);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Dead object in registerCallback.", e);
+ break;
+ }
}
+ mPendingCallbacks.clear();
}
- mPendingCallbacks = null;
}
private static class ExtraBinderRequestResultReceiver extends ResultReceiver {
diff --git a/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java b/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java
index c560c1b..01ac807 100644
--- a/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java
+++ b/media-compat/java/android/support/v4/media/session/MediaSessionCompat.java
@@ -94,7 +94,10 @@
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
- @IntDef(flag=true, value={FLAG_HANDLES_MEDIA_BUTTONS, FLAG_HANDLES_TRANSPORT_CONTROLS})
+ @IntDef(flag=true, value={
+ FLAG_HANDLES_MEDIA_BUTTONS,
+ FLAG_HANDLES_TRANSPORT_CONTROLS,
+ FLAG_HANDLES_QUEUE_COMMANDS })
@Retention(RetentionPolicy.SOURCE)
public @interface SessionFlags {}
@@ -111,6 +114,12 @@
public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 1 << 1;
/**
+ * Set this flag on the session to indicate that it handles queue
+ * management commands through its {@link Callback}.
+ */
+ public static final int FLAG_HANDLES_QUEUE_COMMANDS = 1 << 2;
+
+ /**
* Custom action to invoke playFromUri() for the forward compatibility.
*/
static final String ACTION_PLAY_FROM_URI =
@@ -879,6 +888,48 @@
public void onCustomAction(String action, Bundle extras) {
}
+ /**
+ * Called when a {@link MediaControllerCompat} wants to add a {@link QueueItem}
+ * with the given {@link MediaDescriptionCompat description} at the end of the play queue.
+ *
+ * @param description The {@link MediaDescriptionCompat} for creating the {@link QueueItem}
+ * to be inserted.
+ */
+ public void onAddQueueItem(MediaDescriptionCompat description) {
+ }
+
+ /**
+ * Called when a {@link MediaControllerCompat} wants to add a {@link QueueItem}
+ * with the given {@link MediaDescriptionCompat description} at the specified position
+ * in the play queue.
+ *
+ * @param description The {@link MediaDescriptionCompat} for creating the {@link QueueItem}
+ * to be inserted.
+ * @param index The index at which the created {@link QueueItem} is to be inserted.
+ */
+ public void onAddQueueItem(MediaDescriptionCompat description, int index) {
+ }
+
+ /**
+ * Called when a {@link MediaControllerCompat} wants to remove the first occurrence of the
+ * specified {@link QueueItem} with the given {@link MediaDescriptionCompat description}
+ * in the play queue.
+ *
+ * @param description The {@link MediaDescriptionCompat} for denoting the {@link QueueItem}
+ * to be removed.
+ */
+ public void onRemoveQueueItem(MediaDescriptionCompat description) {
+ }
+
+ /**
+ * Called when a {@link MediaControllerCompat} wants to remove a {@link QueueItem} at the
+ * specified position in the play queue.
+ *
+ * @param index The index of the element to be removed.
+ */
+ public void onRemoveQueueItemAt(int index) {
+ }
+
private class StubApi21 implements MediaSessionCompatApi21.Callback {
StubApi21() {
@@ -893,6 +944,25 @@
BundleCompat.putBinder(result, EXTRA_BINDER, impl.getExtraSessionBinder());
cb.send(0, result);
}
+ } else if (command.equals(MediaControllerCompat.COMMAND_ADD_QUEUE_ITEM)) {
+ extras.setClassLoader(MediaDescriptionCompat.class.getClassLoader());
+ Callback.this.onAddQueueItem(
+ (MediaDescriptionCompat) extras.getParcelable(
+ MediaControllerCompat.COMMAND_ARGUMENT_MEDIA_DESCRIPTION));
+ } else if (command.equals(MediaControllerCompat.COMMAND_ADD_QUEUE_ITEM_AT)) {
+ extras.setClassLoader(MediaDescriptionCompat.class.getClassLoader());
+ Callback.this.onAddQueueItem(
+ (MediaDescriptionCompat) extras.getParcelable(
+ MediaControllerCompat.COMMAND_ARGUMENT_MEDIA_DESCRIPTION),
+ extras.getInt(MediaControllerCompat.COMMAND_ARGUMENT_INDEX));
+ } else if (command.equals(MediaControllerCompat.COMMAND_REMOVE_QUEUE_ITEM)) {
+ extras.setClassLoader(MediaDescriptionCompat.class.getClassLoader());
+ Callback.this.onRemoveQueueItem(
+ (MediaDescriptionCompat) extras.getParcelable(
+ MediaControllerCompat.COMMAND_ARGUMENT_MEDIA_DESCRIPTION));
+ } else if (command.equals(MediaControllerCompat.COMMAND_REMOVE_QUEUE_ITEM_AT)) {
+ Callback.this.onRemoveQueueItemAt(
+ extras.getInt(MediaControllerCompat.COMMAND_ARGUMENT_INDEX));
} else {
Callback.this.onCommand(command, extras, cb);
}
@@ -1506,10 +1576,22 @@
postToHandler(what, null);
}
+ void postToHandler(int what, int arg1) {
+ postToHandler(what, null, arg1);
+ }
+
void postToHandler(int what, Object obj) {
postToHandler(what, obj, null);
}
+ void postToHandler(int what, Object obj, int arg1) {
+ synchronized (mLock) {
+ if (mHandler != null) {
+ mHandler.post(what, obj, arg1);
+ }
+ }
+ }
+
void postToHandler(int what, Object obj, Bundle extras) {
synchronized (mLock) {
if (mHandler != null) {
@@ -2185,6 +2267,26 @@
}
@Override
+ public void addQueueItem(MediaDescriptionCompat description) {
+ postToHandler(MessageHandler.MSG_ADD_QUEUE_ITEM, description);
+ }
+
+ @Override
+ public void addQueueItemAt(MediaDescriptionCompat description, int index) {
+ postToHandler(MessageHandler.MSG_ADD_QUEUE_ITEM_AT, description, index);
+ }
+
+ @Override
+ public void removeQueueItem(MediaDescriptionCompat description) {
+ postToHandler(MessageHandler.MSG_REMOVE_QUEUE_ITEM, description);
+ }
+
+ @Override
+ public void removeQueueItemAt(int index) {
+ postToHandler(MessageHandler.MSG_REMOVE_QUEUE_ITEM_AT, index);
+ }
+
+ @Override
public CharSequence getQueueTitle() {
return mQueueTitle;
}
@@ -2257,6 +2359,10 @@
private static final int MSG_SET_VOLUME = 22;
private static final int MSG_SET_REPEAT_MODE = 23;
private static final int MSG_SET_SHUFFLE_MODE_ENABLED = 24;
+ private static final int MSG_ADD_QUEUE_ITEM = 25;
+ private static final int MSG_ADD_QUEUE_ITEM_AT = 26;
+ private static final int MSG_REMOVE_QUEUE_ITEM = 27;
+ private static final int MSG_REMOVE_QUEUE_ITEM_AT = 28;
// KeyEvent constants only available on API 11+
private static final int KEYCODE_MEDIA_PAUSE = 127;
@@ -2358,14 +2464,26 @@
case MSG_CUSTOM_ACTION:
cb.onCustomAction((String) msg.obj, msg.getData());
break;
+ case MSG_ADD_QUEUE_ITEM:
+ cb.onAddQueueItem((MediaDescriptionCompat) msg.obj);
+ break;
+ case MSG_ADD_QUEUE_ITEM_AT:
+ cb.onAddQueueItem((MediaDescriptionCompat) msg.obj, msg.arg1);
+ break;
+ case MSG_REMOVE_QUEUE_ITEM:
+ cb.onRemoveQueueItem((MediaDescriptionCompat) msg.obj);
+ break;
+ case MSG_REMOVE_QUEUE_ITEM_AT:
+ cb.onRemoveQueueItemAt(msg.arg1);
+ break;
case MSG_ADJUST_VOLUME:
- adjustVolume((int) msg.obj, 0);
+ adjustVolume(msg.arg1, 0);
break;
case MSG_SET_VOLUME:
- setVolumeTo((int) msg.obj, 0);
+ setVolumeTo(msg.arg1, 0);
break;
case MSG_SET_REPEAT_MODE:
- cb.onSetRepeatMode((int) msg.obj);
+ cb.onSetRepeatMode(msg.arg1);
break;
case MSG_SET_SHUFFLE_MODE_ENABLED:
cb.onSetShuffleModeEnabled((boolean) msg.obj);
@@ -2523,18 +2641,16 @@
@Override
public void setPlaybackState(PlaybackStateCompat state) {
- if (android.os.Build.VERSION.SDK_INT < 22) {
- mPlaybackState = state;
- int size = mExtraControllerCallbacks.beginBroadcast();
- for (int i = size - 1; i >= 0; i--) {
- IMediaControllerCallback cb = mExtraControllerCallbacks.getBroadcastItem(i);
- try {
- cb.onPlaybackStateChanged(state);
- } catch (RemoteException e) {
- }
+ mPlaybackState = state;
+ int size = mExtraControllerCallbacks.beginBroadcast();
+ for (int i = size - 1; i >= 0; i--) {
+ IMediaControllerCallback cb = mExtraControllerCallbacks.getBroadcastItem(i);
+ try {
+ cb.onPlaybackStateChanged(state);
+ } catch (RemoteException e) {
}
- mExtraControllerCallbacks.finishBroadcast();
}
+ mExtraControllerCallbacks.finishBroadcast();
MediaSessionCompatApi21.setPlaybackState(mSessionObj,
state == null ? null : state.getPlaybackState());
}
@@ -2850,6 +2966,30 @@
}
@Override
+ public void addQueueItem(MediaDescriptionCompat descriptionCompat) {
+ // Will not be called.
+ throw new AssertionError();
+ }
+
+ @Override
+ public void addQueueItemAt(MediaDescriptionCompat descriptionCompat, int index) {
+ // Will not be called.
+ throw new AssertionError();
+ }
+
+ @Override
+ public void removeQueueItem(MediaDescriptionCompat description) {
+ // Will not be called.
+ throw new AssertionError();
+ }
+
+ @Override
+ public void removeQueueItemAt(int index) {
+ // Will not be called.
+ throw new AssertionError();
+ }
+
+ @Override
public CharSequence getQueueTitle() {
// Will not be called.
throw new AssertionError();
diff --git a/media-compat/tests/src/android/support/v4/media/MediaBrowserCompatTest.java b/media-compat/tests/src/android/support/v4/media/MediaBrowserCompatTest.java
index 6a997bf..fd87a76 100644
--- a/media-compat/tests/src/android/support/v4/media/MediaBrowserCompatTest.java
+++ b/media-compat/tests/src/android/support/v4/media/MediaBrowserCompatTest.java
@@ -19,6 +19,7 @@
import static android.support.test.InstrumentationRegistry.getInstrumentation;
import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNull;
import static org.junit.Assert.fail;
@@ -388,9 +389,8 @@
}
}
- // TODO(hdmoon): Uncomment after fixing failing tests. (Fails on API >= 24)
- // @Test
- // @SmallTest
+ @Test
+ @SmallTest
public void testGetItem() {
resetCallbacks();
createMediaBrowser(TEST_BROWSER_SERVICE);
@@ -407,14 +407,14 @@
mItemCallback.mLastMediaItem.getMediaId());
}
- // TODO(hdmoon): Uncomment after fixing failing tests. (Fails on Android O)
- // @Test
- // @SmallTest
- public void testGetItemFailure() {
+ @Test
+ @SmallTest
+ public void testGetItemWhenOnLoadItemIsNotImplemented() {
resetCallbacks();
createMediaBrowser(TEST_BROWSER_SERVICE);
connectMediaBrowserService();
- mMediaBrowser.getItem(StubMediaBrowserServiceCompat.MEDIA_ID_INVALID, mItemCallback);
+ mMediaBrowser.getItem(StubMediaBrowserServiceCompat.MEDIA_ID_ON_LOAD_ITEM_NOT_IMPLEMENTED,
+ mItemCallback);
new PollingCheck(TIME_OUT_MS) {
@Override
protected boolean check() {
@@ -422,7 +422,30 @@
}
}.run();
- assertEquals(StubMediaBrowserServiceCompat.MEDIA_ID_INVALID, mItemCallback.mLastErrorId);
+ assertEquals(StubMediaBrowserServiceCompat.MEDIA_ID_ON_LOAD_ITEM_NOT_IMPLEMENTED,
+ mItemCallback.mLastErrorId);
+ }
+
+ @Test
+ @SmallTest
+ public void testGetItemWhenMediaIdIsInvalid() {
+ resetCallbacks();
+ mItemCallback.mLastMediaItem = new MediaItem(new MediaDescriptionCompat.Builder()
+ .setMediaId("dummy_id").build(), MediaItem.FLAG_BROWSABLE);
+
+ createMediaBrowser(TEST_BROWSER_SERVICE);
+ connectMediaBrowserService();
+ mMediaBrowser.getItem(StubMediaBrowserServiceCompat.MEDIA_ID_INVALID, mItemCallback);
+ new PollingCheck(TIME_OUT_MS) {
+ @Override
+ protected boolean check() {
+ // MediaBrowserServiceCompat.onLoadItem implementations must send null result when
+ // the given media id is invalid.
+ return mItemCallback.mLastMediaItem == null;
+ }
+ }.run();
+
+ assertNull(mItemCallback.mLastErrorId);
}
private void createMediaBrowser(final ComponentName component) {
diff --git a/media-compat/tests/src/android/support/v4/media/StubMediaBrowserServiceCompat.java b/media-compat/tests/src/android/support/v4/media/StubMediaBrowserServiceCompat.java
index 3995200..b943594 100644
--- a/media-compat/tests/src/android/support/v4/media/StubMediaBrowserServiceCompat.java
+++ b/media-compat/tests/src/android/support/v4/media/StubMediaBrowserServiceCompat.java
@@ -36,6 +36,8 @@
static final String MEDIA_ID_INVALID = "test_media_id_invalid";
static final String MEDIA_ID_ROOT = "test_media_id_root";
static final String MEDIA_ID_CHILDREN_DELAYED = "test_media_id_children_delayed";
+ static final String MEDIA_ID_ON_LOAD_ITEM_NOT_IMPLEMENTED =
+ "test_media_id_on_load_item_not_implemented";
static final String[] MEDIA_ID_CHILDREN = new String[]{
"test_media_id_children_0", "test_media_id_children_1",
@@ -98,6 +100,11 @@
return;
}
+ if (MEDIA_ID_INVALID.equals(itemId)) {
+ result.sendResult(null);
+ return;
+ }
+
for (String id : MEDIA_ID_CHILDREN) {
if (id.equals(itemId)) {
result.sendResult(createMediaItem(id));
@@ -105,6 +112,7 @@
}
}
+ // Test the case where onLoadItem is not implemented.
super.onLoadItem(itemId, result);
}
diff --git a/media-compat/tests/src/android/support/v4/media/session/MediaControllerCompatTest.java b/media-compat/tests/src/android/support/v4/media/session/MediaControllerCompatTest.java
index fa639a7..2598bef 100644
--- a/media-compat/tests/src/android/support/v4/media/session/MediaControllerCompatTest.java
+++ b/media-compat/tests/src/android/support/v4/media/session/MediaControllerCompatTest.java
@@ -24,12 +24,15 @@
import android.media.AudioManager;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.ResultReceiver;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.media.MediaDescriptionCompat;
+import android.support.v4.media.PollingCheck;
import android.support.v4.media.RatingCompat;
import android.support.v4.media.VolumeProviderCompat;
@@ -63,6 +66,7 @@
public void run() {
mSession = new MediaSessionCompat(getContext(), SESSION_TAG);
mSession.setCallback(mCallback, mHandler);
+ mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS);
mController = mSession.getController();
}
});
@@ -86,6 +90,15 @@
RatingCompat.RATING_NONE, mController.getRatingType());
mSession.setRatingType(RatingCompat.RATING_5_STARS);
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
+ // Wait until the extra binder is ready.
+ new PollingCheck(TIME_OUT_MS) {
+ @Override
+ protected boolean check() {
+ return mController.getRatingType() != RatingCompat.RATING_NONE;
+ }
+ }.run();
+ }
assertEquals(RatingCompat.RATING_5_STARS, mController.getRatingType());
}
@@ -112,6 +125,46 @@
}
}
+ @Test
+ @SmallTest
+ public void testAddRemoveQueueItems() throws Exception {
+ final String mediaId = "media_id";
+ final String mediaTitle = "media_title";
+ MediaDescriptionCompat itemDescription = new MediaDescriptionCompat.Builder()
+ .setMediaId(mediaId).setTitle(mediaTitle).build();
+
+ synchronized (mWaitLock) {
+ mCallback.reset();
+ mController.addQueueItem(itemDescription);
+ mWaitLock.wait(TIME_OUT_MS);
+ assertTrue(mCallback.mOnAddQueueItemCalled);
+ assertEquals(-1, mCallback.mQueueIndex);
+ assertEquals(mediaId, mCallback.mQueueDescription.getMediaId());
+ assertEquals(mediaTitle, mCallback.mQueueDescription.getTitle());
+
+ mCallback.reset();
+ mController.addQueueItem(itemDescription, 0);
+ mWaitLock.wait(TIME_OUT_MS);
+ assertTrue(mCallback.mOnAddQueueItemAtCalled);
+ assertEquals(0, mCallback.mQueueIndex);
+ assertEquals(mediaId, mCallback.mQueueDescription.getMediaId());
+ assertEquals(mediaTitle, mCallback.mQueueDescription.getTitle());
+
+ mCallback.reset();
+ mController.removeQueueItemAt(0);
+ mWaitLock.wait(TIME_OUT_MS);
+ assertTrue(mCallback.mOnRemoveQueueItemAtCalled);
+ assertEquals(0, mCallback.mQueueIndex);
+
+ mCallback.reset();
+ mController.removeQueueItem(itemDescription);
+ mWaitLock.wait(TIME_OUT_MS);
+ assertTrue(mCallback.mOnRemoveQueueItemCalled);
+ assertEquals(mediaId, mCallback.mQueueDescription.getMediaId());
+ assertEquals(mediaTitle, mCallback.mQueueDescription.getTitle());
+ }
+ }
+
// TODO: Uncomment after fixing this test. This test causes an Exception on System UI.
// @Test
// @SmallTest
@@ -343,6 +396,8 @@
private ResultReceiver mCommandCallback;
private int mRepeatMode;
private boolean mShuffleModeEnabled;
+ private int mQueueIndex;
+ private MediaDescriptionCompat mQueueDescription;
private boolean mOnPlayCalled;
private boolean mOnPauseCalled;
@@ -365,6 +420,10 @@
private boolean mOnPrepareFromUriCalled;
private boolean mOnSetRepeatModeCalled;
private boolean mOnSetShuffleModeEnabledCalled;
+ private boolean mOnAddQueueItemCalled;
+ private boolean mOnAddQueueItemAtCalled;
+ private boolean mOnRemoveQueueItemCalled;
+ private boolean mOnRemoveQueueItemAtCalled;
public void reset() {
mSeekPosition = -1;
@@ -379,6 +438,8 @@
mCommandCallback = null;
mShuffleModeEnabled = false;
mRepeatMode = PlaybackStateCompat.REPEAT_MODE_NONE;
+ mQueueIndex = -1;
+ mQueueDescription = null;
mOnPlayCalled = false;
mOnPauseCalled = false;
@@ -401,6 +462,10 @@
mOnPrepareFromUriCalled = false;
mOnSetRepeatModeCalled = false;
mOnSetShuffleModeEnabledCalled = false;
+ mOnAddQueueItemCalled = false;
+ mOnAddQueueItemAtCalled = false;
+ mOnRemoveQueueItemCalled = false;
+ mOnRemoveQueueItemAtCalled = false;
}
@Override
@@ -585,6 +650,34 @@
}
@Override
+ public void onAddQueueItem(MediaDescriptionCompat description) {
+ synchronized (mWaitLock) {
+ mOnAddQueueItemCalled = true;
+ mQueueDescription = description;
+ mWaitLock.notify();
+ }
+ }
+
+ @Override
+ public void onAddQueueItem(MediaDescriptionCompat description, int index) {
+ synchronized (mWaitLock) {
+ mOnAddQueueItemAtCalled = true;
+ mQueueIndex = index;
+ mQueueDescription = description;
+ mWaitLock.notify();
+ }
+ }
+
+ @Override
+ public void onRemoveQueueItem(MediaDescriptionCompat description) {
+ synchronized (mWaitLock) {
+ mOnRemoveQueueItemCalled = true;
+ mQueueDescription = description;
+ mWaitLock.notify();
+ }
+ }
+
+ @Override
public void onSetShuffleModeEnabled(boolean enabled) {
synchronized (mWaitLock) {
mOnSetShuffleModeEnabledCalled = true;
@@ -592,5 +685,14 @@
mWaitLock.notify();
}
}
+
+ @Override
+ public void onRemoveQueueItemAt(int index) {
+ synchronized (mWaitLock) {
+ mOnRemoveQueueItemAtCalled = true;
+ mQueueIndex = index;
+ mWaitLock.notify();
+ }
+ }
}
}
diff --git a/media-compat/tests/src/android/support/v4/media/session/MediaSessionCompatTest.java b/media-compat/tests/src/android/support/v4/media/session/MediaSessionCompatTest.java
index a5f11ed..0e85c1c 100644
--- a/media-compat/tests/src/android/support/v4/media/session/MediaSessionCompatTest.java
+++ b/media-compat/tests/src/android/support/v4/media/session/MediaSessionCompatTest.java
@@ -31,12 +31,14 @@
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Parcel;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.media.PollingCheck;
import android.support.v4.media.MediaDescriptionCompat;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.RatingCompat;
@@ -62,11 +64,21 @@
private static final String TEST_SESSION_TAG = "test-session-tag";
private static final String TEST_KEY = "test-key";
private static final String TEST_VALUE = "test-val";
+ private static final Bundle TEST_BUNDLE = createTestBundle();
private static final String TEST_SESSION_EVENT = "test-session-event";
private static final int TEST_CURRENT_VOLUME = 10;
private static final int TEST_MAX_VOLUME = 11;
private static final long TEST_QUEUE_ID = 12L;
private static final long TEST_ACTION = 55L;
+ private static final int TEST_ERROR_CODE =
+ PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED;
+ private static final String TEST_ERROR_MSG = "test-error-msg";
+
+ private static Bundle createTestBundle() {
+ Bundle bundle = new Bundle();
+ bundle.putString(TEST_KEY, TEST_VALUE);
+ return bundle;
+ }
private AudioManager mAudioManager;
private Handler mHandler = new Handler(Looper.getMainLooper());
@@ -89,6 +101,7 @@
public void tearDown() throws Exception {
// It is OK to call release() twice.
mSession.release();
+ mSession = null;
}
/**
@@ -128,21 +141,17 @@
}
/**
- * Tests that the various configuration bits on a session get passed to the
- * controller.
+ * Tests {@link MediaSessionCompat#setExtras}.
*/
@Test
@SmallTest
- public void testConfigureSession() throws Exception {
+ public void testSetExtras() throws Exception {
+ final Bundle extras = new Bundle();
MediaControllerCompat controller = mSession.getController();
controller.registerCallback(mCallback, mHandler);
-
synchronized (mWaitLock) {
- // test setExtras
mCallback.resetLocked();
- final Bundle extras = new Bundle();
- extras.putString(TEST_KEY, TEST_VALUE);
- mSession.setExtras(extras);
+ mSession.setExtras(TEST_BUNDLE);
mWaitLock.wait(TIME_OUT_MS);
assertTrue(mCallback.mOnExtraChangedCalled);
@@ -153,12 +162,33 @@
extrasOut = controller.getExtras();
assertNotNull(extrasOut);
assertEquals(TEST_VALUE, extrasOut.get(TEST_KEY));
+ }
+ }
- // test setFlags
+ /**
+ * Tests {@link MediaSessionCompat#setFlags}.
+ */
+ @Test
+ @SmallTest
+ public void testSetFlags() throws Exception {
+ MediaControllerCompat controller = mSession.getController();
+ controller.registerCallback(mCallback, mHandler);
+ synchronized (mWaitLock) {
+ mCallback.resetLocked();
mSession.setFlags(5);
assertEquals(5, controller.getFlags());
+ }
+ }
- // test setMetadata
+ /**
+ * Tests {@link MediaSessionCompat#setMetadata}.
+ */
+ @Test
+ @SmallTest
+ public void testSetMetadata() throws Exception {
+ MediaControllerCompat controller = mSession.getController();
+ controller.registerCallback(mCallback, mHandler);
+ synchronized (mWaitLock) {
mCallback.resetLocked();
MediaMetadataCompat metadata =
new MediaMetadataCompat.Builder().putString(TEST_KEY, TEST_VALUE).build();
@@ -173,11 +203,27 @@
metadataOut = controller.getMetadata();
assertNotNull(metadataOut);
assertEquals(TEST_VALUE, metadataOut.getString(TEST_KEY));
+ }
+ }
- // test setPlaybackState
+ /**
+ * Tests {@link MediaSessionCompat#setPlaybackState}.
+ */
+ @Test
+ @SmallTest
+ public void testSetPlaybackState() throws Exception {
+ MediaControllerCompat controller = mSession.getController();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ waitUntilExtraBinderReady(controller);
+ }
+ controller.registerCallback(mCallback, mHandler);
+ synchronized (mWaitLock) {
mCallback.resetLocked();
PlaybackStateCompat state =
- new PlaybackStateCompat.Builder().setActions(TEST_ACTION).build();
+ new PlaybackStateCompat.Builder()
+ .setActions(TEST_ACTION)
+ .setErrorMessage(TEST_ERROR_CODE, TEST_ERROR_MSG)
+ .build();
mSession.setPlaybackState(state);
mWaitLock.wait(TIME_OUT_MS);
assertTrue(mCallback.mOnPlaybackStateChangedCalled);
@@ -185,12 +231,26 @@
PlaybackStateCompat stateOut = mCallback.mPlaybackState;
assertNotNull(stateOut);
assertEquals(TEST_ACTION, stateOut.getActions());
+ assertEquals(TEST_ERROR_CODE, stateOut.getErrorCode());
+ assertEquals(TEST_ERROR_MSG, stateOut.getErrorMessage().toString());
stateOut = controller.getPlaybackState();
assertNotNull(stateOut);
assertEquals(TEST_ACTION, stateOut.getActions());
+ assertEquals(TEST_ERROR_CODE, stateOut.getErrorCode());
+ assertEquals(TEST_ERROR_MSG, stateOut.getErrorMessage().toString());
+ }
+ }
- // test setQueue and setQueueTitle
+ /**
+ * Tests {@link MediaSessionCompat#setQueue} and {@link MediaSessionCompat#setQueueTitle}.
+ */
+ @Test
+ @SmallTest
+ public void testSetQueueAndSetQueueTitle() throws Exception {
+ MediaControllerCompat controller = mSession.getController();
+ controller.registerCallback(mCallback, mHandler);
+ synchronized (mWaitLock) {
mCallback.resetLocked();
List<MediaSessionCompat.QueueItem> queue = new ArrayList<>();
MediaSessionCompat.QueueItem item = new MediaSessionCompat.QueueItem(
@@ -231,14 +291,36 @@
assertNull(mCallback.mQueue);
assertNull(controller.getQueueTitle());
assertNull(controller.getQueue());
+ }
+ }
- // test setSessionActivity
+ /**
+ * Tests {@link MediaSessionCompat#setSessionActivity}.
+ */
+ @Test
+ @SmallTest
+ public void testSessionActivity() throws Exception {
+ MediaControllerCompat controller = mSession.getController();
+ synchronized (mWaitLock) {
Intent intent = new Intent("cts.MEDIA_SESSION_ACTION");
PendingIntent pi = PendingIntent.getActivity(getContext(), 555, intent, 0);
mSession.setSessionActivity(pi);
assertEquals(pi, controller.getSessionActivity());
+ }
+ }
- // test setRepeatMode
+ /**
+ * Tests {@link MediaSessionCompat#setRepeatMode}.
+ */
+ @Test
+ @SmallTest
+ public void testSetRepeatMode() throws Exception {
+ MediaControllerCompat controller = mSession.getController();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ waitUntilExtraBinderReady(controller);
+ }
+ controller.registerCallback(mCallback, mHandler);
+ synchronized (mWaitLock) {
mCallback.resetLocked();
final int repeatMode = PlaybackStateCompat.REPEAT_MODE_ALL;
mSession.setRepeatMode(repeatMode);
@@ -246,30 +328,66 @@
assertTrue(mCallback.mOnRepeatModeChangedCalled);
assertEquals(repeatMode, mCallback.mRepeatMode);
assertEquals(repeatMode, controller.getRepeatMode());
+ }
+ }
- // test setShuffleModeEnabled
+ /**
+ * Tests {@link MediaSessionCompat#setShuffleModeEnabled}.
+ */
+ @Test
+ @SmallTest
+ public void testSetShuffleModeEnabled() throws Exception {
+ final boolean shuffleModeEnabled = true;
+ MediaControllerCompat controller = mSession.getController();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ waitUntilExtraBinderReady(controller);
+ }
+ controller.registerCallback(mCallback, mHandler);
+ synchronized (mWaitLock) {
mCallback.resetLocked();
- final boolean shuffleModeEnabled = true;
+ final int repeatMode = PlaybackStateCompat.REPEAT_MODE_ALL;
mSession.setShuffleModeEnabled(shuffleModeEnabled);
mWaitLock.wait(TIME_OUT_MS);
assertTrue(mCallback.mOnShuffleModeChangedCalled);
assertEquals(shuffleModeEnabled, mCallback.mShuffleModeEnabled);
assertEquals(shuffleModeEnabled, controller.isShuffleModeEnabled());
+ }
+ }
- // test setActivity
- mSession.setActive(true);
- assertTrue(mSession.isActive());
-
- // test sendSessionEvent
+ /**
+ * Tests {@link MediaSessionCompat#sendSessionEvent}.
+ */
+ @Test
+ @SmallTest
+ public void testSendSessionEvent() throws Exception {
+ MediaControllerCompat controller = mSession.getController();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP &&
+ Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
+ waitUntilExtraBinderReady(controller);
+ }
+ controller.registerCallback(mCallback, mHandler);
+ synchronized (mWaitLock) {
mCallback.resetLocked();
- mSession.sendSessionEvent(TEST_SESSION_EVENT, extras);
+ mSession.sendSessionEvent(TEST_SESSION_EVENT, TEST_BUNDLE);
mWaitLock.wait(TIME_OUT_MS);
-
assertTrue(mCallback.mOnSessionEventCalled);
assertEquals(TEST_SESSION_EVENT, mCallback.mEvent);
assertEquals(TEST_VALUE, mCallback.mExtras.getString(TEST_KEY));
+ }
+ }
- // test release
+ /**
+ * Tests {@link MediaSessionCompat#setActive} and {@link MediaSessionCompat#release}.
+ */
+ @Test
+ @SmallTest
+ public void testSetActiveAndRelease() throws Exception {
+ MediaControllerCompat controller = mSession.getController();
+ controller.registerCallback(mCallback, mHandler);
+ synchronized (mWaitLock) {
+ mSession.setActive(true);
+ assertTrue(mSession.isActive());
+
mCallback.resetLocked();
mSession.release();
mWaitLock.wait(TIME_OUT_MS);
@@ -278,7 +396,7 @@
}
/**
- * Test {@link MediaSessionCompat#setPlaybackToLocal} and
+ * Tests {@link MediaSessionCompat#setPlaybackToLocal} and
* {@link MediaSessionCompat#setPlaybackToRemote}.
*/
@Test
@@ -286,7 +404,6 @@
public void testPlaybackToLocalAndRemote() throws Exception {
MediaControllerCompat controller = mSession.getController();
controller.registerCallback(mCallback, mHandler);
-
synchronized (mWaitLock) {
// test setPlaybackToRemote, do this before testing setPlaybackToLocal
// to ensure it switches correctly.
@@ -343,7 +460,7 @@
}
/**
- * Test {@link MediaSessionCompat.Callback#onMediaButtonEvent}.
+ * Tests {@link MediaSessionCompat.Callback#onMediaButtonEvent}.
*/
@Test
@SmallTest
@@ -503,6 +620,15 @@
controller.dispatchMediaButtonEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode));
}
+ private void waitUntilExtraBinderReady(final MediaControllerCompat controller) {
+ new PollingCheck(TIME_OUT_MS) {
+ @Override
+ protected boolean check() {
+ return controller.isExtraBinderReady();
+ }
+ }.run();
+ }
+
private class MediaControllerCallback extends MediaControllerCompat.Callback {
private volatile boolean mOnPlaybackStateChangedCalled;
private volatile boolean mOnMetadataChangedCalled;
diff --git a/media-compat/tests/src/android/support/v4/media/session/PlaybackStateCompatTest.java b/media-compat/tests/src/android/support/v4/media/session/PlaybackStateCompatTest.java
index 410ae01..9e320cd 100644
--- a/media-compat/tests/src/android/support/v4/media/session/PlaybackStateCompatTest.java
+++ b/media-compat/tests/src/android/support/v4/media/session/PlaybackStateCompatTest.java
@@ -46,6 +46,8 @@
private static final float TEST_PLAYBACK_SPEED_ON_REWIND = -2.0f;
private static final float DELTA = 1e-7f;
+ private static final int TEST_ERROR_CODE =
+ PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED;
private static final String TEST_ERROR_MSG = "test-error-msg";
private static final String TEST_CUSTOM_ACTION = "test-custom-action";
private static final String TEST_CUSTOM_ACTION_NAME = "test-custom-action-name";
@@ -68,6 +70,7 @@
assertEquals(0L, state.getBufferedPosition());
assertEquals(0.0f, state.getPlaybackSpeed(), DELTA);
assertEquals(0L, state.getActions());
+ assertEquals(0, state.getErrorCode());
assertNull(state.getErrorMessage());
assertEquals(0L, state.getLastPositionUpdateTime());
assertEquals(MediaSessionCompat.QueueItem.UNKNOWN_ID, state.getActiveQueueItemId());
@@ -94,7 +97,7 @@
.setActions(TEST_ACTIONS)
.setActiveQueueItemId(TEST_QUEUE_ITEM_ID)
.setBufferedPosition(TEST_BUFFERED_POSITION)
- .setErrorMessage(TEST_ERROR_MSG)
+ .setErrorMessage(TEST_ERROR_CODE, TEST_ERROR_MSG)
.setExtras(extras)
.build();
assertEquals(PlaybackStateCompat.STATE_PLAYING, state.getState());
@@ -103,6 +106,7 @@
assertEquals(TEST_ACTIONS, state.getActions());
assertEquals(TEST_QUEUE_ITEM_ID, state.getActiveQueueItemId());
assertEquals(TEST_BUFFERED_POSITION, state.getBufferedPosition());
+ assertEquals(TEST_ERROR_CODE, state.getErrorCode());
assertEquals(TEST_ERROR_MSG, state.getErrorMessage().toString());
assertNotNull(state.getExtras());
assertEquals(EXTRAS_VALUE, state.getExtras().get(EXTRAS_KEY));
@@ -197,7 +201,7 @@
.setActions(TEST_ACTIONS)
.setActiveQueueItemId(TEST_QUEUE_ITEM_ID)
.setBufferedPosition(TEST_BUFFERED_POSITION)
- .setErrorMessage(TEST_ERROR_MSG)
+ .setErrorMessage(TEST_ERROR_CODE, TEST_ERROR_MSG)
.setExtras(extras);
for (int i = 0; i < 5; i++) {
@@ -223,6 +227,7 @@
assertEquals(TEST_BUFFERED_POSITION, stateOut.getBufferedPosition());
assertEquals(TEST_ACTIONS, stateOut.getActions());
assertEquals(TEST_QUEUE_ITEM_ID, stateOut.getActiveQueueItemId());
+ assertEquals(TEST_ERROR_CODE, stateOut.getErrorCode());
assertEquals(TEST_ERROR_MSG, stateOut.getErrorMessage());
assertNotNull(stateOut.getExtras());
assertEquals(EXTRAS_VALUE, stateOut.getExtras().get(EXTRAS_KEY));
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java b/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
index 50a17cd..2437e51 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatDrawableManager.java
@@ -48,10 +48,10 @@
import android.support.v4.util.ArrayMap;
import android.support.v4.util.LongSparseArray;
import android.support.v4.util.LruCache;
+import android.support.v4.util.SparseArrayCompat;
import android.support.v7.appcompat.R;
import android.util.AttributeSet;
import android.util.Log;
-import android.util.SparseArray;
import android.util.TypedValue;
import android.util.Xml;
@@ -174,9 +174,9 @@
R.drawable.abc_btn_radio_material
};
- private WeakHashMap<Context, SparseArray<ColorStateList>> mTintLists;
+ private WeakHashMap<Context, SparseArrayCompat<ColorStateList>> mTintLists;
private ArrayMap<String, InflateDelegate> mDelegates;
- private SparseArray<String> mKnownDrawableIdTags;
+ private SparseArrayCompat<String> mKnownDrawableIdTags;
private final Object mDrawableCacheLock = new Object();
private final WeakHashMap<Context, LongSparseArray<WeakReference<Drawable.ConstantState>>>
@@ -321,7 +321,7 @@
}
} else {
// Create an id cache as we'll need one later
- mKnownDrawableIdTags = new SparseArray<>();
+ mKnownDrawableIdTags = new SparseArrayCompat<>();
}
if (mTypedValue == null) {
@@ -423,7 +423,7 @@
cache = new LongSparseArray<>();
mDrawableCaches.put(context, cache);
}
- cache.put(key, new WeakReference<ConstantState>(cs));
+ cache.put(key, new WeakReference<>(cs));
}
return true;
}
@@ -562,7 +562,7 @@
private ColorStateList getTintListFromCache(@NonNull Context context, @DrawableRes int resId) {
if (mTintLists != null) {
- final SparseArray<ColorStateList> tints = mTintLists.get(context);
+ final SparseArrayCompat<ColorStateList> tints = mTintLists.get(context);
return tints != null ? tints.get(resId) : null;
}
return null;
@@ -573,9 +573,9 @@
if (mTintLists == null) {
mTintLists = new WeakHashMap<>();
}
- SparseArray<ColorStateList> themeTints = mTintLists.get(context);
+ SparseArrayCompat<ColorStateList> themeTints = mTintLists.get(context);
if (themeTints == null) {
- themeTints = new SparseArray<>();
+ themeTints = new SparseArrayCompat<>();
mTintLists.put(context, themeTints);
}
themeTints.append(resId, tintList);
diff --git a/v7/appcompat/tests/src/android/support/v7/app/BaseKeyEventsTestCase.java b/v7/appcompat/tests/src/android/support/v7/app/BaseKeyEventsTestCase.java
index 78fdda3..844f527 100644
--- a/v7/appcompat/tests/src/android/support/v7/app/BaseKeyEventsTestCase.java
+++ b/v7/appcompat/tests/src/android/support/v7/app/BaseKeyEventsTestCase.java
@@ -29,8 +29,10 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import android.support.test.filters.FlakyTest;
import android.support.test.filters.LargeTest;
import android.support.test.filters.SmallTest;
+import android.support.test.filters.Suppress;
import android.support.v7.appcompat.test.R;
import android.support.v7.testutils.BaseTestActivity;
import android.support.v7.view.ActionMode;
@@ -90,6 +92,8 @@
assertTrue("ActionMode was destroyed", destroyed.get());
}
+ @Suppress
+ @FlakyTest(bugId = 34956766)
@Test
@LargeTest
public void testBackCollapsesSearchView() throws InterruptedException {
diff --git a/v7/appcompat/tests/src/android/support/v7/app/DrawerLayoutTest.java b/v7/appcompat/tests/src/android/support/v7/app/DrawerLayoutTest.java
index 3fe899d..d81856c 100755
--- a/v7/appcompat/tests/src/android/support/v7/app/DrawerLayoutTest.java
+++ b/v7/appcompat/tests/src/android/support/v7/app/DrawerLayoutTest.java
@@ -44,9 +44,11 @@
import android.support.test.espresso.action.GeneralSwipeAction;
import android.support.test.espresso.action.Press;
import android.support.test.espresso.action.Swipe;
+import android.support.test.filters.FlakyTest;
import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest;
+import android.support.test.filters.Suppress;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.appcompat.test.R;
@@ -426,6 +428,8 @@
mDrawerLayout.removeDrawerListener(mockedListener);
}
+ @Suppress
+ @FlakyTest(bugId = 33659300)
@Test
@SmallTest
public void testDrawerListenerCallbacksOnOpeningViaSwipes() {
diff --git a/v7/mediarouter/res/drawable-hdpi/ic_media_stop_dark.png b/v7/mediarouter/res/drawable-hdpi/ic_media_stop_dark.png
new file mode 100644
index 0000000..801d341
--- /dev/null
+++ b/v7/mediarouter/res/drawable-hdpi/ic_media_stop_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-hdpi/ic_media_stop_light.png b/v7/mediarouter/res/drawable-hdpi/ic_media_stop_light.png
new file mode 100644
index 0000000..9d6b65d
--- /dev/null
+++ b/v7/mediarouter/res/drawable-hdpi/ic_media_stop_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-mdpi/ic_media_stop_dark.png b/v7/mediarouter/res/drawable-mdpi/ic_media_stop_dark.png
new file mode 100644
index 0000000..3ad2c9c
--- /dev/null
+++ b/v7/mediarouter/res/drawable-mdpi/ic_media_stop_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-mdpi/ic_media_stop_light.png b/v7/mediarouter/res/drawable-mdpi/ic_media_stop_light.png
new file mode 100644
index 0000000..b002ab7
--- /dev/null
+++ b/v7/mediarouter/res/drawable-mdpi/ic_media_stop_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xhdpi/ic_media_stop_dark.png b/v7/mediarouter/res/drawable-xhdpi/ic_media_stop_dark.png
new file mode 100644
index 0000000..5239336
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xhdpi/ic_media_stop_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xhdpi/ic_media_stop_light.png b/v7/mediarouter/res/drawable-xhdpi/ic_media_stop_light.png
new file mode 100644
index 0000000..5bc5a6c
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xhdpi/ic_media_stop_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xxhdpi/ic_media_stop_dark.png b/v7/mediarouter/res/drawable-xxhdpi/ic_media_stop_dark.png
new file mode 100644
index 0000000..035ca18
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xxhdpi/ic_media_stop_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xxhdpi/ic_media_stop_light.png b/v7/mediarouter/res/drawable-xxhdpi/ic_media_stop_light.png
new file mode 100644
index 0000000..eac183d
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xxhdpi/ic_media_stop_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable/mr_media_stop_dark.xml b/v7/mediarouter/res/drawable/mr_media_stop_dark.xml
new file mode 100644
index 0000000..9757552
--- /dev/null
+++ b/v7/mediarouter/res/drawable/mr_media_stop_dark.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/ic_media_stop_dark" />
+</selector>
diff --git a/v7/mediarouter/res/drawable/mr_media_stop_light.xml b/v7/mediarouter/res/drawable/mr_media_stop_light.xml
new file mode 100644
index 0000000..c7717c7
--- /dev/null
+++ b/v7/mediarouter/res/drawable/mr_media_stop_light.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item>
+ <bitmap
+ android:src="@drawable/ic_media_stop_light"
+ android:alpha="0.87" />
+ </item>
+</selector>
diff --git a/v7/mediarouter/res/layout/mr_playback_control.xml b/v7/mediarouter/res/layout/mr_playback_control.xml
index b441254..9d788f6 100644
--- a/v7/mediarouter/res/layout/mr_playback_control.xml
+++ b/v7/mediarouter/res/layout/mr_playback_control.xml
@@ -20,7 +20,7 @@
android:orientation="horizontal"
android:paddingLeft="24dp"
android:paddingRight="12dp" >
- <ImageButton android:id="@+id/mr_control_play_pause"
+ <ImageButton android:id="@+id/mr_control_playback_ctrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
@@ -33,7 +33,7 @@
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_toLeftOf="@id/mr_control_play_pause"
+ android:layout_toLeftOf="@id/mr_control_playback_ctrl"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true">
<TextView android:id="@+id/mr_control_title"
diff --git a/v7/mediarouter/res/values-af/strings.xml b/v7/mediarouter/res/values-af/strings.xml
index 444ffc2..9d311a9 100644
--- a/v7/mediarouter/res/values-af/strings.xml
+++ b/v7/mediarouter/res/values-af/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Saai uit na"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Vind tans toestelle"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Ontkoppel"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Hou op uitsaai"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Hou op uitsaai"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Maak toe"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Speel"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Laat wag"</string>
diff --git a/v7/mediarouter/res/values-am/strings.xml b/v7/mediarouter/res/values-am/strings.xml
index 96a2c09..ef7f3be 100644
--- a/v7/mediarouter/res/values-am/strings.xml
+++ b/v7/mediarouter/res/values-am/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Cast አድርግ ወደ"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"መሣሪያዎችን በማግኘት ላይ"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"ግንኙነት አቋርጥ"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Cast ማድረግ አቁም"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Cast ማድረግ አቁም"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"ዝጋ"</string>
<string name="mr_controller_play" msgid="683634565969987458">"አጫውት"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"ለአፍታ አቁም"</string>
diff --git a/v7/mediarouter/res/values-ar/strings.xml b/v7/mediarouter/res/values-ar/strings.xml
index 3caf4b6..897460c 100644
--- a/v7/mediarouter/res/values-ar/strings.xml
+++ b/v7/mediarouter/res/values-ar/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"إرسال إلى"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"جارٍ البحث عن أجهزة"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"قطع الاتصال"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"إيقاف الإرسال"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"إيقاف الإرسال"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"إغلاق"</string>
<string name="mr_controller_play" msgid="683634565969987458">"تشغيل"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"إيقاف مؤقت"</string>
diff --git a/v7/mediarouter/res/values-az-rAZ/strings.xml b/v7/mediarouter/res/values-az-rAZ/strings.xml
index 31574c3..a7cc571 100644
--- a/v7/mediarouter/res/values-az-rAZ/strings.xml
+++ b/v7/mediarouter/res/values-az-rAZ/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Bura yayımlayın"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Cihazlar axtarılır"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Bağlantını kəsin"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Yayımı dayandırın"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Yayımı dayandırın"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Qapadın"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Oynadın"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Durdurun"</string>
diff --git a/v7/mediarouter/res/values-b+sr+Latn/strings.xml b/v7/mediarouter/res/values-b+sr+Latn/strings.xml
index 8075d2e..e64356e 100644
--- a/v7/mediarouter/res/values-b+sr+Latn/strings.xml
+++ b/v7/mediarouter/res/values-b+sr+Latn/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Prebacujte na"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Pronalaženje uređaja"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Prekini vezu"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Zaustavi prebacivanje"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Zaustavi prebacivanje"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Zatvori"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Pusti"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pauziraj"</string>
diff --git a/v7/mediarouter/res/values-be-rBY/strings.xml b/v7/mediarouter/res/values-be-rBY/strings.xml
index 75c24d5..93ccc1a 100644
--- a/v7/mediarouter/res/values-be-rBY/strings.xml
+++ b/v7/mediarouter/res/values-be-rBY/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Трансляваць на"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Пошук прылад"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Адлучыць"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Спыніць трансляцыю"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Спыніць трансляцыю"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Закрыць"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Прайграць"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Прыпыніць"</string>
diff --git a/v7/mediarouter/res/values-bg/strings.xml b/v7/mediarouter/res/values-bg/strings.xml
index d756d6c..ef4db0a 100644
--- a/v7/mediarouter/res/values-bg/strings.xml
+++ b/v7/mediarouter/res/values-bg/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Предаване към"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Търсят се устройства"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Прекратяване на връзката"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Спиране на предаването"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Спиране на предаването"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Затваряне"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Пускане"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Поставяне на пауза"</string>
diff --git a/v7/mediarouter/res/values-bn-rBD/strings.xml b/v7/mediarouter/res/values-bn-rBD/strings.xml
index b94b9af..d542100 100644
--- a/v7/mediarouter/res/values-bn-rBD/strings.xml
+++ b/v7/mediarouter/res/values-bn-rBD/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"এতে কাস্ট করুন"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"ডিভাইসগুলিকে খোঁজা হচ্ছে"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"সংযোগ বিচ্ছিন্ন করুন"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"কাস্ট করা বন্ধ করুন"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"কাস্ট করা বন্ধ করুন"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"বন্ধ করুন"</string>
<string name="mr_controller_play" msgid="683634565969987458">"চালান"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"বিরাম দিন"</string>
diff --git a/v7/mediarouter/res/values-bs-rBA/strings.xml b/v7/mediarouter/res/values-bs-rBA/strings.xml
index df4e3ef..cd8e586 100644
--- a/v7/mediarouter/res/values-bs-rBA/strings.xml
+++ b/v7/mediarouter/res/values-bs-rBA/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Prebacujte na"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Traženje uređaja"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Prekini vezu"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Zaustavi prebacivanje"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Zaustavi prebacivanje"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Zatvori"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Reproduciraj"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pauziraj"</string>
diff --git a/v7/mediarouter/res/values-ca/strings.xml b/v7/mediarouter/res/values-ca/strings.xml
index 400d424..875290f 100644
--- a/v7/mediarouter/res/values-ca/strings.xml
+++ b/v7/mediarouter/res/values-ca/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Emet a"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"S\'estan cercant dispositius"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Desconnecta"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Atura l\'emissió"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Atura l\'emissió"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Tanca"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Reprodueix"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Posa en pausa"</string>
diff --git a/v7/mediarouter/res/values-cs/strings.xml b/v7/mediarouter/res/values-cs/strings.xml
index 5a29bac..532612a 100644
--- a/v7/mediarouter/res/values-cs/strings.xml
+++ b/v7/mediarouter/res/values-cs/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Odesílat do"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Hledání zařízení"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Odpojit"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Zastavit odesílání"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Zastavit odesílání"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Zavřít"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Přehrát"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pozastavit"</string>
diff --git a/v7/mediarouter/res/values-da/strings.xml b/v7/mediarouter/res/values-da/strings.xml
index f33a4ee..55864a0 100644
--- a/v7/mediarouter/res/values-da/strings.xml
+++ b/v7/mediarouter/res/values-da/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Cast til"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Finder enheder"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Afbryd"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Stop med at caste"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Stop med at caste"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Luk"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Afspil"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Sæt på pause"</string>
diff --git a/v7/mediarouter/res/values-de/strings.xml b/v7/mediarouter/res/values-de/strings.xml
index 13686aa..50025de 100644
--- a/v7/mediarouter/res/values-de/strings.xml
+++ b/v7/mediarouter/res/values-de/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Streamen auf"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Geräte werden gesucht."</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Verbindung trennen"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Streaming stoppen"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Streaming stoppen"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Schließen"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Wiedergeben"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pausieren"</string>
diff --git a/v7/mediarouter/res/values-el/strings.xml b/v7/mediarouter/res/values-el/strings.xml
index 3f45621..fd415cc 100644
--- a/v7/mediarouter/res/values-el/strings.xml
+++ b/v7/mediarouter/res/values-el/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Μετάδοση σε"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Εύρεση συσκευών"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Αποσύνδεση"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Διακοπή μετάδοσης"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Διακοπή μετάδοσης"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Κλείσιμο"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Αναπαραγωγή"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Παύση"</string>
diff --git a/v7/mediarouter/res/values-en-rAU/strings.xml b/v7/mediarouter/res/values-en-rAU/strings.xml
index 9201c1f..7ce2f28 100644
--- a/v7/mediarouter/res/values-en-rAU/strings.xml
+++ b/v7/mediarouter/res/values-en-rAU/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Cast to"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Finding devices"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Disconnect"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Stop casting"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Stop casting"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Close"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Play"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pause"</string>
diff --git a/v7/mediarouter/res/values-en-rGB/strings.xml b/v7/mediarouter/res/values-en-rGB/strings.xml
index 9201c1f..7ce2f28 100644
--- a/v7/mediarouter/res/values-en-rGB/strings.xml
+++ b/v7/mediarouter/res/values-en-rGB/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Cast to"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Finding devices"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Disconnect"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Stop casting"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Stop casting"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Close"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Play"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pause"</string>
diff --git a/v7/mediarouter/res/values-en-rIN/strings.xml b/v7/mediarouter/res/values-en-rIN/strings.xml
index 9201c1f..7ce2f28 100644
--- a/v7/mediarouter/res/values-en-rIN/strings.xml
+++ b/v7/mediarouter/res/values-en-rIN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Cast to"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Finding devices"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Disconnect"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Stop casting"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Stop casting"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Close"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Play"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pause"</string>
diff --git a/v7/mediarouter/res/values-es-rUS/strings.xml b/v7/mediarouter/res/values-es-rUS/strings.xml
index 90aa823..9b411dd 100644
--- a/v7/mediarouter/res/values-es-rUS/strings.xml
+++ b/v7/mediarouter/res/values-es-rUS/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Transmitir a"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Buscando dispositivos"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Desconectar"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Detener la transmisión"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Detener la transmisión"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Cerrar"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Reproducir"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pausar"</string>
diff --git a/v7/mediarouter/res/values-es/strings.xml b/v7/mediarouter/res/values-es/strings.xml
index 52a886f..057d3d2 100644
--- a/v7/mediarouter/res/values-es/strings.xml
+++ b/v7/mediarouter/res/values-es/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Enviar a"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Buscando dispositivos"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Desconectar"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Dejar de enviar contenido"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Dejar de enviar contenido"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Cerrar"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Reproducir"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pausa"</string>
diff --git a/v7/mediarouter/res/values-et-rEE/strings.xml b/v7/mediarouter/res/values-et-rEE/strings.xml
index ce1847a..8fa0e94 100644
--- a/v7/mediarouter/res/values-et-rEE/strings.xml
+++ b/v7/mediarouter/res/values-et-rEE/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Ülekandmine seadmesse"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Seadmete otsimine"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Katkesta ühendus"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Peata ülekanne"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Peata ülekanne"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Sulgemine"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Esitamine"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Peatamine"</string>
diff --git a/v7/mediarouter/res/values-eu-rES/strings.xml b/v7/mediarouter/res/values-eu-rES/strings.xml
index c03d73b..d8efeba 100644
--- a/v7/mediarouter/res/values-eu-rES/strings.xml
+++ b/v7/mediarouter/res/values-eu-rES/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Igorri hona"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Gailuak bilatzen"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Deskonektatu"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Utzi igortzeari"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Utzi igortzeari"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Itxi"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Erreproduzitu"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pausatu"</string>
diff --git a/v7/mediarouter/res/values-fa/strings.xml b/v7/mediarouter/res/values-fa/strings.xml
index 7cc9fbc..8d965d1 100644
--- a/v7/mediarouter/res/values-fa/strings.xml
+++ b/v7/mediarouter/res/values-fa/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"ارسال محتوا به"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"پیدا کردن دستگاهها"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"قطع ارتباط"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"توقف ارسال محتوا"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"توقف ارسال محتوا"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"بستن"</string>
<string name="mr_controller_play" msgid="683634565969987458">"پخش"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"مکث"</string>
diff --git a/v7/mediarouter/res/values-fi/strings.xml b/v7/mediarouter/res/values-fi/strings.xml
index 2465802..41727ef 100644
--- a/v7/mediarouter/res/values-fi/strings.xml
+++ b/v7/mediarouter/res/values-fi/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Suoratoiston kohde"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Etsitään laitteita"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Katkaise yhteys"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Lopeta suoratoisto"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Lopeta suoratoisto"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Sulje"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Toista"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Keskeytä"</string>
diff --git a/v7/mediarouter/res/values-fr-rCA/strings.xml b/v7/mediarouter/res/values-fr-rCA/strings.xml
index fd1ea8c..9f489f2 100644
--- a/v7/mediarouter/res/values-fr-rCA/strings.xml
+++ b/v7/mediarouter/res/values-fr-rCA/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Diffuser sur"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Recherche d\'appareils"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Se déconnecter"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Arrêter la diffusion"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Arrêter la diffusion"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Fermer"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Lire"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Interrompre"</string>
diff --git a/v7/mediarouter/res/values-fr/strings.xml b/v7/mediarouter/res/values-fr/strings.xml
index 8c96485..86f70bb 100644
--- a/v7/mediarouter/res/values-fr/strings.xml
+++ b/v7/mediarouter/res/values-fr/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Caster sur"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Recherche d\'appareils en cours…"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Déconnecter"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Arrêter de diffuser"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Arrêter de diffuser"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Fermer"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Lecture"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pause"</string>
diff --git a/v7/mediarouter/res/values-gl-rES/strings.xml b/v7/mediarouter/res/values-gl-rES/strings.xml
index d6d1888..7d250bf 100644
--- a/v7/mediarouter/res/values-gl-rES/strings.xml
+++ b/v7/mediarouter/res/values-gl-rES/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Emitir en"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Buscando dispositivos"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Desconectar"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Deter emisión"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Deter emisión"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Pechar"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Reproduce"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pausa"</string>
diff --git a/v7/mediarouter/res/values-gu-rIN/strings.xml b/v7/mediarouter/res/values-gu-rIN/strings.xml
index eb7a9b8..6c2237e 100644
--- a/v7/mediarouter/res/values-gu-rIN/strings.xml
+++ b/v7/mediarouter/res/values-gu-rIN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"આના પર કાસ્ટ કરો"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"ઉપકરણો શોધી રહ્યાં છીએ"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"ડિસ્કનેક્ટ કરો"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"કાસ્ટ કરવાનું રોકો"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"કાસ્ટ કરવાનું રોકો"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"બંધ કરો"</string>
<string name="mr_controller_play" msgid="683634565969987458">"ચલાવો"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"થોભાવો"</string>
diff --git a/v7/mediarouter/res/values-hi/strings.xml b/v7/mediarouter/res/values-hi/strings.xml
index e74967e..0048639 100644
--- a/v7/mediarouter/res/values-hi/strings.xml
+++ b/v7/mediarouter/res/values-hi/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"इस पर कास्ट करें"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"डिवाइस ढूंढ रहा है"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"डिस्कनेक्ट करें"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"कास्ट करना बंद करें"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"कास्ट करना बंद करें"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"बंद करें"</string>
<string name="mr_controller_play" msgid="683634565969987458">"चलाएं"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"रोकें"</string>
diff --git a/v7/mediarouter/res/values-hr/strings.xml b/v7/mediarouter/res/values-hr/strings.xml
index f50d748..83b2a7a 100644
--- a/v7/mediarouter/res/values-hr/strings.xml
+++ b/v7/mediarouter/res/values-hr/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Emitiranje na"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Traženje uređaja"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Prekini vezu"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Zaustavi emitiranje"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Zaustavi emitiranje"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Zatvaranje"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Reprodukcija"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pauziranje"</string>
diff --git a/v7/mediarouter/res/values-hu/strings.xml b/v7/mediarouter/res/values-hu/strings.xml
index 6420985..9d4b770 100644
--- a/v7/mediarouter/res/values-hu/strings.xml
+++ b/v7/mediarouter/res/values-hu/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Átküldés ide"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Eszközök keresése"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Leválasztás"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Átküldés leállítása"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Átküldés leállítása"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Bezárás"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Lejátszás"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Szüneteltetés"</string>
diff --git a/v7/mediarouter/res/values-hy-rAM/strings.xml b/v7/mediarouter/res/values-hy-rAM/strings.xml
index 6e46af8..f1221d1 100644
--- a/v7/mediarouter/res/values-hy-rAM/strings.xml
+++ b/v7/mediarouter/res/values-hy-rAM/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Ընտրեք սարքը"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Սարքերի որոնում"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Անջատել"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Դադարեցնել հեռարձակումը"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Դադարեցնել հեռարձակումը"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Փակել"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Նվագարկել"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Դադար"</string>
diff --git a/v7/mediarouter/res/values-in/strings.xml b/v7/mediarouter/res/values-in/strings.xml
index 43e0c62..fbe906a 100644
--- a/v7/mediarouter/res/values-in/strings.xml
+++ b/v7/mediarouter/res/values-in/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Transmisikan ke"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Mencari perangkat"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Putuskan sambungan"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Hentikan transmisi"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Hentikan transmisi"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Tutup"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Putar"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Jeda"</string>
diff --git a/v7/mediarouter/res/values-is-rIS/strings.xml b/v7/mediarouter/res/values-is-rIS/strings.xml
index 53de253..cf5308e 100644
--- a/v7/mediarouter/res/values-is-rIS/strings.xml
+++ b/v7/mediarouter/res/values-is-rIS/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Senda út í"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Leitað að tækjum"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Aftengjast"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Stöðva útsendingu"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Stöðva útsendingu"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Loka"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Spila"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Hlé"</string>
diff --git a/v7/mediarouter/res/values-it/strings.xml b/v7/mediarouter/res/values-it/strings.xml
index df6bbfe..b8f12a5 100644
--- a/v7/mediarouter/res/values-it/strings.xml
+++ b/v7/mediarouter/res/values-it/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Trasmetti a"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Ricerca di dispositivi in corso"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Scollega"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Interrompi trasmissione"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Interrompi trasmissione"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Chiudi"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Riproduci"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pausa"</string>
diff --git a/v7/mediarouter/res/values-iw/strings.xml b/v7/mediarouter/res/values-iw/strings.xml
index be705a6..89a136a 100644
--- a/v7/mediarouter/res/values-iw/strings.xml
+++ b/v7/mediarouter/res/values-iw/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"העבר אל"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"מחפש מכשירים"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"נתק"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"עצור העברה"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"עצור העברה"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"סגור"</string>
<string name="mr_controller_play" msgid="683634565969987458">"הפעל"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"השהה"</string>
diff --git a/v7/mediarouter/res/values-ja/strings.xml b/v7/mediarouter/res/values-ja/strings.xml
index 75d75d6..6b731d2 100644
--- a/v7/mediarouter/res/values-ja/strings.xml
+++ b/v7/mediarouter/res/values-ja/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"キャストするデバイス"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"端末を検索しています"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"接続を解除"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"キャストを停止"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"キャストを停止"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"閉じる"</string>
<string name="mr_controller_play" msgid="683634565969987458">"再生"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"一時停止"</string>
diff --git a/v7/mediarouter/res/values-ka-rGE/strings.xml b/v7/mediarouter/res/values-ka-rGE/strings.xml
index 3bcc513..584203f 100644
--- a/v7/mediarouter/res/values-ka-rGE/strings.xml
+++ b/v7/mediarouter/res/values-ka-rGE/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"ტრანსლირებული"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"მიმდინარეობს მოწყობილობების მოძიება"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"კავშირის გაწყვეტა"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"ტრანსლირების შეჩერება"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"ტრანსლირების შეჩერება"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"დახურვა"</string>
<string name="mr_controller_play" msgid="683634565969987458">"დაკვრა"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"პაუზა"</string>
diff --git a/v7/mediarouter/res/values-kk-rKZ/strings.xml b/v7/mediarouter/res/values-kk-rKZ/strings.xml
index 43e75b7..185fbf9 100644
--- a/v7/mediarouter/res/values-kk-rKZ/strings.xml
+++ b/v7/mediarouter/res/values-kk-rKZ/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Келесіге трансляциялау"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Құрылғыларды табу"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Ажырату"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Трансляциялауды тоқтату"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Трансляциялауды тоқтату"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Жабу"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Ойнату"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Кідірту"</string>
diff --git a/v7/mediarouter/res/values-km-rKH/strings.xml b/v7/mediarouter/res/values-km-rKH/strings.xml
index 44d88f4..7a92a77 100644
--- a/v7/mediarouter/res/values-km-rKH/strings.xml
+++ b/v7/mediarouter/res/values-km-rKH/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"ខាសទៅ"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"ស្វែងរកឧបករណ៍"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"ផ្ដាច់"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"បញ្ឈប់ការខាស"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"បញ្ឈប់ការខាស"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"បិទ"</string>
<string name="mr_controller_play" msgid="683634565969987458">"ចាក់"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"ផ្អាក"</string>
diff --git a/v7/mediarouter/res/values-kn-rIN/strings.xml b/v7/mediarouter/res/values-kn-rIN/strings.xml
index 193d449..a493757 100644
--- a/v7/mediarouter/res/values-kn-rIN/strings.xml
+++ b/v7/mediarouter/res/values-kn-rIN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"ಇದಕ್ಕೆ ಬಿತ್ತರಿಸಿ"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"ಸಾಧನಗಳನ್ನು ಹುಡುಕಲಾಗುತ್ತಿದೆ"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸು"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"ಬಿತ್ತರಿಸುವಿಕೆ ನಿಲ್ಲಿಸು"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"ಬಿತ್ತರಿಸುವಿಕೆ ನಿಲ್ಲಿಸು"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"ಮುಚ್ಚು"</string>
<string name="mr_controller_play" msgid="683634565969987458">"ಪ್ಲೇ ಮಾಡಿ"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"ವಿರಾಮ"</string>
diff --git a/v7/mediarouter/res/values-ko/strings.xml b/v7/mediarouter/res/values-ko/strings.xml
index 242560a..8630f4f 100644
--- a/v7/mediarouter/res/values-ko/strings.xml
+++ b/v7/mediarouter/res/values-ko/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"전송할 기기"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"기기를 찾는 중"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"연결 해제"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"전송 중지"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"전송 중지"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"닫기"</string>
<string name="mr_controller_play" msgid="683634565969987458">"재생"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"일시중지"</string>
diff --git a/v7/mediarouter/res/values-ky-rKG/strings.xml b/v7/mediarouter/res/values-ky-rKG/strings.xml
index 0898ade..82f64be 100644
--- a/v7/mediarouter/res/values-ky-rKG/strings.xml
+++ b/v7/mediarouter/res/values-ky-rKG/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Төмөнкүгө чыгаруу"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Түзмөктөр изделүүдө"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Ажыратуу"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Тышк экранга чыгарну токтотуу"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Тышк экранга чыгарну токтотуу"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Жабуу"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Ойнотуу"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Тындыруу"</string>
diff --git a/v7/mediarouter/res/values-lo-rLA/strings.xml b/v7/mediarouter/res/values-lo-rLA/strings.xml
index 65b3472..8771268 100644
--- a/v7/mediarouter/res/values-lo-rLA/strings.xml
+++ b/v7/mediarouter/res/values-lo-rLA/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"ຄາສທ໌ຫາ"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"ກຳລັງຊອກຫາອຸປະກອນ"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"ຕັດການເຊື່ອມຕໍ່"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"ຢຸດການຄາສທ໌"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"ຢຸດການຄາສທ໌"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"ປິດ"</string>
<string name="mr_controller_play" msgid="683634565969987458">"ຫຼິ້ນ"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"ຢຸດຊົ່ວຄາວ"</string>
diff --git a/v7/mediarouter/res/values-lt/strings.xml b/v7/mediarouter/res/values-lt/strings.xml
index 35931cf..45398f0 100644
--- a/v7/mediarouter/res/values-lt/strings.xml
+++ b/v7/mediarouter/res/values-lt/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Perduoti į"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Randami įrenginiai"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Atjungti"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Sustabdyti perdavimą"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Sustabdyti perdavimą"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Uždaryti"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Leisti"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pristabdyti"</string>
diff --git a/v7/mediarouter/res/values-lv/strings.xml b/v7/mediarouter/res/values-lv/strings.xml
index c146174..e01705e 100644
--- a/v7/mediarouter/res/values-lv/strings.xml
+++ b/v7/mediarouter/res/values-lv/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Apraidīšana uz ierīci"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Notiek ierīču meklēšana"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Atvienot"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Pārtraukt apraidi"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Pārtraukt apraidi"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Aizvērt"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Atskaņot"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Apturēt"</string>
diff --git a/v7/mediarouter/res/values-mk-rMK/strings.xml b/v7/mediarouter/res/values-mk-rMK/strings.xml
index 6fd428f..205467e 100644
--- a/v7/mediarouter/res/values-mk-rMK/strings.xml
+++ b/v7/mediarouter/res/values-mk-rMK/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Емитувај на"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Наоѓање уреди"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Исклучи"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Запри го емитувањето"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Запри го емитувањето"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Затвори"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Репродуцирај"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Паузирај"</string>
diff --git a/v7/mediarouter/res/values-ml-rIN/strings.xml b/v7/mediarouter/res/values-ml-rIN/strings.xml
index 63a37f8..00fc9dc 100644
--- a/v7/mediarouter/res/values-ml-rIN/strings.xml
+++ b/v7/mediarouter/res/values-ml-rIN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"ഇതിലേക്ക് കാസ്റ്റുചെയ്യുക"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"ഉപകരണങ്ങൾ കണ്ടെത്തുന്നു"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"വിച്ഛേദിക്കുക"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"കാസ്റ്റുചെയ്യൽ നിർത്തുക"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"കാസ്റ്റുചെയ്യൽ നിർത്തുക"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"അടയ്ക്കുക"</string>
<string name="mr_controller_play" msgid="683634565969987458">"പ്ലേ ചെയ്യുക"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"തൽക്കാലം നിർത്തൂ"</string>
diff --git a/v7/mediarouter/res/values-mn-rMN/strings.xml b/v7/mediarouter/res/values-mn-rMN/strings.xml
index 1197bfe..cccf05e 100644
--- a/v7/mediarouter/res/values-mn-rMN/strings.xml
+++ b/v7/mediarouter/res/values-mn-rMN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Дамжуулах"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Төхөөрөмж хайж байна"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Салгах"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Дамжуулахыг зогсоох"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Дамжуулахыг зогсоох"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Хаах"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Тоглуулах"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Түр зогсоох"</string>
diff --git a/v7/mediarouter/res/values-mr-rIN/strings.xml b/v7/mediarouter/res/values-mr-rIN/strings.xml
index 40d7d66..37374b4 100644
--- a/v7/mediarouter/res/values-mr-rIN/strings.xml
+++ b/v7/mediarouter/res/values-mr-rIN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"यावर कास्ट करा"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"डिव्हाइसेस शोधत आहे"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"डिस्कनेक्ट करा"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"कास्ट करणे थांबवा"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"कास्ट करणे थांबवा"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"बंद करा"</string>
<string name="mr_controller_play" msgid="683634565969987458">"प्ले करा"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"विराम"</string>
diff --git a/v7/mediarouter/res/values-ms-rMY/strings.xml b/v7/mediarouter/res/values-ms-rMY/strings.xml
index cc32b96..6474884 100644
--- a/v7/mediarouter/res/values-ms-rMY/strings.xml
+++ b/v7/mediarouter/res/values-ms-rMY/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Hantar ke"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Mencari peranti"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Putuskan sambungan"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Berhenti menghantar"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Berhenti menghantar"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Tutup"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Main"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Jeda"</string>
diff --git a/v7/mediarouter/res/values-my-rMM/strings.xml b/v7/mediarouter/res/values-my-rMM/strings.xml
index e31cc92..836d137 100644
--- a/v7/mediarouter/res/values-my-rMM/strings.xml
+++ b/v7/mediarouter/res/values-my-rMM/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"သို့ ကာစ်တ်လုပ်ရန်"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"စက်ပစ္စည်းများ ရှာဖွေခြင်း"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"ဆက်သွယ်မှု ဖြတ်ရန်"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"ကာစ်တ်လုပ်ခြင်း ရပ်တန့်ရန်"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"ကာစ်တ်လုပ်ခြင်း ရပ်တန့်ရန်"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"ပိတ်ရန်"</string>
<string name="mr_controller_play" msgid="683634565969987458">"ဖွင့်ရန်"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"ခဏရပ်ရန်"</string>
diff --git a/v7/mediarouter/res/values-nb/strings.xml b/v7/mediarouter/res/values-nb/strings.xml
index 97ca73c..172d9d4 100644
--- a/v7/mediarouter/res/values-nb/strings.xml
+++ b/v7/mediarouter/res/values-nb/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Cast til"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Finner enheter"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Koble fra"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Stopp castingen"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Stopp castingen"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Lukk"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Spill av"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Sett på pause"</string>
diff --git a/v7/mediarouter/res/values-ne-rNP/strings.xml b/v7/mediarouter/res/values-ne-rNP/strings.xml
index 0e48b45..e9e4f03 100644
--- a/v7/mediarouter/res/values-ne-rNP/strings.xml
+++ b/v7/mediarouter/res/values-ne-rNP/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"यसमा Cast गर्नुहोस्"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"यन्त्रहरू पत्ता लगाउँदै"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"विच्छेद गर्नुहोस्"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"casting रोक्नुहोस्"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"casting रोक्नुहोस्"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"बन्द गर्नुहोस्"</string>
<string name="mr_controller_play" msgid="683634565969987458">"बजाउनुहोस्"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"रोक्नुहोस्"</string>
diff --git a/v7/mediarouter/res/values-nl/strings.xml b/v7/mediarouter/res/values-nl/strings.xml
index 5c899fd..21364e7 100644
--- a/v7/mediarouter/res/values-nl/strings.xml
+++ b/v7/mediarouter/res/values-nl/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Casten naar"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Apparaten zoeken"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Loskoppelen"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Casten stoppen"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Casten stoppen"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Sluiten"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Afspelen"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Onderbreken"</string>
diff --git a/v7/mediarouter/res/values-pa-rIN/strings.xml b/v7/mediarouter/res/values-pa-rIN/strings.xml
index 258529d..1e4dfae 100644
--- a/v7/mediarouter/res/values-pa-rIN/strings.xml
+++ b/v7/mediarouter/res/values-pa-rIN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"ਇਸ ਨਾਲ ਕਾਸਟ ਕਰੋ"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"ਡਿਵਾਈਸਾਂ ਲੱਭ ਰਿਹਾ ਹੈ"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"ਜੋੜਨਾ ਰੋਕੋ"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"ਜੋੜਨਾ ਰੋਕੋ"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"ਬੰਦ ਕਰੋ"</string>
<string name="mr_controller_play" msgid="683634565969987458">"ਪਲੇ ਕਰੋ"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"ਰੋਕੋ"</string>
diff --git a/v7/mediarouter/res/values-pl/strings.xml b/v7/mediarouter/res/values-pl/strings.xml
index 0320550..db0934d 100644
--- a/v7/mediarouter/res/values-pl/strings.xml
+++ b/v7/mediarouter/res/values-pl/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Przesyłaj na"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Znajdowanie urządzeń"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Odłącz"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Zatrzymaj przesyłanie"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Zatrzymaj przesyłanie"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Zamknij"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Odtwórz"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Wstrzymaj"</string>
diff --git a/v7/mediarouter/res/values-pt-rBR/strings.xml b/v7/mediarouter/res/values-pt-rBR/strings.xml
index 2fd84b1..b424082 100644
--- a/v7/mediarouter/res/values-pt-rBR/strings.xml
+++ b/v7/mediarouter/res/values-pt-rBR/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Transmitir para"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Localizando dispositivos"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Desconectar"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Interromper transmissão"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Interromper transmissão"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Fechar"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Reproduzir"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pausar"</string>
diff --git a/v7/mediarouter/res/values-pt-rPT/strings.xml b/v7/mediarouter/res/values-pt-rPT/strings.xml
index b62f363..c6c52f9 100644
--- a/v7/mediarouter/res/values-pt-rPT/strings.xml
+++ b/v7/mediarouter/res/values-pt-rPT/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Transmitir para"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"A localizar dispositivos"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Desassociar"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Interromper a transmissão"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Interromper a transmissão"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Fechar"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Reproduzir"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Interromper"</string>
diff --git a/v7/mediarouter/res/values-pt/strings.xml b/v7/mediarouter/res/values-pt/strings.xml
index 2fd84b1..b424082 100644
--- a/v7/mediarouter/res/values-pt/strings.xml
+++ b/v7/mediarouter/res/values-pt/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Transmitir para"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Localizando dispositivos"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Desconectar"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Interromper transmissão"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Interromper transmissão"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Fechar"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Reproduzir"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pausar"</string>
diff --git a/v7/mediarouter/res/values-ro/strings.xml b/v7/mediarouter/res/values-ro/strings.xml
index 769a0ac..ab2fd61 100644
--- a/v7/mediarouter/res/values-ro/strings.xml
+++ b/v7/mediarouter/res/values-ro/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Proiectați pe"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Se caută dispozitive"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Deconectați-vă"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Opriți proiecția"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Opriți proiecția"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Închideți"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Redați"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Întrerupeți"</string>
diff --git a/v7/mediarouter/res/values-ru/strings.xml b/v7/mediarouter/res/values-ru/strings.xml
index 9bd2170..768f300 100644
--- a/v7/mediarouter/res/values-ru/strings.xml
+++ b/v7/mediarouter/res/values-ru/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Выберите устройство"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Поиск устройств…"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Отключить"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Остановить трансляцию"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Остановить трансляцию"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Закрыть"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Воспроизвести"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Приостановить"</string>
diff --git a/v7/mediarouter/res/values-si-rLK/strings.xml b/v7/mediarouter/res/values-si-rLK/strings.xml
index baeac3e..e26a087 100644
--- a/v7/mediarouter/res/values-si-rLK/strings.xml
+++ b/v7/mediarouter/res/values-si-rLK/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"විකාශය"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"උපාංග සෙවීම"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"විසන්ධි කරන්න"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"විකාශ කිරීම නවත්වන්න"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"විකාශ කිරීම නවත්වන්න"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"වසන්න"</string>
<string name="mr_controller_play" msgid="683634565969987458">"ධාවනය කරන්න"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"විරාම ගන්වන්න"</string>
diff --git a/v7/mediarouter/res/values-sk/strings.xml b/v7/mediarouter/res/values-sk/strings.xml
index 4a0f4bf..92c7307 100644
--- a/v7/mediarouter/res/values-sk/strings.xml
+++ b/v7/mediarouter/res/values-sk/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Prenos do"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Vyhľadávanie zariadení"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Odpojiť"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Zastaviť prenos"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Zastaviť prenos"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Zavrieť"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Prehrať"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pozastaviť"</string>
diff --git a/v7/mediarouter/res/values-sl/strings.xml b/v7/mediarouter/res/values-sl/strings.xml
index 4ca2bdc..ba5609e 100644
--- a/v7/mediarouter/res/values-sl/strings.xml
+++ b/v7/mediarouter/res/values-sl/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Predvajanje prek:"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Iskanje naprav"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Prekini povezavo"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Ustavi predvajanje"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Ustavi predvajanje"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Zapri"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Predvajanje"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Zaustavi"</string>
diff --git a/v7/mediarouter/res/values-sq-rAL/strings.xml b/v7/mediarouter/res/values-sq-rAL/strings.xml
index 45e3a34..5ebfbab 100644
--- a/v7/mediarouter/res/values-sq-rAL/strings.xml
+++ b/v7/mediarouter/res/values-sq-rAL/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Transmeto te"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Gjetja e pajisjeve"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Shkëpute"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Ndalo transmetimin"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Ndalo transmetimin"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Mbyll"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Luaj"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pauzë"</string>
diff --git a/v7/mediarouter/res/values-sr/strings.xml b/v7/mediarouter/res/values-sr/strings.xml
index bddc045..0696486 100644
--- a/v7/mediarouter/res/values-sr/strings.xml
+++ b/v7/mediarouter/res/values-sr/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Пребацујте на"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Проналажење уређаја"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Прекини везу"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Заустави пребацивање"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Заустави пребацивање"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Затвори"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Пусти"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Паузирај"</string>
diff --git a/v7/mediarouter/res/values-sv/strings.xml b/v7/mediarouter/res/values-sv/strings.xml
index 9597bf9..9be5f57 100644
--- a/v7/mediarouter/res/values-sv/strings.xml
+++ b/v7/mediarouter/res/values-sv/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Casta till"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Letar efter enheter"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Koppla från"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Sluta casta"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Sluta casta"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Stäng"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Spela upp"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Pausa"</string>
diff --git a/v7/mediarouter/res/values-sw/strings.xml b/v7/mediarouter/res/values-sw/strings.xml
index f7ae8f5..989f420 100644
--- a/v7/mediarouter/res/values-sw/strings.xml
+++ b/v7/mediarouter/res/values-sw/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Tuma kwenye"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Inatafuta vifaa"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Ondoa"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Acha kutuma"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Acha kutuma"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Funga"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Cheza"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Sitisha"</string>
diff --git a/v7/mediarouter/res/values-ta-rIN/strings.xml b/v7/mediarouter/res/values-ta-rIN/strings.xml
index 0ef3fc3..decdebd 100644
--- a/v7/mediarouter/res/values-ta-rIN/strings.xml
+++ b/v7/mediarouter/res/values-ta-rIN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"இதில் திரையிடு"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"சாதனங்களைத் தேடுகிறது"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"தொடர்பைத் துண்டி"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"அனுப்புவதை நிறுத்து"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"அனுப்புவதை நிறுத்து"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"மூடும்"</string>
<string name="mr_controller_play" msgid="683634565969987458">"இயக்கும்"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"இடைநிறுத்தும்"</string>
diff --git a/v7/mediarouter/res/values-te-rIN/strings.xml b/v7/mediarouter/res/values-te-rIN/strings.xml
index c7ae34f..7412980 100644
--- a/v7/mediarouter/res/values-te-rIN/strings.xml
+++ b/v7/mediarouter/res/values-te-rIN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"దీనికి ప్రసారం చేయండి"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"పరికరాలను కనుగొంటోంది"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"డిస్కనెక్ట్ చేయి"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"ప్రసారాన్ని ఆపివేయి"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"ప్రసారాన్ని ఆపివేయి"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"మూసివేస్తుంది"</string>
<string name="mr_controller_play" msgid="683634565969987458">"ప్లే చేస్తుంది"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"పాజ్ చేస్తుంది"</string>
diff --git a/v7/mediarouter/res/values-th/strings.xml b/v7/mediarouter/res/values-th/strings.xml
index 219374c..231aa2e 100644
--- a/v7/mediarouter/res/values-th/strings.xml
+++ b/v7/mediarouter/res/values-th/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"แคสต์ไปยัง"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"กำลังค้นหาอุปกรณ์"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"ยกเลิกการเชื่อมต่อ"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"หยุดการแคสต์"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"หยุดการแคสต์"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"ปิด"</string>
<string name="mr_controller_play" msgid="683634565969987458">"เล่น"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"หยุดชั่วคราว"</string>
diff --git a/v7/mediarouter/res/values-tl/strings.xml b/v7/mediarouter/res/values-tl/strings.xml
index e2bb7c7..c128aba 100644
--- a/v7/mediarouter/res/values-tl/strings.xml
+++ b/v7/mediarouter/res/values-tl/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"I-cast sa"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Naghahanap ng mga device"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Idiskonekta"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Itigil ang pagca-cast"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Itigil ang pagca-cast"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Isara"</string>
<string name="mr_controller_play" msgid="683634565969987458">"I-play"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"I-pause"</string>
diff --git a/v7/mediarouter/res/values-tr/strings.xml b/v7/mediarouter/res/values-tr/strings.xml
index 187682f..6bc7072 100644
--- a/v7/mediarouter/res/values-tr/strings.xml
+++ b/v7/mediarouter/res/values-tr/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Şuraya yayınla:"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Cihazlar bulunuyor"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Bağlantıyı kes"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Yayını durdur"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Yayını durdur"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Kapat"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Oynat"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Duraklat"</string>
diff --git a/v7/mediarouter/res/values-uk/strings.xml b/v7/mediarouter/res/values-uk/strings.xml
index 8c2a16a..1f9104e 100644
--- a/v7/mediarouter/res/values-uk/strings.xml
+++ b/v7/mediarouter/res/values-uk/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Транслювати на"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Пошук пристроїв"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Відключити"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Припинити трансляцію"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Припинити трансляцію"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Закрити"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Відтворити"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Призупинити"</string>
diff --git a/v7/mediarouter/res/values-ur-rPK/strings.xml b/v7/mediarouter/res/values-ur-rPK/strings.xml
index 053373f..667fddc 100644
--- a/v7/mediarouter/res/values-ur-rPK/strings.xml
+++ b/v7/mediarouter/res/values-ur-rPK/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"اس میں کاسٹ کریں"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"آلات تلاش ہو رہے ہیں"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"غیر منسلک کریں"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"کاسٹ کرنا بند کریں"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"کاسٹ کرنا بند کریں"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"بند کریں"</string>
<string name="mr_controller_play" msgid="683634565969987458">"چلائیں"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"موقوف کریں"</string>
diff --git a/v7/mediarouter/res/values-uz-rUZ/strings.xml b/v7/mediarouter/res/values-uz-rUZ/strings.xml
index 9d1e455..91b5e49 100644
--- a/v7/mediarouter/res/values-uz-rUZ/strings.xml
+++ b/v7/mediarouter/res/values-uz-rUZ/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Quyidagiga translatsiya qilish:"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Qurilmalarni topish"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Ulanishni uzish"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Translatsiyani to‘xtatish"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Translatsiyani to‘xtatish"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Yopish"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Boshlash"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"To‘xtatib turish"</string>
diff --git a/v7/mediarouter/res/values-vi/strings.xml b/v7/mediarouter/res/values-vi/strings.xml
index 488b9f0..44e7a6a 100644
--- a/v7/mediarouter/res/values-vi/strings.xml
+++ b/v7/mediarouter/res/values-vi/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Truyền tới"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Tìm thiết bị"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Ngắt kết nối"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Dừng truyền"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Dừng truyền"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Đóng"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Phát"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Tạm dừng"</string>
diff --git a/v7/mediarouter/res/values-zh-rCN/strings.xml b/v7/mediarouter/res/values-zh-rCN/strings.xml
index c22a91c..15221e9 100644
--- a/v7/mediarouter/res/values-zh-rCN/strings.xml
+++ b/v7/mediarouter/res/values-zh-rCN/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"投射到"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"正在查找设备"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"断开连接"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"停止投射"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"停止投射"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"关闭"</string>
<string name="mr_controller_play" msgid="683634565969987458">"播放"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"暂停"</string>
diff --git a/v7/mediarouter/res/values-zh-rHK/strings.xml b/v7/mediarouter/res/values-zh-rHK/strings.xml
index d17469b..0aebac0 100644
--- a/v7/mediarouter/res/values-zh-rHK/strings.xml
+++ b/v7/mediarouter/res/values-zh-rHK/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"投放至"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"正在尋找裝置"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"中斷連線"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"停止投放"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"停止投放"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"關閉"</string>
<string name="mr_controller_play" msgid="683634565969987458">"播放"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"暫停"</string>
diff --git a/v7/mediarouter/res/values-zh-rTW/strings.xml b/v7/mediarouter/res/values-zh-rTW/strings.xml
index 1a71c84..aa9c75b 100644
--- a/v7/mediarouter/res/values-zh-rTW/strings.xml
+++ b/v7/mediarouter/res/values-zh-rTW/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"投放到"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"正在尋找裝置"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"中斷連線"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"停止投放"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"停止投放"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"關閉"</string>
<string name="mr_controller_play" msgid="683634565969987458">"播放"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"暫停"</string>
diff --git a/v7/mediarouter/res/values-zu/strings.xml b/v7/mediarouter/res/values-zu/strings.xml
index 860aa09..db82ffa 100644
--- a/v7/mediarouter/res/values-zu/strings.xml
+++ b/v7/mediarouter/res/values-zu/strings.xml
@@ -25,7 +25,7 @@
<string name="mr_chooser_title" msgid="414301941546135990">"Sakaza ku-"</string>
<string name="mr_chooser_searching" msgid="6349900579507521956">"Ithola amadivayisi"</string>
<string name="mr_controller_disconnect" msgid="1227264889412989580">"Nqamula"</string>
- <string name="mr_controller_stop" msgid="4570331844078181931">"Misa ukusakaza"</string>
+ <string name="mr_controller_stop_casting" msgid="4570331844078181931">"Misa ukusakaza"</string>
<string name="mr_controller_close_description" msgid="7333862312480583260">"Vala"</string>
<string name="mr_controller_play" msgid="683634565969987458">"Dlala"</string>
<string name="mr_controller_pause" msgid="5451884435510905406">"Misa isikhashana"</string>
diff --git a/v7/mediarouter/res/values/attrs.xml b/v7/mediarouter/res/values/attrs.xml
index c618fd8..10d1c2c 100644
--- a/v7/mediarouter/res/values/attrs.xml
+++ b/v7/mediarouter/res/values/attrs.xml
@@ -32,6 +32,7 @@
<attr name="mediaRouteCloseDrawable" format="reference" />
<attr name="mediaRoutePlayDrawable" format="reference" />
<attr name="mediaRoutePauseDrawable" format="reference" />
+ <attr name="mediaRouteStopDrawable" format="reference" />
<attr name="mediaRouteAudioTrackDrawable" format="reference" />
<attr name="mediaRouteDefaultIconDrawable" format="reference" />
<attr name="mediaRouteTvIconDrawable" format="reference" />
diff --git a/v7/mediarouter/res/values/strings.xml b/v7/mediarouter/res/values/strings.xml
index bff7176..630a482 100644
--- a/v7/mediarouter/res/values/strings.xml
+++ b/v7/mediarouter/res/values/strings.xml
@@ -47,7 +47,7 @@
<string name="mr_controller_disconnect">Disconnect</string>
<!-- Button to stop playback and disconnect from a media route. [CHAR LIMIT=30] -->
- <string name="mr_controller_stop">Stop casting</string>
+ <string name="mr_controller_stop_casting">Stop casting</string>
<!-- Content description for accessibility (not shown on the screen): dialog close button. [CHAR LIMIT=NONE] -->
<string name="mr_controller_close_description">Close</string>
@@ -58,6 +58,9 @@
<!-- Content description for accessibility (not shown on the screen): media pause button. [CHAR LIMIT=NONE] -->
<string name="mr_controller_pause">Pause</string>
+ <!-- Content description for accessibility (not shown on the screen): media stop button. [CHAR LIMIT=NONE] -->
+ <string name="mr_controller_stop">Stop</string>
+
<!-- Content description for accessibility (not shown on the screen): group expand button. Pressing button shows group members of a selected route group. [CHAR LIMIT=NONE] -->
<string name="mr_controller_expand_group">Expand</string>
diff --git a/v7/mediarouter/res/values/themes.xml b/v7/mediarouter/res/values/themes.xml
index 1eb4bfd..8c6e97a 100644
--- a/v7/mediarouter/res/values/themes.xml
+++ b/v7/mediarouter/res/values/themes.xml
@@ -23,6 +23,7 @@
<item name="mediaRouteCloseDrawable">@drawable/mr_dialog_close_dark</item>
<item name="mediaRoutePlayDrawable">@drawable/mr_media_play_dark</item>
<item name="mediaRoutePauseDrawable">@drawable/mr_media_pause_dark</item>
+ <item name="mediaRouteStopDrawable">@drawable/mr_media_stop_dark</item>
<item name="mediaRouteAudioTrackDrawable">@drawable/mr_vol_type_audiotrack_dark</item>
<item name="mediaRouteDefaultIconDrawable">@drawable/ic_mr_button_disconnected_dark</item>
<item name="mediaRouteTvIconDrawable">@drawable/ic_vol_type_tv_dark</item>
@@ -43,6 +44,7 @@
<item name="mediaRouteCloseDrawable">@drawable/mr_dialog_close_light</item>
<item name="mediaRoutePlayDrawable">@drawable/mr_media_play_light</item>
<item name="mediaRoutePauseDrawable">@drawable/mr_media_pause_light</item>
+ <item name="mediaRouteStopDrawable">@drawable/mr_media_stop_light</item>
<item name="mediaRouteAudioTrackDrawable">@drawable/mr_vol_type_audiotrack_light</item>
<item name="mediaRouteDefaultIconDrawable">@drawable/ic_mr_button_grey</item>
<item name="mediaRouteTvIconDrawable">@drawable/ic_vol_type_tv_light</item>
@@ -59,12 +61,14 @@
<style name="ThemeOverlay.MediaRouter.Dark" parent="ThemeOverlay.AppCompat.Dark">
<item name="mediaRoutePlayDrawable">@drawable/mr_media_play_dark</item>
<item name="mediaRoutePauseDrawable">@drawable/mr_media_pause_dark</item>
+ <item name="mediaRouteStopDrawable">@drawable/mr_media_stop_dark</item>
<item name="mediaRouteAudioTrackDrawable">@drawable/mr_vol_type_audiotrack_dark</item>
</style>
<style name="ThemeOverlay.MediaRouter.Light" parent="ThemeOverlay.AppCompat.Light">
<item name="mediaRoutePlayDrawable">@drawable/mr_media_play_light</item>
<item name="mediaRoutePauseDrawable">@drawable/mr_media_pause_light</item>
+ <item name="mediaRouteStopDrawable">@drawable/mr_media_stop_light</item>
<item name="mediaRouteAudioTrackDrawable">@drawable/mr_vol_type_audiotrack_light</item>
</style>
diff --git a/v7/mediarouter/src/android/support/v7/app/MediaRouteControllerDialog.java b/v7/mediarouter/src/android/support/v7/app/MediaRouteControllerDialog.java
index 961e37e..4d40610 100644
--- a/v7/mediarouter/src/android/support/v7/app/MediaRouteControllerDialog.java
+++ b/v7/mediarouter/src/android/support/v7/app/MediaRouteControllerDialog.java
@@ -16,6 +16,11 @@
package android.support.v7.app;
+import static android.support.v4.media.session.PlaybackStateCompat.ACTION_PAUSE;
+import static android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY;
+import static android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY_PAUSE;
+import static android.support.v4.media.session.PlaybackStateCompat.ACTION_STOP;
+
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
@@ -67,7 +72,6 @@
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
-
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -119,7 +123,7 @@
private Button mDisconnectButton;
private Button mStopCastingButton;
- private ImageButton mPlayPauseButton;
+ private ImageButton mPlaybackControlButton;
private ImageButton mCloseButton;
private MediaRouteExpandCollapseButton mGroupExpandCollapseButton;
@@ -351,7 +355,7 @@
mDisconnectButton.setOnClickListener(listener);
mStopCastingButton = (Button) findViewById(BUTTON_STOP_RES_ID);
- mStopCastingButton.setText(R.string.mr_controller_stop);
+ mStopCastingButton.setText(R.string.mr_controller_stop_casting);
mStopCastingButton.setTextColor(color);
mStopCastingButton.setOnClickListener(listener);
@@ -388,8 +392,8 @@
mPlaybackControlLayout = (RelativeLayout) findViewById(R.id.mr_playback_control);
mTitleView = (TextView) findViewById(R.id.mr_control_title);
mSubtitleView = (TextView) findViewById(R.id.mr_control_subtitle);
- mPlayPauseButton = (ImageButton) findViewById(R.id.mr_control_play_pause);
- mPlayPauseButton.setOnClickListener(listener);
+ mPlaybackControlButton = (ImageButton) findViewById(R.id.mr_control_playback_ctrl);
+ mPlaybackControlButton.setOnClickListener(listener);
mVolumeControlLayout = (LinearLayout) findViewById(R.id.mr_volume_control);
mVolumeControlLayout.setVisibility(View.GONE);
@@ -1006,30 +1010,47 @@
if (mState != null) {
boolean isPlaying = mState.getState() == PlaybackStateCompat.STATE_BUFFERING
|| mState.getState() == PlaybackStateCompat.STATE_PLAYING;
- boolean supportsPlay = (mState.getActions() & (PlaybackStateCompat.ACTION_PLAY
- | PlaybackStateCompat.ACTION_PLAY_PAUSE)) != 0;
- boolean supportsPause = (mState.getActions() & (PlaybackStateCompat.ACTION_PAUSE
- | PlaybackStateCompat.ACTION_PLAY_PAUSE)) != 0;
- Context playPauseButtonContext = mPlayPauseButton.getContext();
- if (isPlaying && supportsPause) {
- mPlayPauseButton.setVisibility(View.VISIBLE);
- mPlayPauseButton.setImageResource(MediaRouterThemeHelper.getThemeResource(
- playPauseButtonContext, R.attr.mediaRoutePauseDrawable));
- mPlayPauseButton.setContentDescription(playPauseButtonContext.getResources()
- .getText(R.string.mr_controller_pause));
- } else if (!isPlaying && supportsPlay) {
- mPlayPauseButton.setVisibility(View.VISIBLE);
- mPlayPauseButton.setImageResource(MediaRouterThemeHelper.getThemeResource(
- playPauseButtonContext, R.attr.mediaRoutePlayDrawable));
- mPlayPauseButton.setContentDescription(playPauseButtonContext.getResources()
- .getText(R.string.mr_controller_play));
+ Context playbackControlButtonContext = mPlaybackControlButton.getContext();
+ boolean visible = true;
+ int iconDrawableAttr = 0;
+ int iconDescResId = 0;
+ if (isPlaying && isPauseActionSupported()) {
+ iconDrawableAttr = R.attr.mediaRoutePauseDrawable;
+ iconDescResId = R.string.mr_controller_pause;
+ } else if (isPlaying && isStopActionSupported()) {
+ iconDrawableAttr = R.attr.mediaRouteStopDrawable;
+ iconDescResId = R.string.mr_controller_stop;
+ } else if (!isPlaying && isPlayActionSupported()) {
+ iconDrawableAttr = R.attr.mediaRoutePlayDrawable;
+ iconDescResId = R.string.mr_controller_play;
} else {
- mPlayPauseButton.setVisibility(View.GONE);
+ visible = false;
+ }
+ mPlaybackControlButton.setVisibility(visible ? View.VISIBLE : View.GONE);
+ if (visible) {
+ mPlaybackControlButton.setImageResource(
+ MediaRouterThemeHelper.getThemeResource(
+ playbackControlButtonContext, iconDrawableAttr));
+ mPlaybackControlButton.setContentDescription(
+ playbackControlButtonContext.getResources()
+ .getText(iconDescResId));
}
}
}
}
+ private boolean isPlayActionSupported() {
+ return (mState.getActions() & (ACTION_PLAY | ACTION_PLAY_PAUSE)) != 0;
+ }
+
+ private boolean isPauseActionSupported() {
+ return (mState.getActions() & (ACTION_PAUSE | ACTION_PLAY_PAUSE)) != 0;
+ }
+
+ private boolean isStopActionSupported() {
+ return (mState.getActions() & ACTION_STOP) != 0;
+ }
+
boolean isVolumeControlAvailable(MediaRouter.RouteInfo route) {
return mVolumeControlEnabled && route.getVolumeHandling()
== MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE;
@@ -1172,23 +1193,28 @@
MediaRouter.UNSELECT_REASON_DISCONNECTED);
}
dismiss();
- } else if (id == R.id.mr_control_play_pause) {
+ } else if (id == R.id.mr_control_playback_ctrl) {
if (mMediaController != null && mState != null) {
boolean isPlaying = mState.getState() == PlaybackStateCompat.STATE_PLAYING;
- if (isPlaying) {
+ int actionDescResId = 0;
+ if (isPlaying && isPauseActionSupported()) {
mMediaController.getTransportControls().pause();
- } else {
+ actionDescResId = R.string.mr_controller_pause;
+ } else if (isPlaying && isStopActionSupported()) {
+ mMediaController.getTransportControls().stop();
+ actionDescResId = R.string.mr_controller_stop;
+ } else if (!isPlaying && isPlayActionSupported()){
mMediaController.getTransportControls().play();
+ actionDescResId = R.string.mr_controller_play;
}
// Announce the action for accessibility.
- if (mAccessibilityManager != null && mAccessibilityManager.isEnabled()) {
+ if (mAccessibilityManager != null && mAccessibilityManager.isEnabled()
+ && actionDescResId != 0) {
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEventCompat.TYPE_ANNOUNCEMENT);
event.setPackageName(mContext.getPackageName());
event.setClassName(getClass().getName());
- int resId = isPlaying ?
- R.string.mr_controller_pause : R.string.mr_controller_play;
- event.getText().add(mContext.getString(resId));
+ event.getText().add(mContext.getString(actionDescResId));
mAccessibilityManager.sendAccessibilityEvent(event);
}
}
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java
index 4437805..cc6762a 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java
@@ -51,8 +51,11 @@
import android.os.Build;
import android.os.SystemClock;
import android.support.annotation.Nullable;
+import android.support.test.filters.FlakyTest;
+import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
import android.support.test.filters.SdkSuppress;
+import android.support.test.filters.Suppress;
import android.support.test.runner.AndroidJUnit4;
import android.support.v4.view.ViewCompat;
import android.support.v7.util.TouchUtils;
@@ -1431,7 +1434,10 @@
}
}
+ @Suppress
+ @FlakyTest(bugId = 33949798)
@Test
+ @LargeTest
public void hasPendingUpdatesBeforeFirstLayout() throws Throwable {
RecyclerView recyclerView = new RecyclerView(getActivity());
TestLayoutManager layoutManager = new DumbLayoutManager();
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerBaseConfigSetTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerBaseConfigSetTest.java
index b9bfe40..f231c44 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerBaseConfigSetTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerBaseConfigSetTest.java
@@ -34,7 +34,10 @@
import android.os.Looper;
import android.os.Parcel;
import android.os.Parcelable;
+import android.support.test.filters.FlakyTest;
+import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest;
+import android.support.test.filters.Suppress;
import android.support.v4.view.ViewCompat;
import android.util.Log;
import android.view.View;
@@ -739,7 +742,10 @@
consistentRelayoutTest(mConfig, true);
}
+ @Suppress
+ @FlakyTest(bugId = 34158822)
@Test
+ @LargeTest
public void dontRecycleViewsTranslatedOutOfBoundsFromStart() throws Throwable {
final Config config = ((Config) mConfig.clone()).itemCount(1000);
setupByConfig(config);