give error feedback to the user
This commit is contained in:
parent
7e584d95f8
commit
f8266d0181
|
@ -186,7 +186,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,7 +347,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,7 +430,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,7 +507,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -585,7 +585,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -665,7 +665,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -748,7 +748,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -806,7 +806,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) { return false; }
|
public boolean onMediaPlayerInfo(int code, int resourceId) { return false; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerError(Object inObj, int what, int extra) {
|
public boolean onMediaPlayerError(Object inObj, int what, int extra) {
|
||||||
|
@ -884,7 +884,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -999,7 +999,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1091,7 +1091,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1195,7 +1195,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, int resourceId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -125,8 +125,8 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postStatusMsg(int msg) {
|
public void postStatusMsg(int msg, boolean showToast) {
|
||||||
MediaplayerActivity.this.postStatusMsg(msg);
|
MediaplayerActivity.this.postStatusMsg(msg, showToast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -585,7 +585,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
|
||||||
*/
|
*/
|
||||||
protected abstract void onAwaitingVideoSurface();
|
protected abstract void onAwaitingVideoSurface();
|
||||||
|
|
||||||
protected abstract void postStatusMsg(int resId);
|
protected abstract void postStatusMsg(int resId, boolean showToast);
|
||||||
|
|
||||||
protected abstract void clearStatusMsg();
|
protected abstract void clearStatusMsg();
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ import android.widget.AdapterView;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.viewpagerindicator.CirclePageIndicator;
|
import com.viewpagerindicator.CirclePageIndicator;
|
||||||
|
|
||||||
|
@ -185,12 +186,15 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity implem
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void postStatusMsg(int resId) {
|
protected void postStatusMsg(int resId, boolean showToast) {
|
||||||
if (resId == R.string.player_preparing_msg
|
if (resId == R.string.player_preparing_msg
|
||||||
|| resId == R.string.player_seeking_msg
|
|| resId == R.string.player_seeking_msg
|
||||||
|| resId == R.string.player_buffering_msg) {
|
|| resId == R.string.player_buffering_msg) {
|
||||||
// TODO Show progress bar here
|
// TODO Show progress bar here
|
||||||
}
|
}
|
||||||
|
if (showToast) {
|
||||||
|
Toast.makeText(this, resId, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -305,7 +309,7 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity implem
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onBufferStart() {
|
protected void onBufferStart() {
|
||||||
postStatusMsg(R.string.player_buffering_msg);
|
postStatusMsg(R.string.player_buffering_msg, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -164,7 +164,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void postStatusMsg(int resId) {
|
protected void postStatusMsg(int resId, boolean showToast) {
|
||||||
if (resId == R.string.player_preparing_msg) {
|
if (resId == R.string.player_preparing_msg) {
|
||||||
progressIndicator.setVisibility(View.VISIBLE);
|
progressIndicator.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -848,7 +848,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
|
||||||
(mp, what, extra) -> genericInfoListener(what);
|
(mp, what, extra) -> genericInfoListener(what);
|
||||||
|
|
||||||
private boolean genericInfoListener(int what) {
|
private boolean genericInfoListener(int what) {
|
||||||
return callback.onMediaPlayerInfo(what);
|
return callback.onMediaPlayerInfo(what, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final MediaPlayer.OnSpeedAdjustmentAvailableChangedListener audioSetSpeedAbilityListener =
|
private final MediaPlayer.OnSpeedAdjustmentAvailableChangedListener audioSetSpeedAbilityListener =
|
||||||
|
|
|
@ -23,6 +23,7 @@ import android.os.IBinder;
|
||||||
import android.os.Vibrator;
|
import android.os.Vibrator;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.annotation.StringRes;
|
||||||
import android.support.v4.media.MediaMetadataCompat;
|
import android.support.v4.media.MediaMetadataCompat;
|
||||||
import android.support.v4.media.session.MediaSessionCompat;
|
import android.support.v4.media.session.MediaSessionCompat;
|
||||||
import android.support.v4.media.session.PlaybackStateCompat;
|
import android.support.v4.media.session.PlaybackStateCompat;
|
||||||
|
@ -170,6 +171,11 @@ public class PlaybackService extends Service {
|
||||||
*/
|
*/
|
||||||
public static final int NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED = 9;
|
public static final int NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED = 9;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the user (with provided String resource id)
|
||||||
|
*/
|
||||||
|
public static final int NOTIFICATION_TYPE_SHOW_TOAST = 10;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returned by getPositionSafe() or getDurationSafe() if the playbackService
|
* Returned by getPositionSafe() or getDurationSafe() if the playbackService
|
||||||
* is in an invalid state.
|
* is in an invalid state.
|
||||||
|
@ -641,7 +647,7 @@ public class PlaybackService extends Service {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onMediaPlayerInfo(int code) {
|
public boolean onMediaPlayerInfo(int code, @StringRes int resourceId) {
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
|
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
|
||||||
sendNotificationBroadcast(NOTIFICATION_TYPE_BUFFER_START, 0);
|
sendNotificationBroadcast(NOTIFICATION_TYPE_BUFFER_START, 0);
|
||||||
|
@ -649,6 +655,12 @@ public class PlaybackService extends Service {
|
||||||
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
|
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
|
||||||
sendNotificationBroadcast(NOTIFICATION_TYPE_BUFFER_END, 0);
|
sendNotificationBroadcast(NOTIFICATION_TYPE_BUFFER_END, 0);
|
||||||
return true;
|
return true;
|
||||||
|
case RemotePSMP.CAST_ERROR:
|
||||||
|
sendNotificationBroadcast(NOTIFICATION_TYPE_SHOW_TOAST, resourceId);
|
||||||
|
return true;
|
||||||
|
case RemotePSMP.CAST_ERROR_PRIORITY_HIGH:
|
||||||
|
Toast.makeText(PlaybackService.this, resourceId, Toast.LENGTH_SHORT).show();
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package de.danoeh.antennapod.core.service.playback;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.annotation.StringRes;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
import android.view.SurfaceHolder;
|
import android.view.SurfaceHolder;
|
||||||
|
@ -323,7 +324,7 @@ public abstract class PlaybackServiceMediaPlayer {
|
||||||
|
|
||||||
void reloadUI();
|
void reloadUI();
|
||||||
|
|
||||||
boolean onMediaPlayerInfo(int code);
|
boolean onMediaPlayerInfo(int code, @StringRes int resourceId);
|
||||||
|
|
||||||
boolean onMediaPlayerError(Object inObj, int what, int extra);
|
boolean onMediaPlayerError(Object inObj, int what, int extra);
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ import com.google.android.libraries.cast.companionlibrary.cast.exceptions.Transi
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
import de.danoeh.antennapod.core.R;
|
||||||
import de.danoeh.antennapod.core.cast.CastConsumer;
|
import de.danoeh.antennapod.core.cast.CastConsumer;
|
||||||
import de.danoeh.antennapod.core.cast.CastManager;
|
import de.danoeh.antennapod.core.cast.CastManager;
|
||||||
import de.danoeh.antennapod.core.cast.CastUtils;
|
import de.danoeh.antennapod.core.cast.CastUtils;
|
||||||
|
@ -34,6 +35,10 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
|
||||||
|
|
||||||
public static final String TAG = "RemotePSMP";
|
public static final String TAG = "RemotePSMP";
|
||||||
|
|
||||||
|
public static final int CAST_ERROR = 3001;
|
||||||
|
|
||||||
|
public static final int CAST_ERROR_PRIORITY_HIGH = 3005;
|
||||||
|
|
||||||
private final CastManager castMgr;
|
private final CastManager castMgr;
|
||||||
|
|
||||||
private volatile Playable media;
|
private volatile Playable media;
|
||||||
|
@ -120,13 +125,18 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
|
||||||
callback.endPlayback(media, true, false, false);
|
callback.endPlayback(media, true, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailed(int resourceId, int statusCode) {
|
||||||
|
callback.onMediaPlayerInfo(CAST_ERROR, resourceId);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private void setBuffering(boolean buffering) {
|
private void setBuffering(boolean buffering) {
|
||||||
if (buffering && isBuffering.compareAndSet(false, true)) {
|
if (buffering && isBuffering.compareAndSet(false, true)) {
|
||||||
callback.onMediaPlayerInfo(MediaPlayer.MEDIA_INFO_BUFFERING_START);
|
callback.onMediaPlayerInfo(MediaPlayer.MEDIA_INFO_BUFFERING_START, 0);
|
||||||
} else if (!buffering && isBuffering.compareAndSet(true, false)) {
|
} else if (!buffering && isBuffering.compareAndSet(true, false)) {
|
||||||
callback.onMediaPlayerInfo(MediaPlayer.MEDIA_INFO_BUFFERING_END);
|
callback.onMediaPlayerInfo(MediaPlayer.MEDIA_INFO_BUFFERING_END, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,6 +228,8 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
|
||||||
case MediaStatus.IDLE_REASON_ERROR:
|
case MediaStatus.IDLE_REASON_ERROR:
|
||||||
Log.w(TAG, "Got an error status from the Chromecast. Skipping, if possible, to the next episode...");
|
Log.w(TAG, "Got an error status from the Chromecast. Skipping, if possible, to the next episode...");
|
||||||
setPlayerStatus(PlayerStatus.INDETERMINATE, currentMedia);
|
setPlayerStatus(PlayerStatus.INDETERMINATE, currentMedia);
|
||||||
|
callback.onMediaPlayerInfo(CAST_ERROR_PRIORITY_HIGH,
|
||||||
|
R.string.cast_failed_media_error_skipping);
|
||||||
endPlaybackCall.endPlayback(currentMedia, startWhenPrepared.get(), true, false);
|
endPlaybackCall.endPlayback(currentMedia, startWhenPrepared.get(), true, false);
|
||||||
// endPlayback already updates the UI, so no need to trigger it ourselves
|
// endPlayback already updates the UI, so no need to trigger it ourselves
|
||||||
updateUI = false;
|
updateUI = false;
|
||||||
|
@ -251,6 +263,8 @@ public class RemotePSMP extends PlaybackServiceMediaPlayer {
|
||||||
private void playMediaObject(@NonNull final Playable playable, final boolean forceReset, final boolean stream, final boolean startWhenPrepared, final boolean prepareImmediately) {
|
private void playMediaObject(@NonNull final Playable playable, final boolean forceReset, final boolean stream, final boolean startWhenPrepared, final boolean prepareImmediately) {
|
||||||
if (!CastUtils.isCastable(playable)) {
|
if (!CastUtils.isCastable(playable)) {
|
||||||
Log.d(TAG, "media provided is not compatible with cast device");
|
Log.d(TAG, "media provided is not compatible with cast device");
|
||||||
|
callback.onMediaPlayerInfo(CAST_ERROR_PRIORITY_HIGH, R.string.cast_not_castable);
|
||||||
|
callback.endPlayback(playable, startWhenPrepared, true, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import de.danoeh.antennapod.core.R;
|
||||||
|
|
||||||
/** Utility class for MediaPlayer errors. */
|
/** Utility class for MediaPlayer errors. */
|
||||||
public class MediaPlayerError {
|
public class MediaPlayerError {
|
||||||
|
|
||||||
/** Get a human-readable string for a specific error code. */
|
/** Get a human-readable string for a specific error code. */
|
||||||
public static String getErrorString(Context context, int code) {
|
public static String getErrorString(Context context, int code) {
|
||||||
int resId;
|
int resId;
|
||||||
|
|
|
@ -338,6 +338,9 @@ public abstract class PlaybackController {
|
||||||
break;
|
break;
|
||||||
case PlaybackService.NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED:
|
case PlaybackService.NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED:
|
||||||
onSetSpeedAbilityChanged();
|
onSetSpeedAbilityChanged();
|
||||||
|
break;
|
||||||
|
case PlaybackService.NOTIFICATION_TYPE_SHOW_TOAST:
|
||||||
|
postStatusMsg(code, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,7 +419,7 @@ public abstract class PlaybackController {
|
||||||
Log.d(TAG, "status: " + status.toString());
|
Log.d(TAG, "status: " + status.toString());
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case ERROR:
|
case ERROR:
|
||||||
postStatusMsg(R.string.player_error_msg);
|
postStatusMsg(R.string.player_error_msg, false);
|
||||||
handleError(MediaPlayer.MEDIA_ERROR_UNKNOWN);
|
handleError(MediaPlayer.MEDIA_ERROR_UNKNOWN);
|
||||||
break;
|
break;
|
||||||
case PAUSED:
|
case PAUSED:
|
||||||
|
@ -442,7 +445,7 @@ public abstract class PlaybackController {
|
||||||
updatePlayButtonAppearance(pauseResource, pauseText);
|
updatePlayButtonAppearance(pauseResource, pauseText);
|
||||||
break;
|
break;
|
||||||
case PREPARING:
|
case PREPARING:
|
||||||
postStatusMsg(R.string.player_preparing_msg);
|
postStatusMsg(R.string.player_preparing_msg, false);
|
||||||
checkMediaInfoLoaded();
|
checkMediaInfoLoaded();
|
||||||
if (playbackService != null) {
|
if (playbackService != null) {
|
||||||
if (playbackService.isStartWhenPrepared()) {
|
if (playbackService.isStartWhenPrepared()) {
|
||||||
|
@ -453,16 +456,16 @@ public abstract class PlaybackController {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case STOPPED:
|
case STOPPED:
|
||||||
postStatusMsg(R.string.player_stopped_msg);
|
postStatusMsg(R.string.player_stopped_msg, false);
|
||||||
break;
|
break;
|
||||||
case PREPARED:
|
case PREPARED:
|
||||||
checkMediaInfoLoaded();
|
checkMediaInfoLoaded();
|
||||||
postStatusMsg(R.string.player_ready_msg);
|
postStatusMsg(R.string.player_ready_msg, false);
|
||||||
updatePlayButtonAppearance(playResource, playText);
|
updatePlayButtonAppearance(playResource, playText);
|
||||||
break;
|
break;
|
||||||
case SEEKING:
|
case SEEKING:
|
||||||
onPositionObserverUpdate();
|
onPositionObserverUpdate();
|
||||||
postStatusMsg(R.string.player_seeking_msg);
|
postStatusMsg(R.string.player_seeking_msg, false);
|
||||||
break;
|
break;
|
||||||
case INITIALIZED:
|
case INITIALIZED:
|
||||||
checkMediaInfoLoaded();
|
checkMediaInfoLoaded();
|
||||||
|
@ -488,7 +491,7 @@ public abstract class PlaybackController {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postStatusMsg(int msg) {}
|
public void postStatusMsg(int msg, boolean showToast) {}
|
||||||
|
|
||||||
public void clearStatusMsg() {}
|
public void clearStatusMsg() {}
|
||||||
|
|
||||||
|
|
|
@ -619,6 +619,7 @@
|
||||||
<!-- Casting -->
|
<!-- Casting -->
|
||||||
<string name="cast_media_route_menu_title">Play on…</string>
|
<string name="cast_media_route_menu_title">Play on…</string>
|
||||||
<string name="cast_disconnect_label">Disconnect the cast session</string>
|
<string name="cast_disconnect_label">Disconnect the cast session</string>
|
||||||
|
<string name="cast_not_castable">Media selected is not compatible with cast device</string>
|
||||||
<string name="cast_failed_to_play">Failed to start the playback of media</string>
|
<string name="cast_failed_to_play">Failed to start the playback of media</string>
|
||||||
<string name="cast_failed_to_stop">Failed to stop the playback of media</string>
|
<string name="cast_failed_to_stop">Failed to stop the playback of media</string>
|
||||||
<string name="cast_failed_to_pause">Failed to pause the playback of media</string>
|
<string name="cast_failed_to_pause">Failed to pause the playback of media</string>
|
||||||
|
@ -630,4 +631,5 @@
|
||||||
<string name="cast_failed_status_request">Failed to sync up with the cast device</string>
|
<string name="cast_failed_status_request">Failed to sync up with the cast device</string>
|
||||||
<string name="cast_failed_seek">Failed to seek to the new position on the cast device</string>
|
<string name="cast_failed_seek">Failed to seek to the new position on the cast device</string>
|
||||||
<string name="cast_failed_receiver_player_error">Receiver player has encountered a severe error</string>
|
<string name="cast_failed_receiver_player_error">Receiver player has encountered a severe error</string>
|
||||||
|
<string name="cast_failed_media_error_skipping">Error playing media. Skipping…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in New Issue