diff --git a/demo/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java b/demo/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java index db0da6a4c9..ed5f0c436e 100644 --- a/demo/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java +++ b/demo/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java @@ -22,17 +22,10 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.Surface; -import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; -import android.view.View.OnKeyListener; -import android.view.View.OnTouchListener; import android.widget.Button; import android.widget.LinearLayout; -import android.widget.MediaController; import android.widget.TextView; import android.widget.Toast; import com.google.android.exoplayer2.C; @@ -64,12 +57,9 @@ import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.MappingTrackSelector; import com.google.android.exoplayer2.trackselection.MappingTrackSelector.TrackInfo; import com.google.android.exoplayer2.trackselection.TrackSelection; -import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; import com.google.android.exoplayer2.ui.DebugTextViewHelper; -import com.google.android.exoplayer2.ui.KeyCompatibleMediaController; -import com.google.android.exoplayer2.ui.MediaControllerPrevNextClickListener; -import com.google.android.exoplayer2.ui.PlayerControl; -import com.google.android.exoplayer2.ui.SubtitleView; +import com.google.android.exoplayer2.ui.PlaybackControlView; +import com.google.android.exoplayer2.ui.SimpleExoPlayerView; import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; @@ -84,9 +74,8 @@ import java.util.UUID; /** * An activity that plays media using {@link SimpleExoPlayer}. */ -public class PlayerActivity extends Activity implements OnKeyListener, OnTouchListener, - OnClickListener, ExoPlayer.EventListener, SimpleExoPlayer.VideoListener, - MappingTrackSelector.EventListener { +public class PlayerActivity extends Activity implements OnClickListener, ExoPlayer.EventListener, + MappingTrackSelector.EventListener, PlaybackControlView.VisibilityListener { public static final String DRM_SCHEME_UUID_EXTRA = "drm_scheme_uuid"; public static final String DRM_LICENSE_URL = "drm_license_url"; @@ -109,14 +98,9 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi private Handler mainHandler; private EventLogger eventLogger; - private MediaController mediaController; - private View rootView; + private SimpleExoPlayerView simpleExoPlayerView; private LinearLayout debugRootView; - private View shutterView; - private AspectRatioFrameLayout videoFrame; - private SurfaceView surfaceView; private TextView debugTextView; - private SubtitleView subtitleView; private Button retryButton; private String userAgent; @@ -144,21 +128,16 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi } setContentView(R.layout.player_activity); - rootView = findViewById(R.id.root); - rootView.setOnTouchListener(this); - rootView.setOnKeyListener(this); - shutterView = findViewById(R.id.shutter); + View rootView = findViewById(R.id.root); + rootView.setOnClickListener(this); debugRootView = (LinearLayout) findViewById(R.id.controls_root); - videoFrame = (AspectRatioFrameLayout) findViewById(R.id.video_frame); - surfaceView = (SurfaceView) findViewById(R.id.surface_view); debugTextView = (TextView) findViewById(R.id.debug_text_view); - subtitleView = (SubtitleView) findViewById(R.id.subtitles); - subtitleView.setUserDefaultStyle(); - subtitleView.setUserDefaultTextSize(); - mediaController = new KeyCompatibleMediaController(this); - mediaController.setPrevNextListeners(this, this); retryButton = (Button) findViewById(R.id.retry_button); retryButton.setOnClickListener(this); + + simpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.player_view); + simpleExoPlayerView.setControllerVisibilityListener(this); + simpleExoPlayerView.requestFocus(); } @Override @@ -211,26 +190,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi } } - // OnTouchListener methods - - @Override - public boolean onTouch(View view, MotionEvent motionEvent) { - if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { - toggleControlsVisibility(); - } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { - view.performClick(); - } - return true; - } - - // OnKeyListener methods - - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - return keyCode != KeyEvent.KEYCODE_BACK && keyCode != KeyEvent.KEYCODE_ESCAPE - && keyCode != KeyEvent.KEYCODE_MENU && mediaController.dispatchKeyEvent(event); - } - // OnClickListener methods @Override @@ -243,6 +202,13 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi } } + // PlaybackControlView.VisibilityListener implementation + + @Override + public void onVisibilityChange(int visibility) { + debugRootView.setVisibility(visibility); + } + // Internal methods private void initializePlayer() { @@ -279,9 +245,7 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi player.setAudioDebugListener(eventLogger); player.setVideoDebugListener(eventLogger); player.setId3Output(eventLogger); - player.setTextOutput(subtitleView); - player.setVideoListener(this); - player.setVideoSurfaceView(surfaceView); + simpleExoPlayerView.setPlayer(player); if (shouldRestorePosition) { if (playerPosition == C.TIME_UNSET) { player.seekToDefaultPosition(playerWindow); @@ -290,10 +254,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi } } player.setPlayWhenReady(true); - mediaController.setMediaPlayer(new PlayerControl(player)); - mediaController.setPrevNextListeners(new MediaControllerPrevNextClickListener(player, true), - new MediaControllerPrevNextClickListener(player, false)); - mediaController.setAnchorView(rootView); debugViewHelper = new DebugTextViewHelper(player, debugTextView); debugViewHelper.start(); playerNeedsSource = true; @@ -369,7 +329,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi private void releasePlayer() { if (player != null) { - shutterView.setVisibility(View.VISIBLE); debugViewHelper.stop(); debugViewHelper = null; shouldRestorePosition = false; @@ -428,10 +387,7 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi @Override public void onPositionDiscontinuity() { - if (mediaController.isShowing()) { - // The MediaController is visible, so force it to show the updated position immediately. - mediaController.show(); - } + // Do nothing. } @Override @@ -472,19 +428,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi showControls(); } - // SimpleExoPlayer.VideoListener implementation - - @Override - public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, - float pixelWidthAspectRatio) { - videoFrame.setAspectRatio(height == 0 ? 1 : (width * pixelWidthAspectRatio) / height); - } - - @Override - public void onRenderedFirstFrame(Surface surface) { - shutterView.setVisibility(View.GONE); - } - // MappingTrackSelector.EventListener implementation @Override @@ -496,17 +439,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi if (trackInfo.hasOnlyUnplayableTracks(C.TRACK_TYPE_AUDIO)) { showToast(R.string.error_unsupported_audio); } - boolean renderingVideo = false; - for (int i = 0; i < trackInfo.rendererCount; i++) { - if (player.getRendererType(i) == C.TRACK_TYPE_VIDEO - && trackInfo.getTrackSelection(i) != null) { - renderingVideo = true; - break; - } - } - if (!renderingVideo) { - shutterView.setVisibility(View.VISIBLE); - } } // User controls @@ -553,24 +485,8 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi } } - private void toggleControlsVisibility() { - if (mediaController.isShowing()) { - mediaController.hide(); - debugRootView.setVisibility(View.GONE); - } else { - showControls(); - } - } - private void showControls() { debugRootView.setVisibility(View.VISIBLE); - // TODO: Remove this hack when transitioning to our own playback controls. - mainHandler.post(new Runnable() { - @Override - public void run() { - mediaController.show(0); - } - }); } private void showToast(int messageId) { diff --git a/demo/src/main/res/layout/player_activity.xml b/demo/src/main/res/layout/player_activity.xml index 80e05b5dfd..07ac5e2ba1 100644 --- a/demo/src/main/res/layout/player_activity.xml +++ b/demo/src/main/res/layout/player_activity.xml @@ -21,28 +21,10 @@ android:layout_height="match_parent" android:keepScreenOn="true"> - - - - - - - - - + android:layout_height="match_parent"/> 0 - && player.getCurrentPosition() <= MAX_POSITION_FOR_SEEK_TO_PREVIOUS) { - player.seekToDefaultPosition(currentWindowIndex - 1); - } else { - player.seekTo(0); - } - } - } - -} diff --git a/library/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java b/library/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java new file mode 100644 index 0000000000..5f8a209757 --- /dev/null +++ b/library/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java @@ -0,0 +1,462 @@ +/* + * Copyright (C) 2016 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 com.google.android.exoplayer2.ui; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.SeekBar; +import android.widget.TextView; + +import com.google.android.exoplayer2.ExoPlaybackException; +import com.google.android.exoplayer2.ExoPlayer; +import com.google.android.exoplayer2.R; +import com.google.android.exoplayer2.Timeline; +import com.google.android.exoplayer2.util.Util; + +import java.util.Formatter; +import java.util.Locale; + +/** + * A view to control video playback of an {@link ExoPlayer}. + */ +public class PlaybackControlView extends FrameLayout { + + /** + * Listener to be notified about changes of the visibility of the UI control. + */ + public interface VisibilityListener { + /** + * Called after the visibility changed. + * + * @param visibility The visibility value of the UI control after having changed. + */ + void onVisibilityChange(int visibility); + } + + public static final int DEFAULT_FAST_FORWARD_MS = 15000; + public static final int DEFAULT_REWIND_MS = 5000; + public static final int DEFAULT_SHOW_DURATION_MS = 5000; + private static final long MAX_POSITION_FOR_SEEK_TO_PREVIOUS = 3000; + + private ExoPlayer player; + + private final ComponentListener componentListener; + private final View previousButton; + private final View nextButton; + private final ImageButton playButton; + private final TextView time; + private final TextView timeCurrent; + private final SeekBar progressBar; + private final View fastForwardButton; + private final View rewindButton; + private VisibilityListener visibilityListener; + private final StringBuilder formatBuilder; + private final Formatter formatter; + + private final Timeline.Window currentWindow = new Timeline.Window(); + private boolean dragging; + private boolean isProgressUpdating; + private int rewindMs = DEFAULT_REWIND_MS; + private int fastForwardMs = DEFAULT_FAST_FORWARD_MS; + private int showDuration = DEFAULT_SHOW_DURATION_MS; + + private final Runnable updateProgressAction = new Runnable() { + @Override + public void run() { + long pos = updateProgress(); + if (!dragging && isVisible() && isPlaying()) { + postDelayed(updateProgressAction, 1000 - (pos % 1000)); + } else { + isProgressUpdating = false; + } + } + }; + + private final Runnable hideAction = new Runnable() { + @Override + public void run() { + hide(); + } + }; + + public PlaybackControlView(Context context) { + this(context, null); + } + + public PlaybackControlView(Context context, AttributeSet attrs) { + super(context, attrs); + + formatBuilder = new StringBuilder(); + formatter = new Formatter(formatBuilder, Locale.getDefault()); + componentListener = new ComponentListener(); + + LayoutInflater.from(context).inflate(R.layout.playback_control_view, this); + + time = (TextView) findViewById(R.id.time); + timeCurrent = (TextView) findViewById(R.id.time_current); + progressBar = (SeekBar) findViewById(R.id.mediacontroller_progress); + progressBar.setOnSeekBarChangeListener(componentListener); + progressBar.setMax(1000); + + playButton = (ImageButton) findViewById(R.id.pause); + playButton.setOnClickListener(componentListener); + previousButton = findViewById(R.id.prev); + previousButton.setOnClickListener(componentListener); + nextButton = findViewById(R.id.next); + nextButton.setOnClickListener(componentListener); + rewindButton = findViewById(R.id.rew); + rewindButton.setOnClickListener(componentListener); + fastForwardButton = findViewById(R.id.ffwd); + fastForwardButton.setOnClickListener(componentListener); + } + + /** + * Sets the {@link ExoPlayer} to control. + * + * @param player the {@code ExoPlayer} to control. + */ + public void setPlayer(ExoPlayer player) { + if (this.player != null) { + this.player.removeListener(componentListener); + } + this.player = player; + if (player != null) { + player.addListener(componentListener); + } + updatePlayPauseButton(); + updateTime(); + } + + + /** + * Set the {@link VisibilityListener}. + * + * @param listener The listener to be notified about visibility changes. + */ + public void setVisibilityListener(VisibilityListener listener) { + this.visibilityListener = listener; + } + + /** + * Set the duration to rewind in milliseconds. + * + * @param rewindMs Duration to rewind in milliseconds. + */ + public void setRewindMs(int rewindMs) { + this.rewindMs = rewindMs; + } + + /** + * Set the duration to fast forward in milliseconds. + * + * @param fastForwardMs Duration to fast forward in milliseconds. + */ + public void setFastForwardMs(int fastForwardMs) { + this.fastForwardMs = fastForwardMs; + } + + /** + * Set the duration to show the playback control in milliseconds. + * + * @param showDuration Duration in milliseconds. + */ + public void setShowDuration(int showDuration) { + this.showDuration = showDuration; + } + + /** + * Show the controller for the duration set by {@link #setShowDuration(int)} or + * for {@link #DEFAULT_SHOW_DURATION_MS} in milliseconds if not yet set. + */ + public void show() { + show(showDuration); + } + + /** + * Show the controller for the given {@code duration} in milliseconds. If {@code duration} is 0 + * the controller is shown until {@code hide()} is called. + * + * @param duration number of milliseconds the controller is shown. + */ + public void show(int duration) { + setVisibility(VISIBLE); + if (visibilityListener != null) { + visibilityListener.onVisibilityChange(getVisibility()); + } + isProgressUpdating = true; + post(updateProgressAction); + removeCallbacks(hideAction); + showDuration = duration; + if (duration > 0) { + postDelayed(hideAction, duration); + } + } + + /** + * Hide the controller. + */ + public void hide() { + setVisibility(GONE); + if (visibilityListener != null) { + visibilityListener.onVisibilityChange(getVisibility()); + } + removeCallbacks(updateProgressAction); + removeCallbacks(hideAction); + } + + /** + * Returns {@code true} if the controller is currently visible or {@code false} otherwise. + * + * @return {@code true} if shown or {@code false}. + */ + public boolean isVisible() { + return getVisibility() == VISIBLE; + } + + private void hideDeferred() { + removeCallbacks(hideAction); + if (showDuration != 0) { + postDelayed(hideAction, showDuration); + } + } + + private void updatePlayPauseButton() { + playButton.setImageResource(player != null && player.getPlayWhenReady() + ? R.drawable.ic_media_pause : R.drawable.ic_media_play); + } + + private void updateNavigationButtons() { + if (player.getCurrentTimeline() == null || player.getCurrentTimeline().getWindowCount() < 2) { + previousButton.setVisibility(GONE); + nextButton.setVisibility(GONE); + } else if (player.getCurrentWindowIndex() == 0) { + disableView(previousButton); + enableViews(nextButton); + } else if (player.getCurrentWindowIndex() == player.getCurrentTimeline().getWindowCount() - 1) { + enableViews(previousButton); + disableView(nextButton); + } else { + enableViews(previousButton, nextButton); + } + } + + private void disableView(View view) { + view.setEnabled(false); + if (Util.SDK_INT >= 11) { + view.setAlpha(0.3f); + view.setVisibility(VISIBLE); + } else { + view.setVisibility(INVISIBLE); + } + } + + private void enableViews(View... views) { + for (View view : views) { + view.setEnabled(true); + if (Util.SDK_INT >= 11) { + view.setAlpha(1f); + view.setVisibility(VISIBLE); + } else { + view.setVisibility(VISIBLE); + } + } + } + + private void updateUiForLiveStream() { + int visibility = player.getCurrentTimeline() != null && player.getCurrentTimeline() + .getWindow(player.getCurrentWindowIndex(), currentWindow).isDynamic ? GONE + : VISIBLE; + progressBar.setVisibility(visibility); + timeCurrent.setVisibility(visibility); + time.setVisibility(visibility); + fastForwardButton.setVisibility(visibility); + rewindButton.setVisibility(visibility); + } + + private long updateProgress() { + if (player == null || dragging) { + return 0; + } + long position = player.getCurrentPosition(); + long duration = player.getDuration(); + if (progressBar != null) { + if (duration > 0) { + progressBar.setProgress((int) (1000 * position / duration)); + } + progressBar.setSecondaryProgress(player.getBufferedPercentage() * 10); + } + updateTime(); + return position; + } + + private void updateTime() { + time.setText(stringForTime(player == null ? 0 : player.getDuration())); + timeCurrent.setText(stringForTime(player == null ? 0 : player.getCurrentPosition())); + } + + private String stringForTime(long timeMs) { + long totalSeconds = timeMs / 1000; + long seconds = totalSeconds % 60; + long minutes = (totalSeconds / 60) % 60; + long hours = totalSeconds / 3600; + + formatBuilder.setLength(0); + + return hours > 0 ? formatter.format("%d:%02d:%02d", hours, minutes, seconds).toString() + : formatter.format("%02d:%02d", minutes, seconds).toString(); + } + + private boolean isPlaying() { + return player != null && player.getPlayWhenReady() && (player.getPlaybackState() + == ExoPlayer.STATE_READY || player.getPlaybackState() == ExoPlayer.STATE_BUFFERING); + } + + private void previous() { + int currentWindowIndex = player.getCurrentWindowIndex(); + if (currentWindowIndex > 0 && player.getCurrentPosition() + <= MAX_POSITION_FOR_SEEK_TO_PREVIOUS) { + player.seekToDefaultPosition(currentWindowIndex - 1); + } else { + player.seekTo(0); + } + } + + private void next() { + int currentWindowIndex = player.getCurrentWindowIndex(); + Timeline currentTimeline = player.getCurrentTimeline(); + if (currentTimeline != null && currentWindowIndex < currentTimeline.getWindowCount() - 1) { + player.seekToDefaultPosition(currentWindowIndex + 1); + } + } + + private void rewind() { + Timeline currentTimeline = player.getCurrentTimeline(); + currentTimeline.getWindow(player.getCurrentWindowIndex(), currentWindow); + player.seekTo(Math.max(player.getCurrentPosition() - rewindMs, 0)); + } + + private void fastForward() { + player.seekTo(Math.min(player.getCurrentPosition() + fastForwardMs, player.getDuration())); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (player == null || event.getAction() != KeyEvent.ACTION_DOWN) { + return super.dispatchKeyEvent(event); + } + switch (event.getKeyCode()) { + case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: + case KeyEvent.KEYCODE_DPAD_RIGHT: + fastForward(); + break; + case KeyEvent.KEYCODE_MEDIA_REWIND: + case KeyEvent.KEYCODE_DPAD_LEFT: + rewind(); + break; + case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: + player.setPlayWhenReady(!player.getPlayWhenReady()); + break; + case KeyEvent.KEYCODE_MEDIA_PLAY: + player.setPlayWhenReady(true); + break; + case KeyEvent.KEYCODE_MEDIA_PAUSE: + player.setPlayWhenReady(false); + break; + case KeyEvent.KEYCODE_MEDIA_NEXT: + next(); + break; + case KeyEvent.KEYCODE_MEDIA_PREVIOUS: + previous(); + break; + default: + return false; + } + show(); + return true; + } + + private final class ComponentListener implements ExoPlayer.EventListener, + SeekBar.OnSeekBarChangeListener, OnClickListener { + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + removeCallbacks(hideAction); + dragging = true; + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + timeCurrent.setText(stringForTime(player == null ? 0 : player.getDuration() * progress + / 1000)); + progressBar.setSecondaryProgress(player == null ? 0 : player.getBufferedPercentage() * 10); + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + dragging = false; + player.seekTo(player.getDuration() * seekBar.getProgress() / 1000); + hideDeferred(); + } + + @Override + public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { + if (isPlaying() && !isProgressUpdating) { + isProgressUpdating = true; + post(updateProgressAction); + } + updatePlayPauseButton(); + } + + @Override + public void onPositionDiscontinuity() { + updateNavigationButtons(); + updateProgress(); + updateUiForLiveStream(); + } + + @Override + public void onTimelineChanged(Timeline timeline, Object manifest) { /* do nothing. */ } + + @Override + public void onLoadingChanged(boolean isLoading) { /* do nothing */ } + + @Override + public void onPlayerError(ExoPlaybackException error) { /* do nothing */ } + + @Override + public void onClick(View view) { + Timeline currentTimeline = player.getCurrentTimeline(); + if (nextButton == view) { + next(); + } else if (previousButton == view) { + previous(); + } else if (fastForwardButton == view) { + fastForward(); + } else if (rewindButton == view && currentTimeline != null) { + rewind(); + } else if (playButton == view) { + player.setPlayWhenReady(!player.getPlayWhenReady()); + } + hideDeferred(); + } + + } + +} diff --git a/library/src/main/java/com/google/android/exoplayer2/ui/PlayerControl.java b/library/src/main/java/com/google/android/exoplayer2/ui/PlayerControl.java deleted file mode 100644 index ff5c5a8c51..0000000000 --- a/library/src/main/java/com/google/android/exoplayer2/ui/PlayerControl.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2016 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 com.google.android.exoplayer2.ui; - -import android.widget.MediaController.MediaPlayerControl; -import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.ExoPlayer; -import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer; - -/** - * An implementation of {@link MediaPlayerControl} for controlling an {@link ExoPlayer} instance. - * This class is provided for convenience, however it is expected that most applications will - * implement their own player controls and therefore not require this class. - */ -public class PlayerControl implements MediaPlayerControl { - - private final ExoPlayer player; - - /** - * @param player The player to control. - */ - public PlayerControl(ExoPlayer player) { - this.player = player; - } - - @Override - public boolean canPause() { - return true; - } - - @Override - public boolean canSeekBackward() { - return true; - } - - @Override - public boolean canSeekForward() { - return true; - } - - /** - * This is an unsupported operation. - *

- * Application of audio effects is dependent on the audio renderer used. When using - * {@link MediaCodecAudioRenderer}, the recommended approach is to extend the class and override - * {@link MediaCodecAudioRenderer#onAudioSessionId}. - * - * @throws UnsupportedOperationException Always thrown. - */ - @Override - public int getAudioSessionId() { - throw new UnsupportedOperationException(); - } - - @Override - public int getBufferPercentage() { - return player.getBufferedPercentage(); - } - - @Override - public int getCurrentPosition() { - long position = player.getCurrentPosition(); - return position == C.TIME_UNSET ? 0 : (int) position; - } - - @Override - public int getDuration() { - long duration = player.getDuration(); - return duration == C.TIME_UNSET ? 0 : (int) duration; - } - - @Override - public boolean isPlaying() { - return player.getPlayWhenReady(); - } - - @Override - public void start() { - player.setPlayWhenReady(true); - } - - @Override - public void pause() { - player.setPlayWhenReady(false); - } - - @Override - public void seekTo(int timeMillis) { - player.seekTo(timeMillis); - } - -} diff --git a/library/src/main/java/com/google/android/exoplayer2/ui/SimpleExoPlayerView.java b/library/src/main/java/com/google/android/exoplayer2/ui/SimpleExoPlayerView.java new file mode 100644 index 0000000000..e2662b96c6 --- /dev/null +++ b/library/src/main/java/com/google/android/exoplayer2/ui/SimpleExoPlayerView.java @@ -0,0 +1,283 @@ +/* + * Copyright (C) 2016 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 com.google.android.exoplayer2.ui; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.Surface; +import android.view.SurfaceView; +import android.view.TextureView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +import com.google.android.exoplayer2.ExoPlaybackException; +import com.google.android.exoplayer2.ExoPlayer; +import com.google.android.exoplayer2.R; +import com.google.android.exoplayer2.SimpleExoPlayer; +import com.google.android.exoplayer2.Timeline; +import com.google.android.exoplayer2.decoder.DecoderCounters; +import com.google.android.exoplayer2.text.Cue; +import com.google.android.exoplayer2.text.TextRenderer; + +import java.util.List; + +/** + * Displays a video stream. + */ +@TargetApi(16) +public final class SimpleExoPlayerView extends FrameLayout { + + private final View surfaceView; + private final View shutterView; + private final SubtitleView subtitleLayout; + private final AspectRatioFrameLayout layout; + private final PlaybackControlView controller; + private final ComponentListener componentListener; + private SimpleExoPlayer player; + private boolean useController = true; + + public SimpleExoPlayerView(Context context) { + this(context, null); + } + + public SimpleExoPlayerView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SimpleExoPlayerView(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public SimpleExoPlayerView(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + + boolean useTextureView = false; + if (attrs != null) { + TypedArray a = context.getTheme().obtainStyledAttributes(attrs, + R.styleable.SimpleExoPlayerView, 0, 0); + try { + useController = a.getBoolean(R.styleable.SimpleExoPlayerView_use_controller, + useController); + useTextureView = a.getBoolean(R.styleable.SimpleExoPlayerView_use_texture_view, + useTextureView); + } finally { + a.recycle(); + } + } + + LayoutInflater.from(context).inflate(R.layout.exoplayer_video_view, this); + + componentListener = new ComponentListener(); + layout = (AspectRatioFrameLayout) findViewById(R.id.video_frame); + controller = (PlaybackControlView) findViewById(R.id.control); + shutterView = findViewById(R.id.shutter); + subtitleLayout = (SubtitleView) findViewById(R.id.subtitles); + subtitleLayout.setUserDefaultStyle(); + subtitleLayout.setUserDefaultTextSize(); + + View view = useTextureView ? new TextureView(context) : new SurfaceView(context); + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + view.setLayoutParams(params); + surfaceView = view; + layout.addView(surfaceView, 0); + } + + /** + * Set the {@link SimpleExoPlayer} to use. The {@link SimpleExoPlayer#setTextOutput} and + * {@link SimpleExoPlayer#setVideoListener} method of the player will be called and previous + * assignments are overridden. + * + * @param player The {@link SimpleExoPlayer} to use. + */ + public void setPlayer(SimpleExoPlayer player) { + if (this.player != null) { + this.player.setTextOutput(null); + this.player.setVideoListener(null); + this.player.removeListener(componentListener); + this.player.setVideoSurface(null); + } + this.player = player; + + if (player != null) { + if (surfaceView instanceof TextureView) { + player.setVideoTextureView((TextureView) surfaceView); + } else if (surfaceView instanceof SurfaceView) { + player.setVideoSurfaceView((SurfaceView) surfaceView); + } + player.setVideoListener(componentListener); + player.addListener(componentListener); + player.setTextOutput(componentListener); + } + setUseController(useController); + } + + /** + * Set the {@code useController} flag which indicates whether the playback control view should + * be used or not. If set to {@code false} the controller is never visible and is disconnected + * from the player. + * + * @param useController If {@code false} the playback control is never used. + */ + public void setUseController(boolean useController) { + this.useController = useController; + if (useController) { + controller.setPlayer(player); + } else { + controller.hide(); + controller.setPlayer(null); + } + } + + /** + * Set the {@link PlaybackControlView.VisibilityListener}. + * + * @param listener The listener to be notified about visibility changes. + */ + public void setControllerVisibilityListener(PlaybackControlView.VisibilityListener listener) { + controller.setVisibilityListener(listener); + } + + /** + * Set the number of milliseconds to rewind for each step. + * + * @param rewindMs Rewind step in milliseconds. + */ + public void setRewindMs(int rewindMs) { + controller.setRewindMs(rewindMs); + } + + /** + * Set the number of milliseconds to fast forward for each step. + * + * @param fastForwardMs Fast forward step in milliseconds. + */ + public void setFastForwardMs(int fastForwardMs) { + controller.setFastForwardMs(fastForwardMs); + } + + /** + * Set the duration to show the playback control in milliseconds. + * + * @param showDuration Duration in milliseconds. + */ + public void setControlShowDuration(int showDuration) { + controller.setShowDuration(showDuration); + } + + /** + * Get the view onto which video is rendered. This is either a {@link SurfaceView} (default) + * or a {@link TextureView} if the {@code use_texture_view} view attribute has been set to true. + * + * @return either a {@link SurfaceView} or a {@link TextureView}. + */ + public View getVideoSurfaceView() { + return surfaceView; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (useController && ev.getActionMasked() == MotionEvent.ACTION_DOWN) { + if (controller.isVisible()) { + controller.hide(); + } else { + controller.show(); + } + } + return true; + } + @Override + public boolean onTrackballEvent(MotionEvent ev) { + if (!useController) { + return false; + } + controller.show(); + return true; + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + return useController ? controller.dispatchKeyEvent(event) : super.dispatchKeyEvent(event); + } + + private final class ComponentListener implements SimpleExoPlayer.VideoListener, + TextRenderer.Output, ExoPlayer.EventListener { + + // TextRenderer.Output implementation + + @Override + public void onCues(List cues) { + subtitleLayout.onCues(cues); + } + + // SimpleExoPlayer.VideoListener implementation + + @Override + public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, + float pixelWidthHeightRatio) { + layout.setAspectRatio(height == 0 ? 1 : (width * pixelWidthHeightRatio) / height); + } + + @Override + public void onRenderedFirstFrame(Surface surface) { + shutterView.setVisibility(GONE); + } + + @Override + public void onVideoDisabled(DecoderCounters counters) { + shutterView.setVisibility(VISIBLE); + } + + // ExoPlayer.EventListener implementation + + @Override + public void onLoadingChanged(boolean isLoading) { + // Do nothing. + } + + @Override + public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { + if (useController && playbackState == ExoPlayer.STATE_ENDED) { + controller.show(0); + } + } + + @Override + public void onPlayerError(ExoPlaybackException e) { + // Do nothing. + } + + @Override + public void onPositionDiscontinuity() { + // Do nothing. + } + + @Override + public void onTimelineChanged(Timeline timeline, Object manifest) { + // Do nothing. + } + + } + +} diff --git a/library/src/main/res/drawable-hdpi/ic_media_ff.png b/library/src/main/res/drawable-hdpi/ic_media_ff.png new file mode 100644 index 0000000000..c65956ab7f Binary files /dev/null and b/library/src/main/res/drawable-hdpi/ic_media_ff.png differ diff --git a/library/src/main/res/drawable-hdpi/ic_media_next.png b/library/src/main/res/drawable-hdpi/ic_media_next.png new file mode 100644 index 0000000000..6e27b8161e Binary files /dev/null and b/library/src/main/res/drawable-hdpi/ic_media_next.png differ diff --git a/library/src/main/res/drawable-hdpi/ic_media_pause.png b/library/src/main/res/drawable-hdpi/ic_media_pause.png new file mode 100644 index 0000000000..1d465a41e4 Binary files /dev/null and b/library/src/main/res/drawable-hdpi/ic_media_pause.png differ diff --git a/library/src/main/res/drawable-hdpi/ic_media_play.png b/library/src/main/res/drawable-hdpi/ic_media_play.png new file mode 100644 index 0000000000..2746d17fb1 Binary files /dev/null and b/library/src/main/res/drawable-hdpi/ic_media_play.png differ diff --git a/library/src/main/res/drawable-hdpi/ic_media_previous.png b/library/src/main/res/drawable-hdpi/ic_media_previous.png new file mode 100644 index 0000000000..85b3766904 Binary files /dev/null and b/library/src/main/res/drawable-hdpi/ic_media_previous.png differ diff --git a/library/src/main/res/drawable-hdpi/ic_media_rew.png b/library/src/main/res/drawable-hdpi/ic_media_rew.png new file mode 100644 index 0000000000..a4ac181777 Binary files /dev/null and b/library/src/main/res/drawable-hdpi/ic_media_rew.png differ diff --git a/library/src/main/res/drawable-ldpi/ic_media_ff.png b/library/src/main/res/drawable-ldpi/ic_media_ff.png new file mode 100644 index 0000000000..1b4d9dbef9 Binary files /dev/null and b/library/src/main/res/drawable-ldpi/ic_media_ff.png differ diff --git a/library/src/main/res/drawable-ldpi/ic_media_next.png b/library/src/main/res/drawable-ldpi/ic_media_next.png new file mode 100644 index 0000000000..99927fd27b Binary files /dev/null and b/library/src/main/res/drawable-ldpi/ic_media_next.png differ diff --git a/library/src/main/res/drawable-ldpi/ic_media_pause.png b/library/src/main/res/drawable-ldpi/ic_media_pause.png new file mode 100644 index 0000000000..3b98d66688 Binary files /dev/null and b/library/src/main/res/drawable-ldpi/ic_media_pause.png differ diff --git a/library/src/main/res/drawable-ldpi/ic_media_play.png b/library/src/main/res/drawable-ldpi/ic_media_play.png new file mode 100644 index 0000000000..e7c19724bb Binary files /dev/null and b/library/src/main/res/drawable-ldpi/ic_media_play.png differ diff --git a/library/src/main/res/drawable-ldpi/ic_media_previous.png b/library/src/main/res/drawable-ldpi/ic_media_previous.png new file mode 100644 index 0000000000..df043228d0 Binary files /dev/null and b/library/src/main/res/drawable-ldpi/ic_media_previous.png differ diff --git a/library/src/main/res/drawable-ldpi/ic_media_rew.png b/library/src/main/res/drawable-ldpi/ic_media_rew.png new file mode 100644 index 0000000000..28843f9fb0 Binary files /dev/null and b/library/src/main/res/drawable-ldpi/ic_media_rew.png differ diff --git a/library/src/main/res/drawable-mdpi/ic_media_ff.png b/library/src/main/res/drawable-mdpi/ic_media_ff.png new file mode 100644 index 0000000000..170dd2daaa Binary files /dev/null and b/library/src/main/res/drawable-mdpi/ic_media_ff.png differ diff --git a/library/src/main/res/drawable-mdpi/ic_media_next.png b/library/src/main/res/drawable-mdpi/ic_media_next.png new file mode 100644 index 0000000000..fcd73d90e7 Binary files /dev/null and b/library/src/main/res/drawable-mdpi/ic_media_next.png differ diff --git a/library/src/main/res/drawable-mdpi/ic_media_pause.png b/library/src/main/res/drawable-mdpi/ic_media_pause.png new file mode 100644 index 0000000000..3e6b2a17b5 Binary files /dev/null and b/library/src/main/res/drawable-mdpi/ic_media_pause.png differ diff --git a/library/src/main/res/drawable-mdpi/ic_media_play.png b/library/src/main/res/drawable-mdpi/ic_media_play.png new file mode 100644 index 0000000000..7966bbc516 Binary files /dev/null and b/library/src/main/res/drawable-mdpi/ic_media_play.png differ diff --git a/library/src/main/res/drawable-mdpi/ic_media_previous.png b/library/src/main/res/drawable-mdpi/ic_media_previous.png new file mode 100644 index 0000000000..b653d05b9f Binary files /dev/null and b/library/src/main/res/drawable-mdpi/ic_media_previous.png differ diff --git a/library/src/main/res/drawable-mdpi/ic_media_rew.png b/library/src/main/res/drawable-mdpi/ic_media_rew.png new file mode 100644 index 0000000000..5489180eb1 Binary files /dev/null and b/library/src/main/res/drawable-mdpi/ic_media_rew.png differ diff --git a/library/src/main/res/drawable-xhdpi/ic_media_ff.png b/library/src/main/res/drawable-xhdpi/ic_media_ff.png new file mode 100644 index 0000000000..60f7e92181 Binary files /dev/null and b/library/src/main/res/drawable-xhdpi/ic_media_ff.png differ diff --git a/library/src/main/res/drawable-xhdpi/ic_media_next.png b/library/src/main/res/drawable-xhdpi/ic_media_next.png new file mode 100644 index 0000000000..4def965cec Binary files /dev/null and b/library/src/main/res/drawable-xhdpi/ic_media_next.png differ diff --git a/library/src/main/res/drawable-xhdpi/ic_media_pause.png b/library/src/main/res/drawable-xhdpi/ic_media_pause.png new file mode 100644 index 0000000000..6bd3d482e1 Binary files /dev/null and b/library/src/main/res/drawable-xhdpi/ic_media_pause.png differ diff --git a/library/src/main/res/drawable-xhdpi/ic_media_play.png b/library/src/main/res/drawable-xhdpi/ic_media_play.png new file mode 100644 index 0000000000..ccfef18056 Binary files /dev/null and b/library/src/main/res/drawable-xhdpi/ic_media_play.png differ diff --git a/library/src/main/res/drawable-xhdpi/ic_media_previous.png b/library/src/main/res/drawable-xhdpi/ic_media_previous.png new file mode 100644 index 0000000000..c4472ae2d9 Binary files /dev/null and b/library/src/main/res/drawable-xhdpi/ic_media_previous.png differ diff --git a/library/src/main/res/drawable-xhdpi/ic_media_rew.png b/library/src/main/res/drawable-xhdpi/ic_media_rew.png new file mode 100644 index 0000000000..167d10e58b Binary files /dev/null and b/library/src/main/res/drawable-xhdpi/ic_media_rew.png differ diff --git a/library/src/main/res/drawable-xxhdpi/ic_media_ff.png b/library/src/main/res/drawable-xxhdpi/ic_media_ff.png new file mode 100644 index 0000000000..ab9e022fbf Binary files /dev/null and b/library/src/main/res/drawable-xxhdpi/ic_media_ff.png differ diff --git a/library/src/main/res/drawable-xxhdpi/ic_media_next.png b/library/src/main/res/drawable-xxhdpi/ic_media_next.png new file mode 100644 index 0000000000..ce0a14325a Binary files /dev/null and b/library/src/main/res/drawable-xxhdpi/ic_media_next.png differ diff --git a/library/src/main/res/drawable-xxhdpi/ic_media_pause.png b/library/src/main/res/drawable-xxhdpi/ic_media_pause.png new file mode 100644 index 0000000000..9a36b17cb8 Binary files /dev/null and b/library/src/main/res/drawable-xxhdpi/ic_media_pause.png differ diff --git a/library/src/main/res/drawable-xxhdpi/ic_media_play.png b/library/src/main/res/drawable-xxhdpi/ic_media_play.png new file mode 100644 index 0000000000..41f76bbf99 Binary files /dev/null and b/library/src/main/res/drawable-xxhdpi/ic_media_play.png differ diff --git a/library/src/main/res/drawable-xxhdpi/ic_media_previous.png b/library/src/main/res/drawable-xxhdpi/ic_media_previous.png new file mode 100644 index 0000000000..d4688741b9 Binary files /dev/null and b/library/src/main/res/drawable-xxhdpi/ic_media_previous.png differ diff --git a/library/src/main/res/drawable-xxhdpi/ic_media_rew.png b/library/src/main/res/drawable-xxhdpi/ic_media_rew.png new file mode 100644 index 0000000000..8ebb2ccf30 Binary files /dev/null and b/library/src/main/res/drawable-xxhdpi/ic_media_rew.png differ diff --git a/library/src/main/res/layout/exoplayer_video_view.xml b/library/src/main/res/layout/exoplayer_video_view.xml new file mode 100644 index 0000000000..e1745abcff --- /dev/null +++ b/library/src/main/res/layout/exoplayer_video_view.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + diff --git a/library/src/main/res/layout/playback_control_view.xml b/library/src/main/res/layout/playback_control_view.xml new file mode 100644 index 0000000000..7e263eace2 --- /dev/null +++ b/library/src/main/res/layout/playback_control_view.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/library/src/main/res/values-af/strings.xml b/library/src/main/res/values-af/strings.xml new file mode 100644 index 0000000000..2ce5c415de --- /dev/null +++ b/library/src/main/res/values-af/strings.xml @@ -0,0 +1,25 @@ + + + + "Vorige snit" + "Volgende snit" + "Wag" + "Speel" + "Stop" + "Spoel terug" + "Vinnig vorentoe" + diff --git a/library/src/main/res/values-am/strings.xml b/library/src/main/res/values-am/strings.xml new file mode 100644 index 0000000000..39591a86f3 --- /dev/null +++ b/library/src/main/res/values-am/strings.xml @@ -0,0 +1,25 @@ + + + + "ቀዳሚ ትራክ" + "ቀጣይ ትራክ" + "ለአፍታ አቁም" + "አጫውት" + "አቁም" + "ወደኋላ አጠንጥን" + "በፍጥነት አሳልፍ" + diff --git a/library/src/main/res/values-ar/strings.xml b/library/src/main/res/values-ar/strings.xml new file mode 100644 index 0000000000..96b7772ba1 --- /dev/null +++ b/library/src/main/res/values-ar/strings.xml @@ -0,0 +1,25 @@ + + + + "المقطع الصوتي السابق" + "المقطع الصوتي التالي" + "إيقاف مؤقت" + "تشغيل" + "إيقاف" + "إرجاع" + "تقديم سريع" + diff --git a/library/src/main/res/values-az-rAZ/strings.xml b/library/src/main/res/values-az-rAZ/strings.xml new file mode 100644 index 0000000000..aa85203b4d --- /dev/null +++ b/library/src/main/res/values-az-rAZ/strings.xml @@ -0,0 +1,25 @@ + + + + "Öncəki trek" + "Növbəti trek" + "Pauza" + "Oyun" + "Dayandır" + "Geri sarıma" + "Sürətlə irəli" + diff --git a/library/src/main/res/values-b+sr+Latn/strings.xml b/library/src/main/res/values-b+sr+Latn/strings.xml new file mode 100644 index 0000000000..5798cfb96d --- /dev/null +++ b/library/src/main/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,25 @@ + + + + "Prethodna pesma" + "Sledeća pesma" + "Pauza" + "Pusti" + "Zaustavi" + "Premotaj unazad" + "Premotaj unapred" + diff --git a/library/src/main/res/values-be-rBY/strings.xml b/library/src/main/res/values-be-rBY/strings.xml new file mode 100644 index 0000000000..7c77eef2f2 --- /dev/null +++ b/library/src/main/res/values-be-rBY/strings.xml @@ -0,0 +1,25 @@ + + + + "Папярэдні трэк" + "Наступны трэк" + "Прыпыніць" + "Прайграць" + "Спыніць" + "Перамотка назад" + "Перамотка ўперад" + diff --git a/library/src/main/res/values-bg/strings.xml b/library/src/main/res/values-bg/strings.xml new file mode 100644 index 0000000000..2f771368c4 --- /dev/null +++ b/library/src/main/res/values-bg/strings.xml @@ -0,0 +1,25 @@ + + + + "Предишен запис" + "Следващ запис" + "Пауза" + "Пускане" + "Спиране" + "Превъртане назад" + "Превъртане напред" + diff --git a/library/src/main/res/values-bn-rBD/strings.xml b/library/src/main/res/values-bn-rBD/strings.xml new file mode 100644 index 0000000000..7140ab7f8d --- /dev/null +++ b/library/src/main/res/values-bn-rBD/strings.xml @@ -0,0 +1,25 @@ + + + + "পূর্ববর্তী ট্র্যাক" + "পরবর্তী ট্র্যাক" + "বিরাম দিন" + "প্লে করুন" + "থামান" + "গুটিয়ে নিন" + "দ্রুত সামনে এগোন" + diff --git a/library/src/main/res/values-bs-rBA/strings.xml b/library/src/main/res/values-bs-rBA/strings.xml new file mode 100644 index 0000000000..0f578946e6 --- /dev/null +++ b/library/src/main/res/values-bs-rBA/strings.xml @@ -0,0 +1,25 @@ + + + + "Prethodna numera" + "Sljedeća numera" + "Pauziraj" + "Reproduciraj" + "Zaustavi" + "Premotaj" + "Ubrzaj" + diff --git a/library/src/main/res/values-ca/strings.xml b/library/src/main/res/values-ca/strings.xml new file mode 100644 index 0000000000..03ea1f0790 --- /dev/null +++ b/library/src/main/res/values-ca/strings.xml @@ -0,0 +1,25 @@ + + + + "Ruta anterior" + "Ruta següent" + "Posa en pausa" + "Reprodueix" + "Atura" + "Rebobina" + "Avança ràpidament" + diff --git a/library/src/main/res/values-cs/strings.xml b/library/src/main/res/values-cs/strings.xml new file mode 100644 index 0000000000..eb28c8d756 --- /dev/null +++ b/library/src/main/res/values-cs/strings.xml @@ -0,0 +1,25 @@ + + + + "Předchozí skladba" + "Další skladba" + "Pozastavit" + "Přehrát" + "Zastavit" + "Přetočit zpět" + "Přetočit vpřed" + diff --git a/library/src/main/res/values-da/strings.xml b/library/src/main/res/values-da/strings.xml new file mode 100644 index 0000000000..04d64f9632 --- /dev/null +++ b/library/src/main/res/values-da/strings.xml @@ -0,0 +1,25 @@ + + + + "Forrige nummer" + "Næste nummer" + "Pause" + "Afspil" + "Stop" + "Spol tilbage" + "Spol frem" + diff --git a/library/src/main/res/values-de/strings.xml b/library/src/main/res/values-de/strings.xml new file mode 100644 index 0000000000..63ebd19301 --- /dev/null +++ b/library/src/main/res/values-de/strings.xml @@ -0,0 +1,25 @@ + + + + "Vorheriger Titel" + "Nächster Titel" + "Pausieren" + "Wiedergabe" + "Beenden" + "Zurückspulen" + "Vorspulen" + diff --git a/library/src/main/res/values-el/strings.xml b/library/src/main/res/values-el/strings.xml new file mode 100644 index 0000000000..f1744519c4 --- /dev/null +++ b/library/src/main/res/values-el/strings.xml @@ -0,0 +1,25 @@ + + + + "Προηγούμενο κομμάτι" + "Επόμενο κομμάτι" + "Παύση" + "Αναπαραγωγή" + "Διακοπή" + "Επαναφορά" + "Γρήγορη προώθηση" + diff --git a/library/src/main/res/values-en-rAU/strings.xml b/library/src/main/res/values-en-rAU/strings.xml new file mode 100644 index 0000000000..a89377fc1d --- /dev/null +++ b/library/src/main/res/values-en-rAU/strings.xml @@ -0,0 +1,25 @@ + + + + "Previous track" + "Next track" + "Pause" + "Play" + "Stop" + "Rewind" + "Fast-forward" + diff --git a/library/src/main/res/values-en-rGB/strings.xml b/library/src/main/res/values-en-rGB/strings.xml new file mode 100644 index 0000000000..a89377fc1d --- /dev/null +++ b/library/src/main/res/values-en-rGB/strings.xml @@ -0,0 +1,25 @@ + + + + "Previous track" + "Next track" + "Pause" + "Play" + "Stop" + "Rewind" + "Fast-forward" + diff --git a/library/src/main/res/values-en-rIN/strings.xml b/library/src/main/res/values-en-rIN/strings.xml new file mode 100644 index 0000000000..a89377fc1d --- /dev/null +++ b/library/src/main/res/values-en-rIN/strings.xml @@ -0,0 +1,25 @@ + + + + "Previous track" + "Next track" + "Pause" + "Play" + "Stop" + "Rewind" + "Fast-forward" + diff --git a/library/src/main/res/values-es-rUS/strings.xml b/library/src/main/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000..6e1dcf01de --- /dev/null +++ b/library/src/main/res/values-es-rUS/strings.xml @@ -0,0 +1,25 @@ + + + + "Pista anterior" + "Siguiente pista" + "Pausar" + "Reproducir" + "Detener" + "Retroceder" + "Avanzar" + diff --git a/library/src/main/res/values-es/strings.xml b/library/src/main/res/values-es/strings.xml new file mode 100644 index 0000000000..4f108bc5df --- /dev/null +++ b/library/src/main/res/values-es/strings.xml @@ -0,0 +1,25 @@ + + + + "Canción anterior" + "Siguiente canción" + "Pausar" + "Reproducir" + "Detener" + "Rebobinar" + "Avance rápido" + diff --git a/library/src/main/res/values-et-rEE/strings.xml b/library/src/main/res/values-et-rEE/strings.xml new file mode 100644 index 0000000000..588510dc32 --- /dev/null +++ b/library/src/main/res/values-et-rEE/strings.xml @@ -0,0 +1,25 @@ + + + + "Eelmine lugu" + "Järgmine lugu" + "Peata" + "Esita" + "Peata" + "Keri tagasi" + "Keri edasi" + diff --git a/library/src/main/res/values-eu-rES/strings.xml b/library/src/main/res/values-eu-rES/strings.xml new file mode 100644 index 0000000000..fa96388522 --- /dev/null +++ b/library/src/main/res/values-eu-rES/strings.xml @@ -0,0 +1,25 @@ + + + + "Aurreko pista" + "Hurrengo pista" + "Pausatu" + "Erreproduzitu" + "Gelditu" + "Atzeratu" + "Aurreratu" + diff --git a/library/src/main/res/values-fa/strings.xml b/library/src/main/res/values-fa/strings.xml new file mode 100644 index 0000000000..84c99cae18 --- /dev/null +++ b/library/src/main/res/values-fa/strings.xml @@ -0,0 +1,25 @@ + + + + "آهنگ قبلی" + "آهنگ بعدی" + "مکث" + "پخش" + "توقف" + "عقب بردن" + "جلو بردن سریع" + diff --git a/library/src/main/res/values-fi/strings.xml b/library/src/main/res/values-fi/strings.xml new file mode 100644 index 0000000000..ae0e25b1aa --- /dev/null +++ b/library/src/main/res/values-fi/strings.xml @@ -0,0 +1,25 @@ + + + + "Edellinen raita" + "Seuraava raita" + "Tauko" + "Toista" + "Seis" + "Kelaa taakse" + "Kelaa eteen" + diff --git a/library/src/main/res/values-fr-rCA/strings.xml b/library/src/main/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000000..5215b00d82 --- /dev/null +++ b/library/src/main/res/values-fr-rCA/strings.xml @@ -0,0 +1,25 @@ + + + + "Chanson précédente" + "Chanson suivante" + "Pause" + "Lecture" + "Arrêter" + "Reculer" + "Avance rapide" + diff --git a/library/src/main/res/values-fr/strings.xml b/library/src/main/res/values-fr/strings.xml new file mode 100644 index 0000000000..7980c80b47 --- /dev/null +++ b/library/src/main/res/values-fr/strings.xml @@ -0,0 +1,25 @@ + + + + "Piste précédente" + "Piste suivante" + "Interrompre" + "Lire" + "Arrêter" + "Retour arrière" + "Avance rapide" + diff --git a/library/src/main/res/values-gl-rES/strings.xml b/library/src/main/res/values-gl-rES/strings.xml new file mode 100644 index 0000000000..05864b2633 --- /dev/null +++ b/library/src/main/res/values-gl-rES/strings.xml @@ -0,0 +1,25 @@ + + + + "Pista anterior" + "Seguinte pista" + "Pausar" + "Reproducir" + "Deter" + "Rebobinar" + "Avance rápido" + diff --git a/library/src/main/res/values-gu-rIN/strings.xml b/library/src/main/res/values-gu-rIN/strings.xml new file mode 100644 index 0000000000..b935154cc4 --- /dev/null +++ b/library/src/main/res/values-gu-rIN/strings.xml @@ -0,0 +1,25 @@ + + + + "પહેલાનો ટ્રૅક" + "આગલો ટ્રૅક" + "થોભો" + "ચલાવો" + "રોકો" + "રીવાઇન્ડ કરો" + "ઝડપી ફોરવર્ડ કરો" + diff --git a/library/src/main/res/values-hi/strings.xml b/library/src/main/res/values-hi/strings.xml new file mode 100644 index 0000000000..08415bc992 --- /dev/null +++ b/library/src/main/res/values-hi/strings.xml @@ -0,0 +1,25 @@ + + + + "पिछला ट्रैक" + "अगला ट्रैक" + "रोकें" + "चलाएं" + "बंद करें" + "रिवाइंड करें" + "फ़ास्ट फ़ॉरवर्ड" + diff --git a/library/src/main/res/values-hr/strings.xml b/library/src/main/res/values-hr/strings.xml new file mode 100644 index 0000000000..6fe1ba9288 --- /dev/null +++ b/library/src/main/res/values-hr/strings.xml @@ -0,0 +1,25 @@ + + + + "Prethodna pjesma" + "Sljedeća pjesma" + "Pauziraj" + "Reproduciraj" + "Zaustavi" + "Unatrag" + "Brzo unaprijed" + diff --git a/library/src/main/res/values-hu/strings.xml b/library/src/main/res/values-hu/strings.xml new file mode 100644 index 0000000000..be28793dc3 --- /dev/null +++ b/library/src/main/res/values-hu/strings.xml @@ -0,0 +1,25 @@ + + + + "Előző szám" + "Következő szám" + "Szünet" + "Lejátszás" + "Leállítás" + "Visszatekerés" + "Előretekerés" + diff --git a/library/src/main/res/values-hy-rAM/strings.xml b/library/src/main/res/values-hy-rAM/strings.xml new file mode 100644 index 0000000000..3052d6c26b --- /dev/null +++ b/library/src/main/res/values-hy-rAM/strings.xml @@ -0,0 +1,25 @@ + + + + "Նախորդը" + "Հաջորդը" + "Դադարեցնել" + "Նվագարկել" + "Դադարեցնել" + "Հետ փաթաթել" + "Արագ առաջ անցնել" + diff --git a/library/src/main/res/values-in/strings.xml b/library/src/main/res/values-in/strings.xml new file mode 100644 index 0000000000..6be2c2155c --- /dev/null +++ b/library/src/main/res/values-in/strings.xml @@ -0,0 +1,25 @@ + + + + "Lagu sebelumnya" + "Lagu berikutnya" + "Jeda" + "Putar" + "Berhenti" + "Putar Ulang" + "Maju cepat" + diff --git a/library/src/main/res/values-is-rIS/strings.xml b/library/src/main/res/values-is-rIS/strings.xml new file mode 100644 index 0000000000..80b81fa7fb --- /dev/null +++ b/library/src/main/res/values-is-rIS/strings.xml @@ -0,0 +1,25 @@ + + + + "Fyrra lag" + "Næsta lag" + "Hlé" + "Spila" + "Stöðva" + "Spóla til baka" + "Spóla áfram" + diff --git a/library/src/main/res/values-it/strings.xml b/library/src/main/res/values-it/strings.xml new file mode 100644 index 0000000000..4d84822b8e --- /dev/null +++ b/library/src/main/res/values-it/strings.xml @@ -0,0 +1,25 @@ + + + + "Traccia precedente" + "Traccia successiva" + "Metti in pausa" + "Riproduci" + "Interrompi" + "Riavvolgi" + "Avanti veloce" + diff --git a/library/src/main/res/values-iw/strings.xml b/library/src/main/res/values-iw/strings.xml new file mode 100644 index 0000000000..5449bb1a7c --- /dev/null +++ b/library/src/main/res/values-iw/strings.xml @@ -0,0 +1,25 @@ + + + + "הרצועה הקודמת" + "הרצועה הבאה" + "השהה" + "הפעל" + "הפסק" + "הרץ אחורה" + "הרץ קדימה" + diff --git a/library/src/main/res/values-ja/strings.xml b/library/src/main/res/values-ja/strings.xml new file mode 100644 index 0000000000..e745b18ee0 --- /dev/null +++ b/library/src/main/res/values-ja/strings.xml @@ -0,0 +1,25 @@ + + + + "前のトラック" + "次のトラック" + "一時停止" + "再生" + "停止" + "巻き戻し" + "早送り" + diff --git a/library/src/main/res/values-ka-rGE/strings.xml b/library/src/main/res/values-ka-rGE/strings.xml new file mode 100644 index 0000000000..652186360c --- /dev/null +++ b/library/src/main/res/values-ka-rGE/strings.xml @@ -0,0 +1,25 @@ + + + + "წინა ჩანაწერი" + "შემდეგი ჩანაწერი" + "პაუზა" + "დაკვრა" + "შეწყვეტა" + "უკან გადახვევა" + "წინ გადახვევა" + diff --git a/library/src/main/res/values-kk-rKZ/strings.xml b/library/src/main/res/values-kk-rKZ/strings.xml new file mode 100644 index 0000000000..eff4c334e0 --- /dev/null +++ b/library/src/main/res/values-kk-rKZ/strings.xml @@ -0,0 +1,25 @@ + + + + "Алдыңғы трек" + "Келесі трек" + "Кідірту" + "Ойнату" + "Тоқтату" + "Кері айналдыру" + "Жылдам алға айналдыру" + diff --git a/library/src/main/res/values-km-rKH/strings.xml b/library/src/main/res/values-km-rKH/strings.xml new file mode 100644 index 0000000000..8298655078 --- /dev/null +++ b/library/src/main/res/values-km-rKH/strings.xml @@ -0,0 +1,25 @@ + + + + "បទ​មុន" + "បទ​បន្ទាប់" + "ផ្អាក" + "ចាក់" + "បញ្ឈប់" + "ខា​ថយក្រោយ" + "ទៅ​មុខ​​​រហ័ស" + diff --git a/library/src/main/res/values-kn-rIN/strings.xml b/library/src/main/res/values-kn-rIN/strings.xml new file mode 100644 index 0000000000..ac210680d8 --- /dev/null +++ b/library/src/main/res/values-kn-rIN/strings.xml @@ -0,0 +1,25 @@ + + + + "ಹಿಂದಿನ ಟ್ರ್ಯಾಕ್" + "ಮುಂದಿನ ಟ್ರ್ಯಾಕ್" + "ವಿರಾಮಗೊಳಿಸು" + "ಪ್ಲೇ ಮಾಡು" + "ನಿಲ್ಲಿಸು" + "ರಿವೈಂಡ್ ಮಾಡು" + "ವೇಗವಾಗಿ ಮುಂದಕ್ಕೆ" + diff --git a/library/src/main/res/values-ko/strings.xml b/library/src/main/res/values-ko/strings.xml new file mode 100644 index 0000000000..38f9b7aae9 --- /dev/null +++ b/library/src/main/res/values-ko/strings.xml @@ -0,0 +1,25 @@ + + + + "이전 트랙" + "다음 트랙" + "일시중지" + "재생" + "중지" + "되감기" + "빨리 감기" + diff --git a/library/src/main/res/values-ky-rKG/strings.xml b/library/src/main/res/values-ky-rKG/strings.xml new file mode 100644 index 0000000000..43591d760c --- /dev/null +++ b/library/src/main/res/values-ky-rKG/strings.xml @@ -0,0 +1,25 @@ + + + + "Мурунку трек" + "Кийинки трек" + "Тындыруу" + "Ойнотуу" + "Токтотуу" + "Артка түрүү" + "Алдыга түрүү" + diff --git a/library/src/main/res/values-lo-rLA/strings.xml b/library/src/main/res/values-lo-rLA/strings.xml new file mode 100644 index 0000000000..885005406d --- /dev/null +++ b/library/src/main/res/values-lo-rLA/strings.xml @@ -0,0 +1,25 @@ + + + + "​ເພງ​ກ່ອນ​ໜ້າ" + "​ເພງ​ຕໍ່​ໄປ" + "ຢຸດຊົ່ວຄາວ" + "ຫຼິ້ນ" + "ຢຸດ" + "​ຣີ​​ວາຍກັບ" + "ເລື່ອນ​ໄປ​ໜ້າ" + diff --git a/library/src/main/res/values-lt/strings.xml b/library/src/main/res/values-lt/strings.xml new file mode 100644 index 0000000000..f828226100 --- /dev/null +++ b/library/src/main/res/values-lt/strings.xml @@ -0,0 +1,25 @@ + + + + "Ankstesnis takelis" + "Kitas takelis" + "Pristabdyti" + "Leisti" + "Stabdyti" + "Sukti atgal" + "Sukti pirmyn" + diff --git a/library/src/main/res/values-lv/strings.xml b/library/src/main/res/values-lv/strings.xml new file mode 100644 index 0000000000..b5f8f00e84 --- /dev/null +++ b/library/src/main/res/values-lv/strings.xml @@ -0,0 +1,25 @@ + + + + "Iepriekšējais ieraksts" + "Nākamais ieraksts" + "Pārtraukt" + "Atskaņot" + "Apturēt" + "Attīt atpakaļ" + "Ātri patīt" + diff --git a/library/src/main/res/values-mk-rMK/strings.xml b/library/src/main/res/values-mk-rMK/strings.xml new file mode 100644 index 0000000000..aa96af37a1 --- /dev/null +++ b/library/src/main/res/values-mk-rMK/strings.xml @@ -0,0 +1,25 @@ + + + + "Претходна песна" + "Следна песна" + "Пауза" + "Пушти" + "Запри" + "Премотај назад" + "Брзо премотај напред" + diff --git a/library/src/main/res/values-ml-rIN/strings.xml b/library/src/main/res/values-ml-rIN/strings.xml new file mode 100644 index 0000000000..f59e90d24a --- /dev/null +++ b/library/src/main/res/values-ml-rIN/strings.xml @@ -0,0 +1,25 @@ + + + + "മുമ്പത്തെ ട്രാക്ക്" + "അടുത്ത ട്രാക്ക്" + "താൽക്കാലികമായി നിർത്തുക" + "പ്ലേ ചെയ്യുക" + "നിര്‍ത്തുക" + "റിവൈൻഡുചെയ്യുക" + "വേഗത്തിലുള്ള കൈമാറൽ" + diff --git a/library/src/main/res/values-mn-rMN/strings.xml b/library/src/main/res/values-mn-rMN/strings.xml new file mode 100644 index 0000000000..2ab27a803e --- /dev/null +++ b/library/src/main/res/values-mn-rMN/strings.xml @@ -0,0 +1,25 @@ + + + + "Өмнөх трек" + "Дараагийн трек" + "Түр зогсоох" + "Тоглуулах" + "Зогсоох" + "Буцааж хураах" + "Хурдан урагшлуулах" + diff --git a/library/src/main/res/values-mr-rIN/strings.xml b/library/src/main/res/values-mr-rIN/strings.xml new file mode 100644 index 0000000000..827259e68b --- /dev/null +++ b/library/src/main/res/values-mr-rIN/strings.xml @@ -0,0 +1,25 @@ + + + + "मागील ट्रॅक" + "पुढील ट्रॅक" + "विराम द्या" + "प्ले करा" + "थांबा" + "रिवाईँड करा" + "फास्ट फॉरवर्ड करा" + diff --git a/library/src/main/res/values-ms-rMY/strings.xml b/library/src/main/res/values-ms-rMY/strings.xml new file mode 100644 index 0000000000..e8bf6ec693 --- /dev/null +++ b/library/src/main/res/values-ms-rMY/strings.xml @@ -0,0 +1,25 @@ + + + + "Lagu sebelumnya" + "Lagu seterusnya" + "Jeda" + "Main" + "Berhenti" + "Gulung semula" + "Mara laju" + diff --git a/library/src/main/res/values-my-rMM/strings.xml b/library/src/main/res/values-my-rMM/strings.xml new file mode 100644 index 0000000000..62e4e6c0c7 --- /dev/null +++ b/library/src/main/res/values-my-rMM/strings.xml @@ -0,0 +1,25 @@ + + + + "ယခင် တစ်ပုဒ်" + "နောက် တစ်ပုဒ်" + "ခဏရပ်ရန်" + "ဖွင့်ရန်" + "ရပ်ရန်" + "ပြန်ရစ်ရန်" + "ရှေ့သို့ သွားရန်" + diff --git a/library/src/main/res/values-nb/strings.xml b/library/src/main/res/values-nb/strings.xml new file mode 100644 index 0000000000..b5e7c6d05b --- /dev/null +++ b/library/src/main/res/values-nb/strings.xml @@ -0,0 +1,25 @@ + + + + "Forrige spor" + "Neste spor" + "Sett på pause" + "Spill av" + "Stopp" + "Tilbakespoling" + "Fremoverspoling" + diff --git a/library/src/main/res/values-ne-rNP/strings.xml b/library/src/main/res/values-ne-rNP/strings.xml new file mode 100644 index 0000000000..47ce703544 --- /dev/null +++ b/library/src/main/res/values-ne-rNP/strings.xml @@ -0,0 +1,25 @@ + + + + "अघिल्लो ट्रयाक" + "अर्को ट्रयाक" + "रोक्नुहोस्" + "चलाउनुहोस्" + "रोक्नुहोस्" + "दोहोर्याउनुहोस्" + "फास्ट फर्वार्ड" + diff --git a/library/src/main/res/values-nl/strings.xml b/library/src/main/res/values-nl/strings.xml new file mode 100644 index 0000000000..092165db53 --- /dev/null +++ b/library/src/main/res/values-nl/strings.xml @@ -0,0 +1,25 @@ + + + + "Vorig nummer" + "Volgend nummer" + "Onderbreken" + "Afspelen" + "Stoppen" + "Terugspoelen" + "Vooruitspoelen" + diff --git a/library/src/main/res/values-pa-rIN/strings.xml b/library/src/main/res/values-pa-rIN/strings.xml new file mode 100644 index 0000000000..96654b89f0 --- /dev/null +++ b/library/src/main/res/values-pa-rIN/strings.xml @@ -0,0 +1,25 @@ + + + + "ਪਿਛਲਾ ਟਰੈਕ" + "ਅਗਲਾ ਟਰੈਕ" + "ਰੋਕੋ" + "ਪਲੇ ਕਰੋ" + "ਰੋਕੋ" + "ਰੀਵਾਈਂਡ ਕਰੋ" + "ਅੱਗੇ ਭੇਜੋ" + diff --git a/library/src/main/res/values-pl/strings.xml b/library/src/main/res/values-pl/strings.xml new file mode 100644 index 0000000000..131e0630f3 --- /dev/null +++ b/library/src/main/res/values-pl/strings.xml @@ -0,0 +1,25 @@ + + + + "Poprzedni utwór" + "Następny utwór" + "Wstrzymaj" + "Odtwórz" + "Zatrzymaj" + "Przewiń do tyłu" + "Przewiń do przodu" + diff --git a/library/src/main/res/values-pt-rBR/strings.xml b/library/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..3e3ac47be9 --- /dev/null +++ b/library/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,25 @@ + + + + "Faixa anterior" + "Próxima faixa" + "Pausar" + "Reproduzir" + "Parar" + "Retroceder" + "Avançar" + diff --git a/library/src/main/res/values-pt-rPT/strings.xml b/library/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..0d0d0ec183 --- /dev/null +++ b/library/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,25 @@ + + + + "Faixa anterior" + "Faixa seguinte" + "Interromper" + "Reproduzir" + "Parar" + "Rebobinar" + "Avançar" + diff --git a/library/src/main/res/values-pt/strings.xml b/library/src/main/res/values-pt/strings.xml new file mode 100644 index 0000000000..3e3ac47be9 --- /dev/null +++ b/library/src/main/res/values-pt/strings.xml @@ -0,0 +1,25 @@ + + + + "Faixa anterior" + "Próxima faixa" + "Pausar" + "Reproduzir" + "Parar" + "Retroceder" + "Avançar" + diff --git a/library/src/main/res/values-ro/strings.xml b/library/src/main/res/values-ro/strings.xml new file mode 100644 index 0000000000..3cb6730c99 --- /dev/null +++ b/library/src/main/res/values-ro/strings.xml @@ -0,0 +1,25 @@ + + + + "Melodia anterioară" + "Melodia următoare" + "Pauză" + "Redați" + "Opriți" + "Derulați" + "Derulați rapid înainte" + diff --git a/library/src/main/res/values-ru/strings.xml b/library/src/main/res/values-ru/strings.xml new file mode 100644 index 0000000000..59a6923954 --- /dev/null +++ b/library/src/main/res/values-ru/strings.xml @@ -0,0 +1,25 @@ + + + + "Предыдущий трек" + "Следующий трек" + "Приостановить" + "Воспроизвести" + "Остановить" + "Перемотать назад" + "Перемотать вперед" + diff --git a/library/src/main/res/values-si-rLK/strings.xml b/library/src/main/res/values-si-rLK/strings.xml new file mode 100644 index 0000000000..d634b82374 --- /dev/null +++ b/library/src/main/res/values-si-rLK/strings.xml @@ -0,0 +1,25 @@ + + + + "පෙර ගීතය" + "ඊළඟ ගීතය" + "විරාමය" + "ධාවනය කරන්න" + "නතර කරන්න" + "නැවත ඔතන්න" + "වේගයෙන් ඉදිරියට යන" + diff --git a/library/src/main/res/values-sk/strings.xml b/library/src/main/res/values-sk/strings.xml new file mode 100644 index 0000000000..b0965864d6 --- /dev/null +++ b/library/src/main/res/values-sk/strings.xml @@ -0,0 +1,25 @@ + + + + "Predchádzajúca stopa" + "Ďalšia stopa" + "Pozastaviť" + "Prehrať" + "Zastaviť" + "Pretočiť späť" + "Pretočiť dopredu" + diff --git a/library/src/main/res/values-sl/strings.xml b/library/src/main/res/values-sl/strings.xml new file mode 100644 index 0000000000..f2edda42dd --- /dev/null +++ b/library/src/main/res/values-sl/strings.xml @@ -0,0 +1,25 @@ + + + + "Prejšnja skladba" + "Naslednja skladba" + "Zaustavi" + "Predvajaj" + "Ustavi" + "Previj nazaj" + "Previj naprej" + diff --git a/library/src/main/res/values-sq-rAL/strings.xml b/library/src/main/res/values-sq-rAL/strings.xml new file mode 100644 index 0000000000..6716a32486 --- /dev/null +++ b/library/src/main/res/values-sq-rAL/strings.xml @@ -0,0 +1,25 @@ + + + + "Kënga e mëparshme" + "Kënga tjetër" + "Pauzë" + "Luaj" + "Ndalo" + "Kthehu pas" + "Përparo me shpejtësi" + diff --git a/library/src/main/res/values-sr/strings.xml b/library/src/main/res/values-sr/strings.xml new file mode 100644 index 0000000000..cfb3d20c6a --- /dev/null +++ b/library/src/main/res/values-sr/strings.xml @@ -0,0 +1,25 @@ + + + + "Претходна песма" + "Следећа песма" + "Пауза" + "Пусти" + "Заустави" + "Премотај уназад" + "Премотај унапред" + diff --git a/library/src/main/res/values-sv/strings.xml b/library/src/main/res/values-sv/strings.xml new file mode 100644 index 0000000000..35b987db48 --- /dev/null +++ b/library/src/main/res/values-sv/strings.xml @@ -0,0 +1,25 @@ + + + + "Föregående spår" + "Nästa spår" + "Pausa" + "Spela upp" + "Avbryt" + "Spola tillbaka" + "Snabbspola framåt" + diff --git a/library/src/main/res/values-sw/strings.xml b/library/src/main/res/values-sw/strings.xml new file mode 100644 index 0000000000..32e2799e97 --- /dev/null +++ b/library/src/main/res/values-sw/strings.xml @@ -0,0 +1,25 @@ + + + + "Wimbo uliotangulia" + "Wimbo unaofuata" + "Sitisha" + "Cheza" + "Simamisha" + "Rudisha nyuma" + "Peleka mbele kwa kasi" + diff --git a/library/src/main/res/values-ta-rIN/strings.xml b/library/src/main/res/values-ta-rIN/strings.xml new file mode 100644 index 0000000000..32d88cf9f0 --- /dev/null +++ b/library/src/main/res/values-ta-rIN/strings.xml @@ -0,0 +1,25 @@ + + + + "முந்தைய ட்ராக்" + "அடுத்த ட்ராக்" + "இடைநிறுத்து" + "இயக்கு" + "நிறுத்து" + "மீண்டும் காட்டு" + "வேகமாக முன்செல்" + diff --git a/library/src/main/res/values-te-rIN/strings.xml b/library/src/main/res/values-te-rIN/strings.xml new file mode 100644 index 0000000000..f527c30270 --- /dev/null +++ b/library/src/main/res/values-te-rIN/strings.xml @@ -0,0 +1,25 @@ + + + + "మునుపటి ట్రాక్" + "తదుపరి ట్రాక్" + "పాజ్ చేయి" + "ప్లే చేయి" + "ఆపివేయి" + "రివైండ్ చేయి" + "వేగంగా ఫార్వార్డ్ చేయి" + diff --git a/library/src/main/res/values-th/strings.xml b/library/src/main/res/values-th/strings.xml new file mode 100644 index 0000000000..3b86808ee7 --- /dev/null +++ b/library/src/main/res/values-th/strings.xml @@ -0,0 +1,25 @@ + + + + "แทร็กก่อนหน้า" + "แทร็กถัดไป" + "หยุดชั่วคราว" + "เล่น" + "หยุด" + "กรอกลับ" + "กรอไปข้างหน้า" + diff --git a/library/src/main/res/values-tl/strings.xml b/library/src/main/res/values-tl/strings.xml new file mode 100644 index 0000000000..2381287624 --- /dev/null +++ b/library/src/main/res/values-tl/strings.xml @@ -0,0 +1,25 @@ + + + + "Nakaraang track" + "Susunod na track" + "I-pause" + "I-play" + "Ihinto" + "I-rewind" + "I-fast forward" + diff --git a/library/src/main/res/values-tr/strings.xml b/library/src/main/res/values-tr/strings.xml new file mode 100644 index 0000000000..cd05be1551 --- /dev/null +++ b/library/src/main/res/values-tr/strings.xml @@ -0,0 +1,25 @@ + + + + "Önceki parça" + "Sonraki parça" + "Duraklat" + "Çal" + "Durdur" + "Geri sar" + "İleri sar" + diff --git a/library/src/main/res/values-uk/strings.xml b/library/src/main/res/values-uk/strings.xml new file mode 100644 index 0000000000..ec249b7f9f --- /dev/null +++ b/library/src/main/res/values-uk/strings.xml @@ -0,0 +1,25 @@ + + + + "Попередня композиція" + "Наступна композиція" + "Пауза" + "Відтворити" + "Зупинити" + "Перемотати назад" + "Перемотати вперед" + diff --git a/library/src/main/res/values-ur-rPK/strings.xml b/library/src/main/res/values-ur-rPK/strings.xml new file mode 100644 index 0000000000..002bf8e780 --- /dev/null +++ b/library/src/main/res/values-ur-rPK/strings.xml @@ -0,0 +1,25 @@ + + + + "پچھلا ٹریک" + "اگلا ٹریک" + "موقوف کریں" + "چلائیں" + "روکیں" + "ریوائینڈ کریں" + "تیزی سے فارورڈ کریں" + diff --git a/library/src/main/res/values-uz-rUZ/strings.xml b/library/src/main/res/values-uz-rUZ/strings.xml new file mode 100644 index 0000000000..5b96983ad5 --- /dev/null +++ b/library/src/main/res/values-uz-rUZ/strings.xml @@ -0,0 +1,25 @@ + + + + "Avvalgi musiqa" + "Keyingi musiqa" + "To‘xtatib turish" + "Ijro qilish" + "To‘xtatish" + "Orqaga o‘tkazish" + "Oldinga o‘tkazish" + diff --git a/library/src/main/res/values-vi/strings.xml b/library/src/main/res/values-vi/strings.xml new file mode 100644 index 0000000000..2f0dce399a --- /dev/null +++ b/library/src/main/res/values-vi/strings.xml @@ -0,0 +1,25 @@ + + + + "Bản nhạc trước" + "Bản nhạc tiếp theo" + "Tạm dừng" + "Phát" + "Ngừng" + "Tua lại" + "Tua đi" + diff --git a/library/src/main/res/values-zh-rCN/strings.xml b/library/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..ebec8de267 --- /dev/null +++ b/library/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,25 @@ + + + + "上一曲" + "下一曲" + "暂停" + "播放" + "停止" + "快退" + "快进" + diff --git a/library/src/main/res/values-zh-rHK/strings.xml b/library/src/main/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000000..b97fab76af --- /dev/null +++ b/library/src/main/res/values-zh-rHK/strings.xml @@ -0,0 +1,25 @@ + + + + "上一首曲目" + "下一首曲目" + "暫停" + "播放" + "停止" + "倒帶" + "向前快轉" + diff --git a/library/src/main/res/values-zh-rTW/strings.xml b/library/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000..7b8552f1b6 --- /dev/null +++ b/library/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,25 @@ + + + + "上一首曲目" + "下一首曲目" + "暫停" + "播放" + "停止" + "倒轉" + "快轉" + diff --git a/library/src/main/res/values-zu/strings.xml b/library/src/main/res/values-zu/strings.xml new file mode 100644 index 0000000000..3ed91417f2 --- /dev/null +++ b/library/src/main/res/values-zu/strings.xml @@ -0,0 +1,25 @@ + + + + "Ithrekhi yangaphambilini" + "Ithrekhi elandelayo" + "Misa isikhashana" + "Dlala" + "Misa" + "Buyisela emumva" + "Ukudlulisa ngokushesha" + diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml new file mode 100644 index 0000000000..2aa6fcd86b --- /dev/null +++ b/library/src/main/res/values/attrs.xml @@ -0,0 +1,22 @@ + + + + + + + + + diff --git a/library/src/main/res/values/strings.xml b/library/src/main/res/values/strings.xml new file mode 100644 index 0000000000..83bb88cc04 --- /dev/null +++ b/library/src/main/res/values/strings.xml @@ -0,0 +1,25 @@ + + + + Previous track + Next track + Pause + Play + Stop + Rewind + Fast forward + + diff --git a/library/src/main/res/values/styles.xml b/library/src/main/res/values/styles.xml new file mode 100644 index 0000000000..bfe63a9eca --- /dev/null +++ b/library/src/main/res/values/styles.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + +