Add support for playing spherical videos on Daydream

RELNOTES=true

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=219119888
This commit is contained in:
eguven 2018-10-29 06:43:56 -07:00 committed by Oliver Woodman
parent 194d0f3331
commit 5de17b9adc
94 changed files with 1101 additions and 89 deletions

View File

@ -32,6 +32,7 @@
* IMA extension: * IMA extension:
* For preroll to live stream transitions, project forward the loading position * For preroll to live stream transitions, project forward the loading position
to avoid being behind the live window. to avoid being behind the live window.
* Support for playing spherical videos on Daydream.
* Fix issue where a `NullPointerException` is thrown when removing an unprepared * Fix issue where a `NullPointerException` is thrown when removing an unprepared
media source from a `ConcatenatingMediaSource` with the `useLazyPreparation` media source from a `ConcatenatingMediaSource` with the `useLazyPreparation`
option enabled ([#4986](https://github.com/google/ExoPlayer/issues/4986)). option enabled ([#4986](https://github.com/google/ExoPlayer/issues/4986)).

View File

@ -31,8 +31,12 @@ android {
dependencies { dependencies {
implementation project(modulePrefix + 'library-core') implementation project(modulePrefix + 'library-core')
implementation project(modulePrefix + 'library-ui')
implementation 'com.android.support:support-annotations:' + supportLibraryVersion implementation 'com.android.support:support-annotations:' + supportLibraryVersion
implementation 'com.google.vr:sdk-audio:1.80.0' implementation 'com.google.vr:sdk-audio:1.80.0'
implementation 'com.google.vr:sdk-controller:1.80.0'
api 'com.google.vr:sdk-base:1.80.0'
compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion
} }
ext { ext {

View File

@ -0,0 +1,354 @@
/*
* Copyright (C) 2018 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.spherical;
import android.content.Context;
import android.content.Intent;
import android.graphics.SurfaceTexture;
import android.opengl.Matrix;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.BinderThread;
import android.support.annotation.CallSuper;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.view.ContextThemeWrapper;
import android.view.MotionEvent;
import android.view.Surface;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.ext.gvr.R;
import com.google.android.exoplayer2.ui.PlayerControlView;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Util;
import com.google.vr.ndk.base.DaydreamApi;
import com.google.vr.sdk.base.AndroidCompat;
import com.google.vr.sdk.base.Eye;
import com.google.vr.sdk.base.GvrActivity;
import com.google.vr.sdk.base.GvrView;
import com.google.vr.sdk.base.HeadTransform;
import com.google.vr.sdk.base.Viewport;
import com.google.vr.sdk.controller.Controller;
import com.google.vr.sdk.controller.ControllerManager;
import javax.microedition.khronos.egl.EGLConfig;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/** VR 360 video player base activity class. */
public abstract class BaseGvrPlayerActivity extends GvrActivity {
private static final String TAG = "GvrPlayerActivity";
private static final int EXIT_FROM_VR_REQUEST_CODE = 42;
private final Handler mainHandler;
@Nullable private Player player;
@MonotonicNonNull private GlViewGroup glView;
@MonotonicNonNull private ControllerManager controllerManager;
@MonotonicNonNull private SurfaceTexture surfaceTexture;
@MonotonicNonNull private Surface surface;
@MonotonicNonNull private SceneRenderer scene;
@MonotonicNonNull private PlayerControlView playerControl;
public BaseGvrPlayerActivity() {
mainHandler = new Handler(Looper.getMainLooper());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setScreenAlwaysOn(true);
GvrView gvrView = new GvrView(this);
// Since videos typically have fewer pixels per degree than the phones, reducing the render
// target scaling factor reduces the work required to render the scene.
gvrView.setRenderTargetScale(.5f);
// If a custom theme isn't specified, the Context's theme is used. For VR Activities, this is
// the old Android default theme rather than a modern theme. Override this with a custom theme.
Context theme = new ContextThemeWrapper(this, R.style.VrTheme);
glView = new GlViewGroup(theme, R.layout.vr_ui);
playerControl = Assertions.checkNotNull(glView.findViewById(R.id.controller));
playerControl.setShowVrButton(true);
playerControl.setVrButtonListener(v -> exit());
PointerRenderer pointerRenderer = new PointerRenderer();
scene = new SceneRenderer();
Renderer renderer = new Renderer(scene, glView, pointerRenderer);
// Attach glView to gvrView in order to properly handle UI events.
gvrView.addView(glView, 0);
// Standard GvrView configuration
gvrView.setEGLConfigChooser(
8, 8, 8, 8, // RGBA bits.
16, // Depth bits.
0); // Stencil bits.
gvrView.setRenderer(renderer);
setContentView(gvrView);
// Most Daydream phones can render a 4k video at 60fps in sustained performance mode. These
// options can be tweaked along with the render target scale.
if (gvrView.setAsyncReprojectionEnabled(true)) {
AndroidCompat.setSustainedPerformanceMode(this, true);
}
// Handle the user clicking on the 'X' in the top left corner. Since this is done when the user
// has taken the headset out of VR, it should launch the app's exit flow directly rather than
// using the transition flow.
gvrView.setOnCloseButtonListener(this::finish);
ControllerManager.EventListener listener =
new ControllerManager.EventListener() {
@Override
public void onApiStatusChanged(int status) {
// Do nothing.
}
@Override
public void onRecentered() {
// TODO if in cardboard mode call gvrView.recenterHeadTracker();
glView.post(() -> Util.castNonNull(playerControl).show());
}
};
controllerManager = new ControllerManager(this, listener);
Controller controller = controllerManager.getController();
ControllerEventListener controllerEventListener =
new ControllerEventListener(controller, pointerRenderer, glView);
controller.setEventListener(controllerEventListener);
}
/**
* Sets the {@link Player} to use.
*
* @param newPlayer The {@link Player} to use, or {@code null} to detach the current player.
*/
protected void setPlayer(@Nullable Player newPlayer) {
Assertions.checkNotNull(scene);
if (player == newPlayer) {
return;
}
if (player != null) {
Player.VideoComponent videoComponent = player.getVideoComponent();
if (videoComponent != null) {
if (surface != null) {
videoComponent.clearVideoSurface(surface);
}
videoComponent.clearVideoFrameMetadataListener(scene);
videoComponent.clearCameraMotionListener(scene);
}
}
player = newPlayer;
if (player != null) {
Player.VideoComponent videoComponent = player.getVideoComponent();
if (videoComponent != null) {
videoComponent.setVideoFrameMetadataListener(scene);
videoComponent.setCameraMotionListener(scene);
videoComponent.setVideoSurface(surface);
}
}
Assertions.checkNotNull(playerControl).setPlayer(player);
}
/**
* Sets the default stereo mode. If the played video doesn't contain a stereo mode the default one
* is used.
*
* @param stereoMode A {@link C.StereoMode} value.
*/
protected void setDefaultStereoMode(@C.StereoMode int stereoMode) {
Assertions.checkNotNull(scene).setDefaultStereoMode(stereoMode);
}
@CallSuper
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent unused) {
if (requestCode == EXIT_FROM_VR_REQUEST_CODE && resultCode == RESULT_OK) {
finish();
}
}
@Override
protected void onResume() {
super.onResume();
Util.castNonNull(controllerManager).start();
}
@Override
protected void onPause() {
Util.castNonNull(controllerManager).stop();
super.onPause();
}
@Override
protected void onDestroy() {
setPlayer(null);
releaseSurface(surfaceTexture, surface);
super.onDestroy();
}
/** Tries to exit gracefully from VR using a VR transition dialog. */
@SuppressWarnings("nullness:argument.type.incompatible")
protected void exit() {
// This needs to use GVR's exit transition to avoid disorienting the user.
DaydreamApi api = DaydreamApi.create(this);
if (api != null) {
api.exitFromVr(this, EXIT_FROM_VR_REQUEST_CODE, null);
// Eventually, the Activity's onActivityResult will be called.
api.close();
} else {
finish();
}
}
/** Toggles PlayerControl visibility. */
@UiThread
protected void togglePlayerControlVisibility() {
if (Assertions.checkNotNull(playerControl).isVisible()) {
playerControl.hide();
} else {
playerControl.show();
}
}
// Called on GL thread.
private void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture) {
mainHandler.post(
() -> {
SurfaceTexture oldSurfaceTexture = this.surfaceTexture;
Surface oldSurface = this.surface;
this.surfaceTexture = surfaceTexture;
this.surface = new Surface(surfaceTexture);
if (player != null) {
Player.VideoComponent videoComponent = player.getVideoComponent();
if (videoComponent != null) {
videoComponent.setVideoSurface(surface);
}
}
releaseSurface(oldSurfaceTexture, oldSurface);
});
}
private static void releaseSurface(
@Nullable SurfaceTexture oldSurfaceTexture, @Nullable Surface oldSurface) {
if (oldSurfaceTexture != null) {
oldSurfaceTexture.release();
}
if (oldSurface != null) {
oldSurface.release();
}
}
private class Renderer implements GvrView.StereoRenderer {
private static final float Z_NEAR = .1f;
private static final float Z_FAR = 100;
private final float[] viewProjectionMatrix = new float[16];
private final SceneRenderer scene;
private final GlViewGroup glView;
private final PointerRenderer pointerRenderer;
public Renderer(SceneRenderer scene, GlViewGroup glView, PointerRenderer pointerRenderer) {
this.scene = scene;
this.glView = glView;
this.pointerRenderer = pointerRenderer;
}
@Override
public void onNewFrame(HeadTransform headTransform) {}
@Override
public void onDrawEye(Eye eye) {
Matrix.multiplyMM(
viewProjectionMatrix, 0, eye.getPerspective(Z_NEAR, Z_FAR), 0, eye.getEyeView(), 0);
scene.drawFrame(viewProjectionMatrix, eye.getType() == Eye.Type.RIGHT);
if (glView.isVisible()) {
glView.getRenderer().draw(viewProjectionMatrix);
pointerRenderer.draw(viewProjectionMatrix);
}
}
@Override
public void onFinishFrame(Viewport viewport) {}
@Override
public void onSurfaceCreated(EGLConfig config) {
onSurfaceTextureAvailable(scene.init());
glView.getRenderer().init();
pointerRenderer.init();
}
@Override
public void onSurfaceChanged(int width, int height) {}
@Override
public void onRendererShutdown() {
glView.getRenderer().shutdown();
pointerRenderer.shutdown();
scene.shutdown();
}
}
private class ControllerEventListener extends Controller.EventListener {
private final Controller controller;
private final PointerRenderer pointerRenderer;
private final GlViewGroup glView;
private final float[] controllerOrientationMatrix;
private boolean clickButtonDown;
private boolean appButtonDown;
public ControllerEventListener(
Controller controller, PointerRenderer pointerRenderer, GlViewGroup glView) {
this.controller = controller;
this.pointerRenderer = pointerRenderer;
this.glView = glView;
controllerOrientationMatrix = new float[16];
}
@Override
@BinderThread
public void onUpdate() {
controller.update();
controller.orientation.toRotationMatrix(controllerOrientationMatrix);
pointerRenderer.setControllerOrientation(controllerOrientationMatrix);
if (clickButtonDown || controller.clickButtonState) {
int action;
if (clickButtonDown != controller.clickButtonState) {
clickButtonDown = controller.clickButtonState;
action = clickButtonDown ? MotionEvent.ACTION_DOWN : MotionEvent.ACTION_UP;
} else {
action = MotionEvent.ACTION_MOVE;
}
glView.post(
() -> {
float[] angles = controller.orientation.toYawPitchRollRadians(new float[3]);
boolean clickedOnView = glView.simulateClick(action, angles[0], angles[1]);
if (action == MotionEvent.ACTION_DOWN && !clickedOnView) {
togglePlayerControlVisibility();
}
});
} else if (!appButtonDown && controller.appButtonState) {
glView.post(BaseGvrPlayerActivity.this::togglePlayerControlVisibility);
}
appButtonDown = controller.appButtonState;
}
}
}

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2018 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.
-->
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/video_ui_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000"
android:orientation="horizontal">
<com.google.android.exoplayer2.ui.PlayerControlView
android:id="@+id/controller"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</merge>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2018 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.
-->
<!-- Android Views rendered in VR should use a theme that matches the rest of the VR UI.-->
<resources>
<style name="VrTheme" parent="android:Theme.Material"/>
</resources>

View File

@ -136,6 +136,10 @@ import java.util.Locale;
* <ul> * <ul>
* <li>Type: {@link View} * <li>Type: {@link View}
* </ul> * </ul>
* <li><b>{@code exo_vr}</b> - The VR mode button.
* <ul>
* <li>Type: {@link View}
* </ul>
* <li><b>{@code exo_position}</b> - Text view displaying the current playback position. * <li><b>{@code exo_position}</b> - Text view displaying the current playback position.
* <ul> * <ul>
* <li>Type: {@link TextView} * <li>Type: {@link TextView}
@ -202,6 +206,7 @@ public class PlayerControlView extends FrameLayout {
private final View rewindButton; private final View rewindButton;
private final ImageView repeatToggleButton; private final ImageView repeatToggleButton;
private final View shuffleButton; private final View shuffleButton;
private final View vrButton;
private final TextView durationView; private final TextView durationView;
private final TextView positionView; private final TextView positionView;
private final TimeBar timeBar; private final TimeBar timeBar;
@ -334,6 +339,8 @@ public class PlayerControlView extends FrameLayout {
if (shuffleButton != null) { if (shuffleButton != null) {
shuffleButton.setOnClickListener(componentListener); shuffleButton.setOnClickListener(componentListener);
} }
vrButton = findViewById(R.id.exo_vr);
setShowVrButton(false);
Resources resources = context.getResources(); Resources resources = context.getResources();
repeatOffButtonDrawable = resources.getDrawable(R.drawable.exo_controls_repeat_off); repeatOffButtonDrawable = resources.getDrawable(R.drawable.exo_controls_repeat_off);
repeatOneButtonDrawable = resources.getDrawable(R.drawable.exo_controls_repeat_one); repeatOneButtonDrawable = resources.getDrawable(R.drawable.exo_controls_repeat_one);
@ -546,6 +553,33 @@ public class PlayerControlView extends FrameLayout {
updateShuffleButton(); updateShuffleButton();
} }
/** Returns whether the VR button is shown. */
public boolean getShowVrButton() {
return vrButton != null && vrButton.getVisibility() == VISIBLE;
}
/**
* Sets whether the VR button is shown.
*
* @param showVrButton Whether the VR button is shown.
*/
public void setShowVrButton(boolean showVrButton) {
if (vrButton != null) {
vrButton.setVisibility(showVrButton ? VISIBLE : GONE);
}
}
/**
* Sets listener for the VR button.
*
* @param onClickListener Listener for the VR button, or null to clear the listener.
*/
public void setVrButtonListener(@Nullable OnClickListener onClickListener) {
if (vrButton != null) {
vrButton.setOnClickListener(onClickListener);
}
}
/** /**
* Shows the playback controls. If {@link #getShowTimeoutMs()} is positive then the controls will * Shows the playback controls. If {@link #getShowTimeoutMs()} is positive then the controls will
* be automatically hidden after this duration of time has elapsed without user input. * be automatically hidden after this duration of time has elapsed without user input.
@ -609,11 +643,11 @@ public class PlayerControlView extends FrameLayout {
boolean playing = isPlaying(); boolean playing = isPlaying();
if (playButton != null) { if (playButton != null) {
requestPlayPauseFocus |= playing && playButton.isFocused(); requestPlayPauseFocus |= playing && playButton.isFocused();
playButton.setVisibility(playing ? View.GONE : View.VISIBLE); playButton.setVisibility(playing ? GONE : VISIBLE);
} }
if (pauseButton != null) { if (pauseButton != null) {
requestPlayPauseFocus |= !playing && pauseButton.isFocused(); requestPlayPauseFocus |= !playing && pauseButton.isFocused();
pauseButton.setVisibility(!playing ? View.GONE : View.VISIBLE); pauseButton.setVisibility(!playing ? GONE : VISIBLE);
} }
if (requestPlayPauseFocus) { if (requestPlayPauseFocus) {
requestPlayPauseFocus(); requestPlayPauseFocus();
@ -651,7 +685,7 @@ public class PlayerControlView extends FrameLayout {
return; return;
} }
if (repeatToggleModes == RepeatModeUtil.REPEAT_TOGGLE_MODE_NONE) { if (repeatToggleModes == RepeatModeUtil.REPEAT_TOGGLE_MODE_NONE) {
repeatToggleButton.setVisibility(View.GONE); repeatToggleButton.setVisibility(GONE);
return; return;
} }
if (player == null) { if (player == null) {
@ -675,7 +709,7 @@ public class PlayerControlView extends FrameLayout {
default: default:
// Never happens. // Never happens.
} }
repeatToggleButton.setVisibility(View.VISIBLE); repeatToggleButton.setVisibility(VISIBLE);
} }
private void updateShuffleButton() { private void updateShuffleButton() {
@ -683,13 +717,13 @@ public class PlayerControlView extends FrameLayout {
return; return;
} }
if (!showShuffleButton) { if (!showShuffleButton) {
shuffleButton.setVisibility(View.GONE); shuffleButton.setVisibility(GONE);
} else if (player == null) { } else if (player == null) {
setButtonEnabled(false, shuffleButton); setButtonEnabled(false, shuffleButton);
} else { } else {
shuffleButton.setAlpha(player.getShuffleModeEnabled() ? 1f : 0.3f); shuffleButton.setAlpha(player.getShuffleModeEnabled() ? 1f : 0.3f);
shuffleButton.setEnabled(true); shuffleButton.setEnabled(true);
shuffleButton.setVisibility(View.VISIBLE); shuffleButton.setVisibility(VISIBLE);
} }
} }

View File

@ -0,0 +1,297 @@
/*
* Copyright (C) 2018 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.spherical;
import static com.google.android.exoplayer2.util.GlUtil.checkGlError;
import android.annotation.TargetApi;
import android.graphics.Canvas;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
import android.opengl.GLES11Ext;
import android.opengl.GLES20;
import android.support.annotation.Nullable;
import android.view.Surface;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.util.GlUtil;
import java.nio.FloatBuffer;
import java.util.concurrent.atomic.AtomicBoolean;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/**
* Renders a canvas on a quad.
*
* <p>A CanvasRenderer can be created on any thread, but {@link #init()} needs to be called on the
* GL thread before it can be rendered.
*/
@TargetApi(15)
/* package */ final class CanvasRenderer {
private static final float WIDTH_UNIT = 0.8f;
private static final float DISTANCE_UNIT = 1f;
private static final float X_UNIT = -WIDTH_UNIT / 2;
private static final float Y_UNIT = -0.3f;
// Standard vertex shader that passes through the texture data.
private static final String[] VERTEX_SHADER_CODE = {
"uniform mat4 uMvpMatrix;",
// 3D position data.
"attribute vec3 aPosition;",
// 2D UV vertices.
"attribute vec2 aTexCoords;",
"varying vec2 vTexCoords;",
// Standard transformation.
"void main() {",
" gl_Position = uMvpMatrix * vec4(aPosition, 1);",
" vTexCoords = aTexCoords;",
"}"
};
private static final String[] FRAGMENT_SHADER_CODE = {
// This is required since the texture data is GL_TEXTURE_EXTERNAL_OES.
"#extension GL_OES_EGL_image_external : require",
"precision mediump float;",
"uniform samplerExternalOES uTexture;",
"varying vec2 vTexCoords;",
"void main() {",
" gl_FragColor = texture2D(uTexture, vTexCoords);",
"}"
};
// The quad has 2 triangles built from 4 total vertices. Each vertex has 3 position & 2 texture
// coordinates.
private static final int POSITION_COORDS_PER_VERTEX = 3;
private static final int TEXTURE_COORDS_PER_VERTEX = 2;
private static final int COORDS_PER_VERTEX =
POSITION_COORDS_PER_VERTEX + TEXTURE_COORDS_PER_VERTEX;
private static final int VERTEX_STRIDE_BYTES = COORDS_PER_VERTEX * C.BYTES_PER_FLOAT;
private static final int VERTEX_COUNT = 4;
private static final float HALF_PI = (float) (Math.PI / 2);
private final FloatBuffer vertexBuffer;
private final AtomicBoolean surfaceDirty;
private int width;
private int height;
private float heightUnit;
// Program-related GL items. These are only valid if program != 0.
private int program = 0;
private int mvpMatrixHandle;
private int positionHandle;
private int textureCoordsHandle;
private int textureHandle;
private int textureId;
// Components used to manage the Canvas that the View is rendered to. These are only valid after
// GL initialization. The client of this class acquires a Canvas from the Surface, writes to it
// and posts it. This marks the Surface as dirty. The GL code then updates the SurfaceTexture
// when rendering only if it is dirty.
@MonotonicNonNull private SurfaceTexture displaySurfaceTexture;
@MonotonicNonNull private Surface displaySurface;
public CanvasRenderer() {
vertexBuffer = GlUtil.createBuffer(COORDS_PER_VERTEX * VERTEX_COUNT);
surfaceDirty = new AtomicBoolean();
}
public void setSize(int width, int height) {
this.width = width;
this.height = height;
heightUnit = WIDTH_UNIT * height / width;
float[] vertexData = new float[COORDS_PER_VERTEX * VERTEX_COUNT];
int vertexDataIndex = 0;
for (int y = 0; y < 2; y++) {
for (int x = 0; x < 2; x++) {
vertexData[vertexDataIndex++] = X_UNIT + (WIDTH_UNIT * x);
vertexData[vertexDataIndex++] = Y_UNIT + (heightUnit * y);
vertexData[vertexDataIndex++] = -DISTANCE_UNIT;
vertexData[vertexDataIndex++] = x;
vertexData[vertexDataIndex++] = 1 - y;
}
}
vertexBuffer.position(0);
vertexBuffer.put(vertexData);
}
/**
* Calls {@link Surface#lockCanvas(Rect)}.
*
* @return {@link Canvas} for the View to render to or {@code null} if {@link #init()} has not yet
* been called.
*/
@Nullable
public Canvas lockCanvas() {
return displaySurface == null ? null : displaySurface.lockCanvas(/* inOutDirty= */ null);
}
/**
* Calls {@link Surface#unlockCanvasAndPost(Canvas)} and marks the SurfaceTexture as dirty.
*
* @param canvas the canvas returned from {@link #lockCanvas()}
*/
public void unlockCanvasAndPost(@Nullable Canvas canvas) {
if (canvas == null || displaySurface == null) {
// glInit() hasn't run yet.
return;
}
displaySurface.unlockCanvasAndPost(canvas);
}
/** Finishes constructing this object on the GL Thread. */
/* package */ void init() {
if (program != 0) {
return;
}
// Create the program.
program = GlUtil.compileProgram(VERTEX_SHADER_CODE, FRAGMENT_SHADER_CODE);
mvpMatrixHandle = GLES20.glGetUniformLocation(program, "uMvpMatrix");
positionHandle = GLES20.glGetAttribLocation(program, "aPosition");
textureCoordsHandle = GLES20.glGetAttribLocation(program, "aTexCoords");
textureHandle = GLES20.glGetUniformLocation(program, "uTexture");
textureId = GlUtil.createExternalTexture();
checkGlError();
// Create the underlying SurfaceTexture with the appropriate size.
displaySurfaceTexture = new SurfaceTexture(textureId);
displaySurfaceTexture.setOnFrameAvailableListener(surfaceTexture -> surfaceDirty.set(true));
displaySurfaceTexture.setDefaultBufferSize(width, height);
displaySurface = new Surface(displaySurfaceTexture);
}
/**
* Renders the quad.
*
* @param viewProjectionMatrix Array of floats containing the quad's 4x4 perspective matrix in the
* {@link android.opengl.Matrix} format.
*/
/* package */ void draw(float[] viewProjectionMatrix) {
if (displaySurfaceTexture == null) {
return;
}
GLES20.glUseProgram(program);
checkGlError();
GLES20.glEnableVertexAttribArray(positionHandle);
GLES20.glEnableVertexAttribArray(textureCoordsHandle);
checkGlError();
GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false, viewProjectionMatrix, 0);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureId);
GLES20.glUniform1i(textureHandle, 0);
checkGlError();
// Load position data.
vertexBuffer.position(0);
GLES20.glVertexAttribPointer(
positionHandle,
POSITION_COORDS_PER_VERTEX,
GLES20.GL_FLOAT,
false,
VERTEX_STRIDE_BYTES,
vertexBuffer);
checkGlError();
// Load texture data.
vertexBuffer.position(POSITION_COORDS_PER_VERTEX);
GLES20.glVertexAttribPointer(
textureCoordsHandle,
TEXTURE_COORDS_PER_VERTEX,
GLES20.GL_FLOAT,
false,
VERTEX_STRIDE_BYTES,
vertexBuffer);
checkGlError();
if (surfaceDirty.compareAndSet(true, false)) {
// If the Surface has been written to, get the new data onto the SurfaceTexture.
displaySurfaceTexture.updateTexImage();
}
// Render.
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, VERTEX_COUNT);
checkGlError();
GLES20.glDisableVertexAttribArray(positionHandle);
GLES20.glDisableVertexAttribArray(textureCoordsHandle);
}
/** Frees GL resources. */
/* package */ void shutdown() {
if (program != 0) {
GLES20.glDeleteProgram(program);
GLES20.glDeleteTextures(1, new int[] {textureId}, 0);
}
if (displaySurfaceTexture != null) {
displaySurfaceTexture.release();
}
if (displaySurface != null) {
displaySurface.release();
}
}
/**
* Translates an orientation into pixel coordinates on the canvas.
*
* <p>This is a minimal hit detection system that works for this quad because it has no model
* matrix. All the math is based on the fact that its size & distance are hard-coded into this
* class. For a more complex 3D mesh, a general bounding box & ray collision system would be
* required.
*
* @param yaw Yaw of the orientation in radians.
* @param pitch Pitch of the orientation in radians.
* @return A {@link PointF} which contains the translated coordinate, or null if the point is
* outside of the quad's bounds.
*/
@Nullable
public PointF translateClick(float yaw, float pitch) {
return internalTranslateClick(
yaw, pitch, X_UNIT, Y_UNIT, WIDTH_UNIT, heightUnit, width, height);
}
@Nullable
/*package*/ static PointF internalTranslateClick(
float yaw,
float pitch,
float xUnit,
float yUnit,
float widthUnit,
float heightUnit,
int widthPixel,
int heightPixel) {
if (yaw >= HALF_PI || yaw <= -HALF_PI || pitch >= HALF_PI || pitch <= -HALF_PI) {
return null;
}
double clickXUnit = Math.tan(yaw) * DISTANCE_UNIT - xUnit;
double clickYUnit = Math.tan(pitch) * DISTANCE_UNIT - yUnit;
if (clickXUnit < 0 || clickXUnit > widthUnit || clickYUnit < 0 || clickYUnit > heightUnit) {
return null;
}
// Convert from the polar coordinates of the controller to the rectangular coordinates of the
// View. Note the negative yaw & pitch used to generate Android-compliant x & y coordinates.
float clickXPixel = (float) (widthPixel - clickXUnit * widthPixel / widthUnit);
float clickYPixel = (float) (heightPixel - clickYUnit * heightPixel / heightUnit);
return new PointF(clickXPixel, clickYPixel);
}
}

View File

@ -0,0 +1,115 @@
/*
* Copyright (C) 2018 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.spherical;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PointF;
import android.graphics.PorterDuff;
import android.os.SystemClock;
import android.support.annotation.AnyThread;
import android.support.annotation.UiThread;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.google.android.exoplayer2.util.Assertions;
/** This View uses standard Android APIs to render its child Views to a texture. */
/* package */ final class GlViewGroup extends FrameLayout {
private final CanvasRenderer canvasRenderer;
/**
* @param context The Context the view is running in, through which it can access the current
* theme, resources, etc.
* @param layoutId ID for an XML layout resource to load (e.g., * <code>R.layout.main_page</code>)
*/
public GlViewGroup(Context context, int layoutId) {
super(context);
this.canvasRenderer = new CanvasRenderer();
LayoutInflater.from(context).inflate(layoutId, this);
measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
int width = getMeasuredWidth();
int height = getMeasuredHeight();
Assertions.checkState(width > 0 && height > 0);
canvasRenderer.setSize(width, height);
setLayoutParams(new FrameLayout.LayoutParams(width, height));
}
/** Returns whether the view is currently visible. */
@UiThread
public boolean isVisible() {
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
if (getChildAt(i).getVisibility() == VISIBLE) {
return true;
}
}
return false;
}
@Override
public void dispatchDraw(Canvas notUsed) {
Canvas glCanvas = canvasRenderer.lockCanvas();
if (glCanvas == null) {
// This happens if Android tries to draw this View before GL initialization completes. We need
// to retry until the draw call happens after GL invalidation.
postInvalidate();
return;
}
// Clear the canvas first.
glCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
// Have Android render the child views.
super.dispatchDraw(glCanvas);
// Commit the changes.
canvasRenderer.unlockCanvasAndPost(glCanvas);
}
/**
* Simulates a click on the view.
*
* @param action Click action.
* @param yaw Yaw of the click's orientation in radians.
* @param pitch Pitch of the click's orientation in radians.
* @return Whether the click was simulated. If false then the view is not visible or the click was
* outside of its bounds.
*/
@UiThread
public boolean simulateClick(int action, float yaw, float pitch) {
if (!isVisible()) {
return false;
}
PointF point = canvasRenderer.translateClick(yaw, pitch);
if (point == null) {
return false;
}
long now = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(now, now, action, point.x, point.y, /* metaState= */ 1);
dispatchTouchEvent(event);
return true;
}
@AnyThread
public CanvasRenderer getRenderer() {
return canvasRenderer;
}
}

