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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+