mirror of
https://github.com/androidx/media.git
synced 2025-05-10 00:59:51 +08:00
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:
parent
194d0f3331
commit
5de17b9adc
@ -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)).
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
27
extensions/gvr/src/main/res/layout/vr_ui.xml
Normal file
27
extensions/gvr/src/main/res/layout/vr_ui.xml
Normal 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>
|
19
extensions/gvr/src/main/res/values/styles.xml
Normal file
19
extensions/gvr/src/main/res/values/styles.xml
Normal 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>
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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.
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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] -->
|
||||||
|
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user