View File

@ -0,0 +1,146 @@
/*
* Copyright (C) 2018 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.spherical;
import static com.google.android.exoplayer2.util.GlUtil.checkGlError;
import android.opengl.GLES20;
import android.opengl.Matrix;
import com.google.android.exoplayer2.util.GlUtil;
import java.nio.FloatBuffer;
/** Renders a pointer. */
/* package */ final class PointerRenderer {
// The pointer quad is 2 * SIZE units.
private static final float SIZE = .01f;
private static final float DISTANCE = 1;
// Standard vertex shader.
private static final String[] VERTEX_SHADER_CODE =
new String[] {
"uniform mat4 uMvpMatrix;",
"attribute vec3 aPosition;",
"varying vec2 vCoords;",
// Pass through normalized vertex coordinates.
"void main() {",
" gl_Position = uMvpMatrix * vec4(aPosition, 1);",
" vCoords = aPosition.xy / vec2(" + SIZE + ", " + SIZE + ");",
"}"
};
// Procedurally render a ring on the quad between the specified radii.
private static final String[] FRAGMENT_SHADER_CODE =
new String[] {
"precision mediump float;",
"varying vec2 vCoords;",
// Simple ring shader that is white between the radii and transparent elsewhere.
"void main() {",
" float r = length(vCoords);",
// Blend the edges of the ring at .55 +/- .05 and .85 +/- .05.
" float alpha = smoothstep(0.5, 0.6, r) * (1.0 - smoothstep(0.8, 0.9, r));",
" if (alpha == 0.0) {",
" discard;",
" } else {",
" gl_FragColor = vec4(alpha);",
" }",
"}"
};
// Simple quad mesh.
private static final int COORDS_PER_VERTEX = 3;
private static final float[] VERTEX_DATA = {
-SIZE, -SIZE, -DISTANCE, SIZE, -SIZE, -DISTANCE, -SIZE, SIZE, -DISTANCE, SIZE, SIZE, -DISTANCE,
};
private final FloatBuffer vertexBuffer;
// The pointer doesn't have a real modelMatrix. Its distance is baked into the mesh and it
// uses a rotation matrix when rendered.
private final float[] modelViewProjectionMatrix;
// This is accessed on the binder & GL Threads.
private final float[] controllerOrientationMatrix;
// Program-related GL items. These are only valid if program != 0.
private int program = 0;
private int mvpMatrixHandle;
private int positionHandle;
public PointerRenderer() {
vertexBuffer = GlUtil.createBuffer(VERTEX_DATA);
modelViewProjectionMatrix = new float[16];
controllerOrientationMatrix = new float[16];
Matrix.setIdentityM(controllerOrientationMatrix, 0);
}
/** Finishes initialization of this object on the GL thread. */
public void init() {
if (program != 0) {
return;
}
program = GlUtil.compileProgram(VERTEX_SHADER_CODE, FRAGMENT_SHADER_CODE);
mvpMatrixHandle = GLES20.glGetUniformLocation(program, "uMvpMatrix");
positionHandle = GLES20.glGetAttribLocation(program, "aPosition");
checkGlError();
}
/**
* Renders the pointer.
*
* @param viewProjectionMatrix Scene's view projection matrix.
*/
public void draw(float[] viewProjectionMatrix) {
// Configure shader.
GLES20.glUseProgram(program);
checkGlError();
synchronized (controllerOrientationMatrix) {
Matrix.multiplyMM(
modelViewProjectionMatrix, 0, viewProjectionMatrix, 0, controllerOrientationMatrix, 0);
}
GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false, modelViewProjectionMatrix, 0);
checkGlError();
// Render quad.
GLES20.glEnableVertexAttribArray(positionHandle);
checkGlError();
GLES20.glVertexAttribPointer(
positionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, /* stride= */ 0, vertexBuffer);
checkGlError();
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, VERTEX_DATA.length / COORDS_PER_VERTEX);
checkGlError();
GLES20.glDisableVertexAttribArray(positionHandle);
}
/** Frees GL resources. */
public void shutdown() {
if (program != 0) {
GLES20.glDeleteProgram(program);
}
}
/** Updates the pointer's position with the latest Controller pose. */
public void setControllerOrientation(float[] rotationMatrix) {
synchronized (controllerOrientationMatrix) {
System.arraycopy(rotationMatrix, 0, controllerOrientationMatrix, 0, rotationMatrix.length);
}
}
}

View File

@ -36,7 +36,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/** Renders a GL Scene. */ /** Renders a GL Scene. */
/* package */ class SceneRenderer implements VideoFrameMetadataListener, CameraMotionListener { /* package */ final class SceneRenderer
implements VideoFrameMetadataListener, CameraMotionListener {
private final AtomicBoolean frameAvailable; private final AtomicBoolean frameAvailable;
private final AtomicBoolean resetRotationAtNextFrame; private final AtomicBoolean resetRotationAtNextFrame;
@ -131,6 +132,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
projectionRenderer.draw(textureId, tempMatrix, rightEye); projectionRenderer.draw(textureId, tempMatrix, rightEye);
} }
/** Cleans up the GL resources. */
public void shutdown() {
projectionRenderer.shutdown();
}
// Methods called on playback thread. // Methods called on playback thread.
// VideoFrameMetadataListener implementation. // VideoFrameMetadataListener implementation.

View File

@ -54,6 +54,9 @@
<ImageButton android:id="@id/exo_next" <ImageButton android:id="@id/exo_next"
style="@style/ExoMediaButton.Next"/> style="@style/ExoMediaButton.Next"/>
<ImageButton android:id="@id/exo_vr"
style="@style/ExoMediaButton.VR"/>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Herhaal alles</string> <string name="exo_controls_repeat_all_description">Herhaal alles</string>
<string name="exo_controls_shuffle_description">Skommel</string> <string name="exo_controls_shuffle_description">Skommel</string>
<string name="exo_controls_fullscreen_description">Volskermmodus</string> <string name="exo_controls_fullscreen_description">Volskermmodus</string>
<string name="exo_controls_exit_vr_description">Verlaat VR-modus</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Aflaai</string> <string name="exo_download_description">Aflaai</string>
<string name="exo_download_notification_channel_name">Aflaaie</string> <string name="exo_download_notification_channel_name">Aflaaie</string>
<string name="exo_download_downloading">Laai tans af</string> <string name="exo_download_downloading">Laai tans af</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">ሁሉንም ድገም</string> <string name="exo_controls_repeat_all_description">ሁሉንም ድገም</string>
<string name="exo_controls_shuffle_description">በውዝ</string> <string name="exo_controls_shuffle_description">በውዝ</string>
<string name="exo_controls_fullscreen_description">የሙሉ ማያ ሁነታ</string> <string name="exo_controls_fullscreen_description">የሙሉ ማያ ሁነታ</string>
<string name="exo_controls_exit_vr_description">ከቪአር ሁነታ ውጣ</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">አውርድ</string> <string name="exo_download_description">አውርድ</string>
<string name="exo_download_notification_channel_name">የወረዱ</string> <string name="exo_download_notification_channel_name">የወረዱ</string>
<string name="exo_download_downloading">በማውረድ ላይ</string> <string name="exo_download_downloading">በማውረድ ላይ</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">تكرار الكل</string> <string name="exo_controls_repeat_all_description">تكرار الكل</string>
<string name="exo_controls_shuffle_description">ترتيب عشوائي</string> <string name="exo_controls_shuffle_description">ترتيب عشوائي</string>
<string name="exo_controls_fullscreen_description">وضع ملء الشاشة</string> <string name="exo_controls_fullscreen_description">وضع ملء الشاشة</string>
<string name="exo_controls_exit_vr_description">الخروج من وضع VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">تنزيل</string> <string name="exo_download_description">تنزيل</string>
<string name="exo_download_notification_channel_name">التنزيلات</string> <string name="exo_download_notification_channel_name">التنزيلات</string>
<string name="exo_download_downloading">جارٍ التنزيل.</string> <string name="exo_download_downloading">جارٍ التنزيل.</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Hamısı təkrarlansın</string> <string name="exo_controls_repeat_all_description">Hamısı təkrarlansın</string>
<string name="exo_controls_shuffle_description">Qarışdırın</string> <string name="exo_controls_shuffle_description">Qarışdırın</string>
<string name="exo_controls_fullscreen_description">Tam ekran rejimi</string> <string name="exo_controls_fullscreen_description">Tam ekran rejimi</string>
<string name="exo_controls_exit_vr_description">VR rejimdən çıxın</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Endirin</string> <string name="exo_download_description">Endirin</string>
<string name="exo_download_notification_channel_name">Endirmələr</string> <string name="exo_download_notification_channel_name">Endirmələr</string>
<string name="exo_download_downloading">Endirilir</string> <string name="exo_download_downloading">Endirilir</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Ponovi sve</string> <string name="exo_controls_repeat_all_description">Ponovi sve</string>
<string name="exo_controls_shuffle_description">Pusti nasumično</string> <string name="exo_controls_shuffle_description">Pusti nasumično</string>
<string name="exo_controls_fullscreen_description">Režim celog ekrana</string> <string name="exo_controls_fullscreen_description">Režim celog ekrana</string>
<string name="exo_controls_exit_vr_description">Izađi iz VR režima</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Preuzmi</string> <string name="exo_download_description">Preuzmi</string>
<string name="exo_download_notification_channel_name">Preuzimanja</string> <string name="exo_download_notification_channel_name">Preuzimanja</string>
<string name="exo_download_downloading">Preuzima se</string> <string name="exo_download_downloading">Preuzima se</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Паўтарыць усе</string> <string name="exo_controls_repeat_all_description">Паўтарыць усе</string>
<string name="exo_controls_shuffle_description">Перамяшаць</string> <string name="exo_controls_shuffle_description">Перамяшаць</string>
<string name="exo_controls_fullscreen_description">Поўнаэкранны рэжым</string> <string name="exo_controls_fullscreen_description">Поўнаэкранны рэжым</string>
<string name="exo_controls_exit_vr_description">Выйсці з VR-рэжыму</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Спампаваць</string> <string name="exo_download_description">Спампаваць</string>
<string name="exo_download_notification_channel_name">Спампоўкі</string> <string name="exo_download_notification_channel_name">Спампоўкі</string>
<string name="exo_download_downloading">Спампоўваецца</string> <string name="exo_download_downloading">Спампоўваецца</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Повтаряне на всички</string> <string name="exo_controls_repeat_all_description">Повтаряне на всички</string>
<string name="exo_controls_shuffle_description">Разбъркване</string> <string name="exo_controls_shuffle_description">Разбъркване</string>
<string name="exo_controls_fullscreen_description">Режим на цял екран</string> <string name="exo_controls_fullscreen_description">Режим на цял екран</string>
<string name="exo_controls_exit_vr_description">Изход от режима за VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Изтегляне</string> <string name="exo_download_description">Изтегляне</string>
<string name="exo_download_notification_channel_name">Изтегляния</string> <string name="exo_download_notification_channel_name">Изтегляния</string>
<string name="exo_download_downloading">Изтегля се</string> <string name="exo_download_downloading">Изтегля се</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">সবগুলি আইটেম আবার চালান</string> <string name="exo_controls_repeat_all_description">সবগুলি আইটেম আবার চালান</string>
<string name="exo_controls_shuffle_description">শাফেল করুন</string> <string name="exo_controls_shuffle_description">শাফেল করুন</string>
<string name="exo_controls_fullscreen_description">পূর্ণ স্ক্রিন মোড</string> <string name="exo_controls_fullscreen_description">পূর্ণ স্ক্রিন মোড</string>
<string name="exo_controls_exit_vr_description">Exit VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ডাউনলোড করুন</string> <string name="exo_download_description">ডাউনলোড করুন</string>
<string name="exo_download_notification_channel_name">ডাউনলোড</string> <string name="exo_download_notification_channel_name">ডাউনলোড</string>
<string name="exo_download_downloading">ডাউনলোড হচ্ছে</string> <string name="exo_download_downloading">ডাউনলোড হচ্ছে</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Ponovi sve</string> <string name="exo_controls_repeat_all_description">Ponovi sve</string>
<string name="exo_controls_shuffle_description">Izmiješaj</string> <string name="exo_controls_shuffle_description">Izmiješaj</string>
<string name="exo_controls_fullscreen_description">Način rada preko cijelog ekrana</string> <string name="exo_controls_fullscreen_description">Način rada preko cijelog ekrana</string>
<string name="exo_controls_exit_vr_description">Izađi iz VR načina rada</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Preuzmi</string> <string name="exo_download_description">Preuzmi</string>
<string name="exo_download_notification_channel_name">Preuzimanja</string> <string name="exo_download_notification_channel_name">Preuzimanja</string>
<string name="exo_download_downloading">Preuzimanje</string> <string name="exo_download_downloading">Preuzimanje</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repeteix tot</string> <string name="exo_controls_repeat_all_description">Repeteix tot</string>
<string name="exo_controls_shuffle_description">Reprodueix aleatòriament</string> <string name="exo_controls_shuffle_description">Reprodueix aleatòriament</string>
<string name="exo_controls_fullscreen_description">Mode de pantalla completa</string> <string name="exo_controls_fullscreen_description">Mode de pantalla completa</string>
<string name="exo_controls_exit_vr_description">Surt del mode RV</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Baixa</string> <string name="exo_download_description">Baixa</string>
<string name="exo_download_notification_channel_name">Baixades</string> <string name="exo_download_notification_channel_name">Baixades</string>
<string name="exo_download_downloading">S\'està baixant</string> <string name="exo_download_downloading">S\'està baixant</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Opakovat vše</string> <string name="exo_controls_repeat_all_description">Opakovat vše</string>
<string name="exo_controls_shuffle_description">Náhodně</string> <string name="exo_controls_shuffle_description">Náhodně</string>
<string name="exo_controls_fullscreen_description">Režim celé obrazovky</string> <string name="exo_controls_fullscreen_description">Režim celé obrazovky</string>
<string name="exo_controls_exit_vr_description">Ukončit režim VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Stáhnout</string> <string name="exo_download_description">Stáhnout</string>
<string name="exo_download_notification_channel_name">Stahování</string> <string name="exo_download_notification_channel_name">Stahování</string>
<string name="exo_download_downloading">Stahování</string> <string name="exo_download_downloading">Stahování</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Gentag alle</string> <string name="exo_controls_repeat_all_description">Gentag alle</string>
<string name="exo_controls_shuffle_description">Bland</string> <string name="exo_controls_shuffle_description">Bland</string>
<string name="exo_controls_fullscreen_description">Fuld skærm</string> <string name="exo_controls_fullscreen_description">Fuld skærm</string>
<string name="exo_controls_exit_vr_description">Luk VR-tilstand</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Download</string> <string name="exo_download_description">Download</string>
<string name="exo_download_notification_channel_name">Downloads</string> <string name="exo_download_notification_channel_name">Downloads</string>
<string name="exo_download_downloading">Downloader</string> <string name="exo_download_downloading">Downloader</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Alle wiederholen</string> <string name="exo_controls_repeat_all_description">Alle wiederholen</string>
<string name="exo_controls_shuffle_description">Zufallsmix</string> <string name="exo_controls_shuffle_description">Zufallsmix</string>
<string name="exo_controls_fullscreen_description">Vollbildmodus</string> <string name="exo_controls_fullscreen_description">Vollbildmodus</string>
<string name="exo_controls_exit_vr_description">VR-Modus beenden</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Herunterladen</string> <string name="exo_download_description">Herunterladen</string>
<string name="exo_download_notification_channel_name">Downloads</string> <string name="exo_download_notification_channel_name">Downloads</string>
<string name="exo_download_downloading">Wird heruntergeladen</string> <string name="exo_download_downloading">Wird heruntergeladen</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Επανάληψη όλων</string> <string name="exo_controls_repeat_all_description">Επανάληψη όλων</string>
<string name="exo_controls_shuffle_description">Τυχαία αναπαραγωγή</string> <string name="exo_controls_shuffle_description">Τυχαία αναπαραγωγή</string>
<string name="exo_controls_fullscreen_description">Λειτουργία πλήρους οθόνης</string> <string name="exo_controls_fullscreen_description">Λειτουργία πλήρους οθόνης</string>
<string name="exo_controls_exit_vr_description">Έξοδος από λειτουργία VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Λήψη</string> <string name="exo_download_description">Λήψη</string>
<string name="exo_download_notification_channel_name">Λήψεις</string> <string name="exo_download_notification_channel_name">Λήψεις</string>
<string name="exo_download_downloading">Λήψη</string> <string name="exo_download_downloading">Λήψη</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repeat all</string> <string name="exo_controls_repeat_all_description">Repeat all</string>
<string name="exo_controls_shuffle_description">Shuffle</string> <string name="exo_controls_shuffle_description">Shuffle</string>
<string name="exo_controls_fullscreen_description">Full-screen mode</string> <string name="exo_controls_fullscreen_description">Full-screen mode</string>
<string name="exo_controls_exit_vr_description">Exit VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Download</string> <string name="exo_download_description">Download</string>
<string name="exo_download_notification_channel_name">Downloads</string> <string name="exo_download_notification_channel_name">Downloads</string>
<string name="exo_download_downloading">Downloading</string> <string name="exo_download_downloading">Downloading</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repeat all</string> <string name="exo_controls_repeat_all_description">Repeat all</string>
<string name="exo_controls_shuffle_description">Shuffle</string> <string name="exo_controls_shuffle_description">Shuffle</string>
<string name="exo_controls_fullscreen_description">Full-screen mode</string> <string name="exo_controls_fullscreen_description">Full-screen mode</string>
<string name="exo_controls_exit_vr_description">Exit VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Download</string> <string name="exo_download_description">Download</string>
<string name="exo_download_notification_channel_name">Downloads</string> <string name="exo_download_notification_channel_name">Downloads</string>
<string name="exo_download_downloading">Downloading</string> <string name="exo_download_downloading">Downloading</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repeat all</string> <string name="exo_controls_repeat_all_description">Repeat all</string>
<string name="exo_controls_shuffle_description">Shuffle</string> <string name="exo_controls_shuffle_description">Shuffle</string>
<string name="exo_controls_fullscreen_description">Full-screen mode</string> <string name="exo_controls_fullscreen_description">Full-screen mode</string>
<string name="exo_controls_exit_vr_description">Exit VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Download</string> <string name="exo_download_description">Download</string>
<string name="exo_download_notification_channel_name">Downloads</string> <string name="exo_download_notification_channel_name">Downloads</string>
<string name="exo_download_downloading">Downloading</string> <string name="exo_download_downloading">Downloading</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repetir todo</string> <string name="exo_controls_repeat_all_description">Repetir todo</string>
<string name="exo_controls_shuffle_description">Reproducir aleatoriamente</string> <string name="exo_controls_shuffle_description">Reproducir aleatoriamente</string>
<string name="exo_controls_fullscreen_description">Modo de pantalla completa</string> <string name="exo_controls_fullscreen_description">Modo de pantalla completa</string>
<string name="exo_controls_exit_vr_description">Salir del modo RV</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Descargar</string> <string name="exo_download_description">Descargar</string>
<string name="exo_download_notification_channel_name">Descargas</string> <string name="exo_download_notification_channel_name">Descargas</string>
<string name="exo_download_downloading">Descargando</string> <string name="exo_download_downloading">Descargando</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repetir todo</string> <string name="exo_controls_repeat_all_description">Repetir todo</string>
<string name="exo_controls_shuffle_description">Reproducir aleatoriamente</string> <string name="exo_controls_shuffle_description">Reproducir aleatoriamente</string>
<string name="exo_controls_fullscreen_description">Modo de pantalla completa</string> <string name="exo_controls_fullscreen_description">Modo de pantalla completa</string>
<string name="exo_controls_exit_vr_description">Salir del modo RV</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Descargar</string> <string name="exo_download_description">Descargar</string>
<string name="exo_download_notification_channel_name">Descargas</string> <string name="exo_download_notification_channel_name">Descargas</string>
<string name="exo_download_downloading">Descargando</string> <string name="exo_download_downloading">Descargando</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Korda kõiki</string> <string name="exo_controls_repeat_all_description">Korda kõiki</string>
<string name="exo_controls_shuffle_description">Esita juhuslikus järjekorras</string> <string name="exo_controls_shuffle_description">Esita juhuslikus järjekorras</string>
<string name="exo_controls_fullscreen_description">Täisekraani režiim</string> <string name="exo_controls_fullscreen_description">Täisekraani režiim</string>
<string name="exo_controls_exit_vr_description">Välju VR-režiimist</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Allalaadimine</string> <string name="exo_download_description">Allalaadimine</string>
<string name="exo_download_notification_channel_name">Allalaadimised</string> <string name="exo_download_notification_channel_name">Allalaadimised</string>
<string name="exo_download_downloading">Allalaadimine</string> <string name="exo_download_downloading">Allalaadimine</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Errepikatu guztiak</string> <string name="exo_controls_repeat_all_description">Errepikatu guztiak</string>
<string name="exo_controls_shuffle_description">Erreproduzitu ausaz</string> <string name="exo_controls_shuffle_description">Erreproduzitu ausaz</string>
<string name="exo_controls_fullscreen_description">Pantaila osoko modua</string> <string name="exo_controls_fullscreen_description">Pantaila osoko modua</string>
<string name="exo_controls_exit_vr_description">Irten EB modutik</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Deskargak</string> <string name="exo_download_description">Deskargak</string>
<string name="exo_download_notification_channel_name">Deskargak</string> <string name="exo_download_notification_channel_name">Deskargak</string>
<string name="exo_download_downloading">Deskargatzen</string> <string name="exo_download_downloading">Deskargatzen</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">تکرار همه</string> <string name="exo_controls_repeat_all_description">تکرار همه</string>
<string name="exo_controls_shuffle_description">درهم</string> <string name="exo_controls_shuffle_description">درهم</string>
<string name="exo_controls_fullscreen_description">حالت تمام‌صفحه</string> <string name="exo_controls_fullscreen_description">حالت تمام‌صفحه</string>
<string name="exo_controls_exit_vr_description">خروج از حالت واقعیت مجازی</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">بارگیری</string> <string name="exo_download_description">بارگیری</string>
<string name="exo_download_notification_channel_name">بارگیری‌ها</string> <string name="exo_download_notification_channel_name">بارگیری‌ها</string>
<string name="exo_download_downloading">درحال بارگیری</string> <string name="exo_download_downloading">درحال بارگیری</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Toista kaikki uudelleen</string> <string name="exo_controls_repeat_all_description">Toista kaikki uudelleen</string>
<string name="exo_controls_shuffle_description">Satunnaistoisto</string> <string name="exo_controls_shuffle_description">Satunnaistoisto</string>
<string name="exo_controls_fullscreen_description">Koko näytön tila</string> <string name="exo_controls_fullscreen_description">Koko näytön tila</string>
<string name="exo_controls_exit_vr_description">Poistu VR-tilasta</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Lataa</string> <string name="exo_download_description">Lataa</string>
<string name="exo_download_notification_channel_name">Lataukset</string> <string name="exo_download_notification_channel_name">Lataukset</string>
<string name="exo_download_downloading">Ladataan</string> <string name="exo_download_downloading">Ladataan</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Tout lire en boucle</string> <string name="exo_controls_repeat_all_description">Tout lire en boucle</string>
<string name="exo_controls_shuffle_description">Lecture aléatoire</string> <string name="exo_controls_shuffle_description">Lecture aléatoire</string>
<string name="exo_controls_fullscreen_description">Mode Plein écran</string> <string name="exo_controls_fullscreen_description">Mode Plein écran</string>
<string name="exo_controls_exit_vr_description">Quitter le mode RV</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Télécharger</string> <string name="exo_download_description">Télécharger</string>
<string name="exo_download_notification_channel_name">Téléchargements</string> <string name="exo_download_notification_channel_name">Téléchargements</string>
<string name="exo_download_downloading">Téléchargement en cours…</string> <string name="exo_download_downloading">Téléchargement en cours…</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Tout lire en boucle</string> <string name="exo_controls_repeat_all_description">Tout lire en boucle</string>
<string name="exo_controls_shuffle_description">Aléatoire</string> <string name="exo_controls_shuffle_description">Aléatoire</string>
<string name="exo_controls_fullscreen_description">Mode plein écran</string> <string name="exo_controls_fullscreen_description">Mode plein écran</string>
<string name="exo_controls_exit_vr_description">Quitter le mode RV</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Télécharger</string> <string name="exo_download_description">Télécharger</string>
<string name="exo_download_notification_channel_name">Téléchargements</string> <string name="exo_download_notification_channel_name">Téléchargements</string>
<string name="exo_download_downloading">Téléchargement…</string> <string name="exo_download_downloading">Téléchargement…</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repetir todas as pistas</string> <string name="exo_controls_repeat_all_description">Repetir todas as pistas</string>
<string name="exo_controls_shuffle_description">Reprodución aleatoria</string> <string name="exo_controls_shuffle_description">Reprodución aleatoria</string>
<string name="exo_controls_fullscreen_description">Modo de pantalla completa</string> <string name="exo_controls_fullscreen_description">Modo de pantalla completa</string>
<string name="exo_controls_exit_vr_description">Sae do modo de RV</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Descargar</string> <string name="exo_download_description">Descargar</string>
<string name="exo_download_notification_channel_name">Descargas</string> <string name="exo_download_notification_channel_name">Descargas</string>
<string name="exo_download_downloading">Descargando</string> <string name="exo_download_downloading">Descargando</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">બધાને રિપીટ કરો</string> <string name="exo_controls_repeat_all_description">બધાને રિપીટ કરો</string>
<string name="exo_controls_shuffle_description">શફલ કરો</string> <string name="exo_controls_shuffle_description">શફલ કરો</string>
<string name="exo_controls_fullscreen_description">પૂર્ણસ્ક્રીન મોડ</string> <string name="exo_controls_fullscreen_description">પૂર્ણસ્ક્રીન મોડ</string>
<string name="exo_controls_exit_vr_description">Exit VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ડાઉનલોડ કરો</string> <string name="exo_download_description">ડાઉનલોડ કરો</string>
<string name="exo_download_notification_channel_name">ડાઉનલોડ</string> <string name="exo_download_notification_channel_name">ડાઉનલોડ</string>
<string name="exo_download_downloading">ડાઉનલોડ કરી રહ્યાં છીએ</string> <string name="exo_download_downloading">ડાઉનલોડ કરી રહ્યાં છીએ</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">सभी को दोहराएं</string> <string name="exo_controls_repeat_all_description">सभी को दोहराएं</string>
<string name="exo_controls_shuffle_description">शफ़ल करें</string> <string name="exo_controls_shuffle_description">शफ़ल करें</string>
<string name="exo_controls_fullscreen_description">फ़ुलस्क्रीन मोड</string> <string name="exo_controls_fullscreen_description">फ़ुलस्क्रीन मोड</string>
<string name="exo_controls_exit_vr_description">VR मोड से बाहर निकलें</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">डाउनलोड करें</string> <string name="exo_download_description">डाउनलोड करें</string>
<string name="exo_download_notification_channel_name">डाउनलोड की गई मीडिया फ़ाइलें</string> <string name="exo_download_notification_channel_name">डाउनलोड की गई मीडिया फ़ाइलें</string>
<string name="exo_download_downloading">डाउनलोड हो रहा है</string> <string name="exo_download_downloading">डाउनलोड हो रहा है</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Ponovi sve</string> <string name="exo_controls_repeat_all_description">Ponovi sve</string>
<string name="exo_controls_shuffle_description">Reproduciraj nasumično</string> <string name="exo_controls_shuffle_description">Reproduciraj nasumično</string>
<string name="exo_controls_fullscreen_description">Prikaz na cijelom zaslonu</string> <string name="exo_controls_fullscreen_description">Prikaz na cijelom zaslonu</string>
<string name="exo_controls_exit_vr_description">Izlazak iz VR načina</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Preuzmi</string> <string name="exo_download_description">Preuzmi</string>
<string name="exo_download_notification_channel_name">Preuzimanja</string> <string name="exo_download_notification_channel_name">Preuzimanja</string>
<string name="exo_download_downloading">Preuzimanje</string> <string name="exo_download_downloading">Preuzimanje</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Összes szám ismétlése</string> <string name="exo_controls_repeat_all_description">Összes szám ismétlése</string>
<string name="exo_controls_shuffle_description">Keverés</string> <string name="exo_controls_shuffle_description">Keverés</string>
<string name="exo_controls_fullscreen_description">Teljes képernyős mód</string> <string name="exo_controls_fullscreen_description">Teljes képernyős mód</string>
<string name="exo_controls_exit_vr_description">Kilépés a VR-módból</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Letöltés</string> <string name="exo_download_description">Letöltés</string>
<string name="exo_download_notification_channel_name">Letöltések</string> <string name="exo_download_notification_channel_name">Letöltések</string>
<string name="exo_download_downloading">Letöltés folyamatban</string> <string name="exo_download_downloading">Letöltés folyamatban</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Կրկնել բոլորը</string> <string name="exo_controls_repeat_all_description">Կրկնել բոլորը</string>
<string name="exo_controls_shuffle_description">Խառնել</string> <string name="exo_controls_shuffle_description">Խառնել</string>
<string name="exo_controls_fullscreen_description">Լիաէկրան ռեժիմ</string> <string name="exo_controls_fullscreen_description">Լիաէկրան ռեժիմ</string>
<string name="exo_controls_exit_vr_description">Դուրս գալ VR ռեժիմից</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Ներբեռնել</string> <string name="exo_download_description">Ներբեռնել</string>
<string name="exo_download_notification_channel_name">Ներբեռնումներ</string> <string name="exo_download_notification_channel_name">Ներբեռնումներ</string>
<string name="exo_download_downloading">Ներբեռնում</string> <string name="exo_download_downloading">Ներբեռնում</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Ulangi semua</string> <string name="exo_controls_repeat_all_description">Ulangi semua</string>
<string name="exo_controls_shuffle_description">Acak</string> <string name="exo_controls_shuffle_description">Acak</string>
<string name="exo_controls_fullscreen_description">Mode layar penuh</string> <string name="exo_controls_fullscreen_description">Mode layar penuh</string>
<string name="exo_controls_exit_vr_description">Keluar dari mode VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Download</string> <string name="exo_download_description">Download</string>
<string name="exo_download_notification_channel_name">Download</string> <string name="exo_download_notification_channel_name">Download</string>
<string name="exo_download_downloading">Mendownload</string> <string name="exo_download_downloading">Mendownload</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Endurtaka allt</string> <string name="exo_controls_repeat_all_description">Endurtaka allt</string>
<string name="exo_controls_shuffle_description">Stokka</string> <string name="exo_controls_shuffle_description">Stokka</string>
<string name="exo_controls_fullscreen_description">Allur skjárinn</string> <string name="exo_controls_fullscreen_description">Allur skjárinn</string>
<string name="exo_controls_exit_vr_description">Loka sýndarveruleikastillingu</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Sækja</string> <string name="exo_download_description">Sækja</string>
<string name="exo_download_notification_channel_name">Niðurhal</string> <string name="exo_download_notification_channel_name">Niðurhal</string>
<string name="exo_download_downloading">Sækir</string> <string name="exo_download_downloading">Sækir</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Ripeti tutto</string> <string name="exo_controls_repeat_all_description">Ripeti tutto</string>
<string name="exo_controls_shuffle_description">Riproduzione casuale</string> <string name="exo_controls_shuffle_description">Riproduzione casuale</string>
<string name="exo_controls_fullscreen_description">Modalità a schermo intero</string> <string name="exo_controls_fullscreen_description">Modalità a schermo intero</string>
<string name="exo_controls_exit_vr_description">Esci dalla modalità VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Scarica</string> <string name="exo_download_description">Scarica</string>
<string name="exo_download_notification_channel_name">Download</string> <string name="exo_download_notification_channel_name">Download</string>
<string name="exo_download_downloading">Download…</string> <string name="exo_download_downloading">Download…</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">חזור על הכול</string> <string name="exo_controls_repeat_all_description">חזור על הכול</string>
<string name="exo_controls_shuffle_description">ערבוב</string> <string name="exo_controls_shuffle_description">ערבוב</string>
<string name="exo_controls_fullscreen_description">מצב מסך מלא</string> <string name="exo_controls_fullscreen_description">מצב מסך מלא</string>
<string name="exo_controls_exit_vr_description">יציאה ממצב VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">הורדה</string> <string name="exo_download_description">הורדה</string>
<string name="exo_download_notification_channel_name">הורדות</string> <string name="exo_download_notification_channel_name">הורדות</string>
<string name="exo_download_downloading">ההורדה מתבצעת</string> <string name="exo_download_downloading">ההורדה מתבצעת</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">全曲をリピート</string> <string name="exo_controls_repeat_all_description">全曲をリピート</string>
<string name="exo_controls_shuffle_description">シャッフル</string> <string name="exo_controls_shuffle_description">シャッフル</string>
<string name="exo_controls_fullscreen_description">全画面モード</string> <string name="exo_controls_fullscreen_description">全画面モード</string>
<string name="exo_controls_exit_vr_description">VR モードを終了します</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ダウンロード</string> <string name="exo_download_description">ダウンロード</string>
<string name="exo_download_notification_channel_name">ダウンロード</string> <string name="exo_download_notification_channel_name">ダウンロード</string>
<string name="exo_download_downloading">ダウンロードしています</string> <string name="exo_download_downloading">ダウンロードしています</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">ყველას გამეორება</string> <string name="exo_controls_repeat_all_description">ყველას გამეორება</string>
<string name="exo_controls_shuffle_description">არეულად დაკვრა</string> <string name="exo_controls_shuffle_description">არეულად დაკვრა</string>
<string name="exo_controls_fullscreen_description">სრულეკრანიანი რეჟიმი</string> <string name="exo_controls_fullscreen_description">სრულეკრანიანი რეჟიმი</string>
<string name="exo_controls_exit_vr_description">VR რეჟიმიდან გასვლა</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ჩამოტვირთვა</string> <string name="exo_download_description">ჩამოტვირთვა</string>
<string name="exo_download_notification_channel_name">ჩამოტვირთვები</string> <string name="exo_download_notification_channel_name">ჩამოტვირთვები</string>
<string name="exo_download_downloading">მიმდინარეობს ჩამოტვირთვა</string> <string name="exo_download_downloading">მიმდინარეობს ჩამოტვირთვა</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Барлығын қайталау</string> <string name="exo_controls_repeat_all_description">Барлығын қайталау</string>
<string name="exo_controls_shuffle_description">Араластыру</string> <string name="exo_controls_shuffle_description">Араластыру</string>
<string name="exo_controls_fullscreen_description">Толық экран режимі</string> <string name="exo_controls_fullscreen_description">Толық экран режимі</string>
<string name="exo_controls_exit_vr_description">VR режимінен шығу</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Жүктеп алу</string> <string name="exo_download_description">Жүктеп алу</string>
<string name="exo_download_notification_channel_name">Жүктеп алынғандар</string> <string name="exo_download_notification_channel_name">Жүктеп алынғандар</string>
<string name="exo_download_downloading">Жүктеп алынуда</string> <string name="exo_download_downloading">Жүктеп алынуда</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">លេង​ឡើងវិញ​ទាំងអស់</string> <string name="exo_controls_repeat_all_description">លេង​ឡើងវិញ​ទាំងអស់</string>
<string name="exo_controls_shuffle_description">ច្របល់</string> <string name="exo_controls_shuffle_description">ច្របល់</string>
<string name="exo_controls_fullscreen_description">មុខងារពេញ​អេក្រង់</string> <string name="exo_controls_fullscreen_description">មុខងារពេញ​អេក្រង់</string>
<string name="exo_controls_exit_vr_description">ចាកចេញពីមុខងារ​ VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ទាញយក</string> <string name="exo_download_description">ទាញយក</string>
<string name="exo_download_notification_channel_name">ទាញយក</string> <string name="exo_download_notification_channel_name">ទាញយក</string>
<string name="exo_download_downloading">កំពុង​ទាញ​យក</string> <string name="exo_download_downloading">កំពុង​ទាញ​យក</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">ಎಲ್ಲವನ್ನು ಪುನರಾವರ್ತಿಸಿ</string> <string name="exo_controls_repeat_all_description">ಎಲ್ಲವನ್ನು ಪುನರಾವರ್ತಿಸಿ</string>
<string name="exo_controls_shuffle_description">ಶಫಲ್‌</string> <string name="exo_controls_shuffle_description">ಶಫಲ್‌</string>
<string name="exo_controls_fullscreen_description">ಪೂರ್ಣ ಪರದೆ ಮೋಡ್</string> <string name="exo_controls_fullscreen_description">ಪೂರ್ಣ ಪರದೆ ಮೋಡ್</string>
<string name="exo_controls_exit_vr_description">VR ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸಿ</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ಡೌನ್‌ಲೋಡ್‌</string> <string name="exo_download_description">ಡೌನ್‌ಲೋಡ್‌</string>
<string name="exo_download_notification_channel_name">ಡೌನ್‌ಲೋಡ್‌ಗಳು</string> <string name="exo_download_notification_channel_name">ಡೌನ್‌ಲೋಡ್‌ಗಳು</string>
<string name="exo_download_downloading">ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ</string> <string name="exo_download_downloading">ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">모두 반복</string> <string name="exo_controls_repeat_all_description">모두 반복</string>
<string name="exo_controls_shuffle_description">셔플</string> <string name="exo_controls_shuffle_description">셔플</string>
<string name="exo_controls_fullscreen_description">전체화면 모드</string> <string name="exo_controls_fullscreen_description">전체화면 모드</string>
<string name="exo_controls_exit_vr_description">VR 모드 종료</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">다운로드</string> <string name="exo_download_description">다운로드</string>
<string name="exo_download_notification_channel_name">다운로드</string> <string name="exo_download_notification_channel_name">다운로드</string>
<string name="exo_download_downloading">다운로드 중</string> <string name="exo_download_downloading">다운로드 중</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Баарын кайталоо</string> <string name="exo_controls_repeat_all_description">Баарын кайталоо</string>
<string name="exo_controls_shuffle_description">Аралаштыруу</string> <string name="exo_controls_shuffle_description">Аралаштыруу</string>
<string name="exo_controls_fullscreen_description">Толук экран режими</string> <string name="exo_controls_fullscreen_description">Толук экран режими</string>
<string name="exo_controls_exit_vr_description">VR режиминен чыгуу</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Жүктөп алуу</string> <string name="exo_download_description">Жүктөп алуу</string>
<string name="exo_download_notification_channel_name">Жүктөлүп алынгандар</string> <string name="exo_download_notification_channel_name">Жүктөлүп алынгандар</string>
<string name="exo_download_downloading">Жүктөлүп алынууда</string> <string name="exo_download_downloading">Жүктөлүп алынууда</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">ຫຼິ້ນຊ້ຳທັງໝົດ</string> <string name="exo_controls_repeat_all_description">ຫຼິ້ນຊ້ຳທັງໝົດ</string>
<string name="exo_controls_shuffle_description">ຫຼີ້ນແບບສຸ່ມ</string> <string name="exo_controls_shuffle_description">ຫຼີ້ນແບບສຸ່ມ</string>
<string name="exo_controls_fullscreen_description">ໂໝດເຕັມຈໍ</string> <string name="exo_controls_fullscreen_description">ໂໝດເຕັມຈໍ</string>
<string name="exo_controls_exit_vr_description">ອອກຈາກໂໝດ VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ດາວໂຫລດ</string> <string name="exo_download_description">ດາວໂຫລດ</string>
<string name="exo_download_notification_channel_name">ດາວໂຫລດ</string> <string name="exo_download_notification_channel_name">ດາວໂຫລດ</string>
<string name="exo_download_downloading">ກຳລັງດາວໂຫລດ</string> <string name="exo_download_downloading">ກຳລັງດາວໂຫລດ</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Kartoti viską</string> <string name="exo_controls_repeat_all_description">Kartoti viską</string>
<string name="exo_controls_shuffle_description">Maišyti</string> <string name="exo_controls_shuffle_description">Maišyti</string>
<string name="exo_controls_fullscreen_description">Viso ekrano režimas</string> <string name="exo_controls_fullscreen_description">Viso ekrano režimas</string>
<string name="exo_controls_exit_vr_description">Išeiti iš VR režimo</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Atsisiųsti</string> <string name="exo_download_description">Atsisiųsti</string>
<string name="exo_download_notification_channel_name">Atsisiuntimai</string> <string name="exo_download_notification_channel_name">Atsisiuntimai</string>
<string name="exo_download_downloading">Atsisiunčiama</string> <string name="exo_download_downloading">Atsisiunčiama</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Atkārtot visu</string> <string name="exo_controls_repeat_all_description">Atkārtot visu</string>
<string name="exo_controls_shuffle_description">Atskaņot jauktā secībā</string> <string name="exo_controls_shuffle_description">Atskaņot jauktā secībā</string>
<string name="exo_controls_fullscreen_description">Pilnekrāna režīms</string> <string name="exo_controls_fullscreen_description">Pilnekrāna režīms</string>
<string name="exo_controls_exit_vr_description">Iziet no VR režīma</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Lejupielādēt</string> <string name="exo_download_description">Lejupielādēt</string>
<string name="exo_download_notification_channel_name">Lejupielādes</string> <string name="exo_download_notification_channel_name">Lejupielādes</string>
<string name="exo_download_downloading">Notiek lejupielāde</string> <string name="exo_download_downloading">Notiek lejupielāde</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Повтори ги сите</string> <string name="exo_controls_repeat_all_description">Повтори ги сите</string>
<string name="exo_controls_shuffle_description">Измешај</string> <string name="exo_controls_shuffle_description">Измешај</string>
<string name="exo_controls_fullscreen_description">Режим на цел екран</string> <string name="exo_controls_fullscreen_description">Режим на цел екран</string>
<string name="exo_controls_exit_vr_description">Излези од режимот на VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Преземи</string> <string name="exo_download_description">Преземи</string>
<string name="exo_download_notification_channel_name">Преземања</string> <string name="exo_download_notification_channel_name">Преземања</string>
<string name="exo_download_downloading">Се презема</string> <string name="exo_download_downloading">Се презема</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">എല്ലാം ആവർത്തിക്കുക</string> <string name="exo_controls_repeat_all_description">എല്ലാം ആവർത്തിക്കുക</string>
<string name="exo_controls_shuffle_description">ഇടകലര്‍ത്തുക</string> <string name="exo_controls_shuffle_description">ഇടകലര്‍ത്തുക</string>
<string name="exo_controls_fullscreen_description">പൂർണ്ണ സ്‌ക്രീൻ മോഡ്</string> <string name="exo_controls_fullscreen_description">പൂർണ്ണ സ്‌ക്രീൻ മോഡ്</string>
<string name="exo_controls_exit_vr_description">Exit VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ഡൗൺലോഡ്</string> <string name="exo_download_description">ഡൗൺലോഡ്</string>
<string name="exo_download_notification_channel_name">ഡൗൺലോഡുകൾ</string> <string name="exo_download_notification_channel_name">ഡൗൺലോഡുകൾ</string>
<string name="exo_download_downloading">ഡൗൺലോഡ് ചെയ്യുന്നു</string> <string name="exo_download_downloading">ഡൗൺലോഡ് ചെയ്യുന്നു</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Бүгдийг нь дахин тоглуулах</string> <string name="exo_controls_repeat_all_description">Бүгдийг нь дахин тоглуулах</string>
<string name="exo_controls_shuffle_description">Холих</string> <string name="exo_controls_shuffle_description">Холих</string>
<string name="exo_controls_fullscreen_description">Бүтэн дэлгэцийн горим</string> <string name="exo_controls_fullscreen_description">Бүтэн дэлгэцийн горим</string>
<string name="exo_controls_exit_vr_description">VR горимоос гарах</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Татах</string> <string name="exo_download_description">Татах</string>
<string name="exo_download_notification_channel_name">Татaлт</string> <string name="exo_download_notification_channel_name">Татaлт</string>
<string name="exo_download_downloading">Татаж байна</string> <string name="exo_download_downloading">Татаж байна</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">सर्व रीपीट करा</string> <string name="exo_controls_repeat_all_description">सर्व रीपीट करा</string>
<string name="exo_controls_shuffle_description">शफल करा</string> <string name="exo_controls_shuffle_description">शफल करा</string>
<string name="exo_controls_fullscreen_description">फुल स्क्रीन मोड</string> <string name="exo_controls_fullscreen_description">फुल स्क्रीन मोड</string>
<string name="exo_controls_exit_vr_description">VR मोडमधून बाहेर पडा</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">डाउनलोड करा</string> <string name="exo_download_description">डाउनलोड करा</string>
<string name="exo_download_notification_channel_name">डाउनलोड</string> <string name="exo_download_notification_channel_name">डाउनलोड</string>
<string name="exo_download_downloading">डाउनलोड होत आहे</string> <string name="exo_download_downloading">डाउनलोड होत आहे</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Ulang semua</string> <string name="exo_controls_repeat_all_description">Ulang semua</string>
<string name="exo_controls_shuffle_description">Rombak</string> <string name="exo_controls_shuffle_description">Rombak</string>
<string name="exo_controls_fullscreen_description">Mod skrin penuh</string> <string name="exo_controls_fullscreen_description">Mod skrin penuh</string>
<string name="exo_controls_exit_vr_description">Keluar daripada mod VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Muat turun</string> <string name="exo_download_description">Muat turun</string>
<string name="exo_download_notification_channel_name">Muat turun</string> <string name="exo_download_notification_channel_name">Muat turun</string>
<string name="exo_download_downloading">Memuat turun</string> <string name="exo_download_downloading">Memuat turun</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">အားလုံး ပြန်ကျော့ရန်</string> <string name="exo_controls_repeat_all_description">အားလုံး ပြန်ကျော့ရန်</string>
<string name="exo_controls_shuffle_description">ရောသမမွှေ</string> <string name="exo_controls_shuffle_description">ရောသမမွှေ</string>
<string name="exo_controls_fullscreen_description">မျက်နှာပြင်အပြည့် မုဒ်</string> <string name="exo_controls_fullscreen_description">မျက်နှာပြင်အပြည့် မုဒ်</string>
<string name="exo_controls_exit_vr_description">VR မုဒ်မှထွက်ပါ</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ဒေါင်းလုဒ် လုပ်ရန်</string> <string name="exo_download_description">ဒေါင်းလုဒ် လုပ်ရန်</string>
<string name="exo_download_notification_channel_name">ဒေါင်းလုဒ်များ</string> <string name="exo_download_notification_channel_name">ဒေါင်းလုဒ်များ</string>
<string name="exo_download_downloading">ဒေါင်းလုဒ်လုပ်နေသည်</string> <string name="exo_download_downloading">ဒေါင်းလုဒ်လုပ်နေသည်</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Gjenta alle</string> <string name="exo_controls_repeat_all_description">Gjenta alle</string>
<string name="exo_controls_shuffle_description">Tilfeldig rekkefølge</string> <string name="exo_controls_shuffle_description">Tilfeldig rekkefølge</string>
<string name="exo_controls_fullscreen_description">Fullskjermmodus</string> <string name="exo_controls_fullscreen_description">Fullskjermmodus</string>
<string name="exo_controls_exit_vr_description">Avslutt VR-modus</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Last ned</string> <string name="exo_download_description">Last ned</string>
<string name="exo_download_notification_channel_name">Nedlastinger</string> <string name="exo_download_notification_channel_name">Nedlastinger</string>
<string name="exo_download_downloading">Laster ned</string> <string name="exo_download_downloading">Laster ned</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">सबै दोहोर्‍याउनुहोस्</string> <string name="exo_controls_repeat_all_description">सबै दोहोर्‍याउनुहोस्</string>
<string name="exo_controls_shuffle_description">मिसाउनुहोस्</string> <string name="exo_controls_shuffle_description">मिसाउनुहोस्</string>
<string name="exo_controls_fullscreen_description">पूर्ण स्क्रिन मोड</string> <string name="exo_controls_fullscreen_description">पूर्ण स्क्रिन मोड</string>
<string name="exo_controls_exit_vr_description">VR मोडबाट बाहिरिनुहोस्</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">डाउनलोड गर्नुहोस्</string> <string name="exo_download_description">डाउनलोड गर्नुहोस्</string>
<string name="exo_download_notification_channel_name">डाउनलोडहरू</string> <string name="exo_download_notification_channel_name">डाउनलोडहरू</string>
<string name="exo_download_downloading">डाउनलोड गरिँदै छ</string> <string name="exo_download_downloading">डाउनलोड गरिँदै छ</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Alles herhalen</string> <string name="exo_controls_repeat_all_description">Alles herhalen</string>
<string name="exo_controls_shuffle_description">Shuffle</string> <string name="exo_controls_shuffle_description">Shuffle</string>
<string name="exo_controls_fullscreen_description">Modus \'Volledig scherm\'</string> <string name="exo_controls_fullscreen_description">Modus \'Volledig scherm\'</string>
<string name="exo_controls_exit_vr_description">VR-modus sluiten</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Downloaden</string> <string name="exo_download_description">Downloaden</string>
<string name="exo_download_notification_channel_name">Downloads</string> <string name="exo_download_notification_channel_name">Downloads</string>
<string name="exo_download_downloading">Downloaden</string> <string name="exo_download_downloading">Downloaden</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">ਸਾਰਿਆਂ ਨੂੰ ਦੁਹਰਾਓ</string> <string name="exo_controls_repeat_all_description">ਸਾਰਿਆਂ ਨੂੰ ਦੁਹਰਾਓ</string>
<string name="exo_controls_shuffle_description">ਬੇਤਰਤੀਬ ਕਰੋ</string> <string name="exo_controls_shuffle_description">ਬੇਤਰਤੀਬ ਕਰੋ</string>
<string name="exo_controls_fullscreen_description">ਪੂਰੀ-ਸਕ੍ਰੀਨ ਮੋਡ</string> <string name="exo_controls_fullscreen_description">ਪੂਰੀ-ਸਕ੍ਰੀਨ ਮੋਡ</string>
<string name="exo_controls_exit_vr_description">VR ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਓ</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ਡਾਊਨਲੋਡ ਕਰੋ</string> <string name="exo_download_description">ਡਾਊਨਲੋਡ ਕਰੋ</string>
<string name="exo_download_notification_channel_name">ਡਾਊਨਲੋਡ</string> <string name="exo_download_notification_channel_name">ਡਾਊਨਲੋਡ</string>
<string name="exo_download_downloading">ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</string> <string name="exo_download_downloading">ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Powtórz wszystkie</string> <string name="exo_controls_repeat_all_description">Powtórz wszystkie</string>
<string name="exo_controls_shuffle_description">Odtwarzanie losowe</string> <string name="exo_controls_shuffle_description">Odtwarzanie losowe</string>
<string name="exo_controls_fullscreen_description">Tryb pełnoekranowy</string> <string name="exo_controls_fullscreen_description">Tryb pełnoekranowy</string>
<string name="exo_controls_exit_vr_description">Wyłącz tryb VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Pobierz</string> <string name="exo_download_description">Pobierz</string>
<string name="exo_download_notification_channel_name">Pobieranie</string> <string name="exo_download_notification_channel_name">Pobieranie</string>
<string name="exo_download_downloading">Pobieram</string> <string name="exo_download_downloading">Pobieram</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repetir tudo</string> <string name="exo_controls_repeat_all_description">Repetir tudo</string>
<string name="exo_controls_shuffle_description">Reproduzir aleatoriamente</string> <string name="exo_controls_shuffle_description">Reproduzir aleatoriamente</string>
<string name="exo_controls_fullscreen_description">Modo de ecrã inteiro</string> <string name="exo_controls_fullscreen_description">Modo de ecrã inteiro</string>
<string name="exo_controls_exit_vr_description">Sair do Modo de RV</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Transferir</string> <string name="exo_download_description">Transferir</string>
<string name="exo_download_notification_channel_name">Transferências</string> <string name="exo_download_notification_channel_name">Transferências</string>
<string name="exo_download_downloading">A transferir…</string> <string name="exo_download_downloading">A transferir…</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repetir tudo</string> <string name="exo_controls_repeat_all_description">Repetir tudo</string>
<string name="exo_controls_shuffle_description">Aleatório</string> <string name="exo_controls_shuffle_description">Aleatório</string>
<string name="exo_controls_fullscreen_description">Modo de tela cheia</string> <string name="exo_controls_fullscreen_description">Modo de tela cheia</string>
<string name="exo_controls_exit_vr_description">Sair do modo RV</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Fazer o download</string> <string name="exo_download_description">Fazer o download</string>
<string name="exo_download_notification_channel_name">Downloads</string> <string name="exo_download_notification_channel_name">Downloads</string>
<string name="exo_download_downloading">Fazendo o download</string> <string name="exo_download_downloading">Fazendo o download</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Repetați-le pe toate</string> <string name="exo_controls_repeat_all_description">Repetați-le pe toate</string>
<string name="exo_controls_shuffle_description">Redați aleatoriu</string> <string name="exo_controls_shuffle_description">Redați aleatoriu</string>
<string name="exo_controls_fullscreen_description">Modul Ecran complet</string> <string name="exo_controls_fullscreen_description">Modul Ecran complet</string>
<string name="exo_controls_exit_vr_description">Ieșiți din modul RV</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Descărcați</string> <string name="exo_download_description">Descărcați</string>
<string name="exo_download_notification_channel_name">Descărcări</string> <string name="exo_download_notification_channel_name">Descărcări</string>
<string name="exo_download_downloading">Se descarcă</string> <string name="exo_download_downloading">Se descarcă</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Повторять все</string> <string name="exo_controls_repeat_all_description">Повторять все</string>
<string name="exo_controls_shuffle_description">Перемешать</string> <string name="exo_controls_shuffle_description">Перемешать</string>
<string name="exo_controls_fullscreen_description">Полноэкранный режим</string> <string name="exo_controls_fullscreen_description">Полноэкранный режим</string>
<string name="exo_controls_exit_vr_description">Выйти из VR-режима</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Скачать</string> <string name="exo_download_description">Скачать</string>
<string name="exo_download_notification_channel_name">Скачивания</string> <string name="exo_download_notification_channel_name">Скачивания</string>
<string name="exo_download_downloading">Скачивание…</string> <string name="exo_download_downloading">Скачивание…</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">සියල්ල පුනරාවර්තනය කරන්න</string> <string name="exo_controls_repeat_all_description">සියල්ල පුනරාවර්තනය කරන්න</string>
<string name="exo_controls_shuffle_description">කලවම් කරන්න</string> <string name="exo_controls_shuffle_description">කලවම් කරන්න</string>
<string name="exo_controls_fullscreen_description">සම්පූර්ණ තිර ප්‍රකාරය</string> <string name="exo_controls_fullscreen_description">සම්පූර්ණ තිර ප්‍රකාරය</string>
<string name="exo_controls_exit_vr_description">Exit VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">බාගන්න</string> <string name="exo_download_description">බාගන්න</string>
<string name="exo_download_notification_channel_name">බාගැනීම්</string> <string name="exo_download_notification_channel_name">බාගැනීම්</string>
<string name="exo_download_downloading">බාගනිමින්</string> <string name="exo_download_downloading">බාගනිමින්</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Opakovať všetko</string> <string name="exo_controls_repeat_all_description">Opakovať všetko</string>
<string name="exo_controls_shuffle_description">Náhodne prehrávať</string> <string name="exo_controls_shuffle_description">Náhodne prehrávať</string>
<string name="exo_controls_fullscreen_description">Režim celej obrazovky</string> <string name="exo_controls_fullscreen_description">Režim celej obrazovky</string>
<string name="exo_controls_exit_vr_description">Ukončiť režim VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Stiahnuť</string> <string name="exo_download_description">Stiahnuť</string>
<string name="exo_download_notification_channel_name">Stiahnuté</string> <string name="exo_download_notification_channel_name">Stiahnuté</string>
<string name="exo_download_downloading">Sťahuje sa</string> <string name="exo_download_downloading">Sťahuje sa</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Ponavljanje vseh</string> <string name="exo_controls_repeat_all_description">Ponavljanje vseh</string>
<string name="exo_controls_shuffle_description">Naključno predvajanje</string> <string name="exo_controls_shuffle_description">Naključno predvajanje</string>
<string name="exo_controls_fullscreen_description">Celozaslonski način</string> <string name="exo_controls_fullscreen_description">Celozaslonski način</string>
<string name="exo_controls_exit_vr_description">Izhod iz načina VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Prenos</string> <string name="exo_download_description">Prenos</string>
<string name="exo_download_notification_channel_name">Prenosi</string> <string name="exo_download_notification_channel_name">Prenosi</string>
<string name="exo_download_downloading">Prenašanje</string> <string name="exo_download_downloading">Prenašanje</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Përsërit të gjitha</string> <string name="exo_controls_repeat_all_description">Përsërit të gjitha</string>
<string name="exo_controls_shuffle_description">Përziej</string> <string name="exo_controls_shuffle_description">Përziej</string>
<string name="exo_controls_fullscreen_description">Modaliteti me ekran të plotë</string> <string name="exo_controls_fullscreen_description">Modaliteti me ekran të plotë</string>
<string name="exo_controls_exit_vr_description">Dil nga modaliteti VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Shkarko</string> <string name="exo_download_description">Shkarko</string>
<string name="exo_download_notification_channel_name">Shkarkimet</string> <string name="exo_download_notification_channel_name">Shkarkimet</string>
<string name="exo_download_downloading">Po shkarkohet</string> <string name="exo_download_downloading">Po shkarkohet</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Понови све</string> <string name="exo_controls_repeat_all_description">Понови све</string>
<string name="exo_controls_shuffle_description">Пусти насумично</string> <string name="exo_controls_shuffle_description">Пусти насумично</string>
<string name="exo_controls_fullscreen_description">Режим целог екрана</string> <string name="exo_controls_fullscreen_description">Режим целог екрана</string>
<string name="exo_controls_exit_vr_description">Изађи из ВР режима</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Преузми</string> <string name="exo_download_description">Преузми</string>
<string name="exo_download_notification_channel_name">Преузимања</string> <string name="exo_download_notification_channel_name">Преузимања</string>
<string name="exo_download_downloading">Преузима се</string> <string name="exo_download_downloading">Преузима се</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Upprepa alla</string> <string name="exo_controls_repeat_all_description">Upprepa alla</string>
<string name="exo_controls_shuffle_description">Blanda spår</string> <string name="exo_controls_shuffle_description">Blanda spår</string>
<string name="exo_controls_fullscreen_description">Helskärmsläge</string> <string name="exo_controls_fullscreen_description">Helskärmsläge</string>
<string name="exo_controls_exit_vr_description">Avsluta VR-läget</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Ladda ned</string> <string name="exo_download_description">Ladda ned</string>
<string name="exo_download_notification_channel_name">Nedladdningar</string> <string name="exo_download_notification_channel_name">Nedladdningar</string>
<string name="exo_download_downloading">Laddar ned</string> <string name="exo_download_downloading">Laddar ned</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Rudia zote</string> <string name="exo_controls_repeat_all_description">Rudia zote</string>
<string name="exo_controls_shuffle_description">Changanya</string> <string name="exo_controls_shuffle_description">Changanya</string>
<string name="exo_controls_fullscreen_description">Hali ya skrini nzima</string> <string name="exo_controls_fullscreen_description">Hali ya skrini nzima</string>
<string name="exo_controls_exit_vr_description">Funga hali ya VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Pakua</string> <string name="exo_download_description">Pakua</string>
<string name="exo_download_notification_channel_name">Vipakuliwa</string> <string name="exo_download_notification_channel_name">Vipakuliwa</string>
<string name="exo_download_downloading">Inapakua</string> <string name="exo_download_downloading">Inapakua</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">அனைத்தையும் மீண்டும் இயக்கு</string> <string name="exo_controls_repeat_all_description">அனைத்தையும் மீண்டும் இயக்கு</string>
<string name="exo_controls_shuffle_description">கலைத்துப் போடு</string> <string name="exo_controls_shuffle_description">கலைத்துப் போடு</string>
<string name="exo_controls_fullscreen_description">முழுத்திரைப் பயன்முறை</string> <string name="exo_controls_fullscreen_description">முழுத்திரைப் பயன்முறை</string>
<string name="exo_controls_exit_vr_description">VRரிலிருந்து வெளியேறும்</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">பதிவிறக்கும் பட்டன்</string> <string name="exo_download_description">பதிவிறக்கும் பட்டன்</string>
<string name="exo_download_notification_channel_name">பதிவிறக்கங்கள்</string> <string name="exo_download_notification_channel_name">பதிவிறக்கங்கள்</string>
<string name="exo_download_downloading">பதிவிறக்குகிறது</string> <string name="exo_download_downloading">பதிவிறக்குகிறது</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">అన్నింటినీ పునరావృతం చేయండి</string> <string name="exo_controls_repeat_all_description">అన్నింటినీ పునరావృతం చేయండి</string>
<string name="exo_controls_shuffle_description">షఫుల్ చేయండి</string> <string name="exo_controls_shuffle_description">షఫుల్ చేయండి</string>
<string name="exo_controls_fullscreen_description">పూర్తి స్క్రీన్ మోడ్</string> <string name="exo_controls_fullscreen_description">పూర్తి స్క్రీన్ మోడ్</string>
<string name="exo_controls_exit_vr_description">Exit VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">డౌన్‌లోడ్ చేయి</string> <string name="exo_download_description">డౌన్‌లోడ్ చేయి</string>
<string name="exo_download_notification_channel_name">డౌన్‌లోడ్‌లు</string> <string name="exo_download_notification_channel_name">డౌన్‌లోడ్‌లు</string>
<string name="exo_download_downloading">డౌన్‌లోడ్ చేస్తోంది</string> <string name="exo_download_downloading">డౌన్‌లోడ్ చేస్తోంది</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">เล่นซ้ำทั้งหมด</string> <string name="exo_controls_repeat_all_description">เล่นซ้ำทั้งหมด</string>
<string name="exo_controls_shuffle_description">สุ่ม</string> <string name="exo_controls_shuffle_description">สุ่ม</string>
<string name="exo_controls_fullscreen_description">โหมดเต็มหน้าจอ</string> <string name="exo_controls_fullscreen_description">โหมดเต็มหน้าจอ</string>
<string name="exo_controls_exit_vr_description">ออกจากโหมด VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ดาวน์โหลด</string> <string name="exo_download_description">ดาวน์โหลด</string>
<string name="exo_download_notification_channel_name">ดาวน์โหลด</string> <string name="exo_download_notification_channel_name">ดาวน์โหลด</string>
<string name="exo_download_downloading">กำลังดาวน์โหลด</string> <string name="exo_download_downloading">กำลังดาวน์โหลด</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Ulitin lahat</string> <string name="exo_controls_repeat_all_description">Ulitin lahat</string>
<string name="exo_controls_shuffle_description">I-shuffle</string> <string name="exo_controls_shuffle_description">I-shuffle</string>
<string name="exo_controls_fullscreen_description">Fullscreen mode</string> <string name="exo_controls_fullscreen_description">Fullscreen mode</string>
<string name="exo_controls_exit_vr_description">Lumabas sa VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">I-download</string> <string name="exo_download_description">I-download</string>
<string name="exo_download_notification_channel_name">Mga Download</string> <string name="exo_download_notification_channel_name">Mga Download</string>
<string name="exo_download_downloading">Nagda-download</string> <string name="exo_download_downloading">Nagda-download</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Tümünü tekrarla</string> <string name="exo_controls_repeat_all_description">Tümünü tekrarla</string>
<string name="exo_controls_shuffle_description">Karıştır</string> <string name="exo_controls_shuffle_description">Karıştır</string>
<string name="exo_controls_fullscreen_description">Tam ekran modu</string> <string name="exo_controls_fullscreen_description">Tam ekran modu</string>
<string name="exo_controls_exit_vr_description">VR modundan çıkar</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">İndir</string> <string name="exo_download_description">İndir</string>
<string name="exo_download_notification_channel_name">İndirilenler</string> <string name="exo_download_notification_channel_name">İndirilenler</string>
<string name="exo_download_downloading">İndiriliyor</string> <string name="exo_download_downloading">İndiriliyor</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Повторити всі</string> <string name="exo_controls_repeat_all_description">Повторити всі</string>
<string name="exo_controls_shuffle_description">Перемішати</string> <string name="exo_controls_shuffle_description">Перемішати</string>
<string name="exo_controls_fullscreen_description">Повноекранний режим</string> <string name="exo_controls_fullscreen_description">Повноекранний режим</string>
<string name="exo_controls_exit_vr_description">Вийти з режиму VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Завантажити</string> <string name="exo_download_description">Завантажити</string>
<string name="exo_download_notification_channel_name">Завантаження</string> <string name="exo_download_notification_channel_name">Завантаження</string>
<string name="exo_download_downloading">Завантажується</string> <string name="exo_download_downloading">Завантажується</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">سبھی کو دہرائیں</string> <string name="exo_controls_repeat_all_description">سبھی کو دہرائیں</string>
<string name="exo_controls_shuffle_description">شفل کریں</string> <string name="exo_controls_shuffle_description">شفل کریں</string>
<string name="exo_controls_fullscreen_description">پوری اسکرین والی وضع</string> <string name="exo_controls_fullscreen_description">پوری اسکرین والی وضع</string>
<string name="exo_controls_exit_vr_description">VR موڈ سے باہر نکلیں</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">ڈاؤن لوڈ کریں</string> <string name="exo_download_description">ڈاؤن لوڈ کریں</string>
<string name="exo_download_notification_channel_name">ڈاؤن لوڈز</string> <string name="exo_download_notification_channel_name">ڈاؤن لوڈز</string>
<string name="exo_download_downloading">ڈاؤن لوڈ ہو رہا ہے</string> <string name="exo_download_downloading">ڈاؤن لوڈ ہو رہا ہے</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Hammasini takrorlash</string> <string name="exo_controls_repeat_all_description">Hammasini takrorlash</string>
<string name="exo_controls_shuffle_description">Aralash</string> <string name="exo_controls_shuffle_description">Aralash</string>
<string name="exo_controls_fullscreen_description">Butun ekran rejimi</string> <string name="exo_controls_fullscreen_description">Butun ekran rejimi</string>
<string name="exo_controls_exit_vr_description">VR rejimidan chiqish</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Yuklab olish</string> <string name="exo_download_description">Yuklab olish</string>
<string name="exo_download_notification_channel_name">Yuklanmalar</string> <string name="exo_download_notification_channel_name">Yuklanmalar</string>
<string name="exo_download_downloading">Yuklab olinmoqda</string> <string name="exo_download_downloading">Yuklab olinmoqda</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Lặp lại tất cả</string> <string name="exo_controls_repeat_all_description">Lặp lại tất cả</string>
<string name="exo_controls_shuffle_description">Phát ngẫu nhiên</string> <string name="exo_controls_shuffle_description">Phát ngẫu nhiên</string>
<string name="exo_controls_fullscreen_description">Chế độ toàn màn hình</string> <string name="exo_controls_fullscreen_description">Chế độ toàn màn hình</string>
<string name="exo_controls_exit_vr_description">Thoát chế độ thực tế ảo (VR)</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Tải xuống</string> <string name="exo_download_description">Tải xuống</string>
<string name="exo_download_notification_channel_name">Tài nguyên đã tải xuống</string> <string name="exo_download_notification_channel_name">Tài nguyên đã tải xuống</string>
<string name="exo_download_downloading">Đang tải xuống</string> <string name="exo_download_downloading">Đang tải xuống</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">全部重复播放</string> <string name="exo_controls_repeat_all_description">全部重复播放</string>
<string name="exo_controls_shuffle_description">随机播放</string> <string name="exo_controls_shuffle_description">随机播放</string>
<string name="exo_controls_fullscreen_description">全屏模式</string> <string name="exo_controls_fullscreen_description">全屏模式</string>
<string name="exo_controls_exit_vr_description">退出 VR 模式</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">下载</string> <string name="exo_download_description">下载</string>
<string name="exo_download_notification_channel_name">下载内容</string> <string name="exo_download_notification_channel_name">下载内容</string>
<string name="exo_download_downloading">正在下载</string> <string name="exo_download_downloading">正在下载</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">全部重複播放</string> <string name="exo_controls_repeat_all_description">全部重複播放</string>
<string name="exo_controls_shuffle_description">隨機播放</string> <string name="exo_controls_shuffle_description">隨機播放</string>
<string name="exo_controls_fullscreen_description">全螢幕模式</string> <string name="exo_controls_fullscreen_description">全螢幕模式</string>
<string name="exo_controls_exit_vr_description">結束虛擬現實模式</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">下載</string> <string name="exo_download_description">下載</string>
<string name="exo_download_notification_channel_name">下載內容</string> <string name="exo_download_notification_channel_name">下載內容</string>
<string name="exo_download_downloading">正在下載</string> <string name="exo_download_downloading">正在下載</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">重複播放所有項目</string> <string name="exo_controls_repeat_all_description">重複播放所有項目</string>
<string name="exo_controls_shuffle_description">隨機播放</string> <string name="exo_controls_shuffle_description">隨機播放</string>
<string name="exo_controls_fullscreen_description">全螢幕模式</string> <string name="exo_controls_fullscreen_description">全螢幕模式</string>
<string name="exo_controls_exit_vr_description">結束虛擬實境模式</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">下載</string> <string name="exo_download_description">下載</string>
<string name="exo_download_notification_channel_name">下載</string> <string name="exo_download_notification_channel_name">下載</string>
<string name="exo_download_downloading">下載中</string> <string name="exo_download_downloading">下載中</string>

View File

@ -12,7 +12,7 @@
<string name="exo_controls_repeat_all_description">Phinda konke</string> <string name="exo_controls_repeat_all_description">Phinda konke</string>
<string name="exo_controls_shuffle_description">Shova</string> <string name="exo_controls_shuffle_description">Shova</string>
<string name="exo_controls_fullscreen_description">Imodi yesikrini esigcwele</string> <string name="exo_controls_fullscreen_description">Imodi yesikrini esigcwele</string>
<string name="exo_controls_exit_vr_description">Phuma kumodi ye-VR</string> <string name="exo_controls_vr_description">VR mode</string>
<string name="exo_download_description">Landa</string> <string name="exo_download_description">Landa</string>
<string name="exo_download_notification_channel_name">Ukulandwa</string> <string name="exo_download_notification_channel_name">Ukulandwa</string>
<string name="exo_download_downloading">Iyalanda</string> <string name="exo_download_downloading">Iyalanda</string>

View File

@ -35,5 +35,6 @@
<item name="exo_progress" type="id"/> <item name="exo_progress" type="id"/>
<item name="exo_buffering" type="id"/> <item name="exo_buffering" type="id"/>
<item name="exo_error_message" type="id"/> <item name="exo_error_message" type="id"/>
<item name="exo_vr" type="id"/>
</resources> </resources>

View File

@ -38,8 +38,8 @@
<string name="exo_controls_shuffle_description">Shuffle</string> <string name="exo_controls_shuffle_description">Shuffle</string>
<!-- Description for a media control button that toggles whether a video playback is fullscreen. [CHAR LIMIT=30] --> <!-- Description for a media control button that toggles whether a video playback is fullscreen. [CHAR LIMIT=30] -->
<string name="exo_controls_fullscreen_description">Fullscreen mode</string> <string name="exo_controls_fullscreen_description">Fullscreen mode</string>
<!-- Description for a media control button that exits VR mode. [CHAR LIMIT=30] --> <!-- Description for a media control button that toggles whether a video playback is in VR mode. [CHAR LIMIT=30] -->
<string name="exo_controls_exit_vr_description">Exit VR mode</string> <string name="exo_controls_vr_description">VR mode</string>
<!-- Description for a button that downloads a piece of media content onto the device. [CHAR LIMIT=20] --> <!-- Description for a button that downloads a piece of media content onto the device. [CHAR LIMIT=20] -->
<string name="exo_download_description">Download</string> <string name="exo_download_description">Download</string>
<!-- Default name for a notification channel corresponding to media downloads. [CHAR LIMIT=40] --> <!-- Default name for a notification channel corresponding to media downloads. [CHAR LIMIT=40] -->

View File

@ -56,4 +56,9 @@
<item name="android:contentDescription">@string/exo_controls_shuffle_description</item> <item name="android:contentDescription">@string/exo_controls_shuffle_description</item>
</style> </style>
<style name="ExoMediaButton.VR">
<item name="android:src">@drawable/exo_icon_vr</item>
<item name="android:contentDescription">@string/exo_controls_vr_description</item>
</style>
</resources> </resources>