From 7925342fa0d8f7604592d1b5e6231261364b5633 Mon Sep 17 00:00:00 2001 From: "[]inger" <[]inger@google.com> Date: Mon, 12 Sep 2016 02:46:25 -0700 Subject: [PATCH] Provide a VideoView for simple use cases. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=132855091 --- .../exoplayer2/demo/PlayerActivity.java | 124 +---- demo/src/main/res/layout/player_activity.xml | 24 +- .../android/exoplayer2/SimpleExoPlayer.java | 10 + .../ui/KeyCompatibleMediaController.java | 60 --- .../MediaControllerPrevNextClickListener.java | 74 --- .../exoplayer2/ui/PlaybackControlView.java | 462 ++++++++++++++++++ .../android/exoplayer2/ui/PlayerControl.java | 105 ---- .../exoplayer2/ui/SimpleExoPlayerView.java | 283 +++++++++++ .../main/res/drawable-hdpi/ic_media_ff.png | Bin 0 -> 1114 bytes .../main/res/drawable-hdpi/ic_media_next.png | Bin 0 -> 1073 bytes .../main/res/drawable-hdpi/ic_media_pause.png | Bin 0 -> 599 bytes .../main/res/drawable-hdpi/ic_media_play.png | Bin 0 -> 1163 bytes .../res/drawable-hdpi/ic_media_previous.png | Bin 0 -> 1067 bytes .../main/res/drawable-hdpi/ic_media_rew.png | Bin 0 -> 1252 bytes .../main/res/drawable-ldpi/ic_media_ff.png | Bin 0 -> 886 bytes .../main/res/drawable-ldpi/ic_media_next.png | Bin 0 -> 735 bytes .../main/res/drawable-ldpi/ic_media_pause.png | Bin 0 -> 3249 bytes .../main/res/drawable-ldpi/ic_media_play.png | Bin 0 -> 673 bytes .../res/drawable-ldpi/ic_media_previous.png | Bin 0 -> 770 bytes .../main/res/drawable-ldpi/ic_media_rew.png | Bin 0 -> 906 bytes .../main/res/drawable-mdpi/ic_media_ff.png | Bin 0 -> 929 bytes .../main/res/drawable-mdpi/ic_media_next.png | Bin 0 -> 843 bytes .../main/res/drawable-mdpi/ic_media_pause.png | Bin 0 -> 540 bytes .../main/res/drawable-mdpi/ic_media_play.png | Bin 0 -> 897 bytes .../res/drawable-mdpi/ic_media_previous.png | Bin 0 -> 837 bytes .../main/res/drawable-mdpi/ic_media_rew.png | Bin 0 -> 997 bytes .../main/res/drawable-xhdpi/ic_media_ff.png | Bin 0 -> 1479 bytes .../main/res/drawable-xhdpi/ic_media_next.png | Bin 0 -> 1364 bytes .../res/drawable-xhdpi/ic_media_pause.png | Bin 0 -> 685 bytes .../main/res/drawable-xhdpi/ic_media_play.png | Bin 0 -> 1617 bytes .../res/drawable-xhdpi/ic_media_previous.png | Bin 0 -> 1372 bytes .../main/res/drawable-xhdpi/ic_media_rew.png | Bin 0 -> 1675 bytes .../main/res/drawable-xxhdpi/ic_media_ff.png | Bin 0 -> 1134 bytes .../res/drawable-xxhdpi/ic_media_next.png | Bin 0 -> 1316 bytes .../res/drawable-xxhdpi/ic_media_pause.png | Bin 0 -> 611 bytes .../res/drawable-xxhdpi/ic_media_play.png | Bin 0 -> 1183 bytes .../res/drawable-xxhdpi/ic_media_previous.png | Bin 0 -> 1294 bytes .../main/res/drawable-xxhdpi/ic_media_rew.png | Bin 0 -> 1197 bytes .../main/res/layout/exoplayer_video_view.xml | 40 ++ .../main/res/layout/playback_control_view.xml | 86 ++++ library/src/main/res/values-af/strings.xml | 25 + library/src/main/res/values-am/strings.xml | 25 + library/src/main/res/values-ar/strings.xml | 25 + .../src/main/res/values-az-rAZ/strings.xml | 25 + .../src/main/res/values-b+sr+Latn/strings.xml | 25 + .../src/main/res/values-be-rBY/strings.xml | 25 + library/src/main/res/values-bg/strings.xml | 25 + .../src/main/res/values-bn-rBD/strings.xml | 25 + .../src/main/res/values-bs-rBA/strings.xml | 25 + library/src/main/res/values-ca/strings.xml | 25 + library/src/main/res/values-cs/strings.xml | 25 + library/src/main/res/values-da/strings.xml | 25 + library/src/main/res/values-de/strings.xml | 25 + library/src/main/res/values-el/strings.xml | 25 + .../src/main/res/values-en-rAU/strings.xml | 25 + .../src/main/res/values-en-rGB/strings.xml | 25 + .../src/main/res/values-en-rIN/strings.xml | 25 + .../src/main/res/values-es-rUS/strings.xml | 25 + library/src/main/res/values-es/strings.xml | 25 + .../src/main/res/values-et-rEE/strings.xml | 25 + .../src/main/res/values-eu-rES/strings.xml | 25 + library/src/main/res/values-fa/strings.xml | 25 + library/src/main/res/values-fi/strings.xml | 25 + .../src/main/res/values-fr-rCA/strings.xml | 25 + library/src/main/res/values-fr/strings.xml | 25 + .../src/main/res/values-gl-rES/strings.xml | 25 + .../src/main/res/values-gu-rIN/strings.xml | 25 + library/src/main/res/values-hi/strings.xml | 25 + library/src/main/res/values-hr/strings.xml | 25 + library/src/main/res/values-hu/strings.xml | 25 + .../src/main/res/values-hy-rAM/strings.xml | 25 + library/src/main/res/values-in/strings.xml | 25 + .../src/main/res/values-is-rIS/strings.xml | 25 + library/src/main/res/values-it/strings.xml | 25 + library/src/main/res/values-iw/strings.xml | 25 + library/src/main/res/values-ja/strings.xml | 25 + .../src/main/res/values-ka-rGE/strings.xml | 25 + .../src/main/res/values-kk-rKZ/strings.xml | 25 + .../src/main/res/values-km-rKH/strings.xml | 25 + .../src/main/res/values-kn-rIN/strings.xml | 25 + library/src/main/res/values-ko/strings.xml | 25 + .../src/main/res/values-ky-rKG/strings.xml | 25 + .../src/main/res/values-lo-rLA/strings.xml | 25 + library/src/main/res/values-lt/strings.xml | 25 + library/src/main/res/values-lv/strings.xml | 25 + .../src/main/res/values-mk-rMK/strings.xml | 25 + .../src/main/res/values-ml-rIN/strings.xml | 25 + .../src/main/res/values-mn-rMN/strings.xml | 25 + .../src/main/res/values-mr-rIN/strings.xml | 25 + .../src/main/res/values-ms-rMY/strings.xml | 25 + .../src/main/res/values-my-rMM/strings.xml | 25 + library/src/main/res/values-nb/strings.xml | 25 + .../src/main/res/values-ne-rNP/strings.xml | 25 + library/src/main/res/values-nl/strings.xml | 25 + .../src/main/res/values-pa-rIN/strings.xml | 25 + library/src/main/res/values-pl/strings.xml | 25 + .../src/main/res/values-pt-rBR/strings.xml | 25 + .../src/main/res/values-pt-rPT/strings.xml | 25 + library/src/main/res/values-pt/strings.xml | 25 + library/src/main/res/values-ro/strings.xml | 25 + library/src/main/res/values-ru/strings.xml | 25 + .../src/main/res/values-si-rLK/strings.xml | 25 + library/src/main/res/values-sk/strings.xml | 25 + library/src/main/res/values-sl/strings.xml | 25 + .../src/main/res/values-sq-rAL/strings.xml | 25 + library/src/main/res/values-sr/strings.xml | 25 + library/src/main/res/values-sv/strings.xml | 25 + library/src/main/res/values-sw/strings.xml | 25 + .../src/main/res/values-ta-rIN/strings.xml | 25 + .../src/main/res/values-te-rIN/strings.xml | 25 + library/src/main/res/values-th/strings.xml | 25 + library/src/main/res/values-tl/strings.xml | 25 + library/src/main/res/values-tr/strings.xml | 25 + library/src/main/res/values-uk/strings.xml | 25 + .../src/main/res/values-ur-rPK/strings.xml | 25 + .../src/main/res/values-uz-rUZ/strings.xml | 25 + library/src/main/res/values-vi/strings.xml | 25 + .../src/main/res/values-zh-rCN/strings.xml | 25 + .../src/main/res/values-zh-rHK/strings.xml | 25 + .../src/main/res/values-zh-rTW/strings.xml | 25 + library/src/main/res/values-zu/strings.xml | 25 + library/src/main/res/values/attrs.xml | 22 + library/src/main/res/values/strings.xml | 25 + library/src/main/res/values/styles.xml | 55 +++ 124 files changed, 3031 insertions(+), 364 deletions(-) delete mode 100644 library/src/main/java/com/google/android/exoplayer2/ui/KeyCompatibleMediaController.java delete mode 100644 library/src/main/java/com/google/android/exoplayer2/ui/MediaControllerPrevNextClickListener.java create mode 100644 library/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java delete mode 100644 library/src/main/java/com/google/android/exoplayer2/ui/PlayerControl.java create mode 100644 library/src/main/java/com/google/android/exoplayer2/ui/SimpleExoPlayerView.java create mode 100644 library/src/main/res/drawable-hdpi/ic_media_ff.png create mode 100644 library/src/main/res/drawable-hdpi/ic_media_next.png create mode 100644 library/src/main/res/drawable-hdpi/ic_media_pause.png create mode 100644 library/src/main/res/drawable-hdpi/ic_media_play.png create mode 100644 library/src/main/res/drawable-hdpi/ic_media_previous.png create mode 100644 library/src/main/res/drawable-hdpi/ic_media_rew.png create mode 100644 library/src/main/res/drawable-ldpi/ic_media_ff.png create mode 100644 library/src/main/res/drawable-ldpi/ic_media_next.png create mode 100644 library/src/main/res/drawable-ldpi/ic_media_pause.png create mode 100644 library/src/main/res/drawable-ldpi/ic_media_play.png create mode 100644 library/src/main/res/drawable-ldpi/ic_media_previous.png create mode 100644 library/src/main/res/drawable-ldpi/ic_media_rew.png create mode 100644 library/src/main/res/drawable-mdpi/ic_media_ff.png create mode 100644 library/src/main/res/drawable-mdpi/ic_media_next.png create mode 100644 library/src/main/res/drawable-mdpi/ic_media_pause.png create mode 100644 library/src/main/res/drawable-mdpi/ic_media_play.png create mode 100644 library/src/main/res/drawable-mdpi/ic_media_previous.png create mode 100644 library/src/main/res/drawable-mdpi/ic_media_rew.png create mode 100644 library/src/main/res/drawable-xhdpi/ic_media_ff.png create mode 100644 library/src/main/res/drawable-xhdpi/ic_media_next.png create mode 100644 library/src/main/res/drawable-xhdpi/ic_media_pause.png create mode 100644 library/src/main/res/drawable-xhdpi/ic_media_play.png create mode 100644 library/src/main/res/drawable-xhdpi/ic_media_previous.png create mode 100644 library/src/main/res/drawable-xhdpi/ic_media_rew.png create mode 100644 library/src/main/res/drawable-xxhdpi/ic_media_ff.png create mode 100644 library/src/main/res/drawable-xxhdpi/ic_media_next.png create mode 100644 library/src/main/res/drawable-xxhdpi/ic_media_pause.png create mode 100644 library/src/main/res/drawable-xxhdpi/ic_media_play.png create mode 100644 library/src/main/res/drawable-xxhdpi/ic_media_previous.png create mode 100644 library/src/main/res/drawable-xxhdpi/ic_media_rew.png create mode 100644 library/src/main/res/layout/exoplayer_video_view.xml create mode 100644 library/src/main/res/layout/playback_control_view.xml create mode 100644 library/src/main/res/values-af/strings.xml create mode 100644 library/src/main/res/values-am/strings.xml create mode 100644 library/src/main/res/values-ar/strings.xml create mode 100644 library/src/main/res/values-az-rAZ/strings.xml create mode 100644 library/src/main/res/values-b+sr+Latn/strings.xml create mode 100644 library/src/main/res/values-be-rBY/strings.xml create mode 100644 library/src/main/res/values-bg/strings.xml create mode 100644 library/src/main/res/values-bn-rBD/strings.xml create mode 100644 library/src/main/res/values-bs-rBA/strings.xml create mode 100644 library/src/main/res/values-ca/strings.xml create mode 100644 library/src/main/res/values-cs/strings.xml create mode 100644 library/src/main/res/values-da/strings.xml create mode 100644 library/src/main/res/values-de/strings.xml create mode 100644 library/src/main/res/values-el/strings.xml create mode 100644 library/src/main/res/values-en-rAU/strings.xml create mode 100644 library/src/main/res/values-en-rGB/strings.xml create mode 100644 library/src/main/res/values-en-rIN/strings.xml create mode 100644 library/src/main/res/values-es-rUS/strings.xml create mode 100644 library/src/main/res/values-es/strings.xml create mode 100644 library/src/main/res/values-et-rEE/strings.xml create mode 100644 library/src/main/res/values-eu-rES/strings.xml create mode 100644 library/src/main/res/values-fa/strings.xml create mode 100644 library/src/main/res/values-fi/strings.xml create mode 100644 library/src/main/res/values-fr-rCA/strings.xml create mode 100644 library/src/main/res/values-fr/strings.xml create mode 100644 library/src/main/res/values-gl-rES/strings.xml create mode 100644 library/src/main/res/values-gu-rIN/strings.xml create mode 100644 library/src/main/res/values-hi/strings.xml create mode 100644 library/src/main/res/values-hr/strings.xml create mode 100644 library/src/main/res/values-hu/strings.xml create mode 100644 library/src/main/res/values-hy-rAM/strings.xml create mode 100644 library/src/main/res/values-in/strings.xml create mode 100644 library/src/main/res/values-is-rIS/strings.xml create mode 100644 library/src/main/res/values-it/strings.xml create mode 100644 library/src/main/res/values-iw/strings.xml create mode 100644 library/src/main/res/values-ja/strings.xml create mode 100644 library/src/main/res/values-ka-rGE/strings.xml create mode 100644 library/src/main/res/values-kk-rKZ/strings.xml create mode 100644 library/src/main/res/values-km-rKH/strings.xml create mode 100644 library/src/main/res/values-kn-rIN/strings.xml create mode 100644 library/src/main/res/values-ko/strings.xml create mode 100644 library/src/main/res/values-ky-rKG/strings.xml create mode 100644 library/src/main/res/values-lo-rLA/strings.xml create mode 100644 library/src/main/res/values-lt/strings.xml create mode 100644 library/src/main/res/values-lv/strings.xml create mode 100644 library/src/main/res/values-mk-rMK/strings.xml create mode 100644 library/src/main/res/values-ml-rIN/strings.xml create mode 100644 library/src/main/res/values-mn-rMN/strings.xml create mode 100644 library/src/main/res/values-mr-rIN/strings.xml create mode 100644 library/src/main/res/values-ms-rMY/strings.xml create mode 100644 library/src/main/res/values-my-rMM/strings.xml create mode 100644 library/src/main/res/values-nb/strings.xml create mode 100644 library/src/main/res/values-ne-rNP/strings.xml create mode 100644 library/src/main/res/values-nl/strings.xml create mode 100644 library/src/main/res/values-pa-rIN/strings.xml create mode 100644 library/src/main/res/values-pl/strings.xml create mode 100644 library/src/main/res/values-pt-rBR/strings.xml create mode 100644 library/src/main/res/values-pt-rPT/strings.xml create mode 100644 library/src/main/res/values-pt/strings.xml create mode 100644 library/src/main/res/values-ro/strings.xml create mode 100644 library/src/main/res/values-ru/strings.xml create mode 100644 library/src/main/res/values-si-rLK/strings.xml create mode 100644 library/src/main/res/values-sk/strings.xml create mode 100644 library/src/main/res/values-sl/strings.xml create mode 100644 library/src/main/res/values-sq-rAL/strings.xml create mode 100644 library/src/main/res/values-sr/strings.xml create mode 100644 library/src/main/res/values-sv/strings.xml create mode 100644 library/src/main/res/values-sw/strings.xml create mode 100644 library/src/main/res/values-ta-rIN/strings.xml create mode 100644 library/src/main/res/values-te-rIN/strings.xml create mode 100644 library/src/main/res/values-th/strings.xml create mode 100644 library/src/main/res/values-tl/strings.xml create mode 100644 library/src/main/res/values-tr/strings.xml create mode 100644 library/src/main/res/values-uk/strings.xml create mode 100644 library/src/main/res/values-ur-rPK/strings.xml create mode 100644 library/src/main/res/values-uz-rUZ/strings.xml create mode 100644 library/src/main/res/values-vi/strings.xml create mode 100644 library/src/main/res/values-zh-rCN/strings.xml create mode 100644 library/src/main/res/values-zh-rHK/strings.xml create mode 100644 library/src/main/res/values-zh-rTW/strings.xml create mode 100644 library/src/main/res/values-zu/strings.xml create mode 100644 library/src/main/res/values/attrs.xml create mode 100644 library/src/main/res/values/strings.xml create mode 100644 library/src/main/res/values/styles.xml 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 0000000000000000000000000000000000000000..c65956ab7fc4dcac4a6132640084c8d4668f9dbf GIT binary patch literal 1114 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;M!Q z+(IDCcKfnz$52J2-w_pT?Lfq~i1)5S3);_%yPvHrr2B5n7LcSrBK61AZr zY_XD$m?$ATI&xFgvy0P%$^taFYn-DpVZG?I!)tRLPSI1obxLrlT9aI zoh|67U6;to!t}t;uqV-FH3x@I-x~QF3*&a4IBo37pZ$BMc#n#YK#R7n$D*q&SM(0^ zKD${QtIqe!?)Y=@S}E5Zvc-E`4o%(lX0cB~TdACcNK`?7{Puahs;TF0AFIu9mRVhL zz~+U+ex>jo2SmHP8f9dJw7mV3-OJCflfR#SdDp5p&pDo*OqVNK;J)!tvCGfHT6f!f z6B0aDxSVO&zjnE~Oa8u8qh7{$P61r8vKCJrPIt+bip>EU;^1;*&5GUDzYk?|=kL#U z`YheHZm!Ihg~d^s7tJ+gSQ#8x48AxlG2fH>E!ygFXlZW3g=y2oWmmW|G<3{xJXl+M z_t&YAMUIxWQ5xG!q`iyI-PZb@$;uh9mMP-+!^}4?-rd|eqfaK>gk8!@)qZKMoXoLm zoyJd1lUB}|tp9pm@^fp^eqmnMbuGykv%ha;u(HUrZC_;OxOQUE=g&J^WjClW9$Bs? z7q?^0t8XTPy9?E)WqmH@o4?_s%Qb}rHjfl>wd2R*-hP^x&&;3Jj)l)*&Zt&vv8EY94@#)Md{bqukY3#-+X(o?(Mqg zD%Ju1-WNO`8pbJXudEVhG@fy!>f6&JFD{oZ-g+{|xb9GXZIm0cTF>(xy{QvQEtJnO zZ93)F`Equ7{PL)pUFRbXlnNfQl-Onx`{Quusj>w@4og#S-^^JvyZi&s>Kn{@`dN*3 z2c-lVBCU4rZSXYMKU+t8_9L&8J5L9k4qxBZs?V>sNPd=-*;L<1_`>%n07%G^pcN8e2C+N(P&y>EY-FTFnKQ+U+zQ_)ZE z-OJngbM5kZRsWp-G1SU9iF!;?{Q=BYq9v{oCC){ui6xo&c?uz!xv321`bK8@hK6tJ z1=j-=sDc!vB$lLFC4*F@G8h>c8tNKY=o*@a7@Ala8(JBe=^B_@85rDn6#p1SLvDUb zW?Ch>1_LW&ONfS=`G3TK8e~8=1m~xflqVLYGB~E>C#5R5WfrBD=NDxcD>w(67H)lP Q22{u3>FVdQ&MBb@00jZiy#N3J literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6e27b8161e4a1d34f578a5673c040b4fad09c84e GIT binary patch literal 1073 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;M!Q z+(IDCcyoF@v6*M~?!SC= z?#wMllXsf0Eit}-bnbD>?=|Nhv+rk)ExkH*%dg@sACEFD&~VteRrG+H{86!uJlQ9c zHfBsY_9E-WvaJ%8Dr*Tza{^+^x^g zH+!ADd#-)c{19c*arZX}->u=Do1=(+$6!>I@7Wj935k zEj}#In|k->req(T2I=D~BRN(bySw-Q)!6Ck$KU4_JQkS5AjLELb^Y(Xv6t`12j2eK z+rr@B5|Vg)-(+jwRhz4e975Pvy^N8$f5SO${WaErP|--u+YeG1Le_Sic>Hp`-S(~L z-f^Zc;7U5R8EoQN&z>)n7(xU&v-#K67QcL16mRx8t7m!=^P*#C?C1UXc3eHqZ2szy z+&Mo!G6W`Poi<;7ERQ8|zxcYA&pD6wGk8qd-58%Y|M$Cp@~yo$=Oy$RZf;dfnzPW4 zp|dD{-fknyLiOxldlxJdj#+-lY)j?CKimynfq!4Vx-MQ9t(9}h=R?QmU#l(7ep>P~ zhTS0~*7&>1t}pSLEc@N3*Zs}tYG@06+!h*gZO8RnOmCWA>rAu%{iyQB`^cuuW06h* zI&5#6l22XTobD2GI#fMZd=jIMfpRtT{lv{}y+==9*`3!Y`E6Bvm)Lp}{+W%}w4eOn zVfF9w>bkHl{fKV;KVC*D8JqY0ziYMY)}?j3UaeaDkI8pq;7i3bZLPqpBwFGcQQ};b znpl#VpQjL#nVZUBu5VRWe9bDua=Mp`k7i8JLF{8d{l} zS{WMX8dz8v7-;pr`HP| kC#5R5WfrBD=NDxcD>w(67H)lP22{u3>FVdQ&MBb@0Eiagk^lez literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1d465a41e4b087624ae5a4cb096aab184e9ca385 GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;M!Q z+(IDCccpZxz@0!tqFuMgM}_ z3T@4f=>}I?mz~|CC#BkH?AbCcY(~A|*n{@108Jgrt52XwcnW~7`1kbX8xPocPfn&*aV9GC*8iq>C(n~{y_8fTE*<$ zO3kTWO79;xcFgk=47@8_;>6^mQo4&XIL>gn-_NQ9H~BJ~ikervUqiH>74MJ9$^FkJ zb!Vcj_1UW_p%XOveogi5Ua?@oqr#P6m+lbSzQtr(c$3KvzMl-o?}a}1zT?**AHcxk z072Fc*`HPO6yrBdz7!Fcx%jrA0@JMYq*Dh~&IbgtxY(`}e#CIY#Ax^7qC&Z~ix%E( zyxyC8i*Lh$E^FUy&mS73on?!tzQe1%VA|e)Du2YXI^N$Bxxf0{`u`0qtg(&z7$n=* ztWtXNWH~UvMN3>GN}P*Q6H7Al^Atidb5j}2^^MH*4GrJc3$6z$Pz5PSNi0dVN(QM) zWiT=@G}Hwm1M?6=Ln~8LD?qT!m(~I_>aQuV3Dnn@*AuuA^Q6f5RWe~6kX8Dp3jgVyD zJ-yfvWeMzuT(zF7-FJ4*Z=dIxvvU^sT>tqZ^TDkHkK8^^z^%Pg1^@`KapfMO?7toO zaP9-30}#gf0LG6=0WnhwHe)W2DTVFbvc(b;+?i0S#oB|{Nv03&YhXStM5FViQL@Lu0Sjwwgevfj2 zlK|G8L5>6vn1v_N^W~*BeJ)=t1)`MXBz9QcOT;?%qZJSl!0Zj2x{x{NeK(u0?gpYr zB7p)I$yOp376Bk4FvA}{`^Dvx?>Fbx6uqg7Q)tH$${;IC}0Li z$ja>0(B#XlM2IWA0GKmy319|@SbsG$GM-zB_&eHU1%p^V7_u7xGl+oA#fj00xhByO zl~tL;J**sT?*hO&5m9OVQFeHyDq|t`Y4aH56+)x-4gstak*JpboE&_xS!xXiTjVMp zAcr#57lYew0Y;>{wm3bMeX$V<#A326hcSf;=)=1o+&b(5YOb$7AG!NzDds@-cqJ+oL0O03h+^pYf527seoI zHY2qKV4a}rV|T{>+O5Vy?9~?PgJc=0HGlzLP_(yV=vk!M-y&5!#I!TltpLQ!bVuBb zhILi$t?!Opx3Y){c!For0}axR>y{Y+Ajo=i$F7@Ond-QI0zcRPp#B9Qt-zj>-YtFr z000$qMObu0a%Ew3X>V>IRB3Hx05>l(HZL(T?SB!k0000bbVXQnWMOn=I%9HWVRU5x zGB7bQEio}IFgH{&F*-FhIx#RUFgQ9eFe;7g{Qv*}C3HntbYx+4WjbwdWNBu305UK! zF)cAMEigA!F)=zbH99poEigDbFfatb-k$&f0338hSaefwW^{L9a%BKPWN%_+AVz6& dWp{6KYjYq&Q#En5<2C>Q002ovPDHLkV1lj6{CEHW literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..85b3766904187d57668e88fb7a762f8d97e1b80b GIT binary patch literal 1067 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;M!Q z+(IDCcA^&>@vId_vc*i+4qCtC?lp ze^Pt?rt73*X}+KK-MtYyZ??+)$;Ea*=M~?Z!@T8cSai(mf-S$?!uq!SG1~S^dd-jP zk@3@Si>yBo!5iMM&a-WubVyT4!t^grinETJOgp{5V9T@g7YFo~>4a}~^9+=cR~BB; zSioZZL+Yrg{Gl^5jxJa-l`U+|!(f$wH*Rg-D_JtbKIk;x-NE13#2|84CM|5j`BJOG zkH%}F4qtbu@}A{2$5y<0@t33|o8=qhSUDP%8ozJ2fA@**(>;f+`DzP(zKWUf;woFA zl=w}a1(OAidp5KcS^Dl|J)Ua4H~sVM-RF7U+AL6we`%&y_E}G>+;eSslFWfX^KVAm z*C^j?T)3|8z?Q(pEsRrUHz;tpvZ*h*zh~ziYiavmAJ*z5cqz`_o~7*|`uWtiO~*U! z>)%-|XaB}?Y}XkEt|&W>M8;QNM7uxltc~vP{gT@}Gsvm3jhRC>QX}WZuaYNk|N5Qj z;gGfyY54Hx=+lSg{CujH)6!D1=X)?*F8RLlVeWh8WhzRo{Hzmh%=CYBGAnSg7SDlR z^~Gw>Oy7Uq`FA)WBr)hd~{st&ASc9>3m^YJ*}7aMLF$;k2?HCan2hK0y4io< z99nNbEiUkon61u&$>nbs?Vs?*bBB2S%s(|{tAf5v<1f>8D19KoVm#x*{GOLr-aPvG zzHZ-_qIpa+{?2YZJhd@6>}1~OiS>JutCyE2zxwxhvU{1_0u%kp$I=rTSm&`dvL~yG zi~MO_|D|ffj)nhQ%|9OAdh(}zOlDbkoB4%3%B=ZGd-iOzC_Kw-pwXf9?m>C|jkC+F z-`mXmWvrJM^!XwK*8|3H5o+Oadmha=*nDbdqkza8E;+Vl+svi>*VbgGRQmpvU!Cll zTsr^NwELl5`(jUfS;WewiA+t|c<)wNbnf5adS=5denELF*s6e;NVLQ?qQtoR0bmhLqlC4GB6J@G_*1`wK6o& zHL$QUFwp9K^A|-!ZhlH;S|yqWV^b?r3y21m1NY_wHOPQ$2+mI{DNig)WpGT%PfAsA g%PdMQ&o9a@R&WkBE!_Ip45*I5)78&qol`;+0OLH|`2YX_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a4ac181777ffed9dd03ed29c8564ce811a143b8a GIT binary patch literal 1252 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;M!Q z+(IDCcKfnz$52J2-w_pT?Lfr0sir;B4q#NoHoyz`~PMUMY}elIcM%wa>b z8x4y+@-BIKu9RMx_4Gv0rRk!p!=|j;m8BCJI{h!##Qo0G<4S{{3Ws>@RxJFxLMtR$ zAu~{BwcqR`VH-X&8>GE^$>hUk!)y|?>rsx|i}Lq>=N6w&eaEo(g{yvCb%1$u-u#}m zyR#NIH||$XN}2+r(b3Zr!8IOv3l!f+fspuqVNxwO=2glYd&OHU-t7< zNW4G-+g0;({=s}Ad`-)iX-OSlZj>Unz3kD%nJZ7IHi&Yr(#?OwWH-IpY>F(aue+Yx zWRdAN&PxA!)BZlDSn>=5X9J^C=l#VEB{zdCIHXP+m-swTez{KOiT33D8Y9~Ru`@pU z-s&2XHdd#^b5~AYV77Hm4S|Oo(-uu;h>9k@DBOWOLOO4EFX*`pSuEeckqP z<(m$#@6Fw?^eqd^F^#m2`EQRXo3C@%V=B8mwKA{ZTbfRuzcoh&&%4Kmt_Ocy z9hBad`*POr?)4`9!dtm7-rW%1FU-ii=bXFV_dj=kzMq%Y*>U69m6`7LXY3Awu-MxoC>1%2GHe|^cG33ucBTYHVKeZJy0VTHCszzv7KQpwLd=E$JM8IF553+te?># zDmeReck1?O4_r&nNle%?rTUY?BmSO<6_Xh}B2-j9@MOPPnz;Y_&v#CHUpA~-r!&=a zU9pg-Ub4=EyLviHGC+PTeWjDJs@ZWx0o%@~%i-qo%i3cPO00ew|H|9Ie%TzUYm3`F z{!aC5J@O#3pxKHu>Q#ox-RJf?_fChHwKu(dqqwE?UIWm}m-d`ij9(G5XS!})3;QPi zS6dVdejMH&_iIJ$>+0HBYE$^jXX(}2FUyQsup!?gHl((M-Lu2;X~4mkR(`Y2DIXKC z@melZ*A%%wmV-(3+ymDB3bvC@!qa$eAIbjv!D?%y?)zms`?hF12FtGh@bPwc+?Pl7 z9rcXjb~>&+YMT;)8CDSr1-Hzi)bjkI>|zDyVAH~_kIjJU7(8A5T-G@y GGywqd-5*8( literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1b4d9dbef99a8dd9a2299d0611005f66eb10545c GIT binary patch literal 886 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1rX+877l!}s{b%+Ad7K3vkswhI zFm^kcZ3hx8D{xE)(qO#|6+TOs0kze6x;TbdoZdS*x}!Hx_DNiE(Uw#CM-mKH9!l4qHrK{H{bIxSpWG}ToTsm_DNVY3?Ge}8 z;*0u0FJ9R6J1Q=7-O|6epyKekD@%%(ZnbL?NjtPBT-*HG{0O7!57X~upS2KTsNi5x zQxV%*Eid+N#hikY&y|xViW{@_-fA;DA|Ix2yJ!7J$L#%EHtAKbofg-!EZ~>b`u}_1 zuI|4(Poj>SL(@QY-Hd6ocKy25yVyM=vH8u>q;0L`%eIHMoZG&SMJl7{!s40hy%#0c zJ?K`S$Ksd#ep$>~ue!N^drq9Tn{zPf0|&>4!la|eA0=9cH{S@E)iZ&aC(LzjhsfQz z+tLrTHyhioS;cj(W$od9eS4v5Y4_a>2Q3WG{h042H>bX<1+yES!>k=CHHkq>ex8j~@r? zf8HCY#;_9N%m9ox^Ew~CYpg)_N}^A`uSQ6@6@PD zovurlo~pV24XLzRmh*J02IszuPRsl^`LIfPc$x3l`W!fg+r=`xE}i$Z2OC7#SEE z=o%X88W@Eb8d@2cSQ(q@8kk!d7)%sjbsI%PZhlH;S|x4`54?mx311RqLvVgtNqJ&X lDuZK6ep0G}XKrG8YEWuoN@d~6R2!fo22WQ%mvv4FO#o3Kga`lt literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..99927fd27b90945daa1131b31394f17f9a37e212 GIT binary patch literal 735 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 U3s0un02MKKy85}Sb4q9e0B!FXlmGw# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..df043228d017d391d69de3a4e24f5104673b5540 GIT binary patch literal 770 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1rX+877l!}s{b%+Ad7K3vkswhI zFm^kcZ3hx8D{xE)(qO#|6+TOs0kv^?x;TbdoZdRwHX}GtpnZ3QI&12 zldeUH$jTjBK{8h!1aNK55|z=hu;`jRySYTH+iK^Q9UT@O7AqVDw7N1rHYe#yy=^z! z`2OkMYMEJT`i7EL74HjnKA(60=dR}r(lJ}gJggJb9d6lqM5pGh->1jRkaKKx$N3Bo zF2j}&QUQ{-CocJM`EZqIp9=ZD;LyGEw~vC57zdcMpk<2A1(H#zKH)6yV5X<7ft*qJx) zhPS7&HL9Gw&U~@AL$Yv!!M21$mQyb7{Mh*D=Bqx764j{Z91a^g8J^z`TO#*nw$=6; zg|-xpQw3k*l^7N{JgTt&9%F4N8kCa{5 z`B~c7CZ5)dxsf2yz;Nfu!k5Pmg+07C)#<$K@yj`qsXN+A89XFbmwkJBW9i}aN#}W* zZv=23TDxV{rB@y+^ItvkxSyJ>7s6sT*O^I}amMr`^P}badinXE<#)?#bbVRA?t9#U zW8X}?OBo`kXv$rBZ+`UR%;Ws?d;WcDyAb;N`w1JCpZa%&p4?xr!^j!2;zFtCh1Lkw zrD1G_*1>u`)K*H88g_ zFqkO5>Nbjo-29Zxv`X9>9(W0X5}_o>hT#0PlJdl&R0hYC{G?O`&)mfH)S%SFl*+=B RsWw1G44$rjF6*2UngC7ZL0kX; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..28843f9fb06da4c4f7cbc10f262531de41ef9cc6 GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1rX+877l!}s{b%+Ad7K3vkswhI zFm^kcZ3hx8D{xE)(qO#|6+TOs0kuu?ba4!^IK6dpY{uC_iR1R?-+#BZzHM1-mY%$N zX3*lu7~Q9;-kPd2mu=$_jGXy>deK8R^CMe4ymThEOq{(lP)$i+`RUpz5x!k(CQg66 z=g;}~g^B0P%ws;>vGu?I{`<}!b^AZ;cXwO&%e_gG?;j_B!$lj(Wugq*Zy0?#tpB#f zWoy(i?+4vGcpB6_)zy7E{evx*tkuXAd0G{5dh%rBrT0A+e&JSNK3aF^duLWD$C@vv zv$oCtt{PRE8tMK0uVm^Q5!cFy1)@>AwJWRQAYB^ar19i z)0GS5k4be;lG$>Gaix#in?oX#`VT8Ax1dNiO`p>{{mSPw|PeVXBh9cdg(4@x!TSpZw;ZjdC;* z-zU`iJ!+!WW%K>Xp`U*Ut36%&kUM=-vHkM*c{i-mbDwxNh`Xt2HZt`)Sv|Wq>D#;G zTVGqMX>GWk5t4n&>YMzPg&UrEY?{gZ=(BL@$`j#}G#I-+U1B{Ne{2QM>(l;+^rmdr zI5jtMqmQ?Btjt-{XXcm8r?_7_9XgLM?pDCP6TX38&WldnzvAuwx$`YHO2z<_ zs%nXAL`h0wNvc(HQ7VvPFfuSS&^0vFH82V>G_*1>u`)K*H88g_FqkO5>Nbjo-29Zx zv`X9>9(W0XGJ_<@hT#0PlJdl&R0hYC{G?O`&)mfH)S%SFl*+=BsWw1G44$rjF6*2U FngH>6icA0i literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..170dd2daaa75784b2d9c78db0dbb62b73bddad32 GIT binary patch literal 929 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KOn)f0>^Y9tpLXDzvj#ZYHRg$aSZV|{&tGDe{i6{@&D=XUOwLDdO&N7 z;({EF5HDx$AhTuM<-3ZL@9g~MY;xrMfm7=fd;;V)2{80#<}p`r@TMTBiUgRUG?=`HGkWm<<_esC9lnCJ(3yr&2-Zpf8B25$|jjre;qXD zVv^<6e-&wcPcG6PRQ7}ZSU!GOE-OMG=4Mn%wM6NTc1}Q;1jrb>B^HLx6djS z+cf80<`C%h>9o0Oziu|Gw)d$oHFvIlUbpk^bBj~LhtCCNr?^U#2Uq&;IAHN|!)|W- z7Y6zw2Mkh=&HWOteKtq?npCHvL;AW|8@qq}|H%G1I%&e^pvWV@lqp)`8d2h0l$uzQ znV+W+l9`*zV6Jaurf+EYwq9^OP=P8)K}upts#P*bRVss#fuW(UfrYN2X^5eTm9e3f zk(sW6xs`#zjYsj1Q8eV{r(~v8qH8d)GPZk4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KR^{Oo-U3d9>?EKIh`#WC~|Cnak|>%EtyF?DiW?CQ5zQR&~R}P7o0se zYN59Iq6f(jlV67YlHXCN&atjVC@{nI*8#1hfO4&EtSdDpU1*qPw&iTevwM$|g667B zZn>1Z|LB1^me0%2?@a&EkUR1F(|7+hm=Ac=^5k9V&G-23y6Jb0);EV5Yle3RT|!?Q zJ<~mUF-pErBO+=&XU$e0&4S%$IaFo{ecK?*Ctm3^Ma7e$Y2t*#^*#z|nU+&TdMkEa z*wfGxk!~sB_x@cR2P+#-EJ z>(|t~g~}W3AL|@6bkZ`OBFUv0z1}1yl9@qZjY7}io7UI;-$eC<=s!Kbq;#6VnKJ@M zdVl&xCopw1c)a>^b@BV+;MOf~jCF40846pKe&Aoyz*^&P>@(hLtcyz><9gq9h!6qahr2p*PBL1%Icxwg`PL1E6pFB1XofvcM#>f1{ z9a#Y`3?ZM_-(h&cXgTfMi-*UHdLB>S|2a0xt>0?bUbVD&jM;|@s%|meV0juI^t52p z3E`No2`VQPCTtJ(-_LC5eg5@3oqMU3TSL8XcN8?&n$5_n4lfgaox8VHIsf$4c-48I ze+Dk!T>(sFq9v{oCC){ui6xo&c?uz!xv321`bK8@hK6tJ1=j-=sDc!vB$lLFC4*F@ zG8h>c8tMX(fq96bp_Qqrm7#&IfrXWUfmZLEzbG1V^HVa@D$z6;n_8J#Ks2x%xHliD zK?Y<)aDG}zd16s2gJVj5QmTSmW>IQ+eo=O@f^)EG;nv4yKy?hBu6{1-oD!Mk4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KMV|vqMj~}As)xyPI2^Oaui@#U46h~$AZ_zA2^Sx|6sbm;Un*!h9CU; zMPD@aJ~AiWzAC%;W~Xd|&6J$d#w+$Is-hZo zX^;C)DKqV8sat$L;kxAPle_2jaY?XKs;7i_<3m6-KG0(Q8eV{r(~v8qG>QTwKBDUXka;TZ$40i49JGy v{Irtt#G+IN$CUh}R0X%pqSW&IqU>S?=U~&qt&h!s>KHs-{an^LB{Ts5uHw)V literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7966bbc5161a898264720bd6f5a6861ed4fc7ba5 GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KR^{#o-U3d9>?!q_4OAH6k&Vtea_6x?Ac9DTP61S^ej8o?(o`u(M2`2 zcRlt8_Ev}MG{!&BH#D3$fkV;5X^Y;y-0iysBSR7u{QaRAa%lnq^9f9DE904SOo|*k-LO+o&#)*FW!bU1TI@^`bZ1 zr<-!CJgMswdJxsa8@Qx(R;s3GmbB6v4iey7aG+`1cv z(aq^L(!G+GpSr~`a&&MAd}KQx_bTUx@3~DbXWh0gOP`w-z*g|Axx=NwA=mqjlfl$K zG6q(>`)4LiUitllSRKEF;6#lJoxjelQ=1v>YszA!(l|GIOFfgG^=bt*p{2iXy(_Wb zb3g0q1>V&eP1+26`g{L~1u7(I|Id7L^2n|$&r*EaJz5($9CWfWvl6~M{#N+=OGsVJ zZM9cxIRpfg9=yKu;lhtBht<&&93#z7s7;&~e}9FwgMgsYqnxay39SHqHF&n&-BeOGTr1rqF?xQE$)sf9uzMckRvGs=eRu=t(T` zhlG} zUEq=Y_bbni#Q~G1Xo+h?iE~kEVo7Fxok4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KR^|Bo-U3d9>?EKIh`#WC~|Cn@pC^l&Mls+R8$@;im1_fv#wQBY2#6) zeOg`73#HAKe#lSBd+ipr`@_b9rQDh(ul$ZET}#+57IQ;ONkZq?B=^fc>CfcEGv6#Z ztHO5Y<;^o^%Fq2R+-E$U`49i6I-iQrb$k8Zy?Aog&|P)Hd{cxOZe1zTzX$-rZ)+ug{jOE|Hb%WagjmM%bZ6V z2fA2JtY2r@Fk}533!^3N5rPvP{tEq-Y&fuvM_$^o`&ey#^7D%<2Nce3ytjYLYL$pa zYc__2Me6J2&(!^QU^>F}L4MKt*1r$09$M?ZUM`$lWkzHvS3-14y_@;Gb!YDU{KEG^ z{@FYh!vj35chAYr=+qazd;9#e_u~5*&uq<+W)Kz;6cowy?)z!;!yqu`jPKppx`jE6 zSKn!sI~JQAbz-|Aa;Y!D@ze8DZ|pW()x7upze#oJ<*Pym*d}ZZ{v6*hLv^#zDb-hL zaaZis+`=bU-8^9w(%id$&!tyg=_{*V)#+co7F~J$;oGfo!ME?6syD4;jL-k%GNpdb zEMW2yEpd$~aV|a>QWe}Xi&D$;i?WLqoP$jZw>~xls$=kU^>bP0l+XkK1+ZX| literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5489180eb16e29955893e34f1ee7cd7e7be4ddda GIT binary patch literal 997 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KOn)f0>^Y9tpLXDzvj#ZYCGxa;uzv_{OuI)?BGCwj*>UAnu#SVkFG-aJUs}0&&BT7U z<*k#wIwkvf*jJ~eleTc~ev`U&iJM|x_=S_YDTg)Byq<#CZ}3~PCjhR zcz>eV>x*uzY_j_%&JX!=JNUT%3bSbnLJ1A2iz}bM>FmC{<~##a(W`)uCo=sX%t~fC zGpXgLS8LV#b;;r4uP>|ZP=2<5J~x9<#q3S`=bp*g^w^tcsYDntCpbv;&)ZXd?dY#1 z42pA(YjJT`XC?j5QJXAr`bJ!2)v@U()6L79dAuyun zXGs5ik84VuPIo?E+GHO1Q{t=^rc38cM%ixga%h)`knOqPq53s!vPFITz|9zUqGJrM6tn zHAa13`%_$XDXf)*jl5xZFAy}(@js(+a)z`SWfm8@clv z7w+AZ;;1OMVd9ycAqzMCNnXg2p>y|D%e>9$981?mW-`Ym2^{Qo=V&r;X50AxmeOCg z8!dI4cI*%(f)u1AmZVxG zgH)w57#SEE>Ka(+8k&X}nphbdS{a$?8kk!d7~FUi{}@F>ZhlH;S|z#$11n=oh=!W^ zf5dgTe~DWM4f Dw4k{0 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..60f7e921810634fe7542915551fff71a5cab8680 GIT binary patch literal 1479 zcmZ9Mc|6n!7{-6b48xEN8n+2k$T4FWV_K~t3iYAz&hzEKD8J$1PhmKv-&q<+-bt_V@K(kltDPgd9~f2)|*2PRl^%6km~qf0Tp zvW*Lq#xwHI&$an}({?kL?f@5vj}QO0o#$24CnO9i6z~zYJ&|-1iL8Q|BGKFD z#Ky%Y7!-ZhsMMS%wL?34V7a}EBCW5$%8q}Ga0AnO8m_Ympf{Vvq$9lQ?kBAY1Wc}$ z*3of&?h@fHPv)EY1y?gFA0xOZ*(Ka!%qqWR^1`My8UrVPM4+prOg-dzAo}(5!*H8z zkj+&)n-mu;tE`LoEoJ4Zba`@DCqlrDOnP7{qe{A@5O0pi({qmKGMKkhkoUe@``7Ri zVj>1Yj;pK`S_(Qu%N=D#S(eoe&4z-n-Z?BO+-klt)-+w?-W;w~2$QS6EU7gMQIrXp zpVo(C=*?f#99!3rttxgygRThX)&NQKgGhQDKGBa~8MoQw3Ke8uMyc-UNZ3?>!h#%% zE^p&-U=alj8A23(X{I86i~D#L!b0hVQjwn6_*~jWL8>~Gt5T)huZ2G68fniG8x*Y! z9h+#sUdv;6LcLJdFH)1x1Y^I*x#W23RP*`}(IBPxSfVRkStjFoX?c0T*{PYm4s{BZLoEd*WFPGoEP}t~;$Di? zc1CtGc#8_35d9*Ha^E|2WqJuT+g8Q2zXY9;eoASxKFV+etA=zcx0?^<_$- z8o{jaSh+9KxfKjc>7^Fz;$cb}(j|YbCGvdtU@gPzRcI5~i5Vrg7%NQwOi*lm44 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4def965cec244cc3cca5544d730bebc85d8ad6bc GIT binary patch literal 1364 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 P00000NkvXXu0mjfU69h3 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c4472ae2d9cb029fbadff34240298e090c0f33e1 GIT binary patch literal 1372 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 VQ#En5<2C>Q002ovPDHLkV1f&-0RR91 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ab9e022fbf358060bf1eeb725fb09d2530c0ea75 GIT binary patch literal 1134 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEX7WqAsj$Z!;#Vf4nJ za0`Jjl>Nr8ydc?7hKQ4zjR=e7?1W@N4`mL=jTe+2 zh)yqq>R>;=IhU4HzzQ62$-Ul#9a4|SDCTKA5ur@4Y zFc4vAV>&=sP;(|v*CG!WmnlJym5j8Ngq1$kefYSxBc|g-;UtxCv46+X7Zhz?wE3#K z(M@p?*NGZSvy?7*{CwrVvBoK2rEe_xx2+ zI^De0W=c$Y#BcMGl9Dfn|NQwABy&9e__1SdMm!rg0S(Db{A;%$Xr<4(HEY&fef{;k zf(Hb2>hq6>ws4N7Py~@#BRtC6SAYN;Td@3V8oY<*JuBKIxzI;`YLw&g`j? zYs1vPfB#;7{``6U;5L&fLGq0|&*eQ>(7%}Xl+e`IYnJS-kY5lvZAFaw=}F>DEp3ccwL8XKG^!y2LBY>Bu3#xonB_ zuBS3R4T_9Ywp_~&*7vsPJ)YWm>aV+}{|g!89g-hr06pOPl+XKDYyZ}Jk?gt;bOoLW znJl^fx>R8E0wB3<`}Xo(ci(;GmcRc>M*D>1h4?>ugGoY(EZ-Me?c9z1yP+{>4l#~@7n*}c9 zZRg*c>bYRPyDM33~6uiuO53w#d#W!`f zTOw0HYP;S|6E499Eo*r%Gv4Juf#<;|mpyc0SoNkx=cdUT?u3)C5`7uGuki#kZvXV; z>E~m|j(zV*{_Im7vd-9tHKyZV?8@HN{8L{8<&Q5aSIUX4T@jQ1;dz!!z=`*)ogdg| s#~t3ukkqg6oprA&iJ1eIjs7rQT4$EU(JSx>nCBThUHx3vIVCg!0M}jX+5i9m literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ce0a14325a717d6dd853b75c241d837f98c1e766 GIT binary patch literal 1316 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEX7WqAsj$Z!;#Vf4nJ za0`Jjl>Nr8ydc?7hDgttk%=TF{EP7+c}ONkE2A|{O^}6?0ys= zaUwe8$V;c?(({!pngldX0o!_>ir0mI zdRDEvyp{RH=5_JKGasrd+&ngCKf{Cfx5N%@UMCL}5ju21h%a<=dow{SQ)SnyE zTA2RYDNOX>d0Mn{>B*BP726)x<#;M<}VNcEQW_V@3PkBRv+!9yj^$mgT>l8b^) z4bC=l?@y;~_TIdCv(e!X0c+Ue6yJ1)XsLex{++*&BeSF>it($3;@%A#KIolM)Lp~S zo?>JJo_Ofru?R>Z4K4zy|6@_|G0 zP`_ZW+wP#1Q|{cpZJi+DHc@d&t6G5ef_V`-YLy(BiJTBamuYkzlDKq8u!50+fBKr2 zB~@{OQ!0;55NiwID43vtJnheyW?h`~Jl5mpopCJJ?QA;VfVI zYYj^W2U3!;(Pmthc_~$cZCdJGF|OAB*RNmC-%y>Y^2I!9Y0%3h0U8qJ<>jGo;${g( zF;4Y5dgt!lySsMnGTK;O*>iz&L+@(8`@`5UVf zRYjO|PVcg{v(uB4mE|m-`q=FOYlqyXJeDwrr9p;=KSX&wV7aj^cJID@b~kU_FxXK2 zvDtxh$IhKU_wC%d^Qgq8=K>AeA2SuI=iDy)`ryHX%eQXbazEBQ|9WZd?#I198$M_s zNIvoFpYwY^?ps-l4L^81j5>II%avr&S!GN5M49xa*Og+MD>Q=U} RZ332544$rjF6*2UngBukK4nJ za0`Jjl>Nr8ydc?7hKQ4z_`cL#WAE}&f7bNUd(|aZV&&j%=Idt z;1xb0Pb~3$P+FS(P4}<`p=Ak@8+v;gC-V4Ii2FbMxhmv48{bJ5rtNdjKkq1Z-{1KE z9D@P#0UicphBNpW8`@7LuHC9~(xR{5v&?gwr1ba ztzK6C_E!wIA5~_T2UhQ%YS&Wy^q{$D?eW-|npVFqIYTZ1G6jTu+J zH~IZ6^4nJ za0`Jjl>Nr8ydc?7hKQ4!2HA0#WAE}&f7T~y_FqB+Uu*A7_@3I zo@V{X(wZxjb1r1%8zs$2aX0)rmU!=+ed*o52_o$ZEg2KtL>!fz0uDNP2wQM;x#}>* zP2S6WZ`PYM^-AN-@3np7(oUw|JDp#?>Dck(>=IV{0_7dpNdV5rj|A?Cot zt+cG@Pm!*S%iHXu%V>XbOiY%NynsX98BWbX0N(*tVFbuQ|LISp^SUyHj$~VPa8tCw$3~MoImHb-i&2Cr4}5?_KvDo5|caPbJ^$iwph)nUOT5w zow}4kHR^o(&g~1}R3s@c09wLsBl~vagv%FiaZB*9=_~4;VBr3DaKSdFw!;s9KYsi;^oCvh z>Z>i^e|lzUCU{Nw)SNTBD~ySWZDrw!@9de13MmtqR4N|ZP7yP3p1{QM>yOG5Q6Ov5 zv;B24Pgz_zgFf4=iwtyYSmUUrb%}d|t%s{?6yqwEl`A|n9hNGHimqf?A+cnUQY*vM z=8zB%))xXx7CEUoOji({+RA-F*TXe6k*S0?C~)R(hPyxoF5DG|m+zf?{P=Nu=PTK! z3C#*o2ZT-b6~49+(0w5Ekmbm?-tP})m$y6os&@bU_Vr=q5C&nne~oN}@)kVH{b8It XeVsvS@NsuwA;IA3>gTe~DWM4f&P4G* literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d4688741b9ce86e0f68ba226198346298ff90065 GIT binary patch literal 1294 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEX7WqAsj$Z!;#Vf4nJ za0`Jjl>Nr8ydc?7hDgtEZx(^F{EP7+c^ilrK3gK>nlqG#TRk3 z?m61f-SCSgle5F0DLK^|$9+p5Ap-u({6W?ma2l)(!49R@`+Zjz5_89X# zo-F^@;>*Xq>(;&Accr$+Lm=MOMM*GYmKl43d%=s1i4vvje^nTKTz}`)t6lFR@819D zbN#Ert33=KcJ&w5uUz%(RG8J= zb9_#Pvcw#ogUq{m*+JnUyRZ zZEubpYm@3eD)#sNn))Sz3PpE-0W|aJ)2C|6$&!l8J4j)e`&*^r{S#m`~&)m=;8DS9}mA22z4xM=5| z`s(Ux-@D!dEq)9P5!0@k_+HL2k$S(f`s3^XE{2BLvuEqGv$N;-_w}7A+kJP@yW{#! z+6zt}J?g4G`Q(h}&!6YNfA?-*!1u?d3&k%i4bj@GFT(X~L+ch3CWZss-ezAm;n$ve z>fwf#Eg?+1u4HXJoyeJ~$;x2wv@1sM{b`v?m$+UeMTQvzjrv-(S1Z}$w9*6n?d)Ag zlePwE%m@z;Kg;mzBabGFL|Y(J!JBV$a&KP;y7u=}ucrai?kco0FueGa@H_s?2I;J= zw^H?{pFSmU=@JJ6!(juv(z52&9qo#;&%(o2vXoRR9QqouNoVy;zvY{O7QL!Zf8?RL zp!>we5FN4AKWpryw@sK9#h|cFdY58tS=l!=9Yx)}4SGtuA3k~V#2IMrt!;k~{y$fD z{sITX5ofFU=l3tnf1Yc6q*N`J`o;{|`THubq}^s(bp^&v_mD zUVU>8uwLM381^LM)24MCj+_4nJ za0`Jjl>Nr8ydc?7hDgtjLp-TuOa zDJfXN(lW`_oPDa_!G(M`t;#3l^-VXoig02o@^&y+- zOR`v-IQcxjTRVOF_xkjG_bV)a%73qZ|8HmYM4qNpFSoD2v>=5h7XzNh3njP&@;_LF*ZSa{1EwQT?`6n$wg!HFoFErN%b-9FnNrt0NF-s<-nRr^Evm8)M<+ zF{}5nmM;5i&Q&O6H1o`tW5tA3FG3pO^!Ui44dA_96za4 zw0J>mgKFyY*}0oinlES_c(%#;`Mx$W#zGD2kURlq?hfahir!`&Czx_}FW#a#-C2b( z(cN~{n;fm13OASz&8yM8S+IenM9+Gkdc4;(_Hs6zAGI2)r`xp`yx%0f>CLt4*Z1Fw z+2mNj`e*x_Z9veWv)f{Rjne6BE$)Kr8p7VUc`Ys4wSWKndw1{NePO90w<0FCfHmg( z?TXUUt2$!c*5cyg_VV)bx25{DO^zlNK7aG(&4rS6dOMiT{k2;YwtBzU(x8PmbN)#_ zm~lf!UOs-B*HWj&7k8M)pMJ7cZVWeE9HR2lwL#KJO{p z8DnQM*IMI^(7QiBu7)!S2Cfa;T^M_P?e*8o1Nn5cwnn{8D=yxgU}df~5g21CIl>q7 z_y4sypS{>?SJ28i(@sBadaEk?GkZnQt1!*br2?B7LofBZJ-+vClH3nFg*Q10lP0}u zpC)a1E@#4|y3T9Xi6F+m_HXWjv6~qqFEuhBm^Ml7)@Fqi&-Sxh7cOc4XTTSFX--Uv zr*x%MmsaMxrvibO+~nOCd(ARt@R`2l3x-n|?9U3aQU41-{O$gXv}%ZrLOeHZh(wJTgS<460;X+f{tkL0|2 z%^COP+2_i#b)v=#q|dFWY29~vnc`;W_-Q3iqtqWro=aWHem^z%cG241EMJ}D!awiX zyk`UF??Y;i_Seb|tWaP&(7|A!#L&aRpiCO`59`0Bd=sXYUFQWB84RATelF{r5}E)? CrUy{~ literal 0 HcmV?d00001 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 @@ + + + + + + + + + + + + + + + + + + + +