Commit 7925342f by []inger Committed by Oliver Woodman

Provide a VideoView for simple use cases.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132855091
parent da034da5
Showing with 1941 additions and 363 deletions
...@@ -22,17 +22,10 @@ import android.net.Uri; ...@@ -22,17 +22,10 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.text.TextUtils; 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;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.View.OnTouchListener;
import android.widget.Button; import android.widget.Button;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.MediaController;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
...@@ -64,12 +57,9 @@ import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; ...@@ -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;
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.TrackInfo; import com.google.android.exoplayer2.trackselection.MappingTrackSelector.TrackInfo;
import com.google.android.exoplayer2.trackselection.TrackSelection; 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.DebugTextViewHelper;
import com.google.android.exoplayer2.ui.KeyCompatibleMediaController; import com.google.android.exoplayer2.ui.PlaybackControlView;
import com.google.android.exoplayer2.ui.MediaControllerPrevNextClickListener; import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
import com.google.android.exoplayer2.ui.PlayerControl;
import com.google.android.exoplayer2.ui.SubtitleView;
import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
...@@ -84,9 +74,8 @@ import java.util.UUID; ...@@ -84,9 +74,8 @@ import java.util.UUID;
/** /**
* An activity that plays media using {@link SimpleExoPlayer}. * An activity that plays media using {@link SimpleExoPlayer}.
*/ */
public class PlayerActivity extends Activity implements OnKeyListener, OnTouchListener, public class PlayerActivity extends Activity implements OnClickListener, ExoPlayer.EventListener,
OnClickListener, ExoPlayer.EventListener, SimpleExoPlayer.VideoListener, MappingTrackSelector.EventListener, PlaybackControlView.VisibilityListener {
MappingTrackSelector.EventListener {
public static final String DRM_SCHEME_UUID_EXTRA = "drm_scheme_uuid"; public static final String DRM_SCHEME_UUID_EXTRA = "drm_scheme_uuid";
public static final String DRM_LICENSE_URL = "drm_license_url"; public static final String DRM_LICENSE_URL = "drm_license_url";
...@@ -109,14 +98,9 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -109,14 +98,9 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi
private Handler mainHandler; private Handler mainHandler;
private EventLogger eventLogger; private EventLogger eventLogger;
private MediaController mediaController; private SimpleExoPlayerView simpleExoPlayerView;
private View rootView;
private LinearLayout debugRootView; private LinearLayout debugRootView;
private View shutterView;
private AspectRatioFrameLayout videoFrame;
private SurfaceView surfaceView;
private TextView debugTextView; private TextView debugTextView;
private SubtitleView subtitleView;
private Button retryButton; private Button retryButton;
private String userAgent; private String userAgent;
...@@ -144,21 +128,16 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -144,21 +128,16 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi
} }
setContentView(R.layout.player_activity); setContentView(R.layout.player_activity);
rootView = findViewById(R.id.root); View rootView = findViewById(R.id.root);
rootView.setOnTouchListener(this); rootView.setOnClickListener(this);
rootView.setOnKeyListener(this);
shutterView = findViewById(R.id.shutter);
debugRootView = (LinearLayout) findViewById(R.id.controls_root); 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); 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 = (Button) findViewById(R.id.retry_button);
retryButton.setOnClickListener(this); retryButton.setOnClickListener(this);
simpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.player_view);
simpleExoPlayerView.setControllerVisibilityListener(this);
simpleExoPlayerView.requestFocus();
} }
@Override @Override
...@@ -211,26 +190,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -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 // OnClickListener methods
@Override @Override
...@@ -243,6 +202,13 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -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 // Internal methods
private void initializePlayer() { private void initializePlayer() {
...@@ -279,9 +245,7 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -279,9 +245,7 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi
player.setAudioDebugListener(eventLogger); player.setAudioDebugListener(eventLogger);
player.setVideoDebugListener(eventLogger); player.setVideoDebugListener(eventLogger);
player.setId3Output(eventLogger); player.setId3Output(eventLogger);
player.setTextOutput(subtitleView); simpleExoPlayerView.setPlayer(player);
player.setVideoListener(this);
player.setVideoSurfaceView(surfaceView);
if (shouldRestorePosition) { if (shouldRestorePosition) {
if (playerPosition == C.TIME_UNSET) { if (playerPosition == C.TIME_UNSET) {
player.seekToDefaultPosition(playerWindow); player.seekToDefaultPosition(playerWindow);
...@@ -290,10 +254,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -290,10 +254,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi
} }
} }
player.setPlayWhenReady(true); 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 = new DebugTextViewHelper(player, debugTextView);
debugViewHelper.start(); debugViewHelper.start();
playerNeedsSource = true; playerNeedsSource = true;
...@@ -369,7 +329,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -369,7 +329,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi
private void releasePlayer() { private void releasePlayer() {
if (player != null) { if (player != null) {
shutterView.setVisibility(View.VISIBLE);
debugViewHelper.stop(); debugViewHelper.stop();
debugViewHelper = null; debugViewHelper = null;
shouldRestorePosition = false; shouldRestorePosition = false;
...@@ -428,10 +387,7 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -428,10 +387,7 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi
@Override @Override
public void onPositionDiscontinuity() { public void onPositionDiscontinuity() {
if (mediaController.isShowing()) { // Do nothing.
// The MediaController is visible, so force it to show the updated position immediately.
mediaController.show();
}
} }
@Override @Override
...@@ -472,19 +428,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -472,19 +428,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi
showControls(); 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 // MappingTrackSelector.EventListener implementation
@Override @Override
...@@ -496,17 +439,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -496,17 +439,6 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi
if (trackInfo.hasOnlyUnplayableTracks(C.TRACK_TYPE_AUDIO)) { if (trackInfo.hasOnlyUnplayableTracks(C.TRACK_TYPE_AUDIO)) {
showToast(R.string.error_unsupported_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 // User controls
...@@ -553,24 +485,8 @@ public class PlayerActivity extends Activity implements OnKeyListener, OnTouchLi ...@@ -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() { private void showControls() {
debugRootView.setVisibility(View.VISIBLE); 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) { private void showToast(int messageId) {
......
...@@ -21,29 +21,11 @@ ...@@ -21,29 +21,11 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:keepScreenOn="true"> android:keepScreenOn="true">
<com.google.android.exoplayer2.ui.AspectRatioFrameLayout <com.google.android.exoplayer2.ui.SimpleExoPlayerView android:id="@+id/player_view"
android:id="@+id/video_frame" android:focusable="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">
<SurfaceView android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
<View android:id="@+id/shutter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"/>
<com.google.android.exoplayer2.ui.SubtitleView
android:id="@+id/subtitles"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"/>
</com.google.android.exoplayer2.ui.AspectRatioFrameLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -86,6 +86,13 @@ public final class SimpleExoPlayer implements ExoPlayer { ...@@ -86,6 +86,13 @@ public final class SimpleExoPlayer implements ExoPlayer {
*/ */
void onRenderedFirstFrame(Surface surface); void onRenderedFirstFrame(Surface surface);
/**
* Called when the renderer is disabled.
*
* @param counters {@link DecoderCounters} that were updated by the renderer.
*/
void onVideoDisabled(DecoderCounters counters);
} }
private static final String TAG = "SimpleExoPlayer"; private static final String TAG = "SimpleExoPlayer";
...@@ -672,6 +679,9 @@ public final class SimpleExoPlayer implements ExoPlayer { ...@@ -672,6 +679,9 @@ public final class SimpleExoPlayer implements ExoPlayer {
@Override @Override
public void onVideoDisabled(DecoderCounters counters) { public void onVideoDisabled(DecoderCounters counters) {
if (videoListener != null) {
videoListener.onVideoDisabled(counters);
}
if (videoDebugListener != null) { if (videoDebugListener != null) {
videoDebugListener.onVideoDisabled(counters); videoDebugListener.onVideoDisabled(counters);
} }
......
/*
* 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.view.KeyEvent;
import android.widget.MediaController;
/**
* An extension of {@link MediaController} with enhanced support for D-pad and media keys.
*/
public class KeyCompatibleMediaController extends MediaController {
private MediaController.MediaPlayerControl playerControl;
public KeyCompatibleMediaController(Context context) {
super(context);
}
@Override
public void setMediaPlayer(MediaController.MediaPlayerControl playerControl) {
super.setMediaPlayer(playerControl);
this.playerControl = playerControl;
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
if (playerControl.canSeekForward() && (keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD
|| keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
playerControl.seekTo(playerControl.getCurrentPosition() + 15000); // milliseconds
show();
}
return true;
} else if (playerControl.canSeekBackward() && (keyCode == KeyEvent.KEYCODE_MEDIA_REWIND
|| keyCode == KeyEvent.KEYCODE_DPAD_LEFT)) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
playerControl.seekTo(playerControl.getCurrentPosition() - 5000); // milliseconds
show();
}
return true;
}
return super.dispatchKeyEvent(event);
}
}
/*
* 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.view.View;
import android.view.View.OnClickListener;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Timeline;
/**
* An {@link OnClickListener} that can be passed to
* {@link android.widget.MediaController#setPrevNextListeners(OnClickListener, OnClickListener)} to
* make the controller's previous and next buttons seek to the previous and next windows in the
* {@link Timeline}.
*/
public class MediaControllerPrevNextClickListener implements OnClickListener {
/**
* If a previous button is clicked the player is seeked to the start of the previous window if the
* playback position in the current window is less than or equal to this constant (and if a
* previous window exists). Else the player is seeked to the start of the current window.
*/
private static final long MAX_POSITION_FOR_SEEK_TO_PREVIOUS = 3000;
private final ExoPlayer player;
private final boolean isNext;
/**
* @param player The player to operate on.
* @param isNext True if this instance if for the "next" button. False for "previous".
*/
public MediaControllerPrevNextClickListener(ExoPlayer player, boolean isNext) {
this.player = player;
this.isNext = isNext;
}
@Override
public void onClick(View v) {
Timeline timeline = player.getCurrentTimeline();
if (timeline == null) {
return;
}
int currentWindowIndex = player.getCurrentWindowIndex();
if (isNext) {
if (currentWindowIndex < timeline.getWindowCount() - 1) {
player.seekToDefaultPosition(currentWindowIndex + 1);
} else if (timeline.getWindow(currentWindowIndex, new Timeline.Window(), false).isDynamic) {
// Seek to the live edge.
player.seekToDefaultPosition();
}
} else {
if (currentWindowIndex > 0
&& player.getCurrentPosition() <= MAX_POSITION_FOR_SEEK_TO_PREVIOUS) {
player.seekToDefaultPosition(currentWindowIndex - 1);
} else {
player.seekTo(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.
* <p>
* 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);
}
}
/*
* 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<Cue> 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.
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent">
<com.google.android.exoplayer2.ui.AspectRatioFrameLayout android:id="@+id/video_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">
<com.google.android.exoplayer2.ui.SubtitleView android:id="@+id/subtitles"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.google.android.exoplayer2.ui.AspectRatioFrameLayout>
<View android:id="@+id/shutter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"/>
<com.google.android.exoplayer2.ui.PlaybackControlView android:id="@+id/control"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#CC000000"
android:layout_gravity="bottom"
android:orientation="vertical"
android:layoutDirection="ltr">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="4dp"
android:orientation="horizontal">
<ImageButton android:id="@+id/prev"
style="@style/MediaButton.Previous"
android:contentDescription="@string/prev_description"
android:visibility="gone"/>
<ImageButton android:id="@+id/rew"
style="@style/MediaButton.Rew"
android:contentDescription="@string/rew_description"/>
<ImageButton android:id="@+id/pause"
style="@style/MediaButton.Pause"
android:contentDescription="@string/pause_description"/>
<ImageButton android:id="@+id/ffwd"
style="@style/MediaButton.Ffwd"
android:contentDescription="@string/ffw_description"/>
<ImageButton android:id="@+id/next"
style="@style/MediaButton.Next"
android:contentDescription="@string/prev_description"
android:visibility="gone"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView android:id="@+id/time_current"
android:textSize="14sp"
android:textStyle="bold"
android:paddingTop="4dp"
android:paddingStart="4dp"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="4dp"
android:textColor="#FFBEBEBE"/>
<SeekBar android:id="@+id/mediacontroller_progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="32dp"/>
<TextView android:id="@+id/time"
android:textSize="14sp"
android:textStyle="bold"
android:paddingTop="4dp"
android:paddingEnd="4dp"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="4dp"
android:textColor="#FFBEBEBE"/>
</LinearLayout>
</LinearLayout>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Vorige snit"</string>
<string name="next_description">"Volgende snit"</string>
<string name="pause_description">"Wag"</string>
<string name="play_description">"Speel"</string>
<string name="stop_description">"Stop"</string>
<string name="rew_description">"Spoel terug"</string>
<string name="ffw_description">"Vinnig vorentoe"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"ቀዳሚ ትራክ"</string>
<string name="next_description">"ቀጣይ ትራክ"</string>
<string name="pause_description">"ለአፍታ አቁም"</string>
<string name="play_description">"አጫውት"</string>
<string name="stop_description">"አቁም"</string>
<string name="rew_description">"ወደኋላ አጠንጥን"</string>
<string name="ffw_description">"በፍጥነት አሳልፍ"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"المقطع الصوتي السابق"</string>
<string name="next_description">"المقطع الصوتي التالي"</string>
<string name="pause_description">"إيقاف مؤقت"</string>
<string name="play_description">"تشغيل"</string>
<string name="stop_description">"إيقاف"</string>
<string name="rew_description">"إرجاع"</string>
<string name="ffw_description">"تقديم سريع"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Öncəki trek"</string>
<string name="next_description">"Növbəti trek"</string>
<string name="pause_description">"Pauza"</string>
<string name="play_description">"Oyun"</string>
<string name="stop_description">"Dayandır"</string>
<string name="rew_description">"Geri sarıma"</string>
<string name="ffw_description">"Sürətlə irəli"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Prethodna pesma"</string>
<string name="next_description">"Sledeća pesma"</string>
<string name="pause_description">"Pauza"</string>
<string name="play_description">"Pusti"</string>
<string name="stop_description">"Zaustavi"</string>
<string name="rew_description">"Premotaj unazad"</string>
<string name="ffw_description">"Premotaj unapred"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Папярэдні трэк"</string>
<string name="next_description">"Наступны трэк"</string>
<string name="pause_description">"Прыпыніць"</string>
<string name="play_description">"Прайграць"</string>
<string name="stop_description">"Спыніць"</string>
<string name="rew_description">"Перамотка назад"</string>
<string name="ffw_description">"Перамотка ўперад"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Предишен запис"</string>
<string name="next_description">"Следващ запис"</string>
<string name="pause_description">"Пауза"</string>
<string name="play_description">"Пускане"</string>
<string name="stop_description">"Спиране"</string>
<string name="rew_description">"Превъртане назад"</string>
<string name="ffw_description">"Превъртане напред"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"পূর্ববর্তী ট্র্যাক"</string>
<string name="next_description">"পরবর্তী ট্র্যাক"</string>
<string name="pause_description">"বিরাম দিন"</string>
<string name="play_description">"প্লে করুন"</string>
<string name="stop_description">"থামান"</string>
<string name="rew_description">"গুটিয়ে নিন"</string>
<string name="ffw_description">"দ্রুত সামনে এগোন"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Prethodna numera"</string>
<string name="next_description">"Sljedeća numera"</string>
<string name="pause_description">"Pauziraj"</string>
<string name="play_description">"Reproduciraj"</string>
<string name="stop_description">"Zaustavi"</string>
<string name="rew_description">"Premotaj"</string>
<string name="ffw_description">"Ubrzaj"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Ruta anterior"</string>
<string name="next_description">"Ruta següent"</string>
<string name="pause_description">"Posa en pausa"</string>
<string name="play_description">"Reprodueix"</string>
<string name="stop_description">"Atura"</string>
<string name="rew_description">"Rebobina"</string>
<string name="ffw_description">"Avança ràpidament"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Předchozí skladba"</string>
<string name="next_description">"Další skladba"</string>
<string name="pause_description">"Pozastavit"</string>
<string name="play_description">"Přehrát"</string>
<string name="stop_description">"Zastavit"</string>
<string name="rew_description">"Přetočit zpět"</string>
<string name="ffw_description">"Přetočit vpřed"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Forrige nummer"</string>
<string name="next_description">"Næste nummer"</string>
<string name="pause_description">"Pause"</string>
<string name="play_description">"Afspil"</string>
<string name="stop_description">"Stop"</string>
<string name="rew_description">"Spol tilbage"</string>
<string name="ffw_description">"Spol frem"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Vorheriger Titel"</string>
<string name="next_description">"Nächster Titel"</string>
<string name="pause_description">"Pausieren"</string>
<string name="play_description">"Wiedergabe"</string>
<string name="stop_description">"Beenden"</string>
<string name="rew_description">"Zurückspulen"</string>
<string name="ffw_description">"Vorspulen"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Προηγούμενο κομμάτι"</string>
<string name="next_description">"Επόμενο κομμάτι"</string>
<string name="pause_description">"Παύση"</string>
<string name="play_description">"Αναπαραγωγή"</string>
<string name="stop_description">"Διακοπή"</string>
<string name="rew_description">"Επαναφορά"</string>
<string name="ffw_description">"Γρήγορη προώθηση"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Previous track"</string>
<string name="next_description">"Next track"</string>
<string name="pause_description">"Pause"</string>
<string name="play_description">"Play"</string>
<string name="stop_description">"Stop"</string>
<string name="rew_description">"Rewind"</string>
<string name="ffw_description">"Fast-forward"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Previous track"</string>
<string name="next_description">"Next track"</string>
<string name="pause_description">"Pause"</string>
<string name="play_description">"Play"</string>
<string name="stop_description">"Stop"</string>
<string name="rew_description">"Rewind"</string>
<string name="ffw_description">"Fast-forward"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Previous track"</string>
<string name="next_description">"Next track"</string>
<string name="pause_description">"Pause"</string>
<string name="play_description">"Play"</string>
<string name="stop_description">"Stop"</string>
<string name="rew_description">"Rewind"</string>
<string name="ffw_description">"Fast-forward"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Pista anterior"</string>
<string name="next_description">"Siguiente pista"</string>
<string name="pause_description">"Pausar"</string>
<string name="play_description">"Reproducir"</string>
<string name="stop_description">"Detener"</string>
<string name="rew_description">"Retroceder"</string>
<string name="ffw_description">"Avanzar"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Canción anterior"</string>
<string name="next_description">"Siguiente canción"</string>
<string name="pause_description">"Pausar"</string>
<string name="play_description">"Reproducir"</string>
<string name="stop_description">"Detener"</string>
<string name="rew_description">"Rebobinar"</string>
<string name="ffw_description">"Avance rápido"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Eelmine lugu"</string>
<string name="next_description">"Järgmine lugu"</string>
<string name="pause_description">"Peata"</string>
<string name="play_description">"Esita"</string>
<string name="stop_description">"Peata"</string>
<string name="rew_description">"Keri tagasi"</string>
<string name="ffw_description">"Keri edasi"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Aurreko pista"</string>
<string name="next_description">"Hurrengo pista"</string>
<string name="pause_description">"Pausatu"</string>
<string name="play_description">"Erreproduzitu"</string>
<string name="stop_description">"Gelditu"</string>
<string name="rew_description">"Atzeratu"</string>
<string name="ffw_description">"Aurreratu"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"آهنگ قبلی"</string>
<string name="next_description">"آهنگ بعدی"</string>
<string name="pause_description">"مکث"</string>
<string name="play_description">"پخش"</string>
<string name="stop_description">"توقف"</string>
<string name="rew_description">"عقب بردن"</string>
<string name="ffw_description">"جلو بردن سریع"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Edellinen raita"</string>
<string name="next_description">"Seuraava raita"</string>
<string name="pause_description">"Tauko"</string>
<string name="play_description">"Toista"</string>
<string name="stop_description">"Seis"</string>
<string name="rew_description">"Kelaa taakse"</string>
<string name="ffw_description">"Kelaa eteen"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Chanson précédente"</string>
<string name="next_description">"Chanson suivante"</string>
<string name="pause_description">"Pause"</string>
<string name="play_description">"Lecture"</string>
<string name="stop_description">"Arrêter"</string>
<string name="rew_description">"Reculer"</string>
<string name="ffw_description">"Avance rapide"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Piste précédente"</string>
<string name="next_description">"Piste suivante"</string>
<string name="pause_description">"Interrompre"</string>
<string name="play_description">"Lire"</string>
<string name="stop_description">"Arrêter"</string>
<string name="rew_description">"Retour arrière"</string>
<string name="ffw_description">"Avance rapide"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Pista anterior"</string>
<string name="next_description">"Seguinte pista"</string>
<string name="pause_description">"Pausar"</string>
<string name="play_description">"Reproducir"</string>
<string name="stop_description">"Deter"</string>
<string name="rew_description">"Rebobinar"</string>
<string name="ffw_description">"Avance rápido"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"પહેલાનો ટ્રૅક"</string>
<string name="next_description">"આગલો ટ્રૅક"</string>
<string name="pause_description">"થોભો"</string>
<string name="play_description">"ચલાવો"</string>
<string name="stop_description">"રોકો"</string>
<string name="rew_description">"રીવાઇન્ડ કરો"</string>
<string name="ffw_description">"ઝડપી ફોરવર્ડ કરો"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"पिछला ट्रैक"</string>
<string name="next_description">"अगला ट्रैक"</string>
<string name="pause_description">"रोकें"</string>
<string name="play_description">"चलाएं"</string>
<string name="stop_description">"बंद करें"</string>
<string name="rew_description">"रिवाइंड करें"</string>
<string name="ffw_description">"फ़ास्ट फ़ॉरवर्ड"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Prethodna pjesma"</string>
<string name="next_description">"Sljedeća pjesma"</string>
<string name="pause_description">"Pauziraj"</string>
<string name="play_description">"Reproduciraj"</string>
<string name="stop_description">"Zaustavi"</string>
<string name="rew_description">"Unatrag"</string>
<string name="ffw_description">"Brzo unaprijed"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Előző szám"</string>
<string name="next_description">"Következő szám"</string>
<string name="pause_description">"Szünet"</string>
<string name="play_description">"Lejátszás"</string>
<string name="stop_description">"Leállítás"</string>
<string name="rew_description">"Visszatekerés"</string>
<string name="ffw_description">"Előretekerés"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Նախորդը"</string>
<string name="next_description">"Հաջորդը"</string>
<string name="pause_description">"Դադարեցնել"</string>
<string name="play_description">"Նվագարկել"</string>
<string name="stop_description">"Դադարեցնել"</string>
<string name="rew_description">"Հետ փաթաթել"</string>
<string name="ffw_description">"Արագ առաջ անցնել"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Lagu sebelumnya"</string>
<string name="next_description">"Lagu berikutnya"</string>
<string name="pause_description">"Jeda"</string>
<string name="play_description">"Putar"</string>
<string name="stop_description">"Berhenti"</string>
<string name="rew_description">"Putar Ulang"</string>
<string name="ffw_description">"Maju cepat"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Fyrra lag"</string>
<string name="next_description">"Næsta lag"</string>
<string name="pause_description">"Hlé"</string>
<string name="play_description">"Spila"</string>
<string name="stop_description">"Stöðva"</string>
<string name="rew_description">"Spóla til baka"</string>
<string name="ffw_description">"Spóla áfram"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Traccia precedente"</string>
<string name="next_description">"Traccia successiva"</string>
<string name="pause_description">"Metti in pausa"</string>
<string name="play_description">"Riproduci"</string>
<string name="stop_description">"Interrompi"</string>
<string name="rew_description">"Riavvolgi"</string>
<string name="ffw_description">"Avanti veloce"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"הרצועה הקודמת"</string>
<string name="next_description">"הרצועה הבאה"</string>
<string name="pause_description">"השהה"</string>
<string name="play_description">"הפעל"</string>
<string name="stop_description">"הפסק"</string>
<string name="rew_description">"הרץ אחורה"</string>
<string name="ffw_description">"הרץ קדימה"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"前のトラック"</string>
<string name="next_description">"次のトラック"</string>
<string name="pause_description">"一時停止"</string>
<string name="play_description">"再生"</string>
<string name="stop_description">"停止"</string>
<string name="rew_description">"巻き戻し"</string>
<string name="ffw_description">"早送り"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"წინა ჩანაწერი"</string>
<string name="next_description">"შემდეგი ჩანაწერი"</string>
<string name="pause_description">"პაუზა"</string>
<string name="play_description">"დაკვრა"</string>
<string name="stop_description">"შეწყვეტა"</string>
<string name="rew_description">"უკან გადახვევა"</string>
<string name="ffw_description">"წინ გადახვევა"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Алдыңғы трек"</string>
<string name="next_description">"Келесі трек"</string>
<string name="pause_description">"Кідірту"</string>
<string name="play_description">"Ойнату"</string>
<string name="stop_description">"Тоқтату"</string>
<string name="rew_description">"Кері айналдыру"</string>
<string name="ffw_description">"Жылдам алға айналдыру"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"បទ​មុន"</string>
<string name="next_description">"បទ​បន្ទាប់"</string>
<string name="pause_description">"ផ្អាក"</string>
<string name="play_description">"ចាក់"</string>
<string name="stop_description">"បញ្ឈប់"</string>
<string name="rew_description">"ខា​ថយក្រោយ"</string>
<string name="ffw_description">"ទៅ​មុខ​​​រហ័ស"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"ಹಿಂದಿನ ಟ್ರ್ಯಾಕ್"</string>
<string name="next_description">"ಮುಂದಿನ ಟ್ರ್ಯಾಕ್"</string>
<string name="pause_description">"ವಿರಾಮಗೊಳಿಸು"</string>
<string name="play_description">"ಪ್ಲೇ ಮಾಡು"</string>
<string name="stop_description">"ನಿಲ್ಲಿಸು"</string>
<string name="rew_description">"ರಿವೈಂಡ್ ಮಾಡು"</string>
<string name="ffw_description">"ವೇಗವಾಗಿ ಮುಂದಕ್ಕೆ"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"이전 트랙"</string>
<string name="next_description">"다음 트랙"</string>
<string name="pause_description">"일시중지"</string>
<string name="play_description">"재생"</string>
<string name="stop_description">"중지"</string>
<string name="rew_description">"되감기"</string>
<string name="ffw_description">"빨리 감기"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Мурунку трек"</string>
<string name="next_description">"Кийинки трек"</string>
<string name="pause_description">"Тындыруу"</string>
<string name="play_description">"Ойнотуу"</string>
<string name="stop_description">"Токтотуу"</string>
<string name="rew_description">"Артка түрүү"</string>
<string name="ffw_description">"Алдыга түрүү"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"​ເພງ​ກ່ອນ​ໜ້າ"</string>
<string name="next_description">"​ເພງ​ຕໍ່​ໄປ"</string>
<string name="pause_description">"ຢຸດຊົ່ວຄາວ"</string>
<string name="play_description">"ຫຼິ້ນ"</string>
<string name="stop_description">"ຢຸດ"</string>
<string name="rew_description">"​ຣີ​​ວາຍກັບ"</string>
<string name="ffw_description">"ເລື່ອນ​ໄປ​ໜ້າ"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Ankstesnis takelis"</string>
<string name="next_description">"Kitas takelis"</string>
<string name="pause_description">"Pristabdyti"</string>
<string name="play_description">"Leisti"</string>
<string name="stop_description">"Stabdyti"</string>
<string name="rew_description">"Sukti atgal"</string>
<string name="ffw_description">"Sukti pirmyn"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Iepriekšējais ieraksts"</string>
<string name="next_description">"Nākamais ieraksts"</string>
<string name="pause_description">"Pārtraukt"</string>
<string name="play_description">"Atskaņot"</string>
<string name="stop_description">"Apturēt"</string>
<string name="rew_description">"Attīt atpakaļ"</string>
<string name="ffw_description">"Ātri patīt"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Претходна песна"</string>
<string name="next_description">"Следна песна"</string>
<string name="pause_description">"Пауза"</string>
<string name="play_description">"Пушти"</string>
<string name="stop_description">"Запри"</string>
<string name="rew_description">"Премотај назад"</string>
<string name="ffw_description">"Брзо премотај напред"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"മുമ്പത്തെ ട്രാക്ക്"</string>
<string name="next_description">"അടുത്ത ട്രാക്ക്"</string>
<string name="pause_description">"താൽക്കാലികമായി നിർത്തുക"</string>
<string name="play_description">"പ്ലേ ചെയ്യുക"</string>
<string name="stop_description">"നിര്‍ത്തുക"</string>
<string name="rew_description">"റിവൈൻഡുചെയ്യുക"</string>
<string name="ffw_description">"വേഗത്തിലുള്ള കൈമാറൽ"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Өмнөх трек"</string>
<string name="next_description">"Дараагийн трек"</string>
<string name="pause_description">"Түр зогсоох"</string>
<string name="play_description">"Тоглуулах"</string>
<string name="stop_description">"Зогсоох"</string>
<string name="rew_description">"Буцааж хураах"</string>
<string name="ffw_description">"Хурдан урагшлуулах"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"मागील ट्रॅक"</string>
<string name="next_description">"पुढील ट्रॅक"</string>
<string name="pause_description">"विराम द्या"</string>
<string name="play_description">"प्ले करा"</string>
<string name="stop_description">"थांबा"</string>
<string name="rew_description">"रिवाईँड करा"</string>
<string name="ffw_description">"फास्ट फॉरवर्ड करा"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Lagu sebelumnya"</string>
<string name="next_description">"Lagu seterusnya"</string>
<string name="pause_description">"Jeda"</string>
<string name="play_description">"Main"</string>
<string name="stop_description">"Berhenti"</string>
<string name="rew_description">"Gulung semula"</string>
<string name="ffw_description">"Mara laju"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"ယခင် တစ်ပုဒ်"</string>
<string name="next_description">"နောက် တစ်ပုဒ်"</string>
<string name="pause_description">"ခဏရပ်ရန်"</string>
<string name="play_description">"ဖွင့်ရန်"</string>
<string name="stop_description">"ရပ်ရန်"</string>
<string name="rew_description">"ပြန်ရစ်ရန်"</string>
<string name="ffw_description">"ရှေ့သို့ သွားရန်"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Forrige spor"</string>
<string name="next_description">"Neste spor"</string>
<string name="pause_description">"Sett på pause"</string>
<string name="play_description">"Spill av"</string>
<string name="stop_description">"Stopp"</string>
<string name="rew_description">"Tilbakespoling"</string>
<string name="ffw_description">"Fremoverspoling"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"अघिल्लो ट्रयाक"</string>
<string name="next_description">"अर्को ट्रयाक"</string>
<string name="pause_description">"रोक्नुहोस्"</string>
<string name="play_description">"चलाउनुहोस्"</string>
<string name="stop_description">"रोक्नुहोस्"</string>
<string name="rew_description">"दोहोर्याउनुहोस्"</string>
<string name="ffw_description">"फास्ट फर्वार्ड"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Vorig nummer"</string>
<string name="next_description">"Volgend nummer"</string>
<string name="pause_description">"Onderbreken"</string>
<string name="play_description">"Afspelen"</string>
<string name="stop_description">"Stoppen"</string>
<string name="rew_description">"Terugspoelen"</string>
<string name="ffw_description">"Vooruitspoelen"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"ਪਿਛਲਾ ਟਰੈਕ"</string>
<string name="next_description">"ਅਗਲਾ ਟਰੈਕ"</string>
<string name="pause_description">"ਰੋਕੋ"</string>
<string name="play_description">"ਪਲੇ ਕਰੋ"</string>
<string name="stop_description">"ਰੋਕੋ"</string>
<string name="rew_description">"ਰੀਵਾਈਂਡ ਕਰੋ"</string>
<string name="ffw_description">"ਅੱਗੇ ਭੇਜੋ"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Poprzedni utwór"</string>
<string name="next_description">"Następny utwór"</string>
<string name="pause_description">"Wstrzymaj"</string>
<string name="play_description">"Odtwórz"</string>
<string name="stop_description">"Zatrzymaj"</string>
<string name="rew_description">"Przewiń do tyłu"</string>
<string name="ffw_description">"Przewiń do przodu"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Faixa anterior"</string>
<string name="next_description">"Próxima faixa"</string>
<string name="pause_description">"Pausar"</string>
<string name="play_description">"Reproduzir"</string>
<string name="stop_description">"Parar"</string>
<string name="rew_description">"Retroceder"</string>
<string name="ffw_description">"Avançar"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Faixa anterior"</string>
<string name="next_description">"Faixa seguinte"</string>
<string name="pause_description">"Interromper"</string>
<string name="play_description">"Reproduzir"</string>
<string name="stop_description">"Parar"</string>
<string name="rew_description">"Rebobinar"</string>
<string name="ffw_description">"Avançar"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Faixa anterior"</string>
<string name="next_description">"Próxima faixa"</string>
<string name="pause_description">"Pausar"</string>
<string name="play_description">"Reproduzir"</string>
<string name="stop_description">"Parar"</string>
<string name="rew_description">"Retroceder"</string>
<string name="ffw_description">"Avançar"</string>
</resources>
<?xml version="1.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.
-->
<resources>
<string name="prev_description">"Melodia anterioară"</string>
<string name="next_description">"Melodia următoare"</string>
<string name="pause_description">"Pauză"</string>
<string name="play_description">"Redați"</string>
<string name="stop_description">"Opriți"</string>
<string name="rew_description">"Derulați"</string>
<string name="ffw_description">"Derulați rapid înainte"</string>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment