diff --git a/core_settings.gradle b/core_settings.gradle index 7a8320b1a1..20a7c87bde 100644 --- a/core_settings.gradle +++ b/core_settings.gradle @@ -28,6 +28,7 @@ include modulePrefix + 'extension-ffmpeg' include modulePrefix + 'extension-flac' include modulePrefix + 'extension-gvr' include modulePrefix + 'extension-ima' +include modulePrefix + 'extension-cast' include modulePrefix + 'extension-mediasession' include modulePrefix + 'extension-okhttp' include modulePrefix + 'extension-opus' @@ -46,6 +47,7 @@ project(modulePrefix + 'extension-ffmpeg').projectDir = new File(rootDir, 'exten project(modulePrefix + 'extension-flac').projectDir = new File(rootDir, 'extensions/flac') project(modulePrefix + 'extension-gvr').projectDir = new File(rootDir, 'extensions/gvr') project(modulePrefix + 'extension-ima').projectDir = new File(rootDir, 'extensions/ima') +project(modulePrefix + 'extension-cast').projectDir = new File(rootDir, 'extensions/cast') project(modulePrefix + 'extension-mediasession').projectDir = new File(rootDir, 'extensions/mediasession') project(modulePrefix + 'extension-okhttp').projectDir = new File(rootDir, 'extensions/okhttp') project(modulePrefix + 'extension-opus').projectDir = new File(rootDir, 'extensions/opus') diff --git a/demos/main/proguard-rules.txt b/demos/main/proguard-rules.txt new file mode 100644 index 0000000000..de5e0a4203 --- /dev/null +++ b/demos/main/proguard-rules.txt @@ -0,0 +1,6 @@ +# Proguard rules specific to the main demo app. + +# Constructor accessed via reflection in PlayerActivity +-keepclassmembers class com.google.android.exoplayer2.ext.ima.ImaAdsLoader { + (android.content.Context, android.net.Uri); +} diff --git a/demos/main/src/main/proguard-rules.txt b/demos/main/src/main/proguard-rules.txt new file mode 100644 index 0000000000..de5e0a4203 --- /dev/null +++ b/demos/main/src/main/proguard-rules.txt @@ -0,0 +1,6 @@ +# Proguard rules specific to the main demo app. + +# Constructor accessed via reflection in PlayerActivity +-keepclassmembers class com.google.android.exoplayer2.ext.ima.ImaAdsLoader { + (android.content.Context, android.net.Uri); +} diff --git a/extensions/ima/proguard-rules.txt b/extensions/ima/proguard-rules.txt new file mode 100644 index 0000000000..feef3daf7a --- /dev/null +++ b/extensions/ima/proguard-rules.txt @@ -0,0 +1,6 @@ +# Proguard rules specific to the IMA extension. + +-keep class com.google.ads.interactivemedia.** { *; } +-keep interface com.google.ads.interactivemedia.** { *; } +-keep class com.google.obf.** { *; } +-keep interface com.google.obf.** { *; } diff --git a/extensions/ima/src/main/proguard-rules.txt b/extensions/ima/src/main/proguard-rules.txt new file mode 100644 index 0000000000..feef3daf7a --- /dev/null +++ b/extensions/ima/src/main/proguard-rules.txt @@ -0,0 +1,6 @@ +# Proguard rules specific to the IMA extension. + +-keep class com.google.ads.interactivemedia.** { *; } +-keep interface com.google.ads.interactivemedia.** { *; } +-keep class com.google.obf.** { *; } +-keep interface com.google.obf.** { *; } diff --git a/library/core/proguard-rules.txt b/library/core/proguard-rules.txt new file mode 100644 index 0000000000..9eefd64d62 --- /dev/null +++ b/library/core/proguard-rules.txt @@ -0,0 +1,25 @@ +# Proguard rules specific to the core module. + +# Constructors accessed via reflection in DefaultRenderersFactory +-keepclassmembers class com.google.android.exoplayer2.ext.vp9.LibvpxVideoRenderer { + (boolean, long, android.os.Handler, com.google.android.exoplayer2.video.VideoRendererEventListener, int); +} +-keepclassmembers class com.google.android.exoplayer2.ext.opus.LibopusAudioRenderer { + (android.os.Handler, com.google.android.exoplayer2.audio.AudioRendererEventListener, com.google.android.exoplayer2.audio.AudioProcessor[]); +} +-keepclassmembers class com.google.android.exoplayer2.ext.flac.LibflacAudioRenderer { + (android.os.Handler, com.google.android.exoplayer2.audio.AudioRendererEventListener, com.google.android.exoplayer2.audio.AudioProcessor[]); +} +-keepclassmembers class com.google.android.exoplayer2.ext.ffmpeg.FfmpegAudioRenderer { + (android.os.Handler, com.google.android.exoplayer2.audio.AudioRendererEventListener, com.google.android.exoplayer2.audio.AudioProcessor[]); +} + +# Constructors accessed via reflection in DefaultExtractorsFactory +-keepclassmembers class com.google.android.exoplayer2.ext.flac.FlacExtractor { + (); +} + +# Constructors accessed via reflection in DefaultDataSource +-keepclassmembers class com.google.android.exoplayer2.ext.rtmp.RtmpDataSource { + (); +} diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index 977620c5de..f955b000db 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -72,10 +72,10 @@ import java.util.Collections; private static final int MSG_PERIOD_PREPARED = 9; private static final int MSG_SOURCE_CONTINUE_LOADING_REQUESTED = 10; private static final int MSG_TRACK_SELECTION_INVALIDATED = 11; - private static final int MSG_SET_REPEAT_MODE = 12; - private static final int MSG_SET_SHUFFLE_ENABLED = 13; - private static final int MSG_SEND_MESSAGE = 14; - private static final int MSG_SEND_MESSAGE_TO_TARGET_THREAD = 15; + private static final int MSG_CUSTOM = 12; + private static final int MSG_SET_REPEAT_MODE = 13; + private static final int MSG_SET_SHUFFLE_ENABLED = 14; + private static final int MSG_SEND_MESSAGE_TO_TARGET = 15; private static final int PREPARING_SOURCE_INTERVAL_MS = 10; private static final int RENDERING_INTERVAL_MS = 10; @@ -104,7 +104,7 @@ import java.util.Collections; private final boolean retainBackBufferFromKeyframe; private final DefaultMediaClock mediaClock; private final PlaybackInfoUpdate playbackInfoUpdate; - private final ArrayList pendingMessages; + private final ArrayList customMessageInfos; private final Clock clock; private final MediaPeriodQueue queue; @@ -123,7 +123,7 @@ import java.util.Collections; private int pendingPrepareCount; private SeekPosition pendingInitialSeekPosition; private long rendererPositionUs; - private int nextPendingMessageIndex; + private int nextCustomMessageInfoIndex; public ExoPlayerImplInternal( Renderer[] renderers, @@ -162,7 +162,7 @@ import java.util.Collections; rendererCapabilities[i] = renderers[i].getCapabilities(); } mediaClock = new DefaultMediaClock(this, clock); - pendingMessages = new ArrayList<>(); + customMessageInfos = new ArrayList<>(); enabledRenderers = new Renderer[0]; window = new Timeline.Window(); period = new Timeline.Period(); @@ -217,7 +217,7 @@ import java.util.Collections; message.markAsProcessed(/* isDelivered= */ false); return; } - handler.obtainMessage(MSG_SEND_MESSAGE, message).sendToTarget(); + handler.obtainMessage(MSG_CUSTOM, message).sendToTarget(); } public synchronized void release() { @@ -324,11 +324,11 @@ import java.util.Collections; case MSG_TRACK_SELECTION_INVALIDATED: reselectTracksInternal(); break; - case MSG_SEND_MESSAGE: + case MSG_CUSTOM: sendMessageInternal((PlayerMessage) msg.obj); break; - case MSG_SEND_MESSAGE_TO_TARGET_THREAD: - sendMessageToTargetThread((PlayerMessage) msg.obj); + case MSG_SEND_MESSAGE_TO_TARGET: + sendCustomMessageToTargetThread((PlayerMessage) msg.obj); break; case MSG_RELEASE: releaseInternal(); @@ -504,7 +504,7 @@ import java.util.Collections; } else { rendererPositionUs = mediaClock.syncAndGetPositionUs(); periodPositionUs = playingPeriodHolder.toPeriodTime(rendererPositionUs); - maybeTriggerPendingMessages(playbackInfo.positionUs, periodPositionUs); + maybeTriggerCustomMessages(playbackInfo.positionUs, periodPositionUs); playbackInfo.positionUs = periodPositionUs; } @@ -805,11 +805,11 @@ import java.util.Collections; } if (resetState) { queue.setTimeline(null); - for (PendingMessageInfo pendingMessageInfo : pendingMessages) { - pendingMessageInfo.message.markAsProcessed(/* isDelivered= */ false); + for (CustomMessageInfo customMessageInfo : customMessageInfos) { + customMessageInfo.message.markAsProcessed(/* isDelivered= */ false); } - pendingMessages.clear(); - nextPendingMessageIndex = 0; + customMessageInfos.clear(); + nextCustomMessageInfoIndex = 0; } playbackInfo = new PlaybackInfo( @@ -833,48 +833,48 @@ import java.util.Collections; private void sendMessageInternal(PlayerMessage message) { if (message.getPositionMs() == C.TIME_UNSET) { // If no delivery time is specified, trigger immediate message delivery. - sendMessageToTarget(message); + sendCustomMessageToTarget(message); } else if (playbackInfo.timeline == null) { // Still waiting for initial timeline to resolve position. - pendingMessages.add(new PendingMessageInfo(message)); + customMessageInfos.add(new CustomMessageInfo(message)); } else { - PendingMessageInfo pendingMessageInfo = new PendingMessageInfo(message); - if (resolvePendingMessagePosition(pendingMessageInfo)) { - pendingMessages.add(pendingMessageInfo); + CustomMessageInfo customMessageInfo = new CustomMessageInfo(message); + if (resolveCustomMessagePosition(customMessageInfo)) { + customMessageInfos.add(customMessageInfo); // Ensure new message is inserted according to playback order. - Collections.sort(pendingMessages); + Collections.sort(customMessageInfos); } else { message.markAsProcessed(/* isDelivered= */ false); } } } - private void sendMessageToTarget(PlayerMessage message) { + private void sendCustomMessageToTarget(PlayerMessage message) { if (message.getHandler().getLooper() == handler.getLooper()) { - deliverMessage(message); + deliverCustomMessage(message); if (playbackInfo.playbackState == Player.STATE_READY || playbackInfo.playbackState == Player.STATE_BUFFERING) { // The message may have caused something to change that now requires us to do work. handler.sendEmptyMessage(MSG_DO_SOME_WORK); } } else { - handler.obtainMessage(MSG_SEND_MESSAGE_TO_TARGET_THREAD, message).sendToTarget(); + handler.obtainMessage(MSG_SEND_MESSAGE_TO_TARGET, message).sendToTarget(); } } - private void sendMessageToTargetThread(final PlayerMessage message) { + private void sendCustomMessageToTargetThread(final PlayerMessage message) { message .getHandler() .post( new Runnable() { @Override public void run() { - deliverMessage(message); + deliverCustomMessage(message); } }); } - private void deliverMessage(PlayerMessage message) { + private void deliverCustomMessage(PlayerMessage message) { try { message.getTarget().handleMessage(message.getType(), message.getPayload()); } catch (ExoPlaybackException e) { @@ -884,48 +884,48 @@ import java.util.Collections; } } - private void resolvePendingMessagePositions() { - for (int i = pendingMessages.size() - 1; i >= 0; i--) { - if (!resolvePendingMessagePosition(pendingMessages.get(i))) { - // Unable to resolve a new position for the message. Remove it. - pendingMessages.get(i).message.markAsProcessed(/* isDelivered= */ false); - pendingMessages.remove(i); + private void resolveCustomMessagePositions() { + for (int i = customMessageInfos.size() - 1; i >= 0; i--) { + if (!resolveCustomMessagePosition(customMessageInfos.get(i))) { + // Remove messages if new position can't be resolved. + customMessageInfos.get(i).message.markAsProcessed(/* isDelivered= */ false); + customMessageInfos.remove(i); } } // Re-sort messages by playback order. - Collections.sort(pendingMessages); + Collections.sort(customMessageInfos); } - private boolean resolvePendingMessagePosition(PendingMessageInfo pendingMessageInfo) { - if (pendingMessageInfo.resolvedPeriodUid == null) { + private boolean resolveCustomMessagePosition(CustomMessageInfo customMessageInfo) { + if (customMessageInfo.resolvedPeriodUid == null) { // Position is still unresolved. Try to find window in current timeline. Pair periodPosition = resolveSeekPosition( new SeekPosition( - pendingMessageInfo.message.getTimeline(), - pendingMessageInfo.message.getWindowIndex(), - C.msToUs(pendingMessageInfo.message.getPositionMs())), + customMessageInfo.message.getTimeline(), + customMessageInfo.message.getWindowIndex(), + C.msToUs(customMessageInfo.message.getPositionMs())), /* trySubsequentPeriods= */ false); if (periodPosition == null) { return false; } - pendingMessageInfo.setResolvedPosition( + customMessageInfo.setResolvedPosition( periodPosition.first, periodPosition.second, playbackInfo.timeline.getPeriod(periodPosition.first, period, true).uid); } else { // Position has been resolved for a previous timeline. Try to find the updated period index. - int index = playbackInfo.timeline.getIndexOfPeriod(pendingMessageInfo.resolvedPeriodUid); + int index = playbackInfo.timeline.getIndexOfPeriod(customMessageInfo.resolvedPeriodUid); if (index == C.INDEX_UNSET) { return false; } - pendingMessageInfo.resolvedPeriodIndex = index; + customMessageInfo.resolvedPeriodIndex = index; } return true; } - private void maybeTriggerPendingMessages(long oldPeriodPositionUs, long newPeriodPositionUs) { - if (pendingMessages.isEmpty() || playbackInfo.periodId.isAd()) { + private void maybeTriggerCustomMessages(long oldPeriodPositionUs, long newPeriodPositionUs) { + if (customMessageInfos.isEmpty() || playbackInfo.periodId.isAd()) { return; } // If this is the first call from the start position, include oldPeriodPositionUs in potential @@ -935,29 +935,33 @@ import java.util.Collections; } // Correct next index if necessary (e.g. after seeking, timeline changes, or new messages) int currentPeriodIndex = playbackInfo.periodId.periodIndex; - PendingMessageInfo previousInfo = - nextPendingMessageIndex > 0 ? pendingMessages.get(nextPendingMessageIndex - 1) : null; - while (previousInfo != null - && (previousInfo.resolvedPeriodIndex > currentPeriodIndex - || (previousInfo.resolvedPeriodIndex == currentPeriodIndex - && previousInfo.resolvedPeriodTimeUs > oldPeriodPositionUs))) { - nextPendingMessageIndex--; - previousInfo = - nextPendingMessageIndex > 0 ? pendingMessages.get(nextPendingMessageIndex - 1) : null; + CustomMessageInfo prevInfo = + nextCustomMessageInfoIndex > 0 + ? customMessageInfos.get(nextCustomMessageInfoIndex - 1) + : null; + while (prevInfo != null + && (prevInfo.resolvedPeriodIndex > currentPeriodIndex + || (prevInfo.resolvedPeriodIndex == currentPeriodIndex + && prevInfo.resolvedPeriodTimeUs > oldPeriodPositionUs))) { + nextCustomMessageInfoIndex--; + prevInfo = + nextCustomMessageInfoIndex > 0 + ? customMessageInfos.get(nextCustomMessageInfoIndex - 1) + : null; } - PendingMessageInfo nextInfo = - nextPendingMessageIndex < pendingMessages.size() - ? pendingMessages.get(nextPendingMessageIndex) + CustomMessageInfo nextInfo = + nextCustomMessageInfoIndex < customMessageInfos.size() + ? customMessageInfos.get(nextCustomMessageInfoIndex) : null; while (nextInfo != null && nextInfo.resolvedPeriodUid != null && (nextInfo.resolvedPeriodIndex < currentPeriodIndex || (nextInfo.resolvedPeriodIndex == currentPeriodIndex && nextInfo.resolvedPeriodTimeUs <= oldPeriodPositionUs))) { - nextPendingMessageIndex++; + nextCustomMessageInfoIndex++; nextInfo = - nextPendingMessageIndex < pendingMessages.size() - ? pendingMessages.get(nextPendingMessageIndex) + nextCustomMessageInfoIndex < customMessageInfos.size() + ? customMessageInfos.get(nextCustomMessageInfoIndex) : null; } // Check if any message falls within the covered time span. @@ -966,15 +970,15 @@ import java.util.Collections; && nextInfo.resolvedPeriodIndex == currentPeriodIndex && nextInfo.resolvedPeriodTimeUs > oldPeriodPositionUs && nextInfo.resolvedPeriodTimeUs <= newPeriodPositionUs) { - sendMessageToTarget(nextInfo.message); + sendCustomMessageToTarget(nextInfo.message); if (nextInfo.message.getDeleteAfterDelivery()) { - pendingMessages.remove(nextPendingMessageIndex); + customMessageInfos.remove(nextCustomMessageInfoIndex); } else { - nextPendingMessageIndex++; + nextCustomMessageInfoIndex++; } nextInfo = - nextPendingMessageIndex < pendingMessages.size() - ? pendingMessages.get(nextPendingMessageIndex) + nextCustomMessageInfoIndex < customMessageInfos.size() + ? customMessageInfos.get(nextCustomMessageInfoIndex) : null; } } @@ -1153,7 +1157,7 @@ import java.util.Collections; Object manifest = sourceRefreshInfo.manifest; queue.setTimeline(timeline); playbackInfo = playbackInfo.copyWithTimeline(timeline, manifest); - resolvePendingMessagePositions(); + resolveCustomMessagePositions(); if (oldTimeline == null) { playbackInfoUpdate.incrementPendingOperationAcks(pendingPrepareCount); @@ -1685,7 +1689,7 @@ import java.util.Collections; } } - private static final class PendingMessageInfo implements Comparable { + private static final class CustomMessageInfo implements Comparable { public final PlayerMessage message; @@ -1693,7 +1697,7 @@ import java.util.Collections; public long resolvedPeriodTimeUs; public @Nullable Object resolvedPeriodUid; - public PendingMessageInfo(PlayerMessage message) { + public CustomMessageInfo(PlayerMessage message) { this.message = message; } @@ -1704,9 +1708,9 @@ import java.util.Collections; } @Override - public int compareTo(@NonNull PendingMessageInfo other) { + public int compareTo(@NonNull CustomMessageInfo other) { if ((resolvedPeriodUid == null) != (other.resolvedPeriodUid == null)) { - // PendingMessageInfos with a resolved period position are always smaller. + // CustomMessageInfos with a resolved period position are always smaller. return resolvedPeriodUid != null ? -1 : 1; } if (resolvedPeriodUid == null) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java index 832b2a9870..99d96865af 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java @@ -224,7 +224,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { private long codecHotswapDeadlineMs; private int inputIndex; private int outputIndex; - private ByteBuffer outputBuffer; private boolean shouldSkipOutputBuffer; private boolean codecReconfigured; private @ReconfigurationState int codecReconfigurationState; @@ -323,6 +322,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { protected abstract void configureCodec(MediaCodecInfo codecInfo, MediaCodec codec, Format format, MediaCrypto crypto) throws DecoderQueryException; + @SuppressWarnings("deprecation") protected final void maybeInitCodec() throws ExoPlaybackException { if (codec != null || format == null) { // We have a codec already, or we don't have a format with which to instantiate one. @@ -402,15 +402,16 @@ public abstract class MediaCodecRenderer extends BaseRenderer { long codecInitializedTimestamp = SystemClock.elapsedRealtime(); onCodecInitialized(codecName, codecInitializedTimestamp, codecInitializedTimestamp - codecInitializingTimestamp); - getCodecBuffers(); + inputBuffers = codec.getInputBuffers(); + outputBuffers = codec.getOutputBuffers(); } catch (Exception e) { throwDecoderInitError(new DecoderInitializationException(format, e, drmSessionRequiresSecureDecoder, codecName)); } codecHotswapDeadlineMs = getState() == STATE_STARTED ? (SystemClock.elapsedRealtime() + MAX_CODEC_HOTSWAP_TIME_MS) : C.TIME_UNSET; - resetInputBuffer(); - resetOutputBuffer(); + inputIndex = C.INDEX_UNSET; + outputIndex = C.INDEX_UNSET; waitingForFirstSyncFrame = true; decoderCounters.decoderInitCount++; } @@ -486,12 +487,13 @@ public abstract class MediaCodecRenderer extends BaseRenderer { protected void releaseCodec() { codecHotswapDeadlineMs = C.TIME_UNSET; - resetInputBuffer(); - resetOutputBuffer(); + inputIndex = C.INDEX_UNSET; + outputIndex = C.INDEX_UNSET; waitingForKeys = false; shouldSkipOutputBuffer = false; decodeOnlyPresentationTimestamps.clear(); - resetCodecBuffers(); + inputBuffers = null; + outputBuffers = null; codecInfo = null; codecReconfigured = false; codecReceivedBuffers = false; @@ -506,6 +508,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { codecReceivedEos = false; codecReconfigurationState = RECONFIGURATION_STATE_NONE; codecReinitializationState = REINITIALIZATION_STATE_NONE; + buffer.data = null; if (codec != null) { decoderCounters.decoderReleaseCount++; try { @@ -588,8 +591,8 @@ public abstract class MediaCodecRenderer extends BaseRenderer { protected void flushCodec() throws ExoPlaybackException { codecHotswapDeadlineMs = C.TIME_UNSET; - resetInputBuffer(); - resetOutputBuffer(); + inputIndex = C.INDEX_UNSET; + outputIndex = C.INDEX_UNSET; waitingForFirstSyncFrame = true; waitingForKeys = false; shouldSkipOutputBuffer = false; @@ -632,7 +635,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { if (inputIndex < 0) { return false; } - buffer.data = getInputBuffer(inputIndex); + buffer.data = inputBuffers[inputIndex]; buffer.clear(); } @@ -644,7 +647,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { } else { codecReceivedEos = true; codec.queueInputBuffer(inputIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM); - resetInputBuffer(); + inputIndex = C.INDEX_UNSET; } codecReinitializationState = REINITIALIZATION_STATE_WAIT_END_OF_STREAM; return false; @@ -654,7 +657,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { codecNeedsAdaptationWorkaroundBuffer = false; buffer.data.put(ADAPTATION_WORKAROUND_BUFFER); codec.queueInputBuffer(inputIndex, 0, ADAPTATION_WORKAROUND_BUFFER.length, 0, 0); - resetInputBuffer(); + inputIndex = C.INDEX_UNSET; codecReceivedBuffers = true; return true; } @@ -712,7 +715,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { } else { codecReceivedEos = true; codec.queueInputBuffer(inputIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM); - resetInputBuffer(); + inputIndex = C.INDEX_UNSET; } } catch (CryptoException e) { throw ExoPlaybackException.createForRenderer(e, getIndex()); @@ -757,7 +760,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { } else { codec.queueInputBuffer(inputIndex, 0, buffer.data.limit(), presentationTimeUs, 0); } - resetInputBuffer(); + inputIndex = C.INDEX_UNSET; codecReceivedBuffers = true; codecReconfigurationState = RECONFIGURATION_STATE_NONE; decoderCounters.inputBufferCount++; @@ -767,56 +770,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { return true; } - private void getCodecBuffers() { - if (Util.SDK_INT < 21) { - inputBuffers = codec.getInputBuffers(); - outputBuffers = codec.getOutputBuffers(); - } - } - - private void resetCodecBuffers() { - if (Util.SDK_INT < 21) { - inputBuffers = null; - outputBuffers = null; - } - } - - private ByteBuffer getInputBuffer(int inputIndex) { - if (Util.SDK_INT >= 21) { - return codec.getInputBuffer(inputIndex); - } else { - return inputBuffers[inputIndex]; - } - } - - private void setOutputBuffer(int outputIndex) { - this.outputIndex = outputIndex; - if (Util.SDK_INT >= 21) { - outputBuffer = codec.getOutputBuffer(outputIndex); - } else { - outputBuffer = outputBuffers[outputIndex]; - } - // The dequeued buffer is a media buffer. Do some initial setup. - if (outputBuffer != null) { - outputBuffer.position(outputBufferInfo.offset); - outputBuffer.limit(outputBufferInfo.offset + outputBufferInfo.size); - } - } - - private boolean hasOutputBuffer() { - return outputIndex >= 0; - } - - private void resetInputBuffer() { - inputIndex = C.INDEX_UNSET; - buffer.data = null; - } - - private void resetOutputBuffer() { - outputIndex = C.INDEX_UNSET; - outputBuffer = null; - } - private static MediaCodec.CryptoInfo getFrameworkCryptoInfo(DecoderInputBuffer buffer, int adaptiveReconfigurationBytes) { MediaCodec.CryptoInfo cryptoInfo = buffer.cryptoInfo.getFrameworkCryptoInfoV16(); @@ -969,12 +922,9 @@ public abstract class MediaCodecRenderer extends BaseRenderer { @Override public boolean isReady() { - return format != null - && !waitingForKeys - && (isSourceReady() - || hasOutputBuffer() - || (codecHotswapDeadlineMs != C.TIME_UNSET - && SystemClock.elapsedRealtime() < codecHotswapDeadlineMs)); + return format != null && !waitingForKeys && (isSourceReady() || outputIndex >= 0 + || (codecHotswapDeadlineMs != C.TIME_UNSET + && SystemClock.elapsedRealtime() < codecHotswapDeadlineMs)); } /** @@ -990,14 +940,14 @@ public abstract class MediaCodecRenderer extends BaseRenderer { * @return Whether it may be possible to drain more output data. * @throws ExoPlaybackException If an error occurs draining the output buffer. */ + @SuppressWarnings("deprecation") private boolean drainOutputBuffer(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { - if (!hasOutputBuffer()) { - int outputIndex; + if (outputIndex < 0) { if (codecNeedsEosOutputExceptionWorkaround && codecReceivedEos) { try { - outputIndex = - codec.dequeueOutputBuffer(outputBufferInfo, getDequeueOutputBufferTimeoutUs()); + outputIndex = codec.dequeueOutputBuffer(outputBufferInfo, + getDequeueOutputBufferTimeoutUs()); } catch (IllegalStateException e) { processEndOfStream(); if (outputStreamEnded) { @@ -1007,24 +957,30 @@ public abstract class MediaCodecRenderer extends BaseRenderer { return false; } } else { - outputIndex = - codec.dequeueOutputBuffer(outputBufferInfo, getDequeueOutputBufferTimeoutUs()); + outputIndex = codec.dequeueOutputBuffer(outputBufferInfo, + getDequeueOutputBufferTimeoutUs()); } - if (outputIndex >= 0) { // We've dequeued a buffer. if (shouldSkipAdaptationWorkaroundOutputBuffer) { shouldSkipAdaptationWorkaroundOutputBuffer = false; codec.releaseOutputBuffer(outputIndex, false); + outputIndex = C.INDEX_UNSET; return true; - } else if ((outputBufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) { + } + if ((outputBufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) { // The dequeued buffer indicates the end of the stream. Process it immediately. processEndOfStream(); + outputIndex = C.INDEX_UNSET; return false; } else { - // The dequeued buffer is a media buffer. It will be processed by calling - // processOutputBuffer (possibly multiple times). - setOutputBuffer(outputIndex); + // The dequeued buffer is a media buffer. Do some initial setup. The buffer will be + // processed by calling processOutputBuffer (possibly multiple times) below. + ByteBuffer outputBuffer = outputBuffers[outputIndex]; + if (outputBuffer != null) { + outputBuffer.position(outputBufferInfo.offset); + outputBuffer.limit(outputBufferInfo.offset + outputBufferInfo.size); + } shouldSkipOutputBuffer = shouldSkipOutputBuffer(outputBufferInfo.presentationTimeUs); } } else if (outputIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED /* (-2) */) { @@ -1034,9 +990,8 @@ public abstract class MediaCodecRenderer extends BaseRenderer { processOutputBuffersChanged(); return true; } else /* MediaCodec.INFO_TRY_AGAIN_LATER (-1) or unknown negative return value */ { - if (codecNeedsEosPropagationWorkaround - && (inputStreamEnded - || codecReinitializationState == REINITIALIZATION_STATE_WAIT_END_OF_STREAM)) { + if (codecNeedsEosPropagationWorkaround && (inputStreamEnded + || codecReinitializationState == REINITIALIZATION_STATE_WAIT_END_OF_STREAM)) { processEndOfStream(); } return false; @@ -1046,16 +1001,9 @@ public abstract class MediaCodecRenderer extends BaseRenderer { boolean processedOutputBuffer; if (codecNeedsEosOutputExceptionWorkaround && codecReceivedEos) { try { - processedOutputBuffer = - processOutputBuffer( - positionUs, - elapsedRealtimeUs, - codec, - outputBuffer, - outputIndex, - outputBufferInfo.flags, - outputBufferInfo.presentationTimeUs, - shouldSkipOutputBuffer); + processedOutputBuffer = processOutputBuffer(positionUs, elapsedRealtimeUs, codec, + outputBuffers[outputIndex], outputIndex, outputBufferInfo.flags, + outputBufferInfo.presentationTimeUs, shouldSkipOutputBuffer); } catch (IllegalStateException e) { processEndOfStream(); if (outputStreamEnded) { @@ -1065,21 +1013,14 @@ public abstract class MediaCodecRenderer extends BaseRenderer { return false; } } else { - processedOutputBuffer = - processOutputBuffer( - positionUs, - elapsedRealtimeUs, - codec, - outputBuffer, - outputIndex, - outputBufferInfo.flags, - outputBufferInfo.presentationTimeUs, - shouldSkipOutputBuffer); + processedOutputBuffer = processOutputBuffer(positionUs, elapsedRealtimeUs, codec, + outputBuffers[outputIndex], outputIndex, outputBufferInfo.flags, + outputBufferInfo.presentationTimeUs, shouldSkipOutputBuffer); } if (processedOutputBuffer) { onProcessedOutputBuffer(outputBufferInfo.presentationTimeUs); - resetOutputBuffer(); + outputIndex = C.INDEX_UNSET; return true; } @@ -1107,10 +1048,9 @@ public abstract class MediaCodecRenderer extends BaseRenderer { /** * Processes a change in the output buffers. */ + @SuppressWarnings("deprecation") private void processOutputBuffersChanged() { - if (Util.SDK_INT < 21) { - outputBuffers = codec.getOutputBuffers(); - } + outputBuffers = codec.getOutputBuffers(); } /** diff --git a/library/ui/src/main/res/drawable-anydpi-v21/exo_controls_fullscreen_enter.xml b/library/ui/src/main/res/drawable-anydpi-v21/exo_controls_fullscreen_enter.xml new file mode 100644 index 0000000000..db11f299be --- /dev/null +++ b/library/ui/src/main/res/drawable-anydpi-v21/exo_controls_fullscreen_enter.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/library/ui/src/main/res/drawable-anydpi-v21/exo_controls_fullscreen_exit.xml b/library/ui/src/main/res/drawable-anydpi-v21/exo_controls_fullscreen_exit.xml new file mode 100644 index 0000000000..782d9ff34d --- /dev/null +++ b/library/ui/src/main/res/drawable-anydpi-v21/exo_controls_fullscreen_exit.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/library/ui/src/main/res/drawable-hdpi/exo_controls_fullscreen_enter.png b/library/ui/src/main/res/drawable-hdpi/exo_controls_fullscreen_enter.png new file mode 100644 index 0000000000..9b8131124d Binary files /dev/null and b/library/ui/src/main/res/drawable-hdpi/exo_controls_fullscreen_enter.png differ diff --git a/library/ui/src/main/res/drawable-hdpi/exo_controls_fullscreen_exit.png b/library/ui/src/main/res/drawable-hdpi/exo_controls_fullscreen_exit.png new file mode 100644 index 0000000000..159bea7fd8 Binary files /dev/null and b/library/ui/src/main/res/drawable-hdpi/exo_controls_fullscreen_exit.png differ diff --git a/library/ui/src/main/res/drawable-ldpi/exo_controls_fullscreen_enter.png b/library/ui/src/main/res/drawable-ldpi/exo_controls_fullscreen_enter.png new file mode 100644 index 0000000000..9b8131124d Binary files /dev/null and b/library/ui/src/main/res/drawable-ldpi/exo_controls_fullscreen_enter.png differ diff --git a/library/ui/src/main/res/drawable-ldpi/exo_controls_fullscreen_exit.png b/library/ui/src/main/res/drawable-ldpi/exo_controls_fullscreen_exit.png new file mode 100644 index 0000000000..159bea7fd8 Binary files /dev/null and b/library/ui/src/main/res/drawable-ldpi/exo_controls_fullscreen_exit.png differ diff --git a/library/ui/src/main/res/drawable-mdpi/exo_controls_fullscreen_enter.png b/library/ui/src/main/res/drawable-mdpi/exo_controls_fullscreen_enter.png new file mode 100644 index 0000000000..4423c7ce99 Binary files /dev/null and b/library/ui/src/main/res/drawable-mdpi/exo_controls_fullscreen_enter.png differ diff --git a/library/ui/src/main/res/drawable-mdpi/exo_controls_fullscreen_exit.png b/library/ui/src/main/res/drawable-mdpi/exo_controls_fullscreen_exit.png new file mode 100644 index 0000000000..364bad0b84 Binary files /dev/null and b/library/ui/src/main/res/drawable-mdpi/exo_controls_fullscreen_exit.png differ diff --git a/library/ui/src/main/res/drawable-xhdpi/exo_controls_fullscreen_enter.png b/library/ui/src/main/res/drawable-xhdpi/exo_controls_fullscreen_enter.png new file mode 100644 index 0000000000..c1dcfb2902 Binary files /dev/null and b/library/ui/src/main/res/drawable-xhdpi/exo_controls_fullscreen_enter.png differ diff --git a/library/ui/src/main/res/drawable-xhdpi/exo_controls_fullscreen_exit.png b/library/ui/src/main/res/drawable-xhdpi/exo_controls_fullscreen_exit.png new file mode 100644 index 0000000000..ef360fe40c Binary files /dev/null and b/library/ui/src/main/res/drawable-xhdpi/exo_controls_fullscreen_exit.png differ diff --git a/library/ui/src/main/res/drawable-xxhdpi/exo_controls_fullscreen_enter.png b/library/ui/src/main/res/drawable-xxhdpi/exo_controls_fullscreen_enter.png new file mode 100644 index 0000000000..a0a1b4d4f3 Binary files /dev/null and b/library/ui/src/main/res/drawable-xxhdpi/exo_controls_fullscreen_enter.png differ diff --git a/library/ui/src/main/res/drawable-xxhdpi/exo_controls_fullscreen_exit.png b/library/ui/src/main/res/drawable-xxhdpi/exo_controls_fullscreen_exit.png new file mode 100644 index 0000000000..b7f4133fd9 Binary files /dev/null and b/library/ui/src/main/res/drawable-xxhdpi/exo_controls_fullscreen_exit.png differ diff --git a/library/ui/src/main/res/values-af/strings.xml b/library/ui/src/main/res/values-af/strings.xml index 7d32aaa99f..f1c45cd7f7 100644 --- a/library/ui/src/main/res/values-af/strings.xml +++ b/library/ui/src/main/res/values-af/strings.xml @@ -19,10 +19,12 @@ "Volgende snit" "Wag" "Speel" + "Stop" "Spoel terug" "Vinnig vorentoe" "Herhaal alles" "Herhaal niks" "Herhaal een" "Skommel" + Volskermmodus diff --git a/library/ui/src/main/res/values-am/strings.xml b/library/ui/src/main/res/values-am/strings.xml index 47dc757982..14d3ff0242 100644 --- a/library/ui/src/main/res/values-am/strings.xml +++ b/library/ui/src/main/res/values-am/strings.xml @@ -19,10 +19,12 @@ "ቀጣይ ትራክ" "ለአፍታ አቁም" "አጫውት" - "ወደኋላ አጠንጥን" + "አቁም" + "ወደኋላ አጠንጥን" "በፍጥነት አሳልፍ" "ሁሉንም ድገም" "ምንም አትድገም" "አንዱን ድገም" "በው" + ባለ ሙሉ ማያ ገጽ ሁኔታ diff --git a/library/ui/src/main/res/values-ar/strings.xml b/library/ui/src/main/res/values-ar/strings.xml index d5f3d889fe..2cc56abbfa 100644 --- a/library/ui/src/main/res/values-ar/strings.xml +++ b/library/ui/src/main/res/values-ar/strings.xml @@ -19,10 +19,12 @@ "المقطع الصوتي التالي" "إيقاف مؤقت" "تشغيل" - "إرجاع" + "إيقاف" + "إرجاع" "تقديم سريع" "تكرار الكل" "عدم التكرار" "تكرار مقطع واحد" "ترتيب عشوائي" + وضع ملء الشاشة diff --git a/library/ui/src/main/res/values-az-rAZ/strings.xml b/library/ui/src/main/res/values-az-rAZ/strings.xml index 51230912b8..1071cd5542 100644 --- a/library/ui/src/main/res/values-az-rAZ/strings.xml +++ b/library/ui/src/main/res/values-az-rAZ/strings.xml @@ -19,7 +19,8 @@ "Növbəti trek" "Pauza" "Oyun" - "Geri sarıma" + "Dayandır" + "Geri sarıma" "Sürətlə irəli" "Bütün təkrarlayın" "Təkrar bir" diff --git a/library/ui/src/main/res/values-b+sr+Latn/strings.xml b/library/ui/src/main/res/values-b+sr+Latn/strings.xml index 1726942109..a9d35e5cb6 100644 --- a/library/ui/src/main/res/values-b+sr+Latn/strings.xml +++ b/library/ui/src/main/res/values-b+sr+Latn/strings.xml @@ -19,7 +19,8 @@ "Sledeća pesma" "Pauza" "Pusti" - "Premotaj unazad" + "Zaustavi" + "Premotaj unazad" "Premotaj unapred" "Ponovi sve" "Ne ponavljaj nijednu" diff --git a/library/ui/src/main/res/values-be-rBY/strings.xml b/library/ui/src/main/res/values-be-rBY/strings.xml index 6a6a08d814..69b24ad5e9 100644 --- a/library/ui/src/main/res/values-be-rBY/strings.xml +++ b/library/ui/src/main/res/values-be-rBY/strings.xml @@ -19,7 +19,8 @@ "Наступны трэк" "Прыпыніць" "Прайграць" - "Перамотка назад" + "Спыніць" + "Перамотка назад" "Перамотка ўперад" "Паўтарыць усё" "Паўтараць ні" diff --git a/library/ui/src/main/res/values-bg/strings.xml b/library/ui/src/main/res/values-bg/strings.xml index 644fa7bbd4..e350479788 100644 --- a/library/ui/src/main/res/values-bg/strings.xml +++ b/library/ui/src/main/res/values-bg/strings.xml @@ -19,7 +19,8 @@ "Следващ запис" "Пауза" "Пускане" - "Превъртане назад" + "Спиране" + "Превъртане назад" "Превъртане напред" "Повтаряне на всички" "Без повтаряне" diff --git a/library/ui/src/main/res/values-bn-rBD/strings.xml b/library/ui/src/main/res/values-bn-rBD/strings.xml index 782845ce73..446ef982a3 100644 --- a/library/ui/src/main/res/values-bn-rBD/strings.xml +++ b/library/ui/src/main/res/values-bn-rBD/strings.xml @@ -19,7 +19,8 @@ "পরবর্তী ট্র্যাক" "বিরাম দিন" "প্লে করুন" - "গুটিয়ে নিন" + "থামান" + "গুটিয়ে নিন" "দ্রুত সামনে এগোন" "সবগুলির পুনরাবৃত্তি করুন" "একটিরও পুনরাবৃত্তি করবেন না" diff --git a/library/ui/src/main/res/values-bs-rBA/strings.xml b/library/ui/src/main/res/values-bs-rBA/strings.xml index 06403989b4..186b1058d9 100644 --- a/library/ui/src/main/res/values-bs-rBA/strings.xml +++ b/library/ui/src/main/res/values-bs-rBA/strings.xml @@ -19,7 +19,8 @@ "Sljedeća numera" "Pauziraj" "Reproduciraj" - "Premotaj" + "Zaustavi" + "Premotaj" "Ubrzaj" "Ponovite sve" "Ne ponavljaju" diff --git a/library/ui/src/main/res/values-ca/strings.xml b/library/ui/src/main/res/values-ca/strings.xml index 9f92d3ba95..fd76a8e08e 100644 --- a/library/ui/src/main/res/values-ca/strings.xml +++ b/library/ui/src/main/res/values-ca/strings.xml @@ -19,7 +19,8 @@ "Ruta següent" "Posa en pausa" "Reprodueix" - "Rebobina" + "Atura" + "Rebobina" "Avança ràpidament" "Repeteix-ho tot" "No en repeteixis cap" diff --git a/library/ui/src/main/res/values-cs/strings.xml b/library/ui/src/main/res/values-cs/strings.xml index 36d14a663b..087ab79c25 100644 --- a/library/ui/src/main/res/values-cs/strings.xml +++ b/library/ui/src/main/res/values-cs/strings.xml @@ -19,7 +19,8 @@ "Další skladba" "Pozastavit" "Přehrát" - "Přetočit zpět" + "Zastavit" + "Přetočit zpět" "Přetočit vpřed" "Opakovat vše" "Neopakovat" diff --git a/library/ui/src/main/res/values-da/strings.xml b/library/ui/src/main/res/values-da/strings.xml index f3883b3006..0ae23ee288 100644 --- a/library/ui/src/main/res/values-da/strings.xml +++ b/library/ui/src/main/res/values-da/strings.xml @@ -19,7 +19,8 @@ "Næste nummer" "Pause" "Afspil" - "Spol tilbage" + "Stop" + "Spol tilbage" "Spol frem" "Gentag alle" "Gentag ingen" diff --git a/library/ui/src/main/res/values-de/strings.xml b/library/ui/src/main/res/values-de/strings.xml index 76b6514cb4..b31ecc93e8 100644 --- a/library/ui/src/main/res/values-de/strings.xml +++ b/library/ui/src/main/res/values-de/strings.xml @@ -19,10 +19,12 @@ "Nächster Titel" "Pausieren" "Wiedergabe" - "Zurückspulen" + "Beenden" + "Zurückspulen" "Vorspulen" "Alle wiederholen" "Keinen Titel wiederholen" "Einen Titel wiederholen" "Zufallsmix" + Vollbildmodus diff --git a/library/ui/src/main/res/values-el/strings.xml b/library/ui/src/main/res/values-el/strings.xml index 29d8fce169..9bc6a87889 100644 --- a/library/ui/src/main/res/values-el/strings.xml +++ b/library/ui/src/main/res/values-el/strings.xml @@ -19,10 +19,12 @@ "Επόμενο κομμάτι" "Παύση" "Αναπαραγωγή" - "Επαναφορά" + "Διακοπή" + "Επαναφορά" "Γρήγορη προώθηση" "Επανάληψη όλων" "Καμία επανάληψη" "Επανάληψη ενός στοιχείου" "Τυχαία αναπαραγωγή" + Λειτουργία πλήρους οθόνης diff --git a/library/ui/src/main/res/values-en-rAU/strings.xml b/library/ui/src/main/res/values-en-rAU/strings.xml index 51d565152f..0b4c465853 100644 --- a/library/ui/src/main/res/values-en-rAU/strings.xml +++ b/library/ui/src/main/res/values-en-rAU/strings.xml @@ -19,7 +19,8 @@ "Next track" "Pause" "Play" - "Rewind" + "Stop" + "Rewind" "Fast-forward" "Repeat all" "Repeat none" diff --git a/library/ui/src/main/res/values-en-rGB/strings.xml b/library/ui/src/main/res/values-en-rGB/strings.xml index 1e5faa6f43..e80b2c70c6 100644 --- a/library/ui/src/main/res/values-en-rGB/strings.xml +++ b/library/ui/src/main/res/values-en-rGB/strings.xml @@ -19,10 +19,12 @@ "Next track" "Pause" "Play" - "Rewind" + "Stop" + "Rewind" "Fast-forward" "Repeat all" "Repeat none" "Repeat one" "Shuffle" + Fullscreen mode diff --git a/library/ui/src/main/res/values-en-rIN/strings.xml b/library/ui/src/main/res/values-en-rIN/strings.xml index 1e5faa6f43..e80b2c70c6 100644 --- a/library/ui/src/main/res/values-en-rIN/strings.xml +++ b/library/ui/src/main/res/values-en-rIN/strings.xml @@ -19,10 +19,12 @@ "Next track" "Pause" "Play" - "Rewind" + "Stop" + "Rewind" "Fast-forward" "Repeat all" "Repeat none" "Repeat one" "Shuffle" + Fullscreen mode diff --git a/library/ui/src/main/res/values-es-rUS/strings.xml b/library/ui/src/main/res/values-es-rUS/strings.xml index fc9f13b8af..e6cf3fc6f2 100644 --- a/library/ui/src/main/res/values-es-rUS/strings.xml +++ b/library/ui/src/main/res/values-es-rUS/strings.xml @@ -19,7 +19,8 @@ "Siguiente pista" "Pausar" "Reproducir" - "Retroceder" + "Detener" + "Retroceder" "Avanzar" "Repetir todo" "No repetir" diff --git a/library/ui/src/main/res/values-es/strings.xml b/library/ui/src/main/res/values-es/strings.xml index 3ec468d273..2029ab833e 100644 --- a/library/ui/src/main/res/values-es/strings.xml +++ b/library/ui/src/main/res/values-es/strings.xml @@ -19,10 +19,12 @@ "Siguiente canción" "Pausar" "Reproducir" - "Rebobinar" + "Detener" + "Rebobinar" "Avance rápido" "Repetir todo" "No repetir" "Repetir uno" "Reproducción aleatoria" + Modo de pantalla completa diff --git a/library/ui/src/main/res/values-et-rEE/strings.xml b/library/ui/src/main/res/values-et-rEE/strings.xml index 1da5f86dbe..004ec7e6c3 100644 --- a/library/ui/src/main/res/values-et-rEE/strings.xml +++ b/library/ui/src/main/res/values-et-rEE/strings.xml @@ -19,7 +19,8 @@ "Järgmine lugu" "Peata" "Esita" - "Keri tagasi" + "Peata" + "Keri tagasi" "Keri edasi" "Korda kõike" "Ära korda midagi" diff --git a/library/ui/src/main/res/values-eu-rES/strings.xml b/library/ui/src/main/res/values-eu-rES/strings.xml index b58c2bd6dd..6a3345303a 100644 --- a/library/ui/src/main/res/values-eu-rES/strings.xml +++ b/library/ui/src/main/res/values-eu-rES/strings.xml @@ -19,7 +19,8 @@ "Hurrengo pista" "Pausatu" "Erreproduzitu" - "Atzeratu" + "Gelditu" + "Atzeratu" "Aurreratu" "Errepikatu guztiak" "Ez errepikatu" diff --git a/library/ui/src/main/res/values-fa/strings.xml b/library/ui/src/main/res/values-fa/strings.xml index 1a16fa913f..c2303a6e62 100644 --- a/library/ui/src/main/res/values-fa/strings.xml +++ b/library/ui/src/main/res/values-fa/strings.xml @@ -19,10 +19,12 @@ "آهنگ بعدی" "مکث" "پخش" - "عقب بردن" + "توقف" + "عقب بردن" "جلو بردن سریع" "تکرار همه" "تکرار هیچ‌کدام" "یک‌بار تکرار" "پخش درهم" + حالت تمام صفحه diff --git a/library/ui/src/main/res/values-fi/strings.xml b/library/ui/src/main/res/values-fi/strings.xml index 07d0f6c8bb..92feb86683 100644 --- a/library/ui/src/main/res/values-fi/strings.xml +++ b/library/ui/src/main/res/values-fi/strings.xml @@ -19,7 +19,8 @@ "Seuraava raita" "Tauko" "Toista" - "Kelaa taakse" + "Seis" + "Kelaa taakse" "Kelaa eteen" "Toista kaikki" "Toista ei mitään" diff --git a/library/ui/src/main/res/values-fr-rCA/strings.xml b/library/ui/src/main/res/values-fr-rCA/strings.xml index 321f8b8f13..45fc0a86f9 100644 --- a/library/ui/src/main/res/values-fr-rCA/strings.xml +++ b/library/ui/src/main/res/values-fr-rCA/strings.xml @@ -19,7 +19,8 @@ "Chanson suivante" "Pause" "Lecture" - "Reculer" + "Arrêter" + "Reculer" "Avance rapide" "Tout lire en boucle" "Aucune répétition" diff --git a/library/ui/src/main/res/values-fr/strings.xml b/library/ui/src/main/res/values-fr/strings.xml index 39b0804c7a..6617fd6e6a 100644 --- a/library/ui/src/main/res/values-fr/strings.xml +++ b/library/ui/src/main/res/values-fr/strings.xml @@ -19,10 +19,12 @@ "Piste suivante" "Interrompre" "Lire" - "Retour arrière" + "Arrêter" + "Retour arrière" "Avance rapide" "Tout lire en boucle" "Ne rien lire en boucle" "Lire en boucle un élément" "Lire en mode aléatoire" + Mode plein écran diff --git a/library/ui/src/main/res/values-gl-rES/strings.xml b/library/ui/src/main/res/values-gl-rES/strings.xml index 38c2ee358a..7062d8d023 100644 --- a/library/ui/src/main/res/values-gl-rES/strings.xml +++ b/library/ui/src/main/res/values-gl-rES/strings.xml @@ -19,7 +19,8 @@ "Seguinte pista" "Pausar" "Reproducir" - "Rebobinar" + "Deter" + "Rebobinar" "Avance rápido" "Repetir todo" "Non repetir" diff --git a/library/ui/src/main/res/values-gu-rIN/strings.xml b/library/ui/src/main/res/values-gu-rIN/strings.xml index 50275d2aac..ed78b1ee30 100644 --- a/library/ui/src/main/res/values-gu-rIN/strings.xml +++ b/library/ui/src/main/res/values-gu-rIN/strings.xml @@ -19,7 +19,8 @@ "આગલો ટ્રૅક" "થોભો" "ચલાવો" - "રીવાઇન્ડ કરો" + "રોકો" + "રીવાઇન્ડ કરો" "ઝડપી ફોરવર્ડ કરો" "બધા પુનરાવર્તન કરો" "કંઈ પુનરાવર્તન કરો" diff --git a/library/ui/src/main/res/values-hi/strings.xml b/library/ui/src/main/res/values-hi/strings.xml index 1794faaa31..6545307e8c 100644 --- a/library/ui/src/main/res/values-hi/strings.xml +++ b/library/ui/src/main/res/values-hi/strings.xml @@ -19,10 +19,12 @@ "अगला ट्रैक" "रोकें" "चलाएं" - "रिवाइंड करें" + "बंद करें" + "रिवाइंड करें" "फ़ास्ट फ़ॉरवर्ड" "सभी को दोहराएं" "कुछ भी न दोहराएं" "एक दोहराएं" "शफ़ल करें" + पूर्ण-स्क्रीन मोड diff --git a/library/ui/src/main/res/values-hr/strings.xml b/library/ui/src/main/res/values-hr/strings.xml index 39954ed611..dd7423032b 100644 --- a/library/ui/src/main/res/values-hr/strings.xml +++ b/library/ui/src/main/res/values-hr/strings.xml @@ -19,10 +19,12 @@ "Sljedeća pjesma" "Pauziraj" "Reproduciraj" - "Unatrag" + "Zaustavi" + "Unatrag" "Brzo unaprijed" "Ponovi sve" "Bez ponavljanja" "Ponovi jedno" "Reproduciraj nasumično" + Prikaz na cijelom zaslonu diff --git a/library/ui/src/main/res/values-hu/strings.xml b/library/ui/src/main/res/values-hu/strings.xml index 23fb556d92..abd9f9cfac 100644 --- a/library/ui/src/main/res/values-hu/strings.xml +++ b/library/ui/src/main/res/values-hu/strings.xml @@ -19,10 +19,12 @@ "Következő szám" "Szünet" "Lejátszás" - "Visszatekerés" + "Leállítás" + "Visszatekerés" "Előretekerés" "Összes ismétlése" "Nincs ismétlés" "Egy ismétlése" "Véletlenszerű lejátszás" + Teljes képernyős mód diff --git a/library/ui/src/main/res/values-hy-rAM/strings.xml b/library/ui/src/main/res/values-hy-rAM/strings.xml index 680fb6c5a9..13a489baf5 100644 --- a/library/ui/src/main/res/values-hy-rAM/strings.xml +++ b/library/ui/src/main/res/values-hy-rAM/strings.xml @@ -19,7 +19,8 @@ "Հաջորդը" "Դադարեցնել" "Նվագարկել" - "Հետ փաթաթել" + "Դադարեցնել" + "Հետ փաթաթել" "Արագ առաջ անցնել" "կրկնել այն ամենը" "Չկրկնել" diff --git a/library/ui/src/main/res/values-in/strings.xml b/library/ui/src/main/res/values-in/strings.xml index a7fa9babf6..09b05815e6 100644 --- a/library/ui/src/main/res/values-in/strings.xml +++ b/library/ui/src/main/res/values-in/strings.xml @@ -19,7 +19,8 @@ "Lagu berikutnya" "Jeda" "Putar" - "Putar Ulang" + "Berhenti" + "Putar Ulang" "Maju cepat" "Ulangi Semua" "Jangan Ulangi" diff --git a/library/ui/src/main/res/values-is-rIS/strings.xml b/library/ui/src/main/res/values-is-rIS/strings.xml index 12e15e00d6..12c4632cdf 100644 --- a/library/ui/src/main/res/values-is-rIS/strings.xml +++ b/library/ui/src/main/res/values-is-rIS/strings.xml @@ -19,7 +19,8 @@ "Næsta lag" "Hlé" "Spila" - "Spóla til baka" + "Stöðva" + "Spóla til baka" "Spóla áfram" "Endurtaka allt" "Endurtaka ekkert" diff --git a/library/ui/src/main/res/values-it/strings.xml b/library/ui/src/main/res/values-it/strings.xml index f9cea555e5..3300224fbb 100644 --- a/library/ui/src/main/res/values-it/strings.xml +++ b/library/ui/src/main/res/values-it/strings.xml @@ -19,10 +19,12 @@ "Traccia successiva" "Metti in pausa" "Riproduci" - "Riavvolgi" + "Interrompi" + "Riavvolgi" "Avanti veloce" "Ripeti tutti" "Non ripetere nessuno" "Ripeti uno" "Riproduci casualmente" + Modalità a schermo intero diff --git a/library/ui/src/main/res/values-iw/strings.xml b/library/ui/src/main/res/values-iw/strings.xml index a829ed6b0d..dd973af50b 100644 --- a/library/ui/src/main/res/values-iw/strings.xml +++ b/library/ui/src/main/res/values-iw/strings.xml @@ -19,7 +19,8 @@ "הרצועה הבאה" "השהה" "הפעל" - "הרץ אחורה" + "הפסק" + "הרץ אחורה" "הרץ קדימה" "חזור על הכל" "אל תחזור על כלום" diff --git a/library/ui/src/main/res/values-ja/strings.xml b/library/ui/src/main/res/values-ja/strings.xml index 029ccccc0a..2e0f23a78f 100644 --- a/library/ui/src/main/res/values-ja/strings.xml +++ b/library/ui/src/main/res/values-ja/strings.xml @@ -19,10 +19,12 @@ "次のトラック" "一時停止" "再生" - "巻き戻し" + "停止" + "巻き戻し" "早送り" "全曲を繰り返し" "繰り返しなし" "1曲を繰り返し" "シャッフル" + フルスクリーンモード diff --git a/library/ui/src/main/res/values-ka-rGE/strings.xml b/library/ui/src/main/res/values-ka-rGE/strings.xml index 9125ec4247..252e52f151 100644 --- a/library/ui/src/main/res/values-ka-rGE/strings.xml +++ b/library/ui/src/main/res/values-ka-rGE/strings.xml @@ -19,7 +19,8 @@ "შემდეგი ჩანაწერი" "პაუზა" "დაკვრა" - "უკან გადახვევა" + "შეწყვეტა" + "უკან გადახვევა" "წინ გადახვევა" "გამეორება ყველა" "გაიმეორეთ არცერთი" diff --git a/library/ui/src/main/res/values-kk-rKZ/strings.xml b/library/ui/src/main/res/values-kk-rKZ/strings.xml index a208ed849d..43eb3dd030 100644 --- a/library/ui/src/main/res/values-kk-rKZ/strings.xml +++ b/library/ui/src/main/res/values-kk-rKZ/strings.xml @@ -19,7 +19,8 @@ "Келесі трек" "Кідірту" "Ойнату" - "Кері айналдыру" + "Тоқтату" + "Кері айналдыру" "Жылдам алға айналдыру" "Барлығын қайталау" "Ешқайсысын қайталамау" diff --git a/library/ui/src/main/res/values-km-rKH/strings.xml b/library/ui/src/main/res/values-km-rKH/strings.xml index 737a6b8e4d..653c9f051d 100644 --- a/library/ui/src/main/res/values-km-rKH/strings.xml +++ b/library/ui/src/main/res/values-km-rKH/strings.xml @@ -19,7 +19,8 @@ "បទ​បន្ទាប់" "ផ្អាក" "ចាក់" - "ខា​ថយក្រោយ" + "បញ្ឈប់" + "ខា​ថយក្រោយ" "ទៅ​មុខ​​​រហ័ស" "ធ្វើ​ម្ដង​ទៀត​ទាំងអស់" "មិន​ធ្វើ​ឡើង​វិញ" diff --git a/library/ui/src/main/res/values-kn-rIN/strings.xml b/library/ui/src/main/res/values-kn-rIN/strings.xml index 6c7fcbd8e7..7368fc8ad3 100644 --- a/library/ui/src/main/res/values-kn-rIN/strings.xml +++ b/library/ui/src/main/res/values-kn-rIN/strings.xml @@ -19,7 +19,8 @@ "ಮುಂದಿನ ಟ್ರ್ಯಾಕ್" "ವಿರಾಮಗೊಳಿಸು" "ಪ್ಲೇ ಮಾಡು" - "ರಿವೈಂಡ್ ಮಾಡು" + "ನಿಲ್ಲಿಸು" + "ರಿವೈಂಡ್ ಮಾಡು" "ವೇಗವಾಗಿ ಮುಂದಕ್ಕೆ" "ಎಲ್ಲವನ್ನು ಪುನರಾವರ್ತಿಸಿ" "ಯಾವುದನ್ನೂ ಪುನರಾವರ್ತಿಸಬೇಡಿ" diff --git a/library/ui/src/main/res/values-ko/strings.xml b/library/ui/src/main/res/values-ko/strings.xml index 48b97f7548..32d3deeb9e 100644 --- a/library/ui/src/main/res/values-ko/strings.xml +++ b/library/ui/src/main/res/values-ko/strings.xml @@ -19,10 +19,12 @@ "다음 트랙" "일시중지" "재생" - "되감기" + "중지" + "되감기" "빨리 감기" "전체 반복" "반복 안함" "한 항목 반복" "셔플" + 전체 화면 모드 diff --git a/library/ui/src/main/res/values-ky-rKG/strings.xml b/library/ui/src/main/res/values-ky-rKG/strings.xml index 7a5170db9a..9b903a124e 100644 --- a/library/ui/src/main/res/values-ky-rKG/strings.xml +++ b/library/ui/src/main/res/values-ky-rKG/strings.xml @@ -19,7 +19,8 @@ "Кийинки трек" "Тындыруу" "Ойнотуу" - "Артка түрүү" + "Токтотуу" + "Артка түрүү" "Алдыга түрүү" "Баарын кайталоо" "Эч бирин кайталабоо" diff --git a/library/ui/src/main/res/values-lo-rLA/strings.xml b/library/ui/src/main/res/values-lo-rLA/strings.xml index cc5159ccaf..702cd54396 100644 --- a/library/ui/src/main/res/values-lo-rLA/strings.xml +++ b/library/ui/src/main/res/values-lo-rLA/strings.xml @@ -19,7 +19,8 @@ "​ເພງ​ຕໍ່​ໄປ" "ຢຸດຊົ່ວຄາວ" "ຫຼິ້ນ" - "​ຣີ​​ວາຍກັບ" + "ຢຸດ" + "​ຣີ​​ວາຍກັບ" "ເລື່ອນ​ໄປ​ໜ້າ" "ຫຼິ້ນ​ຊ້ຳ​ທັງ​ໝົດ" "​ບໍ່ຫຼິ້ນ​ຊ້ຳ" diff --git a/library/ui/src/main/res/values-lt/strings.xml b/library/ui/src/main/res/values-lt/strings.xml index 3d6d15478b..091f2384b2 100644 --- a/library/ui/src/main/res/values-lt/strings.xml +++ b/library/ui/src/main/res/values-lt/strings.xml @@ -19,10 +19,12 @@ "Kitas takelis" "Pristabdyti" "Leisti" + "Stabdyti" "Sukti atgal" "Sukti pirmyn" "Kartoti viską" "Nekartoti nieko" "Kartoti vieną" "Maišyti" + Viso ekrano režimas diff --git a/library/ui/src/main/res/values-lv/strings.xml b/library/ui/src/main/res/values-lv/strings.xml index d84b200718..af982587bf 100644 --- a/library/ui/src/main/res/values-lv/strings.xml +++ b/library/ui/src/main/res/values-lv/strings.xml @@ -19,10 +19,12 @@ "Nākamais ieraksts" "Pārtraukt" "Atskaņot" - "Attīt atpakaļ" + "Apturēt" + "Attīt atpakaļ" "Ātri patīt" "Atkārtot visu" "Neatkārtot nevienu" "Atkārtot vienu" "Atskaņot jauktā secībā" + Pilnekrāna režīms diff --git a/library/ui/src/main/res/values-mk-rMK/strings.xml b/library/ui/src/main/res/values-mk-rMK/strings.xml index 58723abba7..60858df8b1 100644 --- a/library/ui/src/main/res/values-mk-rMK/strings.xml +++ b/library/ui/src/main/res/values-mk-rMK/strings.xml @@ -19,6 +19,7 @@ "Следна песна" "Пауза" "Пушти" + "Запри" "Премотај назад" "Брзо премотај напред" "Повтори ги сите" diff --git a/library/ui/src/main/res/values-ml-rIN/strings.xml b/library/ui/src/main/res/values-ml-rIN/strings.xml index 6706323594..4e5eddb93e 100644 --- a/library/ui/src/main/res/values-ml-rIN/strings.xml +++ b/library/ui/src/main/res/values-ml-rIN/strings.xml @@ -19,7 +19,8 @@ "അടുത്ത ട്രാക്ക്" "താൽക്കാലികമായി നിർത്തുക" "പ്ലേ ചെയ്യുക" - "റിവൈൻഡുചെയ്യുക" + "നിര്‍ത്തുക" + "റിവൈൻഡുചെയ്യുക" "വേഗത്തിലുള്ള കൈമാറൽ" "എല്ലാം ആവർത്തിക്കുക" "ഒന്നും ആവർത്തിക്കരുത്" diff --git a/library/ui/src/main/res/values-mn-rMN/strings.xml b/library/ui/src/main/res/values-mn-rMN/strings.xml index f1734f5fd9..4ab26a7f62 100644 --- a/library/ui/src/main/res/values-mn-rMN/strings.xml +++ b/library/ui/src/main/res/values-mn-rMN/strings.xml @@ -19,7 +19,8 @@ "Дараагийн трек" "Түр зогсоох" "Тоглуулах" - "Буцааж хураах" + "Зогсоох" + "Буцааж хураах" "Хурдан урагшлуулах" "Бүгдийг давтах" "Алийг нь ч давтахгүй" diff --git a/library/ui/src/main/res/values-mr-rIN/strings.xml b/library/ui/src/main/res/values-mr-rIN/strings.xml index 26fe670c91..7869355b59 100644 --- a/library/ui/src/main/res/values-mr-rIN/strings.xml +++ b/library/ui/src/main/res/values-mr-rIN/strings.xml @@ -19,7 +19,8 @@ "पुढील ट्रॅक" "विराम द्या" "प्ले करा" - "रिवाईँड करा" + "थांबा" + "रिवाईँड करा" "फास्ट फॉरवर्ड करा" "सर्व पुनरावृत्ती करा" "काहीही पुनरावृत्ती करू नका" diff --git a/library/ui/src/main/res/values-ms-rMY/strings.xml b/library/ui/src/main/res/values-ms-rMY/strings.xml index 941eb7d10b..fdde3de079 100644 --- a/library/ui/src/main/res/values-ms-rMY/strings.xml +++ b/library/ui/src/main/res/values-ms-rMY/strings.xml @@ -19,7 +19,8 @@ "Lagu seterusnya" "Jeda" "Main" - "Gulung semula" + "Berhenti" + "Gulung semula" "Mara laju" "Ulang semua" "Tiada ulangan" diff --git a/library/ui/src/main/res/values-my-rMM/strings.xml b/library/ui/src/main/res/values-my-rMM/strings.xml index c5052ac9ae..3d7918d953 100644 --- a/library/ui/src/main/res/values-my-rMM/strings.xml +++ b/library/ui/src/main/res/values-my-rMM/strings.xml @@ -19,7 +19,8 @@ "နောက် တစ်ပုဒ်" "ခဏရပ်ရန်" "ဖွင့်ရန်" - "ပြန်ရစ်ရန်" + "ရပ်ရန်" + "ပြန်ရစ်ရန်" "ရှေ့သို့ သွားရန်" "အားလုံး ထပ်တလဲလဲဖွင့်ရန်" "ထပ်တလဲလဲမဖွင့်ရန်" diff --git a/library/ui/src/main/res/values-nb/strings.xml b/library/ui/src/main/res/values-nb/strings.xml index 7bd0b2d849..370c759b84 100644 --- a/library/ui/src/main/res/values-nb/strings.xml +++ b/library/ui/src/main/res/values-nb/strings.xml @@ -19,7 +19,8 @@ "Neste spor" "Sett på pause" "Spill av" - "Tilbakespoling" + "Stopp" + "Tilbakespoling" "Fremoverspoling" "Gjenta alle" "Ikke gjenta noen" diff --git a/library/ui/src/main/res/values-ne-rNP/strings.xml b/library/ui/src/main/res/values-ne-rNP/strings.xml index fc0bd57ce4..19f43d0392 100644 --- a/library/ui/src/main/res/values-ne-rNP/strings.xml +++ b/library/ui/src/main/res/values-ne-rNP/strings.xml @@ -19,7 +19,8 @@ "अर्को ट्रयाक" "रोक्नुहोस्" "चलाउनुहोस्" - "दोहोर्याउनुहोस्" + "रोक्नुहोस्" + "दोहोर्याउनुहोस्" "फास्ट फर्वार्ड" "सबै दोहोर्याउनुहोस्" "कुनै पनि नदोहोर्याउनुहोस्" diff --git a/library/ui/src/main/res/values-nl/strings.xml b/library/ui/src/main/res/values-nl/strings.xml index 7ac0acb7ae..a67ab2968c 100644 --- a/library/ui/src/main/res/values-nl/strings.xml +++ b/library/ui/src/main/res/values-nl/strings.xml @@ -19,7 +19,8 @@ "Volgend nummer" "Onderbreken" "Afspelen" - "Terugspoelen" + "Stoppen" + "Terugspoelen" "Vooruitspoelen" "Alles herhalen" "Niet herhalen" diff --git a/library/ui/src/main/res/values-pa-rIN/strings.xml b/library/ui/src/main/res/values-pa-rIN/strings.xml index 9b5b4373ac..6250b90514 100644 --- a/library/ui/src/main/res/values-pa-rIN/strings.xml +++ b/library/ui/src/main/res/values-pa-rIN/strings.xml @@ -19,7 +19,8 @@ "ਅਗਲਾ ਟਰੈਕ" "ਰੋਕੋ" "ਪਲੇ ਕਰੋ" - "ਰੀਵਾਈਂਡ ਕਰੋ" + "ਰੋਕੋ" + "ਰੀਵਾਈਂਡ ਕਰੋ" "ਅੱਗੇ ਭੇਜੋ" "ਸਭ ਨੂੰ ਦੁਹਰਾਓ" "ਕੋਈ ਵੀ ਨਹੀਂ ਦੁਹਰਾਓ" diff --git a/library/ui/src/main/res/values-pl/strings.xml b/library/ui/src/main/res/values-pl/strings.xml index 555c93d62b..981aa17543 100644 --- a/library/ui/src/main/res/values-pl/strings.xml +++ b/library/ui/src/main/res/values-pl/strings.xml @@ -19,10 +19,12 @@ "Następny utwór" "Wstrzymaj" "Odtwórz" - "Przewiń do tyłu" + "Zatrzymaj" + "Przewiń do tyłu" "Przewiń do przodu" "Powtórz wszystkie" "Nie powtarzaj" "Powtórz jeden" "Odtwarzaj losowo" + Tryb pełnoekranowy diff --git a/library/ui/src/main/res/values-pt-rBR/strings.xml b/library/ui/src/main/res/values-pt-rBR/strings.xml index 144381ac84..86a91b0677 100644 --- a/library/ui/src/main/res/values-pt-rBR/strings.xml +++ b/library/ui/src/main/res/values-pt-rBR/strings.xml @@ -19,7 +19,8 @@ "Próxima faixa" "Pausar" "Reproduzir" - "Retroceder" + "Parar" + "Retroceder" "Avançar" "Repetir tudo" "Não repetir" diff --git a/library/ui/src/main/res/values-pt-rPT/strings.xml b/library/ui/src/main/res/values-pt-rPT/strings.xml index cda1ef3206..f0c3770c51 100644 --- a/library/ui/src/main/res/values-pt-rPT/strings.xml +++ b/library/ui/src/main/res/values-pt-rPT/strings.xml @@ -19,10 +19,12 @@ "Faixa seguinte" "Interromper" "Reproduzir" - "Rebobinar" + "Parar" + "Rebobinar" "Avançar" "Repetir tudo" "Não repetir" "Repetir um" "Reproduzir aleatoriamente" + Modo de ecrã inteiro diff --git a/library/ui/src/main/res/values-pt/strings.xml b/library/ui/src/main/res/values-pt/strings.xml index 0165d47fd2..8441e4e1cc 100644 --- a/library/ui/src/main/res/values-pt/strings.xml +++ b/library/ui/src/main/res/values-pt/strings.xml @@ -19,7 +19,8 @@ "Próxima faixa" "Pausar" "Reproduzir" - "Retroceder" + "Parar" + "Retroceder" "Avançar" "Repetir tudo" "Não repetir" diff --git a/library/ui/src/main/res/values-ro/strings.xml b/library/ui/src/main/res/values-ro/strings.xml index 7efa310305..6b8644e30a 100644 --- a/library/ui/src/main/res/values-ro/strings.xml +++ b/library/ui/src/main/res/values-ro/strings.xml @@ -19,7 +19,8 @@ "Melodia următoare" "Pauză" "Redați" - "Derulați" + "Opriți" + "Derulați" "Derulați rapid înainte" "Repetați toate" "Repetați niciuna" diff --git a/library/ui/src/main/res/values-ru/strings.xml b/library/ui/src/main/res/values-ru/strings.xml index ef17de56b8..51d11d6371 100644 --- a/library/ui/src/main/res/values-ru/strings.xml +++ b/library/ui/src/main/res/values-ru/strings.xml @@ -19,7 +19,8 @@ "Следующий трек" "Приостановить" "Воспроизвести" - "Перемотать назад" + "Остановить" + "Перемотать назад" "Перемотать вперед" "Повторять все" "Не повторять" diff --git a/library/ui/src/main/res/values-si-rLK/strings.xml b/library/ui/src/main/res/values-si-rLK/strings.xml index 5347af1158..eb8453b156 100644 --- a/library/ui/src/main/res/values-si-rLK/strings.xml +++ b/library/ui/src/main/res/values-si-rLK/strings.xml @@ -19,7 +19,8 @@ "ඊළඟ ගීතය" "විරාමය" "ධාවනය කරන්න" - "නැවත ඔතන්න" + "නතර කරන්න" + "නැවත ඔතන්න" "වේගයෙන් ඉදිරියට යන" "සියලු නැවත" "කිසිවක් නැවත" diff --git a/library/ui/src/main/res/values-sk/strings.xml b/library/ui/src/main/res/values-sk/strings.xml index c001dc51af..a289e89d34 100644 --- a/library/ui/src/main/res/values-sk/strings.xml +++ b/library/ui/src/main/res/values-sk/strings.xml @@ -19,10 +19,12 @@ "Ďalšia stopa" "Pozastaviť" "Prehrať" - "Pretočiť späť" + "Zastaviť" + "Pretočiť späť" "Pretočiť dopredu" "Opakovať všetko" "Neopakovať" "Opakovať jednu položku" "Náhodne prehrávať" + Režim celej obrazovky diff --git a/library/ui/src/main/res/values-sl/strings.xml b/library/ui/src/main/res/values-sl/strings.xml index f2409dd39d..8ed731b0d3 100644 --- a/library/ui/src/main/res/values-sl/strings.xml +++ b/library/ui/src/main/res/values-sl/strings.xml @@ -19,7 +19,8 @@ "Naslednja skladba" "Zaustavi" "Predvajaj" - "Previj nazaj" + "Ustavi" + "Previj nazaj" "Previj naprej" "Ponovi vse" "Ne ponovi" diff --git a/library/ui/src/main/res/values-sq-rAL/strings.xml b/library/ui/src/main/res/values-sq-rAL/strings.xml index 2b9c1752b8..e2d209e10b 100644 --- a/library/ui/src/main/res/values-sq-rAL/strings.xml +++ b/library/ui/src/main/res/values-sq-rAL/strings.xml @@ -19,7 +19,8 @@ "Kënga tjetër" "Pauzë" "Luaj" - "Kthehu pas" + "Ndalo" + "Kthehu pas" "Përparo me shpejtësi" "Përsërit të gjithë" "Përsëritni asnjë" diff --git a/library/ui/src/main/res/values-sr/strings.xml b/library/ui/src/main/res/values-sr/strings.xml index 50645eb9a5..9cff134a61 100644 --- a/library/ui/src/main/res/values-sr/strings.xml +++ b/library/ui/src/main/res/values-sr/strings.xml @@ -19,10 +19,12 @@ "Следећа песма" "Пауза" "Пусти" - "Премотај уназад" + "Заустави" + "Премотај уназад" "Премотај унапред" "Понови све" "Понављање је искључено" "Понови једну" "Пусти насумично" + Режим целог екрана diff --git a/library/ui/src/main/res/values-sv/strings.xml b/library/ui/src/main/res/values-sv/strings.xml index 3b90524a14..b8fc7a1fff 100644 --- a/library/ui/src/main/res/values-sv/strings.xml +++ b/library/ui/src/main/res/values-sv/strings.xml @@ -19,10 +19,12 @@ "Nästa spår" "Pausa" "Spela upp" - "Spola tillbaka" + "Avbryt" + "Spola tillbaka" "Snabbspola framåt" "Upprepa alla" "Upprepa inga" "Upprepa en" "Blanda" + Helskärmsläge diff --git a/library/ui/src/main/res/values-sw/strings.xml b/library/ui/src/main/res/values-sw/strings.xml index 6fdd52be20..4451ad3c2b 100644 --- a/library/ui/src/main/res/values-sw/strings.xml +++ b/library/ui/src/main/res/values-sw/strings.xml @@ -19,10 +19,12 @@ "Wimbo unaofuata" "Sitisha" "Cheza" - "Rudisha nyuma" + "Simamisha" + "Rudisha nyuma" "Peleka mbele kwa kasi" "Rudia zote" "Usirudie Yoyote" "Rudia Moja" "Changanya" + Hali ya skrini kamili diff --git a/library/ui/src/main/res/values-ta-rIN/strings.xml b/library/ui/src/main/res/values-ta-rIN/strings.xml index eaf11a375e..43a925aa2e 100644 --- a/library/ui/src/main/res/values-ta-rIN/strings.xml +++ b/library/ui/src/main/res/values-ta-rIN/strings.xml @@ -19,7 +19,8 @@ "அடுத்த ட்ராக்" "இடைநிறுத்து" "இயக்கு" - "மீண்டும் காட்டு" + "நிறுத்து" + "மீண்டும் காட்டு" "வேகமாக முன்செல்" "அனைத்தையும் மீண்டும் இயக்கு" "எதையும் மீண்டும் இயக்காதே" diff --git a/library/ui/src/main/res/values-te-rIN/strings.xml b/library/ui/src/main/res/values-te-rIN/strings.xml index 77a82f95b3..8541a44553 100644 --- a/library/ui/src/main/res/values-te-rIN/strings.xml +++ b/library/ui/src/main/res/values-te-rIN/strings.xml @@ -19,7 +19,8 @@ "తదుపరి ట్రాక్" "పాజ్ చేయి" "ప్లే చేయి" - "రివైండ్ చేయి" + "ఆపివేయి" + "రివైండ్ చేయి" "వేగంగా ఫార్వార్డ్ చేయి" "అన్నీ పునరావృతం చేయి" "ఏదీ పునరావృతం చేయవద్దు" diff --git a/library/ui/src/main/res/values-th/strings.xml b/library/ui/src/main/res/values-th/strings.xml index 297fe8ef34..664900e7da 100644 --- a/library/ui/src/main/res/values-th/strings.xml +++ b/library/ui/src/main/res/values-th/strings.xml @@ -19,10 +19,12 @@ "แทร็กถัดไป" "หยุดชั่วคราว" "เล่น" - "กรอกลับ" + "หยุด" + "กรอกลับ" "กรอไปข้างหน้า" "เล่นซ้ำทั้งหมด" "ไม่เล่นซ้ำ" "เล่นซ้ำรายการเดียว" "สุ่มเพลง" + โหมดเต็มหน้าจอ diff --git a/library/ui/src/main/res/values-tl/strings.xml b/library/ui/src/main/res/values-tl/strings.xml index f2b27466f8..471191a81a 100644 --- a/library/ui/src/main/res/values-tl/strings.xml +++ b/library/ui/src/main/res/values-tl/strings.xml @@ -19,10 +19,12 @@ "Susunod na track" "I-pause" "I-play" - "I-rewind" + "Ihinto" + "I-rewind" "I-fast forward" "Ulitin Lahat" "Walang Uulitin" "Ulitin ang Isa" "I-shuffle" + Fullscreen mode diff --git a/library/ui/src/main/res/values-tr/strings.xml b/library/ui/src/main/res/values-tr/strings.xml index 843b601c51..cd1bfc5444 100644 --- a/library/ui/src/main/res/values-tr/strings.xml +++ b/library/ui/src/main/res/values-tr/strings.xml @@ -19,7 +19,8 @@ "Sonraki parça" "Duraklat" "Çal" - "Geri sar" + "Durdur" + "Geri sar" "İleri sar" "Tümünü Tekrarla" "Hiçbirini Tekrarlama" diff --git a/library/ui/src/main/res/values-uk/strings.xml b/library/ui/src/main/res/values-uk/strings.xml index 7d918d9491..36bfca2a34 100644 --- a/library/ui/src/main/res/values-uk/strings.xml +++ b/library/ui/src/main/res/values-uk/strings.xml @@ -19,10 +19,12 @@ "Наступна композиція" "Пауза" "Відтворити" - "Перемотати назад" + "Зупинити" + "Перемотати назад" "Перемотати вперед" "Повторити все" "Не повторювати" "Повторити один елемент" "Перемішати" + Повноекранний режим diff --git a/library/ui/src/main/res/values-ur-rPK/strings.xml b/library/ui/src/main/res/values-ur-rPK/strings.xml index 84a89b4035..f253e56c00 100644 --- a/library/ui/src/main/res/values-ur-rPK/strings.xml +++ b/library/ui/src/main/res/values-ur-rPK/strings.xml @@ -19,7 +19,8 @@ "اگلا ٹریک" "موقوف کریں" "چلائیں" - "ریوائینڈ کریں" + "روکیں" + "ریوائینڈ کریں" "تیزی سے فارورڈ کریں" "سبھی کو دہرائیں" "کسی کو نہ دہرائیں" diff --git a/library/ui/src/main/res/values-uz-rUZ/strings.xml b/library/ui/src/main/res/values-uz-rUZ/strings.xml index 9a4e94d3fd..a322690b2d 100644 --- a/library/ui/src/main/res/values-uz-rUZ/strings.xml +++ b/library/ui/src/main/res/values-uz-rUZ/strings.xml @@ -19,7 +19,8 @@ "Keyingi musiqa" "To‘xtatib turish" "Ijro qilish" - "Orqaga o‘tkazish" + "To‘xtatish" + "Orqaga o‘tkazish" "Oldinga o‘tkazish" "Barchasini takrorlash" "Takrorlamaslik" diff --git a/library/ui/src/main/res/values-vi/strings.xml b/library/ui/src/main/res/values-vi/strings.xml index 29d5b32d8a..748de96949 100644 --- a/library/ui/src/main/res/values-vi/strings.xml +++ b/library/ui/src/main/res/values-vi/strings.xml @@ -19,10 +19,12 @@ "Bản nhạc tiếp theo" "Tạm dừng" "Phát" - "Tua lại" + "Ngừng" + "Tua lại" "Tua đi" "Lặp lại tất cả" "Không lặp lại" "Lặp lại một mục" "Trộn bài" + Chế độ toàn màn hình diff --git a/library/ui/src/main/res/values-zh-rCN/strings.xml b/library/ui/src/main/res/values-zh-rCN/strings.xml index 6c318309a1..d357152a64 100644 --- a/library/ui/src/main/res/values-zh-rCN/strings.xml +++ b/library/ui/src/main/res/values-zh-rCN/strings.xml @@ -19,10 +19,12 @@ "下一曲" "暂停" "播放" - "快退" + "停止" + "快退" "快进" "重复播放全部" "不重复播放" "重复播放单个视频" "随机播放" + 全屏模式 diff --git a/library/ui/src/main/res/values-zh-rHK/strings.xml b/library/ui/src/main/res/values-zh-rHK/strings.xml index 667667f490..3a26b8b5f0 100644 --- a/library/ui/src/main/res/values-zh-rHK/strings.xml +++ b/library/ui/src/main/res/values-zh-rHK/strings.xml @@ -19,10 +19,12 @@ "下一首曲目" "暫停" "播放" - "倒帶" + "停止" + "倒帶" "向前快轉" "重複播放所有媒體項目" "不重複播放任何媒體項目" "重複播放一個媒體項目" "隨機播放" + 全螢幕模式 diff --git a/library/ui/src/main/res/values-zh-rTW/strings.xml b/library/ui/src/main/res/values-zh-rTW/strings.xml index 50ebd3f4b9..6f87d143ad 100644 --- a/library/ui/src/main/res/values-zh-rTW/strings.xml +++ b/library/ui/src/main/res/values-zh-rTW/strings.xml @@ -19,10 +19,12 @@ "下一首曲目" "暫停" "播放" - "倒轉" + "停止" + "倒轉" "快轉" "重複播放所有媒體項目" "不重複播放" "重複播放單一媒體項目" "隨機播放" + 全螢幕模式 diff --git a/library/ui/src/main/res/values-zu/strings.xml b/library/ui/src/main/res/values-zu/strings.xml index c301856964..aff66ba0cf 100644 --- a/library/ui/src/main/res/values-zu/strings.xml +++ b/library/ui/src/main/res/values-zu/strings.xml @@ -19,10 +19,12 @@ "Ithrekhi elandelayo" "Misa isikhashana" "Dlala" - "Buyisela emumva" + "Misa" + "Buyisela emumva" "Ukudlulisa ngokushesha" "Phinda konke" "Ungaphindi lutho" "Phida okukodwa" "Shova" + Imodi yesikrini esiphelele diff --git a/library/ui/src/main/res/values/strings.xml b/library/ui/src/main/res/values/strings.xml index 816fd1c574..d92c615ad0 100644 --- a/library/ui/src/main/res/values/strings.xml +++ b/library/ui/src/main/res/values/strings.xml @@ -23,6 +23,7 @@ Play + Stop Rewind @@ -36,4 +37,13 @@ Shuffle + Fullscreen mode + + Download queued + + Downloading + + Download completed + + Download failed diff --git a/settings.gradle b/settings.gradle index 0a404aad73..d4530d67b7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -19,9 +19,11 @@ if (gradle.ext.has('exoplayerModulePrefix')) { } include modulePrefix + 'demo' +include modulePrefix + 'demo-cast' include modulePrefix + 'demo-ima' include modulePrefix + 'playbacktests' project(modulePrefix + 'demo').projectDir = new File(rootDir, 'demos/main') +project(modulePrefix + 'demo-cast').projectDir = new File(rootDir, 'demos/cast') project(modulePrefix + 'demo-ima').projectDir = new File(rootDir, 'demos/ima') project(modulePrefix + 'playbacktests').projectDir = new File(rootDir, 'playbacktests') diff --git a/testutils/build.gradle b/testutils/build.gradle index e40dae72fb..c82447eafc 100644 --- a/testutils/build.gradle +++ b/testutils/build.gradle @@ -22,10 +22,6 @@ android { minSdkVersion project.ext.minSdkVersion targetSdkVersion project.ext.targetSdkVersion } - - lintOptions { - disable 'InvalidPackage' - } } dependencies {