Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70541bf561 | ||
|
|
48dd8e88e3 | ||
|
|
52c2e0899d | ||
|
|
9955d5b62f | ||
|
|
8e26247fa1 | ||
|
|
72924e2692 | ||
|
|
8c2c8d630f | ||
|
|
5ccf0baa6b | ||
|
|
8fff0ccdf2 | ||
|
|
35264bfb97 | ||
|
|
4c9b0dc8e9 | ||
|
|
4deb7caa83 | ||
|
|
45f1a512b4 | ||
|
|
ab95fdc087 | ||
|
|
df608b9ded | ||
|
|
6a4c81d160 | ||
|
|
040d658540 | ||
|
|
cbc9913e9c | ||
|
|
f007cbd5ee | ||
|
|
7351591df7 | ||
|
|
5222d4cbba | ||
|
|
ef9966815e | ||
| ad73440ce9 |
11
README.md
@@ -19,11 +19,11 @@ Project status:
|
||||
|
||||
## Screenshots
|
||||
|
||||
[<img src="screenshots/screenshot_1.png" width=150>](screenshots/screenshot_1.png)
|
||||
[<img src="screenshots/screenshot_2.png" width=150>](screenshots/screenshot_2.png)
|
||||
[<img src="screenshots/screenshot_3.png" width=150>](screenshots/screenshot_3.png)
|
||||
[<img src="screenshots/screenshot_4.png" width=150>](screenshots/screenshot_4.png)
|
||||
[<img src="screenshots/screenshot_5.png" width=150>](screenshots/screenshot_5.png)
|
||||
[<img src="screenshots/screenshot_1.png" width=160>](screenshots/screenshot_1.png)
|
||||
[<img src="screenshots/screenshot_2.png" width=160>](screenshots/screenshot_2.png)
|
||||
[<img src="screenshots/screenshot_3.png" width=160>](screenshots/screenshot_3.png)
|
||||
[<img src="screenshots/screenshot_4.png" width=160>](screenshots/screenshot_4.png)
|
||||
[<img src="screenshots/screenshot_5.png" width=160>](screenshots/screenshot_5.png)
|
||||
|
||||
## Description
|
||||
|
||||
@@ -35,6 +35,7 @@ NewPipe does not use any Google framework libraries, or the YouTube API. It only
|
||||
* Display general information about a video
|
||||
* Watch YouTube videos
|
||||
* Listen to YouTube videos (experimental)
|
||||
* Popup mode (floating player)
|
||||
* Select the streaming player to watch the video with
|
||||
* Download videos
|
||||
* Download audio only
|
||||
|
||||
@@ -8,8 +8,8 @@ android {
|
||||
applicationId "org.schabi.newpipe"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 25
|
||||
versionCode 31
|
||||
versionName "0.9.4"
|
||||
versionCode 32
|
||||
versionName "0.9.5"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
|
||||
@@ -19,6 +19,7 @@ import android.text.TextUtils;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
@@ -420,7 +421,10 @@ public class VideoDetailFragment extends BaseFragment implements StreamExtractor
|
||||
if (isLoading.get()) return;
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !PermissionHelper.checkSystemAlertWindowPermission(activity)) {
|
||||
Toast.makeText(activity, R.string.msg_popup_permission, Toast.LENGTH_LONG).show();
|
||||
Toast toast = Toast.makeText(activity, R.string.msg_popup_permission, Toast.LENGTH_LONG);
|
||||
TextView messageView = (TextView) toast.getView().findViewById(android.R.id.message);
|
||||
if (messageView != null) messageView.setGravity(Gravity.CENTER);
|
||||
toast.show();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,13 +7,14 @@ import android.app.Service;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
@@ -24,6 +25,7 @@ import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.RemoteViews;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||
@@ -58,14 +60,19 @@ public class PopupVideoPlayer extends Service {
|
||||
public static final String ACTION_OPEN_DETAIL = "org.schabi.newpipe.player.PopupVideoPlayer.OPEN_DETAIL";
|
||||
public static final String ACTION_REPEAT = "org.schabi.newpipe.player.PopupVideoPlayer.REPEAT";
|
||||
|
||||
private static final String POPUP_SAVED_WIDTH = "popup_saved_width";
|
||||
private static final String POPUP_SAVED_X = "popup_saved_x";
|
||||
private static final String POPUP_SAVED_Y = "popup_saved_y";
|
||||
|
||||
private WindowManager windowManager;
|
||||
private WindowManager.LayoutParams windowLayoutParams;
|
||||
private GestureDetector gestureDetector;
|
||||
|
||||
private float screenWidth, screenHeight;
|
||||
private float popupWidth, popupHeight;
|
||||
private float currentPopupHeight = 110.0f * Resources.getSystem().getDisplayMetrics().density;
|
||||
//private float minimumHeight = 100; // TODO: Use it when implementing the resize of the popup
|
||||
|
||||
private float minimumWidth, minimumHeight;
|
||||
private float maximumWidth, maximumHeight;
|
||||
|
||||
private final String setAlphaMethodName = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) ? "setImageAlpha" : "setAlpha";
|
||||
private NotificationManager notificationManager;
|
||||
@@ -114,6 +121,8 @@ public class PopupVideoPlayer extends Service {
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
updateScreenSize();
|
||||
updatePopupSize(windowLayoutParams.width, -1);
|
||||
checkPositionBounds();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -129,6 +138,8 @@ public class PopupVideoPlayer extends Service {
|
||||
currentExtractorWorker.cancel();
|
||||
currentExtractorWorker = null;
|
||||
}
|
||||
|
||||
savePositionAndSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -144,21 +155,33 @@ public class PopupVideoPlayer extends Service {
|
||||
private void initPopup() {
|
||||
if (DEBUG) Log.d(TAG, "initPopup() called");
|
||||
View rootView = View.inflate(this, R.layout.player_popup, null);
|
||||
|
||||
playerImpl.setup(rootView);
|
||||
|
||||
updateScreenSize();
|
||||
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
boolean popupRememberSizeAndPos = sharedPreferences.getBoolean(getString(R.string.popup_remember_size_pos_key), true);
|
||||
|
||||
float defaultSize = getResources().getDimension(R.dimen.popup_default_width);
|
||||
popupWidth = popupRememberSizeAndPos ? sharedPreferences.getFloat(POPUP_SAVED_WIDTH, defaultSize) : defaultSize;
|
||||
|
||||
windowLayoutParams = new WindowManager.LayoutParams(
|
||||
(int) getMinimumVideoWidth(currentPopupHeight), (int) currentPopupHeight,
|
||||
(int) popupWidth, (int) getMinimumVideoHeight(popupWidth),
|
||||
WindowManager.LayoutParams.TYPE_PHONE,
|
||||
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
|
||||
PixelFormat.TRANSLUCENT);
|
||||
|
||||
windowLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;
|
||||
|
||||
int centerX = (int) (screenWidth / 2f - popupWidth / 2f);
|
||||
int centerY = (int) (screenHeight / 2f - popupHeight / 2f);
|
||||
windowLayoutParams.x = popupRememberSizeAndPos ? sharedPreferences.getInt(POPUP_SAVED_X, centerX) : centerX;
|
||||
windowLayoutParams.y = popupRememberSizeAndPos ? sharedPreferences.getInt(POPUP_SAVED_Y, centerY) : centerY;
|
||||
|
||||
checkPositionBounds();
|
||||
|
||||
MySimpleOnGestureListener listener = new MySimpleOnGestureListener();
|
||||
gestureDetector = new GestureDetector(this, listener);
|
||||
gestureDetector.setIsLongpressEnabled(false);
|
||||
//gestureDetector.setIsLongpressEnabled(false);
|
||||
rootView.setOnTouchListener(listener);
|
||||
playerImpl.getLoadingPanel().setMinimumWidth(windowLayoutParams.width);
|
||||
playerImpl.getLoadingPanel().setMinimumHeight(windowLayoutParams.height);
|
||||
@@ -219,13 +242,13 @@ public class PopupVideoPlayer extends Service {
|
||||
notificationManager.notify(NOTIFICATION_ID, notBuilder.build());
|
||||
}
|
||||
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Misc
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
public void onVideoClose() {
|
||||
if (DEBUG) Log.d(TAG, "onVideoClose() called");
|
||||
savePositionAndSize();
|
||||
stopSelf();
|
||||
}
|
||||
|
||||
@@ -245,10 +268,23 @@ public class PopupVideoPlayer extends Service {
|
||||
// Utils
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
private float getMinimumVideoWidth(float height) {
|
||||
float width = height * (16.0f / 9.0f); // Respect the 16:9 ratio that most videos have
|
||||
if (DEBUG) Log.d(TAG, "getMinimumVideoWidth() called with: height = [" + height + "], returned: " + width);
|
||||
return width;
|
||||
private void checkPositionBounds() {
|
||||
if (windowLayoutParams.x > screenWidth - windowLayoutParams.width) windowLayoutParams.x = (int) (screenWidth - windowLayoutParams.width);
|
||||
if (windowLayoutParams.x < 0) windowLayoutParams.x = 0;
|
||||
if (windowLayoutParams.y > screenHeight - windowLayoutParams.height) windowLayoutParams.y = (int) (screenHeight - windowLayoutParams.height);
|
||||
if (windowLayoutParams.y < 0) windowLayoutParams.y = 0;
|
||||
}
|
||||
|
||||
private void savePositionAndSize() {
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(PopupVideoPlayer.this);
|
||||
sharedPreferences.edit().putInt(POPUP_SAVED_X, windowLayoutParams.x).apply();
|
||||
sharedPreferences.edit().putInt(POPUP_SAVED_Y, windowLayoutParams.y).apply();
|
||||
sharedPreferences.edit().putFloat(POPUP_SAVED_WIDTH, windowLayoutParams.width).apply();
|
||||
}
|
||||
|
||||
private float getMinimumVideoHeight(float width) {
|
||||
//if (DEBUG) Log.d(TAG, "getMinimumVideoHeight() called with: width = [" + width + "], returned: " + height);
|
||||
return width / (16.0f / 9.0f); // Respect the 16:9 ratio that most videos have
|
||||
}
|
||||
|
||||
private void updateScreenSize() {
|
||||
@@ -258,11 +294,39 @@ public class PopupVideoPlayer extends Service {
|
||||
screenWidth = metrics.widthPixels;
|
||||
screenHeight = metrics.heightPixels;
|
||||
if (DEBUG) Log.d(TAG, "updateScreenSize() called > screenWidth = " + screenWidth + ", screenHeight = " + screenHeight);
|
||||
|
||||
popupWidth = getResources().getDimension(R.dimen.popup_default_width);
|
||||
popupHeight = getMinimumVideoHeight(popupWidth);
|
||||
|
||||
minimumWidth = getResources().getDimension(R.dimen.popup_minimum_width);
|
||||
minimumHeight = getMinimumVideoHeight(minimumWidth);
|
||||
|
||||
maximumWidth = screenWidth;
|
||||
maximumHeight = screenHeight;
|
||||
}
|
||||
|
||||
private void updatePopupSize(int width, int height) {
|
||||
//if (DEBUG) Log.d(TAG, "updatePopupSize() called with: width = [" + width + "], height = [" + height + "]");
|
||||
|
||||
width = (int) (width > maximumWidth ? maximumWidth : width < minimumWidth ? minimumWidth : width);
|
||||
|
||||
if (height == -1) height = (int) getMinimumVideoHeight(width);
|
||||
else height = (int) (height > maximumHeight ? maximumHeight : height < minimumHeight ? minimumHeight : height);
|
||||
|
||||
windowLayoutParams.width = width;
|
||||
windowLayoutParams.height = height;
|
||||
popupWidth = width;
|
||||
popupHeight = height;
|
||||
|
||||
if (DEBUG) Log.d(TAG, "updatePopupSize() updated values: width = [" + width + "], height = [" + height + "]");
|
||||
windowManager.updateViewLayout(playerImpl.getRootView(), windowLayoutParams);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private class VideoPlayerImpl extends VideoPlayer {
|
||||
private TextView resizingIndicator;
|
||||
|
||||
VideoPlayerImpl() {
|
||||
super("VideoPlayerImpl" + PopupVideoPlayer.TAG, PopupVideoPlayer.this);
|
||||
}
|
||||
@@ -271,13 +335,20 @@ public class PopupVideoPlayer extends Service {
|
||||
public void playUrl(String url, String format, boolean autoPlay) {
|
||||
super.playUrl(url, format, autoPlay);
|
||||
|
||||
windowLayoutParams.width = (int) getMinimumVideoWidth(currentPopupHeight);
|
||||
windowLayoutParams.width = (int) popupWidth;
|
||||
windowLayoutParams.height = (int) getMinimumVideoHeight(popupWidth);
|
||||
windowManager.updateViewLayout(getRootView(), windowLayoutParams);
|
||||
|
||||
notBuilder = createNotification();
|
||||
startForeground(NOTIFICATION_ID, notBuilder.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initViews(View rootView) {
|
||||
super.initViews(rootView);
|
||||
resizingIndicator = (TextView) rootView.findViewById(R.id.resizing_indicator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
super.destroy();
|
||||
@@ -422,12 +493,21 @@ public class PopupVideoPlayer extends Service {
|
||||
showAndAnimateControl(R.drawable.ic_replay_white, false);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
public TextView getResizingIndicator() {
|
||||
return resizingIndicator;
|
||||
}
|
||||
}
|
||||
|
||||
private class MySimpleOnGestureListener extends GestureDetector.SimpleOnGestureListener implements View.OnTouchListener {
|
||||
private int initialPopupX, initialPopupY;
|
||||
private boolean isMoving;
|
||||
|
||||
private int onDownPopupWidth = 0;
|
||||
private boolean isResizing;
|
||||
private boolean isResizingRightSide;
|
||||
|
||||
@Override
|
||||
public boolean onDoubleTap(MotionEvent e) {
|
||||
if (DEBUG) Log.d(TAG, "onDoubleTap() called with: e = [" + e + "]" + "rawXy = " + e.getRawX() + ", " + e.getRawY() + ", xy = " + e.getX() + ", " + e.getY());
|
||||
@@ -450,15 +530,32 @@ public class PopupVideoPlayer extends Service {
|
||||
if (DEBUG) Log.d(TAG, "onDown() called with: e = [" + e + "]");
|
||||
initialPopupX = windowLayoutParams.x;
|
||||
initialPopupY = windowLayoutParams.y;
|
||||
popupWidth = playerImpl.getRootView().getWidth();
|
||||
popupHeight = playerImpl.getRootView().getHeight();
|
||||
popupWidth = windowLayoutParams.width;
|
||||
popupHeight = windowLayoutParams.height;
|
||||
onDownPopupWidth = windowLayoutParams.width;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLongPress(MotionEvent e) {
|
||||
if (DEBUG) Log.d(TAG, "onLongPress() called with: e = [" + e + "]");
|
||||
playerImpl.showAndAnimateControl(-1, true);
|
||||
playerImpl.getLoadingPanel().setVisibility(View.GONE);
|
||||
playerImpl.animateView(playerImpl.getControlsRoot(), false, 0, 0);
|
||||
playerImpl.animateView(playerImpl.getCurrentDisplaySeek(), false, 0, 0);
|
||||
playerImpl.animateView(playerImpl.getResizingIndicator(), true, 200, 0);
|
||||
|
||||
isResizing = true;
|
||||
isResizingRightSide = e.getRawX() > windowLayoutParams.x + (windowLayoutParams.width / 2f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
||||
if (!isMoving || playerImpl.getControlsRoot().getAlpha() != 1f) playerImpl.animateView(playerImpl.getControlsRoot(), true, 30, 0);
|
||||
if (isResizing) return false;
|
||||
|
||||
if (!isMoving || playerImpl.getControlsRoot().getAlpha() != 1f) playerImpl.animateView(playerImpl.getControlsRoot(), true, 0, 0);
|
||||
isMoving = true;
|
||||
|
||||
float diffX = (int) (e2.getRawX() - e1.getRawX()), posX = (int) (initialPopupX + diffX);
|
||||
float diffY = (int) (e2.getRawY() - e1.getRawY()), posY = (int) (initialPopupY + diffY);
|
||||
|
||||
@@ -477,7 +574,7 @@ public class PopupVideoPlayer extends Service {
|
||||
", e2.getRaw = [" + e2.getRawX() + ", " + e2.getRawY() + "]" +
|
||||
", distanceXy = [" + distanceX + ", " + distanceY + "]" +
|
||||
", posXy = [" + posX + ", " + posY + "]" +
|
||||
", popupWh rootView.get wh = [" + popupWidth + " x " + popupHeight + "]");
|
||||
", popupWh = [" + popupWidth + " x " + popupHeight + "]");
|
||||
windowManager.updateViewLayout(playerImpl.getRootView(), windowLayoutParams);
|
||||
return true;
|
||||
}
|
||||
@@ -492,9 +589,31 @@ public class PopupVideoPlayer extends Service {
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
gestureDetector.onTouchEvent(event);
|
||||
if (event.getAction() == MotionEvent.ACTION_UP && isMoving) {
|
||||
isMoving = false;
|
||||
onScrollEnd();
|
||||
if (event.getAction() == MotionEvent.ACTION_MOVE && isResizing && !isMoving) {
|
||||
//if (DEBUG) Log.d(TAG, "onTouch() ACTION_MOVE > v = [" + v + "], e1.getRaw = [" + event.getRawX() + ", " + event.getRawY() + "]");
|
||||
int width;
|
||||
if (isResizingRightSide) width = (int) event.getRawX() - windowLayoutParams.x;
|
||||
else {
|
||||
width = (int) (windowLayoutParams.width + (windowLayoutParams.x - event.getRawX()));
|
||||
if (width > minimumWidth) windowLayoutParams.x = initialPopupX - (width - onDownPopupWidth);
|
||||
}
|
||||
if (width <= maximumWidth && width >= minimumWidth) updatePopupSize(width, -1);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||
if (DEBUG) Log.d(TAG, "onTouch() ACTION_UP > v = [" + v + "], e1.getRaw = [" + event.getRawX() + ", " + event.getRawY() + "]");
|
||||
if (isMoving) {
|
||||
isMoving = false;
|
||||
onScrollEnd();
|
||||
}
|
||||
|
||||
if (isResizing) {
|
||||
isResizing = false;
|
||||
playerImpl.animateView(playerImpl.getResizingIndicator(), false, 100, 0);
|
||||
playerImpl.changeState(playerImpl.getCurrentState());
|
||||
}
|
||||
savePositionAndSize();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/black"
|
||||
android:gravity="center">
|
||||
android:gravity="center"
|
||||
tools:layout_width="@dimen/popup_default_width"
|
||||
tools:layout_height="101.25dp">
|
||||
|
||||
|
||||
<com.google.android.exoplayer2.ui.AspectRatioFrameLayout
|
||||
@@ -189,4 +191,21 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:indeterminate="true"/>
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/resizing_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="left|top"
|
||||
android:background="#6e000000"
|
||||
android:gravity="center"
|
||||
android:padding="5dp"
|
||||
android:text="@string/popup_resizing_indicator_title"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold"
|
||||
android:visibility="gone"
|
||||
tools:ignore="RtlHardcoded"
|
||||
tools:visibility="visible"/>
|
||||
</FrameLayout>
|
||||
@@ -183,4 +183,14 @@ abrir en ventanu emerxente</string>
|
||||
<string name="reCaptcha_title">Prueba reCAPTCHA</string>
|
||||
<string name="recaptcha_request_toast">Prueba reCAPTCHA solicitada</string>
|
||||
|
||||
<string name="controls_background_title">Fondu</string>
|
||||
<string name="controls_popup_title">Ventanu emerxente</string>
|
||||
|
||||
<string name="default_popup_resolution_title">Resolución por defeutu de ventanu emerxente</string>
|
||||
<string name="show_higher_resolutions_title">Amosar resoluciones más altes</string>
|
||||
<string name="show_higher_resolutions_summary">Namái dellos preseos sofiten vídeos en 2k/4k</string>
|
||||
<string name="filter">Peñera</string>
|
||||
<string name="refresh">Refrescar</string>
|
||||
<string name="clear">Llimpiar</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -183,4 +183,5 @@ Chcete restartovat ihned?</string>
|
||||
<string name="msg_popup_permission">Toto oprávnění je vyžadováno pro
|
||||
otevření ve vyskakovacím okně</string>
|
||||
|
||||
<string name="use_old_player_title">Použít starý přehrávač</string>
|
||||
</resources>
|
||||
|
||||
@@ -199,4 +199,7 @@ Möchten Sie jetzt neu starten?</string>
|
||||
<string name="default_popup_resolution_title">Standardauflösung des Popups</string>
|
||||
<string name="show_higher_resolutions_title">Zeige höhere Auflösungen an</string>
|
||||
<string name="show_higher_resolutions_summary">Nur einige Geräte unterstützen das Abspielen von 2k-/4k-Videos</string>
|
||||
<string name="controls_background_title">Hintergrund</string>
|
||||
<string name="controls_popup_title">Popup</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="view_count_text">%1$s reproducciones</string>
|
||||
<string name="view_count_text">%1$s visualizaciones</string>
|
||||
<string name="upload_date_text">Publicado en %1$s</string>
|
||||
<string name="no_player_found">No se encontró ningún reproductor de vídeo. ¿Desea instalar VLC?</string>
|
||||
<string name="install">Instalar</string>
|
||||
@@ -188,11 +188,18 @@ abrir en modo popup</string>
|
||||
<string name="popup_playing_toast">Reproduciendo en modo popup</string>
|
||||
<string name="use_old_player_title">Usar reproductor antiguo</string>
|
||||
<string name="use_old_player_summary">Versión antigua en reproductor Mediaframework.</string>
|
||||
<string name="preferred_video_format_title">Formato de vídeo preferido</string>
|
||||
<string name="preferred_video_format_title">Formato de vídeo por defecto</string>
|
||||
<string name="disabled">Desactivado</string>
|
||||
|
||||
<string name="subscriber_plural">Suscriptores</string>
|
||||
<string name="show_higher_resolutions_title">Mostrar resoluciones más altas</string>
|
||||
<string name="show_higher_resolutions_summary">Solo algunos dispositivos soportan reproducción de vídeos de 2k/4k</string>
|
||||
<string name="default_popup_resolution_title">Resolución predeterminada del popup</string>
|
||||
<string name="show_higher_resolutions_summary">Sólo algunos dispositivos soportan reproducción de vídeos en 2K/4K</string>
|
||||
<string name="default_popup_resolution_title">Resolución del popup por defecto</string>
|
||||
<string name="controls_background_title">Segundo plano</string>
|
||||
<string name="controls_popup_title">Popup</string>
|
||||
|
||||
<string name="filter">Filtro</string>
|
||||
<string name="refresh">Actualizar</string>
|
||||
<string name="clear">Limpiar</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -194,4 +194,11 @@ membuka di mode popup</string>
|
||||
<string name="default_popup_resolution_title">Resolusi popup bawaan</string>
|
||||
<string name="show_higher_resolutions_title">Tampilkan resolusi yang lebih tinggi</string>
|
||||
<string name="show_higher_resolutions_summary">Hanya perangkat tertentu yang mendukung pemutaran video 2k/4k</string>
|
||||
<string name="controls_background_title">Latar Belakang</string>
|
||||
<string name="controls_popup_title">Popup</string>
|
||||
|
||||
<string name="refresh">Segarkan</string>
|
||||
<string name="clear">Bersihkan</string>
|
||||
|
||||
<string name="filter">Filter</string>
|
||||
</resources>
|
||||
|
||||
@@ -201,4 +201,11 @@
|
||||
<string name="default_popup_resolution_title">デフォルトのポップアップ解像度</string>
|
||||
<string name="show_higher_resolutions_title">高い解像度で表示</string>
|
||||
<string name="show_higher_resolutions_summary">一部のデバイスのみ 2K/4K ビデオの再生をサポートしています</string>
|
||||
<string name="controls_background_title">背景</string>
|
||||
<string name="controls_popup_title">ポップアップ</string>
|
||||
|
||||
<string name="filter">フィルター</string>
|
||||
<string name="refresh">更新</string>
|
||||
<string name="clear">クリア</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -192,4 +192,11 @@ te openen in pop-upmodus</string>
|
||||
<string name="default_popup_resolution_title">Standaardresolutie voor pop-up</string>
|
||||
<string name="show_higher_resolutions_title">Hogere resoluties weergeven</string>
|
||||
<string name="show_higher_resolutions_summary">Video\'s afspelen in 2k/4k wordt maar op sommige apparaten ondersteund</string>
|
||||
<string name="controls_background_title">Achtergrond</string>
|
||||
<string name="controls_popup_title">Pop-up</string>
|
||||
|
||||
<string name="filter">Filter</string>
|
||||
<string name="refresh">Verversen</string>
|
||||
<string name="clear">Wissen</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -175,4 +175,10 @@ abrir em modo popup</string>
|
||||
|
||||
<string name="popup_mode_share_menu_title">Modo de popup NewPipe</string>
|
||||
|
||||
<string name="filter">Filtro</string>
|
||||
<string name="refresh">Atualizar</string>
|
||||
<string name="clear">Limpar</string>
|
||||
|
||||
<string name="controls_popup_title">Popup</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -196,4 +196,11 @@ otvorenie okna na popredí</string>
|
||||
<string name="default_popup_resolution_title">Predvolená veľkosť okna</string>
|
||||
<string name="show_higher_resolutions_title">Zobraziť vyššie rozlíšenie</string>
|
||||
<string name="show_higher_resolutions_summary">Len niektoré zariadenia podporujú videá 2k/4k</string>
|
||||
<string name="controls_background_title">Pozadie</string>
|
||||
<string name="controls_popup_title">V okne</string>
|
||||
|
||||
<string name="filter">Filter</string>
|
||||
<string name="refresh">Obnoviť</string>
|
||||
<string name="clear">Vyčistiť</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -199,4 +199,11 @@ odpiranje v pojavnem načinu</string>
|
||||
<string name="show_higher_resolutions_title">Pokaži večje ločljivosti</string>
|
||||
<string name="show_higher_resolutions_summary">Predvajanje posnetkov 2k/4k omogočajo le nekatere naprave.</string>
|
||||
<string name="subscriber_plural">naročniki</string>
|
||||
<string name="controls_background_title">Ozadje</string>
|
||||
<string name="controls_popup_title">Pojavno okno</string>
|
||||
|
||||
<string name="filter">Filter</string>
|
||||
<string name="refresh">Osveži</string>
|
||||
<string name="clear">Počisti</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -202,4 +202,11 @@
|
||||
<string name="show_higher_resolutions_title">Прикажи више резолуције</string>
|
||||
<string name="show_higher_resolutions_summary">Само неки уређаји подржавају пуштање 2k/4k видеа</string>
|
||||
<string name="subscriber_plural">пријављених</string>
|
||||
<string name="filter">Филтер</string>
|
||||
<string name="refresh">Освежи</string>
|
||||
<string name="clear">Очисти</string>
|
||||
|
||||
<string name="controls_background_title">Позадина</string>
|
||||
<string name="controls_popup_title">Прозорче</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<dimen name="popup_default_width">230dp</dimen>
|
||||
<dimen name="popup_minimum_width">140dp</dimen>
|
||||
<!-- Video Item Detail View Dimensions-->
|
||||
<!-- Text Size -->
|
||||
<dimen name="channel_item_detail_title_text_size">18sp</dimen>
|
||||
|
||||
@@ -189,4 +189,11 @@ açmak için gerekli</string>
|
||||
<string name="reCaptcha_title">reCAPTCHA Formu</string>
|
||||
<string name="recaptcha_request_toast">reCAPTCHA Formu istendi</string>
|
||||
|
||||
<string name="controls_background_title">Arkaplan</string>
|
||||
<string name="controls_popup_title">Açılır Pencere</string>
|
||||
|
||||
<string name="filter">Süzgeç</string>
|
||||
<string name="refresh">Yenile</string>
|
||||
<string name="clear">Temizle</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -17,7 +17,8 @@
|
||||
<dimen name="video_item_search_duration_horizontal_padding">5sp</dimen>
|
||||
<dimen name="video_item_search_duration_margin">2sp</dimen>
|
||||
<!-- Miscellaneous -->
|
||||
|
||||
<dimen name="popup_default_width">180dp</dimen>
|
||||
<dimen name="popup_minimum_width">120dp</dimen>
|
||||
<!-- Video Item Detail View Dimensions-->
|
||||
<!-- Text Size -->
|
||||
<dimen name="video_item_detail_title_text_size">16sp</dimen>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<resources translatable="false">
|
||||
<!-- Categories -->
|
||||
<string name="settings_category_video_audio" translatable="false">settings_category_video_audio</string>
|
||||
<string name="settings_category_popup" translatable="false">settings_category_popup</string>
|
||||
<string name="settings_category_appearance" translatable="false">settings_category_appearance</string>
|
||||
<string name="settings_content_options" translatable="false">settings_content_options</string>
|
||||
<string name="settings_category_other" translatable="false">settings_category_other</string>
|
||||
@@ -27,6 +28,8 @@
|
||||
<item>144p</item>
|
||||
</string-array>
|
||||
|
||||
<string name="popup_remember_size_pos_key" translatable="false">popup_remember_size_pos_key</string>
|
||||
|
||||
<string name="default_popup_resolution_key" translatable="false">default_popup_resolution_key</string>
|
||||
<string name="default_popup_resolution_value" translatable="false">480p</string>
|
||||
|
||||
|
||||
@@ -59,6 +59,8 @@
|
||||
<string name="light_theme_title">Light</string>
|
||||
<string name="dark_theme_title">Dark</string>
|
||||
<string name="black_theme_title">Black</string>
|
||||
<string name="popup_remember_size_pos_title">Remember popup size and position</string>
|
||||
<string name="popup_remember_size_pos_summary">Remember the last size and position set to the popup</string>
|
||||
|
||||
<string name="download_dialog_title">Download</string>
|
||||
<string-array name="download_options">
|
||||
@@ -86,6 +88,7 @@
|
||||
<string name="similar_videos_btn_text">Similar videos</string>
|
||||
<string name="search_language_title">Preferred content language</string>
|
||||
<string name="settings_category_video_audio_title">Video & Audio</string>
|
||||
<string name="settings_category_popup_title">Popup</string>
|
||||
<string name="settings_category_appearance_title">Appearance</string>
|
||||
<string name="settings_category_other_title">Other</string>
|
||||
<string name="background_player_time_text" translatable="false">%1$s - NewPipe</string>
|
||||
@@ -109,6 +112,7 @@
|
||||
<string name="filter">Filter</string>
|
||||
<string name="refresh">Refresh</string>
|
||||
<string name="clear">Clear</string>
|
||||
<string name="popup_resizing_indicator_title">Resizing</string>
|
||||
|
||||
<!-- error strings -->
|
||||
<string name="general_error">Error</string>
|
||||
|
||||
@@ -27,14 +27,6 @@
|
||||
android:summary="%s"
|
||||
android:defaultValue="@string/default_resolution_value"/>
|
||||
|
||||
<ListPreference
|
||||
android:key="@string/default_popup_resolution_key"
|
||||
android:title="@string/default_popup_resolution_title"
|
||||
android:entries="@array/resolution_list"
|
||||
android:entryValues="@array/resolution_list"
|
||||
android:summary="%s"
|
||||
android:defaultValue="@string/default_popup_resolution_value"/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/show_higher_resolutions_key"
|
||||
android:title="@string/show_higher_resolutions_title"
|
||||
@@ -64,6 +56,28 @@
|
||||
android:summary="@string/use_old_player_summary"
|
||||
android:defaultValue="false"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="@string/settings_category_popup"
|
||||
android:title="@string/settings_category_popup_title"
|
||||
android:textAllCaps="true">
|
||||
|
||||
<ListPreference
|
||||
android:key="@string/default_popup_resolution_key"
|
||||
android:title="@string/default_popup_resolution_title"
|
||||
android:entries="@array/resolution_list"
|
||||
android:entryValues="@array/resolution_list"
|
||||
android:summary="%s"
|
||||
android:defaultValue="@string/default_popup_resolution_value"/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/popup_remember_size_pos_key"
|
||||
android:title="@string/popup_remember_size_pos_title"
|
||||
android:summary="@string/popup_remember_size_pos_summary"
|
||||
android:defaultValue="true"/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="@string/settings_category_appearance"
|
||||
android:title="@string/settings_category_appearance_title"
|
||||
|
||||
|
Before Width: | Height: | Size: 324 KiB After Width: | Height: | Size: 302 KiB |
|
Before Width: | Height: | Size: 266 KiB After Width: | Height: | Size: 324 KiB |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 399 KiB |
|
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 185 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 241 KiB |