From 52f82ed2280918ec5c4c3d5c09a9f6fc6d5e6bec Mon Sep 17 00:00:00 2001
From: k1rakishou
Date: Fri, 4 Oct 2019 21:47:01 +0300
Subject: [PATCH 0001/1194] Show video thumbnail on the lock screen
---
.../newpipe/player/BackgroundPlayer.java | 60 ++++++++++++++-----
.../player/helper/MediaSessionManager.java | 43 +++++++++++--
.../org/schabi/newpipe/util/BitmapUtils.java | 42 +++++++++++++
3 files changed, 124 insertions(+), 21 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index ab07ded22..4bcd719c2 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -25,6 +25,7 @@ import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.IBinder;
@@ -48,6 +49,7 @@ import org.schabi.newpipe.player.helper.LockManager;
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
import org.schabi.newpipe.player.resolver.AudioPlaybackResolver;
import org.schabi.newpipe.player.resolver.MediaSourceTag;
+import org.schabi.newpipe.util.BitmapUtils;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
@@ -189,18 +191,37 @@ public final class BackgroundPlayer extends Service {
setupNotification(notRemoteView);
setupNotification(bigNotRemoteView);
- NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.notification_channel_id))
- .setOngoing(true)
- .setSmallIcon(R.drawable.ic_newpipe_triangle_white)
- .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
- .setCustomContentView(notRemoteView)
- .setCustomBigContentView(bigNotRemoteView);
+ NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.notification_channel_id));
+ builder.setOngoing(true);
+ builder.setSmallIcon(R.drawable.ic_newpipe_triangle_white);
+ builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
+ builder.setCustomContentView(notRemoteView);
+ builder.setCustomBigContentView(bigNotRemoteView);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ basePlayerImpl.mediaSessionManager.setLockScreenArt(
+ builder,
+ getCenteredThumbnailBitmap()
+ );
+ }
+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
builder.setPriority(NotificationCompat.PRIORITY_MAX);
}
return builder;
}
+ @Nullable
+ private Bitmap getCenteredThumbnailBitmap() {
+ int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
+ int screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
+
+ return BitmapUtils.centerCrop(
+ basePlayerImpl.getThumbnail(),
+ screenWidth,
+ screenHeight);
+ }
+
private void setupNotification(RemoteViews remoteViews) {
if (basePlayerImpl == null) return;
@@ -248,8 +269,10 @@ public final class BackgroundPlayer extends Service {
//if (DEBUG) Log.d(TAG, "updateNotification() called with: drawableId = [" + drawableId + "]");
if (notBuilder == null) return;
if (drawableId != -1) {
- if (notRemoteView != null) notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
- if (bigNotRemoteView != null) bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
+ if (notRemoteView != null)
+ notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
+ if (bigNotRemoteView != null)
+ bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
}
notificationManager.notify(NOTIFICATION_ID, notBuilder.build());
}
@@ -275,7 +298,8 @@ public final class BackgroundPlayer extends Service {
protected class BasePlayerImpl extends BasePlayer {
- @NonNull final private AudioPlaybackResolver resolver;
+ @NonNull
+ final private AudioPlaybackResolver resolver;
private int cachedDuration;
private String cachedDurationString;
@@ -294,8 +318,10 @@ public final class BackgroundPlayer extends Service {
super.handleIntent(intent);
resetNotification();
- if (bigNotRemoteView != null) bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
- if (notRemoteView != null) notRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
+ if (bigNotRemoteView != null)
+ bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
+ if (notRemoteView != null)
+ notRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
startForeground(NOTIFICATION_ID, notBuilder.build());
}
@@ -330,6 +356,7 @@ public final class BackgroundPlayer extends Service {
updateNotificationThumbnail();
updateNotification(-1);
}
+
/*//////////////////////////////////////////////////////////////////////////
// States Implementation
//////////////////////////////////////////////////////////////////////////*/
@@ -352,9 +379,10 @@ public final class BackgroundPlayer extends Service {
if (!shouldUpdateOnProgress) return;
resetNotification();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/) updateNotificationThumbnail();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/)
+ updateNotificationThumbnail();
if (bigNotRemoteView != null) {
- if(cachedDuration != duration) {
+ if (cachedDuration != duration) {
cachedDuration = duration;
cachedDurationString = getTimeString(duration);
}
@@ -382,8 +410,10 @@ public final class BackgroundPlayer extends Service {
@Override
public void destroy() {
super.destroy();
- if (notRemoteView != null) notRemoteView.setImageViewBitmap(R.id.notificationCover, null);
- if (bigNotRemoteView != null) bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, null);
+ if (notRemoteView != null)
+ notRemoteView.setImageViewBitmap(R.id.notificationCover, null);
+ if (bigNotRemoteView != null)
+ bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, null);
}
/*//////////////////////////////////////////////////////////////////////////
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
index a5c703837..ec53e72fe 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
@@ -2,12 +2,18 @@ package org.schabi.newpipe.player.helper;
import android.content.Context;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.media.MediaMetadata;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+import android.support.v4.app.NotificationCompat;
+import android.support.v4.media.MediaMetadataCompat;
+import android.support.v4.media.session.MediaButtonReceiver;
import android.support.v4.media.session.MediaSessionCompat;
import android.view.KeyEvent;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.media.session.MediaButtonReceiver;
+import android.support.v4.media.app.NotificationCompat.MediaStyle;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
@@ -40,13 +46,38 @@ public class MediaSessionManager {
return MediaButtonReceiver.handleIntent(mediaSession, intent);
}
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ public void setLockScreenArt(
+ NotificationCompat.Builder builder,
+ @Nullable Bitmap thumbnailBitmap
+ ) {
+ if (thumbnailBitmap == null) {
+ return;
+ }
+
+ if (!mediaSession.isActive()) {
+ return;
+ }
+
+ mediaSession.setMetadata(
+ new MediaMetadataCompat.Builder()
+ .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, thumbnailBitmap)
+ .build()
+ );
+
+ MediaStyle mediaStyle = new MediaStyle()
+ .setMediaSession(mediaSession.getSessionToken());
+
+ builder.setStyle(mediaStyle);
+ }
+
/**
* Should be called on player destruction to prevent leakage.
- * */
+ */
public void dispose() {
this.sessionConnector.setPlayer(null);
this.sessionConnector.setQueueNavigator(null);
this.mediaSession.setActive(false);
this.mediaSession.release();
- }
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
new file mode 100644
index 000000000..2dac94912
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
@@ -0,0 +1,42 @@
+package org.schabi.newpipe.util;
+
+import android.graphics.Bitmap;
+import android.support.annotation.Nullable;
+
+public class BitmapUtils {
+
+ @Nullable
+ public static Bitmap centerCrop(Bitmap inputBitmap, int newWidth, int newHeight) {
+ if (inputBitmap == null || inputBitmap.isRecycled()) {
+ return null;
+ }
+
+ float sourceWidth = inputBitmap.getWidth();
+ float sourceHeight = inputBitmap.getHeight();
+
+ float xScale = newWidth / sourceWidth;
+ float yScale = newHeight / sourceHeight;
+
+ float newXScale;
+ float newYScale;
+
+ if (yScale > xScale) {
+ newXScale = (1.0f / yScale) * xScale;
+ newYScale = 1.0f;
+ } else {
+ newXScale = 1.0f;
+ newYScale = (1.0f / xScale) * yScale;
+ }
+
+ float scaledWidth = newXScale * sourceWidth;
+ float scaledHeight = newYScale * sourceHeight;
+
+ int left = (int) ((sourceWidth - scaledWidth) / 2);
+ int top = (int) ((sourceHeight - scaledHeight) / 2);
+ int width = (int) scaledWidth;
+ int height = (int) scaledHeight;
+
+ return Bitmap.createBitmap(inputBitmap, left, top, width, height);
+ }
+
+}
From cf13f5ca56950944f5ab44e8c00c8c7566e55ed2 Mon Sep 17 00:00:00 2001
From: k1rakishou
Date: Fri, 8 Nov 2019 20:47:42 +0300
Subject: [PATCH 0002/1194] Rebase onto the latest dev, update appcompat
dependencies to use androidx
---
.../player/helper/MediaSessionManager.java | 21 +++++++++++--------
.../org/schabi/newpipe/util/BitmapUtils.java | 3 ++-
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
index ec53e72fe..b75ddb706 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
@@ -5,15 +5,16 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.media.MediaMetadata;
import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.v4.app.NotificationCompat;
import android.support.v4.media.MediaMetadataCompat;
-import android.support.v4.media.session.MediaButtonReceiver;
import android.support.v4.media.session.MediaSessionCompat;
import android.view.KeyEvent;
-import android.support.v4.media.app.NotificationCompat.MediaStyle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.app.NotificationCompat;
+import androidx.media.session.MediaButtonReceiver;
+import androidx.media.app.NotificationCompat.MediaStyle;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
@@ -25,8 +26,10 @@ import org.schabi.newpipe.player.mediasession.PlayQueuePlaybackController;
public class MediaSessionManager {
private static final String TAG = "MediaSessionManager";
- @NonNull private final MediaSessionCompat mediaSession;
- @NonNull private final MediaSessionConnector sessionConnector;
+ @NonNull
+ private final MediaSessionCompat mediaSession;
+ @NonNull
+ private final MediaSessionConnector sessionConnector;
public MediaSessionManager(@NonNull final Context context,
@NonNull final Player player,
@@ -72,7 +75,7 @@ public class MediaSessionManager {
}
/**
- * Should be called on player destruction to prevent leakage.
+ * Should be called on player destruction to prevent leakage.BitmapUtils
*/
public void dispose() {
this.sessionConnector.setPlayer(null);
diff --git a/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
index 2dac94912..a0e7de4ac 100644
--- a/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
+++ b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
@@ -1,7 +1,8 @@
package org.schabi.newpipe.util;
import android.graphics.Bitmap;
-import android.support.annotation.Nullable;
+
+import androidx.annotation.Nullable;
public class BitmapUtils {
From e8437052d8565ab7c524c96186a69528a30f5a1c Mon Sep 17 00:00:00 2001
From: k1rakishou
Date: Thu, 28 Nov 2019 21:46:37 +0300
Subject: [PATCH 0003/1194] Add a setting for the lock screen thumbnail feature
---
.../newpipe/player/BackgroundPlayer.java | 28 ++++++++++++++++---
.../player/helper/MediaSessionManager.java | 14 ++++++++++
app/src/main/res/values/settings_keys.xml | 1 +
app/src/main/res/values/strings.xml | 2 ++
app/src/main/res/xml/video_audio_settings.xml | 7 +++++
5 files changed, 48 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index 4bcd719c2..521daf184 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -25,13 +25,17 @@ import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.IBinder;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
+
+import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.RemoteViews;
@@ -77,6 +81,7 @@ public final class BackgroundPlayer extends Service {
private BasePlayerImpl basePlayerImpl;
private LockManager lockManager;
+ private SharedPreferences sharedPreferences;
/*//////////////////////////////////////////////////////////////////////////
// Service-Activity Binder
@@ -106,6 +111,7 @@ public final class BackgroundPlayer extends Service {
if (DEBUG) Log.d(TAG, "onCreate() called");
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
lockManager = new LockManager(this);
+ sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
ThemeHelper.setTheme(this);
basePlayerImpl = new BasePlayerImpl(this);
@@ -199,10 +205,7 @@ public final class BackgroundPlayer extends Service {
builder.setCustomBigContentView(bigNotRemoteView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- basePlayerImpl.mediaSessionManager.setLockScreenArt(
- builder,
- getCenteredThumbnailBitmap()
- );
+ setLockScreenThumbnail(builder);
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
@@ -211,6 +214,23 @@ public final class BackgroundPlayer extends Service {
return builder;
}
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ private void setLockScreenThumbnail(NotificationCompat.Builder builder) {
+ boolean isLockScreenThumbnailEnabled = sharedPreferences.getBoolean(
+ getString(R.string.enable_lock_screen_video_thumbnail_key),
+ true
+ );
+
+ if (isLockScreenThumbnailEnabled) {
+ basePlayerImpl.mediaSessionManager.setLockScreenArt(
+ builder,
+ getCenteredThumbnailBitmap()
+ );
+ } else {
+ basePlayerImpl.mediaSessionManager.clearLockScreenArt(builder);
+ }
+ }
+
@Nullable
private Bitmap getCenteredThumbnailBitmap() {
int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
index b75ddb706..64022e39c 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
@@ -74,6 +74,20 @@ public class MediaSessionManager {
builder.setStyle(mediaStyle);
}
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ public void clearLockScreenArt(NotificationCompat.Builder builder) {
+ mediaSession.setMetadata(
+ new MediaMetadataCompat.Builder()
+ .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, null)
+ .build()
+ );
+
+ MediaStyle mediaStyle = new MediaStyle()
+ .setMediaSession(mediaSession.getSessionToken());
+
+ builder.setStyle(mediaStyle);
+ }
+
/**
* Should be called on player destruction to prevent leakage.BitmapUtils
*/
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 80f2bb1f4..109010b4e 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -152,6 +152,7 @@
main_page_content
enable_playback_resume
enable_playback_state_lists
+ enable_lock_screen_video_thumbnail
import_data
export_data
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a34b00ea9..16cf110a2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -58,7 +58,9 @@
Kore app not found. Install it?
org.xbmc.kore
Show \"Play with Kodi\" option
+ Enable lock screen video thumbnail
Display an option to play a video via Kodi media center
+ When using the background player a video thumbnail will be displayed on the lock screen
Audio
Default audio format
Default video format
diff --git a/app/src/main/res/xml/video_audio_settings.xml b/app/src/main/res/xml/video_audio_settings.xml
index 4e1b1f8b2..a814fe0a9 100644
--- a/app/src/main/res/xml/video_audio_settings.xml
+++ b/app/src/main/res/xml/video_audio_settings.xml
@@ -81,6 +81,13 @@
android:summary="@string/show_play_with_kodi_summary"
android:title="@string/show_play_with_kodi_title"/>
+
+
Date: Fri, 20 Sep 2019 16:02:16 +0700
Subject: [PATCH 0004/1194] Fix scrolling comments list
AppBarLayout mostly gets it, but we still need to uphold our own part -
expanding it back after focus returns to it
---
.../material/appbar/FlingBehavior.java | 39 ++++++++++++++
.../fragments/list/BaseListFragment.java | 3 +-
.../views/SuperScrollLayoutManager.java | 53 +++++++++++++++++++
3 files changed, 94 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/views/SuperScrollLayoutManager.java
diff --git a/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java b/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java
index 4a2662f53..ea2857b03 100644
--- a/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java
+++ b/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java
@@ -1,10 +1,13 @@
package com.google.android.material.appbar;
+import android.annotation.SuppressLint;
import android.content.Context;
+import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.OverScroller;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
@@ -13,10 +16,46 @@ import java.lang.reflect.Field;
// check this https://stackoverflow.com/questions/56849221/recyclerview-fling-causes-laggy-while-appbarlayout-is-scrolling/57997489#57997489
public final class FlingBehavior extends AppBarLayout.Behavior {
+ private final Rect focusScrollRect = new Rect();
+
public FlingBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
+ @Override
+ public boolean onRequestChildRectangleOnScreen(@NonNull CoordinatorLayout coordinatorLayout, @NonNull AppBarLayout child, @NonNull Rect rectangle, boolean immediate) {
+ focusScrollRect.set(rectangle);
+
+ coordinatorLayout.offsetDescendantRectToMyCoords(child, focusScrollRect);
+
+ int height = coordinatorLayout.getHeight();
+
+ if (focusScrollRect.top <= 0 && focusScrollRect.bottom >= height) {
+ // the child is too big to fit inside ourselves completely, ignore request
+ return false;
+ }
+
+ int offset = getTopAndBottomOffset();
+
+ int dy;
+
+ if (focusScrollRect.bottom > height) {
+ dy = focusScrollRect.top;
+ } else if (focusScrollRect.top < 0) {
+ // scrolling up
+ dy = -(height - focusScrollRect.bottom);
+ } else {
+ // nothing to do
+ return false;
+ }
+
+ //int newOffset = offset + dy;
+
+ int consumed = scroll(coordinatorLayout, child, dy, getMaxDragOffset(child), 0);
+
+ return consumed == dy;
+ }
+
@Override
public boolean onInterceptTouchEvent(CoordinatorLayout parent, AppBarLayout child, MotionEvent ev) {
switch (ev.getActionMasked()) {
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
index d6fd1dd00..a3844a92f 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
@@ -34,6 +34,7 @@ import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.OnClickGesture;
import org.schabi.newpipe.util.StateSaver;
import org.schabi.newpipe.util.StreamDialogEntry;
+import org.schabi.newpipe.views.SuperScrollLayoutManager;
import java.util.List;
import java.util.Queue;
@@ -147,7 +148,7 @@ public abstract class BaseListFragment extends BaseStateFragment implem
}
protected RecyclerView.LayoutManager getListLayoutManager() {
- return new LinearLayoutManager(activity);
+ return new SuperScrollLayoutManager(activity);
}
protected RecyclerView.LayoutManager getGridLayoutManager() {
diff --git a/app/src/main/java/org/schabi/newpipe/views/SuperScrollLayoutManager.java b/app/src/main/java/org/schabi/newpipe/views/SuperScrollLayoutManager.java
new file mode 100644
index 000000000..33fe7b9cc
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/views/SuperScrollLayoutManager.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) Eltex ltd 2019
+ * SuperScrollLayoutManager.java is part of NewPipe.
+ *
+ * NewPipe is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * NewPipe is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NewPipe. If not, see .
+ */
+package org.schabi.newpipe.views;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.view.FocusFinder;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+public final class SuperScrollLayoutManager extends LinearLayoutManager {
+ private final Rect handy = new Rect();
+
+ public SuperScrollLayoutManager(Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean requestChildRectangleOnScreen(@NonNull RecyclerView parent, @NonNull View child, @NonNull Rect rect, boolean immediate, boolean focusedChildVisible) {
+ if (!parent.isInTouchMode()) {
+ // only activate when in directional navigation mode (Android TV etc) — fine grained
+ // touch scrolling is better served by nested scroll system
+
+ if (!focusedChildVisible || getFocusedChild() == child) {
+ handy.set(rect);
+
+ parent.offsetDescendantRectToMyCoords(child, handy);
+
+ parent.requestRectangleOnScreen(handy, immediate);
+ }
+ }
+
+ return super.requestChildRectangleOnScreen(parent, child, rect, immediate, focusedChildVisible);
+ }
+}
From 4806ac62ee62719998aa1361df8f3ce7156e9c06 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Fri, 20 Sep 2019 16:04:13 +0700
Subject: [PATCH 0005/1194] Correctly move focus from toolbar search bar to
dropdown
We don't hide MainFragment when search is show, so FocusFinder
sometimes gives focus to (obscured) main content
---
app/src/main/res/layout/toolbar_search_layout.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/layout/toolbar_search_layout.xml b/app/src/main/res/layout/toolbar_search_layout.xml
index fdc7e6d6b..bd5b2d5c7 100644
--- a/app/src/main/res/layout/toolbar_search_layout.xml
+++ b/app/src/main/res/layout/toolbar_search_layout.xml
@@ -19,6 +19,7 @@
android:drawablePadding="8dp"
android:focusable="true"
android:focusableInTouchMode="true"
+ android:nextFocusDown="@+id/suggestions_list"
android:hint="@string/search"
android:imeOptions="actionSearch|flagNoFullscreen"
android:inputType="textFilter|textNoSuggestions"
From 8952e2b0cdf362a9afb813f2c4ed20f998d474f5 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Fri, 20 Sep 2019 16:07:27 +0700
Subject: [PATCH 0006/1194] Close DrawerLayout on back button press
---
.../main/java/org/schabi/newpipe/MainActivity.java | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index c24d77d03..3c18c25f6 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -20,6 +20,7 @@
package org.schabi.newpipe;
+import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
@@ -29,6 +30,8 @@ import android.os.Handler;
import android.os.Looper;
import android.preference.PreferenceManager;
import android.util.Log;
+import android.view.Gravity;
+import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -59,6 +62,7 @@ import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
import org.schabi.newpipe.fragments.list.search.SearchFragment;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.util.Constants;
+import org.schabi.newpipe.util.FireTvUtils;
import org.schabi.newpipe.util.KioskTranslator;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper;
@@ -408,13 +412,20 @@ public class MainActivity extends AppCompatActivity {
public void onBackPressed() {
if (DEBUG) Log.d(TAG, "onBackPressed() called");
+ if (FireTvUtils.isFireTv()) {
+ View drawerPanel = findViewById(R.id.navigation_layout);
+ if (drawer.isDrawerOpen(drawerPanel)) {
+ drawer.closeDrawers();
+ return;
+ }
+ }
+
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_holder);
// If current fragment implements BackPressable (i.e. can/wanna handle back press) delegate the back press to it
if (fragment instanceof BackPressable) {
if (((BackPressable) fragment).onBackPressed()) return;
}
-
if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
finish();
} else super.onBackPressed();
From 2b39438eba2f4a78c288fd8a5121ce0672c544d0 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Fri, 20 Sep 2019 16:10:57 +0700
Subject: [PATCH 0007/1194] Fix scrolling in main screen grid
GridLayoutManager is buggy - https://issuetracker.google.com/issues/37067220:
it randomly loses or incorrectly assigns focus when being scrolled via
direction-based navigation. This commit reimplements onFocusSearchFailed()
on top of scrollBy() to work around that problem.
Ordinary touch-based navigation should not be affected.
---
.../fragments/list/BaseListFragment.java | 3 +-
.../newpipe/local/BaseLocalListFragment.java | 3 +-
.../subscription/SubscriptionFragment.java | 3 +-
.../newpipe/views/FixedGridLayoutManager.java | 59 +++++++++++++++
.../newpipe/views/NewPipeRecyclerView.java | 72 +++++++++++++++++++
.../giga/ui/fragment/MissionsFragment.java | 3 +-
app/src/main/res/layout/fragment_kiosk.xml | 2 +-
7 files changed, 140 insertions(+), 5 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/views/FixedGridLayoutManager.java
create mode 100644 app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
index a3844a92f..88684f2e7 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
@@ -35,6 +35,7 @@ import org.schabi.newpipe.util.OnClickGesture;
import org.schabi.newpipe.util.StateSaver;
import org.schabi.newpipe.util.StreamDialogEntry;
import org.schabi.newpipe.views.SuperScrollLayoutManager;
+import org.schabi.newpipe.views.FixedGridLayoutManager;
import java.util.List;
import java.util.Queue;
@@ -156,7 +157,7 @@ public abstract class BaseListFragment extends BaseStateFragment implem
int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width);
width += (24 * resources.getDisplayMetrics().density);
final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels / (double)width);
- final GridLayoutManager lm = new GridLayoutManager(activity, spanCount);
+ final GridLayoutManager lm = new FixedGridLayoutManager(activity, spanCount);
lm.setSpanSizeLookup(infoListAdapter.getSpanSizeLookup(spanCount));
return lm;
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java b/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java
index 414a9b6b5..c1293e240 100644
--- a/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java
@@ -18,6 +18,7 @@ import android.view.View;
import org.schabi.newpipe.R;
import org.schabi.newpipe.fragments.BaseStateFragment;
import org.schabi.newpipe.fragments.list.ListViewContract;
+import org.schabi.newpipe.views.FixedGridLayoutManager;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
@@ -95,7 +96,7 @@ public abstract class BaseLocalListFragment extends BaseStateFragment
int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width);
width += (24 * resources.getDisplayMetrics().density);
final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels / (double)width);
- final GridLayoutManager lm = new GridLayoutManager(activity, spanCount);
+ final GridLayoutManager lm = new FixedGridLayoutManager(activity, spanCount);
lm.setSpanSizeLookup(itemListAdapter.getSpanSizeLookup(spanCount));
return lm;
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java
index bff6c1b3a..ea820b71e 100644
--- a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java
@@ -57,6 +57,7 @@ import org.schabi.newpipe.util.ServiceHelper;
import org.schabi.newpipe.util.ShareUtils;
import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.CollapsibleView;
+import org.schabi.newpipe.views.FixedGridLayoutManager;
import java.io.File;
import java.text.SimpleDateFormat;
@@ -192,7 +193,7 @@ public class SubscriptionFragment extends BaseStateFragment
+ * FixedGridLayoutManager.java is part of NewPipe.
+ *
+ * NewPipe is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * NewPipe is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NewPipe. If not, see .
+ */
+package org.schabi.newpipe.views;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.FocusFinder;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+// Version of GridLayoutManager that works around https://issuetracker.google.com/issues/37067220
+public class FixedGridLayoutManager extends GridLayoutManager {
+ public FixedGridLayoutManager(Context context, int spanCount) {
+ super(context, spanCount);
+ }
+
+ public FixedGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ public FixedGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
+ super(context, spanCount, orientation, reverseLayout);
+ }
+
+ @Override
+ public View onFocusSearchFailed(View focused, int focusDirection, RecyclerView.Recycler recycler, RecyclerView.State state) {
+ FocusFinder ff = FocusFinder.getInstance();
+
+ View result = ff.findNextFocus((ViewGroup) focused.getParent(), focused, focusDirection);
+ if (result != null) {
+ return super.onFocusSearchFailed(focused, focusDirection, recycler, state);
+ }
+
+ if (focusDirection == View.FOCUS_DOWN) {
+ scrollVerticallyBy(10, recycler, state);
+ return null;
+ }
+
+ return super.onFocusSearchFailed(focused, focusDirection, recycler, state);
+ }
+}
diff --git a/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java b/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java
new file mode 100644
index 000000000..76dee200f
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) Eltex ltd 2019
+ * NewPipeRecyclerView.java is part of NewPipe.
+ *
+ * NewPipe is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * NewPipe is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NewPipe. If not, see .
+ */
+package org.schabi.newpipe.views;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+public class NewPipeRecyclerView extends RecyclerView {
+ private static final String TAG = "FixedRecyclerView";
+
+ public NewPipeRecyclerView(@NonNull Context context) {
+ super(context);
+ }
+
+ public NewPipeRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public NewPipeRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ public View focusSearch(int direction) {
+ return null;
+ }
+
+ @Override
+ public View focusSearch(View focused, int direction) {
+ return null;
+ }
+
+ @Override
+ public boolean dispatchUnhandledMove(View focused, int direction) {
+ View found = super.focusSearch(focused, direction);
+ if (found != null) {
+ found.requestFocus(direction);
+ return true;
+ }
+
+ if (direction == View.FOCUS_UP) {
+ if (canScrollVertically(-1)) {
+ scrollBy(0, -10);
+ return true;
+ }
+
+ return false;
+ }
+
+ return super.dispatchUnhandledMove(focused, direction);
+ }
+}
diff --git a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
index 26da47b1f..3792f030a 100644
--- a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
+++ b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
@@ -30,6 +30,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.settings.NewPipeSettings;
import org.schabi.newpipe.util.FilePickerActivityHelper;
import org.schabi.newpipe.util.ThemeHelper;
+import org.schabi.newpipe.views.FixedGridLayoutManager;
import java.io.File;
import java.io.IOException;
@@ -108,7 +109,7 @@ public class MissionsFragment extends Fragment {
mList = v.findViewById(R.id.mission_recycler);
// Init layouts managers
- mGridManager = new GridLayoutManager(getActivity(), SPAN_SIZE);
+ mGridManager = new FixedGridLayoutManager(getActivity(), SPAN_SIZE);
mGridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
diff --git a/app/src/main/res/layout/fragment_kiosk.xml b/app/src/main/res/layout/fragment_kiosk.xml
index 01eeb0855..643d7d4f0 100644
--- a/app/src/main/res/layout/fragment_kiosk.xml
+++ b/app/src/main/res/layout/fragment_kiosk.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
Date: Fri, 20 Sep 2019 16:13:13 +0700
Subject: [PATCH 0008/1194] MainPlayer: make title and subtitle non-focusable
Focus isn't needed for marquee, only selection
---
app/src/main/res/layout-large-land/activity_main_player.xml | 2 --
1 file changed, 2 deletions(-)
diff --git a/app/src/main/res/layout-large-land/activity_main_player.xml b/app/src/main/res/layout-large-land/activity_main_player.xml
index b535db2b8..902e81f1f 100644
--- a/app/src/main/res/layout-large-land/activity_main_player.xml
+++ b/app/src/main/res/layout-large-land/activity_main_player.xml
@@ -178,7 +178,6 @@
android:textSize="15sp"
android:textStyle="bold"
android:clickable="true"
- android:focusable="true"
tools:ignore="RtlHardcoded"
tools:text="The Video Title LONG very LONG"/>
@@ -194,7 +193,6 @@
android:textColor="@android:color/white"
android:textSize="12sp"
android:clickable="true"
- android:focusable="true"
tools:text="The Video Artist LONG very LONG very Long"/>
From 1bb96ef4058994fe2eabaa93cc5fdcf819acfa44 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Fri, 20 Sep 2019 16:16:21 +0700
Subject: [PATCH 0009/1194] When child of CoordinatorLayout wants focus, show
it!
The same logic is present in RecyclerView, ScrollView etc.
Android really should default to this behavior for all Views
with isScrollContainer = true
---
.../newpipe/views/FocusAwareCoordinator.java | 63 +++++++++++++++++++
.../fragment_video_detail.xml | 4 +-
2 files changed, 65 insertions(+), 2 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/views/FocusAwareCoordinator.java
diff --git a/app/src/main/java/org/schabi/newpipe/views/FocusAwareCoordinator.java b/app/src/main/java/org/schabi/newpipe/views/FocusAwareCoordinator.java
new file mode 100644
index 000000000..778e50e52
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/views/FocusAwareCoordinator.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) Eltex ltd 2019
+ * FocusAwareCoordinator.java is part of NewPipe.
+ *
+ * NewPipe is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * NewPipe is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NewPipe. If not, see .
+ */
+package org.schabi.newpipe.views;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+
+public final class FocusAwareCoordinator extends CoordinatorLayout {
+ private final Rect childFocus = new Rect();
+
+ public FocusAwareCoordinator(@NonNull Context context) {
+ super(context);
+ }
+
+ public FocusAwareCoordinator(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public FocusAwareCoordinator(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ public void requestChildFocus(View child, View focused) {
+ super.requestChildFocus(child, focused);
+
+ if (!isInTouchMode()) {
+ if (focused.getHeight() >= getHeight()) {
+ focused.getFocusedRect(childFocus);
+
+ ((ViewGroup) child).offsetDescendantRectToMyCoords(focused, childFocus);
+ } else {
+ focused.getHitRect(childFocus);
+
+ ((ViewGroup) child).offsetDescendantRectToMyCoords((View) focused.getParent(), childFocus);
+ }
+
+ requestChildRectangleOnScreen(child, childFocus, false);
+ }
+ }
+}
diff --git a/app/src/main/res/layout-large-land/fragment_video_detail.xml b/app/src/main/res/layout-large-land/fragment_video_detail.xml
index 02b0a7b86..186e184f3 100644
--- a/app/src/main/res/layout-large-land/fragment_video_detail.xml
+++ b/app/src/main/res/layout-large-land/fragment_video_detail.xml
@@ -10,7 +10,7 @@
android:orientation="horizontal"
android:baselineAligned="false">
-
-
+
Date: Fri, 20 Sep 2019 16:23:17 +0700
Subject: [PATCH 0010/1194] Do not discriminate against non-Amazon TV boxes
---
.../main/java/org/schabi/newpipe/util/FireTvUtils.java | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java b/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java
index 69666463e..879b54e1f 100644
--- a/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java
+++ b/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java
@@ -1,10 +1,18 @@
package org.schabi.newpipe.util;
+import android.annotation.SuppressLint;
+import android.content.pm.PackageManager;
+
import org.schabi.newpipe.App;
public class FireTvUtils {
+ @SuppressLint("InlinedApi")
public static boolean isFireTv(){
final String AMAZON_FEATURE_FIRE_TV = "amazon.hardware.fire_tv";
- return App.getApp().getPackageManager().hasSystemFeature(AMAZON_FEATURE_FIRE_TV);
+
+ PackageManager pm = App.getApp().getPackageManager();
+
+ return pm.hasSystemFeature(AMAZON_FEATURE_FIRE_TV)
+ || pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK);
}
}
From 644ad110c06638c50b4bd3800d3a334b4f976c7d Mon Sep 17 00:00:00 2001
From: Alexander
Date: Fri, 20 Sep 2019 16:25:30 +0700
Subject: [PATCH 0011/1194] Make description focusable, so TV users can scroll
it
---
app/src/main/res/layout-large-land/fragment_video_detail.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/layout-large-land/fragment_video_detail.xml b/app/src/main/res/layout-large-land/fragment_video_detail.xml
index 186e184f3..02d330ade 100644
--- a/app/src/main/res/layout-large-land/fragment_video_detail.xml
+++ b/app/src/main/res/layout-large-land/fragment_video_detail.xml
@@ -490,6 +490,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textIsSelectable="true"
android:textSize="@dimen/video_item_detail_description_text_size"
+ android:focusable="true"
tools:text="Description Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ultricies ex. Integer sit amet sodales risus. Duis non mi et urna pretium bibendum." />
Date: Fri, 20 Sep 2019 16:36:57 +0700
Subject: [PATCH 0012/1194] Improve usability of MainVideoActivity with
directional navigation
* Hide player controls when back is pressed (only on TV devices)
* Do not hide control after click unless in touch mode
* Show player controls on dpad usage
* Notably increase control hide timeout when not in touch mode
---
.../newpipe/player/MainVideoPlayer.java | 53 ++++++++++++++++++-
.../schabi/newpipe/player/VideoPlayer.java | 15 +++++-
2 files changed, 66 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 7a3e60c66..5663e1ea2 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -1,5 +1,6 @@
/*
* Copyright 2017 Mauricio Colli
+ * Copyright 2019 Eltex ltd
* MainVideoPlayer.java is part of NewPipe
*
* License: GPL-3.0+
@@ -45,6 +46,7 @@ import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.GestureDetector;
+import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
@@ -75,6 +77,7 @@ import org.schabi.newpipe.player.playqueue.PlayQueueItemTouchCallback;
import org.schabi.newpipe.player.resolver.MediaSourceTag;
import org.schabi.newpipe.player.resolver.VideoPlaybackResolver;
import org.schabi.newpipe.util.AnimationUtils;
+import org.schabi.newpipe.util.FireTvUtils;
import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper;
@@ -89,6 +92,7 @@ import java.util.UUID;
import static org.schabi.newpipe.player.BasePlayer.STATE_PLAYING;
import static org.schabi.newpipe.player.VideoPlayer.DEFAULT_CONTROLS_DURATION;
import static org.schabi.newpipe.player.VideoPlayer.DEFAULT_CONTROLS_HIDE_TIME;
+import static org.schabi.newpipe.player.VideoPlayer.DPAD_CONTROLS_HIDE_TIME;
import static org.schabi.newpipe.util.AnimationUtils.Type.SCALE_AND_ALPHA;
import static org.schabi.newpipe.util.AnimationUtils.Type.SLIDE_AND_ALPHA;
import static org.schabi.newpipe.util.AnimationUtils.animateRotation;
@@ -187,6 +191,40 @@ public final class MainVideoPlayer extends AppCompatActivity
}
}
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ switch (event.getKeyCode()) {
+ default:
+ break;
+ case KeyEvent.KEYCODE_BACK:
+ if (FireTvUtils.isFireTv() && playerImpl.isControlsVisible()) {
+ playerImpl.hideControls(0, 0);
+ hideSystemUi();
+ return true;
+ }
+ break;
+ case KeyEvent.KEYCODE_DPAD_UP:
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ case KeyEvent.KEYCODE_DPAD_CENTER:
+ if (playerImpl.getCurrentState() == BasePlayer.STATE_BLOCKED) {
+ return true;
+ }
+
+ if (!playerImpl.isControlsVisible()) {
+ playerImpl.showControlsThenHide();
+ showSystemUi();
+ return true;
+ } else {
+ playerImpl.hideControls(DEFAULT_CONTROLS_DURATION, DPAD_CONTROLS_HIDE_TIME);
+ }
+ break;
+ }
+
+ return super.onKeyDown(keyCode, event);
+ }
+
@Override
protected void onResume() {
if (DEBUG) Log.d(TAG, "onResume() called");
@@ -692,7 +730,7 @@ public final class MainVideoPlayer extends AppCompatActivity
getControlsVisibilityHandler().removeCallbacksAndMessages(null);
animateView(getControlsRoot(), true, DEFAULT_CONTROLS_DURATION, 0, () -> {
if (getCurrentState() == STATE_PLAYING && !isSomePopupMenuVisible()) {
- hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME);
+ safeHideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME);
}
});
}
@@ -898,6 +936,18 @@ public final class MainVideoPlayer extends AppCompatActivity
super.showControls(duration);
}
+ @Override
+ public void safeHideControls(long duration, long delay) {
+ if (DEBUG) Log.d(TAG, "safeHideControls() called with: delay = [" + delay + "]");
+
+ View controlsRoot = getControlsRoot();
+ if (controlsRoot.isInTouchMode()) {
+ getControlsVisibilityHandler().removeCallbacksAndMessages(null);
+ getControlsVisibilityHandler().postDelayed(
+ () -> animateView(controlsRoot, false, duration, 0, MainVideoPlayer.this::hideSystemUi), delay);
+ }
+ }
+
@Override
public void hideControls(final long duration, long delay) {
if (DEBUG) Log.d(TAG, "hideControls() called with: delay = [" + delay + "]");
@@ -1058,6 +1108,7 @@ public final class MainVideoPlayer extends AppCompatActivity
playerImpl.showControlsThenHide();
showSystemUi();
}
+
return true;
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java
index 360475ba2..0d9c14058 100644
--- a/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java
@@ -97,6 +97,7 @@ public abstract class VideoPlayer extends BasePlayer
protected static final int RENDERER_UNAVAILABLE = -1;
public static final int DEFAULT_CONTROLS_DURATION = 300; // 300 millis
public static final int DEFAULT_CONTROLS_HIDE_TIME = 2000; // 2 Seconds
+ public static final int DPAD_CONTROLS_HIDE_TIME = 7000; // 7 Seconds
private List availableStreams;
private int selectedStreamIndex;
@@ -825,8 +826,11 @@ public abstract class VideoPlayer extends BasePlayer
public void showControlsThenHide() {
if (DEBUG) Log.d(TAG, "showControlsThenHide() called");
+
+ final int hideTime = controlsRoot.isInTouchMode() ? DEFAULT_CONTROLS_HIDE_TIME : DPAD_CONTROLS_HIDE_TIME;
+
animateView(controlsRoot, true, DEFAULT_CONTROLS_DURATION, 0,
- () -> hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME));
+ () -> hideControls(DEFAULT_CONTROLS_DURATION, hideTime));
}
public void showControls(long duration) {
@@ -835,6 +839,15 @@ public abstract class VideoPlayer extends BasePlayer
animateView(controlsRoot, true, duration);
}
+ public void safeHideControls(final long duration, long delay) {
+ if (DEBUG) Log.d(TAG, "safeHideControls() called with: delay = [" + delay + "]");
+ if (rootView.isInTouchMode()) {
+ controlsVisibilityHandler.removeCallbacksAndMessages(null);
+ controlsVisibilityHandler.postDelayed(
+ () -> animateView(controlsRoot, false, duration), delay);
+ }
+ }
+
public void hideControls(final long duration, long delay) {
if (DEBUG) Log.d(TAG, "hideControls() called with: delay = [" + delay + "]");
controlsVisibilityHandler.removeCallbacksAndMessages(null);
From d8bd8d87ec6eb6ca7379740be27d7d7545ae31d3 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Fri, 20 Sep 2019 16:42:32 +0700
Subject: [PATCH 0013/1194] Make player screen controls into buttons
Buttons are more likely to have "correct" styling and are
focusable/clickable out of box
---
.../activity_main_player.xml | 20 +++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/layout-large-land/activity_main_player.xml b/app/src/main/res/layout-large-land/activity_main_player.xml
index 902e81f1f..2859b6c5d 100644
--- a/app/src/main/res/layout-large-land/activity_main_player.xml
+++ b/app/src/main/res/layout-large-land/activity_main_player.xml
@@ -196,8 +196,9 @@
tools:text="The Video Artist LONG very LONG very Long"/>
-
-
@@ -268,8 +272,9 @@
tools:ignore="RtlHardcoded"
tools:visibility="visible">
-
-
From 7db1ba40ebf530181984c99804b1ab6d392a1742 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Fri, 20 Sep 2019 16:48:34 +0700
Subject: [PATCH 0014/1194] Do not allow focus to escape from open DrawerLayout
Upstream DrawerLayout does override addFocusables, but
incorrectly checks for isDrawerOpen instread of isDrawerVisible
---
.../newpipe/views/FocusAwareDrawerLayout.java | 69 +++++++++++++++++++
app/src/main/res/layout/activity_main.xml | 4 +-
2 files changed, 71 insertions(+), 2 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/views/FocusAwareDrawerLayout.java
diff --git a/app/src/main/java/org/schabi/newpipe/views/FocusAwareDrawerLayout.java b/app/src/main/java/org/schabi/newpipe/views/FocusAwareDrawerLayout.java
new file mode 100644
index 000000000..0e8097dbe
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/views/FocusAwareDrawerLayout.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) Eltex ltd 2019
+ * FocusAwareDrawerLayout.java is part of NewPipe.
+ *
+ * NewPipe is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * NewPipe is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NewPipe. If not, see .
+ */
+package org.schabi.newpipe.views;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.view.GravityCompat;
+import androidx.core.view.ViewCompat;
+import androidx.drawerlayout.widget.DrawerLayout;
+
+import java.util.ArrayList;
+
+public final class FocusAwareDrawerLayout extends DrawerLayout {
+ public FocusAwareDrawerLayout(@NonNull Context context) {
+ super(context);
+ }
+
+ public FocusAwareDrawerLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public FocusAwareDrawerLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ public void addFocusables(ArrayList views, int direction, int focusableMode) {
+ boolean hasOpenPanels = false;
+ View content = null;
+
+ for (int i = 0; i < getChildCount(); ++i) {
+ View child = getChildAt(i);
+
+ DrawerLayout.LayoutParams lp = (DrawerLayout.LayoutParams) child.getLayoutParams();
+
+ if (lp.gravity == 0) {
+ content = child;
+ } else {
+ if (isDrawerVisible(child)) {
+ hasOpenPanels = true;
+ child.addFocusables(views, direction, focusableMode);
+ }
+ }
+ }
+
+ if (content != null && !hasOpenPanels) {
+ content.addFocusables(views, direction, focusableMode);
+ }
+ }
+}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 92e73234f..a965f5f65 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,5 +1,5 @@
-
-
+
From a8a28294d3d43f9720141c561dc1e9fa3b10d421 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Fri, 20 Sep 2019 17:42:56 +0700
Subject: [PATCH 0015/1194] Support for seeking videos in directional
navigation mode
---
.../newpipe/views/FocusAwareSeekBar.java | 138 ++++++++++++++++++
.../activity_main_player.xml | 2 +-
2 files changed, 139 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java
diff --git a/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java b/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java
new file mode 100644
index 000000000..3789ea344
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) Eltex ltd 2019
+ * FocusAwareDrawerLayout.java is part of NewPipe.
+ *
+ * NewPipe is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * NewPipe is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NewPipe. If not, see .
+ */
+package org.schabi.newpipe.views;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.KeyEvent;
+import android.view.ViewTreeObserver;
+import android.widget.SeekBar;
+
+import androidx.appcompat.widget.AppCompatSeekBar;
+
+/**
+ * SeekBar, adapted for directional navigation. It emulates touch-related callbacks
+ * (onStartTrackingTouch/onStopTrackingTouch), so existing code does not need to be changed to
+ * work with it.
+ */
+public final class FocusAwareSeekBar extends AppCompatSeekBar {
+ private NestedListener listener;
+
+ private ViewTreeObserver treeObserver;
+
+ public FocusAwareSeekBar(Context context) {
+ super(context);
+ }
+
+ public FocusAwareSeekBar(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public FocusAwareSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ public void setOnSeekBarChangeListener(OnSeekBarChangeListener l) {
+ this.listener = l == null ? null : new NestedListener(l);
+
+ super.setOnSeekBarChangeListener(listener);
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (!isInTouchMode() && keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
+ releaseTrack();
+ }
+
+ return super.onKeyDown(keyCode, event);
+ }
+
+ @Override
+ protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
+ super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
+
+ if (!isInTouchMode() && !gainFocus) {
+ releaseTrack();
+ }
+ }
+
+ private final ViewTreeObserver.OnTouchModeChangeListener touchModeListener = isInTouchMode -> { if (isInTouchMode) releaseTrack(); };
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+
+ treeObserver = getViewTreeObserver();
+ treeObserver.addOnTouchModeChangeListener(touchModeListener);
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ if (treeObserver == null || !treeObserver.isAlive()) {
+ treeObserver = getViewTreeObserver();
+ }
+
+ treeObserver.removeOnTouchModeChangeListener(touchModeListener);
+ treeObserver = null;
+
+ super.onDetachedFromWindow();
+ }
+
+ private void releaseTrack() {
+ if (listener != null && listener.isSeeking) {
+ listener.onStopTrackingTouch(this);
+ }
+ }
+
+ private final class NestedListener implements OnSeekBarChangeListener {
+ private final OnSeekBarChangeListener delegate;
+
+ boolean isSeeking;
+
+ private NestedListener(OnSeekBarChangeListener delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ if (!seekBar.isInTouchMode() && !isSeeking && fromUser) {
+ isSeeking = true;
+
+ onStartTrackingTouch(seekBar);
+ }
+
+ delegate.onProgressChanged(seekBar, progress, fromUser);
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ isSeeking = true;
+
+ delegate.onStartTrackingTouch(seekBar);
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ isSeeking = false;
+
+ delegate.onStopTrackingTouch(seekBar);
+ }
+ }
+}
diff --git a/app/src/main/res/layout-large-land/activity_main_player.xml b/app/src/main/res/layout-large-land/activity_main_player.xml
index 2859b6c5d..c40931a1a 100644
--- a/app/src/main/res/layout-large-land/activity_main_player.xml
+++ b/app/src/main/res/layout-large-land/activity_main_player.xml
@@ -401,7 +401,7 @@
tools:text="1:06:29"/>
-
Date: Mon, 23 Sep 2019 13:50:51 +0700
Subject: [PATCH 0016/1194] Focus drawer when it opens
It is still buggy because of NavigationView (why the hell
is NavigationMenuView marked as focusable?) but at least initial
opening works as intended
---
.../newpipe/views/FocusAwareDrawerLayout.java | 33 +++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/views/FocusAwareDrawerLayout.java b/app/src/main/java/org/schabi/newpipe/views/FocusAwareDrawerLayout.java
index 0e8097dbe..2354427a3 100644
--- a/app/src/main/java/org/schabi/newpipe/views/FocusAwareDrawerLayout.java
+++ b/app/src/main/java/org/schabi/newpipe/views/FocusAwareDrawerLayout.java
@@ -17,8 +17,10 @@
*/
package org.schabi.newpipe.views;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
+import android.view.Gravity;
import android.view.View;
import androidx.annotation.NonNull;
@@ -66,4 +68,35 @@ public final class FocusAwareDrawerLayout extends DrawerLayout {
content.addFocusables(views, direction, focusableMode);
}
}
+
+ // this override isn't strictly necessary, but it is helpful when DrawerLayout isn't the topmost
+ // view in hierarchy (such as when system or builtin appcompat ActionBar is used)
+ @Override
+ @SuppressLint("RtlHardcoded")
+ public void openDrawer(@NonNull View drawerView, boolean animate) {
+ super.openDrawer(drawerView, animate);
+
+ LayoutParams params = (LayoutParams) drawerView.getLayoutParams();
+
+ int gravity = GravityCompat.getAbsoluteGravity(params.gravity, ViewCompat.getLayoutDirection(this));
+
+ int direction = 0;
+
+ switch (gravity) {
+ case Gravity.LEFT:
+ direction = FOCUS_LEFT;
+ break;
+ case Gravity.RIGHT:
+ direction = FOCUS_RIGHT;
+ break;
+ case Gravity.TOP:
+ direction = FOCUS_UP;
+ break;
+ case Gravity.BOTTOM:
+ direction = FOCUS_DOWN;
+ break;
+ }
+
+ drawerView.requestFocus(direction);
+ }
}
From d23227d427831184f6ae12162593c6112bcd4b11 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Mon, 23 Sep 2019 14:17:03 +0700
Subject: [PATCH 0017/1194] Implement global focus highlight
---
.../java/org/schabi/newpipe/MainActivity.java | 5 +
.../org/schabi/newpipe/RouterActivity.java | 6 +
.../newpipe/download/DownloadActivity.java | 6 +
.../newpipe/player/MainVideoPlayer.java | 6 +
.../newpipe/views/FocusOverlayView.java | 248 ++++++++++++++++++
5 files changed, 271 insertions(+)
create mode 100644 app/src/main/java/org/schabi/newpipe/views/FocusOverlayView.java
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 3c18c25f6..8d2702d0b 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -69,6 +69,7 @@ import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.ServiceHelper;
import org.schabi.newpipe.util.StateSaver;
import org.schabi.newpipe.util.ThemeHelper;
+import org.schabi.newpipe.views.FocusOverlayView;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@@ -121,6 +122,10 @@ public class MainActivity extends AppCompatActivity {
} catch (Exception e) {
ErrorActivity.reportUiError(this, e);
}
+
+ if (FireTvUtils.isFireTv()) {
+ FocusOverlayView.setupFocusObserver(this);
+ }
}
private void setupDrawer() throws Exception {
diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
index 1be6e096a..c5b97f86f 100644
--- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
@@ -45,10 +45,12 @@ import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.ExtractorHelper;
+import org.schabi.newpipe.util.FireTvUtils;
import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.ThemeHelper;
+import org.schabi.newpipe.views.FocusOverlayView;
import java.io.Serializable;
import java.util.ArrayList;
@@ -316,6 +318,10 @@ public class RouterActivity extends AppCompatActivity {
selectedPreviously = selectedRadioPosition;
alertDialog.show();
+
+ if (FireTvUtils.isFireTv()) {
+ FocusOverlayView.setupFocusObserver(alertDialog);
+ }
}
private List getChoicesForService(StreamingService service, LinkType linkType) {
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index 449a790e8..56265d321 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -13,7 +13,9 @@ import android.view.ViewTreeObserver;
import org.schabi.newpipe.R;
import org.schabi.newpipe.settings.SettingsActivity;
+import org.schabi.newpipe.util.FireTvUtils;
import org.schabi.newpipe.util.ThemeHelper;
+import org.schabi.newpipe.views.FocusOverlayView;
import us.shandian.giga.service.DownloadManagerService;
import us.shandian.giga.ui.fragment.MissionsFragment;
@@ -50,6 +52,10 @@ public class DownloadActivity extends AppCompatActivity {
getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
+
+ if (FireTvUtils.isFireTv()) {
+ FocusOverlayView.setupFocusObserver(this);
+ }
}
private void updateFragments() {
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 5663e1ea2..38da4d8b2 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -84,6 +84,7 @@ import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.ShareUtils;
import org.schabi.newpipe.util.StateSaver;
import org.schabi.newpipe.util.ThemeHelper;
+import org.schabi.newpipe.views.FocusOverlayView;
import java.util.List;
import java.util.Queue;
@@ -141,6 +142,7 @@ public final class MainVideoPlayer extends AppCompatActivity
hideSystemUi();
setContentView(R.layout.activity_main_player);
+
playerImpl = new VideoPlayerImpl(this);
playerImpl.setup(findViewById(android.R.id.content));
@@ -172,6 +174,10 @@ public final class MainVideoPlayer extends AppCompatActivity
getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION),
false, rotationObserver);
+
+ if (FireTvUtils.isFireTv()) {
+ FocusOverlayView.setupFocusObserver(this);
+ }
}
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/views/FocusOverlayView.java b/app/src/main/java/org/schabi/newpipe/views/FocusOverlayView.java
new file mode 100644
index 000000000..b0b9cc421
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/views/FocusOverlayView.java
@@ -0,0 +1,248 @@
+/*
+ * Copyright 2019 Alexander Rvachev
+ * FocusOverlayView.java is part of NewPipe
+ *
+ * License: GPL-3.0+
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.schabi.newpipe.views;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Paint;
+import android.graphics.PixelFormat;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.Window;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.view.WindowCallbackWrapper;
+
+import org.schabi.newpipe.R;
+
+import java.lang.ref.WeakReference;
+
+public final class FocusOverlayView extends Drawable implements
+ ViewTreeObserver.OnGlobalFocusChangeListener,
+ ViewTreeObserver.OnDrawListener,
+ ViewTreeObserver.OnGlobalLayoutListener,
+ ViewTreeObserver.OnScrollChangedListener, ViewTreeObserver.OnTouchModeChangeListener {
+
+ private boolean isInTouchMode;
+
+ private final Rect focusRect = new Rect();
+
+ private final Paint rectPaint = new Paint();
+
+ private final Handler animator = new Handler(Looper.getMainLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ updateRect();
+ }
+ };
+
+ private WeakReference focused;
+
+ public FocusOverlayView(Context context) {
+ rectPaint.setStyle(Paint.Style.STROKE);
+ rectPaint.setStrokeWidth(2);
+ rectPaint.setColor(context.getResources().getColor(R.color.white));
+ }
+
+ @Override
+ public void onGlobalFocusChanged(View oldFocus, View newFocus) {
+ int l = focusRect.left;
+ int r = focusRect.right;
+ int t = focusRect.top;
+ int b = focusRect.bottom;
+
+ if (newFocus != null && newFocus.getWidth() > 0 && newFocus.getHeight() > 0) {
+ newFocus.getGlobalVisibleRect(focusRect);
+
+ focused = new WeakReference<>(newFocus);
+ } else {
+ focusRect.setEmpty();
+
+ focused = null;
+ }
+
+ if (l != focusRect.left || r != focusRect.right || t != focusRect.top || b != focusRect.bottom) {
+ invalidateSelf();
+ }
+
+ focused = new WeakReference<>(newFocus);
+
+ animator.sendEmptyMessageDelayed(0, 1000);
+ }
+
+ private void updateRect() {
+ if (focused == null) {
+ return;
+ }
+
+ View focused = this.focused.get();
+
+ int l = focusRect.left;
+ int r = focusRect.right;
+ int t = focusRect.top;
+ int b = focusRect.bottom;
+
+ if (focused != null) {
+ focused.getGlobalVisibleRect(focusRect);
+ } else {
+ focusRect.setEmpty();
+ }
+
+ if (l != focusRect.left || r != focusRect.right || t != focusRect.top || b != focusRect.bottom) {
+ invalidateSelf();
+ }
+ }
+
+ @Override
+ public void onDraw() {
+ updateRect();
+ }
+
+ @Override
+ public void onScrollChanged() {
+ updateRect();
+
+ animator.removeMessages(0);
+ animator.sendEmptyMessageDelayed(0, 1000);
+ }
+
+ @Override
+ public void onGlobalLayout() {
+ updateRect();
+
+ animator.sendEmptyMessageDelayed(0, 1000);
+ }
+
+ @Override
+ public void onTouchModeChanged(boolean isInTouchMode) {
+ this.isInTouchMode = isInTouchMode;
+
+ if (isInTouchMode) {
+ updateRect();
+ } else {
+ invalidateSelf();
+ }
+ }
+
+ public void setCurrentFocus(View focused) {
+ if (focused == null) {
+ return;
+ }
+
+ this.isInTouchMode = focused.isInTouchMode();
+
+ onGlobalFocusChanged(null, focused);
+ }
+
+ @Override
+ public void draw(@NonNull Canvas canvas) {
+ if (!isInTouchMode && focusRect.width() != 0) {
+ canvas.drawRect(focusRect, rectPaint);
+ }
+ }
+
+ @Override
+ public int getOpacity() {
+ return PixelFormat.TRANSPARENT;
+ }
+
+ @Override
+ public void setAlpha(int alpha) {
+ }
+
+ @Override
+ public void setColorFilter(ColorFilter colorFilter) {
+ }
+
+ public static void setupFocusObserver(Dialog dialog) {
+ Rect displayRect = new Rect();
+
+ Window window = dialog.getWindow();
+ assert window != null;
+
+ View decor = window.getDecorView();
+ decor.getWindowVisibleDisplayFrame(displayRect);
+
+ FocusOverlayView overlay = new FocusOverlayView(dialog.getContext());
+ overlay.setBounds(0, 0, displayRect.width(), displayRect.height());
+
+ setupOverlay(window, overlay);
+ }
+
+ public static void setupFocusObserver(Activity activity) {
+ Rect displayRect = new Rect();
+
+ Window window = activity.getWindow();
+ View decor = window.getDecorView();
+ decor.getWindowVisibleDisplayFrame(displayRect);
+
+ FocusOverlayView overlay = new FocusOverlayView(activity);
+ overlay.setBounds(0, 0, displayRect.width(), displayRect.height());
+
+ setupOverlay(window, overlay);
+ }
+
+ private static void setupOverlay(Window window, FocusOverlayView overlay) {
+ ViewGroup decor = (ViewGroup) window.getDecorView();
+ decor.getOverlay().add(overlay);
+
+ ViewTreeObserver observer = decor.getViewTreeObserver();
+ observer.addOnScrollChangedListener(overlay);
+ observer.addOnGlobalFocusChangeListener(overlay);
+ observer.addOnGlobalLayoutListener(overlay);
+ observer.addOnTouchModeChangeListener(overlay);
+
+ overlay.setCurrentFocus(decor.getFocusedChild());
+
+ // Some key presses don't actually move focus, but still result in movement on screen.
+ // For example, MovementMethod of TextView may cause requestRectangleOnScreen() due to
+ // some "focusable" spans, which in turn causes CoordinatorLayout to "scroll" it's children.
+ // Unfortunately many such forms of "scrolling" do not count as scrolling for purpose
+ // of dispatching ViewTreeObserver callbacks, so we have to intercept them by directly
+ // receiving keys from Window.
+ window.setCallback(new WindowCallbackWrapper(window.getCallback()) {
+ @Override
+ public boolean dispatchKeyEvent(KeyEvent event) {
+ boolean res = super.dispatchKeyEvent(event);
+ overlay.onKey(event);
+ return res;
+ }
+ });
+ }
+
+ private void onKey(KeyEvent event) {
+ if (event.getAction() != KeyEvent.ACTION_DOWN) {
+ return;
+ }
+
+ updateRect();
+
+ animator.sendEmptyMessageDelayed(0, 100);
+ }
+}
From 28fb864ed01bf0af2989527d984e500f91717fe1 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Mon, 23 Sep 2019 17:20:15 +0700
Subject: [PATCH 0018/1194] Focus video view thumbnail after it is loaded
---
.../schabi/newpipe/fragments/detail/VideoDetailFragment.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index 14e989625..fd2a3285d 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -505,7 +505,7 @@ public class VideoDetailFragment
setHeightThumbnail();
-
+ thumbnailBackgroundButton.requestFocus();
}
@Override
From 79c962fc8805183fdbe44b5dfe0ab7b2e32cd141 Mon Sep 17 00:00:00 2001
From: Alexander
Date: Mon, 30 Sep 2019 12:02:07 +0700
Subject: [PATCH 0019/1194] More robust focus search in
SuperScrollLayoutManager
FocusFinder has glitches when some of target Views have different size.
Fortunately LayoutManager can redefine focus search strategy to override
the default behavior.
---
.../views/SuperScrollLayoutManager.java | 110 +++++++++++++++++-
app/src/main/res/layout/fragment_comments.xml | 2 +-
2 files changed, 110 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/views/SuperScrollLayoutManager.java b/app/src/main/java/org/schabi/newpipe/views/SuperScrollLayoutManager.java
index 33fe7b9cc..3946b8435 100644
--- a/app/src/main/java/org/schabi/newpipe/views/SuperScrollLayoutManager.java
+++ b/app/src/main/java/org/schabi/newpipe/views/SuperScrollLayoutManager.java
@@ -19,16 +19,21 @@ package org.schabi.newpipe.views;
import android.content.Context;
import android.graphics.Rect;
-import android.view.FocusFinder;
import android.view.View;
+import android.view.ViewGroup;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import java.util.ArrayList;
+
public final class SuperScrollLayoutManager extends LinearLayoutManager {
private final Rect handy = new Rect();
+ private final ArrayList focusables = new ArrayList<>();
+
public SuperScrollLayoutManager(Context context) {
super(context);
}
@@ -50,4 +55,107 @@ public final class SuperScrollLayoutManager extends LinearLayoutManager {
return super.requestChildRectangleOnScreen(parent, child, rect, immediate, focusedChildVisible);
}
+
+ @Nullable
+ @Override
+ public View onInterceptFocusSearch(@NonNull View focused, int direction) {
+ View focusedItem = findContainingItemView(focused);
+ if (focusedItem == null) {
+ return super.onInterceptFocusSearch(focused, direction);
+ }
+
+ int listDirection = getAbsoluteDirection(direction);
+ if (listDirection == 0) {
+ return super.onInterceptFocusSearch(focused, direction);
+ }
+
+ // FocusFinder has an oddity: it considers size of Views more important
+ // than closeness to source View. This means, that big Views far away from current item
+ // are preferred to smaller sub-View of closer item. Setting focusability of closer item
+ // to FOCUS_AFTER_DESCENDANTS does not solve this, because ViewGroup#addFocusables omits
+ // such parent itself from list, if any of children are focusable.
+ // Fortunately we can intercept focus search and implement our own logic, based purely
+ // on position along the LinearLayoutManager axis
+
+ ViewGroup recycler = (ViewGroup) focusedItem.getParent();
+
+ int sourcePosition = getPosition(focusedItem);
+ if (sourcePosition == 0 && listDirection < 0) {
+ return super.onInterceptFocusSearch(focused, direction);
+ }
+
+ View preferred = null;
+
+ int distance = Integer.MAX_VALUE;
+
+ focusables.clear();
+
+ recycler.addFocusables(focusables, direction, recycler.isInTouchMode() ? View.FOCUSABLES_TOUCH_MODE : View.FOCUSABLES_ALL);
+
+ try {
+ for (View view : focusables) {
+ if (view == focused || view == recycler) {
+ continue;
+ }
+
+ int candidate = getDistance(sourcePosition, view, listDirection);
+ if (candidate < 0) {
+ continue;
+ }
+
+ if (candidate < distance) {
+ distance = candidate;
+ preferred = view;
+ }
+ }
+ } finally {
+ focusables.clear();
+ }
+
+ return preferred;
+ }
+
+ private int getAbsoluteDirection(int direction) {
+ switch (direction) {
+ default:
+ break;
+ case View.FOCUS_FORWARD:
+ return 1;
+ case View.FOCUS_BACKWARD:
+ return -1;
+ }
+
+ if (getOrientation() == RecyclerView.HORIZONTAL) {
+ switch (direction) {
+ default:
+ break;
+ case View.FOCUS_LEFT:
+ return getReverseLayout() ? 1 : -1;
+ case View.FOCUS_RIGHT:
+ return getReverseLayout() ? -1 : 1;
+ }
+ } else {
+ switch (direction) {
+ default:
+ break;
+ case View.FOCUS_UP:
+ return getReverseLayout() ? 1 : -1;
+ case View.FOCUS_DOWN:
+ return getReverseLayout() ? -1 : 1;
+ }
+ }
+
+ return 0;
+ }
+
+ private int getDistance(int sourcePosition, View candidate, int direction) {
+ View itemView = findContainingItemView(candidate);
+ if (itemView == null) {
+ return -1;
+ }
+
+ int position = getPosition(itemView);
+
+ return direction * (position - sourcePosition);
+ }
}
diff --git a/app/src/main/res/layout/fragment_comments.xml b/app/src/main/res/layout/fragment_comments.xml
index 0ee62c05d..4ced11d35 100644
--- a/app/src/main/res/layout/fragment_comments.xml
+++ b/app/src/main/res/layout/fragment_comments.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
Date: Wed, 9 Oct 2019 17:09:07 +0700
Subject: [PATCH 0020/1194] Allow comment links (if any) to gain focus
---
.../holder/CommentsMiniInfoItemHolder.java | 25 +++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
index 4d94ec392..e7b09f3e2 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
@@ -1,6 +1,9 @@
package org.schabi.newpipe.info_list.holder;
import androidx.appcompat.app.AppCompatActivity;
+
+import android.text.method.LinkMovementMethod;
+import android.text.style.URLSpan;
import android.text.util.Linkify;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -122,15 +125,35 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
});
}
+ private void allowLinkFocus() {
+ if (itemView.isInTouchMode()) {
+ return;
+ }
+
+ URLSpan[] urls = itemContentView.getUrls();
+
+ if (urls != null && urls.length != 0) {
+ itemContentView.setMovementMethod(LinkMovementMethod.getInstance());
+ }
+ }
+
private void ellipsize() {
+ boolean hasEllipsis = false;
+
if (itemContentView.getLineCount() > commentDefaultLines){
int endOfLastLine = itemContentView.getLayout().getLineEnd(commentDefaultLines - 1);
int end = itemContentView.getText().toString().lastIndexOf(' ', endOfLastLine -2);
if(end == -1) end = Math.max(endOfLastLine -2, 0);
String newVal = itemContentView.getText().subSequence(0, end) + " …";
itemContentView.setText(newVal);
+ hasEllipsis = true;
}
+
linkify();
+
+ if (!hasEllipsis) {
+ allowLinkFocus();
+ }
}
private void toggleEllipsize() {
@@ -145,11 +168,13 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
itemContentView.setMaxLines(commentExpandedLines);
itemContentView.setText(commentText);
linkify();
+ allowLinkFocus();
}
private void linkify(){
Linkify.addLinks(itemContentView, Linkify.WEB_URLS);
Linkify.addLinks(itemContentView, pattern, null, null, timestampLink);
+
itemContentView.setMovementMethod(null);
}
}
From 6e76610f303af3428f5ec0afc565ce98cc4bb7ed Mon Sep 17 00:00:00 2001
From: Alexander
Date: Mon, 23 Sep 2019 17:57:14 +0700
Subject: [PATCH 0021/1194] Eliminate bunch of ExoPlayer warnings
---
app/src/main/java/org/schabi/newpipe/player/BasePlayer.java | 2 +-
.../org/schabi/newpipe/player/playback/MediaSourceManager.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index a07afcea9..50a60ecb1 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -556,7 +556,7 @@ public abstract class BasePlayer implements
}
private Disposable getProgressReactor() {
- return Observable.interval(PROGRESS_LOOP_INTERVAL_MILLIS, TimeUnit.MILLISECONDS)
+ return Observable.interval(PROGRESS_LOOP_INTERVAL_MILLIS, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ignored -> triggerProgressUpdate(),
error -> Log.e(TAG, "Progress update failure: ", error));
diff --git a/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java b/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java
index 85c852f57..bbe391807 100644
--- a/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java
@@ -318,7 +318,7 @@ public class MediaSourceManager {
//////////////////////////////////////////////////////////////////////////*/
private Observable getEdgeIntervalSignal() {
- return Observable.interval(progressUpdateIntervalMillis, TimeUnit.MILLISECONDS)
+ return Observable.interval(progressUpdateIntervalMillis, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.filter(ignored ->
playbackListener.isApproachingPlaybackEdge(playbackNearEndGapMillis));
}
From a7c31e6bcc28067573aebd8a198091cdc053a7f4 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Fri, 8 Nov 2019 14:26:12 +0700
Subject: [PATCH 0022/1194] RecyclerView scroll fixes
* Move all focus-related work arouns to NewPipeRecyclerView
* Try to pass focus within closer parents first
* Do small arrow scroll if there are not more focusables in move direction
---
.../newpipe/views/NewPipeRecyclerView.java | 173 ++++++++++++++++--
1 file changed, 160 insertions(+), 13 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java b/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java
index 76dee200f..435281d14 100644
--- a/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java
+++ b/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java
@@ -18,55 +18,202 @@
package org.schabi.newpipe.views;
import android.content.Context;
+import android.graphics.Rect;
+import android.os.Build;
import android.util.AttributeSet;
+import android.util.Log;
+import android.view.FocusFinder;
import android.view.View;
+import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
public class NewPipeRecyclerView extends RecyclerView {
- private static final String TAG = "FixedRecyclerView";
+ private static final String TAG = "NewPipeRecyclerView";
+
+ private Rect focusRect = new Rect();
+ private Rect tempFocus = new Rect();
+
+ private boolean allowDpadScroll;
public NewPipeRecyclerView(@NonNull Context context) {
super(context);
+
+ init();
}
public NewPipeRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
+
+ init();
}
public NewPipeRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+
+ init();
}
- @Override
- public View focusSearch(int direction) {
- return null;
+ private void init() {
+ setFocusable(true);
+
+ setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
+ }
+
+ public void setFocusScrollAllowed(boolean allowDpadScroll) {
+ this.allowDpadScroll = allowDpadScroll;
}
@Override
public View focusSearch(View focused, int direction) {
+ // RecyclerView has buggy focusSearch(), that calls into Adapter several times,
+ // but ultimately fails to produce correct results in many cases. To add insult to injury,
+ // it's focusSearch() hard-codes several behaviors, incompatible with widely accepted focus
+ // handling practices: RecyclerView does not allow Adapter to give focus to itself (!!) and
+ // always checks, that returned View is located in "correct" direction (which prevents us
+ // from temporarily giving focus to special hidden View).
return null;
}
+ @Override
+ protected void removeDetachedView(View child, boolean animate) {
+ if (child.hasFocus()) {
+ // If the focused child is being removed (can happen during very fast scrolling),
+ // temporarily give focus to ourselves. This will usually result in another child
+ // gaining focus (which one does not really matter, because at that point scrolling
+ // is FAST, and that child will soon be off-screen too)
+ requestFocus();
+ }
+
+ super.removeDetachedView(child, animate);
+ }
+
+ // we override focusSearch to always return null, so all moves moves lead to dispatchUnhandledMove()
+ // as added advantage, we can fully swallow some kinds of moves (such as downward movement, that
+ // happens when loading additional contents is in progress
+
@Override
public boolean dispatchUnhandledMove(View focused, int direction) {
- View found = super.focusSearch(focused, direction);
- if (found != null) {
- found.requestFocus(direction);
+ tempFocus.setEmpty();
+
+ // save focus rect before further manipulation (both focusSearch() and scrollBy()
+ // can mess with focused View by moving it off-screen and detaching)
+
+ if (focused != null) {
+ View focusedItem = findContainingItemView(focused);
+ if (focusedItem != null) {
+ focusedItem.getHitRect(focusRect);
+ }
+ }
+
+ // call focusSearch() to initiate layout, but disregard returned View for now
+ View adapterResult = super.focusSearch(focused, direction);
+ if (adapterResult != null && !isOutside(adapterResult)) {
+ adapterResult.requestFocus(direction);
return true;
}
- if (direction == View.FOCUS_UP) {
- if (canScrollVertically(-1)) {
- scrollBy(0, -10);
- return true;
- }
+ if (arrowScroll(direction)) {
+ // if RecyclerView can not yield focus, but there is still some scrolling space in indicated,
+ // direction, scroll some fixed amount in that direction (the same logic in ScrollView)
+ return true;
+ }
- return false;
+ if (focused != this && direction == FOCUS_DOWN && !allowDpadScroll) {
+ Log.i(TAG, "Consuming downward scroll: content load in progress");
+ return true;
+ }
+
+ if (tryFocusFinder(direction)) {
+ return true;
+ }
+
+ if (adapterResult != null) {
+ adapterResult.requestFocus(direction);
+ return true;
}
return super.dispatchUnhandledMove(focused, direction);
}
+
+ private boolean tryFocusFinder(int direction) {
+ if (Build.VERSION.SDK_INT >= 28) {
+ // Android 9 implemented bunch of handy changes to focus, that render code below less useful, and
+ // also broke findNextFocusFromRect in way, that render this hack useless
+ return false;
+ }
+
+ FocusFinder finder = FocusFinder.getInstance();
+
+ // try to use FocusFinder instead of adapter
+ ViewGroup root = (ViewGroup) getRootView();
+
+ tempFocus.set(focusRect);
+
+ root.offsetDescendantRectToMyCoords(this, tempFocus);
+
+ View focusFinderResult = finder.findNextFocusFromRect(root, tempFocus, direction);
+ if (focusFinderResult != null && !isOutside(focusFinderResult)) {
+ focusFinderResult.requestFocus(direction);
+ return true;
+ }
+
+ // look for focus in our ancestors, increasing search scope with each failure
+ // this provides much better locality than using FocusFinder with root
+ ViewGroup parent = (ViewGroup) getParent();
+
+ while (parent != root) {
+ tempFocus.set(focusRect);
+
+ parent.offsetDescendantRectToMyCoords(this, tempFocus);
+
+ View candidate = finder.findNextFocusFromRect(parent, tempFocus, direction);
+ if (candidate != null && candidate.requestFocus(direction)) {
+ return true;
+ }
+
+ parent = (ViewGroup) parent.getParent();
+ }
+
+ return false;
+ }
+
+ private boolean arrowScroll(int direction) {
+ switch (direction) {
+ case FOCUS_DOWN:
+ if (!canScrollVertically(1)) {
+ return false;
+ }
+ scrollBy(0, 100);
+ break;
+ case FOCUS_UP:
+ if (!canScrollVertically(-1)) {
+ return false;
+ }
+ scrollBy(0, -100);
+ break;
+ case FOCUS_LEFT:
+ if (!canScrollHorizontally(-1)) {
+ return false;
+ }
+ scrollBy(-100, 0);
+ break;
+ case FOCUS_RIGHT:
+ if (!canScrollHorizontally(-1)) {
+ return false;
+ }
+ scrollBy(100, 0);
+ break;
+ default:
+ return false;
+ }
+
+ return true;
+ }
+
+ private boolean isOutside(View view) {
+ return findContainingItemView(view) == null;
+ }
}
From b5558a8b78962234d855f318e1b059bd88892242 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Fri, 8 Nov 2019 14:41:16 +0700
Subject: [PATCH 0023/1194] Remove FixedGridLayoutManager
---
.../fragments/list/BaseListFragment.java | 3 +-
.../newpipe/local/BaseLocalListFragment.java | 3 +-
.../subscription/SubscriptionFragment.java | 3 +-
.../newpipe/views/FixedGridLayoutManager.java | 59 -------------------
.../giga/ui/fragment/MissionsFragment.java | 3 +-
5 files changed, 4 insertions(+), 67 deletions(-)
delete mode 100644 app/src/main/java/org/schabi/newpipe/views/FixedGridLayoutManager.java
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
index 88684f2e7..a3844a92f 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
@@ -35,7 +35,6 @@ import org.schabi.newpipe.util.OnClickGesture;
import org.schabi.newpipe.util.StateSaver;
import org.schabi.newpipe.util.StreamDialogEntry;
import org.schabi.newpipe.views.SuperScrollLayoutManager;
-import org.schabi.newpipe.views.FixedGridLayoutManager;
import java.util.List;
import java.util.Queue;
@@ -157,7 +156,7 @@ public abstract class BaseListFragment extends BaseStateFragment implem
int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width);
width += (24 * resources.getDisplayMetrics().density);
final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels / (double)width);
- final GridLayoutManager lm = new FixedGridLayoutManager(activity, spanCount);
+ final GridLayoutManager lm = new GridLayoutManager(activity, spanCount);
lm.setSpanSizeLookup(infoListAdapter.getSpanSizeLookup(spanCount));
return lm;
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java b/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java
index c1293e240..414a9b6b5 100644
--- a/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java
@@ -18,7 +18,6 @@ import android.view.View;
import org.schabi.newpipe.R;
import org.schabi.newpipe.fragments.BaseStateFragment;
import org.schabi.newpipe.fragments.list.ListViewContract;
-import org.schabi.newpipe.views.FixedGridLayoutManager;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
@@ -96,7 +95,7 @@ public abstract class BaseLocalListFragment extends BaseStateFragment
int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width);
width += (24 * resources.getDisplayMetrics().density);
final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels / (double)width);
- final GridLayoutManager lm = new FixedGridLayoutManager(activity, spanCount);
+ final GridLayoutManager lm = new GridLayoutManager(activity, spanCount);
lm.setSpanSizeLookup(itemListAdapter.getSpanSizeLookup(spanCount));
return lm;
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java
index ea820b71e..bff6c1b3a 100644
--- a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.java
@@ -57,7 +57,6 @@ import org.schabi.newpipe.util.ServiceHelper;
import org.schabi.newpipe.util.ShareUtils;
import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.CollapsibleView;
-import org.schabi.newpipe.views.FixedGridLayoutManager;
import java.io.File;
import java.text.SimpleDateFormat;
@@ -193,7 +192,7 @@ public class SubscriptionFragment extends BaseStateFragment
- * FixedGridLayoutManager.java is part of NewPipe.
- *
- * NewPipe is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * NewPipe is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with NewPipe. If not, see .
- */
-package org.schabi.newpipe.views;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.FocusFinder;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-// Version of GridLayoutManager that works around https://issuetracker.google.com/issues/37067220
-public class FixedGridLayoutManager extends GridLayoutManager {
- public FixedGridLayoutManager(Context context, int spanCount) {
- super(context, spanCount);
- }
-
- public FixedGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- public FixedGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
- super(context, spanCount, orientation, reverseLayout);
- }
-
- @Override
- public View onFocusSearchFailed(View focused, int focusDirection, RecyclerView.Recycler recycler, RecyclerView.State state) {
- FocusFinder ff = FocusFinder.getInstance();
-
- View result = ff.findNextFocus((ViewGroup) focused.getParent(), focused, focusDirection);
- if (result != null) {
- return super.onFocusSearchFailed(focused, focusDirection, recycler, state);
- }
-
- if (focusDirection == View.FOCUS_DOWN) {
- scrollVerticallyBy(10, recycler, state);
- return null;
- }
-
- return super.onFocusSearchFailed(focused, focusDirection, recycler, state);
- }
-}
diff --git a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
index 3792f030a..26da47b1f 100644
--- a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
+++ b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
@@ -30,7 +30,6 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.settings.NewPipeSettings;
import org.schabi.newpipe.util.FilePickerActivityHelper;
import org.schabi.newpipe.util.ThemeHelper;
-import org.schabi.newpipe.views.FixedGridLayoutManager;
import java.io.File;
import java.io.IOException;
@@ -109,7 +108,7 @@ public class MissionsFragment extends Fragment {
mList = v.findViewById(R.id.mission_recycler);
// Init layouts managers
- mGridManager = new FixedGridLayoutManager(getActivity(), SPAN_SIZE);
+ mGridManager = new GridLayoutManager(getActivity(), SPAN_SIZE);
mGridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
From 9801cf50e38abd0214340d48dba1e5b8e1572cef Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Thu, 14 Nov 2019 20:34:31 +0659
Subject: [PATCH 0024/1194] Save/restore focused item
---
.../fragments/list/BaseListFragment.java | 41 +++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
index a3844a92f..a2821a65e 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
@@ -34,6 +34,7 @@ import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.OnClickGesture;
import org.schabi.newpipe.util.StateSaver;
import org.schabi.newpipe.util.StreamDialogEntry;
+import org.schabi.newpipe.views.NewPipeRecyclerView;
import org.schabi.newpipe.views.SuperScrollLayoutManager;
import java.util.List;
@@ -50,6 +51,7 @@ public abstract class BaseListFragment extends BaseStateFragment implem
protected InfoListAdapter infoListAdapter;
protected RecyclerView itemsList;
private int updateFlags = 0;
+ private int focusedPosition = -1;
private static final int LIST_MODE_UPDATE_FLAG = 0x32;
@@ -111,9 +113,22 @@ public abstract class BaseListFragment extends BaseStateFragment implem
return "." + infoListAdapter.getItemsList().size() + ".list";
}
+ private int getFocusedPosition() {
+ View focusedItem = itemsList.getFocusedChild();
+ if (focusedItem != null) {
+ RecyclerView.ViewHolder itemHolder = itemsList.findContainingViewHolder(focusedItem);
+ if (itemHolder != null) {
+ return itemHolder.getAdapterPosition();
+ }
+ }
+
+ return -1;
+ }
+
@Override
public void writeTo(Queue objectsToSave) {
objectsToSave.add(infoListAdapter.getItemsList());
+ objectsToSave.add(getFocusedPosition());
}
@Override
@@ -121,6 +136,20 @@ public abstract class BaseListFragment extends BaseStateFragment implem
public void readFrom(@NonNull Queue savedObjects) throws Exception {
infoListAdapter.getItemsList().clear();
infoListAdapter.getItemsList().addAll((List) savedObjects.poll());
+ restoreFocus((Integer) savedObjects.poll());
+ }
+
+ private void restoreFocus(Integer position) {
+ if (position == null || position < 0) {
+ return;
+ }
+
+ itemsList.post(() -> {
+ RecyclerView.ViewHolder focusedHolder = itemsList.findViewHolderForAdapterPosition(position);
+ if (focusedHolder != null) {
+ focusedHolder.itemView.requestFocus();
+ }
+ });
}
@Override
@@ -135,6 +164,18 @@ public abstract class BaseListFragment extends BaseStateFragment implem
savedState = StateSaver.tryToRestore(bundle, this);
}
+ @Override
+ public void onStop() {
+ focusedPosition = getFocusedPosition();
+ super.onStop();
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ restoreFocus(focusedPosition);
+ }
+
/*//////////////////////////////////////////////////////////////////////////
// Init
//////////////////////////////////////////////////////////////////////////*/
From 7bb5cacb0dff6f167046f612af5caf3f603f69da Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Thu, 14 Nov 2019 20:37:16 +0659
Subject: [PATCH 0025/1194] Special MovementMethod for video description
Video descriptions can be very long. Some of them are
basically walls of text with couple of lines at top or bottom.
They are also not scrolled within TextView itself, - instead
NewPipe expects user to scroll their containing ViewGroup.
This renders all builtin MovementMethod implementations useless.
This commit adds a new MovementMethod, that uses requestRectangleOnScreen
to intelligently re-position the TextView within it's scrollable container.
---
.../fragments/detail/VideoDetailFragment.java | 5 +-
.../views/LargeTextMovementMethod.java | 290 ++++++++++++++++++
.../fragment_video_detail.xml | 1 +
3 files changed, 295 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/views/LargeTextMovementMethod.java
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index fd2a3285d..c698d4ad4 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -87,6 +87,7 @@ import org.schabi.newpipe.util.ShareUtils;
import org.schabi.newpipe.util.StreamItemAdapter;
import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper;
import org.schabi.newpipe.views.AnimatedProgressBar;
+import org.schabi.newpipe.views.LargeTextMovementMethod;
import java.io.Serializable;
import java.util.Collection;
@@ -441,10 +442,13 @@ public class VideoDetailFragment
if (videoDescriptionRootLayout.getVisibility() == View.VISIBLE) {
videoTitleTextView.setMaxLines(1);
videoDescriptionRootLayout.setVisibility(View.GONE);
+ videoDescriptionView.setFocusable(false);
videoTitleToggleArrow.setImageResource(R.drawable.arrow_down);
} else {
videoTitleTextView.setMaxLines(10);
videoDescriptionRootLayout.setVisibility(View.VISIBLE);
+ videoDescriptionView.setFocusable(true);
+ videoDescriptionView.setMovementMethod(new LargeTextMovementMethod());
videoTitleToggleArrow.setImageResource(R.drawable.arrow_up);
}
}
@@ -481,7 +485,6 @@ public class VideoDetailFragment
videoDescriptionRootLayout = rootView.findViewById(R.id.detail_description_root_layout);
videoUploadDateView = rootView.findViewById(R.id.detail_upload_date_view);
videoDescriptionView = rootView.findViewById(R.id.detail_description_view);
- videoDescriptionView.setMovementMethod(LinkMovementMethod.getInstance());
videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS);
thumbsUpTextView = rootView.findViewById(R.id.detail_thumbs_up_count_view);
diff --git a/app/src/main/java/org/schabi/newpipe/views/LargeTextMovementMethod.java b/app/src/main/java/org/schabi/newpipe/views/LargeTextMovementMethod.java
new file mode 100644
index 000000000..1f9ab5e2d
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/views/LargeTextMovementMethod.java
@@ -0,0 +1,290 @@
+/*
+ * Copyright 2019 Alexander Rvachev
+ * FocusOverlayView.java is part of NewPipe
+ *
+ * License: GPL-3.0+
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.schabi.newpipe.views;
+
+import android.graphics.Rect;
+import android.text.Layout;
+import android.text.Selection;
+import android.text.Spannable;
+import android.text.method.LinkMovementMethod;
+import android.text.style.ClickableSpan;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewParent;
+import android.widget.TextView;
+
+public class LargeTextMovementMethod extends LinkMovementMethod {
+ private final Rect visibleRect = new Rect();
+
+ private int dir;
+
+ @Override
+ public void onTakeFocus(TextView view, Spannable text, int dir) {
+ Selection.removeSelection(text);
+
+ super.onTakeFocus(view, text, dir);
+
+ this.dir = dirToRelative(dir);
+ }
+
+ @Override
+ protected boolean handleMovementKey(TextView widget, Spannable buffer, int keyCode, int movementMetaState, KeyEvent event) {
+ if (!doHandleMovement(widget, buffer, keyCode, movementMetaState, event)) {
+ // clear selection to make sure, that it does not confuse focus handling code
+ Selection.removeSelection(buffer);
+ return false;
+ }
+
+ return true;
+ }
+
+ private boolean doHandleMovement(TextView widget, Spannable buffer, int keyCode, int movementMetaState, KeyEvent event) {
+ int newDir = keyToDir(keyCode);
+
+ if (dir != 0 && newDir != dir) {
+ return false;
+ }
+
+ this.dir = 0;
+
+ ViewGroup root = findScrollableParent(widget);
+
+ widget.getHitRect(visibleRect);
+
+ root.offsetDescendantRectToMyCoords((View) widget.getParent(), visibleRect);
+
+ return super.handleMovementKey(widget, buffer, keyCode, movementMetaState, event);
+ }
+
+ @Override
+ protected boolean up(TextView widget, Spannable buffer) {
+ if (gotoPrev(widget, buffer)) {
+ return true;
+ }
+
+ return super.up(widget, buffer);
+ }
+
+ @Override
+ protected boolean left(TextView widget, Spannable buffer) {
+ if (gotoPrev(widget, buffer)) {
+ return true;
+ }
+
+ return super.left(widget, buffer);
+ }
+
+ @Override
+ protected boolean right(TextView widget, Spannable buffer) {
+ if (gotoNext(widget, buffer)) {
+ return true;
+ }
+
+ return super.right(widget, buffer);
+ }
+
+ @Override
+ protected boolean down(TextView widget, Spannable buffer) {
+ if (gotoNext(widget, buffer)) {
+ return true;
+ }
+
+ return super.down(widget, buffer);
+ }
+
+ private boolean gotoPrev(TextView view, Spannable buffer) {
+ Layout layout = view.getLayout();
+ if (layout == null) {
+ return false;
+ }
+
+ View root = findScrollableParent(view);
+
+ int rootHeight = root.getHeight();
+
+ if (visibleRect.top >= 0) {
+ // we fit entirely into the viewport, no need for fancy footwork
+ return false;
+ }
+
+ int topExtra = -visibleRect.top;
+
+ int firstVisibleLineNumber = layout.getLineForVertical(topExtra);
+
+ // when deciding whether to pass "focus" to span, account for one more line
+ // this ensures, that focus is never passed to spans partially outside scroll window
+ int visibleStart = firstVisibleLineNumber == 0 ? 0 : layout.getLineStart(firstVisibleLineNumber - 1);
+
+ ClickableSpan[] candidates = buffer.getSpans(visibleStart, buffer.length(), ClickableSpan.class);
+
+ if (candidates.length != 0) {
+ int a = Selection.getSelectionStart(buffer);
+ int b = Selection.getSelectionEnd(buffer);
+
+ int selStart = Math.min(a, b);
+ int selEnd = Math.max(a, b);
+
+ int bestStart = -1;
+ int bestEnd = -1;
+
+ for (int i = 0; i < candidates.length; i++) {
+ int start = buffer.getSpanStart(candidates[i]);
+ int end = buffer.getSpanEnd(candidates[i]);
+
+ if ((end < selEnd || selStart == selEnd) && start >= visibleStart) {
+ if (end > bestEnd) {
+ bestStart = buffer.getSpanStart(candidates[i]);
+ bestEnd = end;
+ }
+ }
+ }
+
+ if (bestStart >= 0) {
+ Selection.setSelection(buffer, bestEnd, bestStart);
+ return true;
+ }
+ }
+
+ float fourLines = view.getTextSize() * 4;
+
+ visibleRect.left = 0;
+ visibleRect.right = view.getWidth();
+ visibleRect.top = Math.max(0, (int) (topExtra - fourLines));
+ visibleRect.bottom = visibleRect.top + rootHeight;
+
+ return view.requestRectangleOnScreen(visibleRect);
+ }
+
+ private boolean gotoNext(TextView view, Spannable buffer) {
+ Layout layout = view.getLayout();
+ if (layout == null) {
+ return false;
+ }
+
+ View root = findScrollableParent(view);
+
+ int rootHeight = root.getHeight();
+
+ if (visibleRect.bottom <= rootHeight) {
+ // we fit entirely into the viewport, no need for fancy footwork
+ return false;
+ }
+
+ int bottomExtra = visibleRect.bottom - rootHeight;
+
+ int visibleBottomBorder = view.getHeight() - bottomExtra;
+
+ int lineCount = layout.getLineCount();
+
+ int lastVisibleLineNumber = layout.getLineForVertical(visibleBottomBorder);
+
+ // when deciding whether to pass "focus" to span, account for one more line
+ // this ensures, that focus is never passed to spans partially outside scroll window
+ int visibleEnd = lastVisibleLineNumber == lineCount - 1 ? buffer.length() : layout.getLineEnd(lastVisibleLineNumber - 1);
+
+ ClickableSpan[] candidates = buffer.getSpans(0, visibleEnd, ClickableSpan.class);
+
+ if (candidates.length != 0) {
+ int a = Selection.getSelectionStart(buffer);
+ int b = Selection.getSelectionEnd(buffer);
+
+ int selStart = Math.min(a, b);
+ int selEnd = Math.max(a, b);
+
+ int bestStart = Integer.MAX_VALUE;
+ int bestEnd = Integer.MAX_VALUE;
+
+ for (int i = 0; i < candidates.length; i++) {
+ int start = buffer.getSpanStart(candidates[i]);
+ int end = buffer.getSpanEnd(candidates[i]);
+
+ if ((start > selStart || selStart == selEnd) && end <= visibleEnd) {
+ if (start < bestStart) {
+ bestStart = start;
+ bestEnd = buffer.getSpanEnd(candidates[i]);
+ }
+ }
+ }
+
+ if (bestEnd < Integer.MAX_VALUE) {
+ // cool, we have managed to find next link without having to adjust self within view
+ Selection.setSelection(buffer, bestStart, bestEnd);
+ return true;
+ }
+ }
+
+ // there are no links within visible area, but still some text past visible area
+ // scroll visible area further in required direction
+ float fourLines = view.getTextSize() * 4;
+
+ visibleRect.left = 0;
+ visibleRect.right = view.getWidth();
+ visibleRect.bottom = Math.min((int) (visibleBottomBorder + fourLines), view.getHeight());
+ visibleRect.top = visibleRect.bottom - rootHeight;
+
+ return view.requestRectangleOnScreen(visibleRect);
+ }
+
+ private ViewGroup findScrollableParent(View view) {
+ View current = view;
+
+ ViewParent parent;
+ do {
+ parent = current.getParent();
+
+ if (parent == current || !(parent instanceof View)) {
+ return (ViewGroup) view.getRootView();
+ }
+
+ current = (View) parent;
+
+ if (current.isScrollContainer()) {
+ return (ViewGroup) current;
+ }
+ }
+ while (true);
+ }
+
+ private int dirToRelative(int dir) {
+ switch (dir) {
+ case View.FOCUS_DOWN:
+ case View.FOCUS_RIGHT:
+ return View.FOCUS_FORWARD;
+ case View.FOCUS_UP:
+ case View.FOCUS_LEFT:
+ return View.FOCUS_BACKWARD;
+ }
+
+ return dir;
+ }
+
+ private int keyToDir(int keyCode) {
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_DPAD_UP:
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ return View.FOCUS_BACKWARD;
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ return View.FOCUS_FORWARD;
+ }
+
+ return View.FOCUS_FORWARD;
+ }
+}
diff --git a/app/src/main/res/layout-large-land/fragment_video_detail.xml b/app/src/main/res/layout-large-land/fragment_video_detail.xml
index 02d330ade..6d54525db 100644
--- a/app/src/main/res/layout-large-land/fragment_video_detail.xml
+++ b/app/src/main/res/layout-large-land/fragment_video_detail.xml
@@ -15,6 +15,7 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="5"
+ android:isScrollContainer="true"
android:fitsSystemWindows="true">
Date: Thu, 14 Nov 2019 20:48:19 +0659
Subject: [PATCH 0026/1194] Add hints for focus transition from description
---
.../main/res/layout-large-land/fragment_video_detail.xml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/layout-large-land/fragment_video_detail.xml b/app/src/main/res/layout-large-land/fragment_video_detail.xml
index 6d54525db..e1a680e5d 100644
--- a/app/src/main/res/layout-large-land/fragment_video_detail.xml
+++ b/app/src/main/res/layout-large-land/fragment_video_detail.xml
@@ -379,6 +379,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
+ android:focusable="true"
+ android:descendantFocusability="afterDescendants"
android:padding="6dp">
@@ -467,6 +469,8 @@
android:layout_marginTop="5dp"
android:orientation="vertical"
android:visibility="gone"
+ android:focusable="true"
+ android:descendantFocusability="afterDescendants"
tools:visibility="visible">
Date: Thu, 14 Nov 2019 20:50:35 +0659
Subject: [PATCH 0027/1194] More fixes to comment focus handling
---
.../holder/CommentsMiniInfoItemHolder.java | 30 ++++++++++++++-----
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
index e7b09f3e2..198766069 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
@@ -126,14 +126,28 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
}
private void allowLinkFocus() {
+ itemContentView.setMovementMethod(LinkMovementMethod.getInstance());
+ }
+
+ private void denyLinkFocus() {
+ itemContentView.setMovementMethod(null);
+ }
+
+ private boolean shouldFocusLinks() {
if (itemView.isInTouchMode()) {
- return;
+ return false;
}
URLSpan[] urls = itemContentView.getUrls();
- if (urls != null && urls.length != 0) {
- itemContentView.setMovementMethod(LinkMovementMethod.getInstance());
+ return urls != null && urls.length != 0;
+ }
+
+ private void determineLinkFocus() {
+ if (shouldFocusLinks()) {
+ allowLinkFocus();
+ } else {
+ denyLinkFocus();
}
}
@@ -151,8 +165,10 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
linkify();
- if (!hasEllipsis) {
- allowLinkFocus();
+ if (hasEllipsis) {
+ denyLinkFocus();
+ } else {
+ determineLinkFocus();
}
}
@@ -168,13 +184,11 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
itemContentView.setMaxLines(commentExpandedLines);
itemContentView.setText(commentText);
linkify();
- allowLinkFocus();
+ determineLinkFocus();
}
private void linkify(){
Linkify.addLinks(itemContentView, Linkify.WEB_URLS);
Linkify.addLinks(itemContentView, pattern, null, null, timestampLink);
-
- itemContentView.setMovementMethod(null);
}
}
From 7d75950624f56512a713a2b1ba4cbdc700d89673 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Thu, 14 Nov 2019 20:54:40 +0659
Subject: [PATCH 0028/1194] Disable srolling down comment list while comments
are loading
Prevents comment list from losing focus to some outside View
when user tries to scroll down after reaching "end"
---
.../fragments/list/BaseListInfoFragment.java | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java
index 9a8e1fd17..7363d221c 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java
@@ -10,6 +10,7 @@ import androidx.annotation.NonNull;
import org.schabi.newpipe.extractor.ListExtractor;
import org.schabi.newpipe.extractor.ListInfo;
import org.schabi.newpipe.util.Constants;
+import org.schabi.newpipe.views.NewPipeRecyclerView;
import java.util.Queue;
@@ -17,6 +18,8 @@ import icepick.State;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.Action;
+import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
public abstract class BaseListInfoFragment
@@ -136,9 +139,13 @@ public abstract class BaseListInfoFragment
isLoading.set(true);
if (currentWorker != null) currentWorker.dispose();
+
+ forbidDownwardFocusScroll();
+
currentWorker = loadMoreItemsLogic()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
+ .doFinally(this::allowDownwardFocusScroll)
.subscribe((@io.reactivex.annotations.NonNull ListExtractor.InfoItemsPage InfoItemsPage) -> {
isLoading.set(false);
handleNextItems(InfoItemsPage);
@@ -148,6 +155,18 @@ public abstract class BaseListInfoFragment
});
}
+ private void forbidDownwardFocusScroll() {
+ if (itemsList instanceof NewPipeRecyclerView) {
+ ((NewPipeRecyclerView) itemsList).setFocusScrollAllowed(false);
+ }
+ }
+
+ private void allowDownwardFocusScroll() {
+ if (itemsList instanceof NewPipeRecyclerView) {
+ ((NewPipeRecyclerView) itemsList).setFocusScrollAllowed(true);
+ }
+ }
+
@Override
public void handleNextItems(ListExtractor.InfoItemsPage result) {
super.handleNextItems(result);
From 436c75ca6c081b34388a835924b1270277d50ffe Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Thu, 14 Nov 2019 22:43:54 +0659
Subject: [PATCH 0029/1194] Make comment pic explicitly non-focusable
---
app/src/main/res/layout/list_comments_item.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/layout/list_comments_item.xml b/app/src/main/res/layout/list_comments_item.xml
index 393d7d1b4..41606201f 100644
--- a/app/src/main/res/layout/list_comments_item.xml
+++ b/app/src/main/res/layout/list_comments_item.xml
@@ -18,6 +18,7 @@
android:layout_alignParentTop="true"
android:layout_marginRight="@dimen/video_item_search_image_right_margin"
android:contentDescription="@string/list_thumbnail_view_description"
+ android:focusable="false"
android:src="@drawable/buddy"
tools:ignore="RtlHardcoded" />
From a1e02f770434237b0be4bf0bf8a938a33018b509 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Sat, 16 Nov 2019 13:02:46 +0659
Subject: [PATCH 0030/1194] Default to landscape orientation for Android TV
---
.../main/java/org/schabi/newpipe/player/MainVideoPlayer.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 38da4d8b2..0650e2a26 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -164,13 +164,14 @@ public final class MainVideoPlayer extends AppCompatActivity
super.onChange(selfChange);
if (globalScreenOrientationLocked()) {
final boolean lastOrientationWasLandscape = defaultPreferences.getBoolean(
- getString(R.string.last_orientation_landscape_key), false);
+ getString(R.string.last_orientation_landscape_key), FireTvUtils.isFireTv());
setLandscape(lastOrientationWasLandscape);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
};
+
getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION),
false, rotationObserver);
@@ -238,7 +239,7 @@ public final class MainVideoPlayer extends AppCompatActivity
if (globalScreenOrientationLocked()) {
boolean lastOrientationWasLandscape = defaultPreferences.getBoolean(
- getString(R.string.last_orientation_landscape_key), false);
+ getString(R.string.last_orientation_landscape_key), FireTvUtils.isFireTv());
setLandscape(lastOrientationWasLandscape);
}
From c0fb96a911c7c0464e26b78597e58aa96b19bde9 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Sat, 16 Nov 2019 13:05:59 +0659
Subject: [PATCH 0031/1194] Release seekbar on any confirmation key, not just
DPAD_CENTER
---
.../java/org/schabi/newpipe/util/FireTvUtils.java | 13 +++++++++++++
.../org/schabi/newpipe/views/FocusAwareSeekBar.java | 3 ++-
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java b/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java
index 879b54e1f..2c5090381 100644
--- a/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java
+++ b/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java
@@ -3,6 +3,7 @@ package org.schabi.newpipe.util;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
+import android.view.KeyEvent;
import org.schabi.newpipe.App;
public class FireTvUtils {
@@ -15,4 +16,16 @@ public class FireTvUtils {
return pm.hasSystemFeature(AMAZON_FEATURE_FIRE_TV)
|| pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK);
}
+
+ public static boolean isConfirmKey(int keyCode) {
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_DPAD_CENTER:
+ case KeyEvent.KEYCODE_ENTER:
+ case KeyEvent.KEYCODE_SPACE:
+ case KeyEvent.KEYCODE_NUMPAD_ENTER:
+ return true;
+ default:
+ return false;
+ }
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java b/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java
index 3789ea344..dafd5ae6f 100644
--- a/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java
+++ b/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java
@@ -25,6 +25,7 @@ import android.view.ViewTreeObserver;
import android.widget.SeekBar;
import androidx.appcompat.widget.AppCompatSeekBar;
+import org.schabi.newpipe.util.FireTvUtils;
/**
* SeekBar, adapted for directional navigation. It emulates touch-related callbacks
@@ -57,7 +58,7 @@ public final class FocusAwareSeekBar extends AppCompatSeekBar {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (!isInTouchMode() && keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
+ if (!isInTouchMode() && FireTvUtils.isConfirmKey(keyCode)) {
releaseTrack();
}
From dc7ae3917e97889def2f7315e7ca4d947dbdd847 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Sun, 17 Nov 2019 16:53:11 +0659
Subject: [PATCH 0032/1194] Leanback launcher support
---
app/src/main/AndroidManifest.xml | 2 ++
.../main/res/mipmap-xhdpi/newpipe_tv_banner.png | Bin 0 -> 2138 bytes
2 files changed, 2 insertions(+)
create mode 100644 app/src/main/res/mipmap-xhdpi/newpipe_tv_banner.png
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9052dabab..3583d0312 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,6 +12,7 @@
+
diff --git a/app/src/main/res/mipmap-xhdpi/newpipe_tv_banner.png b/app/src/main/res/mipmap-xhdpi/newpipe_tv_banner.png
new file mode 100644
index 0000000000000000000000000000000000000000..4be6644504b178aa612b218202626b4b5d9e2a26
GIT binary patch
literal 2138
zcmdT`i#OZZ7XC#QnU2k3^SOFRAEAiK4{2qg9Wpsz+;r^d`u7M|GxkJDS|2
zC{fXiW|)dfYcdk*cG{sSDOIH&p*5i-5d=Xb++WxH6LZg6`@Fuj&feeNXPxhqhKKs=
zeqr(j006p}0N-x`0D=bRPjs}vepa-u4-T4ylbAC)V9VD@x(TkKR|BF60I;X+vq9EN
z7BS$aai(8XW&|!JlbC={28cwWQ)&j5keF~a*$IcgOqZcd06=>bt2*
zMeoX}pV}{@+PGul%LFUyK0z?8J`I&jq%`8(>>UF-6Jtb$h7z@Ke#%%y_cwc7=)(@U#6inNelwd%a{vI+na
zOUH810is!LOF}=^)VopvXb23@b0!Z8RI5}2FI_0(U3LXvpaw*zYPU8-E+#>bi^Z_%xW=$$Ll_em==
zq9!KQXa9l{F^JWqcyUHA@XOD^`YPc_;T>rgaTI<{tVuER*!+;x^OLCL0Cn}XM2QG5
z2iSyAuM<^B=N!eDXuh83se9%yN!nRkE0Xuo2E4)^goY@_m=eQhURES2_r4E}Ckw1_
zz`%m%m54_ZniL`OlCMi%whJ~AFKvrsXk}Lc@_{%!M!vx0uPw0NwfXC##fMyMs$3dX
zX+7x%3O$X0IDhj6H)!6MkOtyUW^{*`J1E8737fT8jesR%gk8s+2?sOJ(WFdq7Tx&Q
z_VPPEWfz!iIzt+kYW{gju9!&X|GxYYbfro09C;g2;qWl(bOuc&iH~F4{1Iv?+*GGi
zZ#jvT2t*(-b}YW=o@&{rD+gXf=~Ut6s#X3!dWY%zJiI~dmQm#uAu*nv;M3Jn8CQ|7
zh{i8<@praILEI8#+m5Aq$n3l_3unu72^&IWhg!i-PZ?^+C46+&vE<>lmyk*YhVtCf1I>#%RcUk2v}ppmq+gg#
zPa0#(TiPaUq%cUshI%t`Ov^PTST5tO&+RvjEJSYd;rz{&^|>LiC`Qghx0eO50f$zg3t+C(%ON?
zDdpiI^a_;{+tp!o;coug>8*b&inT{T81!i&8LjM{(YK~D87w4m`NJXy)5)ey>!X#7
zv%duX+(Qm~y7`}}$>#^0gAUFKf|QyPvXi*EEVo+UT9x$R7RTAmlHrIy$h#j6Erq5i
z_YTFlNXC;CM)0z*E`$`kq=mmR{W*S+ICkJ~&!AQn+o)5k`(gz3Xh{rAEk?pY!h#VP3oEaZY=x
zfgz$(*AtX%Wa_;OF=OjKL7+Q~cxHXH3pc@SHi~~}+WqdAzVBMbB^#+fhLP546P~}?
zF2Qv)%0}jNO{xACArFF^whw+&ZA}{Hq$jJ@8}J+EF+_!QY__*QzThm;DFnP@;+EL2
z?IZ8ti1E2ivh&q2(y(h%0Q;i1Fx_4%V)Nn1}EMnwpr*3{}cND2vDH#2(5m
z#uYCVdG5F$-&M&U8?V$GK`qt2VP56Ct7Yc*I@cpdnfD>)#S2pvj(pdFs2DWE5Y27B
znh+hcyt5t0xUQ9>`M`9#kRDuHQ$REYW-$bGK=NYK6tr$wa=
z<%RXpf`oU?>?ao|-B;@4SD=)s$AtyaMaK%bjeFOEz$fGG2_8zuIzP6K`QQwm%yRAy
zh6USk++UCjU&GPjtwoN!kX&ZU^Mp#jf;7}R#=f$U9!6>G`AZ^RzMkmpa6tV4`F$4{
zJHF2dHX6_9XH2hS>P#5GSlhI-qn?-6AqKETpu5=~@JdUCfYp)vR~#JFA^$gxliS|7
z7tweb%WjwW47M3vuyeMkcKKsSquPpO<8uSntr}WCQaA8ffp+)&U+U9eYN|xG(W$3i
T=$3)s006-Fh5E8iUcB}{BjNT*
literal 0
HcmV?d00001
From 106e538d0824d23604ce83c8bf9ad0916dc65ee5 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Sun, 17 Nov 2019 16:54:18 +0659
Subject: [PATCH 0033/1194] Excpicitly disable touchscreen requirement
---
app/src/main/AndroidManifest.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3583d0312..3284202fd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -11,6 +11,8 @@
+
+
Date: Sun, 17 Nov 2019 16:55:22 +0659
Subject: [PATCH 0034/1194] Disable touchScreenBlocksFocus on AppBarLayout
For some inexplicable reason this attribute got
enabled by default on Android 9, which effectively
prevents details screen from working
---
app/src/main/res/layout-large-land/fragment_video_detail.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/layout-large-land/fragment_video_detail.xml b/app/src/main/res/layout-large-land/fragment_video_detail.xml
index e1a680e5d..684adc222 100644
--- a/app/src/main/res/layout-large-land/fragment_video_detail.xml
+++ b/app/src/main/res/layout-large-land/fragment_video_detail.xml
@@ -23,6 +23,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
+ android:touchscreenBlocksFocus="false"
android:fitsSystemWindows="true"
app:elevation="0dp"
app:layout_behavior="com.google.android.material.appbar.FlingBehavior">
From 29136d633a9f54d774e5dbc39b85c73d6b2b06ae Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Sun, 1 Dec 2019 12:33:34 +0659
Subject: [PATCH 0035/1194] Intercept ActivityNotFoundException for
ACTION_CAPTIONING_SETTINGS
---
.../newpipe/settings/AppearanceSettingsFragment.java | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java
index ce22b84e9..72d720824 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java
@@ -1,9 +1,11 @@
package org.schabi.newpipe.settings;
+import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
+import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.preference.Preference;
@@ -42,7 +44,11 @@ public class AppearanceSettingsFragment extends BasePreferenceFragment {
@Override
public boolean onPreferenceTreeClick(Preference preference) {
if (preference.getKey().equals(captionSettingsKey) && CAPTIONING_SETTINGS_ACCESSIBLE) {
- startActivity(new Intent(Settings.ACTION_CAPTIONING_SETTINGS));
+ try {
+ startActivity(new Intent(Settings.ACTION_CAPTIONING_SETTINGS));
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(getActivity(), R.string.general_error, Toast.LENGTH_SHORT).show();
+ }
}
return super.onPreferenceTreeClick(preference);
From 3f51114129c813ac83bf658f88934f968990faa9 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Sun, 1 Dec 2019 12:38:01 +0659
Subject: [PATCH 0036/1194] Improve usability of settings on TV devices
* Add focus overlay to SettingsActivity
* Make screen "Contents of Main Page" navigable from remote
---
.../java/org/schabi/newpipe/settings/SettingsActivity.java | 6 ++++++
app/src/main/res/layout/list_choose_tabs.xml | 1 +
2 files changed, 7 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
index a3f218074..e53b7ba07 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
@@ -12,7 +12,9 @@ import android.view.Menu;
import android.view.MenuItem;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.util.FireTvUtils;
import org.schabi.newpipe.util.ThemeHelper;
+import org.schabi.newpipe.views.FocusOverlayView;
/*
@@ -56,6 +58,10 @@ public class SettingsActivity extends AppCompatActivity implements BasePreferenc
.replace(R.id.fragment_holder, new MainSettingsFragment())
.commit();
}
+
+ if (FireTvUtils.isFireTv()) {
+ FocusOverlayView.setupFocusObserver(this);
+ }
}
@Override
diff --git a/app/src/main/res/layout/list_choose_tabs.xml b/app/src/main/res/layout/list_choose_tabs.xml
index ce17e0382..82c9dd081 100644
--- a/app/src/main/res/layout/list_choose_tabs.xml
+++ b/app/src/main/res/layout/list_choose_tabs.xml
@@ -12,6 +12,7 @@
android:layout_marginTop="3dp"
android:minHeight="?listPreferredItemHeightSmall"
android:orientation="horizontal"
+ android:focusable="true"
app:cardCornerRadius="5dp"
app:cardElevation="4dp">
From 8c9015b57bd489a192e69f4a8977c745810403b2 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Tue, 10 Dec 2019 21:21:35 +0659
Subject: [PATCH 0037/1194] Remove commented code
---
.../com/google/android/material/appbar/FlingBehavior.java | 5 -----
1 file changed, 5 deletions(-)
diff --git a/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java b/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java
index ea2857b03..3af2c95bc 100644
--- a/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java
+++ b/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java
@@ -1,6 +1,5 @@
package com.google.android.material.appbar;
-import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
@@ -35,8 +34,6 @@ public final class FlingBehavior extends AppBarLayout.Behavior {
return false;
}
- int offset = getTopAndBottomOffset();
-
int dy;
if (focusScrollRect.bottom > height) {
@@ -49,8 +46,6 @@ public final class FlingBehavior extends AppBarLayout.Behavior {
return false;
}
- //int newOffset = offset + dy;
-
int consumed = scroll(coordinatorLayout, child, dy, getMaxDragOffset(child), 0);
return consumed == dy;
From 8e45296826c5b8e449a6e157f71ed3b60a81c686 Mon Sep 17 00:00:00 2001
From: chr_56
Date: Sat, 14 Dec 2019 21:16:40 +0800
Subject: [PATCH 0038/1194] remove values-cmn/strings.xml (useless)
---
app/src/main/res/values-cmn/strings.xml | 504 ------------------------
1 file changed, 504 deletions(-)
delete mode 100644 app/src/main/res/values-cmn/strings.xml
diff --git a/app/src/main/res/values-cmn/strings.xml b/app/src/main/res/values-cmn/strings.xml
deleted file mode 100644
index 3ff479bfd..000000000
--- a/app/src/main/res/values-cmn/strings.xml
+++ /dev/null
@@ -1,504 +0,0 @@
-
-
- 点击搜索按钮即可开始使用
- %1$s 次观看
- 发布于 %1$s
- 找不到媒体播放器。您要安装 VLC 吗?
- 找不到媒体播放器(您可以安装 VLC 来播放)。
- 安装
- 取消
- 在浏览器中打开
- 在悬浮窗模式下打开
- 分享
- 下载
- 下载媒体文件
- 搜索
- 设置
- 您是不是要找:%1$s?
- 分享至
- 选择浏览器
- 旋转
- 使用外部视频播放器
- 删除某些分辨率下的音频
- 使用外部音频播放器
- NewPipe 悬浮窗模式
- 订阅
- 已订阅
- 退订成功
- 无法更改订阅
- 无法更新订阅
- 显示信息
- 主页
- 订阅
- 已添加书签到播放列表
- 新功能
- 转到后台
- 悬浮窗
- 添加到
- 视频下载文件夹
- 已下载的视频储存在此处
- 选择视频文件的下载文件夹
- 音频下载文件夹
- 已下载的音频存储在此处
- 选择音频文件的下载文件夹
- 自动播放
- NewPipes被其它程序调用时播放视频
- 默认分辨率
- 默认悬浮窗分辨率
- 显示更高的分辨率
- 只有部分设备支持播放 2K/4K 视频
- 用 Kodi 播放
- 没找到 Kore 应用,需要安装它吗?
- 显示“用 Kodi 播放”选项
- 显示以 Kodi 媒体中心播放视频的选项
- 音频
- 默认音频格式
- 默认视频格式
- 主题
- 亮色
- 酷黑
- 黑色
- 记住悬浮窗的尺寸与位置
- 记住上一次悬浮窗的位置以及大小
- 已清除图像缓存
- 最小化悬浮窗播放器
- 清除观看历史
- 搜索记录已删除。
- 错误
- 网络错误
- 举报错误
- 没有结果
- 开始
- 暂停
- 播放
- 创建
- 删除
- 删除所有
- 新任务
- 好
-\n
- 错误
-\n
- 不支持的服务器
- 文件已存在
- NewPipe 下载中
- 请稍等…
- 字母与数字
- 最特别的字符
- 这个文件里没有已下载应用程式
- 关于NewPipe
- 设置
- 关于
- 第三方执照
- 打开网页
- 删除书签
- 确定删除该播放列表吗?
- 已创建播放列表
- 播放列表
- 步骤
- 重置
- 为了遵守欧洲通用数据保护法规(GDPR,我们请你注意NewPipe的隐私政策.请仔细阅读.
-\n你必须接受它才能将错误报告发送给我们.
- 接受
- 拒绝
- 没有限制
- 使用移动数据时的解析度限制
- 最小化应用程序切换
- 从主视频播放器切换到其他应用时的操作 - %s
- 没有
- 最小化后台播放
- 使用快速粗略定位
- 粗略定位功能允许播放器以略低的精确度为代价换取更快的定位速度
- 下载缩略图
- 清除缓存的元数据
- 移除所有缓存的网页数据
- 已清除缓存的元数据
- 不加载缩略图时,可以节省数据和存储空间。更改后将清除存储空间和扩展空间的缓存。
- 自动排列下一个媒体
- 在非重复排列中播放最后一个媒体时自动推荐相关媒体
- 玩家手势控制
- 使用手势控制播放器的亮度和音量
- 搜索建议
- 搜索时显示建议
- 搜索历史记录
- 在本地存储搜索
- 观看历史
- 记录观看过的视频
- 取得视窗焦点时继续播放
- 在被打断后继续播放(例如有来电)
- 下载
- 下一部
- 显示「下一部」及「相关」的视频
- 显示「长按以新增」的提示
- 在视频详细信息页按下后台播放或悬浮窗按钮时提示
- 不支持该网址
- 默认内容的国家
- 服务
- 播放器
- 行为
- 视频与音频
- 历史记录和缓存数据
- 悬浮窗
- 外观
- 其他
- 调试
- 在后台播放
- 在悬浮窗下播放
- 已添加到后台播放队列
- 已添加到悬浮窗播放队列
- 播放
- 内容
- 年龄限制内容
- 显示有年龄限制的视频。可以从设置中允许该内容。
- 直播
- 下载
- 下载
- 错误报告
- 所有
- 频道
- 频道
- 播放列表
- 播放列表
- 曲目
- 用户
- 是的
- 稍等
- 不适用
- 过滤
- 刷新
- 清除
- 调整
- 最佳分辨率
- 复原
- 全部播放
- 总是
- 仅一次
- 文件
- NewPipe 通知
- NewPipe 后台播放和悬浮窗播放的通知
- [未知]
- 切换方向
- 切换到后台
- 切换到悬浮窗
- 切换到首页
- 导入数据库
- 导出数据库
- 覆盖您当前的历史记录和订阅
- 导出历史记录、订阅和播放列表
- 删除播放过的媒体的历史记录及回放位置
- 确定要清除所有观看历史记录吗?
- 观看历史记录已清除。
- 清除搜索历史记录
- 清除搜索关键词的历史记录
- 确定要清除所有搜索历史记录吗?
- 无法加载所有缩略图
- 无法解析视频网址签名
- 无法解析网站
- 无法完全解析网站
- 内容不可用
- 无法设置下载菜单
- 目前还不支持观看直播
- 无法获得任何媒体
- 无法加载图片
- 应用程序或界面出现崩溃了
- 无法播放此媒体
- 发生了无法恢复的播放器错误
- 正在从播放器错误中恢复
- 外部播放器不支持此类型的链接
- 无效的网址
- 找不到视频串流
- 找不到音频串流
- 无效的文件夹
- 无效的文件/内容来源
- 该文件不存在或缺少读写权限
- 文件名不能为空
- 发生错误:%1$s
- 没有可供下载的串流
- 抱歉,这不应该发生的。
- 通过电子邮件报告错误
- 抱歉,发生了一些错误。
- 报告
- 信息:
- 发生了什么:
- 事件:\\n请求:\\n内容语言:\\n服务:\\nGMT 时间:\\n组件:\\n版本:\\n系统版本:
- 您的评论(请用英语):
- 详细:
- 视频预览缩略图
- 视频预览缩略图
- 上传者的头像缩略图
- 喜欢
- 不喜欢
- 使用 Tor
- (实验性)通过 Tor 强制下载流量以增加隐私(暂不支持视频媒体)。
- 用户报告
- 这里什么都没有
- 拖动以重新排序
- 无法创建下载目录「%1$s」
- 已成功创建下载目录「%1$s」
- 视频
- 音频
- 重试
- 手机存储访问权限被拒绝
- 千
- 万
- 十亿
- 没有订阅者
-
- - %s 位订阅者
-
-
- 无观看次数
-
- - %s 次观看
-
-
- 没有视频
- 删除
- 校验
- 退出
- 重命名
- 文件名
- 线程
- 错误的网址或网络不可用
- 点按以查看详细信息
- 复制到剪贴板
- 请稍后在设置中定义一个下载文件夹
- 在悬浮窗模式打开
-\n需要此权限
- 已删除一个项目。
- reCAPTCHA 验证
- reCAPTCHA 验证
- 需完成 reCAPTCHA 验证
- 下载
- 文件名中允许的字符
- 无效字符将替换为该值
- 替换字符
- © %1$s 由 %2$s 使用 %3$s 版权所有
- 无法加载许可证
- 关于
- 贡献者
- 许可证
- 安卓上开源且轻便的媒体播放器。
- 贡献
- 您是否有想法帮助我们:翻译、界面设计、代码优化以及真正繁重的功能扩展 - 我们随时欢迎您提供帮助。让 NewPipe 越变越好!
- 在 GitHub 上查看
- 捐赠
- NewPipe 由社区人员维护和开发额,他们耗费时间务求为您带来最佳体验。现在是时候回过头来,让我们的开发人员能够在使 NewPipe 更加完美的同时,享受一杯咖啡。
- 回馈
- 网站
- 访问 NewPipe 网站了解更多信息和新闻。
- NewPipe 的隐私政策
- NewPipe 项目是非常重视您的隐私。因此,未经您的同意,该应用程序不会收集任何数据。
-\nNewPipe 的隐私政策详细说明了当您发送崩溃报告时,什么资料会被传送及储存。
- 阅读隐私政策
- NewPipe 的许可证
- NewPipe 是一个 Copyleft 的自由软件:您可以随意使用、研究、分享或改进它。在遵守由自由软件基金会所发布的 GNU 通用公共授权条款的状况下,您可以自由地再发布或修改它;授权条款预设使用第三版,但您也可以选择更新的版本。
- 阅读许可证
- 历史记录
- 搜索
- 观看
- 历史记录被关闭了
- 历史记录
- 没有历史记录
- 清除历史记录
- 项目已删除
- 确定要从搜索历史记录中删除该项吗?
- 确定要从观看历史记录中删除该项吗?
- 您确定要删除历史记录中的所有项吗?
- 上一次播放
- 最受欢迎
- 首页内容
- 空白页面
- 互动页面
- 订阅页面
- Feed 页面
- 频道页面
- 选择一个频道
- 尚未订阅任何频道
- 选择一个互动
- 输出
- 接入
- 无效的压缩文件
- 警告:无法导入所有文件。
- 这将覆盖您当前的设定。
- 您是否要导入设定?
- 互动
- 趋势
- 前 50
- 最新和热门
- 转到后台播放
- 悬浮窗播放
- 移除
- 详细
- 音频设置
- 长按加入队列
- 加入后台播放列表
- 加入悬浮窗播放列表
- 从这里开始播放
- 开始在后台播放
- 开始在新悬浮窗播放
- 打开抽屉
- 关闭抽屉
- 很快就会出现在这里 ;D
- 偏好的「开启」动作
- 开启内容时的默认动作 - %s
- 视频播放器
- 后台播放器
- 悬浮窗播放器
- 总是询问
- 正在获取信息…
- 正在载入请求的内容
- 新的播放列表
- 删除
- 重命名
- 名称
- 添加到播放列表
- 设为播放列表缩略图
- 将播放列表加入书签
- 播放列表缩略图已更改。
- 无法删除播放列表。
- 没有字幕
- 合适
- 填满
- 缩放
- 自动生成
- 字幕
- 修改播放器字幕文本比列和背景样式。需要重启才能生效。
- 启用 LeakCanary
- 内存泄漏监视可能导致应用程序在存储时无响应
- 报告活动周期外错误
- 强制报告在处理完片段或活动周期外发生的无法传递的 Rx 异常
- 导入/导出
- 导入
- 导入至
- 导出到
- 正在导入…
- 正在导出…
- 导入文件
- 之前的导出
- 无法导入订阅
- 无法导出订阅
- 通过下载导出文件来导入 YouTube 订阅:
-\n
-\n1.移至该网址:%1$s
-\n2.当被询问时登入帐号
-\n3.应该开始下载(这是导出文件)
- 通过输入 URL 或 ID 来导入 SoundCloud的配置文件:
-\n
-\n1.在浏览器中启用「桌面模式」(该网站不适用于移动设备)
-\n2.移至该网址:%1$s
-\n3.当被询问时登入帐号
-\n4.复制您重定向的配置文件到网址。
- 您的 ID,soundcloud.com/yourid
- 请记住,此操作可能造成昂贵的网络花费。
-\n
-\n您是否要继续?
- 播放速度控制
- 速度
- 音量
- 取消链接(可能会导致扭曲)
- 静音时快进
- 退订
- 新标签
- 选择标签
- 音量手势控制
- 用手势控制播放器的音量
- 手势控制亮度
- 用手势控制播放器的亮度
- 默认的内容语言
- 升级
- 文件已删除
- 应用升级通知
- 新 NewPipe 版本通知
- 外储存不可行
- 无法下载到外部SD卡。重置下载文件夹位置?
- 恢复默认
- 您真的要恢复至默认吗?
- 选择
- 升级
- 列表
- 自动
- 轻按以下载
- 已完成
- 有待
- 已暂停
- 已加入队列
- 后处理
- 队列
- 系统拒绝该行动
- 下载失败
- 下载完成
- %s已下载完毕
- 生成独特的名字
- 覆写
- 同名的已下载文件已经存在
- 同名下载进行中
- 显示错误
- 代码
- 无法创建该文件
- 系统拒绝此批准
- 安全连接失败
- 找不到服务器
- 连不上服务器
- 伺服器没回送数据
- 找不到
- 后处理失败
- 清除已完毕的下载
- 停
- 重试上限
- 取消下载前可以尝试的最多次数
- 换成手机数据时中断
- 事件
- 使用默认选项卡, 读取保存的选项卡时出错
- 订阅者计数不可用
- 主页上显示的选项卡
- 会议
- 显示通知, 以便在新版本可用时提示应用更新
- 列表视图模式
- 网格
- 切换视图
- NewPipe 更新可用!
- 无法创建目标文件夹
- 服务器不接受多线程下载, 请使用 @string/msg_threads = 1重试
- 切换至移动数据时有用,尽管一些下载无法被暂停
- 显示评论
- 禁用停止显示评论
- 自动播放
-
- - 评论
-
-
- 没有评论
- 无法加载评论
- 关闭
- 继续播放
- 恢复上次播放位置
- 列表中的位置
- 在列表中显示播放位置指示符
- 清除数据
- 播放位置已删除。
- 文件被移动或删除
- 已存在具有此名称的文件
- 无法覆盖该文件
- 同名文件正在等待下载
- 处理此文件时 NewPipe 已关闭
- 设备上没有剩余空间
- 进度丢失,因为文件已被删除
- 连接超时
- 你确定吗?
- 限制下载队列
- 同时只有一个下载进行
- 开始全部下载
- 暂停全部下载
- 询问下载位置
- 每次下载将询问保存的位置
- 每次下载将询问保存的位置.
-\n如果要下载到外部SD卡,请选择外部存储访问框架
- 使用存储访问框架
- 存储访问框架(SAF)允许下载文件到外部SD卡。
-\n注:一些设备不兼容SAF
- 删除回放位置
- 删除所有回放位置
- 删除所有的回放位置吗?
- 更改要生效的下载文件夹
-
\ No newline at end of file
From 9309159c387662242f8083ea0545200b8fb8cffa Mon Sep 17 00:00:00 2001
From: chr_56
Date: Sat, 14 Dec 2019 21:25:19 +0800
Subject: [PATCH 0039/1194] copy file in /values-b+zh+HANS+CN to /values-zh-rCN
,in order to manually update the lang file.
---
app/src/main/res/values-zh-rCN/strings.xml | 845 +++++++++++----------
1 file changed, 453 insertions(+), 392 deletions(-)
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 9aa4b9245..8714c6aca 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -1,457 +1,518 @@
-
+
- 点播%1$s次
- %1$s发布
- 找不到播放器。您是否要安装 VLC?
+ 点击搜索按钮即可开始使用
+ %1$s 次观看
+ 发布于 %1$s
+ 在浏览器中打开
+ 在悬浮窗模式下打开
+ 您是不是要找:%1$s?
+ 找不到串流播放器 (您可以安裝并使用VLC播放)。
+ 下载串流文件
安装
取消
- 用浏览器打开
分享
下载
搜索
设置
- 您是不是要找: %1$s ?
- 分享视频
+ 分享给...
选择浏览器
- 旋转
- 使用外置视频播放器
- 使用外置音频播放器
- 视频下载路径
- 下载视频的存储路径
- 输入视频存储路径
- 默认分辨率
- 用Kodi播放
- 找不到Kore,您要安装Kore吗?
- 显示“用Kodi播放”的选项
- 显示 Kodi 媒体中心播放视频的选项
- 音频
- 默认音频格式
+ 视频下载文件夹
+ 已下载的视频存储在这里
+ 请选择下载视频的保存位置
+ 已下载的音频存储在这里
+ 选择下载音频的储存位置
+ 自动播放
+ 使用Kodi播放
主题
- 灰暗
- 明亮
-
+ 浅色
+ 暗黑
+ 黑色
下载
- 即将播放
- 显示下一部和相似的视频
- 不支援此网址
- 默认内容语言
- 视频和音频
+ 下一个
+ 不支持的 URL
外观
其他
- 后台播放
- 播放
+ 全部
+ 频道
+ 是
+ 稍后
网络错误
-
- 视频预览缩略图
- 视频预览缩略图
- 上传者的头像缩图
+
+ - 视频
+
+
+ 禁用
+ 背景
+ 过滤器
+ 刷新
+ 搜索建议
+ 订阅
+ 已订阅
+ 观看历史
+ 播放器
+ 历史记录与缓存
+ 播放列表
+ 撤销
+ 全部播放
+ 总是
+ 仅一次
+ 添加至
+ 文件
+ 加载缩略图
+ 清除观看记录
+ 无
+ 最小化后台播放器
+ 最小化悬浮窗播放器
+ 频道
+ 播放列表
+ 取消订阅
+ 新标签
+ 更新
+ 文件已删除
+ 无法得知订阅人数
+ 每推出新版本时,弹出应用升级通知
+ 网格
+ 新版 NewPipe 已可升级!
+ 服务器不接受 接收 multi-threaded 下载, 以 @string/msg_threads = 1 重试
+ 自动播放
+ 清除数据
+ 观看记录已删除
喜欢
不喜欢
- 使用 Tor
- (实验性)强制下载流量使用 Tor 加强隐私(暂不支援流媒体视频)。
- 音频存储路径
- 下载音频的存储路径
- 输入音频文件存储路径
-
- 未能建立下载路径 “%1$s”
- 已创建下载目录 “%1$s”
- 内容
- 显示年龄限制内容
- 视频有年龄限制。请先在设置中启用\"显示年龄限制内容\"。
- 错误
- 无法加载所有缩略图
- 无法解密视频网址签名
- 无法解析网站
- 无法完全解析网站
- 内容不可用
- 无法设置下载菜单
- 这是一个在线流媒体,尚不支持。
- 无法获取任何流媒体
- 抱歉,这本不应该发生。
- 使用邮件报告错误
- 抱歉,发生了一些错误。
- 报告
- 信息:
- 发生什么:
- 您的注释(英文):
- 详细信息:
-
-
+ 使用Tor
+ (实验性)通过 Tor 强制下载流量以增强隐私(暂不支持串流视频)。
报告错误
用户报告
-
+ 无法创建下载目录\"%1$s\"
+ 已成功创建下载目录「%1$s」
视频
音频
重试
- 无权访问存储空间
- 自动播放
- 当NewPipe被其他应用调用时,自动播放视频
- 直播
-
- 点击搜索开始NewPipe
+ 存储访问权限已被拒绝
+
+ - %1$s 次观看
+
+
+ 千
+ 百万
开始
暂停
播放
删除
- 校验和
-
- 确定
-
- 文件名
- 线程
- 错误
- 服务器不支持
- 文件已经存在
- 网址不正确或网络不可用
- NewPipe 正在下载
- 点击了解细节
- 请稍候…
- 已复制到剪贴板
- 请选择一个可用的下载目录
-
+ 校验
新任务
- 下载
- 下载
- 错误报告
-
- 无法加载图像
- 应用/界面已崩溃
- 原因:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:
- reCAPTCHA
- reCAPTCHA 验证
-
- 需要 reCAPTCHA 验证
-
-以悬浮窗打开
- 选项启用时,某分辨率的视频将没有声音
- NewPipe悬浮窗模式
- 订阅
- 已订阅
- 已取消订阅频道
- 无法更改订阅
- 无法更新订阅
-
- 首页
- 订阅
-
- 新鲜事
-
- 后台播放
- 悬浮窗
-
- 窗口模式默认分辨率
- 显示更高的分辨率
- 只有部分设备支持 2K/4K 视频
- 首选视频格式
- 纯黑
- 记住悬浮窗大小和位置
- 记住上次悬浮窗的大小和位置
- 播放手势控制
- 使用手势操作控制播放器的亮度和音量
- 搜索建议
- 在搜索时显示搜索建议
- 搜索记录
- 在本地存储搜索请求
- 历史和缓存
- 记住观看的视频
- 焦点恢复
- 在打扰(例如来电)过后恢复视频播放
-
-
- 窗口模式
- 以窗口模式播放
- 所有
- 频道
- 是的
- 稍后
- 已禁用
- 筛选器
- 刷新
- 清除
- 重新调整大小
- 最佳分辨率
-
- NewPipe 通知
- NewPipe 后台播放和窗口播放器的通知
-
- K
- M
- B
-
- 该项权限用于
-\n以窗口模式打开
-
- 下载
- 在文件名中允许的字符
- 无效的字符将以该值取代
- 替换字符
-
- 字母和数字
- 特殊字符
-
- 关于 NewPipe
+ OK
+ 文件名
+ 线程数
+ 错误
+ 不支持的服务器
+ 文件已存在
+ 点击了解详情
+ 请稍候…
+ 复制至剪贴板
+ reCAPTCHA验证码
+ 悬浮窗播放
+ 关于NewPipe
设置
关于
第三方许可
- © %1$s by %2$s under %3$s
- 无法加载许可
+ © %1$s :作者 %2$s (使用 %3$s )
+ 无法加载许可证
打开网站
关于
贡献者
- 许可
- 开源的轻量级流媒体Android客户端。
- 在 GitHub 上查看
- NewPipe 许可
- 无论你有什么想法:翻译程序,改进设计,优化代码或是想做出大量修改——我们都随时欢迎。做得越多它将变得越好!
- 阅读许可
- 贡献
-
- 历史记录
- 搜索记录
- 观看记录
- 历史记录已禁用
- 历史记录
- 没有历史记录
- 历史记录已清除
-
-播放器
- 行为
- 历史记录 & 缓存
- 在后台播放器上排队
- 在弹出播放器上排队
- 播放列表
- 撤销
- 全部播放
-
- [未知]
-
- 无法播放此流媒体
- 发生无法解决的播放器错误
+ 许可证
+ 下载
+ 文件名中允许的字符
+ 无效字符将会被替换为此
+ 字母和数字
+ 最特殊字符
没有结果
- 空空如也
-
- 无订阅者
+ 没有订阅者
- - %s 位订阅者
-
-
- 无观看次数
-
- - %s 次观看
-
-
+ - %s个订阅者
+
+
没有视频
-
- - %s 部视频
-
-
- 项目已删除
- 找不到播放器(你可以安装 VLC 来播放)
- 下载串流文件。
- 显示详情
-
- 书签
-
- 添入
-
- 使用粗略但快速的寻找
- 粗略寻找让播放器更快找到视频的进度位置
- 加载缩略图
- 停用后,NewPipe將不再加载缩略图,减少数据使用和腾空存储空间,亦会清除内存和内存卡上的缩略图缓存
- 已清除图像缓存
- 清除缓存元数据
- 移除所有网页的缓存数据
- 已清除元数据缓存
- 自动播放队列中下一个视频
- 当播放完非循环列表中的最后一个视频时,自动加入一个相关视频到播放列表
- 显示\"长按添加\"提示
- 当视频详情页中的背景或悬浮按钮被按下的时候显示提示
- 默认内容国家
- 服务
- 调试
- 总是
- 仅一次
- 文件
-
- 切换方向
- 切换到后台
- 切换到悬浮窗
- 切换到主页
-
- 导入数据库
- 导出数据库
- 将覆盖你现有历史记录和订阅
- 导出历史记录,订阅和播放列表
- 从播放器错误中恢复
- 外部播放器不支持这些链接类型
- 无效的链接
- 未找到视频
- 未找到音频
- 无效的目录
- 无效的文件/内容来源
- 文件不存在或无读写权限
- 文件名不能为空
- 发生了一个错误:%1$s
- 无视频媒体可以下载
-
- 拖拽以重新排列
-
+ 拖动以重新排序
创建
- 删除一个
- 删除全部
+ 仅删除一个
+ 全部删除
解除
- 重命名
-
- 捐赠
- NewPipe 是一群志愿者花费业余时间开发的,目的是为您带来最佳体验。你的一点心意,可以让开发者们在享受一杯 Java 的咖啡的同时让 NewPipe 变得更好用。
- 捐赠
- 网页
- 访问 NewPipe 网站以获取更多的信息和新闻。
- 你想从搜索历史中删除此项吗?
- 你想从观看历史中删除此项吗?
- 确实要删除历史记录的所有项目吗?
- 上一次播放
- 最多播放
-
- 主页内容
+ 重 命名
+ 未安装用于播放此文件的应用程序
+ 已删除1个项目。
+ 哪些标签需要在主页上展示
+ 列表视图模式
+ 已完成
+ 等待中…
+ 已暂停
+ 排队中
+ 已加入队列
+ 操作已被系统拒绝
+ 下载失败
+ 下载完成
+ %s 次下载已完成
+ 没有评论
+ 切换服务,当前选择:
+ 找不到串流播放器。您想安装 VLC 吗?
+ 旋转
+ 使用第三方视频播放器
+ 使用第三方视频播放器
+ 音频下载文件夹
+ 从其他应用打开 NewPipe 时就播放视频
+ 默认分辨率
+ 找不到Kore。是否安装?
+ 显示“用Kodi播放”选项
+ 显示“通过Kodi media center播放视频的选项”
+ 音频
+ 默认音频格式
+ 显示“下一个”和“类似的”视频
+ 视频和音频
+ 在后台播放
+ 播放
+ 内容
+ 受年龄限制的内容
+ 显示受年龄限制的视频。可从设置允许此类内容。
+ 直播
+ 下载
+ 下载
+ 错误报告
+ 错误
+ 无法加载所有缩略图
+ 无法解密视频 URL 的签名
+ 无法解析网址
+ 无法完全解析网址
+ 内容不可用
+ 无法设置下载菜单
+ 暂时不支持观看直播
+ 无法获得任何信息流
+ 无法加载图像
+ App UI 崩溃
+ 抱歉,这不应该发生的。
+ 通过电子邮件报告错误
+ 抱歉,发生了一些错误。
+ 报告
+ 信息:
+ 发生了什么:
+ 详情:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:
+ 您的注释(请用英文):
+ 详细信息:
+ 视频预览缩略图
+ 播放视频,时长:
+ 视频上传者的头像缩略图
+ 字节
+ 错误的 URL 或未联网
+ NewPipe下载中
+ 请稍后在设置中设定下载目录
+ 用悬浮窗模式
+\n需要此权限
+ reCAPTCHA验证
+ 请求的新的CAPTCHA验证
+ NewPipe悬浮窗模式
+ 在悬浮窗中播放
+ 默认悬浮窗分辨率
+ 使用更高的分辨率
+ 仅某些设备支持播放2K / 4K视频
+ 清除
+ 记住悬浮窗的尺寸与位置
+ 记住最后一次使用悬浮窗的大小和位置
+ 悬浮窗
+ 调整大小
+ 删除“某些”分辨率的音频
+ 播放器手势控制
+ 使用手势控制播放器的亮度和音量
+ 显示搜索建议
+ 最佳分辨率
+ 开源小巧的Android媒体播放器。
+ 在GitHub上查看
+ NewPipe开源许可证
+ 你是否有想:翻译、设计、清理或重型代码更改 ——我们始终欢迎你来贡献!
+ 阅读许可证
+ 贡献
+ 替换字符
+ 取消订阅频道
+ 无法修改订阅
+ 无法更新订阅
+ 主页面
+ 订阅
+ 新增功能
+ 恢复前台焦点
+ 中断后继续播放(例如突然来电后)
+ 搜索历史记录
+ 在本地存储搜索查询记录
+ 记录已观看视频
+ 历史
+ 已搜索
+ 已观看
+ 历史记录功能已关闭
+ 历史
+ 历史记录为空
+ 清除历史记录
+ NewPipe 通知
+ NewPipe 后台播放和悬浮窗播放的通知
+ 默认视频格式
+ 行为
+ 空空如也...
+ 0次观看
+ 项目已删除
+ 是否要从搜索历史记录中删除此项目?
+ 显示在主页面内容
空白页
- Kiosk 页
+ 『时下流行』页-自定义
订阅页
- Feed 页
+ Feed 页面
频道页
- 选择频道
- 还没有订阅的频道
- 选择 kiosk
- 导出完成
- 导入完成
- 无有效的 ZIP 文件
- 警告:无法导入所有文件。
- 将覆盖你现有设置。
-
- Kiosk
- 流行的
+ 选择一个频道
+ 尚未订阅频道
+ 选择一个时下流行页
+ 『时下流行』
+ 趋势
前50
- 最新 & 最热
- 后台播放器
+ 最新与热门
+ 显示 \"长按添加\" 说明
+ 在视频详情页中,按下背景播放或悬浮窗播放按钮时显示提示
+ 已加入后台播放播放列表
+ 已加入悬浮窗播放列表
+ 无法播放此串流
+ 发生无法恢复播放器错误
+ 恢复播放器错误
+ 后台播放
悬浮窗播放器
移除
详情
音频设置
- 按住以队列
- 在后台队列
- 在悬浮窗队列
- 从这里播放
- 从这里在后台播放
- 从这里在悬浮窗播放
-
- 打开侧栏菜单
- 关闭侧栏菜单
- 精彩内容即将呈现 ;D
-
-
- 偏好\"打开\"动作
- 打开内容的默认动作 — %s
-
+ 长按队列
+ [未知]
+ 添加到后台部分队列
+ 添加至新悬浮窗列表
+ 开始在此处开始播放
+ 开始后台播放
+ 开始在新悬浮窗中播放
+ 捐赠
+ NewPipe 是由志愿者花费时间为您带来最佳体验开发的。回馈帮助开发人员在享用一杯咖啡的同时,让 NewPipe 变得更好。
+ 回馈
+ 网站
+ 请访问 NewPipe 网站了解更多信息和讯息。
+ 默认国家/地区
+ 切换方向
+ 切换到背景播放
+ 切换到悬浮窗播放
+ 切换到主页面
+ 服务
+ 打开抽屉
+ 关闭抽屉
+ 第三方播放器不支持此类型链接
+ 无效 URL
+ 未找到视频串流
+ 找不到音频串流
视频播放器
后台播放器
悬浮窗播放器
- 总是询问
-
- 获取信息中…
- 正在加载请求内容
-
- 创建新播放列表
- 删除播放列表
- 重命名播放列表
+ 正在获取信息…
+ 正在加载请求的内容
+ 导入数据库
+ 导出数据库
+ 覆盖当前历史记录和订阅
+ 导出历史记录、订阅和播放列表
+ 导出成功
+ 导入成功
+ 没有有效的ZIP文件
+ 警告:无法导入所有文件。
+ 这将覆盖当前设置。
+ 显示信息
+ 已收藏
+ 确定要从观看历史记录中删除该项吗?
+ 是否确实要从历史记录中删除所有项目?
+ 最后播放
+ 播放最多
+ 总是寻问
+ 新建播放列表
+ 删除
+ 重 命名
名称
- 加入播放列表
- 设置为播放列表缩略图
-
- 书签播放列表
- 移除书签
-
- 你想删除此播放列表吗?
- 播放列表已创建
- 加入播放列表
- 播放列表缩略图已更改
+ 添加到播放列表
+ 设为播放列表缩略图
+ 收藏播放列表
+ 删除收藏
+ 删除此播放列表?
+ 新建播放列表成功
+ 加入播放列表成功
+ 播放列表缩略图更改成功。
无法删除播放列表
-
无字幕
-
适应屏幕
填充屏幕
- 放大填充
-
+ 缩放
+ 敬请等待
+ 调试
自动生成
-
- 启用 LeakCanary
- 内存泄露监测可能会在heap dumping时导致应用失去响应
-
- 报告生命周期外的错误
- 处理完无法送达的、发生在Fragment或activity生命周期之外的Rx异常后强制报告
-
+ 启用LeakCanary
+ 『内存泄漏监视』可能导致应用在『核心转储』时无响应
+ 报告『提前结束Android生命周期』错误
+ 强制报告处理后的未送达的Activity或Fragment生命周期之外的Rx异常
+ 使用快速不精确搜索
+ 粗略定位播放:允许播放器以略低的精确度为代价换取更快的定位速度
+ 自动播放下一个
+ 当播放完非循环列表中的最后一个视频时,自动加入一个相关视频到播放列表
+ 没有此文件夹
+ 无相似文件/内容源
+ 该文件不存在 或 缺少读写该文件的权限
+ 文件名不能为空
+ 发生错误: %1$s
导入/导出
导入
- 从导入
- 导出至
-
- 导入中…
- 导出中…
-
+ 从...导入
+ 导出到...
+ 正在导入…
+ 正在导出…
导入文件
- 之前的导出
-
+ 以前的导出
无法导入订阅
无法导出订阅
-
- 通过下载导出文件导入 YouTube 订阅:
-\n1. 在浏览器打开URL:%1$s
-\n2. 登录账户
-\n3. 下载应该会马上开始(这个就是导出文件)
- 通过输入URL或您的ID导入SoundCloud配置:
-\n1. 在浏览器中开启\"桌面模式\"(该网站不适用于移动设备)
-\n2. 打开URL:%1$s
-\n3. 登录账号
-\n3. 复制重定向后的URL。
- 你的ID 或 soundcloud.com/你的ID
-
- 请注意该操作可能消耗大量网络流量。
-\n您希望继续吗?
-
+ 通过下载导出文件来导入 YouTube 订阅:
+\n
+\n1. 转到此网站: %1$s
+\n2. 登录(如果需要)
+\n3. 应该立即开始下载(即导出文件)
+ 通过键入网址或你的 ID 导入 SoundCloud 配置文件:
+\n
+\n1. 在浏览器中启用\"电脑模式\"(该网站不适用于移动设备)
+\n2. 转到此 URL: %1$s
+\n3. 登录(如果需要)
+\n4. 复制重定向的配置文件下载地址。
+ 你的 ID:soundcloud.com/[你的ID]
+ 该操作消耗大量流量,
+\n你想继续吗?
+ 关闭可防止加载缩略图,节已省数据和内存使用。(若现在更改会清除内存和储存中缓存)
+ 清空图像缓存成功
+ 清空已缓存元数据
+ 清空已缓存的网页数据
+ 清空元数据缓存成功
播放速度控制
- 速度
+ 节奏
音调
- Unhook(可能导致失真)
- 默认
-未安装能播放此文件的应用
-
+ 解除关联(可能导致失真)
+ 首选“打开”操作
+ 打开内容时默认操作: = %s
+ 无可下载的串流内容
字幕
- 修改播放器的字幕文本大小和背景样式。需要重启应用程序以生效
-
- 清除观看记录
- 删除视频观看记录
- 删除全部观看记录。
- 观看记录已删除。
- 清除搜索记录
- 删除搜索关键词记录
- 删除全部搜索记录。
- 搜索记录已删除。
- 已删除1项。
-
- NewPipe的隐私策略
- NewPipe 项目非常重视您的隐私。因此, 未经您的同意,应用程序不会收集任何您的数据。 NewPipe 的隐私策略详细解释了您在发送崩溃报告时会发送和存储的哪些数据。
- 阅读隐私策略
- NewPipe 是 copyleft 的自由软件: 你可以按照自己的意愿使用、学习、分享和改进它。具体地说, 您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款(第3版或者任何更高版本), 重新发布和/或修改本软件。
- 您是否希望同时导入设置?
-
- 为了遵守欧洲通用数据保护条例(GDPR),我们提醒您注意NewPipe的隐私政策。 请仔细阅读。
+ 修改播放器字幕比例和背景样式。需要重新启动应用程序才能生效。
+ 删除串流的播放历史和播放位置
+ 删除全部观看记录?
+ 清除搜索历史记录
+ 清除搜索关键词的历史记录
+ 是否删除全部搜索历史记录?
+ 搜索历史记录已删除。
+ NewPipe 是版权自由软件:您可以随时使用、研究共享和改进它。您可以根据自由软件基金会发布的 GNU 通用公共许可证GPLv3或(由您选择的)任何更高版本的许可证重新分发或修改该许可证。
+ 是否要同时导入设置?
+ NewPipe的隐私政策
+ NewPipe 项目非常重视您的隐私。因此,未经您的同意,应用程序不会收集任何数据。
+\nNewPipe 的隐私政策详细解释了在发送崩溃报告时发送和存储的数据。
+ 阅读隐私政策
+ 为了遵守欧洲一般数据保护条例 (GDPR),我们提请您注意 NewPipe 的隐私政策。请仔细阅读。
\n您必须接受它才能向我们发送错误报告。
接受
拒绝
-
- 不限制
+ 无限制
使用移动数据时限制分辨率
- 更多频道
- 更多频道
- 用户们
-
+ 切换应用时最小化
+ 从主播放器切换到其他应用时的操作 - %s
+ 静音时快进
+ 滑块[比例尺]
+ 重 置
+ 曲目
+ 用户
+ 选择标签
+ 音量手势控制
+ 使用手势控制播放器的音量
+ 亮度手势控制
+ 使用手势控制播放器的亮度
+ 视频默认语言
+ 应用更新通知
+ NewPipe有新版本的通知
+ 外置存储不可用
+ 无法下载到外部 SD 卡。重置下载文件夹位置?
+ 读取已保存标签时发生错误,因此使用者默认标签
+ 恢复默认
+ 是否恢复默认值?
+ 选择
+ 更新
+ 列表
+ 自动
+ 切换视图
+ 点击下载
+ 后期处理
+ 生成唯一名称
+ 覆盖
+ 正在使用此名称进行下载
+ 显示错误
+ 代码
+ 无法创建目标文件夹
+ 无法创建文件
+ 权限被系统拒绝
+ 安全连接失败
+ 找不到服务器
+ 无法连接到服务器
+ 服务器未发送数据
+ 找不到 NOT FOUND
+ 后期处理失败
+ 清除已完成的下载
+ 停止
+ 最大重试次数
+ 取消下载前的最多尝试次数
+ 在切换到移动流量网络时中断播放
+ 切换至移动数据时可能有用,尽管一些下载无法被暂停
+ 事件
+ 近期大会
+ 显示评论
+ 禁用,以停止显示评论
+
+ - 评论
+
+
+ 无法加载评论
+ 关闭
+ 恢复播放
+ 恢复上次播放位置
+ 列表中的位置
+ 在列表中,显示视频最后一次播放时的播放位置
+ 已删除播放位置记录。
+ 文件被已移动或删除
+ 该名称的文件已经存在
+ 命名冲突,已存在具有此名称文件
+ 无法覆盖文件
+ 有此名称的已暂停下载
+ 处理文件时,NewPipe 已关闭
+ 设备上没有剩余储存空间
+ 进度丢失,文件已被删除
+ 连接超时
+ 你确定吗?
+ 最大下载队列
+ 同时只允许一个下载进行
+ 开始下载
+ 暂停下载
+ 询问下载位置
+ 系统将询问您将每次下载的保存位置
+ 系统将询问您将每次下载的保存位置。
+\n(如果要下载到外部 SD 卡,请选择 SAF)
+ 使用 SAF
+ 存储访问框架(SAF)允许下载文件到外部SD卡。
+\n注:一些设备不兼容SAF
+ 删除播放位置记录
+ 删除所有播放位置记录
+ 删除所有播放位置记录?
+ 更改下载目录让内容生效
+ 『时下流行』页-默认
+ 无人在线观看
+
+ - %s 人在观看
+
+
+ 没人在听
+
+ - %s个听众
+
+
+ 重新启动应用后,语言将更改。
+
\ No newline at end of file
From 46b12ed81946b6128092f3b06d256de6e5903cb1 Mon Sep 17 00:00:00 2001
From: Louis-Berlic
Date: Thu, 19 Dec 2019 16:10:09 +0100
Subject: [PATCH 0040/1194] Added initial strings.xml for Occitan language
---
app/src/main/res/strings.xml | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 app/src/main/res/strings.xml
diff --git a/app/src/main/res/strings.xml b/app/src/main/res/strings.xml
new file mode 100644
index 000000000..0e5b7ccd6
--- /dev/null
+++ b/app/src/main/res/strings.xml
@@ -0,0 +1,2 @@
+
+
From a08cd4ce6a8e730e77ec13b5ef9b6e41c179a135 Mon Sep 17 00:00:00 2001
From: Louis-Berlic
Date: Thu, 19 Dec 2019 16:11:17 +0100
Subject: [PATCH 0041/1194] Move to values-oc
---
app/src/main/res/{ => values-oc}/strings.xml | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename app/src/main/res/{ => values-oc}/strings.xml (100%)
diff --git a/app/src/main/res/strings.xml b/app/src/main/res/values-oc/strings.xml
similarity index 100%
rename from app/src/main/res/strings.xml
rename to app/src/main/res/values-oc/strings.xml
From cc869b98a30ff9572a0a41293003667c87ec0fdf Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sat, 28 Dec 2019 20:32:13 +0000
Subject: [PATCH 0042/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (508 of 508 strings)
---
app/src/main/res/values-ru/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 9e28d4ff6..48b7c4e4c 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -326,7 +326,7 @@
Добавлено в плейлист
Миниатюра плейлиста изменена
Не удалось удалить плейлист
- Без титров
+ Без субтитров
Подогнать
Заполнить
Приблизить
@@ -372,9 +372,9 @@
Удалить все загруженные данные веб-страниц
При открытии ссылки на контент — %s
Нет потоков для загрузки
- Титры
+ Субтитры
Приложение для воспроизведения этого файла не установлено
- Изменить размер текста и стиль титров. Нужен перезапуск
+ Изменить размер текста и стиль субтитров. Нужен перезапуск
Очистить историю
Удалить всю историю просмотров\?
История просмотров удалена
From 8da8ce0a0a40234f080093d289eddcd44012a5ef Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Sat, 28 Dec 2019 14:42:33 +0000
Subject: [PATCH 0043/1194] Translated using Weblate (Kurdish)
Currently translated at 70.9% (360 of 508 strings)
---
app/src/main/res/values-ku/strings.xml | 348 ++++++++++++++++++++++++-
1 file changed, 339 insertions(+), 9 deletions(-)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 228849b33..24e9441ca 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -1,5 +1,6 @@
-
-گرته له گهڕان بكه بۆ دهستپێكردن
+
+
+ گرته له گهڕان بكه بۆ دهستپێكردن
%1$s بینراو
بڵاوكراوهتهوه له %1$s
هیچ كارپێكهرێكی ڤیدیۆیی نهدۆزرایهوه، دهتهوێت VLC داگریت؟
@@ -27,25 +28,19 @@
ناتوانیت گۆڕانكاری لهم بهشدارییهدا بكهیت
ناتوانرێت بهشداریكردنهكه نوێبكرێتهوه
پیشاندانی زانیاری
-
سهرهكی
بهشدارییهكان
نیشانكردنهكان
-
چی نوێ ههیه
-
لهپشتهوه
پهنجهره
ناردن بۆ
-
شوێنی داگرتنی ڤیدیۆ
شوێنی ڤیدیۆ داگیراوهكان
نوسینی شوێنی داگرتنی ڤیدیۆكان
-
شوێنی داگرتنی دهنگ
شوێنی دهنگه داگیراوهكان
نوسینی شوێنی داگرتنی دهنگهكان
-
كاركردنی خۆكارانه
قهبارهی سهرهكی
قهبارهی سهرهكی پهنجهره
@@ -68,4 +63,339 @@
ناچالاكی بكه بۆ ڕاگرتنی وێنۆچكهكان له باركردن و پاشهكهوتبوون لهسهر بیرگهی ئامێرهكهت.
\nگۆڕینی ئهمه دهبێته هۆی سڕینهوهیان لهسهر بیرگهی مۆبایلهكهت.
پاشماوهی وێنۆچكهكان سڕایهوه
-
+ ڤیدیۆ لێبدرێ کاتێ NewPipe لە ئەپێکیتر کرایەوە
+ بەکارهێنانی بەدواگەڕانی ناتەواوی خێرا
+ خاوێنکردنەوەی پاشماوەی داتا
+ سڕینەوەی پاشماوەی هەموو داتاکان
+ پاشماوەی داتاکان سڕانەوە
+ ڕیزکردنی خۆکاری لێدانی دواتر
+ کۆنتڕۆڵی لێدەر بەجوڵەی پەنجە
+ جوڵەی پەنجەت لەسەر ڕونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ و ڕووناکی
+ گەڕان بەنێو پێشنیارکراوەکان
+ پیشاندانی پێشنیارەکان لەکاتی گەڕان
+ مێژووی گەڕان
+ مێژووی تەماشاکردن
+ هێشتنەوەی تراکی ڤیدیۆ لێدراوەکان
+ بەردەوام بوونی ڤیدیۆ لەدوای هەبوونی هەر بڕینێک (وەک پەیوەندیکردن)
+ داگرتن
+ دواتر
+ پیشاندانی دواتر و ڤیدیۆ هاوشێوەکان
+ بەستەرەکە پشتگیری نەکراوە
+ وڵاتی سەرەکی
+ خزمەتگوزاری
+ لێدەری ڤیدیۆیی
+ ڤیدیۆ & دەنگ
+ مێژوو & پاشماوە
+ پەنجەرەی بچووک
+ ڕووکار
+ هیتر
+ ڕاستکردنەوە
+ لێدان لە پاشبنەما
+ لێدان لە پەنجەرەی بچووک
+ ڕیزکرا لە لێدان لە پاشبنەما
+ ڕیزکرا لە لێدان لە پەنجەرەی بچووک
+ لێدان
+ ناوەڕۆک
+ سنوردانانی تەمەن
+ ڕاستەوخۆ
+ داگرتنەکان
+ داگرتنەکان
+ ناتوانرێ سکاڵابکرێ
+ هەمووی
+ کەناڵ
+ لیستی ڤیدیۆ
+ بەڵێ
+ دواتر
+ ناچالاککراوە
+ فلتەر
+ نوێکردنەوە
+ سڕینەوە
+ قەبارە دانانەوە
+ باشترین قەبارە
+ گەڕانەوە
+ لێدانی هەمووی
+ هەمیشە
+ تەنها ئێستا
+ فایل
+ ئاگانامەکانی ئەپ
+ ئاگانامەکانی ئەپەکە بۆ پاشبنەما و لێدانەکانی پەنجەرەی بچووک
+ (نەزانراو)
+ چەسپاندنی لاربوونەوە
+ گۆڕین بۆ پاشبنەما
+ گۆڕین بۆ پەنجەرەی بچووک
+ گۆڕین بۆ سەرەکی
+ هێنانی داتابەیس
+ دەرکردنی داتابەیس
+ جێگەی مێژوو و بەشداربووەکانی ئێستات دەگرێتەوە
+ زەخیرەکردنی مێژوو و بەشداربوون و لیستەکان
+ هەڵەیەک ڕوویدا
+ کێشە لە هێڵەکەتدا هەیە
+ ناتوانرێ هەموو وێنۆچکەکان باربکرێن
+ ناتوانرێ وێبسایت شیبکرێتەوە
+ ناتوانرێ وێبسایت بەتەواوی شیبکرێتەوە
+ ناوەڕۆک بوونی نییە
+ ناتوانرێ لیستی داگرتن دابنرێ
+ پەخشی ڕاستەوخۆ پشتگیری ناکرێ لەئێستادا
+ هیچ پەخشێ نەدۆزرایەوە
+ ناتوانرێ وێنە باربکرێ
+ ئەپ کڕاشبوو
+ ناتوانرێ ئەم پەخشە لێبدرێ
+ لێدەرە ڤیدیۆییە دەرەکییەکان پشتگیری ئەم جۆرە بەستەرانە ناکەن
+ بەستەر هەڵەیە
+ هیچ پەخشێکی ڤیدیۆیی نەدۆزرایەوە
+ پەخشی هیچ دەنگێک نەدۆزرایەوە
+ ئەو فایلە بوونی نییە یان دەسەڵاتی خوێندنەوە و نوسینی لاوازە
+ ناوی فایل ناکرێ بەتاڵ بێت
+ هەڵەیەک ڕوویدا : %1$s
+ ببوورە، ناتوانرێ ئەوە ڕووبدات.
+ سکاڵا لەسەر کێشە لەڕێگای ئیمێڵ
+ ببورە، هەندێ کێشە ڕوویدا.
+ سکاڵا
+ زانیاری:
+ چی ڕوویدا:
+ "لێدوانەکەت (بە ئینگلیزی):"
+ وردەکارییەکان:
+ وێنۆچکەی پیشاندانی ڤیدیۆ
+ ماوەی لێدانی ڤیدیۆ:
+ وێنۆچکەی کەسی بەرزکەرەوە
+ بەدڵبوون
+ بەدڵنەبوون
+ بەکارهێنانی Tor
+ سکاڵا لەبوونی کێشە
+ سکاڵا لەبەکاربەر
+ هیچ ئەنجامێک نییە
+ هیچ شتێک لێرەدا نییە
+ ڕاکێشان بۆ دووبارە داواکردنەوە
+ ناتوانرێ شوێنی داگرتن دروستبکرێ \'%1$s\'
+ شوێنی داگرتن دانرا \'%1$s\'
+ ڤیدیۆ
+ دەنگ
+ هەوڵدانەوە
+ دەسەڵاتی گەیشتن بە بیرگە نەدرا
+ هەزار
+ ملیۆن
+ بلیۆن
+ هیچ بەشداربوویەک نییە
+
+ - %s بەشداربوو
+ - %s بەشداربوون
+
+ هیچ بینراوێک نییە
+
+ - %s بینراو
+ - %s بینرااو
+
+ هیچ ڤیدیۆیەک نییە
+
+ - ڤیدیۆکان
+
+
+ دەستپێکردن
+ ڕاگرتن
+ لێدان
+ دروستکردن
+ سڕینەوە
+ سڕینەوەی یەکیان
+ سڕینەوەی هەمووی
+ تاقیکردنەوەی هێڵێک
+ ڕێپێنەدان
+ دانانەوەی ناو
+ فرمانی نوێ
+ باشە
+ ناوی فایل
+ دابەشکراوەکان
+ کێشە ڕوویدا
+ سێرڤەر پشتگیرینەکراوە
+ فایل بوونی هەیە
+ داگرتنەکانی ئەپ
+ گرتەبکە بۆ وردەکاری
+ تکایە چاوەڕێبکە…
+ لەبەرگیرایەوە
+ تکایە فۆڵدەرێک بۆ شوێنی داگرتن دیاریبکە لە ڕێکخستنەکان
+ ئەم دەسەڵاتە پێویستە بۆ
+\nکردنەوەی پەنجەرەی بچووک
+ reCAPTCHA
+ reCAPTCHA challenge
+ reCAPTCHA challenge requested
+ داگرتن
+ پیت و ژمارەکان
+ کارەکتەرە تایبەتییەکان
+ دەربارەی ئەپ
+ ڕێکخستنەکان
+ دەربارە
+ © %1$s by %2$s under %3$s
+ ناتوانرێ مۆڵەت باربکرێ
+ کردنەوەی وێبسایت
+ دەربارە
+ هاوبەشەکان
+ مۆڵەتەکان
+ هاوبەشبوون
+ Whether you have ideas of; translation, design changes, code cleaning, or real heavy code changes—help is always welcome. The more is done the better it gets!
+ View on GitHub
+ بەخشین
+ NewPipe is developed by volunteers spending time bringing you the best experience. Give back to help developers make NewPipe even better while enjoying a cup of coffee.
+ پێدانەوە
+ وێبسایت
+ سەردانی وێبسایتی NewPipe بکە بۆ زانیاری و هەواڵی نوێ.
+ Read license
+ مێژوو
+ گەڕا
+ تەماشاکراوە
+ مێژوو ناچالاکە
+ مێژوو
+ مێژوو بەتاڵە
+ مێژوو سڕایەوە
+ بابەت سڕایەوە
+ ئایا دەتەوێ ئەم بابەتە لە مێژووی گەڕان بسڕدرێتەوە؟
+ ئایا دەتەوێ ئەم بابەتە لە مێژووی تەماشاکردن بسڕدرێتەوە؟
+ ئایا دڵنیای لە سڕینەوەی هەموو بابەتەکان لە مێژوودا؟
+ دواین لێدراو
+ زۆرترین لێدان
+ ناوەڕۆکی پەڕەی سەرەکی
+ لێدانی پەنجەرەی بچووک
+ لادان
+ وردەکارییەکان
+ ڕێکخستنەکانی دەنگ
+ دەستپێکردنی لێدان لێرەوە
+ دەستپێکردنی لێدان لە پاشبنەماوە
+ دەستپێکردنی لێدان لە پەنجەرەی بچووکەوە
+ بەمزووانە شتێک لێرەدا دەردەکەوێ :D
+ لێدەری ڤیدیۆیی
+ لێدەری پاشبنەما
+ لێدەری پەنجەرەی بچووک
+ هەمیشە بپرسە
+ دەستکەوتنی زانیاری…
+ بارکردنی ناوەڕۆکی داواکراو
+ لیستی نوێ
+ سڕینەوە
+ ناوںْوسینەوە
+ ناو
+ زیادکردن بۆ لیست
+ دانان لەسەر وێنۆچکەی لیست
+ لیستی نیشانەکراو
+ لادانی نیشانەکراو
+ ئەم لیستە بسڕدرێتەوە؟
+ لیست دروستکرا
+ لیست دانرا
+ وێنۆچکەی لیست گۆڕدرا.
+ ناتوانی ئەم لیستە بسڕیتەوە.
+ هیچ ژێرنووسێک نییە
+ گونجاو بە ڕونما
+ پڕ بە ڕونما
+ هێنانەپێش
+ خۆکاری دانرا
+ چالاککردنی LeakCanary
+ سکاڵا لەسەر کێشەکان
+ Force reporting of undeliverable Rx exceptions outside of fragment or activity lifecycle after disposal
+ هێنانەوە/خەزنکردن
+ هێنانەوە
+ هێنانەوە لە
+ خەزنکردن بۆ
+ دەهێنرێتەوە…
+ خەزندەکرێ…
+ هێنانەوەی فایل
+ خەزنی پێشووتر
+ ناتوانرێ بەشدارییەکان بهێنرێتەوە
+ ناتوانرێ بەشدارییەکان خەزن بکرێن
+ بۆ هێنانەوەی بەشداربوونەکانی یوتوب پێویستە فایلی خەزن بوو بگەڕێنیتەوە:
+\n
+\n1. ئەم بەستەرە بکەوە: %1$
+\n2. بچۆرەژوورەوە گەر داوای کرد
+\n3. داگرتنێک دەست پێدەکات (ئەمە فایلی خەزنکراوە)
+ Import a SoundCloud profile by typing either the URL or your ID:
+\n
+\n1. Enable \"desktop mode\" in a web-browser (the site is not available for mobile devices)
+\n2. Go to this URL: %1$s
+\n3. Log in when asked
+\n4. Copy the profile URL you were redirected to.
+ yourID, soundcloud.com/yourid
+ ئەوە بزانە ئەم کردارە پێویستی بە هێڵێکی گران هەیە.
+\n
+\nدەتەوێ بەردەوامبیت؟
+ کۆنترۆڵی خێرایی
+ خێراییەکان
+ شەپۆلی دەنگ
+ سڕینەوەی بەستەر (ڕەنگە ببێتە هۆی تێکدان)
+ هیچ پەخشێک نییە بۆ داگرتن
+ ژێرنووس
+ بەهۆی گۆڕانکاری لە شێوەی ژێرنووسکردنەکە. پێویستە ئەپەکە دابخەیت و دیسانەوە بیکەیتەوە.
+ هیچ ئەپێک دانەمەزراوە بۆ لێدانی ئەم فایلە
+ سڕینەوەی مێژوو
+ مێژوو دەسڕێتەوە لەگەڵ ڤیدیۆ لێدراوەکان و شوێنی لیستە ڤیدیۆییەکان
+ سڕینەوەی تەواوی مێژوو؟
+ سڕینەوەی مێژووی گەڕان
+ مێژووی گەڕانەکانت دەسڕێتەوە
+ تەواوی گەڕانەکانت بسڕدرێنەوە؟
+ مێژووی گەڕانەکانت سڕانەوە.
+ 1 بابەت سڕایەوە.
+ NewPipe is copyleft libre software: You can use, study share and improve it at will. Specifically you can redistribute and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ NewPipe\'s Privacy Policy
+ The NewPipe project takes your privacy very seriously. Therefore, the app does not collect any data without your consent.
+\nNewPipe\'s privacy policy explains in detail what data is sent and stored when you send a crash report.
+ Read privacy policy
+ کەناڵەکان
+ لیستی ڤیدیۆکان
+ تراکەکان
+ بەکاربەرەکان
+ بەشدارنەبوون
+ پەڕەیەکی نوێ
+ هەڵبژاردنی پەڕە
+ کۆنترۆڵی دەنگ بەجوڵەی پەنجە
+ جوڵەی پەنجەت لەسەر ڕونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ
+ کۆنترۆڵی ڕووناکی بەجوڵەی پەنجە
+ جوڵەی پەنجەت لەسەر ڕونما بەکاربهێنە بۆ گۆڕینی ئاستی ڕووناکی ڕونما
+ زمانی سەرەکی
+ نوێکارییەکان
+ فایل سڕایەوە
+ ئاگانامەی نوێکاری ئەپ
+ ئاگانامەکانی وەشانی نوێی ئەپ
+ بیرگەی دەرەکی بەردەست نییە
+ داگرتن لە بیرگەی دەرەکی ناکرێت.
+\nشوێنی فۆڵدەری داگرتنەکان دابنرێتەوە؟
+ گێڕانەوە بۆ شێوازی سەرەکی
+ ئایا دەتەوێ بگەڕێنرێتەوە بۆ شێوازی سەرەکی؟
+ ژمارەی بەشداربووان نادیارە
+ داگرتنێکیترت هەیە بەهەمان ناو
+ پیشاندانی کێشە
+ کۆد
+ فۆڵدەری مەبەست ناتوانرێ دروست بکرێ
+ فایل ناتوانرێ دروستبکرێ
+ ڕێگەپێدان ڕەتکرایەوە لەلایەن سیستەمەوە
+ پەیوەستبوونی پارێزراو شکستی هێنا
+ ناتوانرێ ڕاژە بدۆزرێتەوە
+ ناتوانرێ بە ڕاژەوە پەیوەست بیت
+ ڕاژەکە هیچ داتایەک نانێرێت
+ ئەم ڕاژەیە ناتوانێ چەندین داگرتن لەیەک کاتدا بکات
+ ڕووداوەکان
+ پیشاندانی لێدوانەکان
+ ناچالاککردنی وەستان بۆ پیشاندانی لێدوانەکان
+ لێدانی خۆکاری
+
+ - لێدوانەکان
+
+
+ هیچ لێدوانێک نییە
+ لێدانەوەی لیست
+ لێدانەوەی لیست لە شوێنی پێشووتر
+ شوێنەکان لە لیستدا
+ سڕینەوەی داتا
+ مێژوو سڕایەوە.
+ شوێنی لیستەکان سڕانەوە.
+ شوێنی فایل گۆڕدراوە یان سڕاوەتەوە
+ داگرتنێکیتر هەیە بەهەمان ناو
+ سڕینەوەی شوێنی لیستەکان
+ شوێنی هەموو لیستەکان دەسڕێتەوە
+ شوێنی هەموو لیستەکان بسڕدرێتەوە؟
+ فۆڵدەری داگرتن بگۆڕە بۆ ئەنجامدانی کاریگەری
+ خزمەتگوزاری چەسپاو، ئێستا هەڵبژێردراو:
+ هیچ کەسێک تەماشای ناکات
+
+ - %s تەماشا دەکات
+ - %s تەماشا دەکەن
+
+ هیچ کەسێ گوێناگرێ
+
+ - %s گوێی لێدەگرێ
+ - %s گوێی لێدەگرن
+
+
\ No newline at end of file
From 457ebe3aa2259a8a58778eead1f1cbdb0a10fd29 Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Sun, 29 Dec 2019 14:15:28 +0000
Subject: [PATCH 0044/1194] Translated using Weblate (Kurdish)
Currently translated at 78.5% (410 of 522 strings)
---
app/src/main/res/values-ku/strings.xml | 109 ++++++++++++++++++++++++-
1 file changed, 106 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 24e9441ca..f1917a36d 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -188,7 +188,7 @@
هیچ ڤیدیۆیەک نییە
- ڤیدیۆکان
-
+
دەستپێکردن
ڕاگرتن
@@ -215,7 +215,7 @@
ئەم دەسەڵاتە پێویستە بۆ
\nکردنەوەی پەنجەرەی بچووک
reCAPTCHA
- reCAPTCHA challenge
+ reCAPTCHA داواکاری
reCAPTCHA challenge requested
داگرتن
پیت و ژمارەکان
@@ -372,7 +372,7 @@
لێدانی خۆکاری
- لێدوانەکان
-
+
هیچ لێدوانێک نییە
لێدانەوەی لیست
@@ -398,4 +398,107 @@
- %s گوێی لێدەگرێ
- %s گوێی لێدەگرن
+
+ پاشکۆی خۆکاری پەخشێکی بەستراوە لەکاتی کارپێکردنی کۆتا پەخشدا
+ کۆگای گەڕانی داواکاری نێوخۆیی
+ گێڕانەوە لەدۆخی سەرنج
+ پیشاندانی ڕێنمایی ”داگرتن تا پاشکۆ”
+ پیشاندانی ڕێنمایی کاتێ لە پاشبنەما یاخوود پەنجەرەی بچووکدا گرتە دەکرێ لەسەر وردەکاری ڤیدیۆیەک
+ ڕەفتار
+ پیشاندانی ئەو ڤیدیۆیانەی سنوری تەمەنیان بۆ دانراوە. لە ڕێکخستنەکانەوە ڕێگەی پێدەدرێت.
+ ناتوانرێ واژووی بەستەری ڤیدیۆ بخوێنرێتەوە
+ نەگێڕانەوەی کارپێکەر بۆ پێش کێشە ڕوویدا
+ گێڕانەوەی کارپێکەر بۆکاتی پێش کێشە
+
+
+
+
+ بەستەر هەڵەیە یاخوود بەئینتەرنێتەوە پەیوەست نەبوویت
+ هێما ڕێگەپێدراوەکان لە فایلێکی ناویدا
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ پەڕە بنەڕەتییەکان بەکاردەبردرێن, ناتوانرێ پەڕە پاشەکەوتکراوەکان بخوێنرێنەوە
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ پیشاندانی نیشانەکەری شوێنی کارپێکراو لە لیستەکان
+
+
+
+
+
+ خێرا بردنە پێشەوە\\ گێڕانەوە بۆکاتی سەرەتا
+ دۆخی PeerTube
+ ئارەزوومەندییەکانی دۆخی PeerTube ڕێکبخە
+ ئەو دۆخانە بدۆزەرەوە کە لەگەڵ خۆتدا دەگونجێن لە https://joinpeertube.org/instances#instances-list
+ زیادکردنی دۆخ
+ بەستەری دۆخ دابنێ
+ ناتوانرێ پشتگیری دۆخەکە بکرێ
+ تەنها بەستەرەکانی https پشتگیریکراون
+ هەمان دۆخ کاراکراوە
\ No newline at end of file
From f4c8fdaf0767e8ef32ea92696e63be910dddfb23 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sun, 29 Dec 2019 18:20:37 +0000
Subject: [PATCH 0045/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-ru/strings.xml | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 48b7c4e4c..f4848e499 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -522,4 +522,20 @@
- %s слушателей
Язык будет изменён после перезапуска
+ Шаг перемотки вперёд/назад
+ Серверы PeerTube
+ Настройте предпочтительные серверы PeerTube
+ Выберите подходящие серверы на https://joinpeertube.org/instances#instances-list
+ Новый сервер
+ URL сервера
+ Не удалось проверить сервер
+ Поддерживается только https
+ Сервер уже существует
+ Локальное
+ Новое
+ Популярное
+ Создан автоматически (автор не найден)
+ восстановление
+ Не удалось восстановить загрузку
+ Выберите сервер
\ No newline at end of file
From c1e1c191d031eb3f30df3dd83582a5969bcebd52 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Mon, 30 Dec 2019 00:03:26 +0000
Subject: [PATCH 0046/1194] Translated using Weblate (German)
Currently translated at 99.2% (518 of 522 strings)
---
app/src/main/res/values-de/strings.xml | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index d72b3de29..b5aaac094 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -517,4 +517,14 @@
- %s Zuhörer
Die Sprache ändert sich, sobald die App neu gestartet wird.
+ PeerTube Instanzen
+ Finde die Instanz, die am besten zu dir passt auf https://joinpeertube.org/instances#instances-list
+ Instanz hinzufügen
+ Gib die URL der Instanz ein
+ Validieren der Instanz fehlgeschlagen
+ Diese Instanz existiert bereits
+ Lokal
+ Kürzlich hinzugefügt
+ Auto-generiert (kein Uploader gefunden)
+ Wähle eine Instanz
\ No newline at end of file
From 6f3fd50ed865e6a8f483031db8796389af6deb4b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=2E=20R=C3=BCdinger?=
Date: Mon, 30 Dec 2019 12:55:21 +0000
Subject: [PATCH 0047/1194] Translated using Weblate (German)
Currently translated at 99.2% (518 of 522 strings)
---
app/src/main/res/values-de/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index b5aaac094..8be521d02 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -527,4 +527,6 @@
Kürzlich hinzugefügt
Auto-generiert (kein Uploader gefunden)
Wähle eine Instanz
+ Bevorzugte Peertube-Instanzen festlegen
+ Es werden nur https-Adressen unterstützt
\ No newline at end of file
From 694813ac9080cb243bc8cb15f2288c3486b5fe13 Mon Sep 17 00:00:00 2001
From: Nico-late
Date: Mon, 16 Dec 2019 23:59:30 +0100
Subject: [PATCH 0048/1194] Fixed issue #2838
---
.../main/java/org/schabi/newpipe/download/DownloadDialog.java | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
index 29208b0e0..f7dcd36a7 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
@@ -38,6 +38,7 @@ import com.nononsenseapps.filepicker.Utils;
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.RouterActivity;
import org.schabi.newpipe.extractor.MediaFormat;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.localization.Localization;
@@ -368,6 +369,9 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
toolbar.setOnMenuItemClickListener(item -> {
if (item.getItemId() == R.id.okay) {
prepareSelectedDownload();
+ if (getActivity() instanceof RouterActivity){
+ getActivity().finish();
+ }
return true;
}
return false;
From 6fb16bad85916e7d5daafb3267ba47f0477c0e19 Mon Sep 17 00:00:00 2001
From: Nico-late <56306738+Nico-late@users.noreply.github.com>
Date: Thu, 26 Dec 2019 12:24:18 +0100
Subject: [PATCH 0049/1194] Update
app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
Space added for more clarity
Co-Authored-By: Tobias Groza
---
.../main/java/org/schabi/newpipe/download/DownloadDialog.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
index f7dcd36a7..4fbf4ab5f 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
@@ -369,7 +369,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
toolbar.setOnMenuItemClickListener(item -> {
if (item.getItemId() == R.id.okay) {
prepareSelectedDownload();
- if (getActivity() instanceof RouterActivity){
+ if (getActivity() instanceof RouterActivity) {
getActivity().finish();
}
return true;
From de19421de12638b00369b9f6a7a02723c9d8c070 Mon Sep 17 00:00:00 2001
From: dotvirus <33938500+dotvirus@users.noreply.github.com>
Date: Mon, 16 Sep 2019 20:22:55 +0200
Subject: [PATCH 0050/1194] Update LocalPlaylistFragment.java
---
.../newpipe/local/playlist/LocalPlaylistFragment.java | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
index 9e72838ad..c60cdac3f 100644
--- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
@@ -325,6 +325,16 @@ public class LocalPlaylistFragment extends BaseLocalListFragment
NavigationHelper.playOnBackgroundPlayer(activity, getPlayQueue(), false));
+ headerPopupButton.setOnLongClickListener(view -> {
+ NavigationHelper.enqueueOnPopupPlayer(activity, getPlayQueue(), true);
+ return true;
+ });
+
+ headerBackgroundButton.setOnLongClickListener(view -> {
+ NavigationHelper.enqueueOnBackgroundPlayer(activity, getPlayQueue(), true);
+ return true;
+ });
+
hideLoading();
}
From 1e7e8d4121adb3f6af37bf6e6f537609eea72ef1 Mon Sep 17 00:00:00 2001
From: Mauricio Colli
Date: Tue, 31 Dec 2019 02:51:32 -0300
Subject: [PATCH 0051/1194] Fix for player access out of its creation thread
---
.../org/schabi/newpipe/player/playback/MediaSourceManager.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java b/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java
index 85c852f57..e4cef8c5c 100644
--- a/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java
@@ -319,6 +319,7 @@ public class MediaSourceManager {
private Observable getEdgeIntervalSignal() {
return Observable.interval(progressUpdateIntervalMillis, TimeUnit.MILLISECONDS)
+ .observeOn(AndroidSchedulers.mainThread())
.filter(ignored ->
playbackListener.isApproachingPlaybackEdge(playbackNearEndGapMillis));
}
From 2b4190d85d3d5aae7b134c2b0cbd44af65e8369f Mon Sep 17 00:00:00 2001
From: yausername
Date: Tue, 31 Dec 2019 20:10:51 +0530
Subject: [PATCH 0052/1194] made instance list url non translatable
---
.../newpipe/settings/PeertubeInstanceListFragment.java | 7 +++++++
app/src/main/res/values-ar/strings.xml | 1 -
app/src/main/res/values/strings.xml | 3 ++-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/PeertubeInstanceListFragment.java b/app/src/main/java/org/schabi/newpipe/settings/PeertubeInstanceListFragment.java
index 1f8d552d0..a0c16af75 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/PeertubeInstanceListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/PeertubeInstanceListFragment.java
@@ -89,6 +89,13 @@ public class PeertubeInstanceListFragment extends Fragment {
public void onViewCreated(@NonNull View rootView, @Nullable Bundle savedInstanceState) {
super.onViewCreated(rootView, savedInstanceState);
+ initViews(rootView);
+ }
+
+ private void initViews(@NonNull View rootView) {
+ TextView instanceHelpTV = rootView.findViewById(R.id.instanceHelpTV);
+ instanceHelpTV.setText(getString(R.string.peertube_instance_url_help, getString(R.string.peertube_instance_list_url)));
+
initButton(rootView);
RecyclerView listInstances = rootView.findViewById(R.id.instances);
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index e42f1d7b4..3ad4c2f39 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -543,7 +543,6 @@
تسريع إلى الأمام/-ترجيع وقت البحث
نموذج بيرتوب
تعيين حالات بيرتوب المفضلة لديك
- ابحث عن النموذج التي يناسبك على https://joinpeertube.org/instances#instances-list
إضافة نموذج
أدخل رابط نموذج
فشل في التحقق من النموذج
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 19013322d..6021df15e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -112,7 +112,8 @@
Default content language
PeerTube instances
Set your favorite peertube instances
- Find the instances that best suit you on https://joinpeertube.org/instances#instances-list
+ Find the instances that best suit you on %s
+ https://joinpeertube.org/instances#instances-list
Add instance
Enter instance url
Failed to validate instance
From 17c0b981d1ef9b19c7ace99b295665ca44b0487c Mon Sep 17 00:00:00 2001
From: Software In Interlingua
Date: Tue, 31 Dec 2019 18:01:20 +0000
Subject: [PATCH 0053/1194] Added translation using Weblate (Interlingua)
---
app/src/main/res/values-ia/strings.xml | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 app/src/main/res/values-ia/strings.xml
diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml
new file mode 100644
index 000000000..a6b3daec9
--- /dev/null
+++ b/app/src/main/res/values-ia/strings.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
From 7ddb856ccd971ab4a97e8e06e5a64901974875d4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Sun, 29 Dec 2019 19:57:21 +0000
Subject: [PATCH 0054/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-tr/strings.xml | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 06bb3946c..533c0d736 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -15,7 +15,7 @@
Şununla paylaş
Tarayıcı seçin
döndürme
- Harici video oynatıcı kullanın
+ Harici video oynatıcı kullan
Harici ses oynatıcı kullanın
Video indirme dizini
İndirilen video dosyaları burada depolanır
@@ -29,7 +29,7 @@
Kodi ile oynat
Kore uygulaması bulunamadı. Yüklensin mi\?
\"Kodi ile oynat\" seçeneğini göster
- Kodi ortam merkezi üzerinden video oynatmak için bir seçenek görüntüleyin
+ Kodi ortam merkezi üzerinden video oynatmak için bir seçenek göster
Varsayılan ses formatı
Tema
Koyu
@@ -175,7 +175,7 @@
Arama geçmişi
Arama sorgularını yerel olarak saklayın
İzleme geçmişi
- İzlenen videoların kaydını tutun
+ İzlenen videoların kaydını tut
Odaklanıldığında sürdür
Kesintilerden sonra (örneğin telefon çağrısı) oynatmaya devam et
Oynatıcı
@@ -208,7 +208,7 @@
Öge silindi
Bu ögeyi arama geçmişinden silmek istiyor musunuz\?
\"Eklemek için basılı tutun\" ipucunu göster
- Vidyo ayrıntıları sayfasında arka plan veya açılır pencere düğmesine basıldığında ipucu gösterilir
+ Video ayrıntıları sayfasında arka plan veya açılır pencere düğmesine basıldığında ipucu göster
Arka plan oynatıcısı kuyruğuna eklendi
Açılır pencere oynatıcısı kuyruğuna eklendi
Tümünü Oynat
@@ -517,4 +517,20 @@
- %s dinleyici
Uygulama yeniden başlatıldıktan sonra dil değişecektir.
+ Hızlı ileri/geri sarma süresi
+ PeerTube örnekleri
+ Favori peertube örneklerinizi ayarlayın
+ https://joinpeertube.org/instances#instances-list adresinde size en uygun örnekleri bulun
+ Örnek ekle
+ Örnek URL\'sini girin
+ Örnek doğrulanamadı
+ Yalnızca https URL\'leri desteklenmektedir
+ Örnek zaten var
+ Yerel
+ Son eklenen
+ En çok beğenilen
+ Otomatik oluşturulan (yükleyen bulunamadı)
+ kurtarılıyor
+ Bu indirme kurtarılamıyor
+ Bir örnek seçin
\ No newline at end of file
From 0c664e346a6a08c537cee06b2c06e453e2a3083d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=2E=20R=C3=BCdinger?=
Date: Mon, 30 Dec 2019 13:06:09 +0000
Subject: [PATCH 0055/1194] Translated using Weblate (German)
Currently translated at 99.2% (518 of 522 strings)
---
app/src/main/res/values-de/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 8be521d02..e16d7d69b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -517,8 +517,8 @@
- %s Zuhörer
Die Sprache ändert sich, sobald die App neu gestartet wird.
- PeerTube Instanzen
- Finde die Instanz, die am besten zu dir passt auf https://joinpeertube.org/instances#instances-list
+ PeerTube-Instanzen
+ Finde auf https://joinpeertube.org/instances#instances-list die Instanzen, die am besten zu dir passen
Instanz hinzufügen
Gib die URL der Instanz ein
Validieren der Instanz fehlgeschlagen
From e1e2add61695e38587df6ae297a6280ded5b8e5a Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sun, 29 Dec 2019 22:30:10 +0000
Subject: [PATCH 0056/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-ru/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index f4848e499..ef233baee 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -522,7 +522,7 @@
- %s слушателей
Язык будет изменён после перезапуска
- Шаг перемотки вперёд/назад
+ Перемотка двойным нажатием
Серверы PeerTube
Настройте предпочтительные серверы PeerTube
Выберите подходящие серверы на https://joinpeertube.org/instances#instances-list
From 741a872c3928984e4a67dc1c34b08b3f78dcace5 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Sun, 29 Dec 2019 19:20:57 +0000
Subject: [PATCH 0057/1194] Translated using Weblate (Hebrew)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-he/strings.xml | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index fbcf5ce63..9eaedb71e 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -529,4 +529,20 @@
השפה תוחלף עם הפעלת היישומון מחדש.
קיוסק בררת מחדל
+ משך קפיצה מהירה קדימה/אחורה
+ מופעים של PeerTube
+ נא להגדיר את מופעי ה־peertube המועדפים עליך
+ איתור המופעים שהכי מתאימים לך תחת https://joinpeertube.org/instances#instances-list
+ הוספת מופע
+ נא להכניס כתובת מופע
+ אימות המופע נכשל
+ יש תמיכה בכתובות https בלבד
+ המופע כבר קיים
+ מקומי
+ נוספו לאחרונה
+ האהובים ביותר
+ נוצרה אוטומטית (לא נמצא מעלה)
+ בשחזור
+ לא ניתן לשחזר את ההורדה הזאת
+ נא לבחור מופע
\ No newline at end of file
From b1fd2c007d19f0929c5220d59edd707a332d2728 Mon Sep 17 00:00:00 2001
From: WaldiS
Date: Sun, 29 Dec 2019 20:24:48 +0000
Subject: [PATCH 0058/1194] Translated using Weblate (Polish)
Currently translated at 99.2% (518 of 522 strings)
---
app/src/main/res/values-pl/strings.xml | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 769fa67a6..0b52d3c79 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -523,4 +523,20 @@
- %s słuchaczy
Język zmieni się po ponownym uruchomieniu aplikacji.
+ Szybkie przewijanie do przodu/do tyłu szukaj czasu trwania
+ Wystąpienia PeerTube
+ Ustaw swoje ulubione instancje peertube
+ Znajdź instancje, które najbardziej Ci odpowiadają, na https://joinpeertube.org/instances#instances-list
+ Dodaj instancję
+ Wprowadź adres URL instancji
+ Nie udało się sprawdzić poprawności instancji
+ Obsługiwane są tylko adresy URL https
+ Instancja już istnieje
+ Lokalny
+ Ostatnio dodane
+ Ulubione
+ Generowane automatycznie (nie znaleziono uploadera)
+ odzyskiwanie
+ Nie można odzyskać tego pobrania
+ Wybierz instancję
\ No newline at end of file
From 56364c4a2c7844379fb63757615af1bd6b947950 Mon Sep 17 00:00:00 2001
From: pjammo
Date: Mon, 30 Dec 2019 13:25:35 +0000
Subject: [PATCH 0059/1194] Translated using Weblate (Italian)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-it/strings.xml | 218 +++++++++++++------------
1 file changed, 117 insertions(+), 101 deletions(-)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 631922433..3af36f579 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -14,21 +14,21 @@
Condividi con
Scegli browser
rotazione
- Cartella dei video scaricati
+ Cartella Video Scaricati
I video scaricati saranno salvati qui
Scegli la cartella per i video scaricati
- Risoluzione predefinita
+ Risoluzione Predefinita
Riproduci con Kodi
- L\'applicazione Kore non è stata trovata. Vuoi installarla?
+ L\'applicazione Kore non è stata trovata. Installarla\?
Mostra l\'opzione \"Riproduci con Kodi\"
Mostra l\'opzione per riprodurre i video tramite Kodi
Audio
- Formato audio predefinito
+ Formato Audio Predefinito
Scarica
Prossimo
- Mostra video \'Prossimo\' e \'Simili\'
+ Mostra video \"Prossimo\" e \"Simili\"
URL non supportato
- Lingua predefinita per i contenuti
+ Lingua Predefinita per Contenuti
Video e Audio
Miniatura anteprima video
Riproduci video, durata:
@@ -39,7 +39,7 @@
Creata la cartella per i download \'%1$s\'
Usa un lettore video esterno
Usa un lettore audio esterno
- Cartella degli audio scaricati
+ Cartella Audio Scaricati
Gli audio scaricati saranno salvati qui
Scegli la cartella per gli audio scaricati
Tema
@@ -47,7 +47,7 @@
Chiaro
Aspetto
Altro
- Riproduzione in sottofondo
+ Riproduzione in Sottofondo
Riproduci
Errore
Errore di connessione
@@ -60,10 +60,10 @@
Impossibile impostare il menu di download
I contenuti in diretta non sono al momento supportati
Contenuti
- Contenuti vietati ai minori
+ Contenuti Vietati ai Minori
Mostra video riservati a un pubblico maggiorenne. Si possono abilitare dalle Impostazioni.
Tocca Cerca per iniziare
- Riproduzione automatica
+ Riproduzione Automatica
Riproduci i video quando NewPipe viene aperto da un\'altra app
IN DIRETTA
Impossibile analizzare completamente il sito web
@@ -84,7 +84,7 @@
È stato negato il permesso di accesso all\'archiviazione di massa
Download
Download
- Segnalazione errori
+ Segnalazione Errori
Inizia
Pausa
Riproduci
@@ -102,7 +102,7 @@
Tocca per maggiori dettagli
Attendi…
Copiato negli appunti
- Nelle impostazioni seleziona una cartella per i download
+ Seleziona una cartella per i download
Impossibile caricare l\'immagine
L\'app/UI si è interrotta
Cosa:\\nRichiesta:\\nLingua contenuto:\\nServizio:\\nOrario GMT:\\nPacchetto:\\nVersione:\\nVersione SO:
@@ -119,21 +119,21 @@
Più tardi
Apri in modalità popup
Modalità popup di NewPipe
- Riproduzione in modalità popup
+ Riproduzione in Modalità Popup
Disattivato
Non riproduce l\'audio con ALCUNE risoluzioni
In sottofondo
Popup
- Risoluzione predefinita per la modalità popup
- Mostra risoluzioni più alte
+ Risoluzione Predefinita Popup
+ Mostra Altre Risoluzioni
Solo alcuni dispositivi supportano la riproduzione video in 2K e 4K
- Formato video predefinito
- Ricorda dimensione e posizione del popup
- Ricorda l\'ultima dimensione e posizione del popup
- Controlli gestuali del lettore multimediale
- Usa i gesti per controllare la luminosità e il volume del lettore multimediale
- Suggerimenti di ricerca
- Mostra i suggerimenti durante la ricerca
+ Formato Video Predefinito
+ Ricorda Dimensione e Posizione Popup
+ Ricorda l\'ultima dimensione e posizione della finestra popup
+ Controllo Movimenti Lettore Multimediale
+ Usa i movimenti per controllare luminosità e volume del lettore multimediale
+ Suggerimenti Ricerca
+ Mostra suggerimenti durante la ricerca
Popup
Filtra i risultati
Ricarica
@@ -144,18 +144,18 @@
\nper riprodurre in modalità popup
Impostazioni
Informazioni
- Licenze di terze parti
+ Licenze di Terze Parti
© %1$s di %2$s protetto da licenza %3$s
Impossible caricare la licenza
- Visita il sito
+ Visita il Sito
Informazioni
Contributori
Licenze
Streaming libero e leggero su Android.
Mostra su GitHub
Licenza di NewPipe
- Un aiuto è sempre il benvenuto: nuove idee e funzionalità, traduzioni, modifiche al design o cambiamenti radicali del codice rendono l\'applicazione sempre migliore!
- Leggi la licenza
+ Un aiuto è sempre gradito: traduzioni, modifiche al design, pulizia del codice, cambiamenti radicali. Più si fa, meglio è!
+ Leggi la Licenza
Contribuisci
Informazioni su NewPipe
Iscriviti
@@ -165,18 +165,18 @@
Impossibile aggiornare l\'iscrizione
Iscrizioni
Novità
- Cronologia ricerche
- Salva le ricerche
- Visualizza storico
+ Cronologia Ricerche
+ Salva le ricerche localmente
+ Cronologia Visualizzazioni
Salva la cronologia dei video visualizzati
- Riprendi tornando in primo piano
+ Riprendi Riproduzione
Continua a riprodurre dopo le interruzioni (es. chiamate)
Scarica
- Caratteri ammessi nei nomi dei file
+ Caratteri Ammessi per i Nomi dei File
I caratteri non validi vengono sostituiti con
- Carattere sostitutivo
- Lettere e cifre
- Caratteri speciali
+ Carattere Sostitutivo
+ Lettere e Cifre
+ La Maggio Parte dei Caratteri Speciali
Cronologia
Ricerche effettuate
Visualizzati
@@ -185,9 +185,9 @@
La cronologia è vuota
Cronologia cancellata
Principale
- Lettore multimediale
+ Lettore Multimediale
Comportamento
- Cronologia e cache
+ Cronologia e Cache
Playlist
Annulla
Notifiche NewPipe
@@ -211,23 +211,23 @@
Elemento eliminato
Nulla da mostrare
Vuoi eliminare questo elemento dalla cronologia?
- Contenuto della pagina principale
- Pagina vuota
- Locandina
- Pagina iscrizione
- Pagina feed
- Pagina del canale
- Seleziona un canale
- Nessuna iscrizione ad un canale
- Seleziona una locandina
+ Contenuto della Pagina Principale
+ Pagina Vuota
+ Contenuti in Evidenza Personalizzati
+ Iscrizioni
+ Feed Iscrizioni
+ Canale Personalizzato
+ Seleziona Canale
+ Nessuna Iscrizione
+ Seleziona Contenuto
Locandina
Tendenze
Top 50
New & hot
- Mostra il suggerimento \"Tenere premuto per aggiungere video alla coda\"
- Mostra suggerimento quando il pulsante per la riproduzione popup o in sottofondo viene premuto nella pagina dei dettagli del video
- In coda al lettore multimediale in sottofondo
- In coda al lettore multimediale a comparsa
+ Mostra Suggerimento \"Tieni Premuto per Accocodare\"
+ Mostra suggerimento quando il pulsante per la riproduzione \"popup\" o \"in sottofondo\" viene premuto nella pagina dei dettagli del video
+ In Coda in Sottofondo
+ In Coda in Modalità Popup
Riproduci tutto
Impossibile riprodurre questo flusso
Si è verificato un errore irreversibile
@@ -245,14 +245,14 @@
Avvia riproduzione in sottofondo
Avvia riproduzione a comparsa
Dona
- Sito web
- Visita il sito web di NewPipe per maggiori informazioni e novità.
- NewPipe è sviluppato da volontari che trascorrono il loro tempo libero per offrire la migliore esperienza. Restituisci il favore per aiutare gli sviluppatori a rendere NewPipe ancora più piacevole mentre si gustano una tazza di caffè.
+ Sito
+ Visita il sito di NewPipe per informazioni e novità.
+ NewPipe è sviluppato da volontari che impiegano il loro tempo libero per offrire un\'esperienza migliore. Restituisci il favore, aiutandoli a rendere NewPipe ancora più piacevole, mentre si gustano una tazza di caffè.
Restituisci
- Paese predefinito per i contenuti
+ Paese Predefinito per Contenuti
Cambia orientamento
Passa alla riproduzione in background
- Passa alla visualizzazione popup
+ Passa a Popup
Passa alla produzione predefinita
Servizio
Apri il menu
@@ -292,21 +292,21 @@
Sei sicuro di voler eliminare tutti gli elementi dalla cronologia?
Ultima riproduzione
I più riprodotti
- Chiedi sempre
- Nuova scaletta
- Elimina scaletta
- Rinomina scaletta
+ Chiedi ogni volta
+ Nuova Playlist
+ Elimina
+ Rinomina
Nome
Aggiunti alla playlist
Imposta come miniatura della playlist
Segnalibri playlist
Rimuovi segnalibro
- Eliminare questa scaletta\?
+ Eliminare la playlist\?
Playlist creata
- Aggiunti alla scaletta
- Miniatura della scaletta cambiata.
- Impossibile eliminare la scaletta.
- No sottotitoli
+ Aggiunto alla Playlist
+ Miniatura della Playlist cambiata.
+ Impossibile eliminare la Playlist.
+ Nessun Sottotitolo
Rientrato
Pieno
Ingrandito
@@ -317,10 +317,10 @@
Il monitoraggio delle perdite di memoria potrebbe causare la mancata risposta dell\'applicazione durante il dumping dell\'heap
Segnala Errori \"Out-of-lifecycle\"
Forza la segnalazione di eccezioni Rx non consegnabili al di fuori del ciclo di vita dell\'attività dopo la chiusura
- Usa la ricerca rapida ma imprecisa
- La ricerca imprecisa permette al lettore multimediale di spostarsi nelle posizioni più velocemente con una precisione ridotta
- Metti in coda automaticamente il prossimo flusso
- Aggiungi automaticamente un contenuto correlato raggiunta la fine della coda se la ripetizione è disattivata
+ Usa Ricerca Rapida (Imprecisa)
+ Consente al lettore multimediale di spostarsi più velocemente, ma con precisione ridotta
+ Accoda Automaticamente l\'Elemento Successivo
+ Accoda un contenuto consigliato quando è in corso la riproduzione dell\'ultimo elemento, in una coda non ripetitiva
File
Nessuna cartella
Nessun file o cartella che contiene sorgenti
@@ -352,12 +352,12 @@
Tieni presente che questa operazione può consumare una grande quantità di traffico dati.
\n
\nVuoi continuare?
- Carica miniature
- Disabilita per prevenire il caricamento delle miniature, risparmiando dati e memoria. La modifica di questa opzione cancellerà la cache delle immagini in memoria e sul disco.
- Pulizia della cache delle immagini completata
- Pulisci la cache dei metadati
- Rimuovi tutti i dati delle pagine web memorizzati nella cache
- Pulizia della cache dei metadati completata
+ Carica Anteprime
+ Disabilita per prevenire il caricamento delle anteprime, risparmiando dati e memoria. La modifica di questa opzione cancellerà la cache delle immagini in memoria e sul disco.
+ Cache immagini svuotata
+ Pulisci Cache Metadati
+ Rimuovi i dati delle pagine web memorizzati nella cache
+ Cache metadati svuotata
Controlli della velocità di riproduzione
Tempo
Tono
@@ -367,7 +367,7 @@
\'Apri\' preferibilmente con
Azione predefinita all\'apertura del contenuto — %s
Sottotitoli
- Modifica la dimensione e gli stili di sfondo dei sottotitoli. Per applicare le modifiche è richesto un riavvio.
+ Modifica dimensione e stile dei sottotitoli. Riavviare per applicare le modifiche.
Nessuna app installata per riprodurre questo file
Pulisci cronologia visualizzazioni
Elimina la cronologia dei flussi riprodotti e la posizione di riproduzione
@@ -378,9 +378,9 @@
Elimina l\'intera cronologia delle ricerche\?
Cronologia delle ricerche eliminata.
1 elemento eliminato.
- NewPipe è un software libero con licenza copyleft: si può utilizzarlo, studiarlo, condividerlo e migliorarlo a proprio piacimento. In particolare, è possibile ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License pubblicata dalla Free Software Foundation, sia nella versione 3 della Licenza, sia (a propria discrezione) in qualsiasi versione successiva.
+ NewPipe è un software libero con licenza copyleft: si può utilizzare, studiare, condividere e migliorare a proprio piacimento. In particolare, è possibile ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License (Free Software Foundation), nella versione 3 o successiva, a propria discrezione.
Vuoi anche importare le impostazioni?
- Informativa sulla privacy
+ Informativa sulla Privacy
Il progetto NewPipe tiene molto alla tua privacy. Perciò, l\'app non raccoglie alcun dato senza il tuo consenso.
\nL\'informativa sulla privacy di NewPipe spiega in dettaglio quali dati vengono inviati e memorizzati quando si invia un rapporto sugli arresti anomali.
Leggi l\'informativa sulla privacy
@@ -405,45 +405,45 @@
Disiscriviti
Nuova scheda
Scegli scheda
- Movimenti per il controllo del volume
+ Movimenti Controllo Volume
Utilizza i movimenti per controllare il volume del riproduttore
- Movimenti per la gestione della luminosità
+ Movimenti Controllo Luminosità
Utilizza i movimenti per controllare la luminosità del riproduttore
Aggiornamenti
File eliminato
Notifiche di aggiornamenti dell\'applicazione
Notifiche per una nuova versione di NewPipe
Archiviazione esterna non disponibile
- Impossibile effettuare il download sulla memoria esterna SD. Reimpostare la posizione della cartella di download\?
+ Impossibile scaricare sulla scheda SD esterna. Ripristinare la cartella dei download\?
Utilizzando le schede predefinite, c\'è stato un errore durante la lettura delle schede salvate
Ripristina predefiniti
Davvero ripristinare i predefiniti\?
Contatore degli iscritti non disponibile
- Quali schede sono mostrate nella pagina principale
+ Schede mostrate nella pagina principale
Selezione
Aggiornamenti
Mostra una notifica per suggerire l\'aggiornamento dell\'app se una nuova versione è disponibile
Visualizzazione a lista
Lista
Griglia
- Automatico
- Cambia vista
+ Automatica
+ Cambia Visualizzazione
Aggiornamento di NewPipe disponibile!
Premi per scaricare
Finito
- In attesa di
+ In attesa
in pausa
in coda
post-processo
Accoda
Azione negata dal sistema
Download fallito
- Download finito
- %s download finiti
+ Download terminato
+ %s download terminati
Genera un nome unico
Sovrascrivi
Esiste già un file scaricato con lo stesso nome
- C\'è un download in progresso con questo nome
+ C\'è un download in corso con questo nome
Mostra errore
Codice
Impossibile creare il file
@@ -458,16 +458,16 @@
Post-processing fallito
Pulisci i download completati
Ferma
- Tentativi massimi
- Tentativi massimi prima di cancellare il download
+ Numero Massimo Tentativi
+ Quante volte provare prima di annullare il download
Interrompi con le connessioni a consumo
Utile quando si passa alla connessione dati mobile, altrimenti alcuni download potrebbero essere sospesi
Eventi
Conferenze
Connesione finita
- Mostra commenti
+ Mostra Commenti
Disattiva per non visualizzare i commenti
- Riproduzione automatica
+ Riproduzione Automatica
- Commenti
@@ -475,11 +475,11 @@
Nessun commento
Impossibile caricare i commenti
Chiudi
- Recupera riproduzione
+ Riprendi la Riproduzione
Recupera l\'ultima posizione di riproduzione
- Posizioni in lista
- Mostra l indicatore di posizione di riproduzione nelle liste
- Pulisci dati
+ Posizioni nelle Liste
+ Mostra indicatore di posizione di riproduzione nelle liste
+ Pulisci Dati
Posizione di riproduzione eliminata.
File spostato o cancellato
Esiste già un file con questo nome
@@ -489,16 +489,16 @@
Spazio insufficiente sul dispositivo
Progresso perso poiché il file è stato eliminato
Sei sicuro\?
- Un download si avvierà allo stesso tempo
+ Sarà avviato un solo dowload per volta
Avvia downloads
Metti in pausa i downloads
- Chiedi dove scaricare
- Ti sarà chiesto dove salvare i file ogni volta
+ Chiedi Dove Scaricare
+ Ogni volta verrà chiesta la destinazione dei file
Utilizza SAF
- Limite download coda
- Ti verrà chiesto dove salvare ogni download.
+ Limita Coda Download
+ Ogni volta verrà chiesta la destinazione dei file.
\nScegli SAF se vuoi scaricare su una scheda SD esterna
- Lo Storage Access Framework permette scaricamenti su una scheda SD esterna.
+ Lo Storage Access Framework consente di scaricare su una scheda SD esterna.
\nNota: alcuni dispositivi non sono compatibili
Elimina posizioni di riproduzione
Elimina tutte le posizioni di riproduzione
@@ -516,5 +516,21 @@
- %s ascoltatori
La lingua verrà cambiata al riavvio dell\'applicazione.
- Pagina predefinita
+ Contenuti in Evidenza Predefiniti
+ Durata Avanzamento e Riavvolgimento Rapidi
+ Istanze PeerTube
+ Imposta le tue istanze PeerTube preferite
+ Trova le istanze più adatte a te su https://joinpeertube.org/instances#instances-list
+ Aggiungi Istanza
+ Inserisci URL Istanza
+ Impossibile convalidare l\'istanza
+ Sono supportati solo gli URL HTTPS
+ L\'istanza esiste già
+ Locale
+ Aggiunti di Recente
+ Più Piaciuti
+ Generato Automaticamente (nessun uploader trovato)
+ recupero
+ Impossibile recuperare questo download
+ Scegli un\'Istanza
\ No newline at end of file
From b9de3c202a14cfa5354c390fdb6773bd931835bf Mon Sep 17 00:00:00 2001
From: ButterflyOfFire
Date: Sun, 29 Dec 2019 18:20:44 +0000
Subject: [PATCH 0060/1194] Translated using Weblate (Arabic)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-ar/strings.xml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index e42f1d7b4..e496cdc53 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -541,19 +541,19 @@
- مستمعين
تسريع إلى الأمام/-ترجيع وقت البحث
- نموذج بيرتوب
- تعيين حالات بيرتوب المفضلة لديك
- ابحث عن النموذج التي يناسبك على https://joinpeertube.org/instances#instances-list
- إضافة نموذج
- أدخل رابط نموذج
- فشل في التحقق من النموذج
+ مثيلات خوادم پيرتيوب
+ عيّن مثيلات خوادم پيرتيوب التي تُفضّلها
+ ابحث عن مثيلات الخوادم التي تناسبك على https://joinpeertube.org/instances#instances-list
+ إضافة مثيل خادم
+ أدخل رابط مثيل الخادم
+ فشل في التحقق من مثيل الخادم
فقط عناوين https المدعومة
- نموذج موجود بالفعل
+ مثيل الخادم موجود بالفعل
محلي
أضيف مؤخرا
الأكثر إعجابا
تم إنشاؤه-تلقائيًا (لم يتم العثور على برنامج تحميل)
استرد
لا يمكن استرداد هذا التنزيل
- اختيار نموذج
+ اختيار مثيل خادم
\ No newline at end of file
From 867f633d16bf2c73191c343688c609a24dd5ae32 Mon Sep 17 00:00:00 2001
From: ButterflyOfFire
Date: Mon, 30 Dec 2019 11:18:16 +0000
Subject: [PATCH 0061/1194] Translated using Weblate (French)
Currently translated at 99.4% (519 of 522 strings)
---
app/src/main/res/values-fr/strings.xml | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index aecf113d1..c8e238487 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -517,4 +517,19 @@
- %s auditeurs
La langue changera lors du redémarrage de l\'application.
+ Avance/rembobinage rapide sur une durée
+ Instances PeerTube
+ Définissez vos instances peertube préférées
+ Cherchez des instances qui pourraient vous intéresser sur https://joinpeertube.org/instances#instances-list
+ Ajouter une instance
+ Entrez l’URL de l’instance
+ Échec de validation de l’instance
+ Sont prises en charge uniquement les URLs en https
+ L’instance existe déjà
+ Local
+ Ajoutées récemment
+ Les plus aimées
+ récupération
+ Impossible de récupérer ce téléchargement
+ Choisissez une instance
\ No newline at end of file
From 2227a7a6bd999da82ffd7d2413ea267d8884d92d Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Sun, 29 Dec 2019 21:55:36 +0000
Subject: [PATCH 0062/1194] Translated using Weblate (Kurdish)
Currently translated at 99.8% (521 of 522 strings)
---
app/src/main/res/values-ku/strings.xml | 248 ++++++++++++++-----------
1 file changed, 141 insertions(+), 107 deletions(-)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index f1917a36d..9fad2cf88 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -3,50 +3,51 @@
گرته له گهڕان بكه بۆ دهستپێكردن
%1$s بینراو
بڵاوكراوهتهوه له %1$s
- هیچ كارپێكهرێكی ڤیدیۆیی نهدۆزرایهوه، دهتهوێت VLC داگریت؟
- هیچ كارپێكهرێكی ڤیدیۆییت نییه دهتوانیت VLC داگریت بۆ لێدان
- داگرتن
+ هیچ كارپێكهرێكی ڤیدیۆیی نهدۆزرایهوه. دهتهوێت VLC داگریت؟
+ هیچ کارپێکەرێکی ڤیدیۆ نەدۆزرایەوە (دەتوانی کارپێکەری VLC دامەزرێنی) .
+ دامەزراندن
پاشگهزبوونهوه
كردنهوه له وێبگهر
- كردنهوه له پهنجهرهی بچووك
+ كردنهوه له پهنجهرهی بچووک
هاوبهشپێكردن
داگرتن
- .داگرتنی پهڕگه
+ داگرتنی فایلی پەخش
گهڕان
ڕێكخستنهكان
- مهبهستت ئهمهیه: %1$s
+ مەبەستت ئەمەیە:
+\n%1$s\?
"هاوبهشپێكردن لهگهڵ "
ههڵبژاردنی وێبگهر
- سوڕان
+ لاربوونەوە
بهكارهێنانی كارپێكهری ڤیدیۆی دهرهكی
- ههنێ له قهبارهكان دهنگیان تێدا نابێت لهحاڵهتی كارا كردنی ئهم بژاردهیه
+ ههنێ له قهبارهكان دهنگیان تێدا نابێت
بهكارهێنانی كارپێكهری دهنگی دهرهكی
- پهنجهرهی بچووك
+ پهنجهرهی بچووکی NewPipe
بهشداربوون
بهشداربوویت
- بهشدارنابیت له كهناڵ
+ بهشداریت نەما له كهناڵ
ناتوانیت گۆڕانكاری لهم بهشدارییهدا بكهیت
ناتوانرێت بهشداریكردنهكه نوێبكرێتهوه
پیشاندانی زانیاری
سهرهكی
بهشدارییهكان
- نیشانكردنهكان
+ لیستی کارپێکردنەکان نیشانەکران
چی نوێ ههیه
- لهپشتهوه
- پهنجهره
- ناردن بۆ
- شوێنی داگرتنی ڤیدیۆ
- شوێنی ڤیدیۆ داگیراوهكان
- نوسینی شوێنی داگرتنی ڤیدیۆكان
- شوێنی داگرتنی دهنگ
- شوێنی دهنگه داگیراوهكان
- نوسینی شوێنی داگرتنی دهنگهكان
+ لە پاشبنەما
+ پهنجهرهی بچووک
+ زیادکردن بۆ
+ فۆڵدەری داگرتنی ڤیدیۆ
+ ڤیدیۆ داگیراوەکان لێرەدا هەڵدەگیرێن
+ فۆڵدەری داگرتن بۆ ڤیدیۆکان هەڵبژێرە
+ فۆڵدەری داگرتنی دهنگ
+ دەنگە داگیراوەکان لێرەدا هەڵدەگیرێن
+ فۆڵدەری داگرتنی دەنگەکان هەڵبژێرە
كاركردنی خۆكارانه
- قهبارهی سهرهكی
- قهبارهی سهرهكی پهنجهره
+ قهبارهی بنەڕەتی
+ قهبارهی بنەڕەتی پهنجهرهی بچووک
پیشاندانی قهبارهی بهرزتر
- چهند مۆبایلێك پشتگیری له قهبارهی 2K/4K دهكهن
- كاركردن به Kodi
+ تەنها چەند مۆبایلێک پشتگیری کارپێکردنی ڤیدیۆی 2K/4K دەکەن
+ كارپێكردن به Kodi
نهرمهواڵا نهدۆزرایهوه. دابمهزرێت؟
پیشاندانی بژاردهی “كاركردن به Kodi”
پیشاندانی بژاردهی كارپێكردنی ڤیدیۆ به Kodi
@@ -63,7 +64,7 @@
ناچالاكی بكه بۆ ڕاگرتنی وێنۆچكهكان له باركردن و پاشهكهوتبوون لهسهر بیرگهی ئامێرهكهت.
\nگۆڕینی ئهمه دهبێته هۆی سڕینهوهیان لهسهر بیرگهی مۆبایلهكهت.
پاشماوهی وێنۆچكهكان سڕایهوه
- ڤیدیۆ لێبدرێ کاتێ NewPipe لە ئەپێکیتر کرایەوە
+ ڤیدیۆ کارپێبکرێ کاتێ NewPipe لە ئەپێکیتر کرایەوە
بەکارهێنانی بەدواگەڕانی ناتەواوی خێرا
خاوێنکردنەوەی پاشماوەی داتا
سڕینەوەی پاشماوەی هەموو داتاکان
@@ -153,7 +154,7 @@
سکاڵا
زانیاری:
چی ڕوویدا:
- "لێدوانەکەت (بە ئینگلیزی):"
+ لێدوانەکەت (بە ئینگلیزی):
وردەکارییەکان:
وێنۆچکەی پیشاندانی ڤیدیۆ
ماوەی لێدانی ڤیدیۆ:
@@ -223,7 +224,7 @@
دەربارەی ئەپ
ڕێکخستنەکان
دەربارە
- © %1$s by %2$s under %3$s
+ © %1$s لەلایەن %2$s لەژێر %3$s
ناتوانرێ مۆڵەت باربکرێ
کردنەوەی وێبسایت
دەربارە
@@ -398,7 +399,7 @@
- %s گوێی لێدەگرێ
- %s گوێی لێدەگرن
-
+ داواکردنی ناتەواو وا لە کارپێکەرەکە دەکات زۆر بەخێرایی شوێنەکان بگۆڕێت لەگەڵ وردییەکی داشکێنراو
پاشکۆی خۆکاری پەخشێکی بەستراوە لەکاتی کارپێکردنی کۆتا پەخشدا
کۆگای گەڕانی داواکاری نێوخۆیی
گێڕانەوە لەدۆخی سەرنج
@@ -409,89 +410,90 @@
ناتوانرێ واژووی بەستەری ڤیدیۆ بخوێنرێتەوە
نەگێڕانەوەی کارپێکەر بۆ پێش کێشە ڕوویدا
گێڕانەوەی کارپێکەر بۆکاتی پێش کێشە
-
-
-
-
+ هەمان فۆڵدەر بوونی نییە
+ هەمان فایل بوونی نییە
+ چی:\\nداواکراو:\\nناوەڕۆک:\\nلانگ:\\nخزمەتگوزاری:\\nGMT:\\nکات:\\nپاکێج:\\nوەشان:\\nوەشانی سیستەم:
+ |(تاقیکاری) داگرتنی خێرا بەبەکارهێنانی Tor بۆ زیادکردنی تایبەتێتی (پشتگیری پەخشە ڕاستەوخۆکان ناکات) .
بەستەر هەڵەیە یاخوود بەئینتەرنێتەوە پەیوەست نەبوویت
هێما ڕێگەپێدراوەکان لە فایلێکی ناویدا
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ هێما نادروستەکان بەم بەهایە جێگۆڕکێ دەکرێن
+ هێمای جێگۆڕین
+ مۆڵەتنامەی ئەپ
+ ئەپێکی خۆڕایی و کێشی کەم بۆ پەخشی ڕاستەوخۆ لەسەر ئەندرۆید.
+ مۆڵەتنامەی NewPipe
+ پەڕە بەتاڵە
+ پەڕەی کیۆسک
+ پەڕەی بەشدارییەکان
+ پەڕەی نوێترینەکان
+ پەڕەی کەناڵەکان
+ هەڵبژاردنی کەناڵ
+ هیچ کەناڵێکی بەشداری نییە
+ هەڵبژاردنی کیۆسک
+ خەزنکرا
+ هێنرایەوە
+ فایلی ZIP دروست نییە
+ ئاگاداربە: ناتوانرێ هەمان فایلەکان بهێنرێنەوە.
+ ئەمە لەسەر ڕێکخستنەکانی ئێستات جێگیردەبێت.
+ کیۆسک
+ پڕبینەرەکان
+ باشترین 50
+ نوێ & چالاک
+ کارپێکەری پاشبنەما
+ داگرە تا ڕیزنەکران
+ ڕیزنەبوون لە پاشبنەما
+ ڕیزنەبوون لە پەنجەرەی بچووک
+ کردنەوەی پلیکانە
+ داخستنی پلیکانە
+ چاودێری دزەکردنی بیرگە ڕەنگە ببێتە هۆی وەڵامنەدانەوەی لەکاتی گەرمبوون
+ کرداری ’کردنەوە’ی پێشنیارکراو
+ کرداری بنەڕەتی لەکاتی کردنەوەی بابەت — %s
+ ئایا دەتەوێت ڕێکخستنەکانیش بهێنرێنەوە؟
+ بۆ جێبەجێکردنی فرمانەکان لەگەڵ یاسای پاراستنی داتای گشتی ئەوروپیدا (GDPR) , ئێمە سەرنجت ڕادەکێشین بۆ سیاسەتە تایبەتییەکانی ئەپەکەمان. تکایە بەئاگادارییەوە بیخوێنەوە.
+\nپێویستە قبوڵی بکەیت بۆ ناردنی سکاڵاکانت.
+ قبوڵکردن
+ ڕەتکردنەوە
+ بێ سنوور
+ سنووری قەبارە لەکاتی بەکارهێنانی داتای مۆبایل
+ بچوکبوونەوە لەکاتی گۆڕینی ئەپ
+ کرداری کاتی گۆڕین بۆ ئەپێکیتر لە کارپێکەری ڤیدیۆییەوە — %s
+ هیچیان
+ بچوککردنەوە بۆ کارپێکەری پاشبنەما
+ بچووککردنەوە بۆ پەنجەرەی بچووک
+ بردنەپێشەوەی خێرا لەکاتی بێدەنگکردن
+ هەنگاو
+ ڕێکخستنەوە
پەڕە بنەڕەتییەکان بەکاردەبردرێن, ناتوانرێ پەڕە پاشەکەوتکراوەکان بخوێنرێنەوە
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ چ پەڕەیەک نیشانبدرێ لە پەڕەی سەرەکی
+ هەڵبژاردن
+ نوێکارییەکان
+ پیشاندانی ئاگانامەیەک بۆ ئامادەبوونی ئەپ لەکاتی بەردەست بوونی وەشانی نوێ
+ لیستی شێوازی بینین
+ لیست
+ چوار خانە
+ خۆکار
+ گۆڕینی شێواز
+ وەشانی نوێی ئەپ بەردەستە!
+ گرتەبکە بۆ داگرتن
+ تەواوبوو
+ لە چاوەڕوانیدایە
+ ڕاگیراوە
+ لەڕیزدایە
+ چارەسەردەکرێت
+ لە ڕیز
+ کردار ڕەتکرایەوە لەلایەن سیستەمەوە
+ داگرتن شکستی هێنا
+ داگرتن تەواوبوو
+ %s داگرتن تەواوبوون
+ دانانی ناوی نوێ
+ جێگیرکردن
+ کۆنفرانسەکان
+ ناتوانرێ لێدوانەکان باربکرێ
پیشاندانی نیشانەکەری شوێنی کارپێکراو لە لیستەکان
-
-
-
-
-
+ فایلێک بەهەمان ناو هەیە
+ فایلێکی داگیراو بەم ناوەوە هەیە
+ ناتوانرێ لەسەر ئەو فایلە جێگیربکرێ
+ زمان دەگۆڕدرێ لەدوای داخستن و پاشان کردنەوەی ئەپ.
+ کیۆسکی بنەڕەتی
خێرا بردنە پێشەوە\\ گێڕانەوە بۆکاتی سەرەتا
دۆخی PeerTube
ئارەزوومەندییەکانی دۆخی PeerTube ڕێکبخە
@@ -501,4 +503,36 @@
ناتوانرێ پشتگیری دۆخەکە بکرێ
تەنها بەستەرەکانی https پشتگیریکراون
هەمان دۆخ کاراکراوە
+ نەدۆزرایەوە
+ چارەسەرکردن شکستی هێنا
+ سڕینەوەی داگرتنە تەواوبووەکان
+ ڕاوەستان
+ زیاترین هەوڵدانەکان
+ زۆرترین ژمارەی هەوڵدان پێش پاشگەزبوونەوە لە داگرتنەکە
+ ڕاوەستا لەسەر کێشەی هێڵ
+ بەسوودە بۆ کاتی گۆڕینی هێڵ بۆ داتای مۆبایل, لەگەڵ ئەوەشدا زۆربەی داگرتنەکان ڕاناگرێت
+ داخستن
+ NewPipe داخرا لەکاتی کارکردن لەسەر ئەو فایلە
+ بیرگەی ناوەکیت پڕبووە
+ کردارەکە شکستی هێنا, چونکە ئەو فایلە سڕاوەتەوە
+ هێڵی ئینتەرنێت نەما
+ ئایا دڵنیای؟
+ سنوری ڕیزبوونی داگرتنەکان
+ تەنها یەک داگرتن کاردەکات لەیەک کاتدا
+ دەستپێکردنەوەی داگرتنەکان
+ ڕاگرتنی داگرتنەکان
+ پرسیاربکرێ لەکوێ دابگیرێ
+ پرسیارت لێ دەکرێت بۆ شوێنی داگرتنی هەر فایلێک
+ پرسیارت لێ دەکرێت بۆ شوێنی داگرتنی هەر فایلێک
+\nدەتوانیت SAF بەکاربهێنیت گەر دەتەوێ لە بیرگەی دەرەکیدا فایلەکان دابگریت
+ بەکارهێنانی SAF
+ چوارچێوەی گەیشتن بە بیرگە ڕێگەدەدات بە داگرتنی فایلەکان لە بیرگەی دەرەکیدا.
+\nتێبینی: هەندێ لە مۆبایلەکان پشتگیری ناکرێن
+ ناوخۆ
+ لەم ماوەیەدا بڵاوکرابێتەوە
+ زۆرترین بەدڵبوون
+ خۆکاری دانرا (هیچ بەرزکەرەوەیەک نەدۆزرایەوە)
+ دەگەڕێنرێتەوە
+ ناتوانرێ ئەم داگرتنە بهێنرێتەوە
+ دۆزێک هەڵبژێرە
\ No newline at end of file
From 87e29dbd840aaf2ecf1017f7bf72da28d5f1c141 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Mon, 30 Dec 2019 06:26:28 +0000
Subject: [PATCH 0063/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index cc0dbe639..9713e4665 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -513,4 +513,20 @@
語言將會在重新啟動應用程式後變更。
+ 快轉/快退搜尋持續時間
+ PeerTube 站臺
+ 設定您最愛的 PeerTube 站臺
+ 在 https://joinpeertube.org/instances#instances-list 上找到最適合您的站臺
+ 新增站臺
+ 輸入站臺 URL
+ 驗證站臺失敗
+ 僅支援 https URL
+ 站臺已存在
+ 本機
+ 最近新增
+ 最喜歡
+ 自動生成(未找到上傳者)
+ 正在恢復
+ 無法復原此下載
+ 選擇一個站臺
\ No newline at end of file
From d063d39dbc2e07c8c03149f45ece54a2ca302f3b Mon Sep 17 00:00:00 2001
From: chr56
Date: Tue, 31 Dec 2019 16:02:47 +0000
Subject: [PATCH 0064/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 98.7% (515 of 522 strings)
---
.../main/res/values-b+zh+HANS+CN/strings.xml | 21 ++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index 8714c6aca..f4c199e9e 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -39,7 +39,7 @@
网络错误
- 视频
-
+
禁用
背景
@@ -160,7 +160,7 @@
使用第三方视频播放器
使用第三方视频播放器
音频下载文件夹
- 从其他应用打开 NewPipe 时就播放视频
+ 从其他应用调用 NewPipe 时播放视频
默认分辨率
找不到Kore。是否安装?
显示“用Kodi播放”选项
@@ -507,7 +507,7 @@
无人在线观看
- %s 人在观看
-
+
没人在听
@@ -515,4 +515,19 @@
重新启动应用后,语言将更改。
+ PeerTube 服务器
+ 设置自己喜欢的peertube服务器
+ 查找最适合你的服务器https://joinpeertube.org/instances#instances-list
+ 添加服务器
+ 输入服务器网址
+ 无法验证服务器
+ 仅支持 https URL
+ 该服务器已存在
+ 本地
+ 最近添加
+ 最喜欢的
+ 自动生成的(未找到上传者)
+ 正在恢复
+ 无法恢复此下载
+ 选择一个服务器
\ No newline at end of file
From 22a9a06b875d1640f91ba7c15d8f5ed0a17a1cc2 Mon Sep 17 00:00:00 2001
From: Ariel Shulman
Date: Wed, 1 Jan 2020 08:24:52 +0000
Subject: [PATCH 0065/1194] Translated using Weblate (Hebrew)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-he/strings.xml | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 9eaedb71e..3e5f1aa8b 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -111,8 +111,8 @@
היסטוריית צפייה
תיעוד הסרטונים שנצפו
להמשיך את הניגון עם החזרת המיקוד
- להמשיך לנגן לאחר הפרעות (למשל: שיחות טלפון)
- להציג את העצה „להחזיק כדי להוסיף לרשימת נגינה”
+ המשך לנגן לאחר הפרעות (למשל: שיחות טלפון)
+ הצג את העצה „החזק כדי להוסיף לרשימת נגינה”
להציג עצה בעת לחיצה על כפתור בנגן רקע או צף בעמוד פרטי סרטון
נגן
התנהגות
@@ -122,7 +122,7 @@
רשימת נגינה
רזולוציה מיטבית
ביטול
- לנגן הכול
+ נגן הכול
התראה מ־NewPipe
התראות עבור נגן הרקע והנגן הצף של NewPipe
[לא ידוע]
@@ -249,12 +249,12 @@
הסרה
פרטים
אפשרויות שמע
- להחזיק כדי להוסיף לרשימת נגינה
- להוסיף לרשימת הנגינה ברקע
+ החזק כדי להוסיף לרשימת נגינה
+ הוסף לרשימת הנגינה ברקע
הוספה לתור בנגן צף חדש
- להתחיל לנגן מכאן
- להתחיל לנגן ברקע
- להתחיל לנגן בחלון צף חדש
+ התחל לנגן מכאן
+ התחל לנגן ברקע
+ התחל לנגן בחלון צף חדש
הורדת קובץ הזרמה
הצגת מידע
רשימות נגינה מסומנות
@@ -338,7 +338,7 @@
כיבוי האפשרות מונע את טעינת התמונות הממוזערות, חוסך בתקשורת נתונים ובניצולת הזיכרון. שינויים באפשרות זו מוחקים את המטמון בזיכרון ובכונן.
הסרת כל נתוני העמודים שבמטמון
הוספת התזרים הבא לרשימת הנגינה אוטומטית
- להוסיף אוטומטית תזרים דומה בעת נגינת התזרים האחרון בתור שאינו מחזורי
+ הוסף אוטומטית תזרים דומה בעת נגינת התזרים האחרון בתור שאינו מחזורי
החלפת כיווניות
העברה לראשי
משכתב את ההיסטוריה והמינויים הנוכחיים שלך
@@ -393,7 +393,7 @@
מזעור בעת מעבר בין יישומונים
הפעולה לביצוע בעת מעבר ליישומון אחר מנגן הווידאו הראשי — %s
כלום
- מזעור לנגן הרקע
+ מזער לנגן הרקע
הקטנה לנגן צף
ביטול מינוי
לשונית חדשה
@@ -490,7 +490,7 @@
מיקומי הנגינה נמחקו.
הקובץ הועבר או נמחק
כבר קיים קובץ בשם הזה
- לא ניתן לשכתב על הקובץ
+ לא ניתן לשכתב את הקובץ
כבר יש הורדה ממתינה בשם הזה
NewPipe נסגר בזמן העבודה על הקובץ
לא נשאר מקום במכשיר
From cc17d268fce0fea2028b7d7d5a91d1d357c4776b Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Wed, 1 Jan 2020 12:26:09 +0000
Subject: [PATCH 0066/1194] Translated using Weblate (Hebrew)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-he/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 3e5f1aa8b..1b7444e1e 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -254,7 +254,7 @@
הוספה לתור בנגן צף חדש
התחל לנגן מכאן
התחל לנגן ברקע
- התחל לנגן בחלון צף חדש
+ להתחיל כאן בנגן הצף
הורדת קובץ הזרמה
הצגת מידע
רשימות נגינה מסומנות
From a29df9a2dd374a39c46b8ad70be4a5f688862f89 Mon Sep 17 00:00:00 2001
From: Software In Interlingua
Date: Tue, 31 Dec 2019 18:02:37 +0000
Subject: [PATCH 0067/1194] Translated using Weblate (Interlingua)
Currently translated at 9.4% (49 of 522 strings)
---
app/src/main/res/values-ia/strings.xml | 27 +++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml
index a6b3daec9..1d053a370 100644
--- a/app/src/main/res/values-ia/strings.xml
+++ b/app/src/main/res/values-ia/strings.xml
@@ -1,2 +1,27 @@
-
\ No newline at end of file
+
+ Installar
+ Aperir in le navigator
+ Compartir
+ Discargar
+ Cercar
+ Configurationes
+ Compartir con
+ Seliger un navigator
+ Subscribite
+ Cancellar le subscription
+ Non poteva cambiar le subscription
+ Non poteva actualisar le subscription
+ Monstrar information
+ Principal
+ Subscriptiones
+ Nove scheda
+ Seliger le scheda
+ Novitates
+ Fundo
+ Emergente
+ Adder a
+ Dossier de discarga de video
+ Selige le dossier de discarga pro files de video
+ Dossier de discarga de audio
+
\ No newline at end of file
From a3dc95bef1ee497e06daa1ad8633efe53bc3a6d9 Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Wed, 1 Jan 2020 10:09:09 +0000
Subject: [PATCH 0068/1194] Translated using Weblate (Kurdish)
Currently translated at 99.8% (521 of 522 strings)
---
app/src/main/res/values-ku/strings.xml | 50 +++++++++++++-------------
1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 9fad2cf88..da2c3aa21 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -48,17 +48,17 @@
پیشاندانی قهبارهی بهرزتر
تەنها چەند مۆبایلێک پشتگیری کارپێکردنی ڤیدیۆی 2K/4K دەکەن
كارپێكردن به Kodi
- نهرمهواڵا نهدۆزرایهوه. دابمهزرێت؟
- پیشاندانی بژاردهی “كاركردن به Kodi”
+ ئەپەکە نهدۆزرایهوه. دابمهزرێت؟
+ بژاردەی ”کارپێکردن بە Kodi“ پیشانبدرێت
پیشاندانی بژاردهی كارپێكردنی ڤیدیۆ به Kodi
دهنگ
- جۆری سهرهكی دهنگ
- جۆری سهرهكی ڤیدیۆ
+ جۆری بنەڕەتی دهنگ
+ جۆری بنەڕەتی ڤیدیۆ
ڕووكار
- ڕووناك
- تاریك
+ سپی
+ تاریک
ڕهش
- بیرهاتنهوهی شوێن و قهبارهی پهنجهره
+ بیرهاتنهوهی شوێن و قهبارهی پهنجهرهی بچووک
بیرهاتنهوهی كۆتا قهباره و شوێنی پهنجهرهی بچووك
باركردنی وێنۆچكهكان
ناچالاكی بكه بۆ ڕاگرتنی وێنۆچكهكان له باركردن و پاشهكهوتبوون لهسهر بیرگهی ئامێرهكهت.
@@ -69,32 +69,32 @@
خاوێنکردنەوەی پاشماوەی داتا
سڕینەوەی پاشماوەی هەموو داتاکان
پاشماوەی داتاکان سڕانەوە
- ڕیزکردنی خۆکاری لێدانی دواتر
- کۆنتڕۆڵی لێدەر بەجوڵەی پەنجە
+ ڕیزکردنی خۆکاری کارپێکردنی دواتر
+ کۆنتڕۆڵی کارپێکەر بەجوڵەی پەنجە
جوڵەی پەنجەت لەسەر ڕونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ و ڕووناکی
- گەڕان بەنێو پێشنیارکراوەکان
+ گەڕانی پێشنیارکراوەکان
پیشاندانی پێشنیارەکان لەکاتی گەڕان
مێژووی گەڕان
مێژووی تەماشاکردن
- هێشتنەوەی تراکی ڤیدیۆ لێدراوەکان
- بەردەوام بوونی ڤیدیۆ لەدوای هەبوونی هەر بڕینێک (وەک پەیوەندیکردن)
+ هێشتنەوەی تراکی ڤیدیۆ کارپێکراوەکان
+ بەردەوام بوونی ڤیدیۆ لەدوای هەبوونی هەر بڕینێک (وەک پەیوەندی تەلەفۆنی)
داگرتن
دواتر
- پیشاندانی دواتر و ڤیدیۆ هاوشێوەکان
+ پیشاندانی ’دواتر’ و ڤیدیۆ ’هاوشێوەکان’
بەستەرەکە پشتگیری نەکراوە
- وڵاتی سەرەکی
+ وڵاتی بنەڕەتی
خزمەتگوزاری
- لێدەری ڤیدیۆیی
+ کارپێکەری ڤیدیۆ
ڤیدیۆ & دەنگ
مێژوو & پاشماوە
پەنجەرەی بچووک
ڕووکار
هیتر
ڕاستکردنەوە
- لێدان لە پاشبنەما
- لێدان لە پەنجەرەی بچووک
- ڕیزکرا لە لێدان لە پاشبنەما
- ڕیزکرا لە لێدان لە پەنجەرەی بچووک
+ کارپێکردن لە پاشبنەما
+ کارپێکردن لە پەنجەرەی بچووک
+ ڕیزکرا لە کارپێکردن لە پاشبنەما
+ ڕیزکرا لە کارپێکردن لە پەنجەرەی بچووک
لێدان
ناوەڕۆک
سنوردانانی تەمەن
@@ -345,7 +345,7 @@
جوڵەی پەنجەت لەسەر ڕونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ
کۆنترۆڵی ڕووناکی بەجوڵەی پەنجە
جوڵەی پەنجەت لەسەر ڕونما بەکاربهێنە بۆ گۆڕینی ئاستی ڕووناکی ڕونما
- زمانی سەرەکی
+ زمانی بنەڕەتی ئەپ
نوێکارییەکان
فایل سڕایەوە
ئاگانامەی نوێکاری ئەپ
@@ -369,15 +369,15 @@
ئەم ڕاژەیە ناتوانێ چەندین داگرتن لەیەک کاتدا بکات
ڕووداوەکان
پیشاندانی لێدوانەکان
- ناچالاککردنی وەستان بۆ پیشاندانی لێدوانەکان
- لێدانی خۆکاری
+ ناچالاککردن بۆ پیشان نەدانی لێدوانەکان
+ کارپێکردنی خۆکاری
- لێدوانەکان
هیچ لێدوانێک نییە
- لێدانەوەی لیست
- لێدانەوەی لیست لە شوێنی پێشووتر
+ کارپێکردنەوەی لیست
+ گێڕانەوەی لیست بۆ شوێنی پێشووتر
شوێنەکان لە لیستدا
سڕینەوەی داتا
مێژوو سڕایەوە.
@@ -401,7 +401,7 @@
داواکردنی ناتەواو وا لە کارپێکەرەکە دەکات زۆر بەخێرایی شوێنەکان بگۆڕێت لەگەڵ وردییەکی داشکێنراو
پاشکۆی خۆکاری پەخشێکی بەستراوە لەکاتی کارپێکردنی کۆتا پەخشدا
- کۆگای گەڕانی داواکاری نێوخۆیی
+ کۆگای گەڕانی نێوخۆیی
گێڕانەوە لەدۆخی سەرنج
پیشاندانی ڕێنمایی ”داگرتن تا پاشکۆ”
پیشاندانی ڕێنمایی کاتێ لە پاشبنەما یاخوود پەنجەرەی بچووکدا گرتە دەکرێ لەسەر وردەکاری ڤیدیۆیەک
From a8e26238a8febfc01302ae4a9ac3e99d42a4b665 Mon Sep 17 00:00:00 2001
From: Matsuri
Date: Wed, 1 Jan 2020 03:28:15 +0000
Subject: [PATCH 0069/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 98.7% (515 of 522 strings)
---
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index f4c199e9e..e246d54eb 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -180,7 +180,7 @@
错误报告
错误
无法加载所有缩略图
- 无法解密视频 URL 的签名
+ 无法解密视频的 URL 签名
无法解析网址
无法完全解析网址
内容不可用
@@ -483,7 +483,7 @@
命名冲突,已存在具有此名称文件
无法覆盖文件
有此名称的已暂停下载
- 处理文件时,NewPipe 已关闭
+ NewPipe 在处理文件时被关闭
设备上没有剩余储存空间
进度丢失,文件已被删除
连接超时
@@ -511,8 +511,8 @@
没人在听
- - %s个听众
-
+ - %s 人在听
+
重新启动应用后,语言将更改。
PeerTube 服务器
@@ -530,4 +530,5 @@
正在恢复
无法恢复此下载
选择一个服务器
+ 快进 / 快退的单位时间
\ No newline at end of file
From ee65e892300d6aa7391239215871dbc27adf0b1f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Matuszewski?=
Date: Wed, 30 Oct 2019 23:17:09 +0100
Subject: [PATCH 0070/1194] limit amount of notification thumbnail updates
limits amount of calls to updateNotificationThumbnail in background player
---
.../org/schabi/newpipe/player/BackgroundPlayer.java | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index ab07ded22..90af3c29f 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -95,6 +95,9 @@ public final class BackgroundPlayer extends Service {
private boolean shouldUpdateOnProgress;
+ private static final int NOTIFICATION_UPDATES_BEFORE_RESET = 60;
+ private int timesNotificationUpdated;
+
/*//////////////////////////////////////////////////////////////////////////
// Service's LifeCycle
//////////////////////////////////////////////////////////////////////////*/
@@ -180,6 +183,7 @@ public final class BackgroundPlayer extends Service {
private void resetNotification() {
notBuilder = createNotification();
+ timesNotificationUpdated = 0;
}
private NotificationCompat.Builder createNotification() {
@@ -252,6 +256,7 @@ public final class BackgroundPlayer extends Service {
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
}
notificationManager.notify(NOTIFICATION_ID, notBuilder.build());
+ timesNotificationUpdated++;
}
/*//////////////////////////////////////////////////////////////////////////
@@ -351,8 +356,10 @@ public final class BackgroundPlayer extends Service {
updateProgress(currentProgress, duration, bufferPercent);
if (!shouldUpdateOnProgress) return;
- resetNotification();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/) updateNotificationThumbnail();
+ if (timesNotificationUpdated > NOTIFICATION_UPDATES_BEFORE_RESET) {
+ resetNotification();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/) updateNotificationThumbnail();
+ }
if (bigNotRemoteView != null) {
if(cachedDuration != duration) {
cachedDuration = duration;
From 8e1d7f162d4360e4d789796d9e288f557a969106 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Wed, 1 Jan 2020 18:08:43 +0000
Subject: [PATCH 0071/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-ru/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index ef233baee..5230f00a2 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -265,7 +265,7 @@
Неверная ссылка
Видеопотоки не найдены
Аудиопотоки не найдены
- Пожертвовать
+ Пожертвование
Разработчики NewPipe ценой своего свободного времени делают вашу жизнь чуть удобнее. Отплатите им тем же — наслаждаясь чашечкой кофе, они смогут сделать NewPipe ещё круче.
Воздать должное
Веб-сайт
From f04d2e76fa4cf2c81593b0cc52a04a2c3388a4a6 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Wed, 1 Jan 2020 12:26:52 +0000
Subject: [PATCH 0072/1194] Translated using Weblate (Hebrew)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-he/strings.xml | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 1b7444e1e..f98fb7b3e 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -111,8 +111,8 @@
היסטוריית צפייה
תיעוד הסרטונים שנצפו
להמשיך את הניגון עם החזרת המיקוד
- המשך לנגן לאחר הפרעות (למשל: שיחות טלפון)
- הצג את העצה „החזק כדי להוסיף לרשימת נגינה”
+ להמשיך לנגן לאחר הפרעות (למשל: שיחות טלפון)
+ להציג את העצה „להחזיק כדי להוסיף לרשימת נגינה”
להציג עצה בעת לחיצה על כפתור בנגן רקע או צף בעמוד פרטי סרטון
נגן
התנהגות
@@ -122,7 +122,7 @@
רשימת נגינה
רזולוציה מיטבית
ביטול
- נגן הכול
+ לנגן הכול
התראה מ־NewPipe
התראות עבור נגן הרקע והנגן הצף של NewPipe
[לא ידוע]
@@ -249,12 +249,12 @@
הסרה
פרטים
אפשרויות שמע
- החזק כדי להוסיף לרשימת נגינה
- הוסף לרשימת הנגינה ברקע
+ להחזיק כדי להוסיף לרשימת נגינה
+ להוסיף לרשימת הנגינה ברקע
הוספה לתור בנגן צף חדש
- התחל לנגן מכאן
- התחל לנגן ברקע
- להתחיל כאן בנגן הצף
+ להתחיל לנגן מכאן
+ להתחיל לנגן ברקע
+ להתחיל לנגן בנגן צף חדש
הורדת קובץ הזרמה
הצגת מידע
רשימות נגינה מסומנות
@@ -338,7 +338,7 @@
כיבוי האפשרות מונע את טעינת התמונות הממוזערות, חוסך בתקשורת נתונים ובניצולת הזיכרון. שינויים באפשרות זו מוחקים את המטמון בזיכרון ובכונן.
הסרת כל נתוני העמודים שבמטמון
הוספת התזרים הבא לרשימת הנגינה אוטומטית
- הוסף אוטומטית תזרים דומה בעת נגינת התזרים האחרון בתור שאינו מחזורי
+ להוסיף אוטומטית תזרים דומה בעת נגינת התזרים האחרון בתור שאינו מחזורי
החלפת כיווניות
העברה לראשי
משכתב את ההיסטוריה והמינויים הנוכחיים שלך
@@ -393,7 +393,7 @@
מזעור בעת מעבר בין יישומונים
הפעולה לביצוע בעת מעבר ליישומון אחר מנגן הווידאו הראשי — %s
כלום
- מזער לנגן הרקע
+ מזעור לנגן הרקע
הקטנה לנגן צף
ביטול מינוי
לשונית חדשה
From 33caad469000f45d5ec9e8d8cf26351849222e20 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Matuszewski?=
Date: Sat, 14 Dec 2019 16:05:36 +0100
Subject: [PATCH 0073/1194] make main page tabs scrollable
---
.../newpipe/fragments/MainFragment.java | 3 +-
.../newpipe/views/ScrollableTabLayout.java | 83 +++++++++++++++++++
app/src/main/res/layout/fragment_main.xml | 3 +-
3 files changed, 87 insertions(+), 2 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index 720e0f216..88a4c9c63 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -30,6 +30,7 @@ import org.schabi.newpipe.settings.tabs.Tab;
import org.schabi.newpipe.settings.tabs.TabsManager;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ServiceHelper;
+import org.schabi.newpipe.views.ScrollableTabLayout;
import java.util.ArrayList;
import java.util.List;
@@ -37,7 +38,7 @@ import java.util.List;
public class MainFragment extends BaseFragment implements TabLayout.OnTabSelectedListener {
private ViewPager viewPager;
private SelectedTabsPagerAdapter pagerAdapter;
- private TabLayout tabLayout;
+ private ScrollableTabLayout tabLayout;
private List tabsList = new ArrayList<>();
private TabsManager tabsManager;
diff --git a/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
new file mode 100644
index 000000000..88b108052
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
@@ -0,0 +1,83 @@
+package org.schabi.newpipe.views;
+
+import android.content.Context;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
+
+import androidx.annotation.NonNull;
+
+import com.google.android.material.tabs.TabLayout;
+import com.google.android.material.tabs.TabLayout.Tab;
+
+/**
+ * A TabLayout that is scrollable when tabs exceed its width.
+ */
+public class ScrollableTabLayout extends TabLayout {
+ private static final String TAG = ScrollableTabLayout.class.getSimpleName();
+
+ public ScrollableTabLayout(Context context) {
+ super(context);
+ }
+
+ public ScrollableTabLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public ScrollableTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+
+ setTabMode(TabLayout.MODE_FIXED);
+ resetMode();
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+
+ resetMode();
+ }
+
+ @Override
+ public void addTab(@NonNull Tab tab, int position, boolean setSelected) {
+ super.addTab(tab, position, setSelected);
+
+ resetMode();
+ }
+
+ @Override
+ public void removeTabAt(int position) {
+ super.removeTabAt(position);
+
+ resetMode();
+ }
+
+ private void resetMode() {
+ if (getTabCount() == 0 || getTabAt(0).view == null) return;
+ setTabMode(TabLayout.MODE_FIXED);
+
+ int layoutWidth = getWidth();
+ int minimumWidth = ((View) getTabAt(0).view).getMinimumWidth();
+ if (minimumWidth * getTabCount() > layoutWidth) {
+ setTabMode(TabLayout.MODE_SCROLLABLE);
+ return;
+ }
+
+ int actualWidth = 0;
+ for (int i = 0; i < getTabCount(); ++i) {
+ if (getTabAt(i).view == null) return;
+ actualWidth += ((View) getTabAt(i).view).getWidth();
+ if (actualWidth > layoutWidth) {
+ setTabMode(TabLayout.MODE_SCROLLABLE);
+ return;
+ }
+ }
+ }
+}
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index 85614342d..1a2455691 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -6,12 +6,13 @@
android:layout_height="match_parent">
-
Date: Sun, 15 Dec 2019 12:41:19 +0100
Subject: [PATCH 0074/1194] hide main page tab selector with single tab
---
.../org/schabi/newpipe/views/ScrollableTabLayout.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
index 88b108052..ffbb804af 100644
--- a/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
+++ b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
@@ -14,6 +14,7 @@ import com.google.android.material.tabs.TabLayout.Tab;
/**
* A TabLayout that is scrollable when tabs exceed its width.
+ * Hides when there are less than 2 tabs.
*/
public class ScrollableTabLayout extends TabLayout {
private static final String TAG = ScrollableTabLayout.class.getSimpleName();
@@ -60,6 +61,13 @@ public class ScrollableTabLayout extends TabLayout {
}
private void resetMode() {
+ if (getTabCount() < 2) {
+ setVisibility(View.GONE);
+ return;
+ } else {
+ setVisibility(View.VISIBLE);
+ }
+
if (getTabCount() == 0 || getTabAt(0).view == null) return;
setTabMode(TabLayout.MODE_FIXED);
From b674cfec241acfa6006c3b13fb419ff23dbc2a70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Matuszewski?=
Date: Mon, 16 Dec 2019 00:11:54 +0100
Subject: [PATCH 0075/1194] simplify ScrollableTabLayout tabs width checking
---
.../newpipe/views/ScrollableTabLayout.java | 29 +++++++++----------
1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
index ffbb804af..40c021cec 100644
--- a/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
+++ b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
@@ -25,18 +25,21 @@ public class ScrollableTabLayout extends TabLayout {
public ScrollableTabLayout(Context context, AttributeSet attrs) {
super(context, attrs);
+ setTabMode(TabLayout.MODE_FIXED);
}
public ScrollableTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
+ setTabMode(TabLayout.MODE_FIXED);
}
@Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ super.onLayout(changed, l, t, r, b);
- setTabMode(TabLayout.MODE_FIXED);
- resetMode();
+ if (changed) {
+ resetMode();
+ }
}
@Override
@@ -68,21 +71,15 @@ public class ScrollableTabLayout extends TabLayout {
setVisibility(View.VISIBLE);
}
- if (getTabCount() == 0 || getTabAt(0).view == null) return;
+ int layoutWidth = getWidth();
+ if (layoutWidth == 0) return;
+
setTabMode(TabLayout.MODE_FIXED);
- int layoutWidth = getWidth();
- int minimumWidth = ((View) getTabAt(0).view).getMinimumWidth();
- if (minimumWidth * getTabCount() > layoutWidth) {
- setTabMode(TabLayout.MODE_SCROLLABLE);
- return;
- }
-
- int actualWidth = 0;
+ int tabsRequestedWidth = 0;
for (int i = 0; i < getTabCount(); ++i) {
- if (getTabAt(i).view == null) return;
- actualWidth += ((View) getTabAt(i).view).getWidth();
- if (actualWidth > layoutWidth) {
+ tabsRequestedWidth += ((View) getTabAt(i).view).getMinimumWidth();
+ if (tabsRequestedWidth > layoutWidth) {
setTabMode(TabLayout.MODE_SCROLLABLE);
return;
}
From 1393d3ad7f3f44b6dc8afeefd5696617699bc09f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Matuszewski?=
Date: Tue, 17 Dec 2019 19:59:29 +0100
Subject: [PATCH 0076/1194] fix ScrollableTabLayout content width calculation
fix bug where only minimum width requested by tab was counted even if actual content was wider
---
.../newpipe/views/ScrollableTabLayout.java | 90 +++++++++++++------
1 file changed, 65 insertions(+), 25 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
index 40c021cec..6dd6411e1 100644
--- a/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
+++ b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
@@ -5,7 +5,6 @@ import android.os.Build;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import androidx.annotation.NonNull;
@@ -19,70 +18,111 @@ import com.google.android.material.tabs.TabLayout.Tab;
public class ScrollableTabLayout extends TabLayout {
private static final String TAG = ScrollableTabLayout.class.getSimpleName();
+ private int layoutWidth = 0;
+ private int prevVisibility = View.GONE;
+
public ScrollableTabLayout(Context context) {
super(context);
}
public ScrollableTabLayout(Context context, AttributeSet attrs) {
super(context, attrs);
- setTabMode(TabLayout.MODE_FIXED);
}
public ScrollableTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- setTabMode(TabLayout.MODE_FIXED);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
- if (changed) {
- resetMode();
- }
+ remeasureTabs();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
- resetMode();
+ layoutWidth = w;
}
@Override
public void addTab(@NonNull Tab tab, int position, boolean setSelected) {
super.addTab(tab, position, setSelected);
- resetMode();
+ hasMultipleTabs();
+
+ // Adding a tab won't decrease total tabs' width so tabMode won't have to change to FIXED
+ if (getTabMode() != MODE_SCROLLABLE) {
+ remeasureTabs();
+ }
}
@Override
public void removeTabAt(int position) {
super.removeTabAt(position);
- resetMode();
+ hasMultipleTabs();
+
+ // Removing a tab won't increase total tabs' width so tabMode won't have to change to SCROLLABLE
+ if (getTabMode() != MODE_FIXED) {
+ remeasureTabs();
+ }
}
- private void resetMode() {
- if (getTabCount() < 2) {
- setVisibility(View.GONE);
- return;
- } else {
- setVisibility(View.VISIBLE);
- }
+ @Override
+ protected void onVisibilityChanged(View changedView, int visibility) {
+ super.onVisibilityChanged(changedView, visibility);
- int layoutWidth = getWidth();
+ // Recheck content width in case some tabs have been added or removed while ScrollableTabLayout was invisible
+ // We don't have to check if it was GONE because then requestLayout() will be called
+ if (changedView == this) {
+ if (prevVisibility == View.INVISIBLE) {
+ remeasureTabs();
+ }
+ prevVisibility = visibility;
+ }
+ }
+
+ private void setMode(int mode) {
+ if (mode == getTabMode()) return;
+
+ setTabMode(mode);
+ }
+
+ /**
+ * Make ScrollableTabLayout not visible if there are less than two tabs
+ */
+ private void hasMultipleTabs() {
+ if (getTabCount() > 1) {
+ setVisibility(View.VISIBLE);
+ } else {
+ setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * Calculate minimal width required by tabs and set tabMode accordingly
+ */
+ private void remeasureTabs() {
+ if (getVisibility() != View.VISIBLE) return;
if (layoutWidth == 0) return;
- setTabMode(TabLayout.MODE_FIXED);
-
- int tabsRequestedWidth = 0;
- for (int i = 0; i < getTabCount(); ++i) {
- tabsRequestedWidth += ((View) getTabAt(i).view).getMinimumWidth();
- if (tabsRequestedWidth > layoutWidth) {
- setTabMode(TabLayout.MODE_SCROLLABLE);
- return;
+ final int count = getTabCount();
+ int contentWidth = 0;
+ for (int i = 0; i < count; i++) {
+ View child = getTabAt(i).view;
+ if (child.getVisibility() == View.VISIBLE) {
+ // Use tab's minimum requested width should actual content be too small
+ contentWidth += Math.max(child.getMinimumWidth(), child.getMeasuredWidth());
}
}
+
+ if (contentWidth > layoutWidth) {
+ setMode(TabLayout.MODE_SCROLLABLE);
+ } else {
+ setMode(TabLayout.MODE_FIXED);
+ }
}
}
From 3625a38a234ebf8a92f2ac05c562c4440248b5b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Matuszewski?=
Date: Wed, 1 Jan 2020 14:12:45 +0100
Subject: [PATCH 0077/1194] improve code consistency in ScrollableTabLayout
---
.../main/java/org/schabi/newpipe/views/ScrollableTabLayout.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
index 6dd6411e1..48327220a 100644
--- a/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
+++ b/app/src/main/java/org/schabi/newpipe/views/ScrollableTabLayout.java
@@ -106,7 +106,7 @@ public class ScrollableTabLayout extends TabLayout {
* Calculate minimal width required by tabs and set tabMode accordingly
*/
private void remeasureTabs() {
- if (getVisibility() != View.VISIBLE) return;
+ if (prevVisibility != View.VISIBLE) return;
if (layoutWidth == 0) return;
final int count = getTabCount();
From f44883e79fbb3d20e45902d3cfd4c4875f86f165 Mon Sep 17 00:00:00 2001
From: k1rakishou
Date: Fri, 4 Oct 2019 21:47:01 +0300
Subject: [PATCH 0078/1194] Show video thumbnail on the lock screen
---
.../newpipe/player/BackgroundPlayer.java | 61 ++++++++++++++-----
.../player/helper/MediaSessionManager.java | 43 +++++++++++--
.../org/schabi/newpipe/util/BitmapUtils.java | 42 +++++++++++++
3 files changed, 125 insertions(+), 21 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index 90af3c29f..6486f4b03 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -25,6 +25,7 @@ import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.IBinder;
@@ -48,6 +49,7 @@ import org.schabi.newpipe.player.helper.LockManager;
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
import org.schabi.newpipe.player.resolver.AudioPlaybackResolver;
import org.schabi.newpipe.player.resolver.MediaSourceTag;
+import org.schabi.newpipe.util.BitmapUtils;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
@@ -193,18 +195,37 @@ public final class BackgroundPlayer extends Service {
setupNotification(notRemoteView);
setupNotification(bigNotRemoteView);
- NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.notification_channel_id))
- .setOngoing(true)
- .setSmallIcon(R.drawable.ic_newpipe_triangle_white)
- .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
- .setCustomContentView(notRemoteView)
- .setCustomBigContentView(bigNotRemoteView);
+ NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.notification_channel_id));
+ builder.setOngoing(true);
+ builder.setSmallIcon(R.drawable.ic_newpipe_triangle_white);
+ builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
+ builder.setCustomContentView(notRemoteView);
+ builder.setCustomBigContentView(bigNotRemoteView);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ basePlayerImpl.mediaSessionManager.setLockScreenArt(
+ builder,
+ getCenteredThumbnailBitmap()
+ );
+ }
+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
builder.setPriority(NotificationCompat.PRIORITY_MAX);
}
return builder;
}
+ @Nullable
+ private Bitmap getCenteredThumbnailBitmap() {
+ int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
+ int screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
+
+ return BitmapUtils.centerCrop(
+ basePlayerImpl.getThumbnail(),
+ screenWidth,
+ screenHeight);
+ }
+
private void setupNotification(RemoteViews remoteViews) {
if (basePlayerImpl == null) return;
@@ -252,8 +273,10 @@ public final class BackgroundPlayer extends Service {
//if (DEBUG) Log.d(TAG, "updateNotification() called with: drawableId = [" + drawableId + "]");
if (notBuilder == null) return;
if (drawableId != -1) {
- if (notRemoteView != null) notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
- if (bigNotRemoteView != null) bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
+ if (notRemoteView != null)
+ notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
+ if (bigNotRemoteView != null)
+ bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
}
notificationManager.notify(NOTIFICATION_ID, notBuilder.build());
timesNotificationUpdated++;
@@ -280,7 +303,8 @@ public final class BackgroundPlayer extends Service {
protected class BasePlayerImpl extends BasePlayer {
- @NonNull final private AudioPlaybackResolver resolver;
+ @NonNull
+ final private AudioPlaybackResolver resolver;
private int cachedDuration;
private String cachedDurationString;
@@ -299,8 +323,10 @@ public final class BackgroundPlayer extends Service {
super.handleIntent(intent);
resetNotification();
- if (bigNotRemoteView != null) bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
- if (notRemoteView != null) notRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
+ if (bigNotRemoteView != null)
+ bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
+ if (notRemoteView != null)
+ notRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
startForeground(NOTIFICATION_ID, notBuilder.build());
}
@@ -335,6 +361,7 @@ public final class BackgroundPlayer extends Service {
updateNotificationThumbnail();
updateNotification(-1);
}
+
/*//////////////////////////////////////////////////////////////////////////
// States Implementation
//////////////////////////////////////////////////////////////////////////*/
@@ -358,10 +385,12 @@ public final class BackgroundPlayer extends Service {
if (!shouldUpdateOnProgress) return;
if (timesNotificationUpdated > NOTIFICATION_UPDATES_BEFORE_RESET) {
resetNotification();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/) updateNotificationThumbnail();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/)
+ updateNotificationThumbnail();
}
+
if (bigNotRemoteView != null) {
- if(cachedDuration != duration) {
+ if (cachedDuration != duration) {
cachedDuration = duration;
cachedDurationString = getTimeString(duration);
}
@@ -389,8 +418,10 @@ public final class BackgroundPlayer extends Service {
@Override
public void destroy() {
super.destroy();
- if (notRemoteView != null) notRemoteView.setImageViewBitmap(R.id.notificationCover, null);
- if (bigNotRemoteView != null) bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, null);
+ if (notRemoteView != null)
+ notRemoteView.setImageViewBitmap(R.id.notificationCover, null);
+ if (bigNotRemoteView != null)
+ bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, null);
}
/*//////////////////////////////////////////////////////////////////////////
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
index a5c703837..ec53e72fe 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
@@ -2,12 +2,18 @@ package org.schabi.newpipe.player.helper;
import android.content.Context;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.media.MediaMetadata;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+import android.support.v4.app.NotificationCompat;
+import android.support.v4.media.MediaMetadataCompat;
+import android.support.v4.media.session.MediaButtonReceiver;
import android.support.v4.media.session.MediaSessionCompat;
import android.view.KeyEvent;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.media.session.MediaButtonReceiver;
+import android.support.v4.media.app.NotificationCompat.MediaStyle;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
@@ -40,13 +46,38 @@ public class MediaSessionManager {
return MediaButtonReceiver.handleIntent(mediaSession, intent);
}
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ public void setLockScreenArt(
+ NotificationCompat.Builder builder,
+ @Nullable Bitmap thumbnailBitmap
+ ) {
+ if (thumbnailBitmap == null) {
+ return;
+ }
+
+ if (!mediaSession.isActive()) {
+ return;
+ }
+
+ mediaSession.setMetadata(
+ new MediaMetadataCompat.Builder()
+ .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, thumbnailBitmap)
+ .build()
+ );
+
+ MediaStyle mediaStyle = new MediaStyle()
+ .setMediaSession(mediaSession.getSessionToken());
+
+ builder.setStyle(mediaStyle);
+ }
+
/**
* Should be called on player destruction to prevent leakage.
- * */
+ */
public void dispose() {
this.sessionConnector.setPlayer(null);
this.sessionConnector.setQueueNavigator(null);
this.mediaSession.setActive(false);
this.mediaSession.release();
- }
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
new file mode 100644
index 000000000..2dac94912
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
@@ -0,0 +1,42 @@
+package org.schabi.newpipe.util;
+
+import android.graphics.Bitmap;
+import android.support.annotation.Nullable;
+
+public class BitmapUtils {
+
+ @Nullable
+ public static Bitmap centerCrop(Bitmap inputBitmap, int newWidth, int newHeight) {
+ if (inputBitmap == null || inputBitmap.isRecycled()) {
+ return null;
+ }
+
+ float sourceWidth = inputBitmap.getWidth();
+ float sourceHeight = inputBitmap.getHeight();
+
+ float xScale = newWidth / sourceWidth;
+ float yScale = newHeight / sourceHeight;
+
+ float newXScale;
+ float newYScale;
+
+ if (yScale > xScale) {
+ newXScale = (1.0f / yScale) * xScale;
+ newYScale = 1.0f;
+ } else {
+ newXScale = 1.0f;
+ newYScale = (1.0f / xScale) * yScale;
+ }
+
+ float scaledWidth = newXScale * sourceWidth;
+ float scaledHeight = newYScale * sourceHeight;
+
+ int left = (int) ((sourceWidth - scaledWidth) / 2);
+ int top = (int) ((sourceHeight - scaledHeight) / 2);
+ int width = (int) scaledWidth;
+ int height = (int) scaledHeight;
+
+ return Bitmap.createBitmap(inputBitmap, left, top, width, height);
+ }
+
+}
From 96de70b71e62cb70339a6185e6b53f4a31f8f5d3 Mon Sep 17 00:00:00 2001
From: k1rakishou
Date: Fri, 8 Nov 2019 20:47:42 +0300
Subject: [PATCH 0079/1194] Rebase onto the latest dev, update appcompat
dependencies to use androidx
---
.../player/helper/MediaSessionManager.java | 21 +++++++++++--------
.../org/schabi/newpipe/util/BitmapUtils.java | 3 ++-
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
index ec53e72fe..b75ddb706 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
@@ -5,15 +5,16 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.media.MediaMetadata;
import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.v4.app.NotificationCompat;
import android.support.v4.media.MediaMetadataCompat;
-import android.support.v4.media.session.MediaButtonReceiver;
import android.support.v4.media.session.MediaSessionCompat;
import android.view.KeyEvent;
-import android.support.v4.media.app.NotificationCompat.MediaStyle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.app.NotificationCompat;
+import androidx.media.session.MediaButtonReceiver;
+import androidx.media.app.NotificationCompat.MediaStyle;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
@@ -25,8 +26,10 @@ import org.schabi.newpipe.player.mediasession.PlayQueuePlaybackController;
public class MediaSessionManager {
private static final String TAG = "MediaSessionManager";
- @NonNull private final MediaSessionCompat mediaSession;
- @NonNull private final MediaSessionConnector sessionConnector;
+ @NonNull
+ private final MediaSessionCompat mediaSession;
+ @NonNull
+ private final MediaSessionConnector sessionConnector;
public MediaSessionManager(@NonNull final Context context,
@NonNull final Player player,
@@ -72,7 +75,7 @@ public class MediaSessionManager {
}
/**
- * Should be called on player destruction to prevent leakage.
+ * Should be called on player destruction to prevent leakage.BitmapUtils
*/
public void dispose() {
this.sessionConnector.setPlayer(null);
diff --git a/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
index 2dac94912..a0e7de4ac 100644
--- a/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
+++ b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
@@ -1,7 +1,8 @@
package org.schabi.newpipe.util;
import android.graphics.Bitmap;
-import android.support.annotation.Nullable;
+
+import androidx.annotation.Nullable;
public class BitmapUtils {
From 0395dc6e9e81e04aee8bb420383401832193054f Mon Sep 17 00:00:00 2001
From: k1rakishou
Date: Thu, 28 Nov 2019 21:46:37 +0300
Subject: [PATCH 0080/1194] Add a setting for the lock screen thumbnail feature
---
.../newpipe/player/BackgroundPlayer.java | 28 ++++++++++++++++---
.../player/helper/MediaSessionManager.java | 14 ++++++++++
app/src/main/res/values/settings_keys.xml | 1 +
app/src/main/res/values/strings.xml | 2 ++
app/src/main/res/xml/video_audio_settings.xml | 7 +++++
5 files changed, 48 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index 6486f4b03..cbcd702f4 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -25,13 +25,17 @@ import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.IBinder;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
+
+import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.RemoteViews;
@@ -77,6 +81,7 @@ public final class BackgroundPlayer extends Service {
private BasePlayerImpl basePlayerImpl;
private LockManager lockManager;
+ private SharedPreferences sharedPreferences;
/*//////////////////////////////////////////////////////////////////////////
// Service-Activity Binder
@@ -109,6 +114,7 @@ public final class BackgroundPlayer extends Service {
if (DEBUG) Log.d(TAG, "onCreate() called");
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
lockManager = new LockManager(this);
+ sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
ThemeHelper.setTheme(this);
basePlayerImpl = new BasePlayerImpl(this);
@@ -203,10 +209,7 @@ public final class BackgroundPlayer extends Service {
builder.setCustomBigContentView(bigNotRemoteView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- basePlayerImpl.mediaSessionManager.setLockScreenArt(
- builder,
- getCenteredThumbnailBitmap()
- );
+ setLockScreenThumbnail(builder);
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
@@ -215,6 +218,23 @@ public final class BackgroundPlayer extends Service {
return builder;
}
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ private void setLockScreenThumbnail(NotificationCompat.Builder builder) {
+ boolean isLockScreenThumbnailEnabled = sharedPreferences.getBoolean(
+ getString(R.string.enable_lock_screen_video_thumbnail_key),
+ true
+ );
+
+ if (isLockScreenThumbnailEnabled) {
+ basePlayerImpl.mediaSessionManager.setLockScreenArt(
+ builder,
+ getCenteredThumbnailBitmap()
+ );
+ } else {
+ basePlayerImpl.mediaSessionManager.clearLockScreenArt(builder);
+ }
+ }
+
@Nullable
private Bitmap getCenteredThumbnailBitmap() {
int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
index b75ddb706..64022e39c 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
@@ -74,6 +74,20 @@ public class MediaSessionManager {
builder.setStyle(mediaStyle);
}
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+ public void clearLockScreenArt(NotificationCompat.Builder builder) {
+ mediaSession.setMetadata(
+ new MediaMetadataCompat.Builder()
+ .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, null)
+ .build()
+ );
+
+ MediaStyle mediaStyle = new MediaStyle()
+ .setMediaSession(mediaSession.getSessionToken());
+
+ builder.setStyle(mediaStyle);
+ }
+
/**
* Should be called on player destruction to prevent leakage.BitmapUtils
*/
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 6aaaa0630..4813833d1 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -175,6 +175,7 @@
main_page_content
enable_playback_resume
enable_playback_state_lists
+ enable_lock_screen_video_thumbnail
import_data
export_data
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6021df15e..a296e2db7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -58,7 +58,9 @@
Kore app not found. Install it?
org.xbmc.kore
Show \"Play with Kodi\" option
+ Enable lock screen video thumbnail
Display an option to play a video via Kodi media center
+ When using the background player a video thumbnail will be displayed on the lock screen
Audio
Default audio format
Default video format
diff --git a/app/src/main/res/xml/video_audio_settings.xml b/app/src/main/res/xml/video_audio_settings.xml
index 0ff43ce90..ddf85811a 100644
--- a/app/src/main/res/xml/video_audio_settings.xml
+++ b/app/src/main/res/xml/video_audio_settings.xml
@@ -81,6 +81,13 @@
android:summary="@string/show_play_with_kodi_summary"
android:title="@string/show_play_with_kodi_title"/>
+
+
Date: Wed, 1 Jan 2020 17:18:58 +0100
Subject: [PATCH 0081/1194] Enable lockscreen video thumbnail by default
---
.../org/schabi/newpipe/player/helper/MediaSessionManager.java | 2 +-
app/src/main/res/xml/video_audio_settings.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
index 64022e39c..51684f506 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
@@ -89,7 +89,7 @@ public class MediaSessionManager {
}
/**
- * Should be called on player destruction to prevent leakage.BitmapUtils
+ * Should be called on player destruction to prevent leakage.
*/
public void dispose() {
this.sessionConnector.setPlayer(null);
diff --git a/app/src/main/res/xml/video_audio_settings.xml b/app/src/main/res/xml/video_audio_settings.xml
index ddf85811a..d1757919b 100644
--- a/app/src/main/res/xml/video_audio_settings.xml
+++ b/app/src/main/res/xml/video_audio_settings.xml
@@ -83,7 +83,7 @@
From 718acb505930e4a7d2dbd7b3840b73677f5512bb Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Thu, 2 Jan 2020 15:00:22 +0100
Subject: [PATCH 0082/1194] Code improvements
---
.../newpipe/player/helper/MediaSessionManager.java | 11 ++---------
.../java/org/schabi/newpipe/util/BitmapUtils.java | 4 ++--
2 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
index 51684f506..8b9369613 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
@@ -50,15 +50,8 @@ public class MediaSessionManager {
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
- public void setLockScreenArt(
- NotificationCompat.Builder builder,
- @Nullable Bitmap thumbnailBitmap
- ) {
- if (thumbnailBitmap == null) {
- return;
- }
-
- if (!mediaSession.isActive()) {
+ public void setLockScreenArt(NotificationCompat.Builder builder, @Nullable Bitmap thumbnailBitmap) {
+ if (thumbnailBitmap == null || !mediaSession.isActive()) {
return;
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
index a0e7de4ac..7ad71eb5c 100644
--- a/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
+++ b/app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
@@ -22,11 +22,11 @@ public class BitmapUtils {
float newYScale;
if (yScale > xScale) {
- newXScale = (1.0f / yScale) * xScale;
+ newXScale = xScale / yScale;
newYScale = 1.0f;
} else {
newXScale = 1.0f;
- newYScale = (1.0f / xScale) * yScale;
+ newYScale = yScale / xScale;
}
float scaledWidth = newXScale * sourceWidth;
From c46a0f7b2ebd9fbe73c3bc33c5b62ae64c529a23 Mon Sep 17 00:00:00 2001
From: k1rakishou
Date: Fri, 3 Jan 2020 13:00:53 +0300
Subject: [PATCH 0083/1194] Code-review changes
---
.../org/schabi/newpipe/player/BackgroundPlayer.java | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index f36e352a6..9e896b14f 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -201,12 +201,12 @@ public final class BackgroundPlayer extends Service {
setupNotification(notRemoteView);
setupNotification(bigNotRemoteView);
- NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.notification_channel_id));
- builder.setOngoing(true);
- builder.setSmallIcon(R.drawable.ic_newpipe_triangle_white);
- builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
- builder.setCustomContentView(notRemoteView);
- builder.setCustomBigContentView(bigNotRemoteView);
+ NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.notification_channel_id))
+ .setOngoing(true)
+ .setSmallIcon(R.drawable.ic_newpipe_triangle_white)
+ .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
+ .setCustomContentView(notRemoteView)
+ .setCustomBigContentView(bigNotRemoteView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setLockScreenThumbnail(builder);
From eb5fb42da9776149db8c882cf16a4da4f8531c9f Mon Sep 17 00:00:00 2001
From: k1rakishou
Date: Fri, 3 Jan 2020 16:29:04 +0300
Subject: [PATCH 0084/1194] Couple more code review changes
---
.../org/schabi/newpipe/player/BackgroundPlayer.java | 10 +++++++---
.../newpipe/player/helper/MediaSessionManager.java | 2 +-
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index 9e896b14f..76da7da36 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -403,9 +403,13 @@ public final class BackgroundPlayer extends Service {
updateProgress(currentProgress, duration, bufferPercent);
if (!shouldUpdateOnProgress) return;
- if (timesNotificationUpdated > NOTIFICATION_UPDATES_BEFORE_RESET) {resetNotification();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/)
- updateNotificationThumbnail();}
+ if (timesNotificationUpdated > NOTIFICATION_UPDATES_BEFORE_RESET) {
+ resetNotification();
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/) {
+ updateNotificationThumbnail();
+ }
+ }
if (bigNotRemoteView != null) {
if (cachedDuration != duration) {
cachedDuration = duration;
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
index 9134d6144..8b9369613 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/MediaSessionManager.java
@@ -82,7 +82,7 @@ public class MediaSessionManager {
}
/**
- * Should be called on player destruction to prevent leakage.BitmapUtils
+ * Should be called on player destruction to prevent leakage.
*/
public void dispose() {
this.sessionConnector.setPlayer(null);
From dea1e0dcb9652dbaddcd1f1de68d8a5d340426a2 Mon Sep 17 00:00:00 2001
From: bopol
Date: Sat, 4 Jan 2020 21:38:27 +0100
Subject: [PATCH 0085/1194] Update localizations settings
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1) now, on « content language » change, it will also change the app language
2) added Esperanto to the list of language in content language
---
app/src/main/java/org/schabi/newpipe/MainActivity.java | 5 +++++
.../java/org/schabi/newpipe/util/Localization.java | 10 ++++++++++
app/src/main/res/values/settings_keys.xml | 2 ++
3 files changed, 17 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 90d299c7f..cac814085 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -67,6 +67,7 @@ import org.schabi.newpipe.fragments.list.search.SearchFragment;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.KioskTranslator;
+import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PeertubeHelper;
import org.schabi.newpipe.util.PermissionHelper;
@@ -78,6 +79,8 @@ import org.schabi.newpipe.util.ThemeHelper;
import java.util.ArrayList;
import java.util.List;
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");
@@ -116,6 +119,8 @@ public class MainActivity extends AppCompatActivity {
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
+ changeAppLanguage(Localization.getPreferredLocale(getApplicationContext()), getResources());
+
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index 9274df848..6b0b4cd0c 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -2,8 +2,11 @@ package org.schabi.newpipe.util;
import android.content.Context;
import android.content.SharedPreferences;
+import android.content.res.Configuration;
+import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.text.TextUtils;
+import android.util.DisplayMetrics;
import org.ocpsoft.prettytime.PrettyTime;
import org.ocpsoft.prettytime.units.Decade;
@@ -216,4 +219,11 @@ public class Localization {
public static String relativeTime(Calendar calendarTime) {
return getPrettyTime().formatUnrounded(calendarTime);
}
+
+ public static void changeAppLanguage(Locale loc, Resources res) {
+ DisplayMetrics dm = res.getDisplayMetrics();
+ Configuration conf = res.getConfiguration();
+ conf.setLocale(loc);
+ res.updateConfiguration(conf, dm);
+ }
}
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 6aaaa0630..3f361226d 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -272,6 +272,7 @@
- cs
- da
- de
+ - eo
- et
- en-GB
- en
@@ -351,6 +352,7 @@
- Čeština
- Dansk
- Deutsch
+ - Esperanto
- Eesti
- English (UK)
- English (US)
From 014682664d46f09b7c9a4b4312d16303c2ffee04 Mon Sep 17 00:00:00 2001
From: ssantos
Date: Thu, 2 Jan 2020 07:38:24 +0000
Subject: [PATCH 0086/1194] Translated using Weblate (German)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-de/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index e16d7d69b..17c2e55d0 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -529,4 +529,8 @@
Wähle eine Instanz
Bevorzugte Peertube-Instanzen festlegen
Es werden nur https-Adressen unterstützt
+ Dauer der Suche bei schnellem Vor-/Zurückspulen
+ Am beliebtesten
+ Wiederherstellen
+ Dieser Download kann nicht wiederhergestellt werden
\ No newline at end of file
From f17b92512c7713e414bb364f0ea2fa722875561d Mon Sep 17 00:00:00 2001
From: THANOS SIOURDAKIS
Date: Wed, 1 Jan 2020 18:36:11 +0000
Subject: [PATCH 0087/1194] Translated using Weblate (Greek)
Currently translated at 97.9% (511 of 522 strings)
---
app/src/main/res/values-el/strings.xml | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 142813119..dd6643755 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -206,7 +206,7 @@
Λυπούμαστε, αυτό δεν έπρεπε να έχει συμβεί.
Αναφορά σφάλματος με ηλεκτρονικό ταχυδρομίο
Λυπούμαστε, συνέβησαν κάποια σφάλματα.
- What:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού:
+ Τι:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού συστήματος:
Αναφορά χρήστη
Κανένα αποτέλεσμα
Δεν υπάρχει τίποτα εδώ
@@ -516,4 +516,10 @@
Η γλώσσα θα αλλάξει μόλις θα επανεκκινηθεί η εφαρμογή.
Προεπιλεγμένο περίπτερο
+ Υποστηρίζονται μόνο διευθύνσεις URL HTTPS
+ Τοπικό
+ Προστέθηκε πρόσφατα
+ Δημιουργήθηκε αυτόματα (δεν βρέθηκε χρήστης μεταφόρτωσης)
+ Ανάκτηση
+ Δεν είναι δυνατή η ανάκτηση αυτής της λήψης
\ No newline at end of file
From 21895caa3a94e5743f1974bfd342f16bc61decf3 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Wed, 1 Jan 2020 22:05:58 +0000
Subject: [PATCH 0088/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-eo/strings.xml | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index c14195276..784357da3 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -61,7 +61,7 @@
Signali eraron per retpoŝto
SIGNALI
Informoj:
- Via komento (en la angla):
+ Via komento (angle):
Detaloj:
Signali eraron
Filmeto
@@ -80,7 +80,7 @@
Montri informojn
Ĉefa
Abonoj
- Legosigno
+ Konservitaj ludlistoj
Kio novas
Fono
Ŝprucfenestro
@@ -516,4 +516,20 @@
- %s aŭskultantoj
La lingvo ŝanĝos kiam la apo restartos.
+ Rapida antaŭen / posten daŭron
+ Instancoj de PeerTube
+ Registri viajn preferitajn instancojn de PeerTube
+ Trovu la instancojn kiu vi povus ŝati ĉe https://joinpeertube.org/instances#instances-list
+ Aldoni instanco
+ Eniri la ligilon de la instanco
+ Malsukcesis validigi instanco
+ Nur https ligiloj estas subtenitaj
+ La instanco jam ekzistas
+ Loka
+ Freŝdate ĝisdatigita
+ La plej ŝatitatj
+ Aŭtomate generita (neniu alŝutilo trovita)
+ Reakiranta
+ Ne povas reakiri tion elŝuton
+ Elektu instancon
\ No newline at end of file
From 8fb29ae6c29139b45ec08c89edb5c4cd7a9d9a0a Mon Sep 17 00:00:00 2001
From: Osoitz
Date: Thu, 2 Jan 2020 04:55:59 +0000
Subject: [PATCH 0089/1194] Translated using Weblate (Basque)
Currently translated at 99.8% (521 of 522 strings)
---
app/src/main/res/values-eu/strings.xml | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index adf7d6720..2233c42ba 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -500,13 +500,13 @@
Aldatu deskargen karpetak indarrean jartzeko
Ez dago inor ikusten
- - %s ikusten
- - %s ikusten
+ - ikusle %s
+ - %s ikusle
Ez dago inor entzuten
- - %s entzuten
- - %s entzuten
+ - entzule %s
+ - %s entzule
SAF erabili
Biltegian Sartzeko Armazoiak kanpoko SD txartel betera jaitsierak egitea ahalbidetzen du.
@@ -517,4 +517,20 @@
Aktibatu zerbitzua, orain hautatua:
Hizkuntza aldatuko da aplikazioa berrabiarazterakoan.
Kiosko Lehenetsia
+ Aurreratze/atzeratze bilaketaren iraupena
+ PeerTube instantziak
+ Ezarri zure gogoko peertube instantziak
+ Aurkitu instantziak hemen: https://joinpeertube.org/instances#instances-list
+ Gehitu instantzia
+ Sartu instantziaren URLa
+ Huts egin du instantzia balioztatzean
+ https URLak onartzen dira soilik
+ Instantzia badago aurretik
+ Lokala
+ Berriki gehitua
+ Gogokoenak
+ Automatikoki sortua (igotzailea ez da aurkitu)
+ berreskuratzen
+ Ezin da deskarga hau berreskuratu
+ Aukeratu instantzia
\ No newline at end of file
From 21a39b06e7df69fd8fbf702e76f15f2df1366252 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?=
Date: Thu, 2 Jan 2020 08:35:14 +0000
Subject: [PATCH 0090/1194] Translated using Weblate (Ukrainian)
Currently translated at 98.1% (512 of 522 strings)
---
app/src/main/res/values-uk/strings.xml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index ff9907890..6aea1ad79 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -522,4 +522,10 @@
- %s слухачів
Мова зміниться після перезапуску програми.
+ Швидке перемотування
+ Не вдалося перевірити екземпляр
+ Оберіть ваш улюблений екземпляр peertube.
+ Знайдіть екземпляри, які найбільше підходять вам на https://joinpeertube.org/instance#instance-list
+ Додати екземпляр
+ Введіть посилання на екземпляр
\ No newline at end of file
From 28063c35c29f6aaa71a4a5f030f77df9a4c1f628 Mon Sep 17 00:00:00 2001
From: Enol P
Date: Fri, 3 Jan 2020 14:24:55 +0000
Subject: [PATCH 0091/1194] Translated using Weblate (Asturian)
Currently translated at 49.2% (257 of 522 strings)
---
app/src/main/res/values-b+ast/strings.xml | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml
index 4ea5dae26..08b22c616 100644
--- a/app/src/main/res/values-b+ast/strings.xml
+++ b/app/src/main/res/values-b+ast/strings.xml
@@ -206,7 +206,7 @@
Sotítulos
Aceutar
¿Quies reafitar los valores\?
-
+
El sirvidor nun aceuta descargues multifilu, volvi probar con @string/msg_threads = 1
Nun hai comentarios
Llimpieza de datos
@@ -243,4 +243,18 @@
Siguir cola reproducción
Les llingüetes que s\'amuesen na páxina principal
Entrugar ánde baxar
-
+ Descargues
+ Descargues
+
+ - Vídeos
+
+
+ Control per xestos del reproductor
+ Cargando\'l conteníu solicitáu
+ Política de Privacidá de NewPipe
+ Control per xestos del volume
+ Control per xestos del brilléu
+ El ficheru nun pue crease
+ El sirvidor nun unvia datos
+ La llingua va camudar namái que se reanicie l\'aplicación.
+
\ No newline at end of file
From 23f9ffdab718ee9a044a41b3e3a47970fbf3af85 Mon Sep 17 00:00:00 2001
From: ssantos
Date: Fri, 3 Jan 2020 22:19:09 +0000
Subject: [PATCH 0092/1194] Translated using Weblate (Portuguese)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-pt/strings.xml | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index c26c57aad..4bf692801 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -516,4 +516,20 @@
- %s ouvintes
O idioma mudará quando a app for reiniciada.
+ Duração da busca de avanço/retrocesso rápido
+ Instâncias do PeerTube
+ Defina as suas instâncias favoritas de peertube
+ Encontre as instâncias que lhe melhor convêm em https://joinpeertube.org/instances#instances-list
+ Adicionar instância
+ Digite o URL da instância
+ Falha ao validar a instância
+ Somente URLs HTTPS são suportadas
+ A instância já existe
+ Local
+ Recentemente adicionado
+ Os mais apreciados
+ Geração automática (não foi encontrado nenhum enviador)
+ recuperando
+ Não é possível recuperar este descarregamento
+ Escolha uma instância
\ No newline at end of file
From db87df743df00dfcb5e8a7b2e0b5aaecf16cd27b Mon Sep 17 00:00:00 2001
From: pietrasagh
Date: Sat, 4 Jan 2020 13:13:50 +0000
Subject: [PATCH 0093/1194] Translated using Weblate (Polish)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-pl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 0b52d3c79..75ce1029d 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -523,7 +523,7 @@
- %s słuchaczy
Język zmieni się po ponownym uruchomieniu aplikacji.
- Szybkie przewijanie do przodu/do tyłu szukaj czasu trwania
+ Krok czasu przewijania
Wystąpienia PeerTube
Ustaw swoje ulubione instancje peertube
Znajdź instancje, które najbardziej Ci odpowiadają, na https://joinpeertube.org/instances#instances-list
From e2ec95e6ffa305de0f1689a679cc3339c6d14d9c Mon Sep 17 00:00:00 2001
From: Software In Interlingua
Date: Thu, 2 Jan 2020 17:04:44 +0000
Subject: [PATCH 0094/1194] Translated using Weblate (Interlingua)
Currently translated at 10.9% (57 of 522 strings)
---
app/src/main/res/values-ia/strings.xml | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml
index 1d053a370..981724304 100644
--- a/app/src/main/res/values-ia/strings.xml
+++ b/app/src/main/res/values-ia/strings.xml
@@ -24,4 +24,12 @@
Dossier de discarga de video
Selige le dossier de discarga pro files de video
Dossier de discarga de audio
+ Cancellar
+ Subscriber
+ Selige le dossier de discarga pro files de audio
+ Thema
+ Monstrar le commentos
+ Initiar discargas
+ Pausar le discargas
+ Seliger un instantia
\ No newline at end of file
From 2ea404659bd0e0534fc4d2f84474886625f2fe3f Mon Sep 17 00:00:00 2001
From: JoC
Date: Sat, 4 Jan 2020 15:38:24 +0000
Subject: [PATCH 0095/1194] Translated using Weblate (Spanish)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-es/strings.xml | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 5691c2ab6..eacda9f4a 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -518,4 +518,18 @@
- %s escuchas
El idioma cambiará luego de que la app sea reiniciada.
+ Duración de búsqueda al avanzar y/o retroceder
+ Instancias de PeerTube
+ Elige tus instancias favoritas de PeerTube
+ Encuentra las mejores instancias para ti en https://joinpeertube.org/instances#instances-list
+ Agregar instancia
+ Dirección URL de la instancia
+ Error al validar la instancia
+ Sólo URLs con HTTPS
+ La instancia ya existe
+ Local
+ Agregados recientemente
+ Más gustados
+ Generado automáticamente (no se encontró creador)
+ Elige una instancia
\ No newline at end of file
From 594d77e713440515373707baea3e40976547be66 Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Fri, 3 Jan 2020 17:20:48 +0000
Subject: [PATCH 0096/1194] Translated using Weblate (Kurdish)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-ku/strings.xml | 145 +++++++++++++------------
1 file changed, 73 insertions(+), 72 deletions(-)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index da2c3aa21..938175f71 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -95,16 +95,16 @@
کارپێکردن لە پەنجەرەی بچووک
ڕیزکرا لە کارپێکردن لە پاشبنەما
ڕیزکرا لە کارپێکردن لە پەنجەرەی بچووک
- لێدان
+ کارپێکردن
ناوەڕۆک
سنوردانانی تەمەن
- ڕاستەوخۆ
+ زیندو
داگرتنەکان
داگرتنەکان
ناتوانرێ سکاڵابکرێ
هەمووی
کەناڵ
- لیستی ڤیدیۆ
+ لیستی کارپێکردن
بەڵێ
دواتر
ناچالاککراوە
@@ -114,34 +114,34 @@
قەبارە دانانەوە
باشترین قەبارە
گەڕانەوە
- لێدانی هەمووی
+ کارپێکردنی هەمووی
هەمیشە
تەنها ئێستا
فایل
- ئاگانامەکانی ئەپ
- ئاگانامەکانی ئەپەکە بۆ پاشبنەما و لێدانەکانی پەنجەرەی بچووک
+ ئاگانامەکانی NewPipe
+ ئاگانامەکانی NewPipe بۆ پاشبنەما و کارپێکردنەکانی پەنجەرەی بچووک
(نەزانراو)
چەسپاندنی لاربوونەوە
گۆڕین بۆ پاشبنەما
گۆڕین بۆ پەنجەرەی بچووک
گۆڕین بۆ سەرەکی
- هێنانی داتابەیس
- دەرکردنی داتابەیس
- جێگەی مێژوو و بەشداربووەکانی ئێستات دەگرێتەوە
- زەخیرەکردنی مێژوو و بەشداربوون و لیستەکان
+ هێنانەوەی بنکەی زانیاریەکان
+ دەرکردنی بنکەی زانیارییەکان
+ لەسەر مێژوو و بەشداربووەکانی ئێستات جێگیردەبێت
+ خەزنکردنی مێژوو و بەشداربوون و لیستەکان
هەڵەیەک ڕوویدا
کێشە لە هێڵەکەتدا هەیە
ناتوانرێ هەموو وێنۆچکەکان باربکرێن
- ناتوانرێ وێبسایت شیبکرێتەوە
- ناتوانرێ وێبسایت بەتەواوی شیبکرێتەوە
+ ناتوانرێ ماڵپەڕ شیبکرێتەوە
+ ناتوانرێ ماڵپەڕ بەتەواوی شیبکرێتەوە
ناوەڕۆک بوونی نییە
ناتوانرێ لیستی داگرتن دابنرێ
پەخشی ڕاستەوخۆ پشتگیری ناکرێ لەئێستادا
هیچ پەخشێ نەدۆزرایەوە
ناتوانرێ وێنە باربکرێ
- ئەپ کڕاشبوو
+ ئەپ/ڕووکار ڕاوەستا
ناتوانرێ ئەم پەخشە لێبدرێ
- لێدەرە ڤیدیۆییە دەرەکییەکان پشتگیری ئەم جۆرە بەستەرانە ناکەن
+ کارپێکەرە ڤیدیۆییە دەرەکییەکان پشتگیری ئەم جۆرە بەستەرانە ناکەن
بەستەر هەڵەیە
هیچ پەخشێکی ڤیدیۆیی نەدۆزرایەوە
پەخشی هیچ دەنگێک نەدۆزرایەوە
@@ -157,7 +157,7 @@
لێدوانەکەت (بە ئینگلیزی):
وردەکارییەکان:
وێنۆچکەی پیشاندانی ڤیدیۆ
- ماوەی لێدانی ڤیدیۆ:
+ کارپێکردنی ڤیدیۆ، ماوەی:
وێنۆچکەی کەسی بەرزکەرەوە
بەدڵبوون
بەدڵنەبوون
@@ -183,32 +183,32 @@
هیچ بینراوێک نییە
- - %s بینراو
- - %s بینرااو
+ - %s بینرااو
+ - %s بینراو
هیچ ڤیدیۆیەک نییە
- - ڤیدیۆکان
-
+ - ڤیدیۆ
+ - ڤیدیۆکان
دەستپێکردن
ڕاگرتن
- لێدان
+ کارپێکردن
دروستکردن
سڕینەوە
- سڕینەوەی یەکیان
+ سڕینەوەی یەک دانە
سڕینەوەی هەمووی
تاقیکردنەوەی هێڵێک
ڕێپێنەدان
دانانەوەی ناو
- فرمانی نوێ
+ ئەرکی نوێ
باشە
ناوی فایل
دابەشکراوەکان
کێشە ڕوویدا
سێرڤەر پشتگیرینەکراوە
فایل بوونی هەیە
- داگرتنەکانی ئەپ
+ داگرتنەکانی NewPipe
گرتەبکە بۆ وردەکاری
تکایە چاوەڕێبکە…
لەبەرگیرایەوە
@@ -217,28 +217,28 @@
\nکردنەوەی پەنجەرەی بچووک
reCAPTCHA
reCAPTCHA داواکاری
- reCAPTCHA challenge requested
+ reCAPTCHA داواکراوە
داگرتن
پیت و ژمارەکان
- کارەکتەرە تایبەتییەکان
- دەربارەی ئەپ
+ هێما تایبەتییەکان
+ دەربارەی NewPipe
ڕێکخستنەکان
دەربارە
© %1$s لەلایەن %2$s لەژێر %3$s
ناتوانرێ مۆڵەت باربکرێ
- کردنەوەی وێبسایت
+ کردنەوەی ماڵپەڕ
دەربارە
هاوبەشەکان
مۆڵەتەکان
هاوبەشبوون
- Whether you have ideas of; translation, design changes, code cleaning, or real heavy code changes—help is always welcome. The more is done the better it gets!
- View on GitHub
+ هەرکاتێ بیرۆکەیەکت هەبوو وەک ; وەرگێڕان، گۆڕینی دیزاین ، سڕینەوەی کۆد ،یان هەر گۆڕانکارییەکیتر ئەوا یارمەتییەکەت لەسەرچاوانمانە. ئێمە هەمیشە دەمانەوێ ئەپەکە زیاتر بەرەوپێش ببەین!
+ بینین لە GitHub
بەخشین
- NewPipe is developed by volunteers spending time bringing you the best experience. Give back to help developers make NewPipe even better while enjoying a cup of coffee.
+ ئەم ئەپە لەلایەن چەند خۆبەخشێکەوە دروستکراوە کەکاتی خۆیان پێ بەخشیووە تاکو باشترین خزمەتگوزاریت پێشکەش بکەن. هیچ نەبێت بە کڕینی کوپێک قاوە یارمەتی گەشەپێدەرەکانمان بدە بۆ ئەوەی کاتی زیاتر تەرخان بکەین بۆ بەرەوپێشبردنی NewPipe.
پێدانەوە
- وێبسایت
- سەردانی وێبسایتی NewPipe بکە بۆ زانیاری و هەواڵی نوێ.
- Read license
+ ماڵپەڕ
+ سەردانی ماڵپەڕی NewPipe بکە بۆ زانیاری و هەواڵی نوێ.
+ خوێندنەوەی مۆڵەتنامە
مێژوو
گەڕا
تەماشاکراوە
@@ -250,10 +250,10 @@
ئایا دەتەوێ ئەم بابەتە لە مێژووی گەڕان بسڕدرێتەوە؟
ئایا دەتەوێ ئەم بابەتە لە مێژووی تەماشاکردن بسڕدرێتەوە؟
ئایا دڵنیای لە سڕینەوەی هەموو بابەتەکان لە مێژوودا؟
- دواین لێدراو
- زۆرترین لێدان
+ دواین کارپێکراو
+ زۆرترین کارپێکردن
ناوەڕۆکی پەڕەی سەرەکی
- لێدانی پەنجەرەی بچووک
+ کارپێکەری پەنجەرەی بچووک
لادان
وردەکارییەکان
ڕێکخستنەکانی دەنگ
@@ -261,9 +261,9 @@
دەستپێکردنی لێدان لە پاشبنەماوە
دەستپێکردنی لێدان لە پەنجەرەی بچووکەوە
بەمزووانە شتێک لێرەدا دەردەکەوێ :D
- لێدەری ڤیدیۆیی
- لێدەری پاشبنەما
- لێدەری پەنجەرەی بچووک
+ کارپێکەری ڤیدیۆیی
+ کارپێکەری پاشبنەما
+ کارپێکەری پەنجەرەی بچووک
هەمیشە بپرسە
دەستکەوتنی زانیاری…
بارکردنی ناوەڕۆکی داواکراو
@@ -284,10 +284,10 @@
گونجاو بە ڕونما
پڕ بە ڕونما
هێنانەپێش
- خۆکاری دانرا
+ دانانی خۆکاری
چالاککردنی LeakCanary
سکاڵا لەسەر کێشەکان
- Force reporting of undeliverable Rx exceptions outside of fragment or activity lifecycle after disposal
+ سکاڵاکردن لەسەر نەگەیاندنی Rx ی پەسەندنەکرا لە دەرەوەی پارچە یان چالاکی لەدوای پوختەکردن
هێنانەوە/خەزنکردن
هێنانەوە
هێنانەوە لە
@@ -303,13 +303,13 @@
\n1. ئەم بەستەرە بکەوە: %1$
\n2. بچۆرەژوورەوە گەر داوای کرد
\n3. داگرتنێک دەست پێدەکات (ئەمە فایلی خەزنکراوە)
- Import a SoundCloud profile by typing either the URL or your ID:
+ هێنانەوەی پەڕەی کەسی SoundCloud بەدانانی بەستەر یاخوود ئایدی:
\n
-\n1. Enable \"desktop mode\" in a web-browser (the site is not available for mobile devices)
-\n2. Go to this URL: %1$s
-\n3. Log in when asked
-\n4. Copy the profile URL you were redirected to.
- yourID, soundcloud.com/yourid
+\n1. دۆخی ”Desktop mode” لە وێبگەرەکەتدا چالاک بکە (ئەم ماڵپەڕە بۆ وێبگەری مۆبایلەکان بەردەست نییە)
+\n2. ئەم بەستەرە بکەرەوە : %1$s
+\n3. بچۆرە ژوورەوە گەر داواکرا
+\n4. بەستەری پەڕەی کەسییەکەت دابنێ.
+ ئایدییەکەت , soundcloud.com/yourid
ئەوە بزانە ئەم کردارە پێویستی بە هێڵێکی گران هەیە.
\n
\nدەتەوێ بەردەوامبیت؟
@@ -320,22 +320,23 @@
هیچ پەخشێک نییە بۆ داگرتن
ژێرنووس
بەهۆی گۆڕانکاری لە شێوەی ژێرنووسکردنەکە. پێویستە ئەپەکە دابخەیت و دیسانەوە بیکەیتەوە.
- هیچ ئەپێک دانەمەزراوە بۆ لێدانی ئەم فایلە
- سڕینەوەی مێژوو
- مێژوو دەسڕێتەوە لەگەڵ ڤیدیۆ لێدراوەکان و شوێنی لیستە ڤیدیۆییەکان
- سڕینەوەی تەواوی مێژوو؟
+ هیچ ئەپێک دانەمەزراوە بۆ کارپێکردنی ئەم فایلە
+ سڕینەوەی مێژووی تەماشاکردن
+ مێژوو دەسڕێتەوە لەگەڵ ڤیدیۆ کارپێکراوەکان و شوێنی لیستە ڤیدیۆییەکان
+ سڕینەوەی تەواوی مێژووی تەماشاکردن؟
سڕینەوەی مێژووی گەڕان
مێژووی گەڕانەکانت دەسڕێتەوە
تەواوی گەڕانەکانت بسڕدرێنەوە؟
مێژووی گەڕانەکانت سڕانەوە.
1 بابەت سڕایەوە.
- NewPipe is copyleft libre software: You can use, study share and improve it at will. Specifically you can redistribute and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- NewPipe\'s Privacy Policy
- The NewPipe project takes your privacy very seriously. Therefore, the app does not collect any data without your consent.
-\nNewPipe\'s privacy policy explains in detail what data is sent and stored when you send a crash report.
- Read privacy policy
+ ئەم ئەپە سەرچاوە کراوەیە : دەتوانی بەکاریبهێنی، بیخوێنیتەوە و هاوبەشی پێبکەیت و بەرەوپێشی ببەیت.
+\nبەتایبەتی دەتوانی دابەشیبکەیتەوە یاخوود بگۆڕیت بەپێی مەرجەکانی GNU مۆڵەتنامەی گشتی وەک ئەپێکی بڵاوی خۆڕایی!
+ سیاسەتی تایبەتی NewPipe
+ پڕۆژەی NewPipe زانیارییە تایبەتییەکانت بەوردی دەپارێزێ. هەروەها ئەپەکە هیچ داتایەک بەبێ ئاگاداری تۆ بەکارنابات.
+\nسیاسەتی تایبەتی NewPipe بەوردەکاری ڕوونکردنەوەت دەداتێ لەسەر ئەو داتایانەی وەریاندەگرێ و بەکاریاندەبات.
+ خوێندنەوەی سیاسەتی تایبەتی
کەناڵەکان
- لیستی ڤیدیۆکان
+ لیستی کارپێکردنەکان
تراکەکان
بەکاربەرەکان
بەشدارنەبوون
@@ -349,12 +350,12 @@
نوێکارییەکان
فایل سڕایەوە
ئاگانامەی نوێکاری ئەپ
- ئاگانامەکانی وەشانی نوێی ئەپ
+ ئاگانامەکانی وەشانی نوێی NewPipe
بیرگەی دەرەکی بەردەست نییە
داگرتن لە بیرگەی دەرەکی ناکرێت.
\nشوێنی فۆڵدەری داگرتنەکان دابنرێتەوە؟
- گێڕانەوە بۆ شێوازی سەرەکی
- ئایا دەتەوێ بگەڕێنرێتەوە بۆ شێوازی سەرەکی؟
+ گێڕانەوە بۆ بنەڕەتی
+ ئایا دەتەوێ بگەڕێنرێتەوە بۆ شێوازی بنەڕەتی؟
ژمارەی بەشداربووان نادیارە
داگرتنێکیترت هەیە بەهەمان ناو
پیشاندانی کێشە
@@ -372,21 +373,21 @@
ناچالاککردن بۆ پیشان نەدانی لێدوانەکان
کارپێکردنی خۆکاری
- - لێدوانەکان
-
+ - لێدوان
+ - لێدوانەکان
هیچ لێدوانێک نییە
کارپێکردنەوەی لیست
گێڕانەوەی لیست بۆ شوێنی پێشووتر
شوێنەکان لە لیستدا
سڕینەوەی داتا
- مێژوو سڕایەوە.
- شوێنی لیستەکان سڕانەوە.
+ مێژووی تەماشاکردن سڕایەوە.
+ شوێنی کارپێکراوەکان سڕانەوە.
شوێنی فایل گۆڕدراوە یان سڕاوەتەوە
داگرتنێکیتر هەیە بەهەمان ناو
- سڕینەوەی شوێنی لیستەکان
- شوێنی هەموو لیستەکان دەسڕێتەوە
- شوێنی هەموو لیستەکان بسڕدرێتەوە؟
+ سڕینەوەی شوێنی کارپێکراوەکان
+ شوێنی هەموو کارپێکراوەکان دەسڕێتەوە
+ شوێنی هەموو کارپێکراوەکان بسڕدرێتەوە؟
فۆڵدەری داگرتن بگۆڕە بۆ ئەنجامدانی کاریگەری
خزمەتگوزاری چەسپاو، ئێستا هەڵبژێردراو:
هیچ کەسێک تەماشای ناکات
@@ -394,7 +395,7 @@
- %s تەماشا دەکات
- %s تەماشا دەکەن
- هیچ کەسێ گوێناگرێ
+ هیچ کەسێ گوێی لێ ناگرێ
- %s گوێی لێدەگرێ
- %s گوێی لێدەگرن
@@ -411,7 +412,7 @@
نەگێڕانەوەی کارپێکەر بۆ پێش کێشە ڕوویدا
گێڕانەوەی کارپێکەر بۆکاتی پێش کێشە
هەمان فۆڵدەر بوونی نییە
- هەمان فایل بوونی نییە
+ هەمان فایل/بابەت بوونی نییە
چی:\\nداواکراو:\\nناوەڕۆک:\\nلانگ:\\nخزمەتگوزاری:\\nGMT:\\nکات:\\nپاکێج:\\nوەشان:\\nوەشانی سیستەم:
|(تاقیکاری) داگرتنی خێرا بەبەکارهێنانی Tor بۆ زیادکردنی تایبەتێتی (پشتگیری پەخشە ڕاستەوخۆکان ناکات) .
بەستەر هەڵەیە یاخوود بەئینتەرنێتەوە پەیوەست نەبوویت
@@ -421,7 +422,7 @@
مۆڵەتنامەی ئەپ
ئەپێکی خۆڕایی و کێشی کەم بۆ پەخشی ڕاستەوخۆ لەسەر ئەندرۆید.
مۆڵەتنامەی NewPipe
- پەڕە بەتاڵە
+ پەڕەی بەتاڵ
پەڕەی کیۆسک
پەڕەی بەشدارییەکان
پەڕەی نوێترینەکان
@@ -439,7 +440,7 @@
باشترین 50
نوێ & چالاک
کارپێکەری پاشبنەما
- داگرە تا ڕیزنەکران
+ پەنجەت داگرە بۆ ڕیزنەبوون
ڕیزنەبوون لە پاشبنەما
ڕیزنەبوون لە پەنجەرەی بچووک
کردنەوەی پلیکانە
@@ -534,5 +535,5 @@
خۆکاری دانرا (هیچ بەرزکەرەوەیەک نەدۆزرایەوە)
دەگەڕێنرێتەوە
ناتوانرێ ئەم داگرتنە بهێنرێتەوە
- دۆزێک هەڵبژێرە
+ دۆخێک هەڵبژێرە
\ No newline at end of file
From deeac118a1661af4fbb961378850bceb0648a86b Mon Sep 17 00:00:00 2001
From: Daniele Lira Mereb
Date: Mon, 6 Jan 2020 16:18:31 +0000
Subject: [PATCH 0097/1194] Translated using Weblate (Portuguese (Brazil))
Currently translated at 97.3% (508 of 522 strings)
---
app/src/main/res/values-pt-rBR/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index febc9ef41..9aeb53b3b 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -525,4 +525,6 @@ abrir em modo popup
- %s ouvintes
O idioma será atualizado assim que o aplicativo for reiniciado.
+ Duração do avançar/retroceder rápido
+ Instâncias PeerTube
\ No newline at end of file
From 41e18ae6948ef30475fe1e317d94de183f852ca4 Mon Sep 17 00:00:00 2001
From: pjammo
Date: Mon, 6 Jan 2020 08:24:21 +0000
Subject: [PATCH 0098/1194] Translated using Weblate (Italian)
Currently translated at 100.0% (522 of 522 strings)
---
app/src/main/res/values-it/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 3af36f579..4942f4720 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -1,6 +1,6 @@
- %1$s visualizzazioni
+ %1$ visualizzazioni
Pubblicato il %1$s
Nessun lettore multimediale trovato. Vuoi installare VLC\?
Installa
@@ -121,7 +121,7 @@
Modalità popup di NewPipe
Riproduzione in Modalità Popup
Disattivato
- Non riproduce l\'audio con ALCUNE risoluzioni
+ L\'audio potrebbe non essere disponibile per ALCUNE risoluzioni
In sottofondo
Popup
Risoluzione Predefinita Popup
From dad88b83fb4e9236c6d71521fd6a0edbd1a2e06d Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Tue, 7 Jan 2020 22:32:54 +0100
Subject: [PATCH 0099/1194] Fix Arabic translation
---
app/src/main/res/values-ar/strings.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index f0e2f9d0a..b1dad5672 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -544,7 +544,6 @@
مثيلات خوادم پيرتيوب
عيّن مثيلات خوادم پيرتيوب التي تُفضّلها
إضافة نموذج
- إضافة مثيل خادم
أدخل رابط مثيل الخادم
فشل في التحقق من مثيل الخادم
فقط عناوين https المدعومة
From 8de367e03f1d9b1640e730e35988a292f022cbf5 Mon Sep 17 00:00:00 2001
From: decarvalhobo
Date: Mon, 2 Dec 2019 22:20:43 +0100
Subject: [PATCH 0100/1194] fix issue: thumbnail update when element deleted +
thumbnail update when element added and no thumbnail
---
.../local/dialog/PlaylistAppendDialog.java | 16 +++++++++++++---
.../local/playlist/LocalPlaylistFragment.java | 14 ++++++++++++++
.../local/playlist/LocalPlaylistManager.java | 4 ++++
3 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
index ac02b0b37..72df33576 100644
--- a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
@@ -152,9 +152,19 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
final Toast successToast = Toast.makeText(getContext(),
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
- playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(ignored -> successToast.show()));
+ if(playlist.thumbnailUrl.equals("https://i.ytimg.com/")){ //empty playlist
+ playlistDisposables.add(manager.createPlaylist(playlist.name, streams)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(ignored -> successToast.show()));
+ playlistDisposables.add(manager.deletePlaylist(playlist.uid)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(ignored -> successToast.show()));
+ }
+ else {
+ playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(ignored -> successToast.show()));
+ }
getDialog().dismiss();
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
index c60cdac3f..35451d344 100644
--- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
@@ -413,10 +413,24 @@ public class LocalPlaylistFragment extends BaseLocalListFragment modifyPlaylist(final long playlistId,
@Nullable final String name,
@Nullable final String thumbnailUrl) {
From e9a4caaf0b35ec6ad3e4269dd1a6b924860c2101 Mon Sep 17 00:00:00 2001
From: De Carvalho Marcio Antonio
Date: Tue, 3 Dec 2019 01:18:41 +0100
Subject: [PATCH 0101/1194] remove comments
---
.../schabi/newpipe/local/playlist/LocalPlaylistFragment.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
index 35451d344..34278382a 100644
--- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
@@ -428,7 +428,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment
Date: Tue, 3 Dec 2019 01:19:48 +0100
Subject: [PATCH 0102/1194] remove comments
---
.../org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
index 72df33576..f34e016b7 100644
--- a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
@@ -152,7 +152,7 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
final Toast successToast = Toast.makeText(getContext(),
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
- if(playlist.thumbnailUrl.equals("https://i.ytimg.com/")){ //empty playlist
+ if(playlist.thumbnailUrl.equals("https://i.ytimg.com/")){
playlistDisposables.add(manager.createPlaylist(playlist.name, streams)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ignored -> successToast.show()));
From 752a76eb443c1b78a804b2c391cd5f903f8eca75 Mon Sep 17 00:00:00 2001
From: decarvalhobo
Date: Wed, 4 Dec 2019 19:24:34 +0100
Subject: [PATCH 0103/1194] Usage of drawable instead of remote image +
refactor the append to an empty playlist by just updating the thumbnail
before adding the item in it.
---
.../local/dialog/PlaylistAppendDialog.java | 16 ++++++----------
.../local/playlist/LocalPlaylistFragment.java | 2 +-
2 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
index f34e016b7..884fec599 100644
--- a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
@@ -152,20 +152,16 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
final Toast successToast = Toast.makeText(getContext(),
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
- if(playlist.thumbnailUrl.equals("https://i.ytimg.com/")){
- playlistDisposables.add(manager.createPlaylist(playlist.name, streams)
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(ignored -> successToast.show()));
- playlistDisposables.add(manager.deletePlaylist(playlist.uid)
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(ignored -> successToast.show()));
- }
- else {
- playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
+ if(playlist.thumbnailUrl.equals("drawable://" + R.drawable.dummy_thumbnail_playlist)){
+ playlistDisposables.add(manager.changePlaylistThumbnail(playlist.uid,streams.get(0).getThumbnailUrl())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ignored -> successToast.show()));
}
+ playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(ignored -> successToast.show()));
+
getDialog().dismiss();
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
index 34278382a..af9ef0037 100644
--- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
@@ -419,7 +419,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment
Date: Tue, 7 Jan 2020 22:48:35 +0100
Subject: [PATCH 0104/1194] Fix code style and improve imports
---
.../local/dialog/PlaylistAppendDialog.java | 13 ++++++------
.../local/playlist/LocalPlaylistFragment.java | 20 ++++++++++---------
2 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
index 884fec599..81058eee6 100644
--- a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java
@@ -1,15 +1,16 @@
package org.schabi.newpipe.local.dialog;
import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.LocalItem;
@@ -152,8 +153,8 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
final Toast successToast = Toast.makeText(getContext(),
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
- if(playlist.thumbnailUrl.equals("drawable://" + R.drawable.dummy_thumbnail_playlist)){
- playlistDisposables.add(manager.changePlaylistThumbnail(playlist.uid,streams.get(0).getThumbnailUrl())
+ if (playlist.thumbnailUrl.equals("drawable://" + R.drawable.dummy_thumbnail_playlist)) {
+ playlistDisposables.add(manager.changePlaylistThumbnail(playlist.uid, streams.get(0).getThumbnailUrl())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ignored -> successToast.show()));
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
index af9ef0037..9f21e05ff 100644
--- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
@@ -4,11 +4,6 @@ import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.AlertDialog;
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.recyclerview.widget.ItemTouchHelper;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -18,6 +13,12 @@ import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.recyclerview.widget.ItemTouchHelper;
+import androidx.recyclerview.widget.RecyclerView;
+
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
import org.schabi.newpipe.NewPipeDatabase;
@@ -416,10 +417,11 @@ public class LocalPlaylistFragment extends BaseLocalListFragment
Date: Sun, 29 Dec 2019 17:56:32 -0300
Subject: [PATCH 0105/1194] fixup * [DownloadDialog.java] use *.opus extension
instead of *.webm (bad change from
https://github.com/TeamNewPipe/NewPipe/pull/2679/commits/844f80a5f1b0762a043afd2b4aec63b402830e53)
* [StreamItemAdapter.java] show "opus" in format label instead of "WebM Opus"
---
.../org/schabi/newpipe/download/DownloadDialog.java | 12 ++++++++++--
.../org/schabi/newpipe/util/StreamItemAdapter.java | 10 +++++++++-
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
index 4fbf4ab5f..853bb6d68 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
@@ -559,8 +559,16 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
case R.id.audio_button:
mainStorage = mainStorageAudio;
format = audioStreamsAdapter.getItem(selectedAudioIndex).getFormat();
- mime = format.mimeType;
- filename += format.suffix;
+ switch(format) {
+ case WEBMA_OPUS:
+ mime = "audio/ogg";
+ filename += "opus";
+ break;
+ default:
+ mime = format.mimeType;
+ filename += format.suffix;
+ break;
+ }
break;
case R.id.video_button:
mainStorage = mainStorageVideo;
diff --git a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java
index 312c47263..cb2fae4f0 100644
--- a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java
+++ b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java
@@ -140,7 +140,15 @@ public class StreamItemAdapter extends BaseA
if (stream instanceof SubtitlesStream) {
formatNameView.setText(((SubtitlesStream) stream).getLanguageTag());
} else {
- formatNameView.setText(stream.getFormat().getName());
+ switch (stream.getFormat()) {
+ case WEBMA_OPUS:
+ // noinspection AndroidLintSetTextI18n
+ formatNameView.setText("opus");
+ break;
+ default:
+ formatNameView.setText(stream.getFormat().getName());
+ break;
+ }
}
qualityView.setText(qualityString);
From e2e0a9bfa2193ed9d9487832daf5ee73882db6dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Wed, 8 Jan 2020 17:51:35 +0100
Subject: [PATCH 0106/1194] Spelling: Could not, PeerTube, HTTPS, URL
---
app/src/main/res/values/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a296e2db7..0e4bdf751 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -113,13 +113,13 @@
Service
Default content language
PeerTube instances
- Set your favorite peertube instances
+ Set your favorite PeerTube instances
Find the instances that best suit you on %s
https://joinpeertube.org/instances#instances-list
Add instance
- Enter instance url
- Failed to validate instance
- Only https urls are supported
+ Enter instance URL
+ Could not validate instance
+ Only HTTPS URLs are supported
Instance already exists
Player
Behavior
From d316bbad442da95a58a79ae0d2101d51ebf73675 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Wed, 8 Jan 2020 18:22:17 +0100
Subject: [PATCH 0107/1194] Select your favorite
Co-Authored-By: Stypox
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0e4bdf751..54ae40d1d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -113,7 +113,7 @@
Service
Default content language
PeerTube instances
- Set your favorite PeerTube instances
+ Select your favorite PeerTube instances
Find the instances that best suit you on %s
https://joinpeertube.org/instances#instances-list
Add instance
From 1602ecbaf9ceb6e69516f10d8890439ab3fed3b3 Mon Sep 17 00:00:00 2001
From: Software In Interlingua
Date: Wed, 8 Jan 2020 03:47:45 +0000
Subject: [PATCH 0108/1194] Translated using Weblate (Interlingua)
Currently translated at 11.1% (58 of 522 strings)
---
app/src/main/res/values-ia/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml
index 981724304..f077e3e24 100644
--- a/app/src/main/res/values-ia/strings.xml
+++ b/app/src/main/res/values-ia/strings.xml
@@ -32,4 +32,5 @@
Initiar discargas
Pausar le discargas
Seliger un instantia
+ Non poteva connecter con le servitor
\ No newline at end of file
From 99bcd8d043f15bfc6d2c6cd7f6ad04e23f258910 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Wed, 8 Jan 2020 16:44:00 +0000
Subject: [PATCH 0109/1194] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?=
=?UTF-8?q?gian=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 96.0% (501 of 522 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index d874e9b0e..8afd21f54 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -516,4 +516,5 @@
Språk vil ikke bli endret før programmet startes på ny.
Forvalgt kiosk
+ PeerTube-instanser
\ No newline at end of file
From 694013c9df5c4ace38ca4a825b38e9db9c3b487b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Wed, 8 Jan 2020 21:55:17 +0100
Subject: [PATCH 0110/1194] Spelling: Language reworked 2
---
app/src/main/res/values/strings.xml | 74 ++++++++++++++---------------
1 file changed, 37 insertions(+), 37 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 54ae40d1d..0b20edd7d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,10 +1,10 @@
NewPipe
- Tap search to get started
+ Tap \"Search\" to get started
%1$s views
Published on %1$s
- No stream player found. Do you want to install VLC?
+ No stream player found. Install VLC?
No stream player found (you can install VLC to play it).
Install
Cancel
@@ -16,14 +16,14 @@
Download stream file
Search
Settings
- Did you mean: %1$s\?
+ Did you mean: %1$s?
Share with
Choose browser
rotation
Use external video player
- Removes audio at SOME resolutions
+ Removes audio at some resolutions
Use external audio player
- NewPipe popup mode
+ Popup mode
RSS
Subscribe
Subscribed
@@ -43,24 +43,24 @@
Add To
Video download folder
Downloaded video files are stored here
- Choose the download folder for video files
+ Choose download folder for video files
Audio download folder
Downloaded audio files are stored here
- Choose the download folder for audio files
+ Choose download folder for audio files
Change the download folders to take effect
Autoplay
Plays a video when NewPipe is called from another app
Default resolution
Default popup resolution
Show higher resolutions
- Only some devices support playing 2K/4K videos
+ Only some devices can play 2K/4K videos
Play with Kodi
- Kore app not found. Install it?
+ Install missing Kore app?
org.xbmc.kore
Show \"Play with Kodi\" option
- Enable lock screen video thumbnail
- Display an option to play a video via Kodi media center
- When using the background player a video thumbnail will be displayed on the lock screen
+ Lock screen video thumbnail
+ Displayed option to play a video via Kodi media center
+ Using the background player displays a video thumbnail on the lock screen
Audio
Default audio format
Default video format
@@ -75,20 +75,20 @@
Fast-forward/-rewind seek duration
Load thumbnails
Show comments
- Disable to stop showing comments
+ Turn off to hide comments
Turn off to prevent loading thumbnails, saving data and memory usage. Changes clear both in-memory and on-disk image cache.
Image cache wiped
Wipe cached metadata
Remove all cached webpage data
Metadata cache wiped
Auto-queue next stream
- Auto-append a related stream when playing the last stream in a non-repeating queue
+ Auto-append a related stream (to non-repeating queue) after last file
Volume gesture control
- Use gestures to control the volume of the player
+ Use gestures to control player volume
Brightness gesture control
- Use gestures to control the brightness of the player
+ Use gestures to control player brightness
Player gesture controls
- Use gestures to control the brightness and volume of the player
+ Use gestures to control player brightness and volume
Search suggestions
Show suggestions when searching
Search history
@@ -100,21 +100,21 @@
Show playback position indicators in lists
Clear data
Keep track of watched videos
- Resume on focus gain
- Continue playing after interruptions (e.g. phone calls)
+ Resumed playing
+ Continue playing after interruptions (e.g. phonecalls)
Download
Next
Autoplay
Show \'Next\' and \'Similar\' videos
Show \"Hold to append\" tip
- Show tip when background or popup button is pressed on video details page
+ Show tip when pressing the background or the popup button in video \"Details:\"
Unsupported URL
Default content country
Service
Default content language
PeerTube instances
Select your favorite PeerTube instances
- Find the instances that best suit you on %s
+ Find the instances you like on %s
https://joinpeertube.org/instances#instances-list
Add instance
Enter instance URL
@@ -138,9 +138,9 @@
Play
Content
Age restricted content
- Show age restricted video. Allowing such material is possible from Settings.
- LIVE
- LIVE
+ Show age restricted video. Future changes are possible from \"Settings\".
+ Live
+ Live
Downloads
Downloads
Error report
@@ -198,7 +198,7 @@
Error
External storage unavailable
- Downloading to external SD card not possible. Reset download folder location\?
+ Downloading to external SD card not possible. Reset download folder location?
Network error
Could not load all thumbnails
Could not decrypt video URL signature
@@ -224,15 +224,15 @@
Filename cannot be empty
An error occurred: %1$s
No streams available to download
- Using default tabs, error while reading saved tabs
+ Could not read saved tabs, so using default ones
Restore defaults
- Do you want to restore the defaults?
+ Do you want to restore defaults?
Sorry, that should not have happened.
Guru Meditation.
- Report error via e-mail
+ Report this per e-mail
Sorry, some errors occurred.
- REPORT
+ Report
Info:
What happened:
What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:
@@ -246,7 +246,7 @@
Dislikes
Use Tor
(Experimental) Force download traffic through Tor for increased privacy (streaming videos not yet supported).
- Report an Error
+ Report Error
User report
No results
@string/no_videos
@@ -258,7 +258,7 @@
Video
Audio
Retry
- Storage access permission denied
+ Grant access to storage first
k
M
B
@@ -269,7 +269,7 @@
- %s subscriber
- %s subscribers
- Subscribers count not available
+ Subscriber count unavailable
No views
- %s view
@@ -355,7 +355,7 @@
https://github.com/TeamNewPipe/NewPipe
View on GitHub
Donate
- NewPipe is developed by volunteers spending time bringing you the best experience. Give back to help developers make NewPipe even better while enjoying a cup of coffee.
+ NewPipe is developed by volunteers spending time bringing you the best experience. Give back to help make NewPipe even better.
https://newpipe.schabi.org/donate
Give back
Website
@@ -466,7 +466,7 @@
Captions
Modify player caption text scale and background styles. Requires app restart to take effect.
- Enable LeakCanary
+ LeakCanary
Memory leak monitoring may cause the app to become unresponsive when heap dumping
Report out-of-lifecycle errors
Force reporting of undeliverable Rx exceptions outside of fragment or activity lifecycle after disposal
@@ -529,7 +529,7 @@
Auto
Switch View
- NewPipe Update Available!
+ There is a fresh NewPipe version available!
Tap to download
Finished
Pending
@@ -557,7 +557,7 @@
The file can not be created
The destination folder can not be created
Permission denied by the system
- Secure connection failed
+ Could not connect securely
Could not find the server
Can not connect to the server
The server does not send data
@@ -585,7 +585,7 @@
You will be asked where to save each download
You will be asked where to save each download.\nChoose SAF if you want to download to an external SD card
Use SAF
- The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
+ The Storage Access Framework allows downloads to an external SD card.\nNote: Some devices are incompatible
Choose an instance
From bff5371e419002e4a5965fe8047bed8e26098d72 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Thu, 9 Jan 2020 01:44:21 +0000
Subject: [PATCH 0111/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-ru/strings.xml | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 5230f00a2..f3fdbbc18 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -524,12 +524,12 @@
Язык будет изменён после перезапуска
Перемотка двойным нажатием
Серверы PeerTube
- Настройте предпочтительные серверы PeerTube
- Выберите подходящие серверы на https://joinpeertube.org/instances#instances-list
+ Выберите предпочтительные серверы PeerTube
+ Выберите подходящие серверы на %s
Новый сервер
URL сервера
Не удалось проверить сервер
- Поддерживается только https
+ Поддерживается только HTTPS
Сервер уже существует
Локальное
Новое
@@ -538,4 +538,6 @@
восстановление
Не удалось восстановить загрузку
Выберите сервер
+ Миниатюра на экране блокировки
+ Показать миниатюру видео на экране блокировки при воспроизведении в фоне
\ No newline at end of file
From 6bc697f92601b966702fc15a30add41b7772ce51 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Thu, 9 Jan 2020 04:36:39 +0100
Subject: [PATCH 0112/1194] Continue ending playback queue
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0b20edd7d..f1896c7ba 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -82,7 +82,7 @@
Remove all cached webpage data
Metadata cache wiped
Auto-queue next stream
- Auto-append a related stream (to non-repeating queue) after last file
+ Continue ending (non-repeating) playback queue by appending a related stream
Volume gesture control
Use gestures to control player volume
Brightness gesture control
From bca547ce44021c32a6b99a1ab059174a2f215177 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Thu, 9 Jan 2020 04:38:47 +0100
Subject: [PATCH 0113/1194] \'Storage Access Framework\'
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f1896c7ba..940008aae 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -585,7 +585,7 @@
You will be asked where to save each download
You will be asked where to save each download.\nChoose SAF if you want to download to an external SD card
Use SAF
- The Storage Access Framework allows downloads to an external SD card.\nNote: Some devices are incompatible
+ The \'Storage Access Framework\' allows downloads to an external SD card.\nNote: Some devices are incompatible
Choose an instance
From 3ad0e313caee037d42ea9a4ef89e80fbd04d9a2f Mon Sep 17 00:00:00 2001
From: bopol
Date: Thu, 9 Jan 2020 09:40:05 +0100
Subject: [PATCH 0114/1194] =?UTF-8?q?changed=20the=20way=20to=20change=20l?=
=?UTF-8?q?anguage,=20now=20is=20=C2=ABNewPipe's=20language=C2=BB=20select?=
=?UTF-8?q?or?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/schabi/newpipe/MainActivity.java | 8 +-
.../schabi/newpipe/about/AboutActivity.java | 6 +
.../newpipe/download/DownloadActivity.java | 6 +
.../settings/ContentSettingsFragment.java | 5 +-
.../newpipe/settings/SettingsActivity.java | 7 +-
.../org/schabi/newpipe/util/Localization.java | 26 ++-
app/src/main/res/values-ur/strings.xml | 10 +-
app/src/main/res/values/settings_keys.xml | 159 ++++++++++++++++--
app/src/main/res/values/strings.xml | 1 +
app/src/main/res/xml/content_settings.xml | 10 ++
10 files changed, 209 insertions(+), 29 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index cac814085..05e224013 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -56,7 +56,6 @@ import androidx.fragment.app.FragmentManager;
import com.google.android.material.navigation.NavigationView;
import org.schabi.newpipe.extractor.NewPipe;
-import org.schabi.newpipe.extractor.ServiceList;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance;
@@ -67,7 +66,6 @@ import org.schabi.newpipe.fragments.list.search.SearchFragment;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.KioskTranslator;
-import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PeertubeHelper;
import org.schabi.newpipe.util.PermissionHelper;
@@ -78,8 +76,10 @@ import org.schabi.newpipe.util.ThemeHelper;
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLanguage;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@@ -116,10 +116,9 @@ public class MainActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
TLSSocketFactoryCompat.setAsDefault();
}
-
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
- changeAppLanguage(Localization.getPreferredLocale(getApplicationContext()), getResources());
+ changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@@ -424,6 +423,7 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onResume() {
+ changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
super.onResume();
// close drawer on return, and don't show animation, so its looks like the drawer isn't open
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index 2326e795e..4da1611d3 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -25,6 +25,11 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
+import java.util.Locale;
+
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLanguage;
+
public class AboutActivity extends AppCompatActivity {
/**
@@ -62,6 +67,7 @@ public class AboutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
+ changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index 449a790e8..b8bfcf480 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -15,9 +15,14 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.settings.SettingsActivity;
import org.schabi.newpipe.util.ThemeHelper;
+import java.util.Locale;
+
import us.shandian.giga.service.DownloadManagerService;
import us.shandian.giga.ui.fragment.MissionsFragment;
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLanguage;
+
public class DownloadActivity extends AppCompatActivity {
private static final String MISSIONS_FRAGMENT_TAG = "fragment_tag";
@@ -29,6 +34,7 @@ public class DownloadActivity extends AppCompatActivity {
i.setClass(this, DownloadManagerService.class);
startService(i);
+ changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
ThemeHelper.setTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_downloader);
diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
index 0c7a4b46e..88c700582 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
@@ -56,6 +56,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
private Localization initialSelectedLocalization;
private ContentCountry initialSelectedContentCountry;
+ private String initialLanguage;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -64,6 +65,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
initialSelectedLocalization = org.schabi.newpipe.util.Localization.getPreferredLocalization(requireContext());
initialSelectedContentCountry = org.schabi.newpipe.util.Localization.getPreferredContentCountry(requireContext());
+ initialLanguage = androidx.preference.PreferenceManager.getDefaultSharedPreferences(getContext()).getString("newpipes_language_key", "en");
}
@Override
@@ -125,9 +127,10 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
.getPreferredLocalization(requireContext());
final ContentCountry selectedContentCountry = org.schabi.newpipe.util.Localization
.getPreferredContentCountry(requireContext());
+ final String selectedLanguage = androidx.preference.PreferenceManager.getDefaultSharedPreferences(getContext()).getString("newpipes_language_key", "en");
if (!selectedLocalization.equals(initialSelectedLocalization)
- || !selectedContentCountry.equals(initialSelectedContentCountry)) {
+ || !selectedContentCountry.equals(initialSelectedContentCountry) || !selectedLanguage.equals(initialLanguage)) {
Toast.makeText(requireContext(), R.string.localization_changes_requires_app_restart, Toast.LENGTH_LONG).show();
NewPipe.setupLocalization(selectedLocalization, selectedContentCountry);
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
index a3f218074..40af9f460 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
@@ -14,6 +14,11 @@ import android.view.MenuItem;
import org.schabi.newpipe.R;
import org.schabi.newpipe.util.ThemeHelper;
+import java.util.Locale;
+
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLanguage;
+
/*
* Created by Christian Schabesberger on 31.08.15.
@@ -44,7 +49,7 @@ public class SettingsActivity extends AppCompatActivity implements BasePreferenc
@Override
protected void onCreate(Bundle savedInstanceBundle) {
setTheme(ThemeHelper.getSettingsThemeStyle(this));
-
+ changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
super.onCreate(savedInstanceBundle);
setContentView(R.layout.settings_layout);
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index 6b0b4cd0c..7d742b04a 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -7,6 +7,11 @@ import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.DisplayMetrics;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.PluralsRes;
+import androidx.annotation.StringRes;
import org.ocpsoft.prettytime.PrettyTime;
import org.ocpsoft.prettytime.units.Decade;
@@ -21,10 +26,6 @@ import java.util.Date;
import java.util.List;
import java.util.Locale;
-import androidx.annotation.NonNull;
-import androidx.annotation.PluralsRes;
-import androidx.annotation.StringRes;
-
/*
* Created by chschtsch on 12/29/15.
*
@@ -226,4 +227,21 @@ public class Localization {
conf.setLocale(loc);
res.updateConfiguration(conf, dm);
}
+
+ public static Locale getAppLanguage(Context context) {
+ SharedPreferences prefs = androidx.preference.PreferenceManager.getDefaultSharedPreferences(context);
+ String lang = prefs.getString("newpipes_language_key", "en");
+ Locale loc;
+ if (lang.equals("system")) {
+ loc = Locale.getDefault();
+ } else if (lang.matches(".*-.*")) {
+ String[] localisation = lang.split("-");
+ lang = localisation[0];
+ String country = localisation[1];
+ loc = new Locale(lang, country);
+ } else {
+ loc = new Locale(lang);
+ }
+ return loc;
+ }
}
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 089b793c8..ce6f3f651 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -193,13 +193,13 @@
بی
کوئی صارفین نہیں
- - % s صارف
- - % s صارفین
+ - %s صارف
+ - %s صارفین
کوئی مناظر نہیں
- - % s منظر
- - % s مناظر
+ - %s منظر
+ - %s مناظر
ویڈیوز دستیاب نہیں
@@ -388,7 +388,7 @@
کوئی حد نہیں
موبائل ڈیٹا کا استعمال کرتے وقت ریذولوشن کو محدود کریں
ایپ سوئچ کو کم سے کم کریں
- اہم ویڈیو پلیئر سے دوسرے ایپ میں سوئچنگ کرتے وقت کارروائی-% s
+ اہم ویڈیو پلیئر سے دوسرے ایپ میں سوئچنگ کرتے وقت کارروائی-s%
کوئی نہیں
پس منظری پلیر میں کم کریں
پاپ اپ پلیر میں کم کریں
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 3f361226d..299803a43 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -31,20 +31,20 @@
seek_duration
10000
- - 5 seconds
- - 10 seconds
- - 15 seconds
- - 20 seconds
- - 25 seconds
- - 30 seconds
+ - 5 seconds
+ - 10 seconds
+ - 15 seconds
+ - 20 seconds
+ - 25 seconds
+ - 30 seconds
- - 5000
- - 10000
- - 15000
- - 20000
- - 25000
- - 30000
+ - 5000
+ - 10000
+ - 15000
+ - 20000
+ - 25000
+ - 30000
minimize_on_exit_key
@@ -175,6 +175,7 @@
main_page_content
enable_playback_resume
enable_playback_state_lists
+ newpipes_language_key
import_data
export_data
@@ -272,7 +273,6 @@
- cs
- da
- de
- - eo
- et
- en-GB
- en
@@ -352,7 +352,6 @@
- Čeština
- Dansk
- Deutsch
- - Esperanto
- Eesti
- English (UK)
- English (US)
@@ -925,6 +924,137 @@
- ZW
+
+
+ - system
+ - ar
+ - az
+ - ast
+ - be
+ - bg-bd
+ - bn
+ - ca
+ - cs
+ - da
+ - de
+ - el
+ - en
+ - eo
+ - es
+ - et
+ - eu
+ - fa
+ - fi
+ - fil
+ - fr
+ - gl
+ - he
+ - hi
+ - hr
+ - hu
+ - hy
+ - ia
+ - ind
+ - it
+ - ja
+ - ko
+ - ku
+ - lt
+ - mk
+ - ms
+ - nb-no
+ - ne
+ - nl
+ - nl-be
+ - pa
+ - pl
+ - pr
+ - pt
+ - pt-br
+ - ro
+ - ru
+ - sk
+ - sl
+ - sq
+ - sr
+ - sv
+ - ta
+ - te
+ - th
+ - tr
+ - uk
+ - ur
+ - vi
+ - zh
+ - zh-hans
+ - zh-tw
+
+
+ - @string/system
+ - العربية
+ - Azərbaycan dili
+ - Asturianu
+ - Беларуская
+ - български език
+ - বাংলা
+ - Català
+ - Čeština
+ - Dansk
+ - Deutsch
+ - Ελληνικά
+ - English
+ - Esperanto
+ - Español
+ - Eesti keel
+ - Euskara
+ - فارسی
+ - Suomen kieli
+ - Wikang Filipino
+ - Français
+ - Galego
+ - עברית
+ - हिन्दी
+ - Hrvatski
+ - magyar
+ - Հայերեն
+ - Interlingua
+ - Bahasa Indonesia
+ - Italiano
+ - 日本語
+ - 한국어
+ - کوردی
+ - Lietuvių kalba
+ - македонски јазик
+ - Bahasa Melayu
+ - Norsk bokmål
+ - Nनेपाली
+ - Nederlands (NL)
+ - Nederlands (BE)
+ - ਪੰਜਾਬੀ
+ - Polski
+ - Pirate Language
+ - Português (PT)
+ - Português (BR)
+ - Română
+ - русский язык
+ - Slovenčina
+ - Slovenščina
+ - Shqip
+ - Српски
+ - Svenska
+ - தமிழ்
+ - తెలుగు
+ - ไทย
+ - Türkçe
+ - українська мова
+ - اردو
+ - Tiếng Việt
+ - 官话
+ - 简化字
+ - 臺灣華語
+
+
+
limit_mobile_data_usage
limit_data_usage_none
@@ -943,6 +1073,7 @@
list_view_mode
auto
+ System
- auto
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6021df15e..12a96fe74 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -585,5 +585,6 @@
Use SAF
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
+ NewPipe\'s language
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index 4044e92d8..ab9896cde 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -3,6 +3,16 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:title="@string/content">
+
+
+
Date: Thu, 9 Jan 2020 12:15:01 +0100
Subject: [PATCH 0115/1194] removed unused imports
---
app/src/main/java/org/schabi/newpipe/MainActivity.java | 1 -
app/src/main/java/org/schabi/newpipe/about/AboutActivity.java | 2 --
.../main/java/org/schabi/newpipe/download/DownloadActivity.java | 2 --
.../main/java/org/schabi/newpipe/settings/SettingsActivity.java | 2 --
4 files changed, 7 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 05e224013..eb5f11987 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -76,7 +76,6 @@ import org.schabi.newpipe.util.ThemeHelper;
import java.util.ArrayList;
import java.util.List;
-import java.util.Locale;
import static org.schabi.newpipe.util.Localization.changeAppLanguage;
import static org.schabi.newpipe.util.Localization.getAppLanguage;
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index 4da1611d3..3555ecefe 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -25,8 +25,6 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
-import java.util.Locale;
-
import static org.schabi.newpipe.util.Localization.changeAppLanguage;
import static org.schabi.newpipe.util.Localization.getAppLanguage;
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index b8bfcf480..bf546bf85 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -15,8 +15,6 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.settings.SettingsActivity;
import org.schabi.newpipe.util.ThemeHelper;
-import java.util.Locale;
-
import us.shandian.giga.service.DownloadManagerService;
import us.shandian.giga.ui.fragment.MissionsFragment;
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
index 40af9f460..781c033b8 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
@@ -14,8 +14,6 @@ import android.view.MenuItem;
import org.schabi.newpipe.R;
import org.schabi.newpipe.util.ThemeHelper;
-import java.util.Locale;
-
import static org.schabi.newpipe.util.Localization.changeAppLanguage;
import static org.schabi.newpipe.util.Localization.getAppLanguage;
From b32935a1b087bbc6d19fb7e50493273796d2ffb4 Mon Sep 17 00:00:00 2001
From: bopol
Date: Thu, 9 Jan 2020 15:51:41 +0100
Subject: [PATCH 0116/1194] app language now changes time formatting (3hrs
ago), was system language b4
---
app/src/main/java/org/schabi/newpipe/App.java | 2 +-
.../java/org/schabi/newpipe/MainActivity.java | 8 +++++---
.../org/schabi/newpipe/about/AboutActivity.java | 4 ++--
.../newpipe/download/DownloadActivity.java | 4 ++--
.../newpipe/settings/SettingsActivity.java | 4 ++--
.../org/schabi/newpipe/util/Localization.java | 17 ++++++++---------
6 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java
index 7f050e6c7..dae143b6c 100644
--- a/app/src/main/java/org/schabi/newpipe/App.java
+++ b/app/src/main/java/org/schabi/newpipe/App.java
@@ -99,7 +99,7 @@ public class App extends Application {
NewPipe.init(getDownloader(),
Localization.getPreferredLocalization(this),
Localization.getPreferredContentCountry(this));
- Localization.init();
+ Localization.init(getApplicationContext());
StateSaver.init(this);
initNotificationChannel();
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index eb5f11987..d48db1035 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -66,6 +66,7 @@ import org.schabi.newpipe.fragments.list.search.SearchFragment;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.KioskTranslator;
+import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PeertubeHelper;
import org.schabi.newpipe.util.PermissionHelper;
@@ -78,7 +79,7 @@ import java.util.ArrayList;
import java.util.List;
import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@@ -117,7 +118,7 @@ public class MainActivity extends AppCompatActivity {
}
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
- changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@@ -422,7 +423,8 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onResume() {
- changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ Localization.init(getApplicationContext()); //change the date format to match the selected language on resume
super.onResume();
// close drawer on return, and don't show animation, so its looks like the drawer isn't open
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index 3555ecefe..795feceb0 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -26,7 +26,7 @@ import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
public class AboutActivity extends AppCompatActivity {
@@ -65,7 +65,7 @@ public class AboutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
- changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index bf546bf85..fd0d28a0e 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -19,7 +19,7 @@ import us.shandian.giga.service.DownloadManagerService;
import us.shandian.giga.ui.fragment.MissionsFragment;
import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
public class DownloadActivity extends AppCompatActivity {
@@ -32,7 +32,7 @@ public class DownloadActivity extends AppCompatActivity {
i.setClass(this, DownloadManagerService.class);
startService(i);
- changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
ThemeHelper.setTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_downloader);
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
index 781c033b8..6804f9831 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
@@ -15,7 +15,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
/*
@@ -47,7 +47,7 @@ public class SettingsActivity extends AppCompatActivity implements BasePreferenc
@Override
protected void onCreate(Bundle savedInstanceBundle) {
setTheme(ThemeHelper.getSettingsThemeStyle(this));
- changeAppLanguage(getAppLanguage(getApplicationContext()), getResources());
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
super.onCreate(savedInstanceBundle);
setContentView(R.layout.settings_layout);
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index 7d742b04a..695a73295 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -7,7 +7,6 @@ import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.DisplayMetrics;
-import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.PluralsRes;
@@ -54,8 +53,8 @@ public class Localization {
private Localization() {
}
- public static void init() {
- initPrettyTime();
+ public static void init(Context context) {
+ initPrettyTime(context);
}
@NonNull
@@ -203,17 +202,17 @@ public class Localization {
// Pretty Time
//////////////////////////////////////////////////////////////////////////*/
- private static void initPrettyTime() {
- prettyTime = new PrettyTime(Locale.getDefault());
+ private static void initPrettyTime(Context context) {
+ prettyTime = new PrettyTime(getAppLocale(context));
// Do not use decades as YouTube doesn't either.
prettyTime.removeUnit(Decade.class);
}
private static PrettyTime getPrettyTime() {
// If pretty time's Locale is different, init again with the new one.
- if (!prettyTime.getLocale().equals(Locale.getDefault())) {
- initPrettyTime();
- }
+// if (!prettyTime.getLocale().equals(Locale.getDefault())) {
+// initPrettyTime();
+// }
return prettyTime;
}
@@ -228,7 +227,7 @@ public class Localization {
res.updateConfiguration(conf, dm);
}
- public static Locale getAppLanguage(Context context) {
+ public static Locale getAppLocale(Context context) {
SharedPreferences prefs = androidx.preference.PreferenceManager.getDefaultSharedPreferences(context);
String lang = prefs.getString("newpipes_language_key", "en");
Locale loc;
From 99cdaec40e98b30cd04ea372dc5db8bee235cd7b Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 8 Jan 2020 19:58:11 +0000
Subject: [PATCH 0117/1194] Translated using Weblate (German)
Currently translated at 99.0% (520 of 525 strings)
---
app/src/main/res/values-de/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 17c2e55d0..6d4fe2e13 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -202,8 +202,8 @@
Keine Videos
- - Video
- - Videos
+ - %s Video
+ - %s Videos
Die meisten Sonderzeichen
Element gelöscht
@@ -518,7 +518,7 @@
Die Sprache ändert sich, sobald die App neu gestartet wird.
PeerTube-Instanzen
- Finde auf https://joinpeertube.org/instances#instances-list die Instanzen, die am besten zu dir passen
+ "Finde auf %s die Instanzen, die am besten zu dir passen"
Instanz hinzufügen
Gib die URL der Instanz ein
Validieren der Instanz fehlgeschlagen
From 8f46432391578b6602cea69ef344817857f75a7e Mon Sep 17 00:00:00 2001
From: bopol
Date: Fri, 10 Jan 2020 15:50:15 +0100
Subject: [PATCH 0118/1194] fixed some activities where the wrong languages
would be set
---
app/src/main/java/org/schabi/newpipe/MainActivity.java | 1 -
.../java/org/schabi/newpipe/about/AboutActivity.java | 1 +
.../java/org/schabi/newpipe/player/BackgroundPlayer.java | 4 +++-
.../java/org/schabi/newpipe/player/MainVideoPlayer.java | 9 +++++++--
.../java/org/schabi/newpipe/player/PopupVideoPlayer.java | 3 +++
.../org/schabi/newpipe/player/ServicePlayerActivity.java | 3 +++
.../java/org/schabi/newpipe/report/ErrorActivity.java | 4 ++++
.../main/java/org/schabi/newpipe/util/Localization.java | 4 ----
8 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index d48db1035..c5aedb85b 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -119,7 +119,6 @@ public class MainActivity extends AppCompatActivity {
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
-
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index 795feceb0..c8c62bbe7 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -68,6 +68,7 @@ public class AboutActivity extends AppCompatActivity {
changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
+ this.setTitle(getString(R.string.title_activity_about));
setContentView(R.layout.activity_about);
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index 76da7da36..c74882161 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -58,6 +58,8 @@ import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.player.helper.PlayerHelper.getTimeString;
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
/**
@@ -115,7 +117,7 @@ public final class BackgroundPlayer extends Service {
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
lockManager = new LockManager(this);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
-
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
ThemeHelper.setTheme(this);
basePlayerImpl = new BasePlayerImpl(this);
basePlayerImpl.setup();
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 7a3e60c66..284d10b42 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -93,6 +93,8 @@ import static org.schabi.newpipe.util.AnimationUtils.Type.SCALE_AND_ALPHA;
import static org.schabi.newpipe.util.AnimationUtils.Type.SLIDE_AND_ALPHA;
import static org.schabi.newpipe.util.AnimationUtils.animateRotation;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
import static org.schabi.newpipe.util.StateSaver.KEY_SAVED_STATE;
/**
@@ -123,6 +125,7 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
super.onCreate(savedInstanceState);
if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
defaultPreferences = PreferenceManager.getDefaultSharedPreferences(this);
@@ -190,6 +193,7 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
protected void onResume() {
if (DEBUG) Log.d(TAG, "onResume() called");
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
super.onResume();
if (globalScreenOrientationLocked()) {
@@ -220,6 +224,7 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
if (playerImpl.isSomePopupMenuVisible()) {
playerImpl.getQualityPopupMenu().dismiss();
@@ -364,8 +369,8 @@ public final class MainVideoPlayer extends AppCompatActivity
}
private boolean globalScreenOrientationLocked() {
- // 1: Screen orientation changes using acelerometer
- // 0: Screen orientatino is locked
+ // 1: Screen orientation changes using accelerometer
+ // 0: Screen orientation is locked
return !(android.provider.Settings.System.getInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 1);
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
index 969c47990..b173448d0 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
@@ -80,6 +80,8 @@ import static org.schabi.newpipe.player.BasePlayer.STATE_PLAYING;
import static org.schabi.newpipe.player.VideoPlayer.DEFAULT_CONTROLS_DURATION;
import static org.schabi.newpipe.player.VideoPlayer.DEFAULT_CONTROLS_HIDE_TIME;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
/**
* Service Popup Player implementing VideoPlayer
@@ -142,6 +144,7 @@ public final class PopupVideoPlayer extends Service {
@Override
public void onCreate() {
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 2207808ac..d5ee59a7e 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -46,6 +46,8 @@ import java.util.List;
import static org.schabi.newpipe.player.helper.PlayerHelper.formatPitch;
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
public abstract class ServicePlayerActivity extends AppCompatActivity
implements PlayerEventListener, SeekBar.OnSeekBarChangeListener,
@@ -116,6 +118,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
setContentView(R.layout.activity_player_queue_control);
diff --git a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
index e7a6319e3..05dfe33ca 100644
--- a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
@@ -46,6 +46,9 @@ import java.util.List;
import java.util.TimeZone;
import java.util.Vector;
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
+
/*
* Created by Christian Schabesberger on 24.10.15.
*
@@ -171,6 +174,7 @@ public class ErrorActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
setContentView(R.layout.activity_error);
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index 695a73295..3f555fcfd 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -209,10 +209,6 @@ public class Localization {
}
private static PrettyTime getPrettyTime() {
- // If pretty time's Locale is different, init again with the new one.
-// if (!prettyTime.getLocale().equals(Locale.getDefault())) {
-// initPrettyTime();
-// }
return prettyTime;
}
From 11d06dc86d8e1f0e2614251a1359e36dd537a81c Mon Sep 17 00:00:00 2001
From: bopol
Date: Fri, 10 Jan 2020 16:03:24 +0100
Subject: [PATCH 0119/1194] remove todo as it's already done
---
app/src/main/res/values/settings_keys.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 4bb66bf62..18f42fe46 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -1054,7 +1054,6 @@
- 官话
- 简化字
- 臺灣華語
-
From 707e4f7167b537804b6abf9ae11dbe5a128b3bb9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kamil=20Szcz=C4=99k?=
Date: Fri, 11 Oct 2019 15:07:51 +0200
Subject: [PATCH 0120/1194] Add option to remove downloaded files when clearing
finished downloads
---
.../shandian/giga/ui/adapter/MissionAdapter.java | 12 +++++++++++-
.../giga/ui/fragment/MissionsFragment.java | 8 +++++++-
app/src/main/res/layout/delete_files_checkbox.xml | 14 ++++++++++++++
app/src/main/res/values/strings.xml | 2 +-
4 files changed, 33 insertions(+), 3 deletions(-)
create mode 100644 app/src/main/res/layout/delete_files_checkbox.xml
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index 8420e343b..e20417aa9 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -19,6 +19,7 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.MimeTypeMap;
+import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
@@ -557,7 +558,16 @@ public class MissionAdapter extends Adapter implements Handler.Callb
);
}
- public void clearFinishedDownloads() {
+ public void clearFinishedDownloads(boolean delete) {
+ if (delete && mIterator.hasFinishedMissions()) {
+ for(int i=0; i mAdapter.clearFinishedDownloads());
+ prompt.setView(checkBoxView);
+ prompt.setPositiveButton(android.R.string.ok, (dialog, which) -> {
+ CheckBox checkBox = checkBoxView.findViewById(R.id.delete_files_checkbox);
+ mAdapter.clearFinishedDownloads(checkBox.isChecked());
+ });
prompt.setNegativeButton(R.string.cancel, null);
prompt.create().show();
return true;
diff --git a/app/src/main/res/layout/delete_files_checkbox.xml b/app/src/main/res/layout/delete_files_checkbox.xml
new file mode 100644
index 000000000..cbc6ecd10
--- /dev/null
+++ b/app/src/main/res/layout/delete_files_checkbox.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 54ae40d1d..d3899583b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -587,5 +587,5 @@
Use SAF
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
-
+ Delete downloaded files
From f6bbc69cf9a8db92aafb4c20bde999f3c90598c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kamil=20Szcz=C4=99k?=
Date: Fri, 11 Oct 2019 16:16:10 +0200
Subject: [PATCH 0121/1194] Remove unnecessary import
---
.../main/java/us/shandian/giga/ui/adapter/MissionAdapter.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index e20417aa9..ab3f22886 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -19,7 +19,6 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.MimeTypeMap;
-import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
From b18236a27e05076225f2b151560511d6279e36ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kamil=20Szcz=C4=99k?=
Date: Fri, 11 Oct 2019 16:36:47 +0200
Subject: [PATCH 0122/1194] Put call to forget finished downloads in an else
statement to prevent potential bugs
---
.../main/java/us/shandian/giga/ui/adapter/MissionAdapter.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index ab3f22886..4842e6b2e 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -566,8 +566,9 @@ public class MissionAdapter extends Adapter implements Handler.Callb
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri()));
}
}
+ } else if (!delete) {
+ mDownloadManager.forgetFinishedDownloads();
}
- mDownloadManager.forgetFinishedDownloads();
applyChanges();
}
From cfad3fb5ded10334317501fde5b18cf7859c6746 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kamil=20Szcz=C4=99k?=
Date: Wed, 11 Dec 2019 15:56:04 +0100
Subject: [PATCH 0123/1194] Fix inconsistent style
---
.../main/java/us/shandian/giga/ui/adapter/MissionAdapter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index 4842e6b2e..eea3f2795 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -559,7 +559,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb
public void clearFinishedDownloads(boolean delete) {
if (delete && mIterator.hasFinishedMissions()) {
- for(int i=0; i
Date: Fri, 13 Dec 2019 11:48:01 +0100
Subject: [PATCH 0124/1194] Use a dialog option instead of a checkbox
---
.../giga/ui/fragment/MissionsFragment.java | 8 ++------
app/src/main/res/layout/delete_files_checkbox.xml | 14 --------------
app/src/main/res/values/strings.xml | 2 +-
3 files changed, 3 insertions(+), 21 deletions(-)
delete mode 100644 app/src/main/res/layout/delete_files_checkbox.xml
diff --git a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
index edaa01e0f..98231cffe 100644
--- a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
+++ b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
@@ -190,14 +190,10 @@ public class MissionsFragment extends Fragment {
return true;
case R.id.clear_list:
AlertDialog.Builder prompt = new AlertDialog.Builder(mContext);
- View checkBoxView = View.inflate(this.getContext(), R.layout.delete_files_checkbox, null);
prompt.setTitle(R.string.clear_finished_download);
prompt.setMessage(R.string.confirm_prompt);
- prompt.setView(checkBoxView);
- prompt.setPositiveButton(android.R.string.ok, (dialog, which) -> {
- CheckBox checkBox = checkBoxView.findViewById(R.id.delete_files_checkbox);
- mAdapter.clearFinishedDownloads(checkBox.isChecked());
- });
+ prompt.setPositiveButton(R.string.clear_finished_download, (dialog, which) -> mAdapter.clearFinishedDownloads(false));
+ prompt.setNeutralButton(R.string.delete_downloaded_files, (dialog, which) -> mAdapter.clearFinishedDownloads(true));
prompt.setNegativeButton(R.string.cancel, null);
prompt.create().show();
return true;
diff --git a/app/src/main/res/layout/delete_files_checkbox.xml b/app/src/main/res/layout/delete_files_checkbox.xml
deleted file mode 100644
index cbc6ecd10..000000000
--- a/app/src/main/res/layout/delete_files_checkbox.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d3899583b..94a50972f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -570,7 +570,7 @@
Connection timeout
Cannot recover this download
Clear finished downloads
- Are you sure?
+ Do you want to clear your download history or delete all downloaded files?
Stop
Maximum retries
Maximum number of attempts before canceling the download
From 986acc5fc5962e67fd85f4034c4118932da136f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kamil=20Szcz=C4=99k?=
Date: Thu, 26 Dec 2019 16:15:30 +0100
Subject: [PATCH 0125/1194] Reorder buttons in clear downloads dialog
---
.../us/shandian/giga/ui/fragment/MissionsFragment.java | 9 +++++----
app/src/main/res/menu/download_menu.xml | 2 +-
app/src/main/res/values/strings.xml | 2 +-
3 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
index 98231cffe..be0b0bb25 100644
--- a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
+++ b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
@@ -190,11 +190,12 @@ public class MissionsFragment extends Fragment {
return true;
case R.id.clear_list:
AlertDialog.Builder prompt = new AlertDialog.Builder(mContext);
- prompt.setTitle(R.string.clear_finished_download);
+ prompt.setTitle(R.string.clear_download_history);
prompt.setMessage(R.string.confirm_prompt);
- prompt.setPositiveButton(R.string.clear_finished_download, (dialog, which) -> mAdapter.clearFinishedDownloads(false));
- prompt.setNeutralButton(R.string.delete_downloaded_files, (dialog, which) -> mAdapter.clearFinishedDownloads(true));
- prompt.setNegativeButton(R.string.cancel, null);
+ // Intentionally misusing button's purpose in order to achieve good order
+ prompt.setNegativeButton(R.string.clear_download_history, (dialog, which) -> mAdapter.clearFinishedDownloads(false));
+ prompt.setPositiveButton(R.string.delete_downloaded_files, (dialog, which) -> mAdapter.clearFinishedDownloads(true));
+ prompt.setNeutralButton(R.string.cancel, null);
prompt.create().show();
return true;
case R.id.start_downloads:
diff --git a/app/src/main/res/menu/download_menu.xml b/app/src/main/res/menu/download_menu.xml
index f91f8ad7b..8728e146e 100644
--- a/app/src/main/res/menu/download_menu.xml
+++ b/app/src/main/res/menu/download_menu.xml
@@ -24,7 +24,7 @@
- Progress lost, because the file was deleted
Connection timeout
Cannot recover this download
- Clear finished downloads
+ Clear download history
Do you want to clear your download history or delete all downloaded files?
Stop
Maximum retries
From d071891b2af8b71f428d2a16815d783f16fca089 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kamil=20Szcz=C4=99k?=
Date: Sun, 5 Jan 2020 14:01:54 +0100
Subject: [PATCH 0126/1194] Add a snackbar to allow user to undo file deletion
---
.../giga/ui/adapter/MissionAdapter.java | 52 +++++++++++++++++--
app/src/main/res/values/strings.xml | 1 +
2 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index eea3f2795..11cdf5a3d 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -5,6 +5,7 @@ import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
+import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
@@ -35,6 +36,8 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.Adapter;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
+import com.google.android.material.snackbar.Snackbar;
+
import org.schabi.newpipe.BuildConfig;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.NewPipe;
@@ -46,6 +49,7 @@ import java.io.File;
import java.lang.ref.WeakReference;
import java.net.URI;
import java.util.ArrayList;
+import java.util.Iterator;
import us.shandian.giga.get.DownloadMission;
import us.shandian.giga.get.FinishedMission;
@@ -84,6 +88,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb
private static final String UNDEFINED_PROGRESS = "--.-%";
private static final String DEFAULT_MIME_TYPE = "*/*";
private static final String UNDEFINED_ETA = "--:--";
+ private static final int TIMEOUT = 5000;// ms
static {
@@ -104,8 +109,12 @@ public class MissionAdapter extends Adapter implements Handler.Callb
private MenuItem mPauseButton;
private View mEmptyMessage;
private RecoverHelper mRecover;
+ private View mView;
+ private ArrayList mHidden;
+ private Snackbar mSnackbar;
private final Runnable rUpdater = this::updater;
+ private final Runnable rDelete = this::deleteFinishedDownloads;
public MissionAdapter(Context context, @NonNull DownloadManager downloadManager, View emptyMessage, View root) {
mContext = context;
@@ -122,6 +131,10 @@ public class MissionAdapter extends Adapter implements Handler.Callb
mDeleter = new Deleter(root, mContext, this, mDownloadManager, mIterator, mHandler);
+ mView = root;
+
+ mHidden = new ArrayList<>();
+
checkEmptyMessageVisibility();
onResume();
}
@@ -558,18 +571,49 @@ public class MissionAdapter extends Adapter implements Handler.Callb
}
public void clearFinishedDownloads(boolean delete) {
- if (delete && mIterator.hasFinishedMissions()) {
+ if (delete && mIterator.hasFinishedMissions() && mHidden.isEmpty()) {
for (int i = 0; i < mIterator.getOldListSize(); i++) {
FinishedMission mission = mIterator.getItem(i).mission instanceof FinishedMission ? (FinishedMission) mIterator.getItem(i).mission : null;
if (mission != null) {
- mDownloadManager.deleteMission(mission);
- mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri()));
+ mIterator.hide(mission);
+ mHidden.add(mission);
}
}
+ applyChanges();
+
+ String msg = String.format(mContext.getString(R.string.deleted_downloads), String.valueOf(mHidden.size()));
+ mSnackbar = Snackbar.make(mView, msg, Snackbar.LENGTH_INDEFINITE);
+ mSnackbar.setAction(R.string.undo, s -> {
+ Iterator i = mHidden.iterator();
+ while (i.hasNext()) {
+ mIterator.unHide(i.next());
+ i.remove();
+ }
+ applyChanges();
+ mHandler.removeCallbacks(rDelete);
+ });
+ mSnackbar.setActionTextColor(Color.YELLOW);
+ mSnackbar.show();
+
+ mHandler.postDelayed(rDelete, TIMEOUT);
} else if (!delete) {
mDownloadManager.forgetFinishedDownloads();
+ applyChanges();
+ }
+ }
+
+ private void deleteFinishedDownloads() {
+ if(mSnackbar != null) mSnackbar.dismiss();
+
+ Iterator i = mHidden.iterator();
+ while (i.hasNext()) {
+ Mission mission = i.next();
+ if (mission != null) {
+ mDownloadManager.deleteMission(mission);
+ mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri()));
+ }
+ i.remove();
}
- applyChanges();
}
private boolean handlePopupItem(@NonNull ViewHolderItem h, @NonNull MenuItem option) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bc3389062..9e3f89357 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -588,4 +588,5 @@
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
Delete downloaded files
+ Deleted %s downloads
From 2c8222fd559d4d536b4f2f35cf1f0b6ed87223ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kamil=20Szcz=C4=99k?=
Date: Sat, 11 Jan 2020 15:19:24 +0100
Subject: [PATCH 0127/1194] Style corrected
---
.../java/us/shandian/giga/ui/adapter/MissionAdapter.java | 5 ++---
app/src/main/res/values/strings.xml | 4 ++--
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index 11cdf5a3d..fac196e0b 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -88,7 +88,6 @@ public class MissionAdapter extends Adapter implements Handler.Callb
private static final String UNDEFINED_PROGRESS = "--.-%";
private static final String DEFAULT_MIME_TYPE = "*/*";
private static final String UNDEFINED_ETA = "--:--";
- private static final int TIMEOUT = 5000;// ms
static {
@@ -595,7 +594,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb
mSnackbar.setActionTextColor(Color.YELLOW);
mSnackbar.show();
- mHandler.postDelayed(rDelete, TIMEOUT);
+ mHandler.postDelayed(rDelete, 5000);
} else if (!delete) {
mDownloadManager.forgetFinishedDownloads();
applyChanges();
@@ -603,7 +602,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb
}
private void deleteFinishedDownloads() {
- if(mSnackbar != null) mSnackbar.dismiss();
+ if (mSnackbar != null) mSnackbar.dismiss();
Iterator i = mHidden.iterator();
while (i.hasNext()) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9e3f89357..431f05d5a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -571,6 +571,8 @@
Cannot recover this download
Clear download history
Do you want to clear your download history or delete all downloaded files?
+ Delete downloaded files
+ Deleted %s downloads
Stop
Maximum retries
Maximum number of attempts before canceling the download
@@ -587,6 +589,4 @@
Use SAF
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
- Delete downloaded files
- Deleted %s downloads
From 69c090b5a1148f11f4718ad5acae00c317552137 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=2E=20R=C3=BCdinger?=
Date: Thu, 9 Jan 2020 16:23:03 +0000
Subject: [PATCH 0128/1194] Translated using Weblate (German)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-de/strings.xml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 6d4fe2e13..d72051d18 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -14,7 +14,7 @@
Meintest du: %1$s\?
Teilen mit
Browser auswählen
- Drehen des Geräts
+ Bildschirm drehen
Downloadordner für Videos
Heruntergeladene Videodateien werden hier gespeichert
Wähle den Downloadordner für Videodateien aus
@@ -278,7 +278,7 @@
Dies wird deine aktuellen Einstellungen überschreiben.
Infos anzeigen
Lesezeichen für Wiedergabelisten
- Hinzufügen zu
+ Hinzufügen
Zum Neuordnen ziehen
Erstellen
Einen löschen
@@ -395,7 +395,7 @@
Keine
Zum Hintergrund-Player minimieren
Zum Popup-Player minimieren
- Vorspulen während der Stille
+ Vorspulen bei Stille
Schritt
Zurücksetzen
Kanäle
@@ -518,17 +518,17 @@
Die Sprache ändert sich, sobald die App neu gestartet wird.
PeerTube-Instanzen
- "Finde auf %s die Instanzen, die am besten zu dir passen"
+ Finde auf %s die Instanzen, die am besten zu dir passen
Instanz hinzufügen
Gib die URL der Instanz ein
- Validieren der Instanz fehlgeschlagen
- Diese Instanz existiert bereits
+ Validierung der Instanz fehlgeschlagen
+ Instanz existiert bereits
Lokal
Kürzlich hinzugefügt
Auto-generiert (kein Uploader gefunden)
Wähle eine Instanz
- Bevorzugte Peertube-Instanzen festlegen
- Es werden nur https-Adressen unterstützt
+ Bevorzugte Peertube-Instanzen auswählen
+ Es werden nur HTTPS-Adressen unterstützt
Dauer der Suche bei schnellem Vor-/Zurückspulen
Am beliebtesten
Wiederherstellen
From 78c9e4e1ad78ec8e48df268e8f02714862463d5c Mon Sep 17 00:00:00 2001
From: nautilusx
Date: Fri, 10 Jan 2020 07:10:50 +0000
Subject: [PATCH 0129/1194] Translated using Weblate (German)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-de/strings.xml | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index d72051d18..586da69ee 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -123,7 +123,8 @@
Bevorzugtes Videoformat
Im Pop-up Modus abspielen
NewPipe-Pop-up-Modus
- Diese Berechtigung ist für das Öffnen im Pop-up-Modus erforderlich
+ Diese Berechtigung ist für das
+\nÖffnen im Pop-up-Modus erforderlich
Standardauflösung des Pop-ups
Höhere Auflösungen anzeigen
Nur manche Geräte unterstützen das Abspielen von 2K-/4K-Videos
@@ -520,7 +521,7 @@
PeerTube-Instanzen
Finde auf %s die Instanzen, die am besten zu dir passen
Instanz hinzufügen
- Gib die URL der Instanz ein
+ URL der Instanz eingeben
Validierung der Instanz fehlgeschlagen
Instanz existiert bereits
Lokal
@@ -533,4 +534,6 @@
Am beliebtesten
Wiederherstellen
Dieser Download kann nicht wiederhergestellt werden
+ Video-Vorschaubild für Sperrbildschirm aktivieren
+ Bei Verwendung des Hintergrundplayers wird ein Video-Miniaturbild auf dem Sperrbildschirm angezeigt
\ No newline at end of file
From 3f67b3b73c616d218cbd6cff4841be2326bf2cb7 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 10 Jan 2020 19:56:16 +0000
Subject: [PATCH 0130/1194] Translated using Weblate (French)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-fr/strings.xml | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index c8e238487..463057480 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -519,12 +519,12 @@
La langue changera lors du redémarrage de l\'application.
Avance/rembobinage rapide sur une durée
Instances PeerTube
- Définissez vos instances peertube préférées
- Cherchez des instances qui pourraient vous intéresser sur https://joinpeertube.org/instances#instances-list
+ Choisissez vos instances PeerTube préférées
+ Cherchez des instances qui pourraient vous intéresser sur %s
Ajouter une instance
Entrez l’URL de l’instance
Échec de validation de l’instance
- Sont prises en charge uniquement les URLs en https
+ Sont prises en charge uniquement les URLs en HTTPS
L’instance existe déjà
Local
Ajoutées récemment
@@ -532,4 +532,7 @@
récupération
Impossible de récupérer ce téléchargement
Choisissez une instance
+ Généré automatiquement (pas de téléverseur trouvé)
+ Activer la vidéo miniaturisée sur l\'écran de verrouillage
+ En utilisant le lecteur en arrière-plan, une vidéo miniaturisé sera affichée sur l\'écran de verrouillage
\ No newline at end of file
From c3e41e2427f3ad32f2835eecf415aa0c1b77cbe8 Mon Sep 17 00:00:00 2001
From: ssantos
Date: Sat, 11 Jan 2020 12:18:48 +0000
Subject: [PATCH 0131/1194] Translated using Weblate (Portuguese)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-pt/strings.xml | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 4bf692801..98b85bcab 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -518,12 +518,12 @@
O idioma mudará quando a app for reiniciada.
Duração da busca de avanço/retrocesso rápido
Instâncias do PeerTube
- Defina as suas instâncias favoritas de peertube
- Encontre as instâncias que lhe melhor convêm em https://joinpeertube.org/instances#instances-list
+ Defina as suas instâncias favoritas de PeerTube
+ Encontre as instâncias que lhe melhor convêm em %s
Adicionar instância
Digite o URL da instância
Falha ao validar a instância
- Somente URLs HTTPS são suportadas
+ Somente URLs HTTPS são suportada
A instância já existe
Local
Recentemente adicionado
@@ -532,4 +532,6 @@
recuperando
Não é possível recuperar este descarregamento
Escolha uma instância
+ Ativar miniatura do vídeo no ecrã de bloqueio
+ Ao usar o reprodutor de fundo, uma miniatura de vídeo será exibida no ecrã de bloqueio
\ No newline at end of file
From b83e1716fe9c084f8b423d8cfc8efcdce18aa5dc Mon Sep 17 00:00:00 2001
From: Osoitz
Date: Sun, 12 Jan 2020 11:31:39 +0000
Subject: [PATCH 0132/1194] Translated using Weblate (Basque)
Currently translated at 99.4% (522 of 525 strings)
---
app/src/main/res/values-eu/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 2233c42ba..b376f1f6d 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -519,12 +519,12 @@
Kiosko Lehenetsia
Aurreratze/atzeratze bilaketaren iraupena
PeerTube instantziak
- Ezarri zure gogoko peertube instantziak
- Aurkitu instantziak hemen: https://joinpeertube.org/instances#instances-list
+ Hautatu zure gogoko PeerTube instantziak
+ Aurkitu instantziak hemen: %s
Gehitu instantzia
Sartu instantziaren URLa
- Huts egin du instantzia balioztatzean
- https URLak onartzen dira soilik
+ Ezin izan da instantzia balioztatu
+ HTTPS URLak onartzen dira soilik
Instantzia badago aurretik
Lokala
Berriki gehitua
From 7c4b9d8843900e4ccdd22cd0d3df7a3fcdd20782 Mon Sep 17 00:00:00 2001
From: Petros Grammatikopoulos
Date: Sun, 12 Jan 2020 23:02:25 +0000
Subject: [PATCH 0133/1194] Translated using Weblate (Greek)
Currently translated at 97.7% (513 of 525 strings)
---
app/src/main/res/values-el/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index dd6643755..3d2397a0c 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -522,4 +522,6 @@
Δημιουργήθηκε αυτόματα (δεν βρέθηκε χρήστης μεταφόρτωσης)
Ανάκτηση
Δεν είναι δυνατή η ανάκτηση αυτής της λήψης
+ Ενεργοποίηση μικρογραφίας βίντεο στην οθόνη κλειδώματος
+ Όταν χρησιμοποιείται αναπαραγωγή παρασκηνίου μια μικρογραφία βίντεο θα εμφανίζεται στην οθόνη κλειδώματος
\ No newline at end of file
From 88e5be237e1f78a49d04c937d4168ddb410b0007 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 10 Jan 2020 17:12:12 +0000
Subject: [PATCH 0134/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-eo/strings.xml | 42 ++++++++++++++------------
1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 784357da3..6d19f8213 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -41,12 +41,12 @@
Neniu elsendlflua ludilo trovita. Ĉu vi volas instali la aplikaĵon VLC\?
La aplikaĵo Kore ne estas trovita. Ĉu instali ĝin?
Montri la sekvan filmeton kaj similajn filmetojn
- Ĉiuj miniaturoj ne ŝargeblas
+ Ĉiuj bildetoj ne ŝargeblas
La subskribo de la ligilo de la filmeto ne malĉifreblas
La retejo ne analizeblas
- Miniaturo de la antaŭrigardo de la filmeto
+ Bildeto de la antaŭrigardo de la filmeto
Legi filmeton, daŭro:
- Miniaturo de la bildo de la alŝutinto
+ Bildeto de la alŝutinto
La elŝutujo \'%1$s\' ne kreeblas
Elŝutujo \'%1$s\' kreita
Elŝutujo por filmetoj
@@ -61,7 +61,7 @@
Signali eraron per retpoŝto
SIGNALI
Informoj:
- Via komento (angle):
+ Vian komenton (angle):
Detaloj:
Signali eraron
Filmeto
@@ -71,7 +71,7 @@
Malfermi en ŝprucfenestron modon
Forigas aŭdion ĉe KELKAJ distingivoj
NewPipe ŝprucfenestron modon
- Abonu
+ Aboni
Abonita
Kanalo malabonita
Ne povis ŝanĝi abonon
@@ -210,16 +210,16 @@
Tia dosierujo ne ekzistas
Tia dosiero/enhavo ne ekzistas
Dosiernomo ne povas esti malplena
- Eraro okazis : %1$s
- Importu Jutubajn abonaĵojn per elŝuti la dosieron de eksporto :
-\n
-\n1. Iru ĉe tie retpaĝo : %1$s
-\n2. Ensalutu kiam oni petas vin
+ Eraro okazis: %1$s
+ Importu Jutubajn abonaĵojn per elŝuti la dosieron de eksporto :
+\n
+\n1. Iru ĉe tiu retpaĝo: %1$s
+\n2. Ensalutu kiam oni petas vin
\n3. Elŝuto devus komenci (ĝi estas la dosiero de eksporto)
- Importu Soundcloud-n profilon per elŝuti la dosieron de eksporto :
+ Importu Soundcloud-n profilon tajpante ĉu la ligilon, ĉu vian ID :
\n
\n1. Ebligu komputilon modon en krozilo (la retejo malhaveblas por poŝtelefonoj)
-\n2. Iru al tie retpaĝo : %1$s
+\n2. Iru tien: %1$s
\n3. Ensalutu kiam oni petas vin
\n4. Kopiu la ligilon de profilo ke oni kondikis vin.
Malŝaltu por malebligi ŝarĝajn bildetojn, konservi datumojn kaj uzadon de memoro. Ŝanĝoj forviŝas ambaŭ en-memoro kaj sur-disko bildo kaŝmemoro.
@@ -242,7 +242,7 @@
Ludlistoj
Spuroj
Uzantoj
- Malabonu
+ Malaboni
Nova ongleto
Elektu ongleton
Kontrolo de volumena gesto
@@ -291,8 +291,8 @@
Oni petos vin kie konservi ĉion elŝutaĵon.
\nElektu AFM se vi volas elŝuti al ekstera SD-karto
Uzu AFM
- La Atinga Framo al la Memoro ebligas elŝuti al ekstera SD-karto.
-\nKomento : kelkaj aparatoj ne kongruas
+ La Atinga Framo al la Memoro ebligas elŝuti al ekstera SD-karto.
+\nKomento: kelkaj aparatoj ne kongruas
Forviŝi ludajn poziciojn
Forviŝi la totalon de ludaj pozicioj
Ĉu vi volas forviŝi ĉiujn ludajn poziciojn \?
@@ -437,7 +437,7 @@
Subtitoloj
Modifi la dimension de la teksto kaj la fonajn stilojn de la subtitoloj de la ludilo. Ĝi bezonas restarto de la apo por efektiviĝi.
1 ero forviŝita.
- NewPipe estas programaro sub rajtoceda permesilo: Vi povas uzi, studi, komuniki kaj plibonigi ĝin kiel vi volas. Precize, vi povas redistribui kaj/aŭ modifi ĝin sub la kondiĉojn de la Ĝenerala Publika Permesilo de GNU, kiel publikigita per la Free Software Foundation, ĉu en la versio 3, ĉu (se vi volas) ajna posta versio.
+ NewPipe estas programaro sub rajtoceda permesilo: Vi povas uzi, studi, komuniki kaj plibonigi ĝin kiel vi volas. Precize, vi povas redistribui kaj/aŭ modifi ĝin sub la kondiĉoj de la Ĝenerala Publika Permesilo de GNU, kiel publikigita per la Free Software Foundation, ĉu en la versio 3, ĉu (se vi volas) ajna posta versio.
Ĉu vi volas ankaŭ importi agordojn\?
Privateca politiko de NewPipe
La NewPipe projekto respektas vian privatecon serioze. Konsekvence, la apo ne kolektas ajnan datumo sen via konsento.
@@ -518,12 +518,12 @@
La lingvo ŝanĝos kiam la apo restartos.
Rapida antaŭen / posten daŭron
Instancoj de PeerTube
- Registri viajn preferitajn instancojn de PeerTube
- Trovu la instancojn kiu vi povus ŝati ĉe https://joinpeertube.org/instances#instances-list
+ Elekti viajn preferitajn instancojn de PeerTube
+ Trovu la instancojn kiu vi povus ŝati ĉe %s
Aldoni instanco
Eniri la ligilon de la instanco
- Malsukcesis validigi instanco
- Nur https ligiloj estas subtenitaj
+ Ne povis validigi instanco
+ Nur HTTPS ligiloj estas subtenitaj
La instanco jam ekzistas
Loka
Freŝdate ĝisdatigita
@@ -532,4 +532,6 @@
Reakiranta
Ne povas reakiri tion elŝuton
Elektu instancon
+ Enablu bildeta filmeton ĉe ŝlosita ekrano
+ Uzante la fona ludilo, bildeta filmeto vidiĝos ĉe ŝlosita ekrano
\ No newline at end of file
From 3afce82aa7352ccb4feccaca01982858868faca7 Mon Sep 17 00:00:00 2001
From: zmni
Date: Sat, 11 Jan 2020 14:06:30 +0000
Subject: [PATCH 0135/1194] Translated using Weblate (Indonesian)
Currently translated at 99.6% (523 of 525 strings)
---
app/src/main/res/values-id/strings.xml | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index 938837bd5..8677df678 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -510,4 +510,21 @@
- %s mendengarkan
Bahasa akan diterapkan setelah aplikasi dimulai ulang.
+ Situs PeerTube
+ Pilih situs PeerTube favorit anda
+ Temukan situs yang sesuai dengan anda di %s
+ Tambah situs
+ Masukkan URL situs
+ Tidak bisa memvalidasi situs
+ Hanya mendukung URL HTTPS
+ Situs sudah ada
+ Lokal
+ Baru-baru ini ditambahkan
+ Disukai terbanyak
+ Dibuat otomatis (pengunggah tidak ditemukan)
+ memulihkan
+ Tidak bisa memulihkan unduhan ini
+ Pilih situs
+ Aktifkan kunci layar thumbnail video
+ Ketika menggunakan pemutar latar belakang, thumbnail video akan ditampilkan di tampilan kunci layar
\ No newline at end of file
From 46cc21512039bbdd424239bef6e2d15649e14b3b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Wed, 8 Jan 2020 20:22:06 +0000
Subject: [PATCH 0136/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-tr/strings.xml | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 533c0d736..1ea8ad817 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -519,12 +519,12 @@
Uygulama yeniden başlatıldıktan sonra dil değişecektir.
Hızlı ileri/geri sarma süresi
PeerTube örnekleri
- Favori peertube örneklerinizi ayarlayın
- https://joinpeertube.org/instances#instances-list adresinde size en uygun örnekleri bulun
+ Favori PeerTube örneklerinizi seçin
+ %s adresinde size en uygun örnekleri bulun
Örnek ekle
Örnek URL\'sini girin
Örnek doğrulanamadı
- Yalnızca https URL\'leri desteklenmektedir
+ Yalnızca HTTPS URL\'leri desteklenmektedir
Örnek zaten var
Yerel
Son eklenen
@@ -533,4 +533,6 @@
kurtarılıyor
Bu indirme kurtarılamıyor
Bir örnek seçin
+ Kilit ekranı video küçük resmini etkinleştir
+ Arka plan oynatıcıyı kullanırken kilit ekranında bir video küçük resmi görüntülenecektir
\ No newline at end of file
From 2038df976c055ad45352e1ceec7e069da3f3bd07 Mon Sep 17 00:00:00 2001
From: WaldiS
Date: Thu, 9 Jan 2020 18:26:47 +0000
Subject: [PATCH 0137/1194] Translated using Weblate (Polish)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-pl/strings.xml | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 75ce1029d..e2a2ae80b 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -525,12 +525,12 @@
Język zmieni się po ponownym uruchomieniu aplikacji.
Krok czasu przewijania
Wystąpienia PeerTube
- Ustaw swoje ulubione instancje peertube
- Znajdź instancje, które najbardziej Ci odpowiadają, na https://joinpeertube.org/instances#instances-list
+ Wybierz swoje ulubione instancje PeerTube
+ Znajdź wystąpienia, które najbardziej Ci odpowiadają na %s
Dodaj instancję
Wprowadź adres URL instancji
- Nie udało się sprawdzić poprawności instancji
- Obsługiwane są tylko adresy URL https
+ Nie można sprawdzić poprawności instancji
+ Obsługiwane są tylko adresy URL HTTPS
Instancja już istnieje
Lokalny
Ostatnio dodane
@@ -539,4 +539,6 @@
odzyskiwanie
Nie można odzyskać tego pobrania
Wybierz instancję
+ Włącz miniaturę wideo na ekranie blokady
+ Podczas korzystania z odtwarzacza w tle na ekranie blokady zostanie wyświetlona miniatura filmu
\ No newline at end of file
From 31b830d6d0839427b328c7ae9f2b69741bd05089 Mon Sep 17 00:00:00 2001
From: Daniele Lira Mereb
Date: Fri, 10 Jan 2020 01:09:46 +0000
Subject: [PATCH 0138/1194] Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-pt-rBR/strings.xml | 40 +++++++++++++++-------
1 file changed, 28 insertions(+), 12 deletions(-)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 9aeb53b3b..45fe51010 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -23,7 +23,7 @@
Noite
Formato de áudio padrão
Resolução padrão
- Excluir
+ Apagar
Não curtidas
Curtidas
Baixar
@@ -134,7 +134,7 @@ abrir em modo popup
Popup
Segundo plano
Lembrar tamanho e posição do popup
- Lembrar do último tamanho e posição definido para o popup
+ Lembra da última posição e o tamanho usado no popup
Popup
Redimensionando
Remove o áudio em ALGUMAS resoluções
@@ -256,7 +256,7 @@ abrir em modo popup
Sempre
Uma vez
Alterar orientação
- Alterar para segundo plano
+ Trocar para segundo plano
Trocar para popup
Trocar para principal
Players externos não suportam estes tipos de links
@@ -271,7 +271,7 @@ abrir em modo popup
Importar base de dados
Exportar base de dados
Sobrescreve seus dados como históricos e inscrições
- Exportar históricos, inscrições e playlists
+ Exporta históricos, inscrições e playlists
Exportado
Importado
Não há nenhum arquivo ZIP válido
@@ -318,7 +318,7 @@ abrir em modo popup
Usar pesquisa rápida
A pesquisa rápida permite que o player procure resultados mais rapidamente porém com precisão reduzida
Adicionar o próximo vídeo à fila automaticamente
- Adicionar automaticamente um vídeo relacionado ao último da lista quando a repetição estiver desativada
+ Adiciona automaticamente um vídeo relacionado ao último da lista quando a repetição estiver desativada
Arquivo
Pasta não encontrada
Origem do arquivo/conteúdo não encontrada
@@ -361,7 +361,7 @@ abrir em modo popup
Carregar capas
Cache de imagens limpo
Limpar metadados em cache
- Exclui todos os dados de páginas em cache
+ Apaga todos os dados de páginas em cache
Cache de metadados limpo
Controles de velocidade de reprodução
"Tempo "
@@ -377,7 +377,7 @@ abrir em modo popup
Altere o tamanho da legenda e o estilo da tela de fundo. É necessário reiniciar o aplicativo para ter efeito.
Nenhum player instalado para reproduzir este arquivo
Limpar histórico de assistidos
- Apaga o histórico de vídeos assistidos e a lista de reprodução
+ Apaga o histórico de vídeos assistidos e a posição nas reproduções
Apagar todo o histórico de assistidos\?
Histórico de assistidos limpo.
Limpar histórico de pesquisas
@@ -485,9 +485,9 @@ abrir em modo popup
Retomar a reprodução
Retorna para a última posição em reprodução
Posições em listas
- Mostrar indicadores de posição em listas
+ Mostra indicadores de posição em listas
Limpar dados
- Posições de reprodução apagadas.
+ Posição nas reproduções apagadas.
Arquivo movido ou excluído
Já existe um arquivo com este nome
Não foi possível sobrescrever o arquivo
@@ -508,9 +508,9 @@ abrir em modo popup
Usar SAF
A Estrutura de Acesso ao Armazenamento permite baixar para um cartão SD.
\nAviso: alguns dispositivos não são compatíveis
- Apagar lista de reprodução
- Deletar todo o histórico de reprodução
- Deletar todo o histórico de reprodução\?
+ Limpar posição nas reproduções
+ Apaga o histórico de posição nas reproduções
+ Apagar toda posição nas reproduções\?
Mude as pastas de download para surtir efeito
Alterar serviço, selecionados:
Quiosque Padrão
@@ -527,4 +527,20 @@ abrir em modo popup
O idioma será atualizado assim que o aplicativo for reiniciado.
Duração do avançar/retroceder rápido
Instâncias PeerTube
+ Selecione instâncias PeerTube favoritas
+ Encontre instâncias PeerTube em %s
+ Adicionar instância
+ Insira o link aqui
+ Não foi possível acessá-la
+ Apenas HTTPS são suportados
+ Instância já existe
+ Local
+ Recentes
+ Em alta
+ Gerado automaticamente (sem criador)
+ recuperando
+ Não foi possível recuperar o download
+ Escolha uma instância
+ Ativar capa do vídeo na tela de bloqueio
+ Mostra capa do vídeo na tela de bloqueio ao usar player em segundo plano
\ No newline at end of file
From 948d57d3d12df5691373fab78e9d280656432f11 Mon Sep 17 00:00:00 2001
From: Matsuri
Date: Fri, 10 Jan 2020 03:54:47 +0000
Subject: [PATCH 0139/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 97.3% (511 of 525 strings)
---
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index e246d54eb..cfa443afc 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -512,7 +512,7 @@
没人在听
- %s 人在听
-
+
重新启动应用后,语言将更改。
PeerTube 服务器
@@ -531,4 +531,6 @@
无法恢复此下载
选择一个服务器
快进 / 快退的单位时间
+ 在锁屏界面显示视频缩略图
+ 在后台播放时,锁屏界面将会显示视频的缩略图
\ No newline at end of file
From bd8014bcbdac1cb9187424e14d77a44ffbbdf7af Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Thu, 9 Jan 2020 03:16:04 +0000
Subject: [PATCH 0140/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 9713e4665..6cb16623f 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -515,12 +515,12 @@
語言將會在重新啟動應用程式後變更。
快轉/快退搜尋持續時間
PeerTube 站臺
- 設定您最愛的 PeerTube 站臺
- 在 https://joinpeertube.org/instances#instances-list 上找到最適合您的站臺
+ 選取您最愛的 PeerTube 站臺
+ 在 %s 上找到最適合您的站臺
新增站臺
輸入站臺 URL
- 驗證站臺失敗
- 僅支援 https URL
+ 無法驗證站臺
+ 僅支援 HTTPS URL
站臺已存在
本機
最近新增
@@ -529,4 +529,6 @@
正在恢復
無法復原此下載
選擇一個站臺
+ 啟用鎖定畫面影片縮圖
+ 使用背景播放器時,鎖定畫面上將會顯示影片縮圖
\ No newline at end of file
From bfead79c07a3fd5593e5aae576d495426ba8a05c Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Wed, 8 Jan 2020 19:54:22 +0000
Subject: [PATCH 0141/1194] Translated using Weblate (Hebrew)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-he/strings.xml | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index f98fb7b3e..d1a72739d 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -531,12 +531,12 @@
קיוסק בררת מחדל
משך קפיצה מהירה קדימה/אחורה
מופעים של PeerTube
- נא להגדיר את מופעי ה־peertube המועדפים עליך
- איתור המופעים שהכי מתאימים לך תחת https://joinpeertube.org/instances#instances-list
+ נא לבחור את מופעי ה־PeerTube המועדפים עליך
+ איתור המופעים שהכי מתאימים לך תחת %s
הוספת מופע
נא להכניס כתובת מופע
- אימות המופע נכשל
- יש תמיכה בכתובות https בלבד
+ לא ניתן לאמת את המופע
+ יש תמיכה בכתובות HTTPS בלבד
המופע כבר קיים
מקומי
נוספו לאחרונה
@@ -545,4 +545,6 @@
בשחזור
לא ניתן לשחזר את ההורדה הזאת
נא לבחור מופע
+ הפעלת תמונה מוקטנת של הסרטון במסך הנעילה
+ בעת השימוש בנגן הרקע תופיע תמונה מוקטנת של הסרטון על מסך הנעילה
\ No newline at end of file
From 335e5c05dbe59a51442d4023be295ab9bf2eb84f Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Thu, 9 Jan 2020 19:32:30 +0000
Subject: [PATCH 0142/1194] Translated using Weblate (Kurdish)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-ku/strings.xml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 938175f71..50350e1b3 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -497,8 +497,8 @@
کیۆسکی بنەڕەتی
خێرا بردنە پێشەوە\\ گێڕانەوە بۆکاتی سەرەتا
دۆخی PeerTube
- ئارەزوومەندییەکانی دۆخی PeerTube ڕێکبخە
- ئەو دۆخانە بدۆزەرەوە کە لەگەڵ خۆتدا دەگونجێن لە https://joinpeertube.org/instances#instances-list
+ ئارەزوومەندییەکانی دۆخی پێرتوبی ڕێکبخە
+ ئەو دۆخانە بدۆزەرەوە کە لەگەڵ خۆتدا دەگونجێن لە %s
زیادکردنی دۆخ
بەستەری دۆخ دابنێ
ناتوانرێ پشتگیری دۆخەکە بکرێ
@@ -536,4 +536,6 @@
دەگەڕێنرێتەوە
ناتوانرێ ئەم داگرتنە بهێنرێتەوە
دۆخێک هەڵبژێرە
+ چالاککردنی وێنۆچکەی ڤیدیۆی داخستنی ڕوونما
+ کاتێ کارپێکەری پاشبنەما کاردەکات ئەوا وێنۆچکەی ڤیدیۆکە لە ڕوونما داخراوەکەدا نیشاندەدرێت
\ No newline at end of file
From 92b1fa5743bbeed427685622ff1b996d45dca68c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Thu, 9 Jan 2020 17:28:27 +0000
Subject: [PATCH 0143/1194] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?=
=?UTF-8?q?gian=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 96.2% (505 of 525 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 8afd21f54..1038d15c4 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -517,4 +517,8 @@
Språk vil ikke bli endret før programmet startes på ny.
Forvalgt kiosk
PeerTube-instanser
+ Lokal
+ Nylig lagt til
+ Mest likt
+ Velg en instans
\ No newline at end of file
From 1a8be2bbf5aaba87fe82edab61477c002122ae84 Mon Sep 17 00:00:00 2001
From: Software In Interlingua
Date: Sat, 11 Jan 2020 11:58:45 +0000
Subject: [PATCH 0144/1194] Translated using Weblate (Interlingua)
Currently translated at 11.4% (60 of 525 strings)
---
app/src/main/res/values-ia/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml
index f077e3e24..6bbcac7b3 100644
--- a/app/src/main/res/values-ia/strings.xml
+++ b/app/src/main/res/values-ia/strings.xml
@@ -33,4 +33,5 @@
Pausar le discargas
Seliger un instantia
Non poteva connecter con le servitor
+ %1$s vistas
\ No newline at end of file
From 36e38e50e950d1988db5c8c6fedb227d7aa215ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=ADs=20B?=
Date: Mon, 13 Jan 2020 13:23:43 +0000
Subject: [PATCH 0145/1194] Translated using Weblate (Occitan)
Currently translated at 10.1% (53 of 525 strings)
---
app/src/main/res/values-oc/strings.xml | 32 ++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml
index 0e5b7ccd6..190c2c890 100644
--- a/app/src/main/res/values-oc/strings.xml
+++ b/app/src/main/res/values-oc/strings.xml
@@ -1,2 +1,30 @@
-
-
+
+
+ %1$s vistas
+ Publicat lo %1$s
+ Cap de lector de flus trobat. Volètz installar VLC\?
+ Cap de lector de flus trobat (podètz installar VLC per lo legir).
+ Installar
+ Anullar
+ Dobrir dins lo navegador
+ Dobrir en mòde fenestron
+ Partejar
+ Telecargar
+ Telecargar lo fichièr de flus
+ Recercar
+ Paramètres
+ Voliatz dire: %1$s\?
+ Partejar amb
+ Causir un navegador
+ rotacion
+ Utilizar un lector de vidèo extèrne
+ Mòde fenestron de NewPipe
+ S\'abonar
+ Abonat
+ Anullar abonament
+ Impossible de cambiar l\'abonament
+ Impossible d\'actualizar l\'abonament
+ Afichar las informacions
+ Principal
+ Abonaments
+
\ No newline at end of file
From 3d93ecd6ec35467191178e35dc64ca8a7716e41d Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Mon, 13 Jan 2020 20:25:32 +0100
Subject: [PATCH 0146/1194] Use Integer value directly for formatted string
a
---
.../main/java/us/shandian/giga/ui/adapter/MissionAdapter.java | 2 +-
app/src/main/res/values/strings.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index fac196e0b..aaf7826ef 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -580,7 +580,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb
}
applyChanges();
- String msg = String.format(mContext.getString(R.string.deleted_downloads), String.valueOf(mHidden.size()));
+ String msg = String.format(mContext.getString(R.string.deleted_downloads), mHidden.size());
mSnackbar = Snackbar.make(mView, msg, Snackbar.LENGTH_INDEFINITE);
mSnackbar.setAction(R.string.undo, s -> {
Iterator i = mHidden.iterator();
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 431f05d5a..e1b2cc0a4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -572,7 +572,7 @@
Clear download history
Do you want to clear your download history or delete all downloaded files?
Delete downloaded files
- Deleted %s downloads
+ Deleted %1$s downloads
Stop
Maximum retries
Maximum number of attempts before canceling the download
From 9d773d6e8aa892e929439ba62d2a0985f4e8deb4 Mon Sep 17 00:00:00 2001
From: Karol Kaminski
Date: Mon, 13 Jan 2020 20:28:32 +0100
Subject: [PATCH 0147/1194] removed dot menu where its no longer needed
---
app/src/main/java/org/schabi/newpipe/MainActivity.java | 10 ----------
.../java/org/schabi/newpipe/about/AboutActivity.java | 5 -----
.../org/schabi/newpipe/download/DownloadActivity.java | 6 +-----
.../schabi/newpipe/player/ServicePlayerActivity.java | 4 ----
app/src/main/res/menu/download_menu.xml | 4 ----
app/src/main/res/menu/menu_about.xml | 10 ----------
app/src/main/res/menu/menu_play_queue.xml | 5 -----
7 files changed, 1 insertion(+), 43 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 90d299c7f..2dfbb9c69 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -551,8 +551,6 @@ public class MainActivity extends AppCompatActivity {
if (!(fragment instanceof SearchFragment)) {
findViewById(R.id.toolbar).findViewById(R.id.toolbar_search_container).setVisibility(View.GONE);
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.main_menu, menu);
}
ActionBar actionBar = getSupportActionBar();
@@ -574,14 +572,6 @@ public class MainActivity extends AppCompatActivity {
case android.R.id.home:
onHomeButtonPressed();
return true;
- case R.id.action_show_downloads:
- return NavigationHelper.openDownloads(this);
- case R.id.action_history:
- NavigationHelper.openStatisticFragment(getSupportFragmentManager());
- return true;
- case R.id.action_settings:
- NavigationHelper.openSettings(this);
- return true;
default:
return super.onOptionsItemSelected(item);
}
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index 2326e795e..e028c0322 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -99,11 +99,6 @@ public class AboutActivity extends AppCompatActivity {
case android.R.id.home:
finish();
return true;
- case R.id.action_settings:
- NavigationHelper.openSettings(this);
- return true;
- case R.id.action_show_downloads:
- return NavigationHelper.openDownloads(this);
}
return super.onOptionsItemSelected(item);
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index 449a790e8..26e5d94be 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -78,11 +78,7 @@ public class DownloadActivity extends AppCompatActivity {
onBackPressed();
return true;
}
- case R.id.action_settings: {
- Intent intent = new Intent(this, SettingsActivity.class);
- startActivity(intent);
- return true;
- }
+
default:
return super.onOptionsItemSelected(item);
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 2207808ac..7b9120783 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -157,10 +157,6 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
case R.id.action_append_playlist:
appendAllToPlaylist();
return true;
- case R.id.action_settings:
- NavigationHelper.openSettings(this);
- redraw = true;
- return true;
case R.id.action_system_audio:
startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS));
return true;
diff --git a/app/src/main/res/menu/download_menu.xml b/app/src/main/res/menu/download_menu.xml
index f91f8ad7b..0ffb3a580 100644
--- a/app/src/main/res/menu/download_menu.xml
+++ b/app/src/main/res/menu/download_menu.xml
@@ -27,8 +27,4 @@
android:title="@string/clear_finished_download"
app:showAsAction="ifRoom" />
-
-
diff --git a/app/src/main/res/menu/menu_about.xml b/app/src/main/res/menu/menu_about.xml
index 673cef94b..dbe91a04f 100644
--- a/app/src/main/res/menu/menu_about.xml
+++ b/app/src/main/res/menu/menu_about.xml
@@ -3,14 +3,4 @@
xmlns:tools="http://schemas.android.com/tools"
tools:context="org.schabi.newpipe.about.AboutActivity">
-
-
-
-
diff --git a/app/src/main/res/menu/menu_play_queue.xml b/app/src/main/res/menu/menu_play_queue.xml
index 6261b8c18..5413794be 100644
--- a/app/src/main/res/menu/menu_play_queue.xml
+++ b/app/src/main/res/menu/menu_play_queue.xml
@@ -10,11 +10,6 @@
android:visible="true"
app:showAsAction="ifRoom"/>
-
-
-
Date: Mon, 13 Jan 2020 20:40:11 +0100
Subject: [PATCH 0148/1194] Update extractor version
TeamNewPipe/NewPipeExtractor@bdbfa268355fea58d3a11ac2fae61a066f7fb693
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index f7017a6df..219d2b202 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -62,7 +62,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:8e53fda'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:bdbfa26'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
From 42ec6f0810332904fbb22d1d3dd87a8ce442c655 Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Tue, 14 Jan 2020 00:00:45 -0300
Subject: [PATCH 0149/1194] ttml to srt conversion rewrite SubtitleConverter
(use JSoup library instead, remove unused methods)
---
.../newpipe/download/DownloadDialog.java | 1 -
.../newpipe/streams/SrtFromTtmlWriter.java | 95 +++++
.../newpipe/streams/SubtitleConverter.java | 369 ------------------
.../giga/postprocessing/TtmlConverter.java | 32 +-
4 files changed, 100 insertions(+), 397 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
delete mode 100644 app/src/main/java/org/schabi/newpipe/streams/SubtitleConverter.java
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
index 853bb6d68..44966744b 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
@@ -832,7 +832,6 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
psArgs = new String[]{
selectedStream.getFormat().getSuffix(),
"false",// ignore empty frames
- "false",// detect youtube duplicate lines
};
}
break;
diff --git a/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java b/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
new file mode 100644
index 000000000..75e16edad
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
@@ -0,0 +1,95 @@
+package org.schabi.newpipe.streams;
+
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.nodes.Node;
+import org.jsoup.nodes.TextNode;
+import org.jsoup.parser.Parser;
+import org.jsoup.select.Elements;
+import org.schabi.newpipe.streams.io.SharpStream;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.text.ParseException;
+
+/**
+ * @author kapodamy
+ */
+public class SrtFromTtmlWriter {
+ private static final String NEW_LINE = "\r\n";
+
+ private SharpStream out;
+ private boolean ignoreEmptyFrames;
+ private final Charset charset = Charset.forName("utf-8");
+
+ private int frameIndex = 0;
+
+ public SrtFromTtmlWriter(SharpStream out, boolean ignoreEmptyFrames) {
+ this.out = out;
+ this.ignoreEmptyFrames = true;
+ }
+
+ private static String getTimestamp(Element frame, String attr) {
+ return frame
+ .attr(attr)
+ .replace('.', ',');// Str uses comma as decimal separator
+ }
+
+ private void writeFrame(String begin, String end, StringBuilder text) throws IOException {
+ writeString(String.valueOf(frameIndex++));
+ writeString(NEW_LINE);
+ writeString(begin);
+ writeString(" --> ");
+ writeString(end);
+ writeString(NEW_LINE);
+ writeString(text.toString());
+ writeString(NEW_LINE);
+ writeString(NEW_LINE);
+ }
+
+ private void writeString(String text) throws IOException {
+ out.write(text.getBytes(charset));
+ }
+
+ public void build(SharpStream ttml) throws IOException {
+ /*
+ * TTML parser with BASIC support
+ * multiple CUE is not supported
+ * styling is not supported
+ * tag timestamps (in auto-generated subtitles) are not supported, maybe in the future
+ * also TimestampTagOption enum is not applicable
+ * Language parsing is not supported
+ */
+
+ // parse XML
+ byte[] buffer = new byte[(int) ttml.available()];
+ ttml.read(buffer);
+ Document doc = Jsoup.parse(new ByteArrayInputStream(buffer), "UTF-8", "", Parser.xmlParser());
+
+ StringBuilder text = new StringBuilder(128);
+ Elements paragraph_list = doc.select("body>div>p");
+
+ // check if has frames
+ if (paragraph_list.size() < 1) return;
+
+ for (Element paragraph : paragraph_list) {
+ text.setLength(0);
+
+ for (Node children : paragraph.childNodes()) {
+ if (children instanceof TextNode)
+ text.append(((TextNode) children).text());
+ else if (children instanceof Element && ((Element) children).tagName().equalsIgnoreCase("br"))
+ text.append(NEW_LINE);
+ }
+
+ if (ignoreEmptyFrames && text.length() < 1) continue;
+
+ String begin = getTimestamp(paragraph, "begin");
+ String end = getTimestamp(paragraph, "end");
+
+ writeFrame(begin, end, text);
+ }
+ }
+}
diff --git a/app/src/main/java/org/schabi/newpipe/streams/SubtitleConverter.java b/app/src/main/java/org/schabi/newpipe/streams/SubtitleConverter.java
deleted file mode 100644
index c41db4373..000000000
--- a/app/src/main/java/org/schabi/newpipe/streams/SubtitleConverter.java
+++ /dev/null
@@ -1,369 +0,0 @@
-package org.schabi.newpipe.streams;
-
-import org.schabi.newpipe.streams.io.SharpStream;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.text.ParseException;
-import java.util.Locale;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.xpath.XPathExpressionException;
-
-/**
- * @author kapodamy
- */
-public class SubtitleConverter {
- private static final String NEW_LINE = "\r\n";
-
- public void dumpTTML(SharpStream in, final SharpStream out, final boolean ignoreEmptyFrames, final boolean detectYoutubeDuplicateLines
- ) throws IOException, ParseException, SAXException, ParserConfigurationException, XPathExpressionException {
-
- final FrameWriter callback = new FrameWriter() {
- int frameIndex = 0;
- final Charset charset = Charset.forName("utf-8");
-
- @Override
- public void yield(SubtitleFrame frame) throws IOException {
- if (ignoreEmptyFrames && frame.isEmptyText()) {
- return;
- }
- out.write(String.valueOf(frameIndex++).getBytes(charset));
- out.write(NEW_LINE.getBytes(charset));
- out.write(getTime(frame.start, true).getBytes(charset));
- out.write(" --> ".getBytes(charset));
- out.write(getTime(frame.end, true).getBytes(charset));
- out.write(NEW_LINE.getBytes(charset));
- out.write(frame.text.getBytes(charset));
- out.write(NEW_LINE.getBytes(charset));
- out.write(NEW_LINE.getBytes(charset));
- }
- };
-
- read_xml_based(in, callback, detectYoutubeDuplicateLines,
- "tt", "xmlns", "http://www.w3.org/ns/ttml",
- new String[]{"timedtext", "head", "wp"},
- new String[]{"body", "div", "p"},
- "begin", "end", true
- );
- }
-
- private void read_xml_based(SharpStream source, FrameWriter callback, boolean detectYoutubeDuplicateLines,
- String root, String formatAttr, String formatVersion, String[] cuePath, String[] framePath,
- String timeAttr, String durationAttr, boolean hasTimestamp
- ) throws IOException, ParseException, SAXException, ParserConfigurationException, XPathExpressionException {
- /*
- * XML based subtitles parser with BASIC support
- * multiple CUE is not supported
- * styling is not supported
- * tag timestamps (in auto-generated subtitles) are not supported, maybe in the future
- * also TimestampTagOption enum is not applicable
- * Language parsing is not supported
- */
-
- byte[] buffer = new byte[(int) source.available()];
- source.read(buffer);
-
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(true);
- DocumentBuilder builder = factory.newDocumentBuilder();
- Document xml = builder.parse(new ByteArrayInputStream(buffer));
-
- String attr;
-
- // get the format version or namespace
- Element node = xml.getDocumentElement();
-
- if (node == null) {
- throw new ParseException("Can't get the format version. ¿wrong namespace?", -1);
- } else if (!node.getNodeName().equals(root)) {
- throw new ParseException("Invalid root", -1);
- }
-
- if (formatAttr.equals("xmlns")) {
- if (!node.getNamespaceURI().equals(formatVersion)) {
- throw new UnsupportedOperationException("Expected xml namespace: " + formatVersion);
- }
- } else {
- attr = node.getAttributeNS(formatVersion, formatAttr);
- if (attr == null) {
- throw new ParseException("Can't get the format attribute", -1);
- }
- if (!attr.equals(formatVersion)) {
- throw new ParseException("Invalid format version : " + attr, -1);
- }
- }
-
- NodeList node_list;
-
- int line_break = 0;// Maximum characters per line if present (valid for TranScript v3)
-
- if (!hasTimestamp) {
- node_list = selectNodes(xml, cuePath, formatVersion);
-
- if (node_list != null) {
- // if the subtitle has multiple CUEs, use the highest value
- for (int i = 0; i < node_list.getLength(); i++) {
- try {
- int tmp = Integer.parseInt(((Element) node_list.item(i)).getAttributeNS(formatVersion, "ah"));
- if (tmp > line_break) {
- line_break = tmp;
- }
- } catch (Exception err) {
- }
- }
- }
- }
-
- // parse every frame
- node_list = selectNodes(xml, framePath, formatVersion);
-
- if (node_list == null) {
- return;// no frames detected
- }
-
- int fs_ff = -1;// first timestamp of first frame
- boolean limit_lines = false;
-
- for (int i = 0; i < node_list.getLength(); i++) {
- Element elem = (Element) node_list.item(i);
- SubtitleFrame obj = new SubtitleFrame();
- obj.text = elem.getTextContent();
-
- attr = elem.getAttribute(timeAttr);// ¡this cant be null!
- obj.start = hasTimestamp ? parseTimestamp(attr) : Integer.parseInt(attr);
-
- attr = elem.getAttribute(durationAttr);
- if (obj.text == null || attr == null) {
- continue;// normally is a blank line (on auto-generated subtitles) ignore
- }
-
- if (hasTimestamp) {
- obj.end = parseTimestamp(attr);
-
- if (detectYoutubeDuplicateLines) {
- if (limit_lines) {
- int swap = obj.end;
- obj.end = fs_ff;
- fs_ff = swap;
- } else {
- if (fs_ff < 0) {
- fs_ff = obj.end;
- } else {
- if (fs_ff < obj.start) {
- limit_lines = true;// the subtitles has duplicated lines
- } else {
- detectYoutubeDuplicateLines = false;
- }
- }
- }
- }
- } else {
- obj.end = obj.start + Integer.parseInt(attr);
- }
-
- if (/*node.getAttribute("w").equals("1") &&*/line_break > 1 && obj.text.length() > line_break) {
-
- // implement auto line breaking (once)
- StringBuilder text = new StringBuilder(obj.text);
- obj.text = null;
-
- switch (text.charAt(line_break)) {
- case ' ':
- case '\t':
- putBreakAt(line_break, text);
- break;
- default:// find the word start position
- for (int j = line_break - 1; j > 0; j--) {
- switch (text.charAt(j)) {
- case ' ':
- case '\t':
- putBreakAt(j, text);
- j = -1;
- break;
- case '\r':
- case '\n':
- j = -1;// long word, just ignore
- break;
- }
- }
- break;
- }
-
- obj.text = text.toString();// set the processed text
- }
-
- callback.yield(obj);
- }
- }
-
- private static NodeList selectNodes(Document xml, String[] path, String namespaceUri) {
- Element ref = xml.getDocumentElement();
-
- for (int i = 0; i < path.length - 1; i++) {
- NodeList nodes = ref.getChildNodes();
- if (nodes.getLength() < 1) {
- return null;
- }
-
- Element elem;
- for (int j = 0; j < nodes.getLength(); j++) {
- if (nodes.item(j).getNodeType() == Node.ELEMENT_NODE) {
- elem = (Element) nodes.item(j);
- if (elem.getNodeName().equals(path[i]) && elem.getNamespaceURI().equals(namespaceUri)) {
- ref = elem;
- break;
- }
- }
- }
- }
-
- return ref.getElementsByTagNameNS(namespaceUri, path[path.length - 1]);
- }
-
- private static int parseTimestamp(String multiImpl) throws NumberFormatException, ParseException {
- if (multiImpl.length() < 1) {
- return 0;
- } else if (multiImpl.length() == 1) {
- return Integer.parseInt(multiImpl) * 1000;// ¡this must be a number in seconds!
- }
-
- // detect wallclock-time
- if (multiImpl.startsWith("wallclock(")) {
- throw new UnsupportedOperationException("Parsing wallclock timestamp is not implemented");
- }
-
- // detect offset-time
- if (multiImpl.indexOf(':') < 0) {
- int multiplier = 1000;
- char metric = multiImpl.charAt(multiImpl.length() - 1);
- switch (metric) {
- case 'h':
- multiplier *= 3600000;
- break;
- case 'm':
- multiplier *= 60000;
- break;
- case 's':
- if (multiImpl.charAt(multiImpl.length() - 2) == 'm') {
- multiplier = 1;// ms
- }
- break;
- default:
- if (!Character.isDigit(metric)) {
- throw new NumberFormatException("Invalid metric suffix found on : " + multiImpl);
- }
- metric = '\0';
- break;
- }
- try {
- String offset_time = multiImpl;
-
- if (multiplier == 1) {
- offset_time = offset_time.substring(0, offset_time.length() - 2);
- } else if (metric != '\0') {
- offset_time = offset_time.substring(0, offset_time.length() - 1);
- }
-
- double time_metric_based = Double.parseDouble(offset_time);
- if (Math.abs(time_metric_based) <= Double.MAX_VALUE) {
- return (int) (time_metric_based * multiplier);
- }
- } catch (Exception err) {
- throw new UnsupportedOperationException("Invalid or not implemented timestamp on: " + multiImpl);
- }
- }
-
- // detect clock-time
- int time = 0;
- String[] units = multiImpl.split(":");
-
- if (units.length < 3) {
- throw new ParseException("Invalid clock-time timestamp", -1);
- }
-
- time += Integer.parseInt(units[0]) * 3600000;// hours
- time += Integer.parseInt(units[1]) * 60000;//minutes
- time += Float.parseFloat(units[2]) * 1000f;// seconds and milliseconds (if present)
-
- // frames and sub-frames are ignored (not implemented)
- // time += units[3] * fps;
- return time;
- }
-
- private static void putBreakAt(int idx, StringBuilder str) {
- // this should be optimized at compile time
-
- if (NEW_LINE.length() > 1) {
- str.delete(idx, idx + 1);// remove after replace
- str.insert(idx, NEW_LINE);
- } else {
- str.setCharAt(idx, NEW_LINE.charAt(0));
- }
- }
-
- private static String getTime(int time, boolean comma) {
- // cast every value to integer to avoid auto-round in ToString("00").
- StringBuilder str = new StringBuilder(12);
- str.append(numberToString(time / 1000 / 3600, 2));// hours
- str.append(':');
- str.append(numberToString(time / 1000 / 60 % 60, 2));// minutes
- str.append(':');
- str.append(numberToString(time / 1000 % 60, 2));// seconds
- str.append(comma ? ',' : '.');
- str.append(numberToString(time % 1000, 3));// miliseconds
-
- return str.toString();
- }
-
- private static String numberToString(int nro, int pad) {
- return String.format(Locale.ENGLISH, "%0".concat(String.valueOf(pad)).concat("d"), nro);
- }
-
-
- /******************
- * helper classes *
- ******************/
-
- private interface FrameWriter {
-
- void yield(SubtitleFrame frame) throws IOException;
- }
-
- private static class SubtitleFrame {
- //Java no support unsigned int
-
- public int end;
- public int start;
- public String text = "";
-
- private boolean isEmptyText() {
- if (text == null) {
- return true;
- }
-
- for (int i = 0; i < text.length(); i++) {
- switch (text.charAt(i)) {
- case ' ':
- case '\t':
- case '\r':
- case '\n':
- break;
- default:
- return false;
- }
- }
-
- return true;
- }
- }
-
-}
diff --git a/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java b/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java
index 5a5b687f7..8ed0dfae5 100644
--- a/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java
+++ b/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java
@@ -2,15 +2,10 @@ package us.shandian.giga.postprocessing;
import android.util.Log;
-import org.schabi.newpipe.streams.SubtitleConverter;
+import org.schabi.newpipe.streams.SrtFromTtmlWriter;
import org.schabi.newpipe.streams.io.SharpStream;
-import org.xml.sax.SAXException;
import java.io.IOException;
-import java.text.ParseException;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.xpath.XPathExpressionException;
/**
* @author kapodamy
@@ -27,33 +22,16 @@ class TtmlConverter extends Postprocessing {
int process(SharpStream out, SharpStream... sources) throws IOException {
// check if the subtitle is already in srt and copy, this should never happen
String format = getArgumentAt(0, null);
+ boolean ignoreEmptyFrames = getArgumentAt(1, "true").equals("true");
if (format == null || format.equals("ttml")) {
- SubtitleConverter ttmlDumper = new SubtitleConverter();
+ SrtFromTtmlWriter writer = new SrtFromTtmlWriter(out, ignoreEmptyFrames);
try {
- ttmlDumper.dumpTTML(
- sources[0],
- out,
- getArgumentAt(1, "true").equals("true"),
- getArgumentAt(2, "true").equals("true")
- );
+ writer.build(sources[0]);
} catch (Exception err) {
Log.e(TAG, "subtitle parse failed", err);
-
- if (err instanceof IOException) {
- return 1;
- } else if (err instanceof ParseException) {
- return 2;
- } else if (err instanceof SAXException) {
- return 3;
- } else if (err instanceof ParserConfigurationException) {
- return 4;
- } else if (err instanceof XPathExpressionException) {
- return 7;
- }
-
- return 8;
+ return err instanceof IOException ? 1 : 8;
}
return OK_RESULT;
From 49cc643dccefc66585b883d6ce8b1db858f88ef0 Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Mon, 13 Jan 2020 21:25:26 -0300
Subject: [PATCH 0150/1194] decrease the size of samples per chunk
---
.../newpipe/streams/Mp4FromDashWriter.java | 179 +++++++++++++-----
1 file changed, 129 insertions(+), 50 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
index 818f6148e..f94ebefb0 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
@@ -11,6 +11,7 @@ import org.schabi.newpipe.streams.io.SharpStream;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.util.ArrayList;
/**
* @author kapodamy
@@ -23,7 +24,6 @@ public class Mp4FromDashWriter {
private final static byte SAMPLES_PER_CHUNK = 6;// ffmpeg uses 2, basic uses 1 (with 60fps uses 21 or 22). NewPipe will use 6
private final static long THRESHOLD_FOR_CO64 = 0xFFFEFFFFL;// near 3.999 GiB
private final static int THRESHOLD_MOOV_LENGTH = (256 * 1024) + (2048 * 1024); // 2.2 MiB enough for: 1080p 60fps 00h35m00s
- private final static short SINGLE_CHUNK_SAMPLE_BUFFER = 256;
private final long time;
@@ -46,6 +46,8 @@ public class Mp4FromDashWriter {
private int overrideMainBrand = 0x00;
+ private ArrayList compatibleBrands = new ArrayList<>(5);
+
public Mp4FromDashWriter(SharpStream... sources) throws IOException {
for (SharpStream src : sources) {
if (!src.canRewind() && !src.canRead()) {
@@ -57,6 +59,10 @@ public class Mp4FromDashWriter {
readers = new Mp4DashReader[sourceTracks.length];
readersChunks = new Mp4DashChunk[readers.length];
time = (System.currentTimeMillis() / 1000L) + EPOCH_OFFSET;
+
+ compatibleBrands.add(0x6D703431);// mp41
+ compatibleBrands.add(0x69736F6D);// isom
+ compatibleBrands.add(0x69736F32);// iso2
}
public Mp4Track[] getTracksFromSource(int sourceIndex) throws IllegalStateException {
@@ -104,8 +110,8 @@ public class Mp4FromDashWriter {
}
}
- public void setMainBrand(int brandId) {
- overrideMainBrand = brandId;
+ public void setMainBrand(int brand) {
+ overrideMainBrand = brand;
}
public boolean isDone() {
@@ -159,7 +165,13 @@ public class Mp4FromDashWriter {
tablesInfo[i] = new TablesInfo();
}
- boolean singleChunk = tracks.length == 1 && tracks[0].kind == TrackKind.Audio;
+ int single_sample_buffer;
+ if (tracks.length == 1 && tracks[0].kind == TrackKind.Audio) {
+ // near 1 second of audio data per chunk, avoid split the audio stream in large chunks
+ single_sample_buffer = tracks[0].trak.mdia.mdhd_timeScale / 1000;
+ } else {
+ single_sample_buffer = -1;
+ }
for (int i = 0; i < readers.length; i++) {
@@ -210,31 +222,10 @@ public class Mp4FromDashWriter {
readers[i].rewind();
- int tmp = tablesInfo[i].stsz - SAMPLES_PER_CHUNK_INIT;
- tablesInfo[i].stco = (tmp / SAMPLES_PER_CHUNK) + 1;// +1 for samples in first chunk
-
- tmp = tmp % SAMPLES_PER_CHUNK;
- if (singleChunk) {
- // avoid split audio streams in chunks
- tablesInfo[i].stsc = 1;
- tablesInfo[i].stsc_bEntries = new int[]{
- 1, tablesInfo[i].stsz, 1
- };
- tablesInfo[i].stco = 1;
- } else if (tmp == 0) {
- tablesInfo[i].stsc = 2;// first chunk (init) and succesive chunks
- tablesInfo[i].stsc_bEntries = new int[]{
- 1, SAMPLES_PER_CHUNK_INIT, 1,
- 2, SAMPLES_PER_CHUNK, 1
- };
+ if (single_sample_buffer > 0) {
+ initChunkTables(tablesInfo[i], single_sample_buffer, single_sample_buffer);
} else {
- tablesInfo[i].stsc = 3;// first chunk (init) and successive chunks and remain chunk
- tablesInfo[i].stsc_bEntries = new int[]{
- 1, SAMPLES_PER_CHUNK_INIT, 1,
- 2, SAMPLES_PER_CHUNK, 1,
- tablesInfo[i].stco + 1, tmp, 1
- };
- tablesInfo[i].stco++;
+ initChunkTables(tablesInfo[i], SAMPLES_PER_CHUNK_INIT, SAMPLES_PER_CHUNK);
}
sampleCount[i] = tablesInfo[i].stsz;
@@ -274,6 +265,7 @@ public class Mp4FromDashWriter {
// reserve moov space in the output stream
/*if (outStream.canSetLength()) {
long length = writeOffset + auxSize;
+ // warning: setLength() does not fill the unused space with zeros
outStream.setLength(length);
outSeek(length);
} else {*/
@@ -292,10 +284,10 @@ public class Mp4FromDashWriter {
}
// tablesInfo contains row counts
- // and after returning from make_moov() will contain table offsets
+ // and after returning from make_moov() will contain those table offsets
make_moov(defaultMediaTime, tablesInfo, is64);
- // write tables: stts stsc
+ // write tables: stts stsc sbgp
// reset for ctts table: sampleCount sampleExtra
for (int i = 0; i < readers.length; i++) {
writeEntryArray(tablesInfo[i].stts, 2, sampleCount[i], defaultSampleDuration[i]);
@@ -305,6 +297,7 @@ public class Mp4FromDashWriter {
sampleCount[i] = 1;// the index is not base zero
sampleExtra[i] = -1;
}
+ writeEntryArray(tablesInfo[i].sbgp, 1, sampleCount[i]);
}
if (auxBuffer == null) {
@@ -314,8 +307,8 @@ public class Mp4FromDashWriter {
outWrite(make_mdat(totalSampleSize, is64));
int[] sampleIndex = new int[readers.length];
- int[] sizes = new int[singleChunk ? SINGLE_CHUNK_SAMPLE_BUFFER : SAMPLES_PER_CHUNK];
- int[] sync = new int[singleChunk ? SINGLE_CHUNK_SAMPLE_BUFFER : SAMPLES_PER_CHUNK];
+ int[] sizes = new int[single_sample_buffer > 0 ? single_sample_buffer : SAMPLES_PER_CHUNK];
+ int[] sync = new int[single_sample_buffer > 0 ? single_sample_buffer : SAMPLES_PER_CHUNK];
int written = readers.length;
while (written > 0) {
@@ -329,8 +322,8 @@ public class Mp4FromDashWriter {
long chunkOffset = writeOffset;
int syncCount = 0;
int limit;
- if (singleChunk) {
- limit = SINGLE_CHUNK_SAMPLE_BUFFER;
+ if (single_sample_buffer > 0) {
+ limit = single_sample_buffer;
} else {
limit = sampleIndex[i] == 0 ? SAMPLES_PER_CHUNK_INIT : SAMPLES_PER_CHUNK;
}
@@ -390,10 +383,6 @@ public class Mp4FromDashWriter {
} else {
tablesInfo[i].stco = writeEntryArray(tablesInfo[i].stco, 1, (int) chunkOffset);
}
-
- if (singleChunk) {
- tablesInfo[i].stco = -1;
- }
}
outRestore();
@@ -470,7 +459,42 @@ public class Mp4FromDashWriter {
}
}
+ private void initChunkTables(TablesInfo tables, int firstCount, int succesiveCount) {
+ // tables.stsz holds amount of samples of the track (total)
+ int totalSamples = (tables.stsz - firstCount);
+ float chunkAmount = totalSamples / (float) succesiveCount;
+ int remainChunkOffset = (int) Math.ceil(chunkAmount);
+ boolean remain = remainChunkOffset != (int) chunkAmount;
+ int index = 0;
+ tables.stsc = 1;
+ if (firstCount != succesiveCount) {
+ tables.stsc++;
+ }
+ if (remain) {
+ tables.stsc++;
+ }
+
+ // stsc_table_entry = [first_chunk, samples_per_chunk, sample_description_index]
+ tables.stsc_bEntries = new int[tables.stsc * 3];
+ tables.stco = remainChunkOffset + 1;// total entrys in chunk offset box
+
+ tables.stsc_bEntries[index++] = 1;
+ tables.stsc_bEntries[index++] = firstCount;
+ tables.stsc_bEntries[index++] = 1;
+
+ if (firstCount != succesiveCount) {
+ tables.stsc_bEntries[index++] = 2;
+ tables.stsc_bEntries[index++] = succesiveCount;
+ tables.stsc_bEntries[index++] = 1;
+ }
+
+ if (remain) {
+ tables.stsc_bEntries[index++] = remainChunkOffset + 1;
+ tables.stsc_bEntries[index++] = totalSamples % succesiveCount;
+ tables.stsc_bEntries[index] = 1;
+ }
+ }
private void outWrite(byte[] buffer) throws IOException {
outWrite(buffer, buffer.length);
@@ -585,19 +609,29 @@ public class Mp4FromDashWriter {
private int make_ftyp() throws IOException {
- byte[] buffer = new byte[]{
- 0x00, 0x00, 0x00, 0x1C, 0x66, 0x74, 0x79, 0x70,// ftyp
- 0x6D, 0x70, 0x34, 0x32,// mayor brand (mp42)
- 0x00, 0x00, 0x02, 0x00,// default minor version (512)
- 0x6D, 0x70, 0x34, 0x31, 0x69, 0x73, 0x6F, 0x6D, 0x69, 0x73, 0x6F, 0x32// compatible brands: mp41 isom iso2
- };
+ int size = 16 + (compatibleBrands.size() * 4);
+ if (overrideMainBrand != 0) size += 4;
- if (overrideMainBrand != 0)
- ByteBuffer.wrap(buffer).putInt(8, overrideMainBrand);
+ ByteBuffer buffer = ByteBuffer.allocate(size);
+ buffer.putInt(size);
+ buffer.putInt(0x66747970);// "ftyp"
- outWrite(buffer);
+ if (overrideMainBrand == 0) {
+ buffer.putInt(0x6D703432);// mayor brand "mp42"
+ buffer.putInt(512);// default minor version
+ } else {
+ buffer.putInt(overrideMainBrand);
+ buffer.putInt(0);
+ buffer.putInt(0x6D703432);// "mp42" compatible brand
+ }
- return buffer.length;
+ for (Integer brand : compatibleBrands) {
+ buffer.putInt(brand);// compatible brand
+ }
+
+ outWrite(buffer.array());
+
+ return size;
}
private byte[] make_mdat(long refSize, boolean is64) {
@@ -746,7 +780,6 @@ public class Mp4FromDashWriter {
}
private void make_mdia(Mdia mdia, TablesInfo tablesInfo, boolean is64) throws IOException {
-
int start_mdia = auxOffset();
auxWrite(new byte[]{0x00, 0x00, 0x00, 0x00, 0x6D, 0x64, 0x69, 0x61});// mdia
auxWrite(mdia.mdhd);
@@ -766,7 +799,7 @@ public class Mp4FromDashWriter {
// And stsz can be empty if has a default sample size
//
if (moovSimulation) {
- make(0x73747473, -1, 2, 1);
+ make(0x73747473, -1, 2, 1);// stts
if (tablesInfo.stss > 0) {
make(0x73747373, -1, 1, tablesInfo.stss);
}
@@ -789,6 +822,9 @@ public class Mp4FromDashWriter {
tablesInfo.stco = make(is64 ? 0x636F3634 : 0x7374636F, -1, is64 ? 2 : 1, tablesInfo.stco);
}
+ auxWrite(make_sgpd());
+ tablesInfo.sbgp = make_sbgp();// during simulation the returned offset is ignored
+
lengthFor(start_stbl);
lengthFor(start_minf);
lengthFor(start_mdia);
@@ -816,6 +852,48 @@ public class Mp4FromDashWriter {
return buffer.array();
}
+ private int make_sbgp() throws IOException {
+ int offset = auxOffset();
+
+ auxWrite(new byte[] {
+ 0x00, 0x00, 0x00, 0x1C,// box size
+ 0x73, 0x62, 0x67, 0x70,// "sbpg"
+ 0x00, 0x00, 0x00, 0x00,// default box flags
+ 0x72, 0x6F, 0x6C, 0x6C,// group type "roll"
+ 0x00, 0x00, 0x00, 0x01,// group table size
+ 0x00, 0x00, 0x00, 0x00,// group[0] total samples (to be set later)
+ 0x00, 0x00, 0x00, 0x01// group[0] description index
+ });
+
+ return offset + 0x14;
+ }
+
+ private byte[] make_sgpd() {
+ /*
+ * Sample Group Description Box
+ *
+ * ¿whats does?
+ * the table inside of this box gives information about the
+ * characteristics of sample groups. The descriptive information is any other
+ * information needed to define or characterize the sample group.
+ *
+ * ¿is replicabled this box?
+ * NO due lacks of documentation about this box but...
+ * most of m4a encoders and ffmpeg uses this box with dummy values (same values)
+ */
+
+ ByteBuffer buffer = ByteBuffer.wrap(new byte[] {
+ 0x00, 0x00, 0x00, 0x1A,// box size
+ 0x73, 0x67, 0x70, 0x64,// "sgpd"
+ 0x01, 0x00, 0x00, 0x00,// box flags (unknown flag sets)
+ 0x72, 0x6F, 0x6C, 0x6C, // ¿¿group type??
+ 0x00, 0x00, 0x00, 0x02,// ¿¿??
+ 0x00, 0x00, 0x00, 0x01,// ¿¿??
+ (byte)0xFF, (byte)0xFF// ¿¿??
+ });
+
+ return buffer.array();
+ }
class TablesInfo {
@@ -827,5 +905,6 @@ public class Mp4FromDashWriter {
int stsz_default;
int stss;
int stco;
+ int sbgp;
}
}
From 00eddcb2378c6788e1ef00d375ce9ef49747e4b5 Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Wed, 8 Jan 2020 14:36:31 -0300
Subject: [PATCH 0151/1194] android 5 (lollipop) fixup this commit attempts to
fix the pickAvailableTemporalDir() method in ROMS that not are CTS compliant.
---
.../giga/postprocessing/Postprocessing.java | 10 +++++---
.../giga/service/DownloadManager.java | 23 ++++++++++++++-----
2 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java b/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java
index 773ff92d1..e93e83a87 100644
--- a/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java
+++ b/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java
@@ -80,7 +80,7 @@ public abstract class Postprocessing implements Serializable {
private transient DownloadMission mission;
- private File tempFile;
+ private transient File tempFile;
Postprocessing(boolean reserveSpace, boolean worksOnSameFile, String algorithmName) {
this.reserveSpace = reserveSpace;
@@ -95,8 +95,12 @@ public abstract class Postprocessing implements Serializable {
public void cleanupTemporalDir() {
if (tempFile != null && tempFile.exists()) {
- //noinspection ResultOfMethodCallIgnored
- tempFile.delete();
+ try {
+ //noinspection ResultOfMethodCallIgnored
+ tempFile.delete();
+ } catch (Exception e) {
+ // nothing to do
+ }
}
}
diff --git a/app/src/main/java/us/shandian/giga/service/DownloadManager.java b/app/src/main/java/us/shandian/giga/service/DownloadManager.java
index e8bc468e9..994c6ee63 100644
--- a/app/src/main/java/us/shandian/giga/service/DownloadManager.java
+++ b/app/src/main/java/us/shandian/giga/service/DownloadManager.java
@@ -139,6 +139,9 @@ public class DownloadManager {
Log.d(TAG, "Loading pending downloads from directory: " + mPendingMissionsDir.getAbsolutePath());
}
+ File tempDir = pickAvailableTemporalDir(ctx);
+ Log.i(TAG, "using '" + tempDir + "' as temporal directory");
+
for (File sub : subs) {
if (!sub.isFile()) continue;
if (sub.getName().equals(".tmp")) continue;
@@ -184,7 +187,7 @@ public class DownloadManager {
if (mis.psAlgorithm != null) {
mis.psAlgorithm.cleanupTemporalDir();
- mis.psAlgorithm.setTemporalDir(pickAvailableTemporalDir(ctx));
+ mis.psAlgorithm.setTemporalDir(tempDir);
}
mis.metadata = sub;
@@ -513,13 +516,21 @@ public class DownloadManager {
}
static File pickAvailableTemporalDir(@NonNull Context ctx) {
- if (isDirectoryAvailable(ctx.getExternalFilesDir(null)))
- return ctx.getExternalFilesDir(null);
- else if (isDirectoryAvailable(ctx.getFilesDir()))
- return ctx.getFilesDir();
+ File dir = ctx.getExternalFilesDir(null);
+ if (isDirectoryAvailable(dir)) return dir;
+
+ dir = ctx.getFilesDir();
+ if (isDirectoryAvailable(dir)) return dir;
// this never should happen
- return ctx.getDir("tmp", Context.MODE_PRIVATE);
+ dir = ctx.getDir("muxing_tmp", Context.MODE_PRIVATE);
+ if (isDirectoryAvailable(dir)) return dir;
+
+ // fallback to cache dir
+ dir = ctx.getCacheDir();
+ if (isDirectoryAvailable(dir)) return dir;
+
+ throw new RuntimeException("Not temporal directories are available");
}
@Nullable
From 9b71828b97a46227f214b76cf99e53bb1884a7ee Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Tue, 14 Jan 2020 01:08:46 -0300
Subject: [PATCH 0152/1194] implement sgpd and sbgp boxes in audio tracks
---
.../org/schabi/newpipe/streams/Mp4FromDashWriter.java | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
index f94ebefb0..963d84b40 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
@@ -774,12 +774,12 @@ public class Mp4FromDashWriter {
.array()
);
- make_mdia(tracks[index].trak.mdia, tables, is64);
+ make_mdia(tracks[index].trak.mdia, tables, is64, tracks[index].kind == TrackKind.Audio);
lengthFor(start);
}
- private void make_mdia(Mdia mdia, TablesInfo tablesInfo, boolean is64) throws IOException {
+ private void make_mdia(Mdia mdia, TablesInfo tablesInfo, boolean is64, boolean isAudio) throws IOException {
int start_mdia = auxOffset();
auxWrite(new byte[]{0x00, 0x00, 0x00, 0x00, 0x6D, 0x64, 0x69, 0x61});// mdia
auxWrite(mdia.mdhd);
@@ -822,8 +822,10 @@ public class Mp4FromDashWriter {
tablesInfo.stco = make(is64 ? 0x636F3634 : 0x7374636F, -1, is64 ? 2 : 1, tablesInfo.stco);
}
- auxWrite(make_sgpd());
- tablesInfo.sbgp = make_sbgp();// during simulation the returned offset is ignored
+ if (isAudio) {
+ auxWrite(make_sgpd());
+ tablesInfo.sbgp = make_sbgp();// during simulation the returned offset is ignored
+ }
lengthFor(start_stbl);
lengthFor(start_minf);
From f8a7aac40d0e7e1a6558753e012dabd6f97d7df7 Mon Sep 17 00:00:00 2001
From: bopol
Date: Tue, 14 Jan 2020 14:15:42 +0100
Subject: [PATCH 0153/1194] fixed indonesian, see
https://stackoverflow.com/questions/13291578/how-to-localize-an-android-app-in-indonesian-language
---
app/src/main/res/{values-id => values-in}/strings.xml | 0
app/src/main/res/values/settings_keys.xml | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
rename app/src/main/res/{values-id => values-in}/strings.xml (100%)
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-in/strings.xml
similarity index 100%
rename from app/src/main/res/values-id/strings.xml
rename to app/src/main/res/values-in/strings.xml
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 18f42fe46..88da3afe5 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -956,7 +956,7 @@
- hu
- hy
- ia
- - ind
+ - in
- it
- ja
- ko
From 055365a44931b65e9fffd0d5d57595fe3be40abb Mon Sep 17 00:00:00 2001
From: bopol
Date: Tue, 14 Jan 2020 14:26:53 +0100
Subject: [PATCH 0154/1194] added Occitan to the selector
---
app/src/main/res/values/settings_keys.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 88da3afe5..08b18f49b 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -968,6 +968,7 @@
- ne
- nl
- nl-be
+ - oc
- pa
- pl
- pr
@@ -1032,6 +1033,7 @@
- Nनेपाली
- Nederlands (NL)
- Nederlands (BE)
+ - Occitan
- ਪੰਜਾਬੀ
- Polski
- Pirate Language
From 105981b2eb426b598f81694442621e8b695a642e Mon Sep 17 00:00:00 2001
From: bopol
Date: Tue, 14 Jan 2020 19:11:46 +0100
Subject: [PATCH 0155/1194] made system translatable + renamed it to system's
language
---
app/src/main/res/values/settings_keys.xml | 3 +--
app/src/main/res/values/strings.xml | 1 +
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 08b18f49b..ed3c454b8 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -993,7 +993,7 @@
- zh-tw
- - @string/system
+ - @string/systems_language
- العربية
- Azərbaycan dili
- Asturianu
@@ -1076,7 +1076,6 @@
list_view_mode
auto
- System
- auto
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8a44fdc64..c5a59abe7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -590,4 +590,5 @@
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
NewPipe\'s language
+ System\'s language
From a228e702daee7024ac88f3cbfadba031ce5b6951 Mon Sep 17 00:00:00 2001
From: Karol Kaminski
Date: Tue, 14 Jan 2020 19:30:36 +0100
Subject: [PATCH 0156/1194] menu-item History visibility accordingly to
settings
---
app/src/main/java/org/schabi/newpipe/MainActivity.java | 10 ++++++++++
.../main/java/org/schabi/newpipe/util/Constants.java | 2 ++
2 files changed, 12 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 2dfbb9c69..cce02f526 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -449,6 +449,16 @@ public class MainActivity extends AppCompatActivity {
sharedPreferences.edit().putBoolean(Constants.KEY_MAIN_PAGE_CHANGE, false).apply();
NavigationHelper.openMainActivity(this);
}
+
+ if (sharedPreferences.getBoolean(Constants.KEY_ENABLE_WATCH_HISTORY, true)) {
+ if (DEBUG) Log.d(TAG, "do not show History-menu as its disabled in settings");
+ drawerItems.getMenu().findItem(ITEM_ID_HISTORY).setVisible(true);
+ }
+
+ if (!sharedPreferences.getBoolean(Constants.KEY_ENABLE_WATCH_HISTORY, true)) {
+ if (DEBUG) Log.d(TAG, "show History-menu as its enabled in settings");
+ drawerItems.getMenu().findItem(ITEM_ID_HISTORY).setVisible(false);
+ }
}
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/util/Constants.java b/app/src/main/java/org/schabi/newpipe/util/Constants.java
index b01b6df6a..50350651d 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Constants.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Constants.java
@@ -11,5 +11,7 @@ public class Constants {
public static final String KEY_THEME_CHANGE = "key_theme_change";
public static final String KEY_MAIN_PAGE_CHANGE = "key_main_page_change";
+ public static final String KEY_ENABLE_WATCH_HISTORY = "enable_watch_history";
+
public static final int NO_SERVICE_ID = -1;
}
From b965f88eb206f9f6348018df2a1628985679b95d Mon Sep 17 00:00:00 2001
From: Karol Kaminski
Date: Tue, 14 Jan 2020 22:08:07 +0100
Subject: [PATCH 0157/1194] removed main_menu.xml
---
app/src/main/res/menu/main_menu.xml | 22 ----------------------
1 file changed, 22 deletions(-)
delete mode 100644 app/src/main/res/menu/main_menu.xml
diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml
deleted file mode 100644
index 05920099a..000000000
--- a/app/src/main/res/menu/main_menu.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
From 590722d929893308b1acbbec71322576510cf416 Mon Sep 17 00:00:00 2001
From: chr56
Date: Wed, 15 Jan 2020 12:30:17 +0800
Subject: [PATCH 0158/1194] manually update the Simplified Chinese lang file.
/values-b+zh+HANS+CN was updated.
Action: copy file in /values-b+zh+HANS+CN to /values-zh-rCN
---
app/src/main/res/values-zh-rCN/strings.xml | 30 +++++++++++++++++-----
1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 8714c6aca..cfa443afc 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -39,7 +39,7 @@
网络错误
- 视频
-
+
禁用
背景
@@ -160,7 +160,7 @@
使用第三方视频播放器
使用第三方视频播放器
音频下载文件夹
- 从其他应用打开 NewPipe 时就播放视频
+ 从其他应用调用 NewPipe 时播放视频
默认分辨率
找不到Kore。是否安装?
显示“用Kodi播放”选项
@@ -180,7 +180,7 @@
错误报告
错误
无法加载所有缩略图
- 无法解密视频 URL 的签名
+ 无法解密视频的 URL 签名
无法解析网址
无法完全解析网址
内容不可用
@@ -483,7 +483,7 @@
命名冲突,已存在具有此名称文件
无法覆盖文件
有此名称的已暂停下载
- 处理文件时,NewPipe 已关闭
+ NewPipe 在处理文件时被关闭
设备上没有剩余储存空间
进度丢失,文件已被删除
连接超时
@@ -507,12 +507,30 @@
无人在线观看
- %s 人在观看
-
+
没人在听
- - %s个听众
+ - %s 人在听
重新启动应用后,语言将更改。
+ PeerTube 服务器
+ 设置自己喜欢的peertube服务器
+ 查找最适合你的服务器https://joinpeertube.org/instances#instances-list
+ 添加服务器
+ 输入服务器网址
+ 无法验证服务器
+ 仅支持 https URL
+ 该服务器已存在
+ 本地
+ 最近添加
+ 最喜欢的
+ 自动生成的(未找到上传者)
+ 正在恢复
+ 无法恢复此下载
+ 选择一个服务器
+ 快进 / 快退的单位时间
+ 在锁屏界面显示视频缩略图
+ 在后台播放时,锁屏界面将会显示视频的缩略图
\ No newline at end of file
From 9d8fcbbffe7ade9e662ab94e1a5a539a7e4e7d04 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Wed, 15 Jan 2020 08:33:57 +0100
Subject: [PATCH 0159/1194] fix: wrong language shown when rotating screen in
popup player
---
.../main/java/org/schabi/newpipe/player/PopupVideoPlayer.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
index b173448d0..c0ac95445 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
@@ -172,6 +172,7 @@ public final class PopupVideoPlayer extends Service {
@Override
public void onConfigurationChanged(Configuration newConfig) {
+ changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
if (DEBUG) Log.d(TAG, "onConfigurationChanged() called with: newConfig = [" + newConfig + "]");
updateScreenSize();
updatePopupSize(popupLayoutParams.width, -1);
From ab089a5f932e18d5212337ced1ac2f3e4a747c3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=2E=20R=C3=BCdinger?=
Date: Mon, 13 Jan 2020 17:25:53 +0000
Subject: [PATCH 0160/1194] Translated using Weblate (German)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-de/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 586da69ee..3387a3c4f 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -79,7 +79,7 @@
Dein Kommentar (auf englisch):
Konnte keinen Stream abrufen
Automatische Wiedergabe
- Wiedergabe eines Videos, wenn NewPipe von einer anderen App aufgerufen wurde
+ Video abspielen, wenn NewPipe von einer anderen App aufgerufen wird
Einen Fehler melden
Anwenderbericht
LIVE
From 5adc27ea2b375804c1f6f2843647acb9473d3ae3 Mon Sep 17 00:00:00 2001
From: Nehemias Feliz
Date: Mon, 13 Jan 2020 15:16:17 +0000
Subject: [PATCH 0161/1194] Translated using Weblate (Spanish)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-es/strings.xml | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index eacda9f4a..9f25208bb 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -520,16 +520,18 @@
El idioma cambiará luego de que la app sea reiniciada.
Duración de búsqueda al avanzar y/o retroceder
Instancias de PeerTube
- Elige tus instancias favoritas de PeerTube
- Encuentra las mejores instancias para ti en https://joinpeertube.org/instances#instances-list
+ Selecciona tus instancias favoritas de PeerTube
+ Encuentra las mejores instancias para ti en %s
Agregar instancia
- Dirección URL de la instancia
- Error al validar la instancia
- Sólo URLs con HTTPS
+ Ingresar URL de la instancia
+ No se pudo validar la instancia
+ Sólo URLs con HTTPS son soportados
La instancia ya existe
Local
Agregados recientemente
Más gustados
Generado automáticamente (no se encontró creador)
Elige una instancia
+ Habilitar miniatura de video de la pantalla de bloqueo
+ Al usar el reproductor de fondo, se mostrará una miniatura de video en la pantalla de bloqueo
\ No newline at end of file
From 515ec4d66d913d2b5e698953acd5c4b7e9195ace Mon Sep 17 00:00:00 2001
From: DodoLeDev
Date: Mon, 13 Jan 2020 21:08:10 +0000
Subject: [PATCH 0162/1194] Translated using Weblate (French)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-fr/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 463057480..72b99982b 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -122,7 +122,7 @@
M
Cette autorisation est nécessaire pour
\nutiliser le mode flottant
- Arrière-plan
+ Lire l\'audio
Flottant
Définition de la fenêtre flottante par défaut
Afficher des définitions plus élevées
@@ -185,7 +185,7 @@
Notification NewPipe
Annuler
Garde un suivi des vidéos vues
- Reprendre à l’obtention de la cible de saisie
+ Reprendre lors du retour dans l\'application
Lecteur
Comportement
Historique et cache
@@ -310,7 +310,7 @@
Utiliser la recherche rapide approximative
Permet au lecteur d’accéder plus rapidement à une position au détriment de la précision
Charger les miniatures
- Désactiver pour empêcher le chargement des miniatures afin d\'économiser vos données. Modifier cette option vide le cache en mémoire vive et sur le disque.
+ Désactivez pour empêcher le chargement des miniatures afin de réduire l’utilisation de la bande passante et de la mémoire. La modification de cette option, vide le cache en mémoire vive et sur le disque.
Images en cache effacées
Effacer les métadonnées en cache
Efface toutes les données de pages Web en cache
From ac3938d5296486ac705c91906da9fd3e838e2504 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Tue, 14 Jan 2020 09:03:07 +0000
Subject: [PATCH 0163/1194] Translated using Weblate (French)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-fr/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 72b99982b..444310aef 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -534,5 +534,5 @@
Choisissez une instance
Généré automatiquement (pas de téléverseur trouvé)
Activer la vidéo miniaturisée sur l\'écran de verrouillage
- En utilisant le lecteur en arrière-plan, une vidéo miniaturisé sera affichée sur l\'écran de verrouillage
+ En utilisant le lecteur audio, la miniature de la vidéo sera affichée sur l\'écran de verrouillage
\ No newline at end of file
From 41e2e5f951ad38d998547ddd71c839e0ee043622 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Tue, 14 Jan 2020 09:09:23 +0000
Subject: [PATCH 0164/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (525 of 525 strings)
---
app/src/main/res/values-eo/strings.xml | 46 +++++++++++++-------------
1 file changed, 23 insertions(+), 23 deletions(-)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 6d19f8213..224e8837e 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -15,9 +15,9 @@
turno
Uzi eksteran filmetoludilon
Uzi eksteran sonludilon
- Defaŭlta distingivo
- Legi per Kodi
- Montri \"Legi per Kodi\"-opcion
+ Defaŭlta rezolucio
+ Ludi per Kodi
+ Montri \"Ludi per Kodi\"-opcion
Sono
Defaŭlta sondosierformo
Etoso
@@ -30,8 +30,8 @@
Filmeto kaj sono
Apero
Alia
- Ludado fone
- Legi
+ Ludanta fone
+ Ludi
Eraro
Reteraro
Enhavo malhavebla
@@ -45,7 +45,7 @@
La subskribo de la ligilo de la filmeto ne malĉifreblas
La retejo ne analizeblas
Bildeto de la antaŭrigardo de la filmeto
- Legi filmeton, daŭro:
+ Ludi filmeton, daŭro:
Bildeto de la alŝutinto
La elŝutujo \'%1$s\' ne kreeblas
Elŝutujo \'%1$s\' kreita
@@ -69,7 +69,7 @@
Premu serĉo por komenci
Neniu elsendlflua ludilo trovita (instalu VLC por ludi ĝin).
Malfermi en ŝprucfenestron modon
- Forigas aŭdion ĉe KELKAJ distingivoj
+ Forigas aŭdon ĉe KELKAJ rezolucioj
NewPipe ŝprucfenestron modon
Aboni
Abonita
@@ -86,10 +86,10 @@
Ŝprucfenestro
Aldonu al
Aŭtomata play
- Legas filmeton kiam NewPipe vokas de alia programo
- Defaŭlta distingivo de la ŝprucfenestro
- Montri pli altajn distingivojn
- Nur kelkaj aparatoj subtenas legante 2K / 4K filmetojn
+ Ludas filmeton kiam NewPipe vokas el alia programo
+ Defaŭlta rezolucio de la ŝprucfenestro
+ Montri pli altajn rezoluciojn
+ Nur kelkaj aparatoj subtenas ludi 2K / 4K filmetojn
Defaŭlta fomato de filmeto
Nigra
Memoru ŝprucfenestron kaj pozicion
@@ -122,7 +122,7 @@
Poste
Tiu permeso estas necesa por
\nmalfermi en ŝprucfenestro modo
- Leganta en ŝprucfenestro modo
+ Ludanta en ŝprucfenestro modo
Malaktiva
Filtri
Aktualigi
@@ -133,13 +133,13 @@
Uzu gestojn por kontroli la brilon kaj volumenon de la ludilo
Serĉi sugestojn
Montri sugestojn kiam serĉanto
- Plej bona distingivo
+ Plej bona rezolucio
Libera malpeza torentado ĉe Android.
Elŝuti
Leteroj kaj ciferoj
Plej specialaj karakteroj
Rekomencu en fokusa gajno
- Daŭrigi la legon post la interrompaĵoj (ekzemple telefonadoj)
+ Daŭrigi la ludon post la interrompaĵoj (ekzemple telefonadoj)
Serĉa historio
Konservi la historio de serĉo lokale
Rigardu historion
@@ -205,7 +205,7 @@
Ne povis forigi ludlisto.
Malcimigi
Auto-vico sekva fluo
- Aŭto-aldoni rilatan enhavon kiam leganta la lasta enhavo en malrepetita atendovico
+ Aŭto-aldoni rilatan enhavon kiam ludanta la lasta enhavo en malrepetita atendovico
Dosiero
Tia dosierujo ne ekzistas
Tia dosiero/enhavo ne ekzistas
@@ -236,7 +236,7 @@
Forviŝi la serĉajn ŝlosilvortojn
Ĉu vi volas forviŝi la totalon de la historio de serĉo \?
Historio de serĉo forviŝita.
- Limigi distingivo kiam uzanta moveblan datumon
+ Limigi rezolucio kiam uzanta moveblan datumon
Minimumigi al ŝprucfenestro ludilo
Kanaloj
Ludlistoj
@@ -265,7 +265,7 @@
Konferencoj
Montri komentojn
Malebligu por malvidigi komentojn
- Aŭtolego
+ Aŭtoludo
- Komentoj
@@ -342,7 +342,7 @@
Rigardu ĉe GitHub
Permesilo de NewPipe
Ĉu vi havas ideojn pri; traduko, desegnaĵoj ŝanĝoj, purigado de kodo, aŭ realaj masivaj ŝanĝoj—helpo estas ĉiam bonvena. Ju pli oni faras, des pli bonas!
- Legu permesilon
+ Legi permesilon
Kontribui
Permesitaj karakteroj en dosiernomoj
Nevalidaj karakteroj estas anstataŭigita kun ĉi tiu valoro
@@ -375,7 +375,7 @@
Neniuj kanalaj abonoj ankoraŭ
Elekti kioskon
Komenci ludi ĉi tie
- Komenci ludi en la fono
+ Komenci ludi fone
Donaci
NewPipe estas programada par volontuoj, elspezante tempo por alporti vin la plej bona sperto. Redonu por helpi programistojn plibonigi NewPipe dum ĝuante tason da kafo.
Redoni
@@ -413,7 +413,7 @@
La monitorado de la memorlikadoj povas frostigi la apon dum la hejta dumpingo
Signali ekster-vivciklajn erarojn
Perforti signalante neenretigaj Rx esceptoj eksere la fragmento aŭ aktiveco vivciklo post dispono
- La dosiero ne ekzistas aŭ la legopermeso mankas
+ La dosiero ne ekzistas aŭ la ludopermeso mankas
Importi/eksporti
Importi
Importi el
@@ -440,10 +440,10 @@
NewPipe estas programaro sub rajtoceda permesilo: Vi povas uzi, studi, komuniki kaj plibonigi ĝin kiel vi volas. Precize, vi povas redistribui kaj/aŭ modifi ĝin sub la kondiĉoj de la Ĝenerala Publika Permesilo de GNU, kiel publikigita per la Free Software Foundation, ĉu en la versio 3, ĉu (se vi volas) ajna posta versio.
Ĉu vi volas ankaŭ importi agordojn\?
Privateca politiko de NewPipe
- La NewPipe projekto respektas vian privatecon serioze. Konsekvence, la apo ne kolektas ajnan datumo sen via konsento.
+ La NewPipe projekto serioze respektas vian privatecon. Konsekvence, la apo ne kolektas ajnan datumo sen via konsento.
\nLa privateco politiko de Newpipe detale eksplikas kion datumon estas sendita kaj stokita kiam vi sendas falegosignalon.
Legi la privatecan politikon
- Por konformiĝi al la Ĝenerala Datum-Protekta Regularon (GDPR), ni allogas vian atento al la privateca politiko de NewPipe. Bonvolu legi ĝin atentive.
+ Por konformiĝi al la Ĝenerala Datum-Protekta Regularon (GDPR), ni allogas vian atenton al la privateca politiko de NewPipe. Bonvolu atentive legi ĝin.
\nVi devas akcepti ĝin por sendi nin la cimsignalo.
Akcepti
Rifuzi
@@ -455,7 +455,7 @@
Plirapidigi dum silentoj
Paŝo
Restarigi
- Uzante defaŭltajn ongletojn, eraro dum leganta savajn ongletojn
+ Uzante defaŭltajn ongletojn, eraro ludante savajn ongletojn
Restaŭri la defaŭltojn
Ĉu vi volas restaŭri la defaŭltojn \?
Kalkulo de abonantoj malhavebla
From 40eaa166ae89cd8db3942edf7980eb6c281fcd73 Mon Sep 17 00:00:00 2001
From: Matsuri
Date: Tue, 14 Jan 2020 03:32:55 +0000
Subject: [PATCH 0165/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 97.3% (511 of 525 strings)
---
.../main/res/values-b+zh+HANS+CN/strings.xml | 20 +++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index cfa443afc..5a019881b 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -6,7 +6,7 @@
在浏览器中打开
在悬浮窗模式下打开
您是不是要找:%1$s?
- 找不到串流播放器 (您可以安裝并使用VLC播放)。
+ 找不到串流播放器 (您可以安装 VLC 进行播放)。
下载串流文件
安装
取消
@@ -16,7 +16,7 @@
设置
分享给...
选择浏览器
- 视频下载文件夹
+ 视频下载路径
已下载的视频存储在这里
请选择下载视频的保存位置
已下载的音频存储在这里
@@ -42,7 +42,7 @@
禁用
- 背景
+ 后台播放
过滤器
刷新
搜索建议
@@ -157,8 +157,8 @@
切换服务,当前选择:
找不到串流播放器。您想安装 VLC 吗?
旋转
- 使用第三方视频播放器
- 使用第三方视频播放器
+ 使用外部视频播放器
+ 使用外部音频播放器
音频下载文件夹
从其他应用调用 NewPipe 时播放视频
默认分辨率
@@ -209,7 +209,7 @@
\n需要此权限
reCAPTCHA验证
请求的新的CAPTCHA验证
- NewPipe悬浮窗模式
+ NewPipe 悬浮窗模式
在悬浮窗中播放
默认悬浮窗分辨率
使用更高的分辨率
@@ -219,7 +219,7 @@
记住最后一次使用悬浮窗的大小和位置
悬浮窗
调整大小
- 删除“某些”分辨率的音频
+ 部分分辨率的视频将没有声音
播放器手势控制
使用手势控制播放器的亮度和音量
显示搜索建议
@@ -234,9 +234,9 @@
取消订阅频道
无法修改订阅
无法更新订阅
- 主页面
+ 主页
订阅
- 新增功能
+ 最新
恢复前台焦点
中断后继续播放(例如突然来电后)
搜索历史记录
@@ -321,7 +321,7 @@
警告:无法导入所有文件。
这将覆盖当前设置。
显示信息
- 已收藏
+ 书签
确定要从观看历史记录中删除该项吗?
是否确实要从历史记录中删除所有项目?
最后播放
From 2e6089088b3da360c6593f97d332e69c321c3331 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Wed, 15 Jan 2020 07:03:45 +0000
Subject: [PATCH 0166/1194] Translated using Weblate (Urdu)
Currently translated at 95.0% (499 of 525 strings)
---
app/src/main/res/values-ur/strings.xml | 44 +++++++++++++-------------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 089b793c8..724c9c3ed 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -8,7 +8,7 @@
بانٹیں
ڈاؤن لوڈکریں
تلاش کریں
- کیا آپ کا مطلب تھا: %1$s \?
+ کیا آپ کا مطلب تھا: s$1%\?
انٹرنیٹ میں کھولیں
ترتیبات
کوئیstream پلیئر نہیں ملا.کیا آپ VLC انسٹال کرنا چاہتے ہیں؟
@@ -159,7 +159,7 @@
ایسی کوئی فائل / مواد کا ذریعہ نہیں
فائل موجود نہیں ہے اور نہ ہی اسے پڑھنے یا لکھنے کی اجازت ہے
فائل کا نام ضروری ہے
- ایک خامی پیش آگئی:٪ 1 $ s
+ ایک خامی پیش آگئی: s$1%
کوئی اسٹریمز ڈاؤن لوڈ کرنے کے لئے دستیاب نہیں
معذرت ، ایسا نہیں ہونا چاہئے تھا۔
ای میل کے ذریعے غلطی کی اطلاع دیں
@@ -182,8 +182,8 @@
کوئی نتیجہ نہیں
یہاں کچھ نہیں مگر اداسی کے
دوبارہ ترتیب دینے کیلئے کھینچں
- ڈاؤن لوڈ ڈائریکٹری \'٪ 1 $ s\' تشکیل نہیں دے سکتے
- ڈاؤن لوڈ ڈائریکٹری \'٪ 1 $ s\' بن گئی
+ ڈاؤن لوڈ ڈائریکٹری \'s$1%\' تشکیل نہیں دے سکتے
+ ڈاؤن لوڈ ڈائریکٹری \'s$1%\' بن گئی
ویڈیو
آڈیو
دوبارہ کوشش کریں
@@ -193,18 +193,18 @@
بی
کوئی صارفین نہیں
- - % s صارف
- - % s صارفین
+ - s% صارف
+ - s% صارفین
کوئی مناظر نہیں
- - % s منظر
- - % s مناظر
+ - s% منظر
+ - s% مناظر
ویڈیوز دستیاب نہیں
- ویڈیوز
-
+
شروع کریں
توقف
@@ -306,7 +306,7 @@
دراز بند کریں
یہاں جلد ہی کچھ نظر آئے گا D D
ترجیح \' کھلی \' عمل
- مواد کھولنے پر ڈیفالٹ کارروائی -٪ s
+ مواد کھولنے پر ڈیفالٹ کارروائی — s%
ویڈیو پلیئر
پس منظر پلیئر
پوپ اپ پلیئر
@@ -345,16 +345,16 @@
پچھلی برآمد
سبسکرپشنز کو درآمد نہیں کیا جاسکا
رکنیت برآمد نہیں کر سکا
- برآمد فائل کو ڈاؤن لوڈ کرکے YouTube کی رکنیت کو درآمد کریں:
-\n
-\n1. اس یو آر ایل پر جائیں:٪ 1 $ s
-\n2. جب پوچھا جائے تو لاگ ان کریں
+ برآمد فائل کو ڈاؤن لوڈ کرکے YouTube کی رکنیت کو درآمد کریں:
+\n
+\n1. اس یو آر ایل پر جائیں:s$1%
+\n2. جب پوچھا جائے تو لاگ ان کریں
\nA. ڈاؤن لوڈ شروع ہونا چاہئے (یہ برآمد فائل ہے)
- URL یا آپ کی ID ٹائپ کرکے ایک SoundCloud پروفائل درآمد کریں:
-\n
-\n1. ویب براؤزر میں \"ڈیسک ٹاپ موڈ\" کو فعال کریں (سائٹ موبائل آلات کے لئے دستیاب نہیں ہے)
-\n2. اس URL پر جائیں: %1 $ s
-\n3. پوچھا گیا میں لاگ ان کریں
+ URL یا آپ کی ID ٹائپ کرکے ایک SoundCloud پروفائل درآمد کریں:
+\n
+\n1. ویب براؤزر میں \"ڈیسک ٹاپ موڈ\" کو فعال کریں (سائٹ موبائل آلات کے لئے دستیاب نہیں ہے)
+\n2. اس URL پر جائیں: s$1%
+\n3. پوچھا گیا میں لاگ ان کریں
\n4. پروفائل یو آر ایل کاپی کریں جو آپ کو ہدایت کی گئی تھی.
yourID، soundcloud.com/yourid
یاد رکھیں کہ یہ آپریشن نیٹ ورک مہنگا ہوسکتا ہے۔
@@ -388,7 +388,7 @@
کوئی حد نہیں
موبائل ڈیٹا کا استعمال کرتے وقت ریذولوشن کو محدود کریں
ایپ سوئچ کو کم سے کم کریں
- اہم ویڈیو پلیئر سے دوسرے ایپ میں سوئچنگ کرتے وقت کارروائی-% s
+ اہم ویڈیو پلیئر سے دوسرے ایپ میں سوئچنگ کرتے وقت کارروائی — %s
کوئی نہیں
پس منظری پلیر میں کم کریں
پاپ اپ پلیر میں کم کریں
@@ -437,7 +437,7 @@
سسٹم نےکارروائی سے انکار کیا گیا
ڈاؤن لوڈ ناکام
ڈاؤن لوڈ تکمیل
- ٪ s ڈاؤن لوڈ مکمل ہوگئے
+ s% ڈاؤن لوڈ مکمل ہوگئے
منفرد نام بنائیں
برتحریر
اس نام کے ساتھ ایک ڈاؤن لوڈ جاری ہے
@@ -466,7 +466,7 @@
آٹوپلے
- تبصرے
-
+
کوئی تبصرہ نہیں
تبصرے لوڈ نہیں ہوسکے
From 8caf9f87a178bf934c5c106162f5f1e154014a79 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=ADs=20B?=
Date: Mon, 13 Jan 2020 14:49:26 +0000
Subject: [PATCH 0167/1194] Translated using Weblate (Occitan)
Currently translated at 17.9% (94 of 525 strings)
---
app/src/main/res/values-oc/strings.xml | 47 ++++++++++++++++++++++++--
1 file changed, 44 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml
index 190c2c890..1abaaccb1 100644
--- a/app/src/main/res/values-oc/strings.xml
+++ b/app/src/main/res/values-oc/strings.xml
@@ -2,8 +2,8 @@
%1$s vistas
Publicat lo %1$s
- Cap de lector de flus trobat. Volètz installar VLC\?
- Cap de lector de flus trobat (podètz installar VLC per lo legir).
+ Cap de legidor de flus trobat. Volètz installar VLC\?
+ Cap de legidor de flus trobat (podètz installar VLC per lo legir).
Installar
Anullar
Dobrir dins lo navegador
@@ -17,7 +17,7 @@
Partejar amb
Causir un navegador
rotacion
- Utilizar un lector de vidèo extèrne
+ Utilizar un legidor de vidèo extèrne
Mòde fenestron de NewPipe
S\'abonar
Abonat
@@ -27,4 +27,45 @@
Afichar las informacions
Principal
Abonaments
+ Clicatz sul boton de recèrca per començar
+ Lèva l\'àudio per CÈRTAS resolucions
+ Utilizar lo legidor àudio extèrne
+ Abonament a la cadena anullat
+ Listas de lectura enregistradas
+ Onglet novèl
+ Causir un onglet
+ Çò novèl
+ Rèireplan
+ Fenestron
+ Apondre a
+ Dorsièr de telecargament de vidèos
+ Los fichièrs vidèo telecargats son aquí
+ Causissètz lo dorsièr de telecargament de las vidèos
+ Dorsièr de telecargament dels àudios
+ Los fichièrs àudio telecargats son estremats aicí
+ Causissètz lo dorsièr de telecargament pels àudios
+ Cambiatz los dorsièrs de telecargament per venga efectiu
+ Lectura automatica
+ Legís una vidèo quand NewPIpe es apelat dempuèi una autra aplicacion
+ Resolucion per defaut
+ Resolucion per defaut dels fenestrons
+ Afichar de resolucions mai nautas
+ Totes los dispositius pòdon pas legir de vidèos 2K/4K
+ Jogar amb Kodi
+ Trobam pas l\'aplicacion Kore. La volètz installar\?
+ Afichar l\'opcion \"Legir amb Kodi\"
+ Activar la vidèo miniatura sus l\'ecran de blocatge
+ Afichar una opcion per legir una vidèo dempuèi Kodi
+ En utilizant lo legidor de rèireplan, una vidèo miniatura s\'aficharà sus l\'ecran de blocatge
+ Àudio
+ Format àudio per defaut
+ Format vidèo per defaut
+ Tèma
+ Clar
+ Escur
+ Negre
+ Se remembrar la talha e la posicion del fenestron
+ Se remembrar las darrièras talha e posicion del fenestron
+ Utilzar la recèrca rapida inexacta
+ La recèrca inexacta permet a l\'utilizaire de recercar mai rapidament una posicion amb mens de precision
\ No newline at end of file
From ba53f6611cee52709d1a650713e515e91a06cfbf Mon Sep 17 00:00:00 2001
From: chr56
Date: Wed, 15 Jan 2020 09:05:10 +0000
Subject: [PATCH 0168/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 97.3% (513 of 527 strings)
---
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index 5a019881b..078379683 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -516,8 +516,8 @@
重新启动应用后,语言将更改。
PeerTube 服务器
- 设置自己喜欢的peertube服务器
- 查找最适合你的服务器https://joinpeertube.org/instances#instances-list
+ 设置自己喜欢的PeerTube服务器
+ 查找最适合你的服务器%s
添加服务器
输入服务器网址
无法验证服务器
@@ -533,4 +533,7 @@
快进 / 快退的单位时间
在锁屏界面显示视频缩略图
在后台播放时,锁屏界面将会显示视频的缩略图
+ 清除下载历史记录
+ 删除下载了的文件
+ 已删除 %1$s 下载
\ No newline at end of file
From 29b12c2f845b485155b275fda92c061710df8412 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Wed, 15 Jan 2020 19:30:46 +0000
Subject: [PATCH 0169/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ru/strings.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index f3fdbbc18..a55b70e29 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -492,7 +492,7 @@
NewPipe была закрыта во время работы над файлом
Закончилось свободное место на устройстве
Прогресс потерян, так как файл был удалён
- Вы уверены\?
+ Действительно удалить историю загрузок и загруженные файлы\?
Ограничить очередь загрузки
Только одна одновременная загрузка
Начать загрузку
@@ -540,4 +540,7 @@
Выберите сервер
Миниатюра на экране блокировки
Показать миниатюру видео на экране блокировки при воспроизведении в фоне
+ Очистить историю загрузок
+ Удаление загруженных файлов
+ Удалено загрузок: %1$s
\ No newline at end of file
From b731c79339ee356ff86d1ec8a293765351102843 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Wed, 15 Jan 2020 10:09:59 +0000
Subject: [PATCH 0170/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-tr/strings.xml | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 1ea8ad817..c6603382d 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -5,7 +5,7 @@
Yayınlanma: %1$s
Akış oynatıcısı bulunamadı. VLC\'yi yüklemek ister misiniz\?
Yükle
- İptal et
+ Vazgeç
Tarayıcıda aç
Paylaş
İndir
@@ -484,7 +484,7 @@
Aygıt üzerinde yer yok
İlerleme kaybedildi, çünkü dosya silinmiş
Bağlantı zaman aşımı
- Emin misiniz\?
+ İndirme geçmişinizi temizlemek veya indirilen tüm dosyaları silmek istiyor musunuz\?
İndirme kuyruğunu sınırla
Aynı anda yalnızca bir indirme yürütülecek
İndirmeleri başlat
@@ -535,4 +535,7 @@
Bir örnek seçin
Kilit ekranı video küçük resmini etkinleştir
Arka plan oynatıcıyı kullanırken kilit ekranında bir video küçük resmi görüntülenecektir
+ İndirme geçmişini temizle
+ İndirilen dosyaları sil
+ %1$s indirme silindi
\ No newline at end of file
From 3341742f660808bd33351f3cb088f198203a3b74 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Wed, 15 Jan 2020 10:31:57 +0000
Subject: [PATCH 0171/1194] Translated using Weblate (Hebrew)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-he/strings.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index d1a72739d..7a1338f60 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -496,7 +496,7 @@
לא נשאר מקום במכשיר
התהליך אבד כיוון שהקובץ נמחק
החיבור המתין זמן רב מדי
- בוודאות\?
+ למחוק את היסטוריית ההורדות שלך או למחוק את כל הקבצים שהורדת\?
הגבלת תור ההורדה
רק הורדה אחת תרוץ בו־זמנית
התחלת הורדות
@@ -547,4 +547,7 @@
נא לבחור מופע
הפעלת תמונה מוקטנת של הסרטון במסך הנעילה
בעת השימוש בנגן הרקע תופיע תמונה מוקטנת של הסרטון על מסך הנעילה
+ מחיקת היסטוריית ההורדות
+ למחוק את הקבצים שהורדתי
+ נמחקו %1$s הורדות
\ No newline at end of file
From 1b708d261dab962237e7cdf3413af0e1a91d1c2a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=ADs=20B?=
Date: Wed, 15 Jan 2020 10:17:23 +0000
Subject: [PATCH 0172/1194] Translated using Weblate (Occitan)
Currently translated at 18.8% (99 of 527 strings)
---
app/src/main/res/values-oc/strings.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml
index 1abaaccb1..e69e43b44 100644
--- a/app/src/main/res/values-oc/strings.xml
+++ b/app/src/main/res/values-oc/strings.xml
@@ -68,4 +68,9 @@
Se remembrar las darrièras talha e posicion del fenestron
Utilzar la recèrca rapida inexacta
La recèrca inexacta permet a l\'utilizaire de recercar mai rapidament una posicion amb mens de precision
+ Durada d\'avançada/reculada rapida
+ Cargar las miniaturas
+ Afichar los comentaris
+ Desactivar per afichar pas mai los comentaris
+ Apondre la vidèo seguenta dins la coa de lectura
\ No newline at end of file
From 5f232a059d5ce434ee91573ff0686bff61e2931f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Thu, 16 Jan 2020 00:37:23 +0000
Subject: [PATCH 0173/1194] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?=
=?UTF-8?q?gian=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 96.4% (508 of 527 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 1038d15c4..75ffe45e9 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -521,4 +521,7 @@
Nylig lagt til
Mest likt
Velg en instans
+ Tøm nedlastingshistorikk
+ Slett nedlastede filer
+ Slettet %1$s nedlastninger
\ No newline at end of file
From e3dfab5078b30d4f00a0c66f14913a0e54b242c8 Mon Sep 17 00:00:00 2001
From: Deleted User
Date: Thu, 16 Jan 2020 02:12:54 +0000
Subject: [PATCH 0174/1194] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?=
=?UTF-8?q?gian=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 96.4% (508 of 527 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 75ffe45e9..d01647f5d 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -524,4 +524,6 @@
Tøm nedlastingshistorikk
Slett nedlastede filer
Slettet %1$s nedlastninger
+ Aktiver videominiatyrbilde med låseskjerm
+ Når du bruker bakgrunnsspilleren, vises en videominiaturbilde på låseskjermen
\ No newline at end of file
From 3ee678875361681861327bba9f718b73619b6a67 Mon Sep 17 00:00:00 2001
From: nautilusx
Date: Thu, 16 Jan 2020 07:23:22 +0000
Subject: [PATCH 0175/1194] Translated using Weblate (German)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-de/strings.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 3387a3c4f..53b9a52eb 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -489,7 +489,7 @@
NewPipe wurde während der Verarbeitung der Datei geschlossen
Kein Speicherplatz mehr auf dem Gerät
Vorgang abgebrochen, da die Datei gelöscht wurde
- Bist Du sicher\?
+ Möchtest du deinen Downloadverlauf oder alle heruntergeladenen Dateien löschen\?
Downloadwarteschlange begrenzen
Ein Download wird zur gleichen Zeit ausgeführt
Downloads starten
@@ -536,4 +536,7 @@
Dieser Download kann nicht wiederhergestellt werden
Video-Vorschaubild für Sperrbildschirm aktivieren
Bei Verwendung des Hintergrundplayers wird ein Video-Miniaturbild auf dem Sperrbildschirm angezeigt
+ Downloadverlauf löschen
+ Heruntergeladene Dateien löschen
+ %1$s Downloads gelöscht
\ No newline at end of file
From 235ead9222d3b29c225d9ea5192cf0ba5c455c14 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Thu, 16 Jan 2020 19:52:52 +0000
Subject: [PATCH 0176/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ru/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index a55b70e29..1da98cc74 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -522,10 +522,10 @@
- %s слушателей
Язык будет изменён после перезапуска
- Перемотка двойным нажатием
+ Шаг перемотки
Серверы PeerTube
- Выберите предпочтительные серверы PeerTube
- Выберите подходящие серверы на %s
+ Выберите предпочтительные серверы
+ Каталог серверов: %s
Новый сервер
URL сервера
Не удалось проверить сервер
From 570dded8d601ea86ec92038283a65774fed8fb92 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rapha=C3=ABl=20Jakse?=
Date: Thu, 16 Jan 2020 20:44:08 +0100
Subject: [PATCH 0177/1194] Add field START_PAUSED to the Player Intent
This allows fixing spurious playback resume when minimizing to the background player.
---
.../org/schabi/newpipe/player/BackgroundPlayerActivity.java | 5 ++++-
app/src/main/java/org/schabi/newpipe/player/BasePlayer.java | 4 +++-
.../java/org/schabi/newpipe/player/MainVideoPlayer.java | 6 ++++--
.../java/org/schabi/newpipe/player/PopupVideoPlayer.java | 5 +++--
.../org/schabi/newpipe/player/PopupVideoPlayerActivity.java | 5 ++++-
.../org/schabi/newpipe/player/ServicePlayerActivity.java | 6 +++++-
.../main/java/org/schabi/newpipe/util/NavigationHelper.java | 6 ++++--
7 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java
index 761b50d85..59f6e1e6d 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java
@@ -57,7 +57,10 @@ public final class BackgroundPlayerActivity extends ServicePlayerActivity {
this.player.setRecovery();
getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
- getApplicationContext().startService(getSwitchIntent(PopupVideoPlayer.class));
+ getApplicationContext().startService(
+ getSwitchIntent(PopupVideoPlayer.class)
+ .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
+ );
return true;
}
return false;
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index 6452a9850..cd1ec07f9 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -150,6 +150,8 @@ public abstract class BasePlayer implements
@NonNull
public static final String RESUME_PLAYBACK = "resume_playback";
@NonNull
+ public static final String START_PAUSED = "start_paused";
+ @NonNull
public static final String SELECT_ON_APPEND = "select_on_append";
/*//////////////////////////////////////////////////////////////////////////
@@ -304,7 +306,7 @@ public abstract class BasePlayer implements
}
// Good to go...
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence,
- /*playOnInit=*/true);
+ /*playOnInit=*/!intent.getBooleanExtra(START_PAUSED, false));
}
protected void initPlayback(@NonNull final PlayQueue queue,
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 7a3e60c66..9ccf5b9d3 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -614,7 +614,8 @@ public final class MainVideoPlayer extends AppCompatActivity
this.getPlaybackPitch(),
this.getPlaybackSkipSilence(),
this.getPlaybackQuality(),
- false
+ false,
+ !isPlaying()
);
context.startService(intent);
@@ -637,7 +638,8 @@ public final class MainVideoPlayer extends AppCompatActivity
this.getPlaybackPitch(),
this.getPlaybackSkipSilence(),
this.getPlaybackQuality(),
- false
+ false,
+ !isPlaying()
);
context.startService(intent);
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
index 969c47990..70fb77060 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
@@ -567,7 +567,8 @@ public final class PopupVideoPlayer extends Service {
this.getPlaybackPitch(),
this.getPlaybackSkipSilence(),
this.getPlaybackQuality(),
- false
+ false,
+ !isPlaying()
);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
@@ -1123,4 +1124,4 @@ public final class PopupVideoPlayer extends Service {
return distanceFromCloseButton(popupMotionEvent) <= getClosingRadius();
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java
index 44fcdb8dd..5000d07e2 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java
@@ -50,7 +50,10 @@ public final class PopupVideoPlayerActivity extends ServicePlayerActivity {
if (item.getItemId() == R.id.action_switch_background) {
this.player.setRecovery();
getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
- getApplicationContext().startService(getSwitchIntent(BackgroundPlayer.class));
+ getApplicationContext().startService(
+ getSwitchIntent(BackgroundPlayer.class)
+ .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
+ );
return true;
}
return false;
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 2207808ac..a7b3006a1 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -167,7 +167,10 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
case R.id.action_switch_main:
this.player.setRecovery();
getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
- getApplicationContext().startActivity(getSwitchIntent(MainVideoPlayer.class));
+ getApplicationContext().startActivity(
+ getSwitchIntent(MainVideoPlayer.class)
+ .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
+ );
return true;
}
return onPlayerOptionSelected(item) || super.onOptionsItemSelected(item);
@@ -189,6 +192,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
this.player.getPlaybackPitch(),
this.player.getPlaybackSkipSilence(),
null,
+ false,
false
).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
index e2b03c8e8..a19aa92ae 100644
--- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
@@ -109,12 +109,14 @@ public class NavigationHelper {
final float playbackPitch,
final boolean playbackSkipSilence,
@Nullable final String playbackQuality,
- final boolean resumePlayback) {
+ final boolean resumePlayback,
+ final boolean startPaused) {
return getPlayerIntent(context, targetClazz, playQueue, playbackQuality, resumePlayback)
.putExtra(BasePlayer.REPEAT_MODE, repeatMode)
.putExtra(BasePlayer.PLAYBACK_SPEED, playbackSpeed)
.putExtra(BasePlayer.PLAYBACK_PITCH, playbackPitch)
- .putExtra(BasePlayer.PLAYBACK_SKIP_SILENCE, playbackSkipSilence);
+ .putExtra(BasePlayer.PLAYBACK_SKIP_SILENCE, playbackSkipSilence)
+ .putExtra(BasePlayer.START_PAUSED, startPaused);
}
public static void playOnMainPlayer(final Context context, final PlayQueue queue, final boolean resumePlayback) {
From d9498945112b5b6a96a087d6aa6c701e275f87f8 Mon Sep 17 00:00:00 2001
From: WaldiS
Date: Thu, 16 Jan 2020 08:12:18 +0000
Subject: [PATCH 0178/1194] Translated using Weblate (Polish)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-pl/strings.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index e2a2ae80b..0da89ad48 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -491,7 +491,7 @@
NewPipe został zamknięty podczas pracy nad plikiem
Brak miejsca na urządzeniu
Postęp został utracony ze wzgledu na usunięcie pliku
- Czy jesteś pewien\?
+ Czy chcesz wyczyścić historię pobierania lub usunąć wszystkie pobrane pliki\?
Ogranicz kolejkę pobierania
Tylko jedno pobieranie będzie realizowane jednocześnie
Rozpocznij pobieranie
@@ -541,4 +541,7 @@
Wybierz instancję
Włącz miniaturę wideo na ekranie blokady
Podczas korzystania z odtwarzacza w tle na ekranie blokady zostanie wyświetlona miniatura filmu
+ Wyczyść historię pobierania
+ Usuń pobrane pliki
+ Usunięte% 1$s pobrania
\ No newline at end of file
From ef90493c27af898d8e79adbb5e8d449ef5d0ae35 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rapha=C3=ABl=20Jakse?=
Date: Thu, 16 Jan 2020 20:46:11 +0100
Subject: [PATCH 0179/1194] Deduplicate code switching to another player into a
function
---
.../player/BackgroundPlayerActivity.java | 8 +-------
.../player/PopupVideoPlayerActivity.java | 8 +-------
.../newpipe/player/ServicePlayerActivity.java | 18 ++++++++++--------
3 files changed, 12 insertions(+), 22 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java
index 59f6e1e6d..1b5b5d07c 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java
@@ -55,13 +55,7 @@ public final class BackgroundPlayerActivity extends ServicePlayerActivity {
return true;
}
- this.player.setRecovery();
- getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
- getApplicationContext().startService(
- getSwitchIntent(PopupVideoPlayer.class)
- .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
- );
- return true;
+ return switchTo(PopupVideoPlayer.class);
}
return false;
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java
index 5000d07e2..b2af6d9d8 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java
@@ -48,13 +48,7 @@ public final class PopupVideoPlayerActivity extends ServicePlayerActivity {
@Override
public boolean onPlayerOptionSelected(MenuItem item) {
if (item.getItemId() == R.id.action_switch_background) {
- this.player.setRecovery();
- getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
- getApplicationContext().startService(
- getSwitchIntent(BackgroundPlayer.class)
- .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
- );
- return true;
+ return switchTo(BackgroundPlayer.class);
}
return false;
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index a7b3006a1..b5a697d05 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -165,13 +165,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS));
return true;
case R.id.action_switch_main:
- this.player.setRecovery();
- getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
- getApplicationContext().startActivity(
- getSwitchIntent(MainVideoPlayer.class)
- .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
- );
- return true;
+ return switchTo(MainVideoPlayer.class);
}
return onPlayerOptionSelected(item) || super.onOptionsItemSelected(item);
}
@@ -194,7 +188,15 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
null,
false,
false
- ).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ ).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying());
+ }
+
+ protected boolean switchTo(final Class clazz) {
+ this.player.setRecovery();
+ getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
+ getApplicationContext().startActivity(getSwitchIntent(clazz));
+ return true;
}
////////////////////////////////////////////////////////////////////////////
From 7dbb2b206c438078676f668a9a779537730143fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rapha=C3=ABl=20Jakse?=
Date: Thu, 16 Jan 2020 20:46:52 +0100
Subject: [PATCH 0180/1194] Simplify an if expression
---
app/src/main/java/org/schabi/newpipe/player/BasePlayer.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index cd1ec07f9..46ca3921d 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -946,10 +946,10 @@ public abstract class BasePlayer implements
public void onPlayPause() {
if (DEBUG) Log.d(TAG, "onPlayPause() called");
- if (!isPlaying()) {
- onPlay();
- } else {
+ if (isPlaying()) {
onPause();
+ } else {
+ onPlay();
}
}
From 181658e5a401dfd54cf1b243ddc7a564b1448d26 Mon Sep 17 00:00:00 2001
From: bopol
Date: Fri, 17 Jan 2020 22:59:51 +0100
Subject: [PATCH 0181/1194] support for opening /c/ channel links
---
app/build.gradle | 2 +-
app/src/main/AndroidManifest.xml | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 219d2b202..07914b0ad 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -62,7 +62,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:bdbfa26'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:2ee558f'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9052dabab..21a846494 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -153,6 +153,7 @@
+
From 2f2b8784f97335e03c432988c3a3b89a46c032fc Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 17 Jan 2020 23:07:45 +0100
Subject: [PATCH 0182/1194] update extractor version
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 07914b0ad..0aff5ac8b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -62,7 +62,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:2ee558f'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:2ee558fb'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
From 134850aa049ed9d5fe12431897d83e1bc3af51df Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sat, 18 Jan 2020 00:09:27 +0100
Subject: [PATCH 0183/1194] Add changelog for 0.18.1
---
.../metadata/android/en-US/changelogs/810.txt | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
create mode 100644 fastlane/metadata/android/en-US/changelogs/810.txt
diff --git a/fastlane/metadata/android/en-US/changelogs/810.txt b/fastlane/metadata/android/en-US/changelogs/810.txt
new file mode 100644
index 000000000..43fcc5287
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/810.txt
@@ -0,0 +1,19 @@
+New
+• Show video thumbnail on the lock screen when playing in the background
+
+Improved
+• Add local playlist to queue when long pressing on background / popup button
+• Make main page tabs scrollable and hide when there is only a single tab
+• Limit amount of notification thumbnail updates in background player
+• Add dummy thumbnail for empty local playlists
+• Use *.opus file extension instead of *.webm and show "opus" in format label instead of "WebM Opus" in the download dropdown
+• Add button to delete downloaded files or download history in "Downloads"
+• [YouTube] Add support to /c/shortened_url channel links
+
+Fixed
+• Fixed multiple issues when sharing a video to NewPipe and downloading its streams directly
+• Fixed player access out of its creation thread
+• Fixed search result paging
+• [YouTube] Fixed switching on null causing NPE
+• [YouTube] Fixed viewing comments when opening an invidio.us url
+• [SoundCloud] Updated client_id
\ No newline at end of file
From fd62411b359be3d3d51feea1a1da9a5864ffd344 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sat, 18 Jan 2020 00:09:40 +0100
Subject: [PATCH 0184/1194] Bump version to 0.18.1 and version code to 810
---
app/build.gradle | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 0aff5ac8b..f54598964 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 19
targetSdkVersion 28
- versionCode 800
- versionName "0.18.0"
+ versionCode 810
+ versionName "0.18.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
From 845767e2f8f62dc34452e54723a2dd3670c93ff7 Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Sat, 18 Jan 2020 00:43:38 -0300
Subject: [PATCH 0185/1194] StandardCharsets.UTF_8 instead of
Charset.forName("utf-8")
---
.../main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java b/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
index 75e16edad..696f24d05 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
@@ -22,7 +22,7 @@ public class SrtFromTtmlWriter {
private SharpStream out;
private boolean ignoreEmptyFrames;
- private final Charset charset = Charset.forName("utf-8");
+ private final Charset charset = StandardCharsets.UTF_8;
private int frameIndex = 0;
From a2d3e2c7e0799fbc9fba717d7cc586dbf63ac241 Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Sat, 18 Jan 2020 01:10:25 -0300
Subject: [PATCH 0186/1194] 2 typo fixup * add missing namespace of
StandardCharsets * use an unused constructor argument
---
.../java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java b/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
index 696f24d05..e20b06352 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
@@ -12,7 +12,7 @@ import org.schabi.newpipe.streams.io.SharpStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
-import java.text.ParseException;
+import java.nio.charset.StandardCharsets;
/**
* @author kapodamy
@@ -28,7 +28,7 @@ public class SrtFromTtmlWriter {
public SrtFromTtmlWriter(SharpStream out, boolean ignoreEmptyFrames) {
this.out = out;
- this.ignoreEmptyFrames = true;
+ this.ignoreEmptyFrames = ignoreEmptyFrames;
}
private static String getTimestamp(Element frame, String attr) {
From b155f23d276ebc48ffe5fe86759320b6751ac512 Mon Sep 17 00:00:00 2001
From: bopol
Date: Sat, 18 Jan 2020 09:46:38 +0100
Subject: [PATCH 0187/1194] fix: wrong language shown in playback parameters
dialog
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This is a hardly reproduceable bug that I hopefully fixed. After a long time of watching videos, you could have your system language shown in playback parameters dialog.
Calling changeAppLanguage(getAppLocale(…),…) onCreate will most certainly fix this bug
---
.../schabi/newpipe/player/helper/PlaybackParameterDialog.java | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java
index 4feed74fe..2aefa675e 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java
@@ -17,6 +17,8 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.util.SliderStrategy;
import static org.schabi.newpipe.player.BasePlayer.DEBUG;
+import static org.schabi.newpipe.util.Localization.changeAppLanguage;
+import static org.schabi.newpipe.util.Localization.getAppLocale;
public class PlaybackParameterDialog extends DialogFragment {
@NonNull private static final String TAG = "PlaybackParameterDialog";
@@ -108,6 +110,7 @@ public class PlaybackParameterDialog extends DialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
+ changeAppLanguage(getAppLocale(getContext()), getResources());
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
initialTempo = savedInstanceState.getDouble(INITIAL_TEMPO_KEY, DEFAULT_TEMPO);
@@ -137,6 +140,7 @@ public class PlaybackParameterDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ changeAppLanguage(getAppLocale(getContext()), getResources());
final View view = View.inflate(getContext(), R.layout.dialog_playback_parameter, null);
setupControlViews(view);
From e08e7245738ca8ee5dab4dc5801dc6d35399873a Mon Sep 17 00:00:00 2001
From: bopol
Date: Sat, 18 Jan 2020 10:46:53 +0100
Subject: [PATCH 0188/1194] upload date in description now matches newpipe's
language
---
.../main/java/org/schabi/newpipe/util/Localization.java | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index 3f555fcfd..d2fbd3a65 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -1,5 +1,6 @@
package org.schabi.newpipe.util;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
@@ -118,12 +119,13 @@ public class Localization {
return nf.format(number);
}
- public static String formatDate(Date date) {
- return DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault()).format(date);
+ public static String formatDate(Date date, Context context) {
+ return DateFormat.getDateInstance(DateFormat.MEDIUM, getAppLocale(context)).format(date);
}
+ @SuppressLint("StringFormatInvalid")
public static String localizeUploadDate(Context context, Date date) {
- return context.getString(R.string.upload_date_text, formatDate(date));
+ return context.getString(R.string.upload_date_text, formatDate(date, context));
}
public static String localizeViewCount(Context context, long viewCount) {
From 77aa12dd8195dae7a2f782f97d3439e4e39fd1a1 Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Mon, 13 Jan 2020 20:24:24 +0100
Subject: [PATCH 0189/1194] Rename local playlist by long-clicking in
BookmarkFragment.
After long clicking on a local playlist, show a dialog with 2 options for "rename" and "delete"
Rename shows another dialog to let the user rename the playlist.
Delete lets the user delete a playlist like before.
---
.../local/bookmark/BookmarkFragment.java | 67 ++++++++++++++++++-
1 file changed, 66 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
index 8f67367aa..6a7f16025 100644
--- a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
@@ -1,8 +1,13 @@
package org.schabi.newpipe.local.bookmark;
import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.res.Resources;
import android.os.Bundle;
import android.os.Parcelable;
+import android.util.Log;
+import android.widget.EditText;
+import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
@@ -10,6 +15,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import io.reactivex.disposables.Disposable;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
import org.schabi.newpipe.NewPipeDatabase;
@@ -118,7 +124,33 @@ public final class BookmarkFragment
@Override
public void held(LocalItem selectedItem) {
if (selectedItem instanceof PlaylistMetadataEntry) {
- showLocalDeleteDialog((PlaylistMetadataEntry) selectedItem);
+ final Resources resources = getContext().getResources();
+ String[] commands = new String[]{
+ resources.getString(R.string.rename_playlist),
+ resources.getString(R.string.delete_playlist)
+ };
+
+ final DialogInterface.OnClickListener actions = (dialogInterface, i) -> {
+ switch (i) {
+ case 0:
+ showLocalRenameDialog((PlaylistMetadataEntry) selectedItem);
+ break;
+ case 1:
+ showLocalDeleteDialog((PlaylistMetadataEntry) selectedItem);
+ break;
+ }
+ };
+
+ final View bannerView = View.inflate(activity, R.layout.dialog_title, null);
+ bannerView.setSelected(true);
+ TextView titleView = bannerView.findViewById(R.id.itemTitleView);
+ titleView.setText(((PlaylistMetadataEntry) selectedItem).name);
+
+ new AlertDialog.Builder(getActivity())
+ .setCustomTitle(bannerView)
+ .setItems(commands, actions)
+ .create()
+ .show();
} else if (selectedItem instanceof PlaylistRemoteEntity) {
showRemoteDeleteDialog((PlaylistRemoteEntity) selectedItem);
@@ -271,6 +303,39 @@ public final class BookmarkFragment
.show();
}
+ private void showLocalRenameDialog(PlaylistMetadataEntry selectedItem) {
+ final View dialogView = View.inflate(getContext(), R.layout.dialog_playlist_name, null);
+ EditText nameEdit = dialogView.findViewById(R.id.playlist_name);
+ nameEdit.setText(selectedItem.name);
+ nameEdit.setSelection(nameEdit.getText().length());
+
+ final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(
+ getContext())
+ .setTitle(R.string.rename_playlist)
+ .setView(dialogView)
+ .setCancelable(true)
+ .setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(R.string.rename, (dialogInterface, i) -> {
+ changeLocalPlaylistName(selectedItem.uid, nameEdit.getText().toString());
+ });
+ dialogBuilder.show();
+ }
+
+ private void changeLocalPlaylistName(long id, String name) {
+ if (localPlaylistManager == null) {
+ return;
+ }
+
+ Log.d(TAG, "Updating playlist id=[" + id +
+ "] with new name=[" + name + "] items");
+
+ localPlaylistManager.renamePlaylist(id, name);
+ final Disposable disposable = localPlaylistManager.renamePlaylist(id, name)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(longs -> {/*Do nothing on success*/}, this::onError);
+ disposables.add(disposable);
+ }
+
private static List merge(final List localPlaylists,
final List remotePlaylists) {
List items = new ArrayList<>(
From 9d5612d1046b08ae9c03d75e561868ce73c66604 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Sat, 18 Jan 2020 19:34:22 +0000
Subject: [PATCH 0190/1194] Translated using Weblate (German)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-de/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 53b9a52eb..9a2482814 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -155,7 +155,7 @@
Über
Freies und schlankes Streaming für Android.
NewPipes Lizenz
- Ob Ideen, Übersetzungen, Design-Änderungen, Code-Aufräumung oder richtig große Code-Änderungen – Hilfe ist immer willkommen. Je mehr geholfen wird, desto besser wird NewPipe!
+ Ob Ideen, Übersetzungen, Design-Änderungen, Code-Aufräumung oder richtig große Code-Änderungen — Hilfe ist immer willkommen. Je mehr geholfen wird, desto besser wird NewPipe!
Drittanbieter-Lizenzen
Auf GitHub ansehen
Beitragen
@@ -366,7 +366,7 @@
yourID, soundcloud.com/yourid
Keine Streams zum Download verfügbar
Bevorzugte \"Öffnen\" Aktion
- Standardaktion beim Öffnen von Inhalten - %s
+ Standardaktion beim Öffnen von Inhalten — %s
Untertitel
Textgröße und Hintergrund der Untertitel im Player anpassen. Wird erst nach Neustart der App wirksam.
Keine App zum Abspielen dieser Datei installiert
@@ -392,7 +392,7 @@
Unbegrenzt
Auflösung bei Verwendung mobiler Daten begrenzen
Minimieren beim Appwechsel
- Aktion beim Umschalten auf eine andere App vom Haupt-Videoplayer - %s
+ Aktion beim Umschalten auf eine andere App vom Haupt-Videoplayer — %s
Keine
Zum Hintergrund-Player minimieren
Zum Popup-Player minimieren
From 6b7043fb9d7aa50ecf47b691f908ee70e8c56572 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 17 Jan 2020 08:52:56 +0000
Subject: [PATCH 0191/1194] Translated using Weblate (French)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-fr/strings.xml | 31 ++++++++++++++------------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 444310aef..7695fe31c 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -19,14 +19,14 @@
Partager
Partager avec
Affiche une option pour lire une vidéo via Kodi
- Afficher l’option « Lire avec Kodi »
+ Afficher l’option « Lire avec Kodi »
Publiée le %1$s
%1$s vues
Audio
Format audio par défaut
Télécharger
Suivant
- Afficher les vidéos « Suivantes » et « Similaires »
+ Afficher les vidéos « Suivantes » et « Similaires »
URL non pris en charge
Vidéo et audio
Autre
@@ -50,8 +50,8 @@
Dossier de téléchargement audio
Les fichiers audio téléchargés sont stockés ici
Choisissez le dossier de téléchargement des fichiers audio
- Impossible de créer le répertoire de téléchargement « %1$s »
- Répertoire de téléchargement « %1$s » créé
+ Impossible de créer le répertoire de téléchargement « %1$s »
+ Répertoire de téléchargement « %1$s » créé
Erreur
Impossible d’analyser le site web
Contenu indisponible
@@ -231,8 +231,8 @@
Retirer
Détails
Paramètres audios
- Afficher l’astuce « Maintenir pour ajouter »
- Affiche l’astuce lors de l’appui du bouton « Arrière-plan » ou « Mode flottant » sur la page de détails d’une vidéo
+ Afficher l’astuce « Maintenir pour ajouter »
+ Affiche l’astuce lors de l’appui du bouton « Arrière-plan » ou « Mode flottant » sur la page de détails d’une vidéo
[Inconnu]
Récupération depuis l’erreur du lecteur
Kiosque
@@ -348,11 +348,11 @@
\n1. Suivez ce lien : %1$s.
\n2. Connectez-vous à votre compte.
\n3. Un téléchargement va démarrer (celui du fichier d’exportation).
- Veuillez importer un profil SoundCloud en saisissant l’URL de votre profil ou votre identifiant.
-\n
-\n1. Activez le « mode bureau » dans votre navigateur web (le site n’est pas disponible pour les appareils mobiles).
-\n2. Suivez cette URL : %1$s.
-\n3. Connectez-vous à votre compte.
+ Veuillez importer un profil SoundCloud en saisissant l’URL de votre profil ou votre identifiant.
+\n
+\n1. Activez le « mode bureau » dans votre navigateur web (le site n’est pas disponible pour les appareils mobiles).
+\n2. Suivez cette URL : %1$s.
+\n3. Connectez-vous à votre compte.
\n4. Copiez l’URL du profil vers lequel vous venez d’être redirigé.
votre identifiant, soundcloud.com/votreidentifiant
Cette opération peut charger énormément la connexion réseau.
@@ -484,7 +484,7 @@
NewPipe a été fermé alors qu’il travaillait sur le fichier
Aucun espace disponible sur le périphérique
Progression perdue, car le fichier a été effacé
- Êtes-vous sûr \?
+ Voulez-vous effacer l\'historique de téléchargement ou supprimer tous les fichiers téléchargés \?
Limiter la file d’attente de téléchargement
Un téléchargement s’exécutera en même temps
Démarrer les téléchargements
@@ -508,8 +508,8 @@
Kiosque par défaut
Personne ne regarde
- - %s regarde
- - %s regardent
+ - %s spectateur
+ - %s spectateurs
Personne n\'écoute
@@ -535,4 +535,7 @@
Généré automatiquement (pas de téléverseur trouvé)
Activer la vidéo miniaturisée sur l\'écran de verrouillage
En utilisant le lecteur audio, la miniature de la vidéo sera affichée sur l\'écran de verrouillage
+ Effacer l\'historique de téléchargement
+ Supprimer les fichiers téléchargés
+ %1$s téléchargements supprimés
\ No newline at end of file
From 2873f723e88c4c9b41928082e1969df101b19e04 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Thu, 16 Jan 2020 20:12:21 +0000
Subject: [PATCH 0192/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ru/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 1da98cc74..975a9479b 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -330,7 +330,7 @@
Подогнать
Заполнить
Приблизить
- Созданы автоматически
+ Создано автоматически
Включить LeakCanary
Мониторинг утечки памяти может привести к зависанию приложения
Сообщать об ошибках жизненного цикла
From 5dbab85505a1f20255dcc8cd566057f2fb12221d Mon Sep 17 00:00:00 2001
From: pjammo
Date: Thu, 16 Jan 2020 16:07:08 +0000
Subject: [PATCH 0193/1194] Translated using Weblate (Italian)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-it/strings.xml | 87 ++++++++++++++------------
1 file changed, 46 insertions(+), 41 deletions(-)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 4942f4720..9d9241045 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -30,9 +30,9 @@
URL non supportato
Lingua Predefinita per Contenuti
Video e Audio
- Miniatura anteprima video
+ Copertina di anteprima video
Riproduci video, durata:
- Miniatura dell\'immagine di profilo dell\'utente
+ Immagine di profilo dell\'utente
Non mi piace
Mi piace
Impossibile creare la cartella di download \'%1$s\'
@@ -51,7 +51,7 @@
Riproduci
Errore
Errore di connessione
- Impossibile caricare tutte le miniature
+ Impossibile caricare tutte le copertine
Impossibile decriptare la firma dell\'URL del video
Contenuto non disponibile
Usa Tor
@@ -117,19 +117,19 @@
È richiesta la risoluzione del reCAPTCHA
Sì
Più tardi
- Apri in modalità popup
- Modalità popup di NewPipe
- Riproduzione in Modalità Popup
+ Apri in modalità Popup
+ Modalità Popup di NewPipe
+ Riproduzione in modalità Popup
Disattivato
L\'audio potrebbe non essere disponibile per ALCUNE risoluzioni
- In sottofondo
+ In Sottofondo
Popup
Risoluzione Predefinita Popup
Mostra Altre Risoluzioni
Solo alcuni dispositivi supportano la riproduzione video in 2K e 4K
Formato Video Predefinito
Ricorda Dimensione e Posizione Popup
- Ricorda l\'ultima dimensione e posizione della finestra popup
+ Ricorda dimensione e posizione della finestra Popup
Controllo Movimenti Lettore Multimediale
Usa i movimenti per controllare luminosità e volume del lettore multimediale
Suggerimenti Ricerca
@@ -140,8 +140,8 @@
Cancella
Ridimensionamento
Risoluzione migliore
- Questo permesso è necessario
-\nper riprodurre in modalità popup
+ Questo permesso è necessario
+\nper utilizzare il lettore Popup
Impostazioni
Informazioni
Licenze di Terze Parti
@@ -191,7 +191,7 @@
Playlist
Annulla
Notifiche NewPipe
- Notifiche per NewPipe in background e per il lettore a comparsa
+ Notifiche per lettore in Sottofondo e Popup
Nessun risultato
Nessun iscritto
@@ -225,25 +225,25 @@
Top 50
New & hot
Mostra Suggerimento \"Tieni Premuto per Accocodare\"
- Mostra suggerimento quando il pulsante per la riproduzione \"popup\" o \"in sottofondo\" viene premuto nella pagina dei dettagli del video
- In Coda in Sottofondo
- In Coda in Modalità Popup
+ Nella pagina dei dettagli del video, mostra un suggerimento alla pressione dei pulsanti per la riproduzione Popup o in Sottofondo
+ Accoda in Sottofondo
+ Accodato in Popup
Riproduci tutto
Impossibile riprodurre questo flusso
Si è verificato un errore irreversibile
Ripristino dell\'errore del lettore multimediale
- Riproduzione in sottofondo
- Riproduzione in modalità a comparsa
+ Riproduzione in Sottofondo
+ Lettore Popup
Rimuovi
Dettagli
- Impostazioni audio
- Tenere premuto per aggiungere alla coda
+ Impostazioni Audio
+ Tenere premuto per accodare
[Sconosciuto]
- In coda in sottofondo
- In coda nel riproduttore a comparsa
+ Accoda in Sottofondo
+ Accoda in Popup
Inizia la riproduzione qui
Avvia riproduzione in sottofondo
- Avvia riproduzione a comparsa
+ Avvia subito in Popup
Dona
Sito
Visita il sito di NewPipe per informazioni e novità.
@@ -251,9 +251,9 @@
Restituisci
Paese Predefinito per Contenuti
Cambia orientamento
- Passa alla riproduzione in background
+ Passa in Sottofondo
Passa a Popup
- Passa alla produzione predefinita
+ Passa a Principale
Servizio
Apri il menu
Chiudi il menu
@@ -265,8 +265,8 @@
Nessun flusso video trovato
Nessun flusso audio trovato
Lettore video
- Riproduzione in sottofondo
- Riproduzione in modalità popup
+ Riproduzione in Sottofondo
+ Lettore Popup
Raccogliendo informazioni…
Caricamento del contenuto richiesto
Importa database
@@ -298,13 +298,13 @@
Rinomina
Nome
Aggiunti alla playlist
- Imposta come miniatura della playlist
+ Imposta come Copertina della Playlist
Segnalibri playlist
Rimuovi segnalibro
Eliminare la playlist\?
Playlist creata
Aggiunto alla Playlist
- Miniatura della Playlist cambiata.
+ Copertina playlist cambiata.
Impossibile eliminare la Playlist.
Nessun Sottotitolo
Rientrato
@@ -352,7 +352,7 @@
Tieni presente che questa operazione può consumare una grande quantità di traffico dati.
\n
\nVuoi continuare?
- Carica Anteprime
+ Carica Copertine
Disabilita per prevenire il caricamento delle anteprime, risparmiando dati e memoria. La modifica di questa opzione cancellerà la cache delle immagini in memoria e sul disco.
Cache immagini svuotata
Pulisci Cache Metadati
@@ -393,11 +393,11 @@
Avanzamento veloce durante il silenzio
Step
Reset
- Minimizza al cambio dell\'applicazione
- Azione quando si passa ad un\'altra app dal lettore video principale — %s
- Nessuna
- Minimizza al lettore in sottofondo
- Minimizza al lettore popup
+ Riduci Cambiando App
+ Azione da eseguire cambiando app dal lettore video principale — %s
+ Niente
+ Riduci in Sottofondo
+ Riduci a Popup
Canali
Playlist
Tracce
@@ -423,7 +423,7 @@
Selezione
Aggiornamenti
Mostra una notifica per suggerire l\'aggiornamento dell\'app se una nuova versione è disponibile
- Visualizzazione a lista
+ Modalità Visualizzazione Lista
Lista
Griglia
Automatica
@@ -433,14 +433,14 @@
Finito
In attesa
in pausa
- in coda
+ accodato
post-processo
Accoda
Azione negata dal sistema
Download fallito
Download terminato
%s download terminati
- Genera un nome unico
+ Genera Nome Univoco
Sovrascrivi
Esiste già un file scaricato con lo stesso nome
C\'è un download in corso con questo nome
@@ -484,11 +484,11 @@
File spostato o cancellato
Esiste già un file con questo nome
impossibile sovrascrivere il file
- C\'è un download in corso con questo nome
+ C\'è un download in attesa con questo nome
NewPipe è stato chiuso mentre lavorava sul file
Spazio insufficiente sul dispositivo
Progresso perso poiché il file è stato eliminato
- Sei sicuro\?
+ Pulire la cronologia dei download o eliminare tutti i file scaricati\?
Sarà avviato un solo dowload per volta
Avvia downloads
Metti in pausa i downloads
@@ -519,10 +519,10 @@
Contenuti in Evidenza Predefiniti
Durata Avanzamento e Riavvolgimento Rapidi
Istanze PeerTube
- Imposta le tue istanze PeerTube preferite
- Trova le istanze più adatte a te su https://joinpeertube.org/instances#instances-list
+ Seleziona le istanze PeerTube preferite
+ Trova le istanze più adatte a te su %s
Aggiungi Istanza
- Inserisci URL Istanza
+ Inserisci URL istanza
Impossibile convalidare l\'istanza
Sono supportati solo gli URL HTTPS
L\'istanza esiste già
@@ -533,4 +533,9 @@
recupero
Impossibile recuperare questo download
Scegli un\'Istanza
+ Abilita Copertine sulla Schermata di Blocco
+ Durante la riproduzione in sottofondo, verrà mostrata la copertina del video sulla schermata di blocco
+ Svuota Cronologia Download
+ Elimina File Scaricati
+ %1$s download eliminati
\ No newline at end of file
From 1c53b22239b1ef4595a68a7f19390b86b206947a Mon Sep 17 00:00:00 2001
From: ssantos
Date: Wed, 15 Jan 2020 20:13:19 +0000
Subject: [PATCH 0194/1194] Translated using Weblate (Portuguese)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-pt/strings.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 98b85bcab..7d3fb68e3 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -487,7 +487,7 @@
Não há espaço disponível no dispositivo
Progresso perdido, porque o ficheiro foi eliminado
Tempo limite de conexão
- Tem a certeza\?
+ Quer limpar o seu histórico de descarregamentos ou apagar todos os ficheiros descarregados\?
Limitar a fila de transferências
Uma transferências será executada ao mesmo tempo
Iniciar transferências
@@ -534,4 +534,7 @@
Escolha uma instância
Ativar miniatura do vídeo no ecrã de bloqueio
Ao usar o reprodutor de fundo, uma miniatura de vídeo será exibida no ecrã de bloqueio
+ Limpar histórico de descarregamentos
+ Apagar ficheiros descarregados
+ %1$s descarregamentos apagados
\ No newline at end of file
From 9c9a432ea0240d33d43a9733ec08251c1c824b91 Mon Sep 17 00:00:00 2001
From: Osoitz
Date: Sat, 18 Jan 2020 11:53:19 +0000
Subject: [PATCH 0195/1194] Translated using Weblate (Basque)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-eu/strings.xml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index b376f1f6d..7563e1be5 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -488,7 +488,7 @@
NewPipe itxi egin da fitxategian lanean zegoela
Ez dago lekurik gailuan
Progresioa galdu da, fitxategia ezabatu delako
- Ziur al zaude\?
+ Zure deskargen historiala garbitu nahi duzu ala deskargatutako fitxategi guztiak ezabatu\?
Mugatu deskargen ilara
Deskarga bakarra aldi berean
Hasi deskargak
@@ -533,4 +533,9 @@
berreskuratzen
Ezin da deskarga hau berreskuratu
Aukeratu instantzia
+ Gaitu bideoaren iruditxoa blokeo pantailan
+ Bigarren planoko erreproduzigailua erabiltzean bideoaren iruditxo bat bistaratuko da blokeo pantailan
+ Garbitu deskargen historiala
+ Ezabatu deskargatutako fitxategiak
+ %1$s deskarga ezabatuta
\ No newline at end of file
From 36c4063db681c8769ed31d75a9d42f796badec88 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 17 Jan 2020 08:55:28 +0000
Subject: [PATCH 0196/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-eo/strings.xml | 63 ++++++++++++++------------
1 file changed, 33 insertions(+), 30 deletions(-)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 224e8837e..c6ce250e6 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -4,14 +4,14 @@
Eldonita je %1$s
Instali
Nuligi
- Malfermi per krozilo
+ Malfermi en retumilo
Konigi
Elŝuti
Serĉi
Agordoj
Ĉu vi signifis: %1$s\?
Konigi kun
- Elekti krozilon
+ Elekti retumilon
turno
Uzi eksteran filmetoludilon
Uzi eksteran sonludilon
@@ -66,7 +66,7 @@
Signali eraron
Filmeto
Reprovi
- Premu serĉo por komenci
+ Premi serĉon por komenci
Neniu elsendlflua ludilo trovita (instalu VLC por ludi ĝin).
Malfermi en ŝprucfenestron modon
Forigas aŭdon ĉe KELKAJ rezolucioj
@@ -144,7 +144,7 @@
Konservi la historio de serĉo lokale
Rigardu historion
Spuri la viditajn filmetojn
- Newpipe Sciifo
+ NewPipe Sciigo
Sciigoj por NewPipe fono kaj ŝprucfenestroj ludiloj
Ludilo
Konduto
@@ -159,7 +159,7 @@
Montri indikon kiam la fono aŭ ŝprucfenestro butono estas premita en la retpaĝo de dalatadoj de la filmeto
Viciĝita en la ludilo en fono
Viciĝita en ŝprucfenestro ludilo
- Ludi ĉiuj
+ Ludi ĉiujn
Ne povis ludi tion torenton
Neatendebla eraro de ludilo okazis
Reakiri el eraro de la ludilo
@@ -180,7 +180,7 @@
Ŝangi al Ĉefa
Servo
Ĉiam
- Nur unfoje
+ Nur unufoje
Nevalida ligilo
Neniuj filmeta torentoj trovitaj
Neniuj sonaj torentoj trovis
@@ -191,18 +191,18 @@
Eksporti historion, abonojn kaj ludlistoj
Ĉiam peti
Nova ludlisto
- Forigi
+ Forviŝi
Alinomi
Nomo
Aldoni al la ludlisto
Meti kiel bildeto de ludlisto
Legosigno Ludlisto
- Forigi Legosignon
- Ĉu forigi ĉi tiun ludliston \?
+ Forviŝi Legosignon
+ Ĉu forviŝi ĉi tiun ludliston \?
Ludlisto kreita
Ludlistita
Bildeto de ludlisto ŝanĝiĝita.
- Ne povis forigi ludlisto.
+ Ne povis forviŝi ludliston.
Malcimigi
Auto-vico sekva fluo
Aŭto-aldoni rilatan enhavon kiam ludanta la lasta enhavo en malrepetita atendovico
@@ -218,7 +218,7 @@
\n3. Elŝuto devus komenci (ĝi estas la dosiero de eksporto)
Importu Soundcloud-n profilon tajpante ĉu la ligilon, ĉu vian ID :
\n
-\n1. Ebligu komputilon modon en krozilo (la retejo malhaveblas por poŝtelefonoj)
+\n1. Ebligu komputilon modon en retumilon (la retejo malhaveblas por poŝtelefonoj)
\n2. Iru tien: %1$s
\n3. Ensalutu kiam oni petas vin
\n4. Kopiu la ligilon de profilo ke oni kondikis vin.
@@ -252,7 +252,7 @@
Ĝisdatigoj
Dosiero forviŝita
Sciigo por ĝisdatigi apon
- Sciigo por nova versio de Newpipe
+ Sciigo por nova versio de NewPipe
Ekstera konservejo malhavebla
Elŝuti al ekstera SD-karto ne eblas. Ĉu vi volas restarigi la elŝutan dosierujon \?
viciĝita
@@ -281,7 +281,7 @@
Ludaj pozicioj forviŝitaj.
Dosiero movita aŭ forviŝita
ne povas dispremi la dosieron
- Ĉu vi certas\?
+ Ĉu vi volas forviŝi vian historion de elŝutoj aŭ forviŝi la tutajn elŝutitajn dosierojn\?
Limigi la elŝutan atendovicon
Unu elŝuto ruliĝos en la sama tempo
Komenci elŝutojn
@@ -307,7 +307,7 @@
Komenci
Paŭzigi
Ludi
- Forigi
+ Forviŝi
Kontrolsumo
Nova misio
Bone
@@ -341,7 +341,7 @@
Permesiloj
Rigardu ĉe GitHub
Permesilo de NewPipe
- Ĉu vi havas ideojn pri; traduko, desegnaĵoj ŝanĝoj, purigado de kodo, aŭ realaj masivaj ŝanĝoj—helpo estas ĉiam bonvena. Ju pli oni faras, des pli bonas!
+ Ĉu vi havas ideojn pri; traduko, desegnaĵoj ŝanĝoj, purigado de kodo, aŭ realaj masivaj ŝanĝoj—helpo ĉiam estas bonvena. Ju pli oni faras, des pli bonas!
Legi permesilon
Kontribui
Permesitaj karakteroj en dosiernomoj
@@ -353,7 +353,7 @@
La historio estas malŝatita
Historio
La historio estas malplena
- Historio vakigita
+ Historio forviŝita
Neniuj rezultoj
Neniu enhavo
Neniuj abonantoj
@@ -377,10 +377,10 @@
Komenci ludi ĉi tie
Komenci ludi fone
Donaci
- NewPipe estas programada par volontuoj, elspezante tempo por alporti vin la plej bona sperto. Redonu por helpi programistojn plibonigi NewPipe dum ĝuante tason da kafo.
+ NewPipe estas programadita par volontuoj, elspezante tempo por alporti vin la plej bona sperto. Redoni por helpi programistojn plibonigi NewPipe dum ĝuante tason da kafo.
Redoni
Retejo
- Vizitu la retejon de NewPipe por pli da informoj kaj novaĵoj.
+ Viziti la retejon de NewPipe por pli da informoj kaj novaĵoj.
Malfermi la tirkeston
Fermi la tirtekston
Ekstaraj ludantoj ne suportas tiajn ligilojn
@@ -395,8 +395,8 @@
Ĉi tio nuligos vian nunan aranĝon.
Trenu por reorgidi
Krei
- Forigi Unu
- Forigi ĉiujn
+ Forviŝi Unu
+ Forviŝi ĉiujn
Rezigni
Alinomi
Ĉu vi volas forviŝi tion eron el la spekta historio \?
@@ -440,11 +440,11 @@
NewPipe estas programaro sub rajtoceda permesilo: Vi povas uzi, studi, komuniki kaj plibonigi ĝin kiel vi volas. Precize, vi povas redistribui kaj/aŭ modifi ĝin sub la kondiĉoj de la Ĝenerala Publika Permesilo de GNU, kiel publikigita per la Free Software Foundation, ĉu en la versio 3, ĉu (se vi volas) ajna posta versio.
Ĉu vi volas ankaŭ importi agordojn\?
Privateca politiko de NewPipe
- La NewPipe projekto serioze respektas vian privatecon. Konsekvence, la apo ne kolektas ajnan datumo sen via konsento.
-\nLa privateco politiko de Newpipe detale eksplikas kion datumon estas sendita kaj stokita kiam vi sendas falegosignalon.
+ La NewPipe projekto serioze respektas vian privatecon. Konsekvence, la apo ne kolektas ajnan datumon sen via konsento.
+\nLa privateco politiko de NewPipe detale eksplikas kion datumon estas sendita kaj stokita kiam vi sendas falegosignalon.
Legi la privatecan politikon
Por konformiĝi al la Ĝenerala Datum-Protekta Regularon (GDPR), ni allogas vian atenton al la privateca politiko de NewPipe. Bonvolu atentive legi ĝin.
-\nVi devas akcepti ĝin por sendi nin la cimsignalo.
+\nVi devas akcepti ĝin por sendi la cimsignalon al ni.
Akcepti
Rifuzi
Neniu limo
@@ -468,8 +468,8 @@
Krado
Aŭto
Ŝanĝi vidon
- Ĝisdatigo de NewPipe havebla !
- Premu por elŝuti
+ Ĝisdatigo de NewPipe havebla!
+ Premi por elŝuti
Finita
Pritraktata
Paŭzigita
@@ -507,8 +507,8 @@
Defaŭlta Kiosko
Neniu spektas
- - %s spektanta
- - %s spektanta
+ - %s spektanto
+ - %s spektantoj
Neniu aŭskultas
@@ -525,13 +525,16 @@
Ne povis validigi instanco
Nur HTTPS ligiloj estas subtenitaj
La instanco jam ekzistas
- Loka
- Freŝdate ĝisdatigita
- La plej ŝatitatj
+ Lokaj
+ Freŝe aldonitaj
+ La plej ŝatitaj
Aŭtomate generita (neniu alŝutilo trovita)
Reakiranta
Ne povas reakiri tion elŝuton
Elektu instancon
Enablu bildeta filmeton ĉe ŝlosita ekrano
Uzante la fona ludilo, bildeta filmeto vidiĝos ĉe ŝlosita ekrano
+ Forviŝi la historion de elŝutoj
+ Forviŝi elŝutitajn dosierojn
+ %1$s elŝutoj forviŝitaj
\ No newline at end of file
From 84dd1a688eb5d7329289384b00bc2460e84c6aea Mon Sep 17 00:00:00 2001
From: zeritti
Date: Fri, 17 Jan 2020 21:40:15 +0000
Subject: [PATCH 0197/1194] Translated using Weblate (Czech)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-cs/strings.xml | 35 ++++++++++++++++++++------
1 file changed, 28 insertions(+), 7 deletions(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 66c952a26..548358473 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -143,7 +143,7 @@ otevření ve vyskakovacím okně
Zobrazovat návrhy při vyhledávání
Historie vyhledávání
Hledané výrazy lokálně uchovávat
- Historie zhlédnutí
+ Historie sledování
Evidovat zhlédnutá videa
Přehrávat po přechodu do popředí
Pokračovat v přehrávání po přerušení (např. hovor)
@@ -319,7 +319,7 @@ otevření ve vyskakovacím okně
Povolit službu LeakCanary
Monitoring úniku paměti může způsobit nereagování aplikace při heap dumpingu
Nahlásit mimo-cyklické chyby
- Vynutit vykazování výjimek Rx mimo fragment nebo životnost cyklu po odstranění
+ Vynutit hlášení nedoručitelných výjimek Rx mimo fragment nebo trvání činnosti po odstranění
Použít rychlé nepřesné hledání
Nepřesné hledání umožní přehrávači posouvat se rychleji, ale se sníženou přesností
Načítat náhledy
@@ -365,7 +365,7 @@ otevření ve vyskakovacím okně
\n
\nChcete pokračovat?
Ovládání rychlosti přehrávání
- Rychlost
+ Tempo
Výška tónu
Rozpojit (může způsobit zkreslení)
Výchozí nastavení
@@ -483,8 +483,8 @@ otevření ve vyskakovacím okně
Zavřít
Stahování na externí SD kartu není možné. Resetovat umístění složky pro stahování\?
Pokračovat v přehrávání
- Obnovit poslední přehrávanou pozici
- Pořadí v seznamech
+ Obnovit poslední pozici přehrávání
+ Pozice v seznamech
Vymazat data
Soubor přemístěn nebo smazán
soubor nelze přepsat
@@ -492,7 +492,7 @@ otevření ve vyskakovacím okně
NewPipe byl ukončen v průběhu zpracovávání souboru
V zařízení nezbývá žádné místo
Postup ztracen, protože soubor byl smazán
- Jste si jisti\?
+ Jste si jisti smazáním své historie stahování nebo smazáním všech stažených souborů\?
Omezit frontu stahování
Najednou se bude stahovat pouze jeden soubor
Začít stahování
@@ -504,7 +504,7 @@ otevření ve vyskakovacím okně
Použít SAF
Storage Access Framework umožňuje stahovat na externí SD kartu.
\nUpozornění: některá zařízení jsou nekompatibilní
- Ukázat poziční indikátory playbacku v seznamech
+ Zobrazit pozici přehrávání v seznamech
Pozice playbacku smazány.
Timeout spojení
Smazat pozice playbacku
@@ -526,4 +526,25 @@ otevření ve vyskakovacím okně
Ke změně jazyka dojde po restartu aplikace.
Výchozí kiosek
+ Délka přetočení vpřed/zpět
+ Instance PeerTube
+ Vybrat oblíbené instance PeerTube
+ Vyhledat nejvhodnější instance na %s
+ Přidat instanci
+ Zadat URL instance
+ Instanci nebylo možno potvrdit
+ Podporujeme pouze URL s HTTPS
+ Instance již existuje
+ Místní
+ Přidány nedávno
+ Nejoblíbenější
+ Autogenerovány (uploader nenalezen)
+ obnovuji
+ Toto stahování nelze obnovit
+ Vyberte instanci
+ Zapnout náhled videa na zamknuté obrazovce
+ Hraje-li video na pozadí, náhled videa se ukáže na zamknuté obrazovce
+ Smazat historii stahování
+ Smazat stažené soubory
+ Smazat %1$s stahování
\ No newline at end of file
From de1a92539a658e77bbbc59716c40be4a38c48d22 Mon Sep 17 00:00:00 2001
From: thami simo
Date: Thu, 16 Jan 2020 04:11:00 +0000
Subject: [PATCH 0198/1194] Translated using Weblate (Arabic)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ar/strings.xml | 62 ++++++++++++++------------
1 file changed, 34 insertions(+), 28 deletions(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index b1dad5672..02f79c8ab 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -20,7 +20,7 @@
يتم تخزين ملفات الفيديو التي تم تنزيلها هنا
مجلد تحميل الفيديو
"لا يمكن إنشاء مجلد للتنزيلات في '%1$s'"
- دليل التنزيل الذي تم إنشاؤه \'%1$s\'
+ إنشاء دليل التحميل \'%1$s\'
تثبيت
تطبيق Kore غير موجود. هل تريد تثبيته ؟
مضيء
@@ -42,7 +42,7 @@
مشاركة
مشاركة بواسطة
عرض مقاطع الفيديو \"التالية\" و \"المشابهة\"
- عرض خيارات تشغيل الفيديو من خلال مركز كودي ميديا
+ اعرض خيار لتشغيل الفيديو عبر مركز وسائط Kodi
عرض خيار التشغيل بواسطة كودي
السمة
تم النشر يوم %1$s
@@ -57,7 +57,7 @@
خطأ
تعذرت عملية تحليل الموقع
تعذر فك تشفير توقيع رابط الفيديو
- اضغط بحث للبدء
+ انقر فوق بحث لتبدأ
اشتراك
مشترك
الرئيسية
@@ -69,8 +69,8 @@
مراقبة السجل
التاريخ و ذاكرة التخزين المؤقت
محتوى
- الملفات المحملة
- الملفات المحملة
+ التحميلات
+ التحميلات
الجميع
القناة
الفيديو
@@ -80,7 +80,7 @@
التاريخ
التاريخ
فتح في وضع منبثق
- إزالة الصوت في بعض مستوى الدقة
+ يزيل الصوت في بعض القرارات
وضع النوافذ المنبثقة NewPipe
تم إلغاء الاشتراك في القناة
تعذر تغيير حالة الاشتراك
@@ -113,7 +113,7 @@
محتوى مقيد بحسب العمر
"إظهار الفيديو المقيد بحسب العمر. يمكن السماح باستخدام هذه المواد من \"الإعدادات\"."
بث مباشر
- تقرير عن مشكلة
+ تقرير خطأ
قائمة التشغيل
نعم
لاحقاً
@@ -155,15 +155,15 @@
تم رفض إذن الوصول إلى التخزين
ألف
مليون
- G
+ B
ليس هناك مشترِكون
- - %s لا يوجد مشاركين
+ - %s لا يوجد مشترك
- %s مشترك
- - %s مشاريكان
- - %s اشتراكات
- - %s مشاركون
- - %s اشتراك
+ - %s المشتركين
+ - %s المشتركين
+ - %s المشتركين
+ - %s المشتركين
دون مشاهدات
لاتوجد فيديوهات
@@ -200,7 +200,7 @@
فتح الموقع
المساهمون
التراخيص
- تطبيق مجاني خفيف الوزن وبث حي على نظام أندرويد.
+ تطبيق مجاني خفيف البث على أندرويد.
ساهم
إذا كانت لديك أفكار؛ أو ترجمة، أو تغييرات تخص التصميم، أو تنظيف و تحسين الشفرة البرمجية ، أو تعديلات عميقة عليها، فتذكر أنّ مساعدتك دائما موضع ترحيب. وكلما أتممنا شيئا كلما كان ذلك أفضل !
عرض على GitHub
@@ -238,12 +238,12 @@
تحدي الكابتشا
ضغط مطول للإدراج الى قائمة الانتظار
- - %s بدون مشهد
- - %s شاهد
- - %s مشاهدتان
- - %s مشاهدات
- - %s مشاهدون
- - %s شاهدو
+ - %s بدون مشهادة
+ - %s مشاهدة
+ - %s مشاهدة
+ - %s مشاهدة
+ - %s مشاهدة
+ - %s مشاهدة
- فيديوهات
@@ -425,7 +425,7 @@
تتبيه تحديث التطبيق
إيماءة التحكم بالصوت
الأحداث
- إخطارات لنسخة NewPipe الجديدة
+ الإخطارات لإصدار NewPipe الجديد
وحدة التخزين الخارجية غير متوفرة
"التنزيل على بطاقة SD الخارجية غير ممكن. إعادة تعيين موقع مجلد التحميل؟"
باستخدام علامات التبويب الافتراضية ، خطأ أثناء قراءة علامات التبويب المحفوظة
@@ -449,7 +449,7 @@
متوقف
في قائمة الانتظار
قيد المعالجة
- قائمه انتظار
+ طابور
تم رفضها من قبل النظام
فشل التنزيل
تم الانتهاء من التحميل
@@ -504,7 +504,7 @@
لم يتبقى مساحة في الجهاز
تم فقد التقدم بسبب حذف الملف
انتهى وقت الاتصال
- هل أنت واثق؟
+ هل تريد محو سجل التنزيل أو حذف جميع الملفات التي تم تنزيلها؟
حد قائمة انتظار التنزيل
سيتم تشغيل تنزيل واحد في نفس الوقت
بدء التنزيلات
@@ -542,11 +542,11 @@
تسريع إلى الأمام/-ترجيع وقت البحث
مثيلات خوادم پيرتيوب
- عيّن مثيلات خوادم پيرتيوب التي تُفضّلها
+ حدد مثيلات PeerTube المفضلة لديك
إضافة نموذج
- أدخل رابط مثيل الخادم
- فشل في التحقق من مثيل الخادم
- فقط عناوين https المدعومة
+ أدخل عنوان URL للمثيل
+ لا يمكن التحقق من صحة المثال
+ يتم دعم عناوين URL HTTPS فقط
مثيل الخادم موجود بالفعل
محلي
أضيف مؤخرا
@@ -554,5 +554,11 @@
تم إنشاؤه-تلقائيًا (لم يتم العثور على برنامج تحميل)
استرد
لا يمكن استرداد هذا التنزيل
- اختيار مثيل خادم
+ اختيار مثيل
+ ابحث عن الحالات التي تناسبك على %s
+ تمكين صور مصغرة قفل شاشة فيديو
+ عند استخدام مشغل الخلفية ، سيتم عرض صورة مصغرة للفيديو على شاشة القفل
+ تنظيف تاريخ التحميل
+ حذف الملفات التي تم تنزيلها
+ التنزيلات %1$s المحذوفة
\ No newline at end of file
From 7e9345680578174a24043e89fb47eebb03600fd2 Mon Sep 17 00:00:00 2001
From: zmni
Date: Fri, 17 Jan 2020 16:25:26 +0000
Subject: [PATCH 0199/1194] Translated using Weblate (Indonesian)
Currently translated at 99.8% (526 of 527 strings)
---
app/src/main/res/values-id/strings.xml | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index 8677df678..dd8413be8 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -480,7 +480,7 @@
NewPipe telah ditutup saat sedang memproses berkas
Tidak ada ruang kosong tersisa pada perangkat
Kehilangan laju, karena berkas telah dihapus
- Apakah anda yakin\?
+ Apakah anda yakin ingin menghapus semua riwayat unduhan dan berkas yang telah diunduh\?
Batasi antrean unduhan
Satu unduhan akan berjalan pada waktu yang bersamaan
Mulai unduh
@@ -527,4 +527,8 @@
Pilih situs
Aktifkan kunci layar thumbnail video
Ketika menggunakan pemutar latar belakang, thumbnail video akan ditampilkan di tampilan kunci layar
+ Kiosk Default
+ Hapus riwayat unduhan
+ Hapus berkas yang diunduh
+ %1$s unduhan dihapus
\ No newline at end of file
From 366c55c8f49b9578b5ef6fcfe9ff1d2aa01bfc6a Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 17 Jan 2020 09:02:16 +0000
Subject: [PATCH 0200/1194] Translated using Weblate (Polish)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-pl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 0da89ad48..4d2b38b5f 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -543,5 +543,5 @@
Podczas korzystania z odtwarzacza w tle na ekranie blokady zostanie wyświetlona miniatura filmu
Wyczyść historię pobierania
Usuń pobrane pliki
- Usunięte% 1$s pobrania
+ Usunięte %1$s pobrania
\ No newline at end of file
From 4797cd91840a51e26728a97d111af002282da97c Mon Sep 17 00:00:00 2001
From: Matsuri
Date: Sat, 18 Jan 2020 03:50:06 +0000
Subject: [PATCH 0201/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 98.5% (519 of 527 strings)
---
.../main/res/values-b+zh+HANS+CN/strings.xml | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index 078379683..4538fc184 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -130,8 +130,8 @@
没有结果
没有订阅者
- - %s个订阅者
-
+ - %s 位订阅者
+
没有视频
拖动以重新排序
@@ -410,8 +410,8 @@
NewPipe 项目非常重视您的隐私。因此,未经您的同意,应用程序不会收集任何数据。
\nNewPipe 的隐私政策详细解释了在发送崩溃报告时发送和存储的数据。
阅读隐私政策
- 为了遵守欧洲一般数据保护条例 (GDPR),我们提请您注意 NewPipe 的隐私政策。请仔细阅读。
-\n您必须接受它才能向我们发送错误报告。
+ 为了遵守欧盟的《通用数据保护条例》(GDPR),我们特此提醒您注意 NewPipe 的隐私政策。请您仔细阅读。
+\n您必须在同意以后才能向我们发送错误报告。
接受
拒绝
无限制
@@ -504,15 +504,15 @@
删除所有播放位置记录?
更改下载目录让内容生效
『时下流行』页-默认
- 无人在线观看
+ 没有人在观看
- %s 人在观看
- 没人在听
+ 没有人在听
- %s 人在听
-
+
重新启动应用后,语言将更改。
PeerTube 服务器
@@ -531,8 +531,8 @@
无法恢复此下载
选择一个服务器
快进 / 快退的单位时间
- 在锁屏界面显示视频缩略图
- 在后台播放时,锁屏界面将会显示视频的缩略图
+ 在锁屏上显示视频缩略图
+ 在后台播放时,锁屏上将会显示视频的缩略图
清除下载历史记录
删除下载了的文件
已删除 %1$s 下载
From 62906fb84a294fd847274b0f7e9ed10136915bfe Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Fri, 17 Jan 2020 03:52:10 +0000
Subject: [PATCH 0202/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 6cb16623f..b82736f90 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -480,7 +480,7 @@
NewPipe 在處理檔案時被關閉
裝置上沒有剩餘的空間
進度遺失,因為檔案已被刪除
- 您確定?
+ 您想要清除您的下載歷史紀錄或刪除所有已下載的檔案嗎?
限制下載佇列
一次執行一個下載
開始下載
@@ -531,4 +531,7 @@
選擇一個站臺
啟用鎖定畫面影片縮圖
使用背景播放器時,鎖定畫面上將會顯示影片縮圖
+ 清除下載歷史紀錄
+ 刪除已下載的檔案
+ 已刪除 %1$s 個下載
\ No newline at end of file
From b6028cef5bf2df810774396cd1e19ef316a18785 Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Fri, 17 Jan 2020 16:14:04 +0000
Subject: [PATCH 0203/1194] Translated using Weblate (Kurdish)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ku/strings.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 50350e1b3..b6d8bb877 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -517,7 +517,7 @@
بیرگەی ناوەکیت پڕبووە
کردارەکە شکستی هێنا, چونکە ئەو فایلە سڕاوەتەوە
هێڵی ئینتەرنێت نەما
- ئایا دڵنیای؟
+ ئایا دەتەوێ مێژووی داگرتنەکانت بسڕدرێنەوە یان هەموو فایلە داگیراوەکان بسڕدرێنەوە؟
سنوری ڕیزبوونی داگرتنەکان
تەنها یەک داگرتن کاردەکات لەیەک کاتدا
دەستپێکردنەوەی داگرتنەکان
@@ -538,4 +538,7 @@
دۆخێک هەڵبژێرە
چالاککردنی وێنۆچکەی ڤیدیۆی داخستنی ڕوونما
کاتێ کارپێکەری پاشبنەما کاردەکات ئەوا وێنۆچکەی ڤیدیۆکە لە ڕوونما داخراوەکەدا نیشاندەدرێت
+ سڕینەوەی مێژووی داگرتن
+ سڕینەوەی فایلە داگیراوەکان
+ %1$ لە داگرتنەکان سڕانەوە
\ No newline at end of file
From 0e39071b5e19df627b416cdf1aae143f125bb99c Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 17 Jan 2020 23:18:47 +0000
Subject: [PATCH 0204/1194] Translated using Weblate (Urdu)
Currently translated at 94.3% (497 of 527 strings)
---
app/src/main/res/values-ur/strings.xml | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 724c9c3ed..d885cb915 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -1,7 +1,7 @@
شروع کرنے کے لیے تلاش پر ٹیپ کریں
- ملاحظات
+ ملاحظات s$1%
کوشائع ہوا
انسٹال
منسوخ کریں
@@ -193,13 +193,13 @@
بی
کوئی صارفین نہیں
- - s% صارف
- - s% صارفین
+ - %s صارف
+ - %s صارفین
کوئی مناظر نہیں
- - s% منظر
- - s% مناظر
+ - %s منظر
+ - %s مناظر
ویڈیوز دستیاب نہیں
@@ -306,7 +306,7 @@
دراز بند کریں
یہاں جلد ہی کچھ نظر آئے گا D D
ترجیح \' کھلی \' عمل
- مواد کھولنے پر ڈیفالٹ کارروائی — s%
+ مواد کھولنے پر ڈیفالٹ کارروائی — %s
ویڈیو پلیئر
پس منظر پلیئر
پوپ اپ پلیئر
@@ -437,7 +437,7 @@
سسٹم نےکارروائی سے انکار کیا گیا
ڈاؤن لوڈ ناکام
ڈاؤن لوڈ تکمیل
- s% ڈاؤن لوڈ مکمل ہوگئے
+ %s ڈاؤن لوڈ مکمل ہوگئے
منفرد نام بنائیں
برتحریر
اس نام کے ساتھ ایک ڈاؤن لوڈ جاری ہے
From cf60033424888963c07a3327913d8371a0dafe95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Thu, 16 Jan 2020 05:28:38 +0000
Subject: [PATCH 0205/1194] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?=
=?UTF-8?q?gian=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 96.4% (508 of 527 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index d01647f5d..0c4ee8dde 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -524,6 +524,6 @@
Tøm nedlastingshistorikk
Slett nedlastede filer
Slettet %1$s nedlastninger
- Aktiver videominiatyrbilde med låseskjerm
- Når du bruker bakgrunnsspilleren, vises en videominiaturbilde på låseskjermen
+ Aktiver videominiatyrbilde på låseskjerm
+ Når du bruker bakgrunnsspilleren, vises ent videominiatyrbilde på låseskjermen
\ No newline at end of file
From afc362d2b613773df1896dbb1a3f6179f2d7beb6 Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Mon, 20 Jan 2020 23:33:30 -0300
Subject: [PATCH 0206/1194] readability changes
---
.../java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java b/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
index e20b06352..6f1cceeed 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/SrtFromTtmlWriter.java
@@ -34,7 +34,7 @@ public class SrtFromTtmlWriter {
private static String getTimestamp(Element frame, String attr) {
return frame
.attr(attr)
- .replace('.', ',');// Str uses comma as decimal separator
+ .replace('.', ',');// SRT subtitles uses comma as decimal separator
}
private void writeFrame(String begin, String end, StringBuilder text) throws IOException {
@@ -69,7 +69,7 @@ public class SrtFromTtmlWriter {
Document doc = Jsoup.parse(new ByteArrayInputStream(buffer), "UTF-8", "", Parser.xmlParser());
StringBuilder text = new StringBuilder(128);
- Elements paragraph_list = doc.select("body>div>p");
+ Elements paragraph_list = doc.select("body > div > p");
// check if has frames
if (paragraph_list.size() < 1) return;
From 0ed3354cee6e4e3021263ecdd1b2253dfe144838 Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Tue, 21 Jan 2020 20:56:06 +0100
Subject: [PATCH 0207/1194] Use custom dialog to edit and delete local
playlists at once
---
.../local/bookmark/BookmarkFragment.java | 73 +++++--------------
.../newpipe/local/dialog/BookmarkDialog.kt | 47 ++++++++++++
app/src/main/res/layout/dialog_bookmark.xml | 51 +++++++++++++
app/src/main/res/values/strings.xml | 1 +
4 files changed, 118 insertions(+), 54 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/local/dialog/BookmarkDialog.kt
create mode 100644 app/src/main/res/layout/dialog_bookmark.xml
diff --git a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
index 6a7f16025..bfd90acda 100644
--- a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
@@ -1,13 +1,9 @@
package org.schabi.newpipe.local.bookmark;
import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.res.Resources;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.Log;
-import android.widget.EditText;
-import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
@@ -26,6 +22,7 @@ import org.schabi.newpipe.database.playlist.PlaylistLocalItem;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
import org.schabi.newpipe.local.BaseLocalListFragment;
+import org.schabi.newpipe.local.dialog.BookmarkDialog;
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
import org.schabi.newpipe.local.playlist.RemotePlaylistManager;
import org.schabi.newpipe.report.UserAction;
@@ -124,34 +121,7 @@ public final class BookmarkFragment
@Override
public void held(LocalItem selectedItem) {
if (selectedItem instanceof PlaylistMetadataEntry) {
- final Resources resources = getContext().getResources();
- String[] commands = new String[]{
- resources.getString(R.string.rename_playlist),
- resources.getString(R.string.delete_playlist)
- };
-
- final DialogInterface.OnClickListener actions = (dialogInterface, i) -> {
- switch (i) {
- case 0:
- showLocalRenameDialog((PlaylistMetadataEntry) selectedItem);
- break;
- case 1:
- showLocalDeleteDialog((PlaylistMetadataEntry) selectedItem);
- break;
- }
- };
-
- final View bannerView = View.inflate(activity, R.layout.dialog_title, null);
- bannerView.setSelected(true);
- TextView titleView = bannerView.findViewById(R.id.itemTitleView);
- titleView.setText(((PlaylistMetadataEntry) selectedItem).name);
-
- new AlertDialog.Builder(getActivity())
- .setCustomTitle(bannerView)
- .setItems(commands, actions)
- .create()
- .show();
-
+ showLocalDialog((PlaylistMetadataEntry) selectedItem);
} else if (selectedItem instanceof PlaylistRemoteEntity) {
showRemoteDeleteDialog((PlaylistRemoteEntity) selectedItem);
}
@@ -279,14 +249,27 @@ public final class BookmarkFragment
// Utils
///////////////////////////////////////////////////////////////////////////
- private void showLocalDeleteDialog(final PlaylistMetadataEntry item) {
- showDeleteDialog(item.name, localPlaylistManager.deletePlaylist(item.uid));
- }
-
private void showRemoteDeleteDialog(final PlaylistRemoteEntity item) {
showDeleteDialog(item.getName(), remotePlaylistManager.deletePlaylist(item.getUid()));
}
+ private void showLocalDialog(PlaylistMetadataEntry selectedItem) {
+ BookmarkDialog dialog = new BookmarkDialog(getContext(),
+ selectedItem.name, new BookmarkDialog.OnClickListener() {
+ @Override
+ public void onDeleteClicked() {
+ showDeleteDialog(selectedItem.name,
+ localPlaylistManager.deletePlaylist(selectedItem.uid));
+ }
+
+ @Override
+ public void onSaveClicked(@NonNull String name) {
+ changeLocalPlaylistName(selectedItem.uid, name);
+ }
+ });
+ dialog.show();
+ }
+
private void showDeleteDialog(final String name, final Single deleteReactor) {
if (activity == null || disposables == null) return;
@@ -303,24 +286,6 @@ public final class BookmarkFragment
.show();
}
- private void showLocalRenameDialog(PlaylistMetadataEntry selectedItem) {
- final View dialogView = View.inflate(getContext(), R.layout.dialog_playlist_name, null);
- EditText nameEdit = dialogView.findViewById(R.id.playlist_name);
- nameEdit.setText(selectedItem.name);
- nameEdit.setSelection(nameEdit.getText().length());
-
- final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(
- getContext())
- .setTitle(R.string.rename_playlist)
- .setView(dialogView)
- .setCancelable(true)
- .setNegativeButton(R.string.cancel, null)
- .setPositiveButton(R.string.rename, (dialogInterface, i) -> {
- changeLocalPlaylistName(selectedItem.uid, nameEdit.getText().toString());
- });
- dialogBuilder.show();
- }
-
private void changeLocalPlaylistName(long id, String name) {
if (localPlaylistManager == null) {
return;
diff --git a/app/src/main/java/org/schabi/newpipe/local/dialog/BookmarkDialog.kt b/app/src/main/java/org/schabi/newpipe/local/dialog/BookmarkDialog.kt
new file mode 100644
index 000000000..dd20e88a0
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/local/dialog/BookmarkDialog.kt
@@ -0,0 +1,47 @@
+package org.schabi.newpipe.local.dialog
+
+import android.app.Dialog
+import android.content.Context
+import android.os.Bundle
+import android.view.Window
+import android.widget.Button
+import android.widget.EditText
+import org.schabi.newpipe.R
+
+class BookmarkDialog(
+ context: Context,
+ private val playlistName: String,
+ val listener: OnClickListener)
+ : Dialog(context) {
+
+ private lateinit var editText: EditText
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ requestWindowFeature(Window.FEATURE_NO_TITLE)
+ setContentView(R.layout.dialog_bookmark)
+ initListeners()
+ }
+
+ private fun initListeners() {
+ editText = findViewById(R.id.playlist_name_edit_text);
+ editText.setText(playlistName)
+
+ findViewById(R.id.bookmark_delete).setOnClickListener {
+ listener.onDeleteClicked()
+ dismiss()
+ }
+ findViewById(R.id.bookmark_cancel).setOnClickListener {
+ dismiss()
+ }
+ findViewById(R.id.bookmark_save).setOnClickListener {
+ listener.onSaveClicked(editText.text.toString())
+ dismiss()
+ }
+ }
+
+ interface OnClickListener {
+ fun onDeleteClicked()
+ fun onSaveClicked(name: String)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_bookmark.xml b/app/src/main/res/layout/dialog_bookmark.xml
new file mode 100644
index 000000000..798a8f4c8
--- /dev/null
+++ b/app/src/main/res/layout/dialog_bookmark.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e1b2cc0a4..1b1fc9704 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -589,4 +589,5 @@
Use SAF
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
+ save
From ee0f94c2325bcc276c784ede77e719f367878b52 Mon Sep 17 00:00:00 2001
From: chr56
Date: Wed, 22 Jan 2020 03:44:23 +0000
Subject: [PATCH 0208/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index 4538fc184..9fbc08493 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -131,7 +131,7 @@
没有订阅者
- %s 位订阅者
-
+
没有视频
拖动以重新排序
@@ -148,7 +148,7 @@
等待中…
已暂停
排队中
- 已加入队列
+ 加入队列
操作已被系统拒绝
下载失败
下载完成
@@ -219,7 +219,7 @@
记住最后一次使用悬浮窗的大小和位置
悬浮窗
调整大小
- 部分分辨率的视频将没有声音
+ 隐藏部分没有音频的分辨率
播放器手势控制
使用手势控制播放器的亮度和音量
显示搜索建议
@@ -416,7 +416,7 @@
拒绝
无限制
使用移动数据时限制分辨率
- 切换应用时最小化
+ 退出应用时最小化
从主播放器切换到其他应用时的操作 - %s
静音时快进
滑块[比例尺]
@@ -487,7 +487,7 @@
设备上没有剩余储存空间
进度丢失,文件已被删除
连接超时
- 你确定吗?
+ 是否要清除下载历史记录或删除所有下载的文件?
最大下载队列
同时只允许一个下载进行
开始下载
@@ -512,16 +512,16 @@
没有人在听
- %s 人在听
-
+
重新启动应用后,语言将更改。
PeerTube 服务器
设置自己喜欢的PeerTube服务器
查找最适合你的服务器%s
添加服务器
- 输入服务器网址
+ 输入服务器网址(URL)
无法验证服务器
- 仅支持 https URL
+ 仅支持 HTTPS和URL
该服务器已存在
本地
最近添加
From 167653ac603835c260b8785e3d79d5577c3516dc Mon Sep 17 00:00:00 2001
From: chr56
Date: Wed, 22 Jan 2020 13:00:00 +0800
Subject: [PATCH 0209/1194] fix wrong strings in values-zh-rCN.
---
app/src/main/res/values-zh-rCN/strings.xml | 63 +++++++++++-----------
1 file changed, 33 insertions(+), 30 deletions(-)
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index cfa443afc..54f58a5bb 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -6,7 +6,7 @@
在浏览器中打开
在悬浮窗模式下打开
您是不是要找:%1$s?
- 找不到串流播放器 (您可以安裝并使用VLC播放)。
+ 找不到串流播放器 (您可以安装 VLC 进行播放)。
下载串流文件
安装
取消
@@ -16,7 +16,7 @@
设置
分享给...
选择浏览器
- 视频下载文件夹
+ 视频下载路径
已下载的视频存储在这里
请选择下载视频的保存位置
已下载的音频存储在这里
@@ -39,10 +39,10 @@
网络错误
- 视频
-
+ - 视频
禁用
- 背景
+ 后台播放
过滤器
刷新
搜索建议
@@ -91,7 +91,7 @@
存储访问权限已被拒绝
- %1$s 次观看
-
+ - %1$s 次观看
千
百万
@@ -130,8 +130,8 @@
没有结果
没有订阅者
- - %s个订阅者
-
+ - %s 位订阅者
+ - %s 位订阅者
没有视频
拖动以重新排序
@@ -148,7 +148,7 @@
等待中…
已暂停
排队中
- 已加入队列
+ 加入队列
操作已被系统拒绝
下载失败
下载完成
@@ -157,8 +157,8 @@
切换服务,当前选择:
找不到串流播放器。您想安装 VLC 吗?
旋转
- 使用第三方视频播放器
- 使用第三方视频播放器
+ 使用外部视频播放器
+ 使用外部音频播放器
音频下载文件夹
从其他应用调用 NewPipe 时播放视频
默认分辨率
@@ -209,7 +209,7 @@
\n需要此权限
reCAPTCHA验证
请求的新的CAPTCHA验证
- NewPipe悬浮窗模式
+ NewPipe 悬浮窗模式
在悬浮窗中播放
默认悬浮窗分辨率
使用更高的分辨率
@@ -219,7 +219,7 @@
记住最后一次使用悬浮窗的大小和位置
悬浮窗
调整大小
- 删除“某些”分辨率的音频
+ 隐藏部分没有音频的分辨率
播放器手势控制
使用手势控制播放器的亮度和音量
显示搜索建议
@@ -234,9 +234,9 @@
取消订阅频道
无法修改订阅
无法更新订阅
- 主页面
+ 主页
订阅
- 新增功能
+ 最新
恢复前台焦点
中断后继续播放(例如突然来电后)
搜索历史记录
@@ -321,7 +321,7 @@
警告:无法导入所有文件。
这将覆盖当前设置。
显示信息
- 已收藏
+ 书签
确定要从观看历史记录中删除该项吗?
是否确实要从历史记录中删除所有项目?
最后播放
@@ -410,13 +410,13 @@
NewPipe 项目非常重视您的隐私。因此,未经您的同意,应用程序不会收集任何数据。
\nNewPipe 的隐私政策详细解释了在发送崩溃报告时发送和存储的数据。
阅读隐私政策
- 为了遵守欧洲一般数据保护条例 (GDPR),我们提请您注意 NewPipe 的隐私政策。请仔细阅读。
-\n您必须接受它才能向我们发送错误报告。
+ 为了遵守欧盟的《通用数据保护条例》(GDPR),我们特此提醒您注意 NewPipe 的隐私政策。请您仔细阅读。
+\n您必须在同意以后才能向我们发送错误报告。
接受
拒绝
无限制
使用移动数据时限制分辨率
- 切换应用时最小化
+ 退出应用时最小化
从主播放器切换到其他应用时的操作 - %s
静音时快进
滑块[比例尺]
@@ -469,7 +469,7 @@
禁用,以停止显示评论
- 评论
-
+ - 评论
无法加载评论
关闭
@@ -487,7 +487,7 @@
设备上没有剩余储存空间
进度丢失,文件已被删除
连接超时
- 你确定吗?
+ 是否要清除下载历史记录或删除所有下载的文件?
最大下载队列
同时只允许一个下载进行
开始下载
@@ -504,24 +504,24 @@
删除所有播放位置记录?
更改下载目录让内容生效
『时下流行』页-默认
- 无人在线观看
+ 没有人在观看
- %s 人在观看
-
+ - %s 人在观看
- 没人在听
+ 没有人在听
- %s 人在听
-
+ - %s 人在听
重新启动应用后,语言将更改。
PeerTube 服务器
- 设置自己喜欢的peertube服务器
- 查找最适合你的服务器https://joinpeertube.org/instances#instances-list
+ 设置自己喜欢的PeerTube服务器
+ 查找最适合你的服务器%s
添加服务器
- 输入服务器网址
+ 输入服务器网址(URL)
无法验证服务器
- 仅支持 https URL
+ 仅支持 HTTPS和URL
该服务器已存在
本地
最近添加
@@ -531,6 +531,9 @@
无法恢复此下载
选择一个服务器
快进 / 快退的单位时间
- 在锁屏界面显示视频缩略图
- 在后台播放时,锁屏界面将会显示视频的缩略图
+ 在锁屏上显示视频缩略图
+ 在后台播放时,锁屏上将会显示视频的缩略图
+ 清除下载历史记录
+ 删除下载了的文件
+ 已删除 %1$s 下载
\ No newline at end of file
From ce075395a1b72b2c1db53ff6921ed4b70123d86d Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Tue, 21 Jan 2020 16:37:53 +0000
Subject: [PATCH 0210/1194] Translated using Weblate (Kurdish)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ku/strings.xml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index b6d8bb877..9a061bab7 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -3,20 +3,20 @@
گرته له گهڕان بكه بۆ دهستپێكردن
%1$s بینراو
بڵاوكراوهتهوه له %1$s
- هیچ كارپێكهرێكی ڤیدیۆیی نهدۆزرایهوه. دهتهوێت VLC داگریت؟
- هیچ کارپێکەرێکی ڤیدیۆ نەدۆزرایەوە (دەتوانی کارپێکەری VLC دامەزرێنی) .
+ هیچ كارپێكهرێكی ڤیدیۆیی نهدۆزرایهوه. دهتهوێت VLC دابمەزرێنیت؟
+ هیچ کارپێکەرێکی ڤیدیۆیی نەدۆزرایەوە (دەتوانی کارپێکەری VLC دامەزرێنی) .
دامەزراندن
پاشگهزبوونهوه
كردنهوه له وێبگهر
كردنهوه له پهنجهرهی بچووک
هاوبهشپێكردن
داگرتن
- داگرتنی فایلی پەخش
+ داگرتنی پەڕگەی پەخش
گهڕان
ڕێكخستنهكان
مەبەستت ئەمەیە:
\n%1$s\?
- "هاوبهشپێكردن لهگهڵ "
+ هاوبهشپێكردن لهگهڵ
ههڵبژاردنی وێبگهر
لاربوونەوە
بهكارهێنانی كارپێكهری ڤیدیۆی دهرهكی
@@ -31,7 +31,7 @@
پیشاندانی زانیاری
سهرهكی
بهشدارییهكان
- لیستی کارپێکردنەکان نیشانەکران
+ خشتەی کارپێکردنەکان نیشانەکران
چی نوێ ههیه
لە پاشبنەما
پهنجهرهی بچووک
From 1f975c0a3ac677cbc2829c0e80ce36bd7553fcd2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Tue, 21 Jan 2020 15:55:32 +0000
Subject: [PATCH 0211/1194] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?=
=?UTF-8?q?gian=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 98.1% (517 of 527 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 0c4ee8dde..28a11185d 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -526,4 +526,14 @@
Slettet %1$s nedlastninger
Aktiver videominiatyrbilde på låseskjerm
Når du bruker bakgrunnsspilleren, vises ent videominiatyrbilde på låseskjermen
+ Velg dine favoritter blandt PeerTube-instansene
+ Finn instansene som passer deg best på %s
+ Legg til instans
+ Skriv inn nettadresse til instans
+ Kunne ikke bekrefte instans
+ Kun HTTPS-nettadresser støttes
+ Instansen finnes allerede
+ Autogenerert (fant ingen opplaster)
+ gjenoppretter
+ Kan ikke gjenopprette denne nedlastingen
\ No newline at end of file
From e224f8ca288b0f4d0a0d088b22a82bec2ae31d0a Mon Sep 17 00:00:00 2001
From: Abu Sarim Hindi
Date: Thu, 23 Jan 2020 14:31:20 +0000
Subject: [PATCH 0212/1194] Translated using Weblate (Urdu)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ur/strings.xml | 188 +++++++++++++++----------
1 file changed, 110 insertions(+), 78 deletions(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index d885cb915..8ddc28711 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -1,79 +1,78 @@
شروع کرنے کے لیے تلاش پر ٹیپ کریں
- ملاحظات s$1%
- کوشائع ہوا
+ s$1% ملاحظات
+ %1$s کو شائع ہوا
انسٹال
منسوخ کریں
- بانٹیں
- ڈاؤن لوڈکریں
+ اشتراک کریں
+ ڈاؤن لوڈ
تلاش کریں
- کیا آپ کا مطلب تھا: s$1%\?
- انٹرنیٹ میں کھولیں
+ کیا آپ کا مطلب یہ ہے: s$1%\?
+ براؤزر میں کھولیں
ترتیبات
- کوئیstream پلیئر نہیں ملا.کیا آپ VLC انسٹال کرنا چاہتے ہیں؟
- کوئیstream پلیئر نہیں ملا(آپ VLC انسٹال کر سکتے ہیے)۔
- PopUp موڈ میں کھولیں
- سٹریم فائل ڈاؤن لوڈ کریں
- کے ساتھ بانٹیں
- Internet Browser منتخب کریں
-\n
- rotation کرو
- external video player استعمال کریں
- کچھ ریذولوشن پر آڈیو ہٹاتا ہے
- بیرونی سوتی عامل ایپ استعمال کریں
- NewPipe ابھاری اسلوب
- سبسکرائیب کریں
- سبسکرائیب کر لیا
+ کوئی اسٹریم پلیئر نہیں ملا۔ کیا آپ VLC انسٹال کرنا چاہتے ہیں؟
+ کوئی اسٹریم پلیئر نہیں ملا (آپ VLC انسٹال کر سکتے ہیں)۔
+ پاپ اپ وضع میں کھولیں
+ اسٹریم فائل ڈاؤن لوڈ کریں
+ کے ساتھ اشتراک کریں
+ براؤزر منتخب کریں
+ گھماؤ
+ خارجی ویڈیو پلئیر استعمال کریں
+ کچھ ریزولوشن پر آڈیو ہٹاتا ہے
+ خارجی آڈیو پلیر استعمال کریں
+ NewPipe پاپ اپ اسلوب
+ رکنیت اختیار کریں
+ رکنیت شدہ
چینل کی رکنیت ختم کردی گئی
- رکنیت کو تبدیل نہیں کیا جاسکا
- سبسکرپشن کو اپ ڈیٹ نہیں کیا جاسکا
+ رکنیت کو تبدیل نہیں کیا جا سکا
+ رکنیت کی تازہ کاری نہیں ہو سکی
معلومات دکھائیں
- بنیادی
- سبسکرپشنز
- بُک مارک کردہ پلے لسٹس
- نئ آمد
+ مرکزی
+ رکنیتیں
+ نشان زدہ پلے لسٹس
+ نیا کیا ہے
پس منظر
پوپ اپ
شامل کریں
ویڈیو ڈاؤن لوڈ فولڈر
- ڈاؤن لوڈ کی ویڈیو فائلوں کو یہاں ذخیرہ کیا جاتا ہے
+ ڈاؤن لوڈ کی گئی ویڈیو فائلیں یہاں محفوظ ہیں
ویڈیو فائلوں کے لئے ڈاؤن لوڈ فولڈر کا انتخاب کریں
آڈیو ڈاؤن لوڈ فولڈر
ڈاؤن لوڈ کی گئی آڈیو فائلیں یہاں محفوظ ہیں
آڈیو فائلوں کے لئے ڈاؤن لوڈ فولڈر کا انتخاب کریں
آٹوپلے
- ایک ویڈیو ادا کرتا ہے جب نیو پائپ کسی دوسرے ایپ سے بلایا جاتا ہے
- طے شدہ جزیات
- طے شدہ پوپ جزیات
- اعلی قراردادیں دکھائیں
- صرف کچھ آلات 2K / 4K ویڈیوز کھیلنے میں معاون ہیں
+ جب دوسرے ایپ سے نیو پائپ کال کی جاتی ہے تو ویڈیو چلاتا ہے
+ طے شدہ ریزولوشن
+ طے شدہ پوپ اپ ریزولوشن
+ اعلیٰ معیارات دکھائیں
+ صرف کچھ آلات 2K / 4K ویڈیوز چلانے میں معاون ہیں
کوڈی کے ساتھ استعمال کریں
کور ایپ نہیں ملی۔ اسے انسٹال کریں؟
- \"کودی کے ساتھ کھیلیں\" کا آپشن دکھائیں
- کوڈی میڈیا سنٹر کے ذریعے ویڈیو چلانے کا آپشن دکھائیں
+ \"کودی کے ساتھ چلائیں\" آپشن دکھائیں
+ کوڈی کے ذریعے ویڈیو چلانے کا آپشن دکھائیں
آڈیو
- پہلے سے طے شدہ آڈیو فارمیٹ
- طے شدہ وڈیو وضع
+ طے شدہ آڈیو فارمیٹ
+ طے شدہ وڈیو فارمیٹ
خیالیہ
- روشنی
+ روشن
تاریک
سیاہ
- پاپ اپ سائز اور پوزیشن کو یاد رکھیں
- آخری سائز اور پوپ اپ کی پوزیشن یاد رکھیں
- تیز رفتار تلاش کریں
- غیر معقول تلاش سے کھلاڑی کم ہونے والی صحت سے متعلق تیزی سے پوزیشن حاصل کرنے کی اجازت دیتا ہے
- Thumbnailلوڈکریں
- تھمب نیلز کو لوڈ کرنے ، اعداد و شمار کی بچت اور میموری کے استعمال کو روکنے کیلئے آف کریں۔ تبدیلیاں دونوں میموری میں اور آن ڈسک امیج کیشے کو صاف کرتی ہیں۔
- تصویری کیشے کا صفایا کردیا
- کیشڈ میٹا ڈیٹا کو صاف کریں
- ویب میں موجود سبھی ڈیٹا کو ہٹا دیں
- میٹا ڈیٹا کیشے کا صفایا کردیا
- آٹو قطار اگلا اسٹریم
+ پاپ اپ جسامت اور مقام کو یاد رکھیں
+ پچھلی جسامت اور پوپ اپ کا مقام یاد رکھیں
+ بالواسطہ رسائی استعمال کریں
+ بالواسطہ تلاش مشکلات کو کم کر کے پلیئر کو تیز رفتاری سے مقامات تک رسائی کرنے دیتی ہے
+ نظرِ انگشتی لوڈ کریں
+ ڈیٹا کی بچت اور میموری کے استعمال کو روکنے کیلئے نظرِ انگشتی کو بند کریں۔ تبدیلیاں میموری اور آن ڈسک عکس کے کیشے کو صاف کرتی ہیں۔
+ تصویری کیشے کی صفائی ہوئی
+ کیشے میٹا ڈیٹا کو صاف کریں
+ ویب پیج کے سبھی کیشے ڈیٹا کو ہٹا دیں
+ میٹا ڈیٹا کیشے کی صفائی ہوئی
+ اگلا سلسلہ خود قطار
جب دوبارہ نہ چلنے والی قطار میں آخری سلسلہ جاری ہو تو متعلقہ سلسلے کو خود سے شامل کریں
پلیر اشارہ کنٹرول
اشارے کی چمک اور آواذکو کنٹرول کرنے کے لئے اشاروں کا استعمال کریں
- تلاش کی تجاویز
+ تلاش کے اشارے
تلاش کرتے وقت تجاویز دکھائیں
تاریخ تلاش کریں
تلاش کے استفسارات کو مقامی طور پر ذخیرہ کریں
@@ -138,7 +137,7 @@
تاریخ ، خریداری اور پلے لسٹ برآمد کریں
خرابی
نیٹ ورک کی خرابی
- تمام تمبنیلذلوڈ نہیں کر سکے
+ تمام نظرِ انگشتی لوڈ نہیں کر سکے
ویڈیو یو آر ایل کے دستخط ڈکرپٹ نہیں ہو سکے
ویب سائٹ کو تجزیہ نہیں کیا جاسکا
ویب سائٹ کو مکمل طور پر تجزیہ نہیں کرسکے
@@ -188,9 +187,9 @@
آڈیو
دوبارہ کوشش کریں
ذخیرہ رسائی اجازت مسترد
- K
+ ہزار
ایم
- بی
+ ارب
کوئی صارفین نہیں
- %s صارف
@@ -203,8 +202,8 @@
ویڈیوز دستیاب نہیں
- - ویڈیوز
-
+ - ویڈیو
+ - ویڈیوز
شروع کریں
توقف
@@ -243,13 +242,13 @@
ترتیبات
کے بارے میں
تیسری پارٹی کے لائسنس
- 3٪ 1 $ s بذریعہ٪ 2 $ s٪ 3 $ s کے تحت
+ © %1$s بذریعہ %2$s %3$s کے تحت
لائسنس لوڈ نہیں کر سکا
ویب سائٹ کھولیں
کے بارے میں
معاونین
لائسنس
- لوڈ ، اتارنا Android پر ہلکا پھلکا اسٹریمنگ۔
+ لِبرے کی اینڈروئیڈ پر کم وزنی اسٹریمنگ
تعاون کریں
چاہے آپ کے خیالات ہوں؛ ترجمہ ، ڈیزائن میں تبدیلیاں ، کوڈ صاف کرنا ، یا حقیقی ہیوی کوڈ میں تبدیلی — مدد کا ہمیشہ خیرمقدم کیا جاتا ہے۔ جتنا زیادہ ہوتا ہے اتنا ہی بہتر ہوتا ہے!
گٹ ہب پر دیکھیں
@@ -276,17 +275,17 @@
مرکزی صفحہ کا مواد
خالی صفحہ
رجحان صفحہ
- سکریپشن پیج
+ صفحۂ رکنیت
فیڈ صفحہ
چینل کا صفحہ
ایک چینل منتخب کریں
- کسی چینل کی رکنیت نہیں
+ اب تک چینل کی رکنیت نہیں
ایک کیوسک منتخب کریں
- برآمدشدہ
+ برآمد شدہ
درآمدشدہ
- کوئی درست زپ فائل نہیں ہے
+ درست زپ فائل نہیں ہے
انتباہ: تمام فائلوں کو درآمد نہیں کیا جاسکا۔
- یہ آپ کے موجودہ سیٹ اپ کو اوور رائڈ کرے گا۔
+ یہ آپ کی موجودہ سیٹ اپ کو رد کر دے گا۔
کیوسک
رجحان سازی
Top 50
@@ -305,8 +304,8 @@
دراز کھولیں
دراز بند کریں
یہاں جلد ہی کچھ نظر آئے گا D D
- ترجیح \' کھلی \' عمل
- مواد کھولنے پر ڈیفالٹ کارروائی — %s
+ پسندیدہ \'کھلی\' کارروائی
+ مواد کھولنے پر طے شدہ کارروائی — %s
ویڈیو پلیئر
پس منظر پلیئر
پوپ اپ پلیئر
@@ -347,7 +346,7 @@
رکنیت برآمد نہیں کر سکا
برآمد فائل کو ڈاؤن لوڈ کرکے YouTube کی رکنیت کو درآمد کریں:
\n
-\n1. اس یو آر ایل پر جائیں:s$1%
+\n1. اس یو آر ایل پر جائیں: %1$s
\n2. جب پوچھا جائے تو لاگ ان کریں
\nA. ڈاؤن لوڈ شروع ہونا چاہئے (یہ برآمد فائل ہے)
URL یا آپ کی ID ٹائپ کرکے ایک SoundCloud پروفائل درآمد کریں:
@@ -361,7 +360,7 @@
\n
\nکیا آپ جاری رکھنا چاہتے ہیں؟
پلے بیک رفتار کنٹرول
- Tempo
+ ٹیمپو
"آواز کو موٹا کرنا"
ختم (مسخ کا سبب بن سکتا ہے)
کیپشن
@@ -376,7 +375,7 @@
تلاش کی تاریخ حذف ہوگئی۔
1 شے حذف کر دی گئی ۔
نیو پائپ کاپلیفٹ فری سافٹ ویئر ہے: آپ استعمال کرسکتے ہیں ، مطالعہ شیئر کرسکتے ہیں اور اپنی مرضی سے اسے بہتر کرسکتے ہیں۔ خاص طور پر آپ اسے مفت سافٹ ویئر فاؤنڈیشن کے ذریعہ شائع کردہ GNU جنرل پبلک لائسنس کی شرائط کے تحت دوبارہ تقسیم اور / یا ترمیم کرسکتے ہیں ، جو لائسنس کا ورژن 3 ، یا (آپ کے اختیار پر) کسی بھی بعد کا ورژن ہے۔
- کیا آپ سیٹنگیں بھی درآمد کرنا چاہتے ہیں؟
+ کیا آپ ترتیبات بھی درآمد کرنا چاہتے ہیں؟
نیو پائپ کی رازداری کی پالیسی
نیوپی پائپ منصوبہ آپ کی رازداری کو بہت سنجیدگی سے لیتا ہے. لہذا ، اپلی کیشن آپ کی رضامندی کے بغیر کسی بھی ڈیٹا کو جمع نہیں کرتا.
\nنیو پائپ کی رازداری کی پالیسی تفصیل سے وضاحت کرتی ہے کہ آپ کو کریش رپورٹ بھیجنے پر کیا ڈیٹا بھیجا جاتا ہے اور ذخیرہ کیا جاتا ہے ۔
@@ -399,13 +398,13 @@
پلے لسٹس
ویڈیو ذ
صارفین
- اندراج خارج کریں
+ رکنیت چھوڑیں
نیا ٹیب
- ٹیب کا انتخاب کریں
- صوت اشارہ کنٹرول
- پلیر کی آواذکنٹرول کرنے کے لیے اشاروں کا استعمال کریں
- چمک اشارہ کنٹرول
- پلیرکی چمک کو کنٹرول کرنے کیلئے اشاروں کا استعمال کریں
+ ٹیب منتخب کریں
+ صوتی اشارہ کنٹرول
+ پلیئر کی آواز کنٹرول کرنے کے لیے اشاروں کا استعمال کریں
+ چمک کا متحرک کنٹرول
+ پلیئرکی چمک کو کنٹرول کرنے کیلئے اشاروں کا استعمال کریں
ڈیفالٹ مواد کی زبان
تازہ کاریاں
فائل حذف ہوگئی
@@ -436,8 +435,8 @@
قطار
سسٹم نےکارروائی سے انکار کیا گیا
ڈاؤن لوڈ ناکام
- ڈاؤن لوڈ تکمیل
- %s ڈاؤن لوڈ مکمل ہوگئے
+ ڈاؤن لوڈ مکمل
+ %s ڈاؤن لوڈ مکمل ہوا
منفرد نام بنائیں
برتحریر
اس نام کے ساتھ ایک ڈاؤن لوڈ جاری ہے
@@ -462,14 +461,14 @@
تقریبات
کانفرنسیں
تبصرے دکھائیں
- تبصرے دکھانا بند کرو
+ تبصرے دکھانا بند کریں
آٹوپلے
- تبصرے
کوئی تبصرہ نہیں
- تبصرے لوڈ نہیں ہوسکے
+ تبصرے لوڈ نہیں ہو سکے
بند کریں
پلے بیک دوبارہ شروع کریں
آخری پلے بیک پوزیشن بحال کریں
@@ -487,7 +486,7 @@
آلے میں کوئی جگہ نہیں بچی
پیشرفت ختم ہوگئی ، کیونکہ فائل کو حذف کردیا گیا تھا
رابطے کا وقت ختم
- کیا تمہیں یقین ہے؟
+ کیا آپ اپنی ڈاؤن لوڈ کی سرگزشت کو صاف کرنا چاہتے ہیں یا ڈاؤن لوڈ کی گئی تمام فائلوں کو حذف کرنا چاہتے ہیں؟
ڈاؤن لوڈ کی قطار کو محدود کریں
ایک ڈاؤن لوڈ ایک ہی وقت میں چلے گا
ڈاؤن لوڈ شروع کریں
@@ -502,6 +501,39 @@
پلے بیک پوزیشن حذف کریں
تمام پلے بیک پوزیشن حذف کریں
تمام پلے بیک پوزیشنوں کو حذف کریں ؟
- اثر لینے کے لئے ڈاؤن لوڈ فولڈرز کو تبدیل کریں
+ مؤثر بنانے کے لئے ڈاؤن لوڈ فولڈرز کو تبدیل کریں
ٹوگل خدمت ، حالیہ منتخب:
+ کوئی نہیں دیکھ رہا ہے
+
+ - % s دیکھ رہا
+ - %s دیکھ رہے
+
+ کوئی نہیں سن رہا ہے
+
+ - %s سننے والا
+ - %s سننے والے
+
+ جب ایپ دوبارہ شروع ہو گی تو زبان تبدیل ہو جائے گی۔
+ طے شدہ کیوسک
+ آگے بھگانے /- پیچھے کرنے کی مدت
+ پیر ٹیوب واقعات
+ اپنے پسندیدہ پیر ٹیوب کی مثالیں منتخب کریں
+ ایسی مثالوں کی تلاش کریں جو آپ کو ٪s پر موزوں بنائیں
+ مثال شامل کریں
+ مثال کا URL درج کریں
+ مثال کی توثیق نہیں کی جاسکی
+ صرف HTTPS URLs موافق ہیں
+ مثال پہلے سے موجود ہے
+ مقامی
+ حال ہی میں شامل
+ زیادہ پسندیدہ
+ خود سے بنا (کوئی اپ لوڈر نہیں ملا)
+ بازیافتی ہو رہی
+ یہ ڈاؤن لوڈ بازیافت نہیں ہو سکتا
+ ایک مثال منتخب کریں
+ لاک اسکرین ویڈیو تھمب نیل کو فعال کریں
+ بیک گراؤنڈ پلیئر استعمال کرتے وقت ایک ویڈیو تھمب نیل کو لاک اسکرین پر دکھایا جائے گا
+ ڈاؤن لوڈ کی سرگزشت صاف کریں
+ ڈاؤن لوڈ شدہ فائلیں حذف کریں
+ %1$s ڈاؤن لوڈز کو حذف کیا گیا
\ No newline at end of file
From 10d57afaac5d3867612ef66fcce9a23bbf696ce7 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Fri, 24 Jan 2020 02:29:21 +0100
Subject: [PATCH 0213/1194] Update extractor version
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index f54598964..28d7dacdd 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -62,7 +62,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:2ee558fb'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:ff61e284'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
From 2152375227c401b986438f545764327ae714584e Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Fri, 24 Jan 2020 02:30:08 +0100
Subject: [PATCH 0214/1194] Bump version to 0.18.2 [hotfix release]
---
app/build.gradle | 4 ++--
fastlane/metadata/android/en-US/changelogs/820.txt | 1 +
2 files changed, 3 insertions(+), 2 deletions(-)
create mode 100644 fastlane/metadata/android/en-US/changelogs/820.txt
diff --git a/app/build.gradle b/app/build.gradle
index 28d7dacdd..0ca03f158 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 19
targetSdkVersion 28
- versionCode 810
- versionName "0.18.1"
+ versionCode 820
+ versionName "0.18.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
diff --git a/fastlane/metadata/android/en-US/changelogs/820.txt b/fastlane/metadata/android/en-US/changelogs/820.txt
new file mode 100644
index 000000000..d56291711
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/820.txt
@@ -0,0 +1 @@
+Fixed decrypt function name regex making YouTube unusable.
From c21ccef7bc4b71636829110cb4d8548e8a007b14 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Wed, 22 Jan 2020 23:50:53 +0000
Subject: [PATCH 0215/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-eo/strings.xml | 30 +++++++++++++-------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index c6ce250e6..fe63caf1b 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -68,9 +68,9 @@
Reprovi
Premi serĉon por komenci
Neniu elsendlflua ludilo trovita (instalu VLC por ludi ĝin).
- Malfermi en ŝprucfenestron modon
+ Malfermi en ŝprucfenestran modon
Forigas aŭdon ĉe KELKAJ rezolucioj
- NewPipe ŝprucfenestron modon
+ NewPipe ŝprucfenestran modon
Aboni
Abonita
Kanalo malabonita
@@ -87,12 +87,12 @@
Aldonu al
Aŭtomata play
Ludas filmeton kiam NewPipe vokas el alia programo
- Defaŭlta rezolucio de la ŝprucfenestro
+ Defaŭlta rezolucio de la ŝprucfenestra ludilo
Montri pli altajn rezoluciojn
Nur kelkaj aparatoj subtenas ludi 2K / 4K filmetojn
Defaŭlta fomato de filmeto
Nigra
- Memoru ŝprucfenestron kaj pozicion
+ Memoru ŝprucfenestran grandecon kaj pozicion
Memoru lastan grandecon kaj pozicion de ŝprucfenestro
Uzu rapide, ne preciza serĉon
Ne preciza serĉo permesas al la ludanto serĉi poziciojn pli rapide kun malalta precizeco
@@ -120,9 +120,9 @@
Jes
Poste
- Tiu permeso estas necesa por
-\nmalfermi en ŝprucfenestro modo
- Ludanta en ŝprucfenestro modo
+ Tiu permeso estas necesa por
+\nmalfermi en ŝprucfenestra modo
+ Ludante en ŝprucfenestra modo
Malaktiva
Filtri
Aktualigi
@@ -145,7 +145,7 @@
Rigardu historion
Spuri la viditajn filmetojn
NewPipe Sciigo
- Sciigoj por NewPipe fono kaj ŝprucfenestroj ludiloj
+ Sciigoj por NewPipe fonaj kaj ŝprucfenestraj ludiloj
Ludilo
Konduto
Historio kaj kaŝmemoro
@@ -156,21 +156,21 @@
Supro 50
Nova & varma
Montri la indiko « Tenu por aldoni »
- Montri indikon kiam la fono aŭ ŝprucfenestro butono estas premita en la retpaĝo de dalatadoj de la filmeto
- Viciĝita en la ludilo en fono
- Viciĝita en ŝprucfenestro ludilo
+ Montri indikon kiam la fona aŭ ŝprucfenestra butono estas premita en la retpaĝo de dalatadoj de la filmeto
+ Viciĝita en la fona ludilo
+ Viciĝita en ŝprucfenestra ludilo
Ludi ĉiujn
Ne povis ludi tion torenton
Neatendebla eraro de ludilo okazis
Reakiri el eraro de la ludilo
Fona ludilo
- Ŝprucfenestro ludilo
+ Ŝprucfenestra ludilo
Retiri
Detalado
Sonaj parametroj
Teni por viciĝi
[Nekonata]
- Viciĝi en la fono
+ Viciĝi en la fona ludilo
Viciĝi en nova ŝprucfenestro
Komencu ludi en nova ŝprucfenestro
Defaŭlta enhava lando
@@ -184,7 +184,7 @@
Nevalida ligilo
Neniuj filmeta torentoj trovitaj
Neniuj sonaj torentoj trovis
- Ŝprucfenestro ludilo
+ Ŝprucfenestra ludilo
Importi la datumbazon
Eksporti la datumbazon
Anstataŭigas vian aktualan historion kaj abonojn
@@ -237,7 +237,7 @@
Ĉu vi volas forviŝi la totalon de la historio de serĉo \?
Historio de serĉo forviŝita.
Limigi rezolucio kiam uzanta moveblan datumon
- Minimumigi al ŝprucfenestro ludilo
+ Minimumigi al ŝprucfenestra ludilo
Kanaloj
Ludlistoj
Spuroj
From d3aadc71b182e432a65d34e2113bc933784d8f15 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 24 Jan 2020 00:21:51 +0000
Subject: [PATCH 0216/1194] Translated using Weblate (Urdu)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ur/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 8ddc28711..4c622a193 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -1,7 +1,7 @@
شروع کرنے کے لیے تلاش پر ٹیپ کریں
- s$1% ملاحظات
+ %1$s ملاحظات
%1$s کو شائع ہوا
انسٹال
منسوخ کریں
@@ -505,7 +505,7 @@
ٹوگل خدمت ، حالیہ منتخب:
کوئی نہیں دیکھ رہا ہے
- - % s دیکھ رہا
+ - %s دیکھ رہا
- %s دیکھ رہے
کوئی نہیں سن رہا ہے
@@ -518,7 +518,7 @@
آگے بھگانے /- پیچھے کرنے کی مدت
پیر ٹیوب واقعات
اپنے پسندیدہ پیر ٹیوب کی مثالیں منتخب کریں
- ایسی مثالوں کی تلاش کریں جو آپ کو ٪s پر موزوں بنائیں
+ ایسی مثالوں کی تلاش کریں جو آپ کو %s پر موزوں بنائیں
مثال شامل کریں
مثال کا URL درج کریں
مثال کی توثیق نہیں کی جاسکی
From 64b0ccd574c0a0b5968129891fcd39534f335a31 Mon Sep 17 00:00:00 2001
From: Abu Sarim Hindi
Date: Fri, 24 Jan 2020 00:50:40 +0000
Subject: [PATCH 0217/1194] Translated using Weblate (Urdu)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ur/strings.xml | 30 +++++++++++++-------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 4c622a193..68fb80c84 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -73,24 +73,24 @@
پلیر اشارہ کنٹرول
اشارے کی چمک اور آواذکو کنٹرول کرنے کے لئے اشاروں کا استعمال کریں
تلاش کے اشارے
- تلاش کرتے وقت تجاویز دکھائیں
- تاریخ تلاش کریں
+ تلاش کرتے وقت اشارے دکھائیں
+ سرگزشت تلاش کریں
تلاش کے استفسارات کو مقامی طور پر ذخیرہ کریں
- واچ ہسٹری
- دیکھے ہوئے ویڈیوز کا ریکارڈرکھیں
+ دیکھے جانے کی سرگزشت
+ دیکھی گئی ویڈیوز کی سرگزشت رکھیں
فوکس حاصل پر دوبارہ شروع کریں
- مداخلت کے بعد چلاناجاری رکھیں (جیسے فون کالز)
+ مداخلت کے بعد چلانا جاری رکھیں (جیسے فون کالز)
ڈاؤن لوڈ
اگلا
- \'اگلا\' اور \'ملتے جلتے\' ویڈیوز دکھائیں
- \"الحاق کرنے کے لئے منعقد\" ٹپ دکھائیں
+ \'اگلی\' اور \'ملتی جلتی\' ویڈیوز دکھائیں
+ \"شامل کرنے کے لئے پکڑیں\" ٹپ دکھائیں
ویڈیو تفصیلات کے صفحے پر جب بیک گراؤنڈ یا پاپ اپ بٹن دبائے جاتے ہیں تو ٹپ دکھائیں
غیر معاون URL
طے شدہ مواد والا ملک
خدمت
پلیئر
رویہ
- ویڈیو & آڈیو
+ ویڈیو اور آڈیو
تاریخ اور کیشے
پوپ اپ
ظہور
@@ -349,12 +349,12 @@
\n1. اس یو آر ایل پر جائیں: %1$s
\n2. جب پوچھا جائے تو لاگ ان کریں
\nA. ڈاؤن لوڈ شروع ہونا چاہئے (یہ برآمد فائل ہے)
- URL یا آپ کی ID ٹائپ کرکے ایک SoundCloud پروفائل درآمد کریں:
+ ۔URL یا آپ کی ID ٹائپ کرکے ایک SoundCloud پروفائل درآمد کریں:
\n
-\n1. ویب براؤزر میں \"ڈیسک ٹاپ موڈ\" کو فعال کریں (سائٹ موبائل آلات کے لئے دستیاب نہیں ہے)
-\n2. اس URL پر جائیں: s$1%
-\n3. پوچھا گیا میں لاگ ان کریں
-\n4. پروفائل یو آر ایل کاپی کریں جو آپ کو ہدایت کی گئی تھی.
+\n1. ویب براؤزر میں \"ڈیسک ٹاپ موڈ\" کو فعال کریں (یہ سائٹ موبائل آلات کے لئے دستیاب نہیں ہے)
+\n2. اس URL پر جائیں: %1$s
+\n3. جب پوچھا جائے تو لاگ ان کریں
+\n4. پروفائل یو آر ایل کاپی کریں جہاں تک آپ کی رہنمائی کی گئی تھی۔
yourID، soundcloud.com/yourid
یاد رکھیں کہ یہ آپریشن نیٹ ورک مہنگا ہوسکتا ہے۔
\n
@@ -472,8 +472,8 @@
بند کریں
پلے بیک دوبارہ شروع کریں
آخری پلے بیک پوزیشن بحال کریں
- فہرست میں پوزیشن
- فہرستوں میں پلے بیک پوزیشن کے اشارے دکھائیں
+ فہرست میں مقامات
+ فہرستوں میں پلے بیک مقامات کے اشارے دکھائیں
کوائف صاف کریں
دیکھنے کی تاریخ حذف ہوگئی۔
پلے بیک پوزیشنیں حذف ہوگئیں۔
From e9fda96aa1c42fd5244b7ebaae6f8a2904a9810a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Thu, 23 Jan 2020 05:51:46 +0000
Subject: [PATCH 0218/1194] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?=
=?UTF-8?q?gian=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 98.3% (518 of 527 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 28a11185d..61e4b4574 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -536,4 +536,5 @@
Autogenerert (fant ingen opplaster)
gjenoppretter
Kan ikke gjenopprette denne nedlastingen
+ Hurtigframoverspoling/-tilbakeblafringsvarighet
\ No newline at end of file
From b2d78786c23b35db6d7de828f9e9f800bdad816e Mon Sep 17 00:00:00 2001
From: Abu Sarim Hindi
Date: Fri, 24 Jan 2020 16:26:56 +0000
Subject: [PATCH 0219/1194] Translated using Weblate (Urdu)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ur/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 68fb80c84..cebcdc0ae 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -287,7 +287,7 @@
انتباہ: تمام فائلوں کو درآمد نہیں کیا جاسکا۔
یہ آپ کی موجودہ سیٹ اپ کو رد کر دے گا۔
کیوسک
- رجحان سازی
+ رجحان میں
Top 50
نیا اور تاذہ
پس منظر پلیئر
From e1145f16f2b49b07d6a74d3ebe1fe6e22095ec3b Mon Sep 17 00:00:00 2001
From: Harshal Lele
Date: Sat, 25 Jan 2020 22:30:49 +0530
Subject: [PATCH 0220/1194] ask for display over other apps permission in
settings
---
.../settings/VideoAudioSettingsFragment.java | 56 +++++++++++++++++++
app/src/main/res/values/strings.xml | 1 +
2 files changed, 57 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 9bbdd650d..64ff23140 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -1,12 +1,68 @@
package org.schabi.newpipe.settings;
+import android.content.SharedPreferences;
+import android.os.Build;
import android.os.Bundle;
+import android.provider.Settings;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+
+import com.google.android.material.snackbar.Snackbar;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.util.PermissionHelper;
public class VideoAudioSettingsFragment extends BasePreferenceFragment {
+
+ private SharedPreferences.OnSharedPreferenceChangeListener listener;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
+ if(s.equals(getString(R.string.minimize_on_exit_key))){
+ String newSetting = sharedPreferences.getString(s,null);
+ if(newSetting != null){
+ if(newSetting.equals(getString(R.string.minimize_on_exit_popup_key))){
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(getContext())){
+ Snackbar.make(getListView(),R.string.permission_display_over_apps,Snackbar.LENGTH_INDEFINITE)
+ .setAction(R.string.settings, new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ PermissionHelper.checkSystemAlertWindowPermission(getContext());
+ }
+ })
+ .show();
+
+ }
+ }
+ }
+ }
+ }
+ };
+ }
+
+
+
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.video_audio_settings);
}
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(listener);
+
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(listener);
+ }
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e1b2cc0a4..2d69ea402 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -227,6 +227,7 @@
Using default tabs, error while reading saved tabs
Restore defaults
Do you want to restore the defaults?
+ Give permission to display over other apps
Sorry, that should not have happened.
Guru Meditation.
From 7f7bf8474e0f8cdbc730cfaab80d3a0ffce4dfbe Mon Sep 17 00:00:00 2001
From: Tobias Groza
Date: Sat, 25 Jan 2020 21:35:07 +0100
Subject: [PATCH 0221/1194] Add link to FAQ in README
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index f78725338..987327ab8 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
Screenshots • Description • Features • Updates • Contribution • Donate • License
-Website • Blog • Press
+Website • Blog • FAQ • Press
WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY.
From 9c58a07a72b4b69d14d9b2c51762fd27aa92ea95 Mon Sep 17 00:00:00 2001
From: AioiLight
Date: Sat, 25 Jan 2020 17:06:03 +0000
Subject: [PATCH 0222/1194] Translated using Weblate (Japanese)
Currently translated at 99.8% (526 of 527 strings)
---
app/src/main/res/values-ja/strings.xml | 54 ++++++++++++++++++--------
1 file changed, 37 insertions(+), 17 deletions(-)
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 553a54f1e..fdab646b2 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -212,7 +212,7 @@
フィードページ
チャンネルページ
チャンネルを選択
- 購読しているチャンネルはありません
+ 登録しているチャンネルはありません
Kioskを選択
Kiosk
人気
@@ -232,8 +232,8 @@
一度だけ
データベースをインポート
データベースをエクスポート
- 既存の履歴と購読リストは上書きされます
- 履歴や購読リスト、プレイリストをエクスポートします
+ 既存の履歴と登録リストは上書きされます
+ 履歴や登録リスト、プレイリストをエクスポートします
再生エラーからの回復中
外部プレイヤーは、これらのタイプのリンクをサポートしていません
無効なURL
@@ -254,7 +254,7 @@
コンテンツを読み込んでいます
動画ファイルをダウンロード
情報を表示
- ブックマーク
+ プレイリスト
サムネイルを読み込む
画像キャッシュを消去しました
キャッシュを消去
@@ -301,8 +301,8 @@
エクスポートしています…
ファイルからインポート
前回のエクスポート先
- 購読リストがインポートできませんでした
- 購読リストがエクスポートできませんでした
+ 登録リストがインポートできませんでした
+ 登録リストがエクスポートできませんでした
速度
音程
デフォルト
@@ -330,7 +330,7 @@
すべての検索履歴を削除しますか?
このファイル/コンテンツはありません
- - 登録者数 %s 人
+ - %s を登録しています
視聴なし
@@ -339,7 +339,7 @@
1 つのアイテムが削除されました。
支援する
NewPipe プロジェクトはあなたのプライバシーを非常に大切にしています。あなたの同意がない限り、アプリはいかなるデータも収集しません。NewPipe のプライバシー・ポリシーでは、クラッシュリポート送信時にどのような種類のデータが送信・記録されるかを詳細に説明しています。
- NewPipe は著作権が自由のソフトウェアです。あなたは自由にそれを使用し、研究し、そして改善することができます。あなたは、GNU フリーソフトウェア財団が公開する GNU General Public ライセンス バージョン3以降の下に、自由に再配布・修正を行うことができます。
+ NewPipe はコピーレフトなソフトウェアです。あなたは自由にそれを使用し、研究し、そして改善することができます。あなたは、GNU フリーソフトウェア財団が公開する GNU General Public ライセンス バージョン3以降の下に、自由に再配布・修正を行うことができます。
最終再生日時
最も再生した動画
ズーム
@@ -360,10 +360,10 @@
自動生成
プレーヤーのキャプションテキストの縮尺と背景スタイルを変更します。有効にするには、アプリの再起動が必要です。
何もありません
- 保存したエクスポートファイルからYouTubeの購読をインポート:
-\n
-\n1. このURLを開きます: %1$s
-\n2. ログインしていなければログインします
+ 保存したエクスポートファイルからYouTubeの登録をインポート:
+\n
+\n1. このURLを開きます: %1$s
+\n2. ログインしていなければログインします
\n3. ダウンロードが始まります (これがエクスポートファイルです)
リセット
同意する
@@ -393,7 +393,7 @@
速度と音程を連動せずに変更 (歪むかもしれません)
無音の間に早送り
音程幅
- 購読解除
+ 登録解除
新しいタブ
タブを選択
アプリの更新
@@ -402,7 +402,7 @@
外部記憶装置は利用できません
既定値に戻す
既定の設定を復元しますか\?
- 登録者数は表示できません
+ 登録者数は利用できません
選択
会議
ヨーロッパの一般データ保護規制(GDPR)に準拠するために、NewPipeの個人情報保護方針にご注意ください。よく読んでください。
@@ -415,7 +415,7 @@
スイッチビュー
NewPipeのアップデートがあります!
タップでダウンロード
- 終了しました
+ 完了
保留中
一時停止
順番待ちに追加しました
@@ -480,7 +480,7 @@
ファイルの作業中に NewPipe が閉じられました
デバイスに空き容量がありません
ファイルが削除されたため、進行状況が失われました
- よろしいですか\?
+ ダウンロード履歴、またはダウンロードしたファイルを消去しますか\?
ダウンロード キューの制限
同時に1つのダウンロードが実行されます
ダウンロードの開始
@@ -503,11 +503,31 @@
デフォルトのキオスク
誰も見ていません
- - %s 見ています
+ - %s 視聴中
誰も聞いていません
- %s リスナー
アプリを再起動すると、言語が変更されます。
+ 高速早送り/巻き戻し時間
+ PeerTube インスタンス
+ PeerTube インスタンスを選択する
+ あなたに最適なインスタンスを探せます: %s
+ インスタンスを追加
+ インスタンスの URL を入力
+ インスタンスを検証することができませんでした
+ HTTPS な URL のみがサポートされています
+ インスタンスはすでに存在しています
+ ローカル
+ 最近追加された
+ 高評価
+ 修復中
+ ダウンロードが修復できません
+ インスタンスを選択
+ ロック画面の動画サムネイルを有効にする
+ バックグラウンドプレイヤーを使用中、ロック画面に動画のサムネイルが表示されるようになります
+ ダウンロード履歴を消去
+ ダウンロードしたファイルを消去
+ %1$s 個削除しました
\ No newline at end of file
From 14b3cf7ccd9491719d20f63cce2fbf7a56890b19 Mon Sep 17 00:00:00 2001
From: "Ian Emmanuel M. Enanoria"
Date: Sat, 25 Jan 2020 04:50:59 +0000
Subject: [PATCH 0223/1194] Translated using Weblate (Filipino)
Currently translated at 12.7% (67 of 527 strings)
---
app/src/main/res/values-fil/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml
index 40412ac11..9813b6922 100644
--- a/app/src/main/res/values-fil/strings.xml
+++ b/app/src/main/res/values-fil/strings.xml
@@ -39,4 +39,7 @@
Popup
Idagdag sa
Folder ng pag-download ng video
+ Pumili ng folder kung saan ido-download ang mga bidyo
+ Nakaimbak sa folder na ito ang mga nai-download na mga audio files
+ Pumili ng folder kung saan ido-download ang mga audio files
\ No newline at end of file
From 94403a9c3c137d3911fa205f8d039527f64d8f12 Mon Sep 17 00:00:00 2001
From: Christophe
Date: Thu, 25 Apr 2019 20:47:39 +0200
Subject: [PATCH 0224/1194] Add send to Kodi button to player next to share
button
---
.../fragments/detail/VideoDetailFragment.java | 13 ++---------
.../newpipe/player/MainVideoPlayer.java | 21 +++++++++++++++++
.../org/schabi/newpipe/util/KoreUtil.java | 23 +++++++++++++++++++
.../activity_main_player.xml | 21 ++++++++++++++++-
.../main/res/layout/activity_main_player.xml | 21 ++++++++++++++++-
5 files changed, 86 insertions(+), 13 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/util/KoreUtil.java
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index 14e989625..f59cfaef0 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -79,6 +79,7 @@ import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.ExtractorHelper;
import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.InfoCache;
+import org.schabi.newpipe.util.KoreUtil;
import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.NavigationHelper;
@@ -624,7 +625,7 @@ public class VideoDetailFragment
url.replace("https", "http")));
} catch (Exception e) {
if (DEBUG) Log.i(TAG, "Failed to start kore", e);
- showInstallKoreDialog(activity);
+ KoreUtil.showInstallKoreDialog(activity);
}
return true;
default:
@@ -632,16 +633,6 @@ public class VideoDetailFragment
}
}
- private static void showInstallKoreDialog(final Context context) {
- final AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setMessage(R.string.kore_not_found)
- .setPositiveButton(R.string.install, (DialogInterface dialog, int which) ->
- NavigationHelper.installKore(context))
- .setNegativeButton(R.string.cancel, (DialogInterface dialog, int which) -> {
- });
- builder.create().show();
- }
-
private void setupActionBarOnError(final String url) {
if (DEBUG) Log.d(TAG, "setupActionBarHandlerOnError() called with: url = [" + url + "]");
Log.e("-----", "missing code");
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 9ccf5b9d3..1153c41fd 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -28,6 +28,7 @@ import android.database.ContentObserver;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.media.AudioManager;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
@@ -75,6 +76,7 @@ import org.schabi.newpipe.player.playqueue.PlayQueueItemTouchCallback;
import org.schabi.newpipe.player.resolver.MediaSourceTag;
import org.schabi.newpipe.player.resolver.VideoPlaybackResolver;
import org.schabi.newpipe.util.AnimationUtils;
+import org.schabi.newpipe.util.KoreUtil;
import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper;
@@ -435,6 +437,7 @@ public final class MainVideoPlayer extends AppCompatActivity
private boolean queueVisible;
private ImageButton moreOptionsButton;
+ private ImageButton kodiButton;
private ImageButton shareButton;
private ImageButton toggleOrientationButton;
private ImageButton switchPopupButton;
@@ -471,6 +474,7 @@ public final class MainVideoPlayer extends AppCompatActivity
this.moreOptionsButton = rootView.findViewById(R.id.moreOptionsButton);
this.secondaryControls = rootView.findViewById(R.id.secondaryControls);
+ this.kodiButton = rootView.findViewById(R.id.kodi);
this.shareButton = rootView.findViewById(R.id.share);
this.toggleOrientationButton = rootView.findViewById(R.id.toggleOrientation);
this.switchBackgroundButton = rootView.findViewById(R.id.switchBackground);
@@ -482,6 +486,9 @@ public final class MainVideoPlayer extends AppCompatActivity
titleTextView.setSelected(true);
channelTextView.setSelected(true);
+ boolean showKodiButton = PreferenceManager.getDefaultSharedPreferences(this.context).getBoolean(
+ this.context.getString(R.string.show_play_with_kodi_key), false);
+ kodiButton.setVisibility(showKodiButton ? View.VISIBLE : View.GONE);
getRootView().setKeepScreenOn(true);
}
@@ -518,6 +525,7 @@ public final class MainVideoPlayer extends AppCompatActivity
closeButton.setOnClickListener(this);
moreOptionsButton.setOnClickListener(this);
+ kodiButton.setOnClickListener(this);
shareButton.setOnClickListener(this);
toggleOrientationButton.setOnClickListener(this);
switchBackgroundButton.setOnClickListener(this);
@@ -588,6 +596,17 @@ public final class MainVideoPlayer extends AppCompatActivity
finish();
}
+ public void onKodiShare() {
+ onPause();
+ try {
+ NavigationHelper.playWithKore(this.context, Uri.parse(
+ playerImpl.getVideoUrl().replace("https", "http")));
+ } catch (Exception e) {
+ if (DEBUG) Log.i(TAG, "Failed to start kore", e);
+ KoreUtil.showInstallKoreDialog(this.context);
+ }
+ }
+
/*//////////////////////////////////////////////////////////////////////////
// Player Overrides
//////////////////////////////////////////////////////////////////////////*/
@@ -688,6 +707,8 @@ public final class MainVideoPlayer extends AppCompatActivity
} else if (v.getId() == closeButton.getId()) {
onPlaybackShutdown();
return;
+ } else if (v.getId() == kodiButton.getId()) {
+ onKodiShare();
}
if (getCurrentState() != STATE_COMPLETED) {
diff --git a/app/src/main/java/org/schabi/newpipe/util/KoreUtil.java b/app/src/main/java/org/schabi/newpipe/util/KoreUtil.java
new file mode 100644
index 000000000..2ed3c698d
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/util/KoreUtil.java
@@ -0,0 +1,23 @@
+package org.schabi.newpipe.util;
+
+
+import android.content.Context;
+import android.content.DialogInterface;
+import androidx.appcompat.app.AlertDialog;
+
+import org.schabi.newpipe.R;
+
+
+public class KoreUtil {
+ private KoreUtil() { }
+
+ public static void showInstallKoreDialog(final Context context) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ builder.setMessage(R.string.kore_not_found)
+ .setPositiveButton(R.string.install,
+ (DialogInterface dialog, int which) -> NavigationHelper.installKore(context))
+ .setNegativeButton(R.string.cancel, (DialogInterface dialog, int which) -> {
+ });
+ builder.create().show();
+ }
+}
diff --git a/app/src/main/res/layout-large-land/activity_main_player.xml b/app/src/main/res/layout-large-land/activity_main_player.xml
index b535db2b8..98017b132 100644
--- a/app/src/main/res/layout-large-land/activity_main_player.xml
+++ b/app/src/main/res/layout-large-land/activity_main_player.xml
@@ -305,7 +305,7 @@
tools:text="English" />
+
+
+
+
Date: Mon, 27 Jan 2020 19:32:40 +0100
Subject: [PATCH 0225/1194] update prettytime dependency
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
see https://github.com/TeamNewPipe/NewPipe/pull/2921#issuecomment-572601812
It will add Esperanto, add bengali, update vietnamese
pretty time is the library used in the home page: … days ago
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 0ca03f158..f8fc1565f 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -94,7 +94,7 @@ dependencies {
implementation 'io.reactivex.rxjava2:rxjava:2.2.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
- implementation 'org.ocpsoft.prettytime:prettytime:4.0.1.Final'
+ implementation 'org.ocpsoft.prettytime:prettytime:4.0.3.Final'
implementation "androidx.room:room-runtime:${roomDbLibVersion}"
implementation "androidx.room:room-rxjava2:${roomDbLibVersion}"
From e0829769141cb959b9d5a6d78e7e694af618e274 Mon Sep 17 00:00:00 2001
From: Sithananthan
Date: Mon, 27 Jan 2020 08:59:46 +0000
Subject: [PATCH 0226/1194] Translated using Weblate (Tamil)
Currently translated at 43.3% (228 of 527 strings)
---
app/src/main/res/values-ta/strings.xml | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml
index 0dee99ad0..41e683545 100644
--- a/app/src/main/res/values-ta/strings.xml
+++ b/app/src/main/res/values-ta/strings.xml
@@ -36,10 +36,10 @@
சேர்
காணிலி தரவிறக்கப் பாதை
தரவிறக்கப்பட்ட காணொலிகளின் சேமிப்புப் பாதை
- காணொலியின் தரவிறக்கப் பாதையை உள்ளிடு
+ காணொலியின் தரவிறக்கப் பாதையை தேர்வு செய்க
ஒலி பதிவிறக்க அடைவு
தரவிறக்கப்பட்ட ஒலி இங்கே சேமிக்கப்பட்டுள்ளது
- ஒலி கோப்புகளுக்கான தரவிறக்கப் பாதையை உள்ளிடு
+ ஒலி கோப்புகளுக்கான தரவிறக்கப் பாதையை தேர்வு செய்க
தானே இயக்கு
NewPipe மற்றொரு செயலியில் இருந்து அழைக்கப்படும் போது காணொலியை இயக்கும்
முதல் பிரிதிறன்
@@ -180,7 +180,7 @@
- காணொளிகள்
-
+
முதற்பக்கத்துக்கு மாற்று
சரியில்லாத URL
@@ -208,7 +208,7 @@
தானாக ஓட்டு
- கருத்துக்கள்
-
+
திரையிடலை தொடங்கு
பட்டியலில் இடங்கள்
@@ -220,4 +220,7 @@
- %s பார்க்கிறார்
- %s பார்க்கிறார்கள்
+ வேகமாக முன்னோக்கி / திரும்பத் தேடும் காலம்
+ பூட்டு திரை வீடியோ சிறுபடத்தை இயக்கவும்
+ பின்னணி பிளேயரைப் பயன்படுத்தும் போது பூட்டுத் திரையில் வீடியோ சிறுபடம் காண்பிக்கப்படும்
\ No newline at end of file
From 42bb96af23a3550285b432c46b46d3563d08454b Mon Sep 17 00:00:00 2001
From: Laura Arjona Reina
Date: Mon, 27 Jan 2020 14:37:13 +0000
Subject: [PATCH 0227/1194] Translated using Weblate (Spanish)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-es/strings.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 9f25208bb..5b3265cd7 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -425,7 +425,7 @@
Mostrar como grilla
Mostrar como lista
Limpiar descargas finalizadas
- ¿Lo confirma\?
+ ¿Quiere limpiar su historial de descargas o eliminar todos los ficheros descargados\?
Detener
Intentos máximos
Cantidad máxima de intentos antes de cancelar la descarga
@@ -534,4 +534,7 @@
Elige una instancia
Habilitar miniatura de video de la pantalla de bloqueo
Al usar el reproductor de fondo, se mostrará una miniatura de video en la pantalla de bloqueo
+ Limpiar historial de descargas
+ Eliminar archivos descargados
+ Eliminadas %1$s descargas
\ No newline at end of file
From c486368b9b8caaf6955b8656f4ce9b4ae2df7f8d Mon Sep 17 00:00:00 2001
From: Ryan
Date: Mon, 27 Jan 2020 01:23:37 +0000
Subject: [PATCH 0228/1194] Translated using Weblate (Korean)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ko/strings.xml | 34 ++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index e8a2a9c51..e2010c50f 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -482,7 +482,7 @@
남은 저장공간이 없습니다
파일이 삭제되어 진행이 중지되었습니다
연결시간 초과
- 확실합니까\?
+ 모든 다운로드 기록과 파일을 삭제합니다.확실합니까\?
다운로드 대기 제한
다운로드 시작
다운로드 일시정지
@@ -497,10 +497,40 @@
매 다운로드 마다 저장경로를 묻습니다.
\n외장 SD카드에 다운로드 하고자 한다면 SAF를 선택하십시오
- - %s개의 동영상
+ - 동영상
하나의 다운로드가 동시에 진행됩니다
적용하려면 다운로드 폴더를 변경하세요
서비스 토글, 현재 선택된 서비스:
기본 키오스크
+ 시청자가 없습니다.
+
+ - %s 시청
+
+ 듣고 있는 사람이 없습니다.
+
+ - %s 듣는사람
+
+ 앱을 재시작하면 언어가 변경됩니다.
+ 빠른-감기/되감기 찾는 시간
+ 피어튜브 인스턴스
+ 당신이 선호하는 피어튜브 인스턴스를 선택하세요.
+ %s에서 당신에게 가장 잘 어울리는 인스턴스를 찾으세요.
+ 인스턴스 추가하기
+ 인스턴스 URL을 입력하세요.
+ 인스턴스를 검증할 수 없습니다.
+ 오직 HTTPS URL들만 지원합니다.
+ 인스턴스가 이미 존재합니다.
+ 로컬
+ 최근에 추가됨.
+ 가장 선호하는
+ 자동생성된(업로더를 찾지못함)
+ 복구하기
+ 이 다운로드를 복구할 수 없습니다
+ 인스턴스를 선택하세요
+ 비디어 썸네일 화면 고정을 가능하게 한다
+ 백그라운드 플레이어를 사용하는 경우 비디오 썸네일은 고정된 스크린 위에 표시됩니다.
+ 다운로드 기록 삭제
+ 다운로드된 파일 삭제
+ %1$s 다운로드 삭제
\ No newline at end of file
From c17d80948cdeadfacf476f5c9361d83d15a142df Mon Sep 17 00:00:00 2001
From: Abu Sarim Hindi
Date: Sun, 26 Jan 2020 22:29:45 +0000
Subject: [PATCH 0229/1194] Translated using Weblate (Urdu)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ur/strings.xml | 56 +++++++++++++-------------
1 file changed, 28 insertions(+), 28 deletions(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index cebcdc0ae..375c0d6fd 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -79,55 +79,55 @@
دیکھے جانے کی سرگزشت
دیکھی گئی ویڈیوز کی سرگزشت رکھیں
فوکس حاصل پر دوبارہ شروع کریں
- مداخلت کے بعد چلانا جاری رکھیں (جیسے فون کالز)
+ مداخلت کے بعد چلانا جاری رکھیں (مثلاً فون کالز)
ڈاؤن لوڈ
- اگلا
+ اگلی
\'اگلی\' اور \'ملتی جلتی\' ویڈیوز دکھائیں
- \"شامل کرنے کے لئے پکڑیں\" ٹپ دکھائیں
- ویڈیو تفصیلات کے صفحے پر جب بیک گراؤنڈ یا پاپ اپ بٹن دبائے جاتے ہیں تو ٹپ دکھائیں
- غیر معاون URL
- طے شدہ مواد والا ملک
+ ’’شامل کرنے کے لئے پکڑیں‘‘ اشارہ دکھائیں
+ ویڈیو تفصیلات کے صفحے پر جب پس منظر یا پاپ اپ بٹن دبائے جانے پر ٹپ دکھائیں
+ غیر موافق URL
+ مشمولات کا طے شدہ ملک
خدمت
پلیئر
رویہ
ویڈیو اور آڈیو
- تاریخ اور کیشے
+ سرگزشت اور کیشے
پوپ اپ
- ظہور
+ ظاہر
دیگر
- ڈیبگ
+ ڈِیبَگ
پس منظر میں چلائیں
- پوپ اپ موڈ میں چلائیں
- بیک گراؤنڈ پلیئر پر قطار ہے
- پاپ اپ پلیئر پر قطارہے
+ پوپ اپ اسلوب میں چلائیں
+ پس منظر پلیئر میں شامل ہوئی
+ پاپ اپ پلیئر میں شامل ہوئی
چلائیں
- مواد
- عمر محدود مواد
- عمر پر پابندی والا ویڈیو دکھائیں۔ ترتیبات سے اس طرح کے مواد کی اجازت ممکن ہے۔
+ مشمول
+ نازیبا مشمولات
+ نازیبا ویڈیو دکھائی دے گی۔ ترتیبات سے اس طرح کے مشمولات کی اجازت ممکن ہے۔
براہ راست
ڈاؤن لوڈ
ڈاؤن لوڈ
- غلطی کی اطلاع
+ خرابی کی اطلاع
تمام
- چینل(ذریعہ)
+ چینل
پلے لسٹ
ہاں
بعد میں
غیر فعال
فلٹر
- تازہ
+ ازسرنو
صاف
- سائز تبدیل کریں
+ جسامت بدلیں
بہترین ریزولوشن
کالعدم کریں
تمام چلائیں
ہمیشہ
صرف ایک بار
فائل
- نیو پائپ نوٹیفیکیشن
+ نیو پائپ اطلاعات
نیو پائپ کے پس منظر اور پاپ اپ پلیئرز کیلئے اطلاعات
[نامعلوم]
- ترتیب وضع کریں
+ سمت بندی بدلیں
پس منظر پر جائیں
پاپ اپ پر جائیں
مین پر سوئچ کریں
@@ -396,7 +396,7 @@
ری سیٹ کریں
چینلز
پلے لسٹس
- ویڈیو ذ
+ ویڈیوز
صارفین
رکنیت چھوڑیں
نیا ٹیب
@@ -405,11 +405,11 @@
پلیئر کی آواز کنٹرول کرنے کے لیے اشاروں کا استعمال کریں
چمک کا متحرک کنٹرول
پلیئرکی چمک کو کنٹرول کرنے کیلئے اشاروں کا استعمال کریں
- ڈیفالٹ مواد کی زبان
+ مشمولات کی طےشدہ زبان
تازہ کاریاں
فائل حذف ہوگئی
- ایپ اپ ڈیٹ نوٹیفکیشن
- نئے نیو پائپ ورژن کیلئے نوٹیفیکیشن
+ ایپ کی تازہ کاری کی اطلاع
+ جدید نیو پائپ ورژن کیلئے اطلاعات
بیرونی اسٹوریج دستیاب نہیں
بیرونی ایسڈی کارڈ پر ڈاؤن لوڈ ممکن نہیں۔ ڈاؤن لوڈ فولڈر کے مقام کو دوبارہ ترتیب دیں؟
پہلے سے طے شدہ ٹیبز کا استعمال ، محفوظ ٹیبز کو پڑھنے کے دوران خرابی
@@ -464,8 +464,8 @@
تبصرے دکھانا بند کریں
آٹوپلے
- - تبصرے
-
+ - تبصرہ
+ - تبصرے
کوئی تبصرہ نہیں
تبصرے لوڈ نہیں ہو سکے
@@ -521,7 +521,7 @@
ایسی مثالوں کی تلاش کریں جو آپ کو %s پر موزوں بنائیں
مثال شامل کریں
مثال کا URL درج کریں
- مثال کی توثیق نہیں کی جاسکی
+ مثال کی توثیق نہیں کی جا سکی
صرف HTTPS URLs موافق ہیں
مثال پہلے سے موجود ہے
مقامی
From 153790d80a506d748269b979f34919e937df989f Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Tue, 28 Jan 2020 11:44:29 +0000
Subject: [PATCH 0230/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ru/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 975a9479b..63d0e7699 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -313,7 +313,7 @@
Текущие данные будут заменены
Скоро здесь кое-что появится ;D
Всегда спрашивать
- Создать плейлист
+ Новый плейлист
Удалить
Переименовать
Имя
@@ -534,7 +534,7 @@
Локальное
Новое
Популярное
- Создан автоматически (автор не найден)
+ Создано автоматически (автор не найден)
восстановление
Не удалось восстановить загрузку
Выберите сервер
From 1f24c186146c17f6fe5e140539cc7e56b2266062 Mon Sep 17 00:00:00 2001
From: Harshal Lele
Date: Tue, 28 Jan 2020 20:14:35 +0530
Subject: [PATCH 0231/1194] reformatted and commented code
---
.../newpipe/settings/VideoAudioSettingsFragment.java | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 64ff23140..86b04c4a7 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -24,11 +24,18 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
+
+ //on M and above, if user chooses to minimise to popup player on exit and the app doesn't have
+ //display over other apps permission, show a snackbar to let the user give permission
if(s.equals(getString(R.string.minimize_on_exit_key))){
+
String newSetting = sharedPreferences.getString(s,null);
if(newSetting != null){
+
if(newSetting.equals(getString(R.string.minimize_on_exit_popup_key))){
+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(getContext())){
+
Snackbar.make(getListView(),R.string.permission_display_over_apps,Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.settings, new View.OnClickListener() {
@Override
From a78762756a68b8db5fd711f461e53b8aed0a3c48 Mon Sep 17 00:00:00 2001
From: Harshal Lele
Date: Tue, 28 Jan 2020 20:54:24 +0530
Subject: [PATCH 0232/1194] reformatted code
---
.../settings/VideoAudioSettingsFragment.java | 30 +++++++++----------
1 file changed, 14 insertions(+), 16 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 86b04c4a7..6d32fb39f 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -27,29 +27,27 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
//on M and above, if user chooses to minimise to popup player on exit and the app doesn't have
//display over other apps permission, show a snackbar to let the user give permission
- if(s.equals(getString(R.string.minimize_on_exit_key))){
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
+ s.equals(getString(R.string.minimize_on_exit_key))){
String newSetting = sharedPreferences.getString(s,null);
- if(newSetting != null){
+ if(newSetting != null
+ && newSetting.equals(getString(R.string.minimize_on_exit_popup_key))
+ && !Settings.canDrawOverlays(getContext())){
- if(newSetting.equals(getString(R.string.minimize_on_exit_popup_key))){
+ Snackbar.make(getListView(),R.string.permission_display_over_apps,Snackbar.LENGTH_INDEFINITE)
+ .setAction(R.string.settings, new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ PermissionHelper.checkSystemAlertWindowPermission(getContext());
+ }
+ })
+ .show();
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(getContext())){
-
- Snackbar.make(getListView(),R.string.permission_display_over_apps,Snackbar.LENGTH_INDEFINITE)
- .setAction(R.string.settings, new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- PermissionHelper.checkSystemAlertWindowPermission(getContext());
- }
- })
- .show();
-
- }
- }
}
}
}
+
};
}
From caa1de8aff77b92255d68113ade22afe7d17e8ed Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Wed, 29 Jan 2020 03:15:50 +0659
Subject: [PATCH 0233/1194] Rename FireTvUtils to AndroidTvUtils and isFireTv()
to isTV()
Because those methods are no longer exclusive to Amazon devices
---
app/src/main/java/org/schabi/newpipe/MainActivity.java | 6 +++---
.../main/java/org/schabi/newpipe/RouterActivity.java | 4 ++--
.../org/schabi/newpipe/download/DownloadActivity.java | 5 ++---
.../newpipe/fragments/list/search/SearchFragment.java | 4 ++--
.../org/schabi/newpipe/player/MainVideoPlayer.java | 10 +++++-----
.../org/schabi/newpipe/settings/SettingsActivity.java | 4 ++--
.../util/{FireTvUtils.java => AndroidTvUtils.java} | 4 ++--
.../org/schabi/newpipe/views/FocusAwareSeekBar.java | 4 ++--
8 files changed, 20 insertions(+), 21 deletions(-)
rename app/src/main/java/org/schabi/newpipe/util/{FireTvUtils.java => AndroidTvUtils.java} (92%)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index a2f161847..d2cbb49e0 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -69,7 +69,7 @@ import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
import org.schabi.newpipe.fragments.list.search.SearchFragment;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.util.Constants;
-import org.schabi.newpipe.util.FireTvUtils;
+import org.schabi.newpipe.util.AndroidTvUtils;
import org.schabi.newpipe.util.KioskTranslator;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PeertubeHelper;
@@ -140,7 +140,7 @@ public class MainActivity extends AppCompatActivity {
ErrorActivity.reportUiError(this, e);
}
- if (FireTvUtils.isFireTv()) {
+ if (AndroidTvUtils.isTv()) {
FocusOverlayView.setupFocusObserver(this);
}
}
@@ -489,7 +489,7 @@ public class MainActivity extends AppCompatActivity {
public void onBackPressed() {
if (DEBUG) Log.d(TAG, "onBackPressed() called");
- if (FireTvUtils.isFireTv()) {
+ if (AndroidTvUtils.isTv()) {
View drawerPanel = findViewById(R.id.navigation_layout);
if (drawer.isDrawerOpen(drawerPanel)) {
drawer.closeDrawers();
diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
index c5b97f86f..412bea0e1 100644
--- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
@@ -45,7 +45,7 @@ import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.ExtractorHelper;
-import org.schabi.newpipe.util.FireTvUtils;
+import org.schabi.newpipe.util.AndroidTvUtils;
import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper;
@@ -319,7 +319,7 @@ public class RouterActivity extends AppCompatActivity {
alertDialog.show();
- if (FireTvUtils.isFireTv()) {
+ if (AndroidTvUtils.isTv()) {
FocusOverlayView.setupFocusObserver(alertDialog);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index 6ceacbb05..514c3dd37 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -12,8 +12,7 @@ import android.view.MenuItem;
import android.view.ViewTreeObserver;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.settings.SettingsActivity;
-import org.schabi.newpipe.util.FireTvUtils;
+import org.schabi.newpipe.util.AndroidTvUtils;
import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.FocusOverlayView;
@@ -53,7 +52,7 @@ public class DownloadActivity extends AppCompatActivity {
}
});
- if (FireTvUtils.isFireTv()) {
+ if (AndroidTvUtils.isTv()) {
FocusOverlayView.setupFocusObserver(this);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
index f2e8aa244..9e4fd467c 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
@@ -40,7 +40,7 @@ import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.search.SearchExtractor;
import org.schabi.newpipe.extractor.search.SearchInfo;
-import org.schabi.newpipe.util.FireTvUtils;
+import org.schabi.newpipe.util.AndroidTvUtils;
import org.schabi.newpipe.fragments.BackPressable;
import org.schabi.newpipe.fragments.list.BaseListFragment;
import org.schabi.newpipe.local.history.HistoryRecordManager;
@@ -471,7 +471,7 @@ public class SearchFragment
if (isSuggestionsEnabled && errorPanelRoot.getVisibility() != View.VISIBLE) {
showSuggestionsPanel();
}
- if(FireTvUtils.isFireTv()){
+ if(AndroidTvUtils.isTv()){
showKeyboardSearch();
}
});
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index fa742f771..470e1c963 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -78,7 +78,7 @@ import org.schabi.newpipe.player.playqueue.PlayQueueItemTouchCallback;
import org.schabi.newpipe.player.resolver.MediaSourceTag;
import org.schabi.newpipe.player.resolver.VideoPlaybackResolver;
import org.schabi.newpipe.util.AnimationUtils;
-import org.schabi.newpipe.util.FireTvUtils;
+import org.schabi.newpipe.util.AndroidTvUtils;
import org.schabi.newpipe.util.KoreUtil;
import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.NavigationHelper;
@@ -166,7 +166,7 @@ public final class MainVideoPlayer extends AppCompatActivity
super.onChange(selfChange);
if (globalScreenOrientationLocked()) {
final boolean lastOrientationWasLandscape = defaultPreferences.getBoolean(
- getString(R.string.last_orientation_landscape_key), FireTvUtils.isFireTv());
+ getString(R.string.last_orientation_landscape_key), AndroidTvUtils.isTv());
setLandscape(lastOrientationWasLandscape);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
@@ -178,7 +178,7 @@ public final class MainVideoPlayer extends AppCompatActivity
Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION),
false, rotationObserver);
- if (FireTvUtils.isFireTv()) {
+ if (AndroidTvUtils.isTv()) {
FocusOverlayView.setupFocusObserver(this);
}
}
@@ -206,7 +206,7 @@ public final class MainVideoPlayer extends AppCompatActivity
default:
break;
case KeyEvent.KEYCODE_BACK:
- if (FireTvUtils.isFireTv() && playerImpl.isControlsVisible()) {
+ if (AndroidTvUtils.isTv() && playerImpl.isControlsVisible()) {
playerImpl.hideControls(0, 0);
hideSystemUi();
return true;
@@ -241,7 +241,7 @@ public final class MainVideoPlayer extends AppCompatActivity
if (globalScreenOrientationLocked()) {
boolean lastOrientationWasLandscape = defaultPreferences.getBoolean(
- getString(R.string.last_orientation_landscape_key), FireTvUtils.isFireTv());
+ getString(R.string.last_orientation_landscape_key), AndroidTvUtils.isTv());
setLandscape(lastOrientationWasLandscape);
}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
index e53b7ba07..49d6d49fe 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
@@ -12,7 +12,7 @@ import android.view.Menu;
import android.view.MenuItem;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.util.FireTvUtils;
+import org.schabi.newpipe.util.AndroidTvUtils;
import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.FocusOverlayView;
@@ -59,7 +59,7 @@ public class SettingsActivity extends AppCompatActivity implements BasePreferenc
.commit();
}
- if (FireTvUtils.isFireTv()) {
+ if (AndroidTvUtils.isTv()) {
FocusOverlayView.setupFocusObserver(this);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java b/app/src/main/java/org/schabi/newpipe/util/AndroidTvUtils.java
similarity index 92%
rename from app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java
rename to app/src/main/java/org/schabi/newpipe/util/AndroidTvUtils.java
index 2c5090381..203501a51 100644
--- a/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java
+++ b/app/src/main/java/org/schabi/newpipe/util/AndroidTvUtils.java
@@ -6,9 +6,9 @@ import android.content.pm.PackageManager;
import android.view.KeyEvent;
import org.schabi.newpipe.App;
-public class FireTvUtils {
+public class AndroidTvUtils {
@SuppressLint("InlinedApi")
- public static boolean isFireTv(){
+ public static boolean isTv(){
final String AMAZON_FEATURE_FIRE_TV = "amazon.hardware.fire_tv";
PackageManager pm = App.getApp().getPackageManager();
diff --git a/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java b/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java
index dafd5ae6f..8ccff85d5 100644
--- a/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java
+++ b/app/src/main/java/org/schabi/newpipe/views/FocusAwareSeekBar.java
@@ -25,7 +25,7 @@ import android.view.ViewTreeObserver;
import android.widget.SeekBar;
import androidx.appcompat.widget.AppCompatSeekBar;
-import org.schabi.newpipe.util.FireTvUtils;
+import org.schabi.newpipe.util.AndroidTvUtils;
/**
* SeekBar, adapted for directional navigation. It emulates touch-related callbacks
@@ -58,7 +58,7 @@ public final class FocusAwareSeekBar extends AppCompatSeekBar {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (!isInTouchMode() && FireTvUtils.isConfirmKey(keyCode)) {
+ if (!isInTouchMode() && AndroidTvUtils.isConfirmKey(keyCode)) {
releaseTrack();
}
From fbf6351b993638040ac1df767ce63cf8b6c67a18 Mon Sep 17 00:00:00 2001
From: Abu Sarim Hindi
Date: Tue, 28 Jan 2020 19:36:53 +0000
Subject: [PATCH 0234/1194] Translated using Weblate (Urdu)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ur/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 375c0d6fd..fe3108a5d 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -248,7 +248,7 @@
کے بارے میں
معاونین
لائسنس
- لِبرے کی اینڈروئیڈ پر کم وزنی اسٹریمنگ
+ لِبرے کی اینڈروئیڈ پر کم وزنی اسٹریمنگ۔
تعاون کریں
چاہے آپ کے خیالات ہوں؛ ترجمہ ، ڈیزائن میں تبدیلیاں ، کوڈ صاف کرنا ، یا حقیقی ہیوی کوڈ میں تبدیلی — مدد کا ہمیشہ خیرمقدم کیا جاتا ہے۔ جتنا زیادہ ہوتا ہے اتنا ہی بہتر ہوتا ہے!
گٹ ہب پر دیکھیں
From fd3d61c6a0ecdec689c450aefeb1470c8e27fa58 Mon Sep 17 00:00:00 2001
From: Markus Richter <8398165+mqus@users.noreply.github.com>
Date: Wed, 29 Jan 2020 13:48:02 +0100
Subject: [PATCH 0235/1194] fixes #3021, see also
https://github.com/TeamNewPipe/NewPipe-legacy/pull/21
---
app/src/main/java/us/shandian/giga/get/DownloadMission.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/java/us/shandian/giga/get/DownloadMission.java b/app/src/main/java/us/shandian/giga/get/DownloadMission.java
index c0f85b321..9ad73050b 100644
--- a/app/src/main/java/us/shandian/giga/get/DownloadMission.java
+++ b/app/src/main/java/us/shandian/giga/get/DownloadMission.java
@@ -223,6 +223,7 @@ public class DownloadMission extends Mission {
conn.setInstanceFollowRedirects(true);
conn.setRequestProperty("User-Agent", DownloaderImpl.USER_AGENT);
conn.setRequestProperty("Accept", "*/*");
+ conn.setRequestProperty("Accept-Encoding", "*");
if (headRequest) conn.setRequestMethod("HEAD");
From 342377e69ae3157c0b11a03d32721b80844a0b7b Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Wed, 29 Jan 2020 16:04:24 -0300
Subject: [PATCH 0236/1194] restore offset after writting lastest CTTS entries
---
.../org/schabi/newpipe/streams/Mp4FromDashWriter.java | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
index 963d84b40..3dfba8b2d 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
@@ -262,13 +262,6 @@ public class Mp4FromDashWriter {
final int ftyp_size = make_ftyp();
- // reserve moov space in the output stream
- /*if (outStream.canSetLength()) {
- long length = writeOffset + auxSize;
- // warning: setLength() does not fill the unused space with zeros
- outStream.setLength(length);
- outSeek(length);
- } else {*/
if (auxSize > 0) {
int length = auxSize;
byte[] buffer = new byte[64 * 1024];// 64 KiB
@@ -335,6 +328,7 @@ public class Mp4FromDashWriter {
if (sample == null) {
if (tablesInfo[i].ctts > 0 && sampleExtra[i] >= 0) {
writeEntryArray(tablesInfo[i].ctts, 1, sampleCount[i], sampleExtra[i]);// flush last entries
+ outRestore();
}
sampleIndex[i] = -1;
break;
From 0c5608506e9a2887b86cf6907e3c593efb442308 Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Wed, 29 Jan 2020 16:06:40 -0300
Subject: [PATCH 0237/1194] typo fixup
---
.../java/org/schabi/newpipe/streams/Mp4FromDashWriter.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
index 3dfba8b2d..57a7aaa9c 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
@@ -250,7 +250,7 @@ public class Mp4FromDashWriter {
boolean is64 = read > THRESHOLD_FOR_CO64;
- // calculate the moov size;
+ // calculate the moov size
int auxSize = make_moov(defaultMediaTime, tablesInfo, is64);
if (auxSize < THRESHOLD_MOOV_LENGTH) {
@@ -262,6 +262,7 @@ public class Mp4FromDashWriter {
final int ftyp_size = make_ftyp();
+ // reserve moov space in the output stream
if (auxSize > 0) {
int length = auxSize;
byte[] buffer = new byte[64 * 1024];// 64 KiB
@@ -328,7 +329,7 @@ public class Mp4FromDashWriter {
if (sample == null) {
if (tablesInfo[i].ctts > 0 && sampleExtra[i] >= 0) {
writeEntryArray(tablesInfo[i].ctts, 1, sampleCount[i], sampleExtra[i]);// flush last entries
- outRestore();
+ outRestore();
}
sampleIndex[i] = -1;
break;
From edc9d47da795efbc1606efae50788bdc81f4468b Mon Sep 17 00:00:00 2001
From: bopol
Date: Tue, 28 Jan 2020 20:48:42 +0100
Subject: [PATCH 0238/1194] app language: refactoring
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
renamed NewPipe's language into App language, and same for all the
concerning thing (keys, comments…)
we now call assureCorrectAppLanguage(CONTEXT) in activities needing it
instead of changeAppLanguage(getAppLocale(CONTEXT), RESOURCES)
changeAppLanguage becomes private.
---
app/src/main/java/org/schabi/newpipe/MainActivity.java | 8 +++-----
.../java/org/schabi/newpipe/about/AboutActivity.java | 6 ++----
.../org/schabi/newpipe/download/DownloadActivity.java | 6 ++----
.../org/schabi/newpipe/player/BackgroundPlayer.java | 6 ++----
.../org/schabi/newpipe/player/MainVideoPlayer.java | 9 ++++-----
.../org/schabi/newpipe/player/PopupVideoPlayer.java | 7 +++----
.../schabi/newpipe/player/ServicePlayerActivity.java | 5 ++---
.../newpipe/player/helper/PlaybackParameterDialog.java | 7 +++----
.../java/org/schabi/newpipe/report/ErrorActivity.java | 5 ++---
.../org/schabi/newpipe/settings/SettingsActivity.java | 6 ++----
.../java/org/schabi/newpipe/util/Localization.java | 10 ++++++++--
app/src/main/res/values/settings_keys.xml | 8 ++++----
app/src/main/res/values/strings.xml | 4 ++--
app/src/main/res/xml/content_settings.xml | 8 ++++----
14 files changed, 43 insertions(+), 52 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 63bc8df15..7cd620faa 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -31,7 +31,6 @@ import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
-import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
@@ -78,8 +77,7 @@ import org.schabi.newpipe.util.ThemeHelper;
import java.util.ArrayList;
import java.util.List;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@@ -118,7 +116,7 @@ public class MainActivity extends AppCompatActivity {
}
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@@ -422,7 +420,7 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onResume() {
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
Localization.init(getApplicationContext()); //change the date format to match the selected language on resume
super.onResume();
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index 4d9cfc7e1..9e23d9d3d 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -22,11 +22,9 @@ import android.widget.TextView;
import org.schabi.newpipe.BuildConfig;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
public class AboutActivity extends AppCompatActivity {
@@ -65,7 +63,7 @@ public class AboutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
this.setTitle(getString(R.string.title_activity_about));
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index 7aaaeeb17..00dd45ac9 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -12,14 +12,12 @@ import android.view.MenuItem;
import android.view.ViewTreeObserver;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.settings.SettingsActivity;
import org.schabi.newpipe.util.ThemeHelper;
import us.shandian.giga.service.DownloadManagerService;
import us.shandian.giga.ui.fragment.MissionsFragment;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
public class DownloadActivity extends AppCompatActivity {
@@ -32,7 +30,7 @@ public class DownloadActivity extends AppCompatActivity {
i.setClass(this, DownloadManagerService.class);
startService(i);
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
ThemeHelper.setTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_downloader);
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index c74882161..9e23d9145 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -58,9 +58,7 @@ import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.player.helper.PlayerHelper.getTimeString;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
-
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
/**
* Base players joining the common properties
@@ -117,7 +115,7 @@ public final class BackgroundPlayer extends Service {
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
lockManager = new LockManager(this);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
ThemeHelper.setTheme(this);
basePlayerImpl = new BasePlayerImpl(this);
basePlayerImpl.setup();
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 487629c12..31f7dd74a 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -95,8 +95,7 @@ import static org.schabi.newpipe.util.AnimationUtils.Type.SCALE_AND_ALPHA;
import static org.schabi.newpipe.util.AnimationUtils.Type.SLIDE_AND_ALPHA;
import static org.schabi.newpipe.util.AnimationUtils.animateRotation;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
import static org.schabi.newpipe.util.StateSaver.KEY_SAVED_STATE;
/**
@@ -127,7 +126,7 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
defaultPreferences = PreferenceManager.getDefaultSharedPreferences(this);
@@ -195,7 +194,7 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
protected void onResume() {
if (DEBUG) Log.d(TAG, "onResume() called");
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
super.onResume();
if (globalScreenOrientationLocked()) {
@@ -226,7 +225,7 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
if (playerImpl.isSomePopupMenuVisible()) {
playerImpl.getQualityPopupMenu().dismiss();
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
index 96bc606cc..fc14e8d51 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
@@ -80,8 +80,7 @@ import static org.schabi.newpipe.player.BasePlayer.STATE_PLAYING;
import static org.schabi.newpipe.player.VideoPlayer.DEFAULT_CONTROLS_DURATION;
import static org.schabi.newpipe.player.VideoPlayer.DEFAULT_CONTROLS_HIDE_TIME;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
/**
* Service Popup Player implementing VideoPlayer
@@ -144,7 +143,7 @@ public final class PopupVideoPlayer extends Service {
@Override
public void onCreate() {
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
@@ -172,7 +171,7 @@ public final class PopupVideoPlayer extends Service {
@Override
public void onConfigurationChanged(Configuration newConfig) {
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
if (DEBUG) Log.d(TAG, "onConfigurationChanged() called with: newConfig = [" + newConfig + "]");
updateScreenSize();
updatePopupSize(popupLayoutParams.width, -1);
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 1c6d786cd..669d1c16c 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -46,8 +46,7 @@ import java.util.List;
import static org.schabi.newpipe.player.helper.PlayerHelper.formatPitch;
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
public abstract class ServicePlayerActivity extends AppCompatActivity
implements PlayerEventListener, SeekBar.OnSeekBarChangeListener,
@@ -118,7 +117,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
setContentView(R.layout.activity_player_queue_control);
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java
index 2aefa675e..3ada3a6be 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java
@@ -17,8 +17,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.util.SliderStrategy;
import static org.schabi.newpipe.player.BasePlayer.DEBUG;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
public class PlaybackParameterDialog extends DialogFragment {
@NonNull private static final String TAG = "PlaybackParameterDialog";
@@ -110,7 +109,7 @@ public class PlaybackParameterDialog extends DialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
- changeAppLanguage(getAppLocale(getContext()), getResources());
+ assureCorrectAppLanguage(getContext());
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
initialTempo = savedInstanceState.getDouble(INITIAL_TEMPO_KEY, DEFAULT_TEMPO);
@@ -140,7 +139,7 @@ public class PlaybackParameterDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
- changeAppLanguage(getAppLocale(getContext()), getResources());
+ assureCorrectAppLanguage(getContext());
final View view = View.inflate(getContext(), R.layout.dialog_playback_parameter, null);
setupControlViews(view);
diff --git a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
index 05dfe33ca..4512ab3a6 100644
--- a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
@@ -46,8 +46,7 @@ import java.util.List;
import java.util.TimeZone;
import java.util.Vector;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
/*
* Created by Christian Schabesberger on 24.10.15.
@@ -174,7 +173,7 @@ public class ErrorActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
setContentView(R.layout.activity_error);
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
index 6804f9831..53d60f86c 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
@@ -14,9 +14,7 @@ import android.view.MenuItem;
import org.schabi.newpipe.R;
import org.schabi.newpipe.util.ThemeHelper;
-import static org.schabi.newpipe.util.Localization.changeAppLanguage;
-import static org.schabi.newpipe.util.Localization.getAppLocale;
-
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
/*
* Created by Christian Schabesberger on 31.08.15.
@@ -47,7 +45,7 @@ public class SettingsActivity extends AppCompatActivity implements BasePreferenc
@Override
protected void onCreate(Bundle savedInstanceBundle) {
setTheme(ThemeHelper.getSettingsThemeStyle(this));
- changeAppLanguage(getAppLocale(getApplicationContext()), getResources());
+ assureCorrectAppLanguage(this);
super.onCreate(savedInstanceBundle);
setContentView(R.layout.settings_layout);
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index d2fbd3a65..6149118cc 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -218,7 +218,7 @@ public class Localization {
return getPrettyTime().formatUnrounded(calendarTime);
}
- public static void changeAppLanguage(Locale loc, Resources res) {
+ private static void changeAppLanguage(Locale loc, Resources res) {
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.setLocale(loc);
@@ -227,11 +227,13 @@ public class Localization {
public static Locale getAppLocale(Context context) {
SharedPreferences prefs = androidx.preference.PreferenceManager.getDefaultSharedPreferences(context);
- String lang = prefs.getString("newpipes_language_key", "en");
+ String lang = prefs.getString("app_language_key", "en");
Locale loc;
if (lang.equals("system")) {
loc = Locale.getDefault();
} else if (lang.matches(".*-.*")) {
+ //to differentiate different versions of the language
+ //for example, pt (portuguese in Portugal) and pt-br (portuguese in Brazil)
String[] localisation = lang.split("-");
lang = localisation[0];
String country = localisation[1];
@@ -241,4 +243,8 @@ public class Localization {
}
return loc;
}
+
+ public static void assureCorrectAppLanguage(Context c) {
+ changeAppLanguage(getAppLocale(c), c.getResources());
+ }
}
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index ed3c454b8..1a7d61dae 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -176,7 +176,7 @@
enable_playback_resume
enable_playback_state_lists
- newpipes_language_key
+ app_language_key
enable_lock_screen_video_thumbnail
import_data
@@ -926,8 +926,8 @@
- ZW
-
-
+
+
- system
- ar
- az
@@ -992,7 +992,7 @@
- zh-hans
- zh-tw
-
+
- @string/systems_language
- العربية
- Azərbaycan dili
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c5a59abe7..29864963f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -589,6 +589,6 @@
Use SAF
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
- NewPipe\'s language
- System\'s language
+ App language
+ System default
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index ab9896cde..197c14487 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -7,11 +7,11 @@
+ android:title="@string/app_language_title"/>
Date: Tue, 28 Jan 2020 21:11:12 +0000
Subject: [PATCH 0239/1194] Translated using Weblate (Hungarian)
Currently translated at 67.4% (355 of 527 strings)
---
app/src/main/res/values-hu/strings.xml | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 4d7ff986e..3587ad136 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -14,9 +14,9 @@
Megosztás ezzel
Válasszon böngészőt
forgatás
- Videófájlok letöltési helye
- Útvonal a letöltött videók tárolásához
- Adja meg a videófájlok letöltési helyét
+ Videók letöltési helye
+ Ide kerülnek a letöltött videók
+ Válassza ki a videófájlok letöltési helyét
Alapértelmezett felbontás
Lejátszás Kodi-val
A Kore alkalmazás nem található. Telepíted a Kore lejátszót?
@@ -29,7 +29,7 @@
Nem támogatott webcím
Külső videólejátszó használata
Külső hanglejátszó használata
- Add meg a hangfájlok letöltési helyét
+ Válaszd ki a hangfájlok letöltési helyét
Tor használata
(Kísérleti) Adatforgalom Tor-on keresztüli kényszerítése a biztonság fokozása érdekében (a videó stream-elés még nem támogatott).
Lejátszás
@@ -44,7 +44,7 @@
Világos
Téma
Hangfájlok letöltési helye
- Letöltött hangfájlok itt találhatók
+ A letöltött hangfájlok itt találhatóak
Tetszik
Nem tetszik
Előnézeti kép
@@ -123,8 +123,7 @@
Mutassa a magasabb felbontásokat
Csak néhány eszköz támogatja a 2K/4K videók lejátszását
Alapértelmezett videó formátum
- Fekete
-\n
+ Fekete
Jegyezze meg a felugró ablak helyét és méretét
Jegyezze meg a felugró ablak előző helyét és méretét
Keresési javaslatok
@@ -382,4 +381,8 @@
Figyelmen kívül hagy
Lejátszási lista könyvjelzők közé
Hasonló videó beadása az utolsó videó után egy nem ismétlődő sorban
+ Sor
+ a fájl nem írható felül
+ Az előre- és visszatekerés időtartama
+ Videó előnézet megjelenítése a lezárási képernyőn
\ No newline at end of file
From d686a2c9dc8555c917739ada61ccd4a9f99773ee Mon Sep 17 00:00:00 2001
From: Abu Sarim Hindi
Date: Wed, 29 Jan 2020 18:12:14 +0000
Subject: [PATCH 0240/1194] Translated using Weblate (Urdu)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ur/strings.xml | 52 +++++++++++++-------------
1 file changed, 26 insertions(+), 26 deletions(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index fe3108a5d..55a0963d2 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -89,24 +89,24 @@
مشمولات کا طے شدہ ملک
خدمت
پلیئر
- رویہ
+ برتاؤ
ویڈیو اور آڈیو
سرگزشت اور کیشے
پوپ اپ
- ظاہر
+ اظہار
دیگر
ڈِیبَگ
پس منظر میں چلائیں
- پوپ اپ اسلوب میں چلائیں
+ پوپ اپ اسلوب میں جاری
پس منظر پلیئر میں شامل ہوئی
پاپ اپ پلیئر میں شامل ہوئی
چلائیں
مشمول
نازیبا مشمولات
- نازیبا ویڈیو دکھائی دے گی۔ ترتیبات سے اس طرح کے مشمولات کی اجازت ممکن ہے۔
+ نازیبا ویڈیو دکھائی دے گی۔ ترتیبات سے اس طرح کی مشمولات کی اجازت ممکن ہے۔
براہ راست
- ڈاؤن لوڈ
- ڈاؤن لوڈ
+ ڈاؤن لوڈز
+ ڈاؤن لوڈز
خرابی کی اطلاع
تمام
چینل
@@ -130,11 +130,11 @@
سمت بندی بدلیں
پس منظر پر جائیں
پاپ اپ پر جائیں
- مین پر سوئچ کریں
- کوائفیہ درآمد کریں
- کوائفیہ برآمد کریں
- اپنی موجودہ تاریخ اور رکنیت ضد
- تاریخ ، خریداری اور پلے لسٹ برآمد کریں
+ مرکزی صفحہ پر جائیں
+ ڈیٹا بیس درآمد کریں
+ ڈیٹا بیس برآمد کریں
+ اپنی موجودہ سرگزشت اور رکنیت باطل کریں
+ سرگزشت، رکنیتیں اور پلے لسٹ برآمد کریں
خرابی
نیٹ ورک کی خرابی
تمام نظرِ انگشتی لوڈ نہیں کر سکے
@@ -143,10 +143,10 @@
ویب سائٹ کو مکمل طور پر تجزیہ نہیں کرسکے
مواد دستیاب نہیں ہے
ڈاؤن لوڈ مینو ترتیب نہیں دے سکتے
- براہ راست سلسلے ابھی تک تعاون یافتہ نہیں ہیں
- کوئی اسٹریم نہیں مل سکی
+ براہ راست سلسلے ابھی تک معاون نہیں ہیں
+ کوئی سلسلہ حاصل نہیں کر سکے
تصویر کو لوڈ نہیں کر سکتا
- ایپ/UI کریش
+ ایپ/UI تباہ
یہ اسٹریم نہیں چل سکا
انریکوورابلی پلیئر نقص واقع ہوا
پلیر نقص سے بازیافت کر رہا ہے
@@ -366,13 +366,13 @@
کیپشن
پلیئر کیپشن ٹیکسٹ اسکیل اور بیک گراونڈ اسٹائل میں ترمیم کریں۔ اثر لینے کیلئے ایپ کو دوبارہ شروع کرنا ضروری ہے۔
اس فائل کو چلانے کے لئے کوئی ایپ انسٹال نہیں ہے
- دیکھنے کی تاریخ صاف کریں
- ادا شدہ اسٹریمز اور پلے بیک پوزیشنوں کی تاریخ کو خارج کریں
- دیکھنے کی پوری تاریخ کو حذف کریں؟
- تلاش کی ہسٹری کو مٹا دیں
- تلاش کے مطلوبہ الفاظ کی تاریخ کو حذف کریں
- پوری تلاش کی تاریخ کو حذف کریں؟
- تلاش کی تاریخ حذف ہوگئی۔
+ دیکھنے کی سرگزشت صاف کریں
+ چلائے گئے سلسلوں اور پلے بیک پوزیشنز کی سرگزشت کو حذف کیا گیا
+ دیکھے جانے کی تمام سرگزشت حذف کریں؟
+ تلاش کی سرگزشت مٹائیں
+ تلاش کے الفاظ کی سرگزشت حذف کی گئیں
+ تلاش کی مکمل سرگزشت حذف کریں؟
+ تلاش کی سرگزشت حذف ہوئی۔
1 شے حذف کر دی گئی ۔
نیو پائپ کاپلیفٹ فری سافٹ ویئر ہے: آپ استعمال کرسکتے ہیں ، مطالعہ شیئر کرسکتے ہیں اور اپنی مرضی سے اسے بہتر کرسکتے ہیں۔ خاص طور پر آپ اسے مفت سافٹ ویئر فاؤنڈیشن کے ذریعہ شائع کردہ GNU جنرل پبلک لائسنس کی شرائط کے تحت دوبارہ تقسیم اور / یا ترمیم کرسکتے ہیں ، جو لائسنس کا ورژن 3 ، یا (آپ کے اختیار پر) کسی بھی بعد کا ورژن ہے۔
کیا آپ ترتیبات بھی درآمد کرنا چاہتے ہیں؟
@@ -410,7 +410,7 @@
فائل حذف ہوگئی
ایپ کی تازہ کاری کی اطلاع
جدید نیو پائپ ورژن کیلئے اطلاعات
- بیرونی اسٹوریج دستیاب نہیں
+ بیرونی ذخیرہ دستیاب نہیں
بیرونی ایسڈی کارڈ پر ڈاؤن لوڈ ممکن نہیں۔ ڈاؤن لوڈ فولڈر کے مقام کو دوبارہ ترتیب دیں؟
پہلے سے طے شدہ ٹیبز کا استعمال ، محفوظ ٹیبز کو پڑھنے کے دوران خرابی
ڈیفالٹس بحال کریں
@@ -475,8 +475,8 @@
فہرست میں مقامات
فہرستوں میں پلے بیک مقامات کے اشارے دکھائیں
کوائف صاف کریں
- دیکھنے کی تاریخ حذف ہوگئی۔
- پلے بیک پوزیشنیں حذف ہوگئیں۔
+ دیکھے جانے کی سرگزشت حذف ہوگئی۔
+ پلے بیک پوزیشنس حذف ہوئیں۔
فائل منتقل یا حذف ہوگئی
اس نام والی فائل پہلے سے موجود ہے
اس نام والی ڈاؤن لوڈ کی فائل پہلے سے موجود ہے
@@ -499,8 +499,8 @@
اسٹوریج ایکسیس فریم ورک ایک بیرونی SD کارڈ میں ڈاؤن لوڈ کی اجازت دیتا ہے۔
\nنوٹ: کچھ آلات مطابقت نہیں رکھتے ہیں
پلے بیک پوزیشن حذف کریں
- تمام پلے بیک پوزیشن حذف کریں
- تمام پلے بیک پوزیشنوں کو حذف کریں ؟
+ تمام پلے بیک پوزیشن حذف کی گئی
+ تمام پلے بیک پوزیشنس حذف کریں؟
مؤثر بنانے کے لئے ڈاؤن لوڈ فولڈرز کو تبدیل کریں
ٹوگل خدمت ، حالیہ منتخب:
کوئی نہیں دیکھ رہا ہے
From 2977de1df22b879e1e455a0002ed01ca7ea29042 Mon Sep 17 00:00:00 2001
From: Abu Sarim Hindi
Date: Wed, 29 Jan 2020 21:50:19 +0000
Subject: [PATCH 0241/1194] Translated using Weblate (Urdu)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-ur/strings.xml | 249 +++++++++++++------------
1 file changed, 125 insertions(+), 124 deletions(-)
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 55a0963d2..e0149f2d8 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -147,39 +147,39 @@
کوئی سلسلہ حاصل نہیں کر سکے
تصویر کو لوڈ نہیں کر سکتا
ایپ/UI تباہ
- یہ اسٹریم نہیں چل سکا
- انریکوورابلی پلیئر نقص واقع ہوا
- پلیر نقص سے بازیافت کر رہا ہے
- بیرونی پلیراس قسم کے لنکس کی حمایت نہیں کرتے
+ یہ سلسلہ نہیں چل سکا
+ پلیئر میں نا قابلِ تلافی نقص واقع ہوئی
+ پلیر نقص سے بازیافت کیا جارہا ہے
+ بیرونی پلیئر اس قسم کے روابط کی حمایت نہیں کرتے
غلط URL
- کوئی ویڈیو اسٹریمز نہیں ملے
- کوئی آڈیو اسٹریمز نہیں ملے
+ کوئی ویڈیو سلسلے نہیں ملے
+ کوئی آڈیو سلسلے نہیں ملے
ایسا کوئی فولڈر نہیں
- ایسی کوئی فائل / مواد کا ذریعہ نہیں
- فائل موجود نہیں ہے اور نہ ہی اسے پڑھنے یا لکھنے کی اجازت ہے
+ ایسی کوئی فائل/مواد کا ذریعہ نہیں
+ فائل موجود نہیں ہے یا اسے پڑھنے یا لکھنے کی اجازت کا فقدان ہے
فائل کا نام ضروری ہے
- ایک خامی پیش آگئی: s$1%
- کوئی اسٹریمز ڈاؤن لوڈ کرنے کے لئے دستیاب نہیں
- معذرت ، ایسا نہیں ہونا چاہئے تھا۔
+ ایک خامی پیش آگئی: %1$s
+ کوئی سلسلسہ ڈاؤن لوڈ کرنے کے لئے دستیاب نہیں
+ معذرت، ایسا نہیں ہونا چاہئے تھا۔
ای میل کے ذریعے غلطی کی اطلاع دیں
- معذرت ، کچھ خرابی آگئی
+ معذرت، کچھ خرابی آگئی۔
رپورٹ کریں
معلومات:
- کوئی مسئلہ ہے
- What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:
+ کیا ہوا:
+ کیا ہوا:\\nدرخواست:\\nمواد کی زبان:\\nخدمات:\\nGMT وقت:\\nپیکیج:\\nورژن:\\nاو ایس ورژن:
آپ کا تبصرہ (انگریزی میں):
تفصیلات:
- ویڈیو پیش نظارہ تھمب نیل
- وڈیو کادورانیہ:
- اپ لوڈر کا اوتار تھمب نیل
- پسند
- ناپسند
+ ویڈیو پیش منظر انگشتی
+ ویڈیو چلائیں، دورانیہ:
+ اپ لوڈر کا اوتار نظرِ انگشتی
+ پسندیدگی
+ ناپسندیدگی
Tor کا استعمال
- (تجرباتی) بڑھتی ہوئی رازداری کے لئے ٹور کے ذریعہ ٹریفک کو ڈاؤن لوڈ کرنے پر مجبور کریں (ویڈیوز کو ابھی تک سپورٹ نہیں کیا گیا ہے)۔
+ (تجرباتی) بڑھتی ہوئی رازداری کے لئے ٹور کے ذریعہ ٹریفک کو ڈاؤن لوڈ کرنے پر مجبور کریں (سلسلے کی ویڈیوز ابھی تک غیر موافق ہے)۔
غلطی کی اطلاع دیں
صارف رپورٹ
- کوئی نتیجہ نہیں
- یہاں کچھ نہیں مگر اداسی کے
+ کوئی نتائج نہیں
+ یہاں کچھ نہیں سوائے میرے
دوبارہ ترتیب دینے کیلئے کھینچں
ڈاؤن لوڈ ڈائریکٹری \'s$1%\' تشکیل نہیں دے سکتے
ڈاؤن لوڈ ڈائریکٹری \'s$1%\' بن گئی
@@ -188,7 +188,7 @@
دوبارہ کوشش کریں
ذخیرہ رسائی اجازت مسترد
ہزار
- ایم
+ دہ لاکھ
ارب
کوئی صارفین نہیں
@@ -215,7 +215,7 @@
تشخیص کریں
برخاست کریں
نام تبدیل کریں
- نیا حدف
+ نیا مشن
ٹھيک ہے
فائل کا نام
موضوعات
@@ -226,52 +226,52 @@
نیو پائپ ڈاؤن لوڈ ہو رہا ہے
تفصیلات کے لیے ٹیپ کریں
براۓ مہربانی انتظار کريں…
- کلپ بورڈ میں کاپی کریں
+ کلپ بورڈ میں نقل ہوا
براہ کرم بعد میں ترتیبات میں ڈاؤن لوڈ فولڈر کی وضاحت رکھیں
- پوپ اپ موڈ میں کھولنے کیلئے اس اجازت کی ضرورت ہے
+ پوپ اپ موڈ میں کھولنے کیلئے/nاس اجازت کی ضرورت ہے
reCAPTCHA
reCAPTCHA چیلنج
reCAPTCHA چیلینج کی درخواست کی گئی
ڈاؤن لوڈ
- فائل ناموں میں حروف کی اجازت ہے
- ناجائز کریکٹر اس قدر کے ساتھ تبدیل کیےگئے ہیں
+ فائل کے ناموں میں ان حروف کی اجازت ہے
+ ناجائز کریکٹر اس قدر کے ساتھ تبدیل کیےگئے
متبادل کریکٹر
- خطوط اور ہندسے
- سب سے خاص کردار
+ حروف اور ہندسے
+ اہم مخصوص حروف
نیو پائپ کے بارے میں
ترتیبات
کے بارے میں
- تیسری پارٹی کے لائسنس
+ تیسری پارٹی کی لائسنس
© %1$s بذریعہ %2$s %3$s کے تحت
لائسنس لوڈ نہیں کر سکا
ویب سائٹ کھولیں
کے بارے میں
معاونین
لائسنس
- لِبرے کی اینڈروئیڈ پر کم وزنی اسٹریمنگ۔
+ اینڈروئیڈ پر لِبرے کی ہلکی اسٹریمنگ۔
تعاون کریں
- چاہے آپ کے خیالات ہوں؛ ترجمہ ، ڈیزائن میں تبدیلیاں ، کوڈ صاف کرنا ، یا حقیقی ہیوی کوڈ میں تبدیلی — مدد کا ہمیشہ خیرمقدم کیا جاتا ہے۔ جتنا زیادہ ہوتا ہے اتنا ہی بہتر ہوتا ہے!
+ جو بھی آپ کے خیالات ہوں؛ ترجمہ، ڈیزائن میں تبدیلیاں، کوڈ کی درستی، یا حقیقتاً کوڈ میں بڑی تبدیلی—مدد کا ہمیشہ خیرمقدم ہے۔ جتنا زیادہ ہوگا اتنی ہی بہتری ہو گی!
گٹ ہب پر دیکھیں
عطیہ
- نیا پائپ رضاکاروں کے ذریعہ تیار کیا گیا ہے جو آپ کو بہترین تجربہ فراہم کرنے میں وقت گزارتے ہیں۔ ایک کپ کافی سے لطف اندوز ہوتے ہوئے ڈویلپرز کو نیو پائپ کو اور بہتر بنانے میں مدد دینے کے لئے واپس دیں۔
- واپس دو
+ نیو پائپ رضاکاروں کے ذریعہ تیار کیا گیا ہے جو آپ کو بہترین تجربہ فراہم کرنے میں وقت صرف کرتے ہیں۔ ایک کپ کافی سے لطف اندوز ہوتے ہوئے ڈویلپرز کو نیو پائپ کو اور بہتر بنانے میں مدد دینے کے لئے بہتر بدلہ دیں۔
+ بدلہ دیں
ویب سائٹ
مزید معلومات اور خبروں کے لئے نیو پائپ ویب سائٹ ملاحظہ کریں۔
نیو پائپ کا لائسنس
لائسنس پڑھیں
- تاریخ
+ سرگزشت
تلاش کیا گیا
- دیکھاھوا
- تاریخ آف کردی گئی ہے
- تاریخ
- تاریخ خالی ہے
- تاریخ صاف ہوگئی
+ دیکھا ہوا
+ سرگزشت بند کر دی گئی
+ سرگزشت
+ سرگزشت خالی ہے
+ سرگزشت مٹائی گئی
آئٹم حذف ہوگیا
- کیا آپ اس آئٹم کو تلاش کی تاریخ سے حذف کرنا چاہتے ہیں؟
- کیا آپ اس آئٹم کو دیکھنے کی تاریخ سے حذف کرنا چاہتے ہیں؟
- کیا آپ واقعی تاریخ سے سبھی اشیاء کو حذف کرنا چاہتے ہیں؟
- آخری پلے کیا گیا
- سب سے زیادہ دیکھاگیا
+ کیا آپ اس آئٹم کو تلاش کی سرگزشت سے حذف کرنا چاہتے ہیں؟
+ کیا آپ اس آئٹم کو دیکھے جانے کی سرگزشت سے حذف کرنا چاہتے ہیں؟
+ کیا آپ واقعی سرگزشت سے سبھی اشیاء کو حذف کرنا چاہتے ہیں؟
+ آخری چلائی گئی
+ سب سے زیادہ چلائی گئی
مرکزی صفحہ کا مواد
خالی صفحہ
رجحان صفحہ
@@ -285,11 +285,11 @@
درآمدشدہ
درست زپ فائل نہیں ہے
انتباہ: تمام فائلوں کو درآمد نہیں کیا جاسکا۔
- یہ آپ کی موجودہ سیٹ اپ کو رد کر دے گا۔
+ یہ آپ کی موجودہ سیٹ اپ کو باطل کر دے گا۔
کیوسک
رجحان میں
- Top 50
- نیا اور تاذہ
+ اوّل 50
+ نیا اور تازہ
پس منظر پلیئر
پوپ اپ پلیئر
ہٹائیں
@@ -298,12 +298,12 @@
انقطار کو پکڑو
پس منظر میں قطار
ایک نئی پوپ اپ میں انقطار
- یہاں سےچلاناشروع کریں
- پس منظر میں چلاناشروع کریں
- نئے پاپ اپ میں چلاناشروع کریں
+ یہاں چلانا شروع کریں
+ پس منظر میں چلانا شروع کریں
+ نئے پاپ اپ میں چلانا شروع کریں
دراز کھولیں
دراز بند کریں
- یہاں جلد ہی کچھ نظر آئے گا D D
+ یہاں جلد ہی کچھ نظر آئے گا ;D
پسندیدہ \'کھلی\' کارروائی
مواد کھولنے پر طے شدہ کارروائی — %s
ویڈیو پلیئر
@@ -317,53 +317,55 @@
نام تبدیل کریں
نام
پلے لسٹ میں شامل
- پلے لسٹ تھمب نیل کے بطور سیٹ کریں
- پلے لسٹ کو بُک مارک کریں
- بُک مارک کو حدف کریں
- اس پلے لسٹ کو حذف کریں؟
+ بطور پلے لسٹ انگشتی طے کریں
+ پلے لسٹ کو نشان زد کریں
+ نشان زد حدف کریں
+ کیا یہ پلے لسٹ حذف کریں؟
پلے لسٹ بنائی گئی
فہرست میں شامل کر دیا
- پلے لسٹ تھمب نیل تبدیل کر دیا گیا۔
- پلے لسٹ کو حذف نہیں کیا جاسکا۔
- کوئی کیپشن نہیں
+ پلے لسٹ انگشتی تبدیل ہوا۔
+ پلے لسٹ حذف نہیں کیا جاسکا۔
+ کوئی عنوانات نہیں
فٹ
بھریں
زوم
خود بخود تیار
- لیک کینری کو قابل بنائیں
- میموری لیک ہونے کی نگرانی ہیپ ڈمپنگ کے وقت ایپ کو غیرذمہ دار بننے کا باعث بن سکتی ہے
- زندگی سے دور کی غلطیوں کی اطلاع دیں
- ضائع ہونے کے بعد ٹکڑے یا سرگرمی زندگی سے دور کے ناقابل تسخیر Rx مستثنیات کی اطلاع دہندگی
- درآمد برآمد
- درآمد
+ لیک کیناری کو فعال کریں
+ میموری لیک ہونے کی مانیٹرنگ، ہیپ ڈمپنگ کے وقت ایپ کو غیرذمہ دار بننے کا باعث بن سکتی ہے
+ گردشِ حیات سے دوری کی غلطیوں کی اطلاع دیں
+ فریگمنٹ یا دائرۂ حیات کی سر گرمی کے بعد Rx پیغامات نہ پہنچایا جا سکے تو ضرور کوشش کریں
+ در آمد/بر آمد
+ در آمد
سے درآمد کریں
- کو برآمد کریں
- درآمد کیا جا رہا ہے…
- برآمد کر رہا ہے…
- فائل درآمد کریں
- پچھلی برآمد
- سبسکرپشنز کو درآمد نہیں کیا جاسکا
- رکنیت برآمد نہیں کر سکا
+ کو بر آمد کریں
+ در آمد کیا جا رہا ہے…
+ بر آمد کر رہا ہے…
+ فائل در آمد کریں
+ پچھلی بر آمد
+ رکنیتوں کو در آمد نہیں کیا جا سکا
+ رکنیتوں بر آمد نہیں کر سکا
برآمد فائل کو ڈاؤن لوڈ کرکے YouTube کی رکنیت کو درآمد کریں:
\n
-\n1. اس یو آر ایل پر جائیں: %1$s
+\n1. اس URL پر جائیں:
+\n%1$s
\n2. جب پوچھا جائے تو لاگ ان کریں
-\nA. ڈاؤن لوڈ شروع ہونا چاہئے (یہ برآمد فائل ہے)
+\n3. ڈاؤن لوڈ شروع ہونا چاہئے (یہ برآمد فائل ہے)
۔URL یا آپ کی ID ٹائپ کرکے ایک SoundCloud پروفائل درآمد کریں:
\n
\n1. ویب براؤزر میں \"ڈیسک ٹاپ موڈ\" کو فعال کریں (یہ سائٹ موبائل آلات کے لئے دستیاب نہیں ہے)
-\n2. اس URL پر جائیں: %1$s
+\n2. اس URL پر جائیں:
+\n%1$s
\n3. جب پوچھا جائے تو لاگ ان کریں
-\n4. پروفائل یو آر ایل کاپی کریں جہاں تک آپ کی رہنمائی کی گئی تھی۔
- yourID، soundcloud.com/yourid
- یاد رکھیں کہ یہ آپریشن نیٹ ورک مہنگا ہوسکتا ہے۔
+\n4. پروفائل URL کاپی کریں جہاں تک آپ کی رہنمائی کی گئی تھی۔
+ آپ کی آئی ڈی، soundcloud.com/yourid
+ اس بات کو ذہن میں رکھیں کہ اس عملیہ کا نیٹ ورک مہنگا ہو سکتا ہے۔
\n
-\nکیا آپ جاری رکھنا چاہتے ہیں؟
+\nکیا آپ جاری رکھنا چاہتے ہیں ؟
پلے بیک رفتار کنٹرول
ٹیمپو
- "آواز کو موٹا کرنا"
- ختم (مسخ کا سبب بن سکتا ہے)
- کیپشن
+ موٹی آواز
+ غیر مربوط (مسخ کا سبب بن سکتا ہے)
+ عنوانات
پلیئر کیپشن ٹیکسٹ اسکیل اور بیک گراونڈ اسٹائل میں ترمیم کریں۔ اثر لینے کیلئے ایپ کو دوبارہ شروع کرنا ضروری ہے۔
اس فائل کو چلانے کے لئے کوئی ایپ انسٹال نہیں ہے
دیکھنے کی سرگزشت صاف کریں
@@ -373,24 +375,23 @@
تلاش کے الفاظ کی سرگزشت حذف کی گئیں
تلاش کی مکمل سرگزشت حذف کریں؟
تلاش کی سرگزشت حذف ہوئی۔
- 1 شے حذف کر دی گئی ۔
- نیو پائپ کاپلیفٹ فری سافٹ ویئر ہے: آپ استعمال کرسکتے ہیں ، مطالعہ شیئر کرسکتے ہیں اور اپنی مرضی سے اسے بہتر کرسکتے ہیں۔ خاص طور پر آپ اسے مفت سافٹ ویئر فاؤنڈیشن کے ذریعہ شائع کردہ GNU جنرل پبلک لائسنس کی شرائط کے تحت دوبارہ تقسیم اور / یا ترمیم کرسکتے ہیں ، جو لائسنس کا ورژن 3 ، یا (آپ کے اختیار پر) کسی بھی بعد کا ورژن ہے۔
+ 1 شے حذف کر دی گئی۔
+ نیو پائپ کاپلیفٹ فری سافٹ ویئر ہے: آپ استعمال کرسکتے ہیں، مطالعہ شیئر کرسکتے ہیں اور اپنی مرضی سے اسے بہتر کرسکتے ہیں۔ خاص طور پر آپ اسے مفت سافٹ ویئر فاؤنڈیشن کے ذریعہ شائع کردہ GNU جنرل پبلک لائسنس کی شرائط کے تحت دوبارہ تقسیم اور / یا ترمیم کرسکتے ہیں، خواہ لائسنس کا ورژن 3، یا (آپ کے اختیار پر) کسی بھی بعد کا ورژن۔
کیا آپ ترتیبات بھی درآمد کرنا چاہتے ہیں؟
نیو پائپ کی رازداری کی پالیسی
- نیوپی پائپ منصوبہ آپ کی رازداری کو بہت سنجیدگی سے لیتا ہے. لہذا ، اپلی کیشن آپ کی رضامندی کے بغیر کسی بھی ڈیٹا کو جمع نہیں کرتا.
-\nنیو پائپ کی رازداری کی پالیسی تفصیل سے وضاحت کرتی ہے کہ آپ کو کریش رپورٹ بھیجنے پر کیا ڈیٹا بھیجا جاتا ہے اور ذخیرہ کیا جاتا ہے ۔
+ نیو پائپ منصوبہ آپ کی رازداری کو بہت سنجیدگی سے لیتا ہے. لہذا، ایپلی کیشن آپ کی رضامندی کے بغیر کسی بھی ڈیٹا کو جمع نہیں کرتا./nنیو پائپ کی رازداری پالیسی تفصیل سے وضاحت کرتی ہے کہ آپ کے کریش رپورٹ بھیجنے پر کیا ڈیٹا بھیجا جاتا ہے اور ذخیرہ کیا جاتا ہے ۔
رازداری کی پالیسی پڑھیں
- یورپی جنرل ڈیٹا پروٹیکشن ریگولیشن (جی ڈی پی آر) کی تعمیل کرنے کیلئے ، ہم آپ کی توجہ نیو پائپ کی رازداری کی پالیسی کی طرف مبذول کراتے ہیں۔ برائے مہربانی اسے غور سے پڑھیں۔
-\nہمیں بگ رپورٹ بھیجنے کے ل it آپ کو اسے قبول کرنا چاہئے۔
- قبول کریں
+ یورپی جنرل ڈیٹا پروٹیکشن ریگولیشن (جی ڈی پی آر) کی تعمیل کرنے کیلئے، ہم آپ کی توجہ نیو پائپ کی رازداری کی پالیسی کی طرف مبذول کراتے ہیں۔ برائے مہربانی اسے غور سے پڑھیں۔
+\nہمیں بگ رپورٹ بھیجنے کے لیے آپ کو اسے قبول کرنا ضروری ہے۔
+ قبول
رد
- کوئی حد نہیں
- موبائل ڈیٹا کا استعمال کرتے وقت ریذولوشن کو محدود کریں
- ایپ سوئچ کو کم سے کم کریں
- اہم ویڈیو پلیئر سے دوسرے ایپ میں سوئچنگ کرتے وقت کارروائی — %s
+ لا محدود
+ موبائل ڈیٹا کا استعمال کرتے وقت ریزولوشن کو محدود کریں
+ ایپ بدلنے پر چھوٹا کریں
+ اصل ویڈیو پلیئر سے دوسرے ایپ میں تبدیل ہوتے وقت کارروائی — %s
کوئی نہیں
- پس منظری پلیر میں کم کریں
- پاپ اپ پلیر میں کم کریں
+ پس منظر پلیئر میں کم کریں
+ پاپ اپ پلیئر میں کم کریں
خاموشی کے دوران فاسٹ فارورڈ
قدم
ری سیٹ کریں
@@ -412,28 +413,28 @@
جدید نیو پائپ ورژن کیلئے اطلاعات
بیرونی ذخیرہ دستیاب نہیں
بیرونی ایسڈی کارڈ پر ڈاؤن لوڈ ممکن نہیں۔ ڈاؤن لوڈ فولڈر کے مقام کو دوبارہ ترتیب دیں؟
- پہلے سے طے شدہ ٹیبز کا استعمال ، محفوظ ٹیبز کو پڑھنے کے دوران خرابی
- ڈیفالٹس بحال کریں
- کیا آپ ڈیفالٹس کو بحال کرنا چاہتے ہیں؟
+ پہلے سے طے شدہ ٹیبز کا استعمال، محفوظ ٹیبز کو پڑھنے کے دوران خرابی
+ طے شدہ بحال کریں
+ کیا آپ پہلے سے طے شدہ کو بحال کرنا چاہتے ہیں؟
صارفین کا شمار دستیاب نہیں
- مرکزی صفحہ پر کون کون سے ٹیبزدکھائے جاہیں
+ مرکزی صفحہ پر کون کون سے ٹیبز دکھائے جاہیں
انتخاب
- تازہ ترین
- جب نیا ورژن دستیاب ہوتا ہے تو فوری طور پر ایپ اپڈیٹ کے لئے ایک اطلاع دکھائیں
- فہرست منظردیکھیں
+ تازہ کاری
+ نیا ورژن دستیاب ہونے پر ایپ کی تازہ کاری کے لیے اجازتی اطلاع دکھائیں
+ فہرست نما اسلوب
فہرست
گرڈ
خودکار
- منظر سوئچ کریں
- نیو پائپ اپ ڈیٹ دستیاب!
+ منظر بدلیں
+ نیو پائپ کی تازہ کاری دستیاب!
ڈاؤن لوڈ کرنے کے لئے کلک کریں
ختم
ملتوی
- موقوف
- قطار میں کھڑا ہے
- پوسٹ پروسیسنگ
+ توقف
+ قطار میں
+ بعد کا عمل جاری
قطار
- سسٹم نےکارروائی سے انکار کیا گیا
+ سسٹم کے ذریعہ کارروائی سے انکار کیا گیا
ڈاؤن لوڈ ناکام
ڈاؤن لوڈ مکمل
%s ڈاؤن لوڈ مکمل ہوا
@@ -442,22 +443,22 @@
اس نام کے ساتھ ایک ڈاؤن لوڈ جاری ہے
غلطی دکھائیں
کوڈ
- مقصود پوشہ نہیں بنایا جا سکتا
+ مطلوبہ فولڈر نہیں بنایا جا سکتا
فائل نہیں بنائی جاسکتی ہے
- نظام نے اجازت نہیں دی
+ سسٹم نے اجازت نہیں دی
محفوظ کنکشن ناکام
سرور نہیں مل سکا
- سرور سے متصل نہیں ہوسکتا
+ سرور سے متصل نہیں ہو سکتا
سرور ڈیٹا نہیں بھیجتا ہے
- سرور ملٹی تھریڈڈ ڈاؤن لوڈز کو قبول نہیں کرتا ہے ، @ سٹرنگ / msg_threads = 1 کے ساتھ دوبارہ کوشش کریں
+ سرور ملٹی تھریڈڈ ڈاؤن لوڈز کو قبول نہیں کرتا ہے، @string/msg_threads = 1 کے ساتھ دوبارہ کوشش کریں
نہیں ملا
- پوسٹ پروسیسنگ ناکام
+ بعد کا عمل نا کام
ختم شدہ ڈاؤن لوڈ صاف کریں
- رکو
- زیادہ سے زیادہ دوبارہ کوشش کریں
+ روکیں
+ زیادہ سے زیادہ کوششیں
ڈاؤن لوڈ منسوخ کرنے سے پہلے کوششوں کی زیادہ سے زیادہ تعداد
- میٹرڈ نیٹ ورک پر مداخلت
- موبائل ڈیٹا پر سوئچنگ کرتے وقت مفید ہے ، اگرچہ کچھ ڈاؤن لوڈ معطل نہیں ہوسکتی ہیں
+ میٹر والی نیٹ ورک پر مداخلت
+ موبائل ڈیٹا پر بدلتے وقت مفید ہے، اگرچہ کچھ ڈاؤن لوڈ معطل نہیں ہوسکتی ہیں
تقریبات
کانفرنسیں
تبصرے دکھائیں
@@ -479,20 +480,20 @@
پلے بیک پوزیشنس حذف ہوئیں۔
فائل منتقل یا حذف ہوگئی
اس نام والی فائل پہلے سے موجود ہے
- اس نام والی ڈاؤن لوڈ کی فائل پہلے سے موجود ہے
+ اس نام کی ڈاؤن لوڈ کی گئی فائل پہلے سے موجود ہے
فائل برتحریر نہیں کر سکتا
اس نام کے ساتھ ڈاؤن لوڈ زیر التوا ہے
فائل پر کام کرنے کے دوران نیو پائپ بند کردی گئی تھی
- آلے میں کوئی جگہ نہیں بچی
- پیشرفت ختم ہوگئی ، کیونکہ فائل کو حذف کردیا گیا تھا
+ آلہ میں کوئی جگہ نہیں بچی
+ پیشرفت ختم ہوگئی، کیونکہ فائل کو حذف کردیا گیا تھا
رابطے کا وقت ختم
کیا آپ اپنی ڈاؤن لوڈ کی سرگزشت کو صاف کرنا چاہتے ہیں یا ڈاؤن لوڈ کی گئی تمام فائلوں کو حذف کرنا چاہتے ہیں؟
ڈاؤن لوڈ کی قطار کو محدود کریں
ایک ڈاؤن لوڈ ایک ہی وقت میں چلے گا
ڈاؤن لوڈ شروع کریں
ڈاؤن لوڈ روکیں
- کہاں پرڈاؤن لوڈ کریں
- آپ سے پوچھا جائے گا کہ ہر ڈاؤن لوڈ کو کہاں محفوظ کرنا ہے
+ ڈاؤن لوڈ کہاں کریں، پوچھیں
+ ہر ڈاؤن لوڈ کو کہاں محفوظ کرنا ہے آپ سے پوچھا جائے گا
آپ سے پوچھا جائے گا کہ ہر ڈاؤن لوڈ کو کہاں محفوظ کرنا ہے۔
\nاگر آپ کسی بیرونی SD کارڈ پر ڈاؤن لوڈ کرنا چاہتے ہیں تو SAF کا انتخاب کریں
SAF استعمال کریں
@@ -502,7 +503,7 @@
تمام پلے بیک پوزیشن حذف کی گئی
تمام پلے بیک پوزیشنس حذف کریں؟
مؤثر بنانے کے لئے ڈاؤن لوڈ فولڈرز کو تبدیل کریں
- ٹوگل خدمت ، حالیہ منتخب:
+ ٹوگل خدمت، حالیہ منتخب:
کوئی نہیں دیکھ رہا ہے
- %s دیکھ رہا
From 089a9f1a9c650a814692fb926820376d61b21708 Mon Sep 17 00:00:00 2001
From: nautilusx
Date: Fri, 31 Jan 2020 15:37:13 +0000
Subject: [PATCH 0242/1194] Translated using Weblate (German)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-de/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 9a2482814..1fab90386 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -484,7 +484,7 @@
Wiedergabeposition gelöscht.
Datei verschoben oder gelöscht
Eine heruntergeladene Datei mit diesem Namen existiert bereits
- kann die Datei nicht überschreiben
+ Datei kann nicht überschreiben werden
Es gibt einen ausstehenden Download mit diesem Namen
NewPipe wurde während der Verarbeitung der Datei geschlossen
Kein Speicherplatz mehr auf dem Gerät
@@ -506,7 +506,7 @@
Alle Wiedergabepositionen löschen\?
Ändere die Downloadordner, damit sie wirksam werden
Dienst umschalten, aktuell ausgewählt:
- Quiosque Predefinido
+ Standard-Kiosk
Niemand schaut zu
- %s Zuschauer
From 6be23a0a6fd7ea3ced7efed21c5b8e4b8321a7ec Mon Sep 17 00:00:00 2001
From: bopol
Date: Fri, 31 Jan 2020 22:49:43 +0100
Subject: [PATCH 0243/1194] fix wrong language shown many popup dialogs
Changed android.R.string.ok, which is "OK", into R.string.finish, which is also OK, but from our strings
Then for a small amount of languages that don't have Android translation, it will show the good string.
---
.../newpipe/about/LicenseFragmentHelper.java | 15 +++++++-----
.../newpipe/download/DownloadDialog.java | 24 +++++++++++--------
.../ImportConfirmationDialog.java | 5 +++-
.../settings/ContentSettingsFragment.java | 12 ++++++----
.../settings/DownloadSettingsFragment.java | 10 +++++---
.../giga/ui/adapter/MissionAdapter.java | 2 +-
6 files changed, 43 insertions(+), 25 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java
index eeafc1f57..9a11b19cc 100644
--- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java
@@ -3,6 +3,7 @@ package org.schabi.newpipe.about;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.res.Resources;
import android.os.AsyncTask;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
@@ -14,6 +15,8 @@ import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.ref.WeakReference;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
+
public class LicenseFragmentHelper extends AsyncTask {
final WeakReference weakReference;
@@ -55,15 +58,15 @@ public class LicenseFragmentHelper extends AsyncTask {
wv.loadData(webViewData, "text/html; charset=UTF-8", null);
alert.setView(wv);
- alert.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- }
- });
+ assureCorrectAppLanguage(activity.getApplicationContext());
+ alert.setNegativeButton(getFinishString(activity), (dialog, which) -> dialog.dismiss());
alert.show();
}
+ private static String getFinishString(Activity activity) {
+ return activity.getApplicationContext().getResources().getString(R.string.finish);
+ }
+
/**
* @param context the context to use
* @param license the license
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
index 44966744b..c78e68597 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
@@ -11,15 +11,6 @@ import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.preference.PreferenceManager;
-import androidx.annotation.IdRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
-import androidx.fragment.app.DialogFragment;
-import androidx.documentfile.provider.DocumentFile;
-import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.view.menu.ActionMenuItemView;
-import androidx.appcompat.widget.Toolbar;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
@@ -34,6 +25,16 @@ import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
+import androidx.annotation.IdRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.view.menu.ActionMenuItemView;
+import androidx.appcompat.widget.Toolbar;
+import androidx.documentfile.provider.DocumentFile;
+import androidx.fragment.app.DialogFragment;
+
import com.nononsenseapps.filepicker.Utils;
import org.schabi.newpipe.MainActivity;
@@ -78,6 +79,8 @@ import us.shandian.giga.service.DownloadManagerService;
import us.shandian.giga.service.DownloadManagerService.DownloadManagerBinder;
import us.shandian.giga.service.MissionState;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
+
public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheckedChangeListener, AdapterView.OnItemSelectedListener {
private static final String TAG = "DialogFragment";
private static final boolean DEBUG = MainActivity.DEBUG;
@@ -527,10 +530,11 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
}
private void showFailedDialog(@StringRes int msg) {
+ assureCorrectAppLanguage(getContext());
new AlertDialog.Builder(context)
.setTitle(R.string.general_error)
.setMessage(msg)
- .setNegativeButton(android.R.string.ok, null)
+ .setNegativeButton(getString(R.string.finish), null)
.create()
.show();
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/ImportConfirmationDialog.java b/app/src/main/java/org/schabi/newpipe/local/subscription/ImportConfirmationDialog.java
index fbcf5d70e..a44efa1d3 100644
--- a/app/src/main/java/org/schabi/newpipe/local/subscription/ImportConfirmationDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/local/subscription/ImportConfirmationDialog.java
@@ -15,6 +15,8 @@ import org.schabi.newpipe.util.ThemeHelper;
import icepick.Icepick;
import icepick.State;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
+
public class ImportConfirmationDialog extends DialogFragment {
@State
protected Intent resultServiceIntent;
@@ -34,11 +36,12 @@ public class ImportConfirmationDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ assureCorrectAppLanguage(getContext());
return new AlertDialog.Builder(getContext(), ThemeHelper.getDialogTheme(getContext()))
.setMessage(R.string.import_network_expensive_warning)
.setCancelable(true)
.setNegativeButton(R.string.cancel, null)
- .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> {
+ .setPositiveButton(R.string.finish, (dialogInterface, i) -> {
if (resultServiceIntent != null && getContext() != null) {
getContext().startService(resultServiceIntent);
}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
index 88c700582..dc6ccb0a0 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
@@ -7,11 +7,12 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.util.Log;
+import android.widget.Toast;
+
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.Preference;
-import android.util.Log;
-import android.widget.Toast;
import com.nononsenseapps.filepicker.Utils;
import com.nostra13.universalimageloader.core.ImageLoader;
@@ -40,6 +41,8 @@ import java.util.Map;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
+
public class ContentSettingsFragment extends BasePreferenceFragment {
private static final int REQUEST_IMPORT_PATH = 8945;
@@ -139,6 +142,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
@Override
public void onActivityResult(int requestCode, int resultCode, @NonNull Intent data) {
+ assureCorrectAppLanguage(getContext());
super.onActivityResult(requestCode, resultCode, data);
if (DEBUG) {
Log.d(TAG, "onActivityResult() called with: requestCode = [" + requestCode + "], resultCode = [" + resultCode + "], data = [" + data + "]");
@@ -153,7 +157,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.override_current_data)
- .setPositiveButton(android.R.string.ok,
+ .setPositiveButton(getString(R.string.finish),
(DialogInterface d, int id) -> importDatabase(path))
.setNegativeButton(android.R.string.cancel,
(DialogInterface d, int id) -> d.cancel());
@@ -248,7 +252,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
// restart app to properly load db
System.exit(0);
});
- alert.setPositiveButton(android.R.string.yes, (dialog, which) -> {
+ alert.setPositiveButton(getString(R.string.finish), (dialog, which) -> {
dialog.dismiss();
loadSharedPreferences(newpipe_settings);
// restart app to properly load db
diff --git a/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java
index 8becc79a8..b8ce0ec18 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java
@@ -8,11 +8,12 @@ import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
+import android.util.Log;
+import android.widget.Toast;
+
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.preference.Preference;
-import android.util.Log;
-import android.widget.Toast;
import com.nononsenseapps.filepicker.Utils;
@@ -28,6 +29,8 @@ import java.nio.charset.StandardCharsets;
import us.shandian.giga.io.StoredDirectoryHelper;
+import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
+
public class DownloadSettingsFragment extends BasePreferenceFragment {
private static final int REQUEST_DOWNLOAD_VIDEO_PATH = 0x1235;
private static final int REQUEST_DOWNLOAD_AUDIO_PATH = 0x1236;
@@ -159,7 +162,7 @@ public class DownloadSettingsFragment extends BasePreferenceFragment {
AlertDialog.Builder msg = new AlertDialog.Builder(ctx);
msg.setTitle(title);
msg.setMessage(message);
- msg.setPositiveButton(android.R.string.ok, null);
+ msg.setPositiveButton(getString(R.string.finish), null);
msg.show();
}
@@ -202,6 +205,7 @@ public class DownloadSettingsFragment extends BasePreferenceFragment {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ assureCorrectAppLanguage(getContext());
super.onActivityResult(requestCode, resultCode, data);
if (DEBUG) {
Log.d(TAG, "onActivityResult() called with: requestCode = [" + requestCode + "], " +
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index aaf7826ef..852c29835 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -534,7 +534,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb
);
}
- builder.setNegativeButton(android.R.string.ok, (dialog, which) -> dialog.cancel())
+ builder.setNegativeButton(R.string.finish, (dialog, which) -> dialog.cancel())
.setTitle(mission.storage.getName())
.create()
.show();
From f7203d4ac9666c1eee10374210c2f92ec50a2eba Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sat, 1 Feb 2020 13:41:03 +0100
Subject: [PATCH 0244/1194] Fix formatting and use lamda functions
---
.../settings/VideoAudioSettingsFragment.java | 35 +++++++------------
1 file changed, 13 insertions(+), 22 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 6d32fb39f..7bb931309 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -21,38 +21,29 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
- @Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
+ listener = (sharedPreferences, s) -> {
- //on M and above, if user chooses to minimise to popup player on exit and the app doesn't have
- //display over other apps permission, show a snackbar to let the user give permission
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
- s.equals(getString(R.string.minimize_on_exit_key))){
+ // on M and above, if user chooses to minimise to popup player on exit and the app doesn't have
+ // display over other apps permission, show a snackbar to let the user give permission
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
+ s.equals(getString(R.string.minimize_on_exit_key))) {
- String newSetting = sharedPreferences.getString(s,null);
- if(newSetting != null
- && newSetting.equals(getString(R.string.minimize_on_exit_popup_key))
- && !Settings.canDrawOverlays(getContext())){
+ String newSetting = sharedPreferences.getString(s, null);
+ if (newSetting != null
+ && newSetting.equals(getString(R.string.minimize_on_exit_popup_key))
+ && !Settings.canDrawOverlays(getContext())) {
- Snackbar.make(getListView(),R.string.permission_display_over_apps,Snackbar.LENGTH_INDEFINITE)
- .setAction(R.string.settings, new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- PermissionHelper.checkSystemAlertWindowPermission(getContext());
- }
- })
- .show();
+ Snackbar.make(getListView(), R.string.permission_display_over_apps, Snackbar.LENGTH_INDEFINITE)
+ .setAction(R.string.settings,
+ view -> PermissionHelper.checkSystemAlertWindowPermission(getContext()))
+ .show();
- }
}
}
-
};
}
-
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.video_audio_settings);
From 55a138e8da10ffb7b9a18b9ee602c20f2ef4b307 Mon Sep 17 00:00:00 2001
From: bopol
Date: Sat, 1 Feb 2020 15:30:51 +0100
Subject: [PATCH 0245/1194] fix toast on app language change
I forgot to change the key here when I renamed it
---
.../org/schabi/newpipe/settings/ContentSettingsFragment.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
index dc6ccb0a0..5abdd6806 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
@@ -68,7 +68,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
initialSelectedLocalization = org.schabi.newpipe.util.Localization.getPreferredLocalization(requireContext());
initialSelectedContentCountry = org.schabi.newpipe.util.Localization.getPreferredContentCountry(requireContext());
- initialLanguage = androidx.preference.PreferenceManager.getDefaultSharedPreferences(getContext()).getString("newpipes_language_key", "en");
+ initialLanguage = PreferenceManager.getDefaultSharedPreferences(getContext()).getString("app_language_key", "en");
}
@Override
@@ -130,7 +130,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
.getPreferredLocalization(requireContext());
final ContentCountry selectedContentCountry = org.schabi.newpipe.util.Localization
.getPreferredContentCountry(requireContext());
- final String selectedLanguage = androidx.preference.PreferenceManager.getDefaultSharedPreferences(getContext()).getString("newpipes_language_key", "en");
+ final String selectedLanguage = PreferenceManager.getDefaultSharedPreferences(getContext()).getString("app_language_key", "en");
if (!selectedLocalization.equals(initialSelectedLocalization)
|| !selectedContentCountry.equals(initialSelectedContentCountry) || !selectedLanguage.equals(initialLanguage)) {
From d36ac7a5dee1c460e5bf06dd291f292830e77dd4 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sat, 1 Feb 2020 15:35:33 +0100
Subject: [PATCH 0246/1194] Improve formatting
---
.../schabi/newpipe/settings/ContentSettingsFragment.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
index 5abdd6806..03d48ca5b 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
@@ -196,7 +196,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
- }finally {
+ } finally {
try {
if (output != null) {
output.flush();
@@ -243,7 +243,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
}
//If settings file exist, ask if it should be imported.
- if(ZipHelper.extractFileFromZip(filePath, newpipe_settings.getPath(), "newpipe.settings")) {
+ if (ZipHelper.extractFileFromZip(filePath, newpipe_settings.getPath(), "newpipe.settings")) {
AlertDialog.Builder alert = new AlertDialog.Builder(getContext());
alert.setTitle(R.string.import_settings);
@@ -298,7 +298,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
- }finally {
+ } finally {
try {
if (input != null) {
input.close();
From 90c20f124b16ebe5531f40fc06494fa1b5c9a0aa Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Sat, 1 Feb 2020 16:27:53 +0100
Subject: [PATCH 0247/1194] Move log statement into "if (DEBUG)"
---
.../org/schabi/newpipe/local/bookmark/BookmarkFragment.java | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
index bfd90acda..ea9655921 100644
--- a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
@@ -291,8 +291,10 @@ public final class BookmarkFragment
return;
}
- Log.d(TAG, "Updating playlist id=[" + id +
- "] with new name=[" + name + "] items");
+ if (DEBUG) {
+ Log.d(TAG, "Updating playlist id=[" + id +
+ "] with new name=[" + name + "] items");
+ }
localPlaylistManager.renamePlaylist(id, name);
final Disposable disposable = localPlaylistManager.renamePlaylist(id, name)
From 8712310ad93738d3d663da87dbd38ec0ebf92177 Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Sat, 1 Feb 2020 16:36:45 +0100
Subject: [PATCH 0248/1194] Move more log statements into "if (DEBUG)"
---
.../local/playlist/LocalPlaylistFragment.java | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
index 9f21e05ff..17599a1ca 100644
--- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
@@ -388,8 +388,10 @@ public class LocalPlaylistFragment extends BaseLocalListFragment
Date: Fri, 31 Jan 2020 17:06:47 +0000
Subject: [PATCH 0249/1194] Translated using Weblate (German)
Currently translated at 99.8% (526 of 527 strings)
---
app/src/main/res/values-de/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 1fab90386..3ae7552bb 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -484,7 +484,7 @@
Wiedergabeposition gelöscht.
Datei verschoben oder gelöscht
Eine heruntergeladene Datei mit diesem Namen existiert bereits
- Datei kann nicht überschreiben werden
+ Datei kann nicht überschrieben werden
Es gibt einen ausstehenden Download mit diesem Namen
NewPipe wurde während der Verarbeitung der Datei geschlossen
Kein Speicherplatz mehr auf dem Gerät
From 766326ad8c243ff3685a41ef4e53693e174bebd3 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Sat, 1 Feb 2020 14:40:14 +0000
Subject: [PATCH 0250/1194] Translated using Weblate (French)
Currently translated at 100.0% (527 of 527 strings)
---
app/src/main/res/values-fr/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 7695fe31c..5f9dc0b18 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -205,8 +205,8 @@
Aucune vidéo
- - Vidéo
- - Vidéos
+ - %s vidéo
+ - %s vidéos
Caractères spéciaux
Élément supprimé
From fb0d626cb27638754ee8a25634cac3a9c8e7a4e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isak=20Holmstr=C3=B6m?=
Date: Fri, 31 Jan 2020 07:17:18 +0000
Subject: [PATCH 0251/1194] Translated using Weblate (Swedish)
Currently translated at 88.2% (465 of 527 strings)
---
app/src/main/res/values-sv/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 89d51493e..90e976823 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -463,4 +463,8 @@
Återställ den senaste uppspelningspositionen
Positioner i listor
Ändra nedladdningsmapp för att träda i kraft
+ Spela automatiskt
+ Töm data
+ Snabb spola -framåt/-bakåt
+ Aktivera video på låsskärmen
\ No newline at end of file
From c0519d8313505b5b074e17906edadacfb276484a Mon Sep 17 00:00:00 2001
From: Markus Richter <8398165+mqus@users.noreply.github.com>
Date: Wed, 29 Jan 2020 13:48:02 +0100
Subject: [PATCH 0252/1194] fixes #3021, see also
https://github.com/TeamNewPipe/NewPipe-legacy/pull/21
---
app/src/main/java/us/shandian/giga/get/DownloadMission.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/java/us/shandian/giga/get/DownloadMission.java b/app/src/main/java/us/shandian/giga/get/DownloadMission.java
index c0f85b321..9ad73050b 100644
--- a/app/src/main/java/us/shandian/giga/get/DownloadMission.java
+++ b/app/src/main/java/us/shandian/giga/get/DownloadMission.java
@@ -223,6 +223,7 @@ public class DownloadMission extends Mission {
conn.setInstanceFollowRedirects(true);
conn.setRequestProperty("User-Agent", DownloaderImpl.USER_AGENT);
conn.setRequestProperty("Accept", "*/*");
+ conn.setRequestProperty("Accept-Encoding", "*");
if (headRequest) conn.setRequestMethod("HEAD");
From 61d102dc75a1a1470adab17edcf5d251c67e2549 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Wed, 29 Jan 2020 18:43:44 +0100
Subject: [PATCH 0253/1194] Change recaptcha string names to match style
---
app/src/main/AndroidManifest.xml | 2 +-
app/src/main/res/values-ar/strings.xml | 4 ++--
app/src/main/res/values-b+ast/strings.xml | 4 ++--
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 4 ++--
app/src/main/res/values-be/strings.xml | 4 ++--
app/src/main/res/values-bg/strings.xml | 4 ++--
app/src/main/res/values-bn-rBD/strings.xml | 4 ++--
app/src/main/res/values-ca/strings.xml | 4 ++--
app/src/main/res/values-cmn/strings.xml | 4 ++--
app/src/main/res/values-cs/strings.xml | 4 ++--
app/src/main/res/values-da/strings.xml | 4 ++--
app/src/main/res/values-de/strings.xml | 4 ++--
app/src/main/res/values-el/strings.xml | 4 ++--
app/src/main/res/values-eo/strings.xml | 4 ++--
app/src/main/res/values-es/strings.xml | 4 ++--
app/src/main/res/values-et/strings.xml | 4 ++--
app/src/main/res/values-eu/strings.xml | 4 ++--
app/src/main/res/values-fa/strings.xml | 4 ++--
app/src/main/res/values-fi/strings.xml | 4 ++--
app/src/main/res/values-fr/strings.xml | 4 ++--
app/src/main/res/values-gl/strings.xml | 4 ++--
app/src/main/res/values-he/strings.xml | 4 ++--
app/src/main/res/values-hi/strings.xml | 4 ++--
app/src/main/res/values-hr/strings.xml | 4 ++--
app/src/main/res/values-hu/strings.xml | 4 ++--
app/src/main/res/values-id/strings.xml | 4 ++--
app/src/main/res/values-it/strings.xml | 4 ++--
app/src/main/res/values-ja/strings.xml | 4 ++--
app/src/main/res/values-ko/strings.xml | 4 ++--
app/src/main/res/values-ku/strings.xml | 4 ++--
app/src/main/res/values-lt/strings.xml | 4 ++--
app/src/main/res/values-mk/strings.xml | 4 ++--
app/src/main/res/values-ms/strings.xml | 4 ++--
app/src/main/res/values-nb-rNO/strings.xml | 4 ++--
app/src/main/res/values-nl-rBE/strings.xml | 4 ++--
app/src/main/res/values-nl/strings.xml | 4 ++--
app/src/main/res/values-pa/strings.xml | 4 ++--
app/src/main/res/values-pl/strings.xml | 4 ++--
app/src/main/res/values-pt-rBR/strings.xml | 4 ++--
app/src/main/res/values-pt/strings.xml | 4 ++--
app/src/main/res/values-ro/strings.xml | 4 ++--
app/src/main/res/values-ru/strings.xml | 4 ++--
app/src/main/res/values-sk/strings.xml | 4 ++--
app/src/main/res/values-sl/strings.xml | 4 ++--
app/src/main/res/values-sr/strings.xml | 4 ++--
app/src/main/res/values-sv/strings.xml | 4 ++--
app/src/main/res/values-tr/strings.xml | 4 ++--
app/src/main/res/values-uk/strings.xml | 4 ++--
app/src/main/res/values-ur/strings.xml | 4 ++--
app/src/main/res/values-vi/strings.xml | 4 ++--
app/src/main/res/values-zh-rCN/strings.xml | 4 ++--
app/src/main/res/values-zh-rHK/strings.xml | 4 ++--
app/src/main/res/values-zh-rTW/strings.xml | 4 ++--
app/src/main/res/values/strings.xml | 7 ++++---
54 files changed, 109 insertions(+), 108 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 21a846494..f27f4bad0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,7 +112,7 @@
+ android:label="@string/recaptcha"/>
يرجى تحديد مجلد التنزيل لاحقا في الإعدادات
هذا الإذن مطلوب
\nللفتح في وضع النافذة المنبثقة
- اختبار reCAPTCHA
+ اختبار reCAPTCHA
السماح بالرموز في أسماء الملفات
يتم استبدال الرموز غير المسموح بها بهذه القيمة
استبدال الحرف
@@ -235,7 +235,7 @@
الإعدادات الصوتية
تشغيل هنا
بدأ التشغيل في نافذة منبثقة جديدة
- تحدي الكابتشا
+ تحدي الكابتشا
ضغط مطول للإدراج الى قائمة الانتظار
- %s بدون مشهد
diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml
index 08b22c616..5ddfa7ead 100644
--- a/app/src/main/res/values-b+ast/strings.xml
+++ b/app/src/main/res/values-b+ast/strings.xml
@@ -58,8 +58,8 @@
Mil mill.
Precísase esti permisu
\np\'abrir nel mou ventanu
- reCAPTCHA
- Retu de reCAPTCHA
+ reCAPTCHA
+ Retu de reCAPTCHA
Solicitóse\'l retu de reCAPTCHA
En segundu planu
Ventanu
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index 078379683..5fb13d968 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -110,7 +110,7 @@
点击了解详情
请稍候…
复制至剪贴板
- reCAPTCHA验证码
+ reCAPTCHA验证码
悬浮窗播放
关于NewPipe
设置
@@ -207,7 +207,7 @@
请稍后在设置中设定下载目录
用悬浮窗模式
\n需要此权限
- reCAPTCHA验证
+ reCAPTCHA验证
请求的新的CAPTCHA验证
NewPipe 悬浮窗模式
在悬浮窗中播放
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 1cf3abd7e..b3a09cb8f 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -247,8 +247,8 @@
Гэтае разрозненне трэба для
\nпрайгравання ў акне
1 элемент выдалены.
- reCAPTCHA
- Запыт reCAPTCHA
+ reCAPTCHA
+ Запыт reCAPTCHA
Запытаны ўвод reCAPTCHA
Загрузкі
Дапушчальныя сімвалы назвы файлаў
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 1eb9222ec..7c813d0a9 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -269,8 +269,8 @@
Това разрешение се изисква за
\nвъзпроизвеждане в отделен прозорец
1 елемент е изтрит.
- преКАПЧА
- reCAPTCHA заявка
+ преКАПЧА
+ reCAPTCHA заявка
Изисква се въвеждане на reCAPTCHA
Изтегляне
Повечето специални символи
diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml
index 3a623f2c3..37938334c 100644
--- a/app/src/main/res/values-bn-rBD/strings.xml
+++ b/app/src/main/res/values-bn-rBD/strings.xml
@@ -145,8 +145,8 @@
- রিক্যাপচা
- reCAPTCHA চ্যালেঞ্জ
+ রিক্যাপচা
+ reCAPTCHA চ্যালেঞ্জ
reCAPTCHA চ্যালেঞ্জ অনুরোধ করা হয়েছে
কি:\\nঅনুরোধ:\\nকন্টেন্ট ভাষা:\\nসার্ভিস:\\nসময়(GMT এ):\\nপ্যাকেজ:\\nসংস্করণ:\\nওএস সংস্করণ:\\nআইপি পরিসর:
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index bcc816577..20deb3160 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -67,7 +67,7 @@
D\'acord
Nom de fitxer
Error
- reCAPTCHA
+ reCAPTCHA
Baixades
Paràmetres
Quant a
@@ -307,7 +307,7 @@
Feu un toc aquí per a més detalls
Defineix una carpeta de baixades més endavant als paràmetres
Es necessita aquest permís per a obrir el mode emergent
- Camp reCAPTCHA
+ Camp reCAPTCHA
S\'ha sol·licitat l\'emplenament d\'un camp reCAPTCHA
Se substituiran els caràcters no vàlids amb aquest valor
Caràcter de substitució
diff --git a/app/src/main/res/values-cmn/strings.xml b/app/src/main/res/values-cmn/strings.xml
index 3ff479bfd..878efa9f2 100644
--- a/app/src/main/res/values-cmn/strings.xml
+++ b/app/src/main/res/values-cmn/strings.xml
@@ -266,8 +266,8 @@
在悬浮窗模式打开
\n需要此权限
已删除一个项目。
- reCAPTCHA 验证
- reCAPTCHA 验证
+ reCAPTCHA 验证
+ reCAPTCHA 验证
需完成 reCAPTCHA 验证
下载
文件名中允许的字符
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 66c952a26..044d908c4 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -102,8 +102,8 @@
Přehrát
Nová mise
OK
- reCAPTCHA
- Výzva reCAPTCHA
+ reCAPTCHA
+ Výzva reCAPTCHA
Požadována výzva reCAPTCHA
Černé
Kontrolní součet
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 5e44aab61..ff2fea8c9 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -249,8 +249,8 @@
Vælg venligst en tilgængelig downloadmappe
Denne tilladelse er nødvendig for at kunne åbne i pop op-tilstand
1 element slettet.
- reCAPTCHA
- reCAPTCHA-udfordring
+ reCAPTCHA
+ reCAPTCHA-udfordring
Der blev anmodet om en reCAPTCHA-udfordring
Download
Tilladte tegn i filnavne
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 53b9a52eb..fa5e798a4 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -110,9 +110,9 @@
NewPipe lädt herunter
Für Details antippen
Ungültige URL oder Internet nicht verfügbar
- reCAPTCHA
+ reCAPTCHA
Schwarz
- reCAPTCHA-Aufgabe
+ reCAPTCHA-Aufgabe
reCAPTCHA-Aufgabe angefordert
Später
Ja
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 3d2397a0c..915e1902d 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -251,8 +251,8 @@
Αυτή η άδεια είναι απαραίτητη για
\nτο άνοιγμα αναδυόμενων παραθύρων
1 αντικείμενο διαγράφηκε.
- Αυτόματο τεστ
- Πρόκληση reCAPTCHA
+ Αυτόματο τεστ
+ Πρόκληση reCAPTCHA
Ζητήθηκε πρόκληση reCAPTCHA
Επιτρεπόμενοι χαρακτήρες σε ονόματα αρχείων
Οι μη έγκυροι χαρακτήρες αντικαθίστανται με αυτήν την τιμή
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 224e8837e..754df0784 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -109,8 +109,8 @@
Erarosignalo
Ne povis ŝarĝi bildon
Apo kraŝis
- reCAPTCHA
- reCAPTCHA defio
+ reCAPTCHA
+ reCAPTCHA defio
reCAPTCHA defio petita
Ĉiuj
Kanalo
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 9f25208bb..d7a9bc2e8 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -115,11 +115,11 @@
k
M
MM
- reCAPTCHA
+ reCAPTCHA
Abrir en modo emergente
Se necesita este permiso
\npara abrir en modo emergente
- Reto reCAPTCHA
+ Reto reCAPTCHA
Reto reCAPTCHA requerido
Modo emergente de NewPipe
Reproduciendo en modo emergente
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index 99dc6cc80..79442f421 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -238,7 +238,7 @@
Need õigused on vajalikud
\nhüpikakna avamiseks
Kustutati 1 element.
- "reCAPTCHA "
+ "reCAPTCHA "
Laadi alla
Lubatud tähemärgid failinimedes
Vigased tähemärgid asendatakse selle väärtusega
@@ -370,7 +370,7 @@
Lood
Kasutajad
Lülitu peamisele
- reCAPTCHA nõue
+ reCAPTCHA nõue
reCAPTCHA nõude taotlus
© %1$s %2$s %3$s alla
Vaba kergekaaluline Androidi voogesitus.
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index b376f1f6d..1ec970d5f 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -139,8 +139,8 @@
Ezarri deskargetarako karpeta bat ezarpenetan geroago
Baimen hau beharrezkoa da
\nlaster-leiho moduan irekitzeko
- reCAPTCHA
- reCAPTCHA erronka
+ reCAPTCHA
+ reCAPTCHA erronka
reCAPTCHA erronka eskatu da
NewPipe aplikazioari buruz
Ezarpenak
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index b2a04e14c..790c47669 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -296,7 +296,7 @@
زمان فعلی پخش کننده را به صورت تقریبی و سریع جلو ببر
این گزینه باعث می شود هنگام جلو/عقب کردن زمان تصویر، به جای زمان دقیق انتخاب شده، به زمان غیر دقیق و نزدیک به مکان انتخاب شده برود که این کار سریع تر انجام می شود
کاره یا رابط کاربری با خطا مواجه شد
- ریکپچا
+ ریکپچا
بارگیری
تغییر جهت
تغییر وضعیت به پسزمینه
@@ -361,7 +361,7 @@
بازگردانی
در صف پخش کننده پسزمینه قرار گرفت
چه:\\nدرخواست:\\nزبان درخواست:\\nخدمت:\\nزمان GMT:\\nنگارش:\\nنگارش س.ع:\\nبازه آیپی:
- چالش ریکپچا
+ چالش ریکپچا
نیاز به چالش ریکپچا است
این مجوز مورد نیاز است
\nتا بتوان به حالت تصویر در تصویر رفت
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 1e91fa55a..edf10c6f0 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -173,8 +173,8 @@
Kopioitu leikepöydälle
Valitse saatavilla oleva latauskansio
Tämä käyttöoikeus tarvitaan ponnahdusikkunan käytölle
- reCAPTCHA
- reCAPTCHA Haaste
+ reCAPTCHA
+ reCAPTCHA Haaste
reCAPTCHA Haaste pyydetty
Lataus
Sallitut merkit tiedostonimissä
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 444310aef..6b86cd2b4 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -105,11 +105,11 @@
Veuillez définir ultérieurement un dossier de téléchargement dans les paramètres
Impossible de charger l’image
L’application a planté
- reCAPTCHA
+ reCAPTCHA
Noir
Tout
Chaîne
- Défi reCAPTCHA
+ Défi reCAPTCHA
Défi reCAPTCHA demandé
Ouvrir en mode flottant
Mode flottant NewPipe
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index 899a9be10..6427e1378 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -266,8 +266,8 @@
\npara abrir o vídeo no modo «popup»
1 elemento foi eliminado.
- reCAPTCHA
- Desafío reCAPTCHA
+ reCAPTCHA
+ Desafío reCAPTCHA
Desafío reCAPTCHA solicitado
Descarregar
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 7a1338f60..35b86ec2d 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -192,8 +192,8 @@
נא לציין תיקיית הורדה בהגדרות בהמשך
הרשאה זו נדרשת לטובת
\nפתיחה בחלון צף
- reCAPTCHA
- אתגר reCAPTCHA
+ reCAPTCHA
+ אתגר reCAPTCHA
התקבלה בקשה לאתגר reCAPTCHA
הורדה
רשימת תווים אפשרית בשמות קבצים
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index 82b2db1b5..a7746330a 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -206,8 +206,8 @@
क्लिपबोर्ड पर कॉपी हो गया है
कृपया बाद में सेटिंग्स में डाउनलोड स्थान चुने
पॉपअप के तरीके में खोलने के लिए अनुमति की जरुरत है
- reCAPTCHA
- reCAPTCHA चुनौती
+ reCAPTCHA
+ reCAPTCHA चुनौती
reCAPTCHA चुनौती का अनुरोध किया
डाउनलोड
फाइल के नाम के लिए आवश्यक characters(जैसे - १२३, abc) की अनुमति है
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index a981dcf5e..beb2bdd02 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -153,8 +153,8 @@
Molimo odaberite dostupnu mapu za preuzimanje
Ova dozvola je potrebna za
\notvaranje skočnog prozora
- reCAPTCHA
- reCAPTCHA zadatak
+ reCAPTCHA
+ reCAPTCHA zadatak
Traži se reCAPTCHA zadatak
Preuzimanja
Dozvoljeni znakovi u nazivima datoteka
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 4d7ff986e..dc1021adb 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -233,8 +233,8 @@
Átnevezés
Ez az engedély szükséges a felugró ablakban történő megnyitáshoz
1 elem törölve.
- reCAPTCHA
- reCAPTCHA rejtvény
+ reCAPTCHA
+ reCAPTCHA rejtvény
reCAPTCHA rejtvény igényelve
Letöltés
Fájlnevekben engedélyezett karakterek
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index 8677df678..ffcacdd6d 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -105,8 +105,8 @@
Apa:\\nPermintaan:\\nBahasa Konten:\\nLayanan:\\nWaktu GMT:\\nPaket:\\nVersi:\\nVersi OS:
Laporan pengguna
Thread
- reCAPTCHA
- Tantangan reCAPTCHA
+ reCAPTCHA
+ Tantangan reCAPTCHA
Meminta kode reCAPTCHA
Hitam
Semua
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 4942f4720..7ab68268f 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -106,8 +106,8 @@
Impossibile caricare l\'immagine
L\'app/UI si è interrotta
Cosa:\\nRichiesta:\\nLingua contenuto:\\nServizio:\\nOrario GMT:\\nPacchetto:\\nVersione:\\nVersione SO:
- reCAPTCHA
- Risoluzione reCAPTCHA
+ reCAPTCHA
+ Risoluzione reCAPTCHA
Nero
Tutto
Canale
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 553a54f1e..7980645e2 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -106,8 +106,8 @@
画像を読み込みできません
アプリ/UI がクラッシュしました
何:\\\\n提案:\\\\nコンテンツ言語:\\\\nサービス:\\\\nGMT 時間:\\\\nパッケージ:\\\\nバージョン:\\\\nOSバージョン:
- reCAPTCHA
- reCAPTCHA の要求
+ reCAPTCHA
+ reCAPTCHA の要求
reCAPTCHA を要求しました
ブラック
すべて
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index e8a2a9c51..630abcdaa 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -180,7 +180,7 @@
다운로드 할 폴더를 설정에서 지정하세요
이 권한은 팝업 모드에서
\n열기 위해 필요합니다
- reCAPTCHA
+ reCAPTCHA
reCAPTCHA 확인 요청됨
다운로드
파일명에 허용되는 문자
@@ -274,7 +274,7 @@
모두 삭제하기
취소
이름 바꾸기
- reCAPTCHA 확인
+ reCAPTCHA 확인
이 항목을 시청 기록에서 삭제하시겠습니까?
모든 항목을 시청 기록에서 삭제하시겠습니까?
마지막으로 재생
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 50350e1b3..2f39136e2 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -215,8 +215,8 @@
تکایە فۆڵدەرێک بۆ شوێنی داگرتن دیاریبکە لە ڕێکخستنەکان
ئەم دەسەڵاتە پێویستە بۆ
\nکردنەوەی پەنجەرەی بچووک
- reCAPTCHA
- reCAPTCHA داواکاری
+ reCAPTCHA
+ reCAPTCHA داواکاری
reCAPTCHA داواکراوە
داگرتن
پیت و ژمارەکان
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 43fe9d862..f84a3c23c 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -153,8 +153,8 @@
Prašome pasirinkti galimą atsisiuntimų aplankalą
Šis leidimas nereikalingas, kad atidarytiviššokančio lango rėžime
- reCAPTCHA
- reCAPTCHA iššūkis
+ reCAPTCHA
+ reCAPTCHA iššūkis
reCAPTCHA prašomas iššūkis
Prenumeruoti
diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml
index c9388a78a..96b4c8819 100644
--- a/app/src/main/res/values-mk/strings.xml
+++ b/app/src/main/res/values-mk/strings.xml
@@ -230,8 +230,8 @@
Одберете достапна локација за превземања
Оваа привилегија е потребна за
\nотворање во подпрозорче
- „reCAPTCHA“
- reCAPTCHA Предизвик
+ „reCAPTCHA“
+ reCAPTCHA Предизвик
Потребен е reCAPTCHA предизвик
Превземања
Дозволени знаци во имињата на датотеките
diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml
index 354e7b7de..f53450e13 100644
--- a/app/src/main/res/values-ms/strings.xml
+++ b/app/src/main/res/values-ms/strings.xml
@@ -258,8 +258,8 @@
Kebenaran ini diperlukan untuk
\nbuka dalam mod popup
1 item dipadamkan.
- reCAPTCHA
- Cabaran reCAPTCHA
+ reCAPTCHA
+ Cabaran reCAPTCHA
Meminta kod reCAPTCHA
Muat turun
Karakter yang dibenarkan dalam nama fail
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index d01647f5d..c20161f7d 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -106,8 +106,8 @@
Nytt mål
Feilaktig nettadresse eller manglende internettilknytning
Definer en nedlastingsmappe senere i innstillingene
- reCAPTCHA
- reCAPTCHA-oppgave
+ reCAPTCHA
+ reCAPTCHA-oppgave
Åpne i oppsprettsmodus
NewPipe oppsprettsmodus
Forvalgt oppsprettsoppløsning
diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml
index 198979def..de96152ec 100644
--- a/app/src/main/res/values-nl-rBE/strings.xml
+++ b/app/src/main/res/values-nl-rBE/strings.xml
@@ -230,8 +230,8 @@
Gekopieerd naar klembord
Kies een beschikbare downloadmap
Deze toestemming is vereist voor te openen in pop-upmodus
- reCAPTCHA
- reCAPTCHA-uitdaging
+ reCAPTCHA
+ reCAPTCHA-uitdaging
reCAPTCHA-uitdaging gevraagd
Download
Toegelaten tekens in bestandsnamen
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 9ecc936eb..1cd1391a0 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -107,8 +107,8 @@
Gekopieerd naar klembord
Kies een beschikbare downloadmap
Zwart
- reCAPTCHA
- reCAPTCHA-uitdaging
+ reCAPTCHA
+ reCAPTCHA-uitdaging
reCAPTCHA-uitdaging gevraagd
Openen in pop-upmodus
Alles
diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml
index 0e579720a..7e39321e0 100644
--- a/app/src/main/res/values-pa/strings.xml
+++ b/app/src/main/res/values-pa/strings.xml
@@ -237,8 +237,8 @@
ਬਾਅਦ ਵਿੱਚ ਸੈਟਿੰਗਾਂ ਵਿਚੋਂ ਇੱਕ ਡਾਉਨਲੋਡ ਫੋਲਡਰ ਨੂੰ ਚੁਣੋ
ਪੌਪ-ਅਪ ਮੋਡ ਵਿੱਚ ਖੋਲ੍ਹਣ ਵਾਸਤੇ ਇਸ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ
1 ਆਈਟਮ ਮਿਟਾਈ ਗਈ.
- ReCaptcha
- ReCaptcha ਚੁਣੌਤੀ
+ ReCaptcha
+ ReCaptcha ਚੁਣੌਤੀ
ReCaptcha ਚੁਣੌਤੀ ਲਈ ਬੇਨਤੀ
ਡਾਊਨਲੋਡ
ਫਾਈਲ ਨਾਮ ਵਿੱਚ ਪ੍ਰਵਾਨਿਤ ਅੱਖਰ
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 0da89ad48..0009fa8d1 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -106,8 +106,8 @@
Awaria aplikacji/interfejsu
(Eksperymentalne) Wymuś pobieranie przez Tora w celu zwiększenia prywatności (strumieniowe wideo nie jest jeszcze obsługiwane).
Start
- CAPTCHA
- Wyzwanie reCAPTCHA
+ CAPTCHA
+ Wyzwanie reCAPTCHA
Wymagane wyzwanie dotyczące reCAPTCHA
Usuwa dźwięk w niektórych rozdzielczościach
Tło
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 45fe51010..04c4e3960 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -50,8 +50,8 @@
Próximo
Abrir no navegador
Pausar
- reCAPTCHA
- Desafio reCAPTCHA
+ reCAPTCHA
+ Desafio reCAPTCHA
Desafio reCAPTCHA solicitado
Reportar um erro
Tentar novamente
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 98b85bcab..64de827bf 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -117,8 +117,8 @@
B
Esta permissão é necessária
\npara o modo de janela
- reCAPTCHA
- Desafio reCAPTCHA
+ reCAPTCHA
+ Desafio reCAPTCHA
Desafio reCAPTCHA solicitado
Modo de janela autónoma do NewPipe
Reproduzir no modo de janela autónoma
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 358de0ca8..e304e862d 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -106,8 +106,8 @@
Deschide in modul popup
Aceasta permisiune este necesara
pentru a deschide în mod pop-up
- ReCAPTCHA
- Provocare reCAPTCHA
+ ReCAPTCHA
+ Provocare reCAPTCHA
reCAPTCHA nouă cerută
NewPipe mod pop-up
"Rezoluție pop-up inițială "
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 1da98cc74..c2e8b4d4e 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -124,7 +124,7 @@
Что:\\nЗапрос:\\nЯзык контента:\\nСервис:\\nВремя по Гринвичу:\\nПакет:\\nВерсия:\\nВерсия ОС:
Это разрешение нужно для
\nвоспроизведения в окне
- reCAPTCHA
+ reCAPTCHA
Открыть во всплывающем окне
Предлагать варианты при поиске
Позже
@@ -138,7 +138,7 @@
Помнить последние размер и позицию всплывающего окна
Поисковые предложения
Лучшее разрешение
- Запрос reCAPTCHA
+ Запрос reCAPTCHA
Запрошен ввод reCAPTCHA
Высокие разрешения
NewPipe во всплывающем окне
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 6624f7a3b..1652aefa1 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -106,8 +106,8 @@
Nemožno načítať obrázok
Aplikácia/UP zlyhalo
Čo:\\nPožiadavka:\\nJazyk obsahu:\\nSlužba:\\nČas v GMT:\\nBalík:\\nVerzia:\\nVerzia OS:
- reCAPTCHA
- Výzva reCAPTCHA
+ reCAPTCHA
+ Výzva reCAPTCHA
Čierna
Všetko
Kanál
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index a67b48a62..f318ca77e 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -124,8 +124,8 @@
Slike ni mogoče naložiti
Program se je sesul!
- reCAPTCHA
- Izziv reCAPTCHA
+ reCAPTCHA
+ Izziv reCAPTCHA
Zahteva izziva reCAPTCHA
Predmet:\\nZahteva:\\nJezik vsebine:\\nStoritev:\\nČas v GMT:\\nPaket:\\nRazličica:\\nRazličica OS:
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index d5f031ad8..a8abb98e9 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -107,8 +107,8 @@
Не могох да учитам слику
Апликација/УИ је краховала
Шта:\\nЗахтев:\\nЈезик садржаја:\\nУслуга:\\nГМТ време:\\nПакет:\\nИздање:\\nИздање ОС-а:\\nГлоб. ИП распон:
- Стопка
- reCAPTCHA стопка
+ Стопка
+ reCAPTCHA стопка
Решите reCAPTCHA стопку
Црна
Сви
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 89d51493e..e130ae1de 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -186,8 +186,8 @@
Ange en hämtningsmapp senare i inställningar
Denna tillåtelse behövs för att
\nöppna i popup-läge
- reCAPTCHA
- reCAPTCHA utmaning
+ reCAPTCHA
+ reCAPTCHA utmaning
reCAPTCHA utmaning begärd
Nedladdning
Tillåtna tecken i filnamn
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index c6603382d..ee070eb81 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -124,8 +124,8 @@
B
Bu izin, açılır pencere modunda
\naçmak için gereklidir
- reCAPTCHA
- reCAPTCHA formu
+ reCAPTCHA
+ reCAPTCHA formu
reCAPTCHA formu istendi
Arka plan
Açılır pencere
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 6aea1ad79..ef5dbee53 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -184,7 +184,7 @@
Помилковий URL або немає доступу в Інтернет
Цей дозвіл потрібен для перегляду
\nу віконному режимі
- reCAPTCHA
+ reCAPTCHA
Завантаження
Допустимі символи у іменах файлів
Недопустимі символи замінити на цей
@@ -256,7 +256,7 @@
- %s переглядів
Нове завдання
- Перевірка reCAPTCHA
+ Перевірка reCAPTCHA
Запит на перевірку reCAPTCHA
© %1$s, %2$s під %3$s
Учасники
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 724c9c3ed..ba8aa6b82 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -230,8 +230,8 @@
کلپ بورڈ میں کاپی کریں
براہ کرم بعد میں ترتیبات میں ڈاؤن لوڈ فولڈر کی وضاحت رکھیں
پوپ اپ موڈ میں کھولنے کیلئے اس اجازت کی ضرورت ہے
- reCAPTCHA
- reCAPTCHA چیلنج
+ reCAPTCHA
+ reCAPTCHA چیلنج
reCAPTCHA چیلینج کی درخواست کی گئی
ڈاؤن لوڈ
فائل ناموں میں حروف کی اجازت ہے
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index ab0983e7a..bfde056b0 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -135,8 +135,8 @@
Chọn một thư mục tải về có sẵn trong cài đặt
Cần quyền này để
\nmở trong chế độ popup
- ReCAPTCHA
- reCAPTCHA
+ ReCAPTCHA
+ reCAPTCHA
Yêu cầu reCAPTCHA
Giới thiệu về NewPipe
Cài đặt
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 9aa4b9245..0282e6c92 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -117,8 +117,8 @@
无法加载图像
应用/界面已崩溃
原因:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:
- reCAPTCHA
- reCAPTCHA 验证
+ reCAPTCHA
+ reCAPTCHA 验证
需要 reCAPTCHA 验证
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index 3294094dc..20b14d7ea 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -120,8 +120,8 @@
事件:\\n請求:\\n內容語言:\\n服務:\\nGMT 時間:\\nPackage:\\n版本:\\n作業系統版本:
K
M
- reCAPTCHA
- reCAPTCHA 挑戰
+ reCAPTCHA
+ reCAPTCHA 挑戰
畫中畫模式需要此權限
需完成 reCAPTCHA 挑戰
啟用此選項將導致某些解像度的影片失去聲音
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 6cb16623f..388f4a8cd 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -136,8 +136,8 @@
已複製至剪貼簿
稍後請在設定中選擇下載資料夾
使用懸浮視窗模式需要此權限
- reCAPTCHA 驗證
- reCAPTCHA 驗證
+ reCAPTCHA 驗證
+ reCAPTCHA 驗證
已請求 reCAPTCHA 驗證
懸浮視窗
直播
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e1b2cc0a4..56ecc3356 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -326,10 +326,11 @@
MD5
SHA-1
- reCAPTCHA
- reCAPTCHA challenge
+
+ reCAPTCHA
+ reCAPTCHA challenge
+ Press \"Done\" when solved
reCAPTCHA challenge requested
-
Download
Allowed characters in filenames
From a3d8848825d52226479f7d14d5ddbb7c0d3bf605 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Wed, 29 Jan 2020 18:44:46 +0100
Subject: [PATCH 0254/1194] Add "Done" drawable (only white since it is used on
toolbar)
---
app/src/main/res/drawable/ic_done_white_24dp.xml | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 app/src/main/res/drawable/ic_done_white_24dp.xml
diff --git a/app/src/main/res/drawable/ic_done_white_24dp.xml b/app/src/main/res/drawable/ic_done_white_24dp.xml
new file mode 100644
index 000000000..cab2aed1a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_done_white_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
From daa4fd510320f2ee8a898a38b3851d6408e50a93 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Wed, 29 Jan 2020 19:36:57 +0100
Subject: [PATCH 0255/1194] Fix ReCaptchaActivity crash and save cookies
correctly
---
.../org/schabi/newpipe/ReCaptchaActivity.java | 155 ++++++++++--------
1 file changed, 86 insertions(+), 69 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index 0a2d51b53..533379dbb 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -1,6 +1,5 @@
package org.schabi.newpipe;
-import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build;
@@ -9,12 +8,18 @@ import androidx.core.app.NavUtils;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
+
+import android.util.Log;
+import android.view.Menu;
import android.view.MenuItem;
import android.webkit.CookieManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
/*
* Created by beneth on 06.12.16.
*
@@ -37,18 +42,17 @@ import android.webkit.WebViewClient;
public class ReCaptchaActivity extends AppCompatActivity {
public static final int RECAPTCHA_REQUEST = 10;
public static final String RECAPTCHA_URL_EXTRA = "recaptcha_url_extra";
-
public static final String TAG = ReCaptchaActivity.class.toString();
public static final String YT_URL = "https://www.youtube.com";
- private String url;
+ private String foundCookies = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recaptcha);
- url = getIntent().getStringExtra(RECAPTCHA_URL_EXTRA);
+ String url = getIntent().getStringExtra(RECAPTCHA_URL_EXTRA);
if (url == null || url.isEmpty()) {
url = YT_URL;
}
@@ -60,26 +64,24 @@ public class ReCaptchaActivity extends AppCompatActivity {
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
- ActionBar actionBar = getSupportActionBar();
- if (actionBar != null) {
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setTitle(R.string.reCaptcha_title);
- actionBar.setDisplayShowTitleEnabled(true);
- }
-
WebView myWebView = findViewById(R.id.reCaptchaWebView);
// Enable Javascript
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
- ReCaptchaWebViewClient webClient = new ReCaptchaWebViewClient(this);
- myWebView.setWebViewClient(webClient);
+ myWebView.setWebViewClient(new WebViewClient() {
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ super.onPageFinished(view, url);
+ handleCookies(CookieManager.getInstance().getCookie(url));
+ }
+ });
// Cleaning cache, history and cookies from webView
myWebView.clearCache(true);
myWebView.clearHistory();
- android.webkit.CookieManager cookieManager = CookieManager.getInstance();
+ android.webkit.CookieManager cookieManager = CookieManager .getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.removeAllCookies(aBoolean -> {});
} else {
@@ -89,74 +91,89 @@ public class ReCaptchaActivity extends AppCompatActivity {
myWebView.loadUrl(url);
}
- private class ReCaptchaWebViewClient extends WebViewClient {
- private final Activity context;
- private String mCookies;
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ boolean ret = super.onCreateOptionsMenu(menu);
- ReCaptchaWebViewClient(Activity ctx) {
- context = ctx;
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setHomeAsUpIndicator(getResources().getDrawable(R.drawable.ic_done_white_24dp));
+ actionBar.setTitle(R.string.title_activity_recaptcha);
+ actionBar.setSubtitle(R.string.subtitle_activity_recaptcha);
}
- @Override
- public void onPageStarted(WebView view, String url, Bitmap favicon) {
- // TODO: Start Loader
- super.onPageStarted(view, url, favicon);
- }
+ return ret;
+ }
- @Override
- public void onPageFinished(WebView view, String url) {
- String cookies = CookieManager.getInstance().getCookie(url);
-
- // TODO: Stop Loader
-
- // find cookies : s_gl & goojf and Add cookies to Downloader
- if (find_access_cookies(cookies)) {
- // Give cookies to Downloader class
- DownloaderImpl.getInstance().setCookies(mCookies);
-
- // Closing activity and return to parent
- setResult(RESULT_OK);
- finish();
- }
- }
-
- private boolean find_access_cookies(String cookies) {
- boolean ret = false;
- String c_s_gl = "";
- String c_goojf = "";
-
- String[] parts = cookies.split("; ");
- for (String part : parts) {
- if (part.trim().startsWith("s_gl")) {
- c_s_gl = part.trim();
- }
- if (part.trim().startsWith("goojf")) {
- c_goojf = part.trim();
- }
- }
- if (c_s_gl.length() > 0 && c_goojf.length() > 0) {
- ret = true;
- //mCookies = c_s_gl + "; " + c_goojf;
- // Youtube seems to also need the other cookies:
- mCookies = cookies;
- }
-
- return ret;
- }
+ @Override
+ public void onBackPressed() {
+ saveCookiesAndFinish();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
- case android.R.id.home: {
- Intent intent = new Intent(this, org.schabi.newpipe.MainActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- NavUtils.navigateUpTo(this, intent);
+ case android.R.id.home:
+ saveCookiesAndFinish();
return true;
- }
default:
return false;
}
}
+
+ private void saveCookiesAndFinish() {
+ if (!foundCookies.isEmpty()) {
+ // Give cookies to Downloader class
+ DownloaderImpl.getInstance().setCookies(foundCookies);
+ setResult(RESULT_OK);
+ }
+
+ Intent intent = new Intent(this, org.schabi.newpipe.MainActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ NavUtils.navigateUpTo(this, intent);
+ }
+
+
+
+ private void handleCookies(@Nullable String cookies) {
+ if (MainActivity.DEBUG) Log.d(TAG, "handleCookies: cookies=" + (cookies == null ? "null" : cookies));
+ if (cookies == null) return;
+
+ addYoutubeCookies(cookies);
+ // add other methods to extract cookies here
+ }
+
+ private void addYoutubeCookies(@Nonnull String cookies) {
+ String c_s_gl = "";
+ String c_goojf = "";
+
+ String[] parts = cookies.split(";");
+ for (String part : parts) {
+ String trimmedPart = part.trim();
+ if (trimmedPart.startsWith("s_gl")) {
+ c_s_gl = trimmedPart;
+ }
+ if (trimmedPart.startsWith("goojf")) {
+ c_goojf = trimmedPart;
+ }
+ }
+ if (c_s_gl.length() > 0 && c_goojf.length() > 0) {
+ // addCookie(c_s_gl);
+ // addCookie(c_goojf);
+ // Youtube seems to also need the other cookies:
+ addCookie(cookies);
+ }
+ }
+
+ private void addCookie(String cookie) {
+ if (foundCookies.isEmpty() || foundCookies.endsWith("; ")) {
+ foundCookies += cookie;
+ } else if (foundCookies.endsWith(";")) {
+ foundCookies += " " + cookie;
+ } else {
+ foundCookies += "; " + cookie;
+ }
+ }
}
From 4e1638f86e75d546154b28714fd1bd2f9a426e9a Mon Sep 17 00:00:00 2001
From: Stypox
Date: Wed, 29 Jan 2020 19:37:43 +0100
Subject: [PATCH 0256/1194] Remove space between "Done" button and
ReCaptchaActivity title
---
app/src/main/res/layout/activity_recaptcha.xml | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/layout/activity_recaptcha.xml b/app/src/main/res/layout/activity_recaptcha.xml
index 411ada498..8e277d0c5 100644
--- a/app/src/main/res/layout/activity_recaptcha.xml
+++ b/app/src/main/res/layout/activity_recaptcha.xml
@@ -14,9 +14,8 @@
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.ActionBar"
- app:titleTextAppearance="@style/Toolbar.Title">
-
-
+ app:titleTextAppearance="@style/Toolbar.Title"
+ app:contentInsetStartWithNavigation="0dp" />
Date: Thu, 30 Jan 2020 21:05:57 +0100
Subject: [PATCH 0257/1194] Improve formatting
---
.../main/java/org/schabi/newpipe/ReCaptchaActivity.java | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index 533379dbb..7bd632f39 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -51,18 +51,17 @@ public class ReCaptchaActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recaptcha);
+ Toolbar toolbar = findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
String url = getIntent().getStringExtra(RECAPTCHA_URL_EXTRA);
if (url == null || url.isEmpty()) {
url = YT_URL;
}
-
// Set return to Cancel by default
setResult(RESULT_CANCELED);
- Toolbar toolbar = findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
WebView myWebView = findViewById(R.id.reCaptchaWebView);
@@ -81,7 +80,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
// Cleaning cache, history and cookies from webView
myWebView.clearCache(true);
myWebView.clearHistory();
- android.webkit.CookieManager cookieManager = CookieManager .getInstance();
+ android.webkit.CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.removeAllCookies(aBoolean -> {});
} else {
From 0cc890a1d1384266916a9382309fcaa3cdbb0115 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sat, 1 Feb 2020 17:53:43 +0100
Subject: [PATCH 0258/1194] Move "Done" button and make it theme conpliant in
ReCaptcha
---
.../java/org/schabi/newpipe/ReCaptchaActivity.java | 12 +++++++-----
app/src/main/res/drawable/ic_done_black_24dp.xml | 9 +++++++++
app/src/main/res/layout/activity_recaptcha.xml | 3 +--
app/src/main/res/menu/menu_recaptcha.xml | 10 ++++++++++
app/src/main/res/values/attrs.xml | 1 +
app/src/main/res/values/strings.xml | 1 +
app/src/main/res/values/styles.xml | 2 ++
7 files changed, 31 insertions(+), 7 deletions(-)
create mode 100644 app/src/main/res/drawable/ic_done_black_24dp.xml
create mode 100644 app/src/main/res/menu/menu_recaptcha.xml
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index 7bd632f39..f2970345f 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -17,6 +17,8 @@ import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
+import org.schabi.newpipe.util.ThemeHelper;
+
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -49,6 +51,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
+ ThemeHelper.setTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recaptcha);
Toolbar toolbar = findViewById(R.id.toolbar);
@@ -92,17 +95,16 @@ public class ReCaptchaActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- boolean ret = super.onCreateOptionsMenu(menu);
+ getMenuInflater().inflate(R.menu.menu_recaptcha, menu);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setHomeAsUpIndicator(getResources().getDrawable(R.drawable.ic_done_white_24dp));
+ actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setTitle(R.string.title_activity_recaptcha);
actionBar.setSubtitle(R.string.subtitle_activity_recaptcha);
}
- return ret;
+ return true;
}
@Override
@@ -114,7 +116,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
- case android.R.id.home:
+ case R.id.menu_item_done:
saveCookiesAndFinish();
return true;
default:
diff --git a/app/src/main/res/drawable/ic_done_black_24dp.xml b/app/src/main/res/drawable/ic_done_black_24dp.xml
new file mode 100644
index 000000000..7affe9ba9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_done_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_recaptcha.xml b/app/src/main/res/layout/activity_recaptcha.xml
index 8e277d0c5..759e1f296 100644
--- a/app/src/main/res/layout/activity_recaptcha.xml
+++ b/app/src/main/res/layout/activity_recaptcha.xml
@@ -14,8 +14,7 @@
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.ActionBar"
- app:titleTextAppearance="@style/Toolbar.Title"
- app:contentInsetStartWithNavigation="0dp" />
+ app:titleTextAppearance="@style/Toolbar.Title"/>
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index c64ed1256..88925a598 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -45,6 +45,7 @@
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 56ecc3356..b16713172 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -331,6 +331,7 @@
reCAPTCHA challenge
Press \"Done\" when solved
reCAPTCHA challenge requested
+ Done
Download
Allowed characters in filenames
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 679d4d1cd..8047ef7f4 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -60,6 +60,7 @@
- @drawable/ic_grid_black_24dp
- @drawable/ic_delete_black_24dp
- @drawable/ic_settings_update_black
+ - @drawable/ic_done_black_24dp
- @color/light_separator_color
- @color/light_contrast_background_color
@@ -129,6 +130,7 @@
- @drawable/ic_delete_white_24dp
- @drawable/ic_pause_white_24dp
- @drawable/ic_settings_update_white
+ - @drawable/ic_done_white_24dp
- @color/dark_separator_color
- @color/dark_contrast_background_color
From 9b09028440b2b12b9dfdac786d6489bdbbff131c Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sat, 1 Feb 2020 17:59:16 +0100
Subject: [PATCH 0259/1194] Try to extract cookies just before closing
recaptcha activity
Even if the page didn't auto-close
---
.../org/schabi/newpipe/ReCaptchaActivity.java | 22 +++++++++++--------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index f2970345f..06094cebd 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -47,6 +47,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
public static final String TAG = ReCaptchaActivity.class.toString();
public static final String YT_URL = "https://www.youtube.com";
+ private WebView webView;
private String foundCookies = "";
@Override
@@ -66,23 +67,23 @@ public class ReCaptchaActivity extends AppCompatActivity {
setResult(RESULT_CANCELED);
- WebView myWebView = findViewById(R.id.reCaptchaWebView);
+ webView = findViewById(R.id.reCaptchaWebView);
// Enable Javascript
- WebSettings webSettings = myWebView.getSettings();
+ WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
- myWebView.setWebViewClient(new WebViewClient() {
+ webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
- handleCookies(CookieManager.getInstance().getCookie(url));
+ handleCookies(url);
}
});
// Cleaning cache, history and cookies from webView
- myWebView.clearCache(true);
- myWebView.clearHistory();
+ webView.clearCache(true);
+ webView.clearHistory();
android.webkit.CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.removeAllCookies(aBoolean -> {});
@@ -90,7 +91,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
cookieManager.removeAllCookie();
}
- myWebView.loadUrl(url);
+ webView.loadUrl(url);
}
@Override
@@ -125,6 +126,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
}
private void saveCookiesAndFinish() {
+ handleCookies(webView.getUrl()); // try to get cookies of unclosed page
if (!foundCookies.isEmpty()) {
// Give cookies to Downloader class
DownloaderImpl.getInstance().setCookies(foundCookies);
@@ -138,8 +140,10 @@ public class ReCaptchaActivity extends AppCompatActivity {
- private void handleCookies(@Nullable String cookies) {
- if (MainActivity.DEBUG) Log.d(TAG, "handleCookies: cookies=" + (cookies == null ? "null" : cookies));
+ private void handleCookies(String url) {
+ String cookies = CookieManager.getInstance().getCookie(url);
+ if (MainActivity.DEBUG) Log.d(TAG, "handleCookies: url=" + url + "; cookies=" + (cookies == null ? "null" : cookies));
+ Log.e(TAG, "handleCookies: url=" + url + "; cookies=" + (cookies == null ? "null" : cookies));
if (cookies == null) return;
addYoutubeCookies(cookies);
From 1bf55c21392090855f2c5e0363e221f92f2827ec Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sat, 1 Feb 2020 18:23:57 +0100
Subject: [PATCH 0260/1194] Remove left-behind Log
---
app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index 06094cebd..8abcd2435 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -143,7 +143,6 @@ public class ReCaptchaActivity extends AppCompatActivity {
private void handleCookies(String url) {
String cookies = CookieManager.getInstance().getCookie(url);
if (MainActivity.DEBUG) Log.d(TAG, "handleCookies: url=" + url + "; cookies=" + (cookies == null ? "null" : cookies));
- Log.e(TAG, "handleCookies: url=" + url + "; cookies=" + (cookies == null ? "null" : cookies));
if (cookies == null) return;
addYoutubeCookies(cookies);
From 38d193899c66a83bc50c4161ea2740048a830073 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sat, 1 Feb 2020 18:58:03 +0000
Subject: [PATCH 0261/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-ru/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 63d0e7699..787c9842e 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -543,4 +543,7 @@
Очистить историю загрузок
Удаление загруженных файлов
Удалено загрузок: %1$s
+ Разрешите отображение поверх приложений
+ Язык интерфейса
+ Как в системе
\ No newline at end of file
From 7568af408a79b526a489696f767078a7dc3a9bf6 Mon Sep 17 00:00:00 2001
From: chr_56
Date: Sun, 2 Feb 2020 09:42:56 +0800
Subject: [PATCH 0262/1194] fix wrong strings in Simplified Chinese
---
app/src/main/res/values-zh-rCN/strings.xml | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 54f58a5bb..d0405b57d 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -38,8 +38,8 @@
稍后
网络错误
- - 视频
- - 视频
+ - %s 个视频
+ - %s 个视频
禁用
后台播放
@@ -90,8 +90,8 @@
重试
存储访问权限已被拒绝
- - %1$s 次观看
- - %1$s 次观看
+ - %s 次观看
+ - %s 次观看
千
百万
@@ -134,6 +134,7 @@
- %s 位订阅者
没有视频
+ 视频
拖动以重新排序
创建
仅删除一个
@@ -468,8 +469,8 @@
显示评论
禁用,以停止显示评论
- - 评论
- - 评论
+ - %s 条评论
+ - %s 条评论
无法加载评论
关闭
From a117e459b04ba5850993384d484a2574610c8170 Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Sun, 2 Feb 2020 12:54:43 +0100
Subject: [PATCH 0263/1194] Use AlertDialog.Builder instead of BookmarkDialog
class for the same look.
Use "rename" string instead of "save" string.
---
.../local/bookmark/BookmarkFragment.java | 30 +++++++-----
.../newpipe/local/dialog/BookmarkDialog.kt | 47 -------------------
app/src/main/res/layout/dialog_bookmark.xml | 34 --------------
app/src/main/res/values/strings.xml | 1 -
4 files changed, 17 insertions(+), 95 deletions(-)
delete mode 100644 app/src/main/java/org/schabi/newpipe/local/dialog/BookmarkDialog.kt
diff --git a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
index ea9655921..761fa4360 100644
--- a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java
@@ -1,9 +1,11 @@
package org.schabi.newpipe.local.bookmark;
import android.app.AlertDialog;
+import android.app.AlertDialog.Builder;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.Log;
+import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
@@ -22,7 +24,6 @@ import org.schabi.newpipe.database.playlist.PlaylistLocalItem;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
import org.schabi.newpipe.local.BaseLocalListFragment;
-import org.schabi.newpipe.local.dialog.BookmarkDialog;
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
import org.schabi.newpipe.local.playlist.RemotePlaylistManager;
import org.schabi.newpipe.report.UserAction;
@@ -254,20 +255,23 @@ public final class BookmarkFragment
}
private void showLocalDialog(PlaylistMetadataEntry selectedItem) {
- BookmarkDialog dialog = new BookmarkDialog(getContext(),
- selectedItem.name, new BookmarkDialog.OnClickListener() {
- @Override
- public void onDeleteClicked() {
+ View dialogView = View.inflate(getContext(), R.layout.dialog_bookmark, null);
+ EditText editText = dialogView.findViewById(R.id.playlist_name_edit_text);
+ editText.setText(selectedItem.name);
+
+ Builder builder = new AlertDialog.Builder(activity);
+ builder.setView(dialogView)
+ .setPositiveButton(R.string.rename_playlist, (dialog, which) -> {
+ changeLocalPlaylistName(selectedItem.uid, editText.getText().toString());
+ })
+ .setNegativeButton(R.string.cancel, null)
+ .setNeutralButton(R.string.delete, (dialog, which) -> {
showDeleteDialog(selectedItem.name,
localPlaylistManager.deletePlaylist(selectedItem.uid));
- }
-
- @Override
- public void onSaveClicked(@NonNull String name) {
- changeLocalPlaylistName(selectedItem.uid, name);
- }
- });
- dialog.show();
+ dialog.dismiss();
+ })
+ .create()
+ .show();
}
private void showDeleteDialog(final String name, final Single deleteReactor) {
diff --git a/app/src/main/java/org/schabi/newpipe/local/dialog/BookmarkDialog.kt b/app/src/main/java/org/schabi/newpipe/local/dialog/BookmarkDialog.kt
deleted file mode 100644
index dd20e88a0..000000000
--- a/app/src/main/java/org/schabi/newpipe/local/dialog/BookmarkDialog.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.schabi.newpipe.local.dialog
-
-import android.app.Dialog
-import android.content.Context
-import android.os.Bundle
-import android.view.Window
-import android.widget.Button
-import android.widget.EditText
-import org.schabi.newpipe.R
-
-class BookmarkDialog(
- context: Context,
- private val playlistName: String,
- val listener: OnClickListener)
- : Dialog(context) {
-
- private lateinit var editText: EditText
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- requestWindowFeature(Window.FEATURE_NO_TITLE)
- setContentView(R.layout.dialog_bookmark)
- initListeners()
- }
-
- private fun initListeners() {
- editText = findViewById(R.id.playlist_name_edit_text);
- editText.setText(playlistName)
-
- findViewById(R.id.bookmark_delete).setOnClickListener {
- listener.onDeleteClicked()
- dismiss()
- }
- findViewById(R.id.bookmark_cancel).setOnClickListener {
- dismiss()
- }
- findViewById(R.id.bookmark_save).setOnClickListener {
- listener.onSaveClicked(editText.text.toString())
- dismiss()
- }
- }
-
- interface OnClickListener {
- fun onDeleteClicked()
- fun onSaveClicked(name: String)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_bookmark.xml b/app/src/main/res/layout/dialog_bookmark.xml
index 798a8f4c8..08bf20610 100644
--- a/app/src/main/res/layout/dialog_bookmark.xml
+++ b/app/src/main/res/layout/dialog_bookmark.xml
@@ -14,38 +14,4 @@
android:layout_margin="10dp"
android:hint="@string/playlist_name_input"/>
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ef012f56d..763eb7426 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -590,7 +590,6 @@
Use SAF
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
- save
App language
System default
From 07c7398a96269ba6aba1a255d55c6e4932b22548 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Sun, 2 Feb 2020 12:18:24 +0000
Subject: [PATCH 0264/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-tr/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index c6603382d..1e703bb55 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -538,4 +538,7 @@
İndirme geçmişini temizle
İndirilen dosyaları sil
%1$s indirme silindi
+ Diğer uygulamaların üzerinde görüntüleme izni ver
+ Uygulama dili
+ Sistem varsayılanı
\ No newline at end of file
From 9f0efdd5440a419d62d7d6b611ed36ae023d0642 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emin=20Tufan=20=C3=87etin?=
Date: Sun, 2 Feb 2020 12:37:45 +0000
Subject: [PATCH 0265/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-tr/strings.xml | 38 +++++++++++++-------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 1e703bb55..51683299d 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -23,14 +23,14 @@
Ses indirme dizini
İndirilen ses dosyaları burada depolanır
Ses dosyaları için indirme dizinini seçin
- Otomatik oynat
- NewPipe başka bir uygulamadan çağrıldığında bir video oynatır
- Varsayılan çözünürlük
+ Kendiliğinden oynat
+ NewPipe başka uygulamadan çağrıldığında video oynatır
+ Öntanımlı çözünürlük
Kodi ile oynat
Kore uygulaması bulunamadı. Yüklensin mi\?
\"Kodi ile oynat\" seçeneğini göster
Kodi ortam merkezi üzerinden video oynatmak için bir seçenek göster
- Varsayılan ses formatı
+ Öntanımlı ses biçimi
Tema
Koyu
Açık
@@ -38,7 +38,7 @@
Sonraki
\'Sonraki\' ve \'Benzer\' videoları göster
Desteklenmeyen URL
- Varsayılan içerik dili
+ Öntanımlı içerik dili
Ses
Video ve ses
Görünüm
@@ -103,14 +103,14 @@
Panoya kopyalandı
Lütfen daha sonra ayarlardan uygun bir indirme dizini belirleyin
İndirme menüsü ayarlanamadı
- Açılır pencere modunda aç
- NewPipe açılır pencere modu
- Varsayılan açılır pencere çözünürlüğü
+ Açılır pencere kipinde aç
+ NewPipe açılır pencere kipi
+ Öntanımlı açılır pencere çözünürlüğü
Yüksek çözünürlükleri göster
Sadece bazı cihazlar 2K/4K video oynatmayı desteklemektedir
- Varsayılan video formatı
+ Öntanımlı video biçimi
Siyah
- Açılır pencere modunda oynatılıyor
+ Açılır pencere kipinde oynatılıyor
Tümü
Kanal
Evet
@@ -122,7 +122,7 @@
b
M
B
- Bu izin, açılır pencere modunda
+ Bu izin, açılır pencere kipinde
\naçmak için gereklidir
reCAPTCHA
reCAPTCHA formu
@@ -245,7 +245,7 @@
Bağışta bulunun
Web sitesi
Daha çok bilgi ve haber için NewPipe web sitesini ziyaret edin.
- Varsayılan içerik ülkesi
+ Öntanımlı içerik ülkesi
Hizmet
Yönlendirmeyi Değiştir
Arka Plana Geç
@@ -340,7 +340,7 @@
\n3. İndirme başlamalı (bu, dışa aktarma dosyasıdır)
URL\'yi veya ID\'nizi yazarak SoundCloud profilini içe aktarın:
\n
-\n1. Web tarayıcısında \"masaüstü modu\" etkinleştirin (site, mobil aygıtlar için mevcut değildir)
+\n1. Web tarayıcısında \"masaüstü kipi\" etkinleştirin (site, mobil aygıtlar için uygun değildir)
\n2. Şu adrese gidin: %1$s
\n3. Sorulduğunda giriş yapın
\n4. Yönlendirildiğiniz profil URL\'sini kopyalayın.
@@ -361,7 +361,7 @@
Bağlantısız (bozulmaya neden olabilir)
İndirilebilecek akış yok
Tercih edilen \'aç\' eylemi
- İçerik açılırken varsayılan eylem — %s
+ İçerik açılırken öntanımlı eylem — %s
Altyazılar
Oynatıcı altyazı metin ölçeğini ve arka plan biçimini değiştirin. Etkili olması için uygulamayı yeniden başlatma gerektirir.
Bu dosyayı oynatmak için herhangi bir uygulama yüklü değil
@@ -411,15 +411,15 @@
Yeni NewPipe sürümü için bildirimler
Harici depolama kullanılamıyor
Harici SD karta indirmek mümkün değil. İndirme dizini konumu sıfırlansın mı\?
- Varsayılan sekmeleri kullanarak, kaydedilen sekmeleri okurken hata
- Varsayılanları geri yükle
- Varsayılanları geri yüklemek istiyor musunuz\?
+ Öntanımlı sekmeler kullanılıyor, kaydedilen sekmeler okunurken hata
+ Öntanımlıları geri yükle
+ Öntanımlıları geri yüklemek istiyor musunuz\?
Abone sayısı mevcut değil
Ana sayfada hangi sekmeler gösterilir
Seçim
Güncellemeler
Yeni bir sürüm mevcut olduğunda uygulama güncellemesi için bir bildirim göster
- Liste görünümü modu
+ Liste görünümü kipi
Liste
Izgara
Otomatik
@@ -505,7 +505,7 @@
- Videolar
- Videolar
- Varsayılan Kiosk
+ Öntanımlı Kiosk
Kimse izlemiyor
- %s izliyor
From 0f22833ad58f165c312dbf0dcb6c6b1ba72ae43b Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sun, 2 Feb 2020 15:52:35 +0100
Subject: [PATCH 0266/1194] Save and restore whether pitch and tempo are
unhooked or not
Fixes #1536
---
.../helper/PlaybackParameterDialog.java | 24 ++++++++++++++-----
app/src/main/res/values/settings_keys.xml | 1 +
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java
index 3ada3a6be..94fb412f7 100644
--- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java
@@ -7,6 +7,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.appcompat.app.AlertDialog;
+
+import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
@@ -219,13 +221,23 @@ public class PlaybackParameterDialog extends DialogFragment {
private void setupHookingControl(@NonNull View rootView) {
unhookingCheckbox = rootView.findViewById(R.id.unhookCheckbox);
if (unhookingCheckbox != null) {
- unhookingCheckbox.setChecked(pitch != tempo);
+ // restore whether pitch and tempo are unhooked or not
+ unhookingCheckbox.setChecked(PreferenceManager.getDefaultSharedPreferences(getContext())
+ .getBoolean(getString(R.string.playback_unhook_key), true));
+
unhookingCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> {
- if (isChecked) return;
- // When unchecked, slide back to the minimum of current tempo or pitch
- final double minimum = Math.min(getCurrentPitch(), getCurrentTempo());
- setSliders(minimum);
- setCurrentPlaybackParameters();
+ // save whether pitch and tempo are unhooked or not
+ PreferenceManager.getDefaultSharedPreferences(getContext())
+ .edit()
+ .putBoolean(getString(R.string.playback_unhook_key), isChecked)
+ .apply();
+
+ if (!isChecked) {
+ // when unchecked, slide back to the minimum of current tempo or pitch
+ final double minimum = Math.min(getCurrentPitch(), getCurrentTempo());
+ setSliders(minimum);
+ setCurrentPlaybackParameters();
+ }
});
}
}
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 1a7d61dae..e46904b6d 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -175,6 +175,7 @@
main_page_content
enable_playback_resume
enable_playback_state_lists
+ playback_unhook_key
app_language_key
enable_lock_screen_video_thumbnail
From 244009a1cd06492518c2159a505dd8e5cc9a0bb6 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sun, 2 Feb 2020 15:54:31 +0100
Subject: [PATCH 0267/1194] Change "Unlink" to "Unhook" in unhook_checkbox
string
"Unlink" is not an english word, and "Unhook" is used everywhere in the code
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 763eb7426..a35cbe804 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -492,7 +492,7 @@
Playback Speed Controls
Tempo
Pitch
- Unlink (may cause distortion)
+ Unhook (may cause distortion)
Fast-forward during silence
Step
Reset
From 6da90961762b92a2d9cae90e4b5879fdf481ce5a Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sun, 2 Feb 2020 21:33:07 +0100
Subject: [PATCH 0268/1194] Fix addYoutubeCookies functions (Yt changed things
lately)
---
.../org/schabi/newpipe/ReCaptchaActivity.java | 21 +++++--------------
1 file changed, 5 insertions(+), 16 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index 8abcd2435..566e1fc76 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -150,28 +150,17 @@ public class ReCaptchaActivity extends AppCompatActivity {
}
private void addYoutubeCookies(@Nonnull String cookies) {
- String c_s_gl = "";
- String c_goojf = "";
-
- String[] parts = cookies.split(";");
- for (String part : parts) {
- String trimmedPart = part.trim();
- if (trimmedPart.startsWith("s_gl")) {
- c_s_gl = trimmedPart;
- }
- if (trimmedPart.startsWith("goojf")) {
- c_goojf = trimmedPart;
- }
- }
- if (c_s_gl.length() > 0 && c_goojf.length() > 0) {
- // addCookie(c_s_gl);
- // addCookie(c_goojf);
+ if (cookies.contains("s_gl=") || cookies.contains("goojf=") || cookies.contains("VISITOR_INFO1_LIVE=")) {
// Youtube seems to also need the other cookies:
addCookie(cookies);
}
}
private void addCookie(String cookie) {
+ if (foundCookies.contains(cookie)) {
+ return;
+ }
+
if (foundCookies.isEmpty() || foundCookies.endsWith("; ")) {
foundCookies += cookie;
} else if (foundCookies.endsWith(";")) {
From b6841158df60b066a0b53fe80f4a780d822c227a Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sun, 2 Feb 2020 21:48:45 +0100
Subject: [PATCH 0269/1194] Remove unused imports and clean up comment style
---
.../java/org/schabi/newpipe/ReCaptchaActivity.java | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index 566e1fc76..d72f729b5 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -1,7 +1,6 @@
package org.schabi.newpipe;
import android.content.Intent;
-import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import androidx.core.app.NavUtils;
@@ -20,7 +19,6 @@ import android.webkit.WebViewClient;
import org.schabi.newpipe.util.ThemeHelper;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
/*
* Created by beneth on 06.12.16.
@@ -63,13 +61,13 @@ public class ReCaptchaActivity extends AppCompatActivity {
url = YT_URL;
}
- // Set return to Cancel by default
+ // set return to Cancel by default
setResult(RESULT_CANCELED);
webView = findViewById(R.id.reCaptchaWebView);
- // Enable Javascript
+ // enable Javascript
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
@@ -81,7 +79,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
}
});
- // Cleaning cache, history and cookies from webView
+ // cleaning cache, history and cookies from webView
webView.clearCache(true);
webView.clearHistory();
android.webkit.CookieManager cookieManager = CookieManager.getInstance();
@@ -128,7 +126,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
private void saveCookiesAndFinish() {
handleCookies(webView.getUrl()); // try to get cookies of unclosed page
if (!foundCookies.isEmpty()) {
- // Give cookies to Downloader class
+ // give cookies to Downloader class
DownloaderImpl.getInstance().setCookies(foundCookies);
setResult(RESULT_OK);
}
@@ -151,7 +149,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
private void addYoutubeCookies(@Nonnull String cookies) {
if (cookies.contains("s_gl=") || cookies.contains("goojf=") || cookies.contains("VISITOR_INFO1_LIVE=")) {
- // Youtube seems to also need the other cookies:
+ // youtube seems to also need the other cookies:
addCookie(cookies);
}
}
From cf377c2591f06d834ee7bbfe54252ec7bf985d32 Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Mon, 3 Feb 2020 10:35:50 +0100
Subject: [PATCH 0270/1194] Fix bug causing crashes when sharing a downloaded
file.
---
.../giga/ui/adapter/MissionAdapter.java | 33 ++++++++++++-------
1 file changed, 21 insertions(+), 12 deletions(-)
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index 852c29835..c2d3a9b9e 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -341,17 +341,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb
if (BuildConfig.DEBUG)
Log.v(TAG, "Mime: " + mimeType + " package: " + BuildConfig.APPLICATION_ID + ".provider");
- Uri uri;
-
- if (mission.storage.isDirect()) {
- uri = FileProvider.getUriForFile(
- mContext,
- BuildConfig.APPLICATION_ID + ".provider",
- new File(URI.create(mission.storage.getUri().toString()))
- );
- } else {
- uri = mission.storage.getUri();
- }
+ Uri uri = resolveShareableUri(mission);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
@@ -379,11 +369,30 @@ public class MissionAdapter extends Adapter implements Handler.Callb
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType(resolveMimeType(mission));
- intent.putExtra(Intent.EXTRA_STREAM, mission.storage.getUri());
+ intent.putExtra(Intent.EXTRA_STREAM, resolveShareableUri(mission));
+ intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
mContext.startActivity(Intent.createChooser(intent, null));
}
+ /**
+ * Returns an Uri which can be shared to other applications.
+ *
+ * @see
+ * https://stackoverflow.com/questions/38200282/android-os-fileuriexposedexception-file-storage-emulated-0-test-txt-exposed
+ */
+ private Uri resolveShareableUri(Mission mission) {
+ if (mission.storage.isDirect()) {
+ return FileProvider.getUriForFile(
+ mContext,
+ BuildConfig.APPLICATION_ID + ".provider",
+ new File(URI.create(mission.storage.getUri().toString()))
+ );
+ } else {
+ return mission.storage.getUri();
+ }
+ }
+
private static String resolveMimeType(@NonNull Mission mission) {
String mimeType;
From 46c1155c6451e0c4797ca1cafa815765bcc94282 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emin=20Tufan=20=C3=87etin?=
Date: Sun, 2 Feb 2020 12:43:18 +0000
Subject: [PATCH 0271/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-tr/strings.xml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 51683299d..35168b592 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -107,7 +107,7 @@
NewPipe açılır pencere kipi
Öntanımlı açılır pencere çözünürlüğü
Yüksek çözünürlükleri göster
- Sadece bazı cihazlar 2K/4K video oynatmayı desteklemektedir
+ Yalnızca bazı aygıtlar 2K/4K video oynatmayı desteklemektedir
Öntanımlı video biçimi
Siyah
Açılır pencere kipinde oynatılıyor
@@ -360,7 +360,7 @@
Ses yüksekliği
Bağlantısız (bozulmaya neden olabilir)
İndirilebilecek akış yok
- Tercih edilen \'aç\' eylemi
+ Yeğlenen \'aç\' eylemi
İçerik açılırken öntanımlı eylem — %s
Altyazılar
Oynatıcı altyazı metin ölçeğini ve arka plan biçimini değiştirin. Etkili olması için uygulamayı yeniden başlatma gerektirir.
@@ -454,7 +454,7 @@
Tamamlanan indirmeleri temizle
Durdur
Azami deneme sayısı
- İndirmeyi iptal etmeden önce maksimum deneme sayısı
+ İndirmeyi iptal etmeden önce azami deneme sayısı
Kotalı bağlantılarda durdur
Bazı indirmelerin bekletilememesine rağmen mobil veriye geçerken kullanışlıdır
Olaylar
@@ -490,12 +490,12 @@
İndirmeleri başlat
İndirmeleri duraklat
Nereye indirileceğini sor
- Her indirme için nereye kaydedileceği sorulacak
+ Her indirmede nereye kaydedileceği sorulacak
Her indirme için nereye kaydedileceği sorulacak.
-\nEğer bir harici SD karta indirmek istiyorsanız DEÇ\'i seçin
+\nEğer harici SD karta indirmek istiyorsanız DEÇ\'i seçin
DEÇ\'i kullan
Depolama Erişimi Çerçevesi harici SD karta indirmelere izin verir.
-\nNot: Bazı cihazlar uyumlu değildir
+\nNot: Bazı aygıtlar uyumlu değildir
Oynatım konumlarını sil
Tüm oynatım konumlarını siler
Tüm oynatım konumları silinsin mi\?
@@ -532,7 +532,7 @@
Otomatik oluşturulan (yükleyen bulunamadı)
kurtarılıyor
Bu indirme kurtarılamıyor
- Bir örnek seçin
+ Oluşum seçin
Kilit ekranı video küçük resmini etkinleştir
Arka plan oynatıcıyı kullanırken kilit ekranında bir video küçük resmi görüntülenecektir
İndirme geçmişini temizle
@@ -540,5 +540,5 @@
%1$s indirme silindi
Diğer uygulamaların üzerinde görüntüleme izni ver
Uygulama dili
- Sistem varsayılanı
+ Sistem öntanımlısı
\ No newline at end of file
From 2c27f784f70c51128daa02879c12fde2b5939d24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Mon, 3 Feb 2020 16:16:03 +0000
Subject: [PATCH 0272/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-tr/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 35168b592..7f6a9a8e2 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -502,8 +502,8 @@
Etkili olması için indirme dizinlerini değiştirin
Hizmeti değiştir, şu anda seçili olan:
- - Videolar
- - Videolar
+ - %s video
+ - %s video
Öntanımlı Kiosk
Kimse izlemiyor
From b5684ee7df6125829163df7f33e1e1c5c6b14a16 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Sun, 2 Feb 2020 19:14:55 +0000
Subject: [PATCH 0273/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-eo/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index fe63caf1b..206f7bdd7 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -537,4 +537,7 @@
Forviŝi la historion de elŝutoj
Forviŝi elŝutitajn dosierojn
%1$s elŝutoj forviŝitaj
+ Doni la permeson por afiŝiĝi supre aliaj apoj
+ Lingvo de la apo
+ Sistema lingvo
\ No newline at end of file
From bb8bcf3c33ac35da176c0ec29a557af881d0adf3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vojt=C4=9Bch=20=C5=A0amla?=
Date: Sun, 2 Feb 2020 23:39:08 +0000
Subject: [PATCH 0274/1194] Translated using Weblate (Czech)
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-cs/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 548358473..200d18dc2 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -547,4 +547,7 @@ otevření ve vyskakovacím okně
Smazat historii stahování
Smazat stažené soubory
Smazat %1$s stahování
+ Souhlasit se zobrazením přes jiné aplikace
+ Jazyk aplikace
+ Jazyk systému
\ No newline at end of file
From ed9c85b25a49802365451541ad61eb454037b5c3 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Sat, 1 Feb 2020 20:09:10 +0000
Subject: [PATCH 0275/1194] Translated using Weblate (Hebrew)
Currently translated at 99.8% (529 of 530 strings)
---
app/src/main/res/values-he/strings.xml | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 7a1338f60..b27e37fe4 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -167,10 +167,10 @@
אין סרטונים
- - סרטון %s
- - %s סרטונים
- - %s סרטונים
- - %s סרטונים
+ - סרטון
+ - סרטונים
+ - סרטונים
+ - סרטונים
התחלה
השהיה
@@ -550,4 +550,7 @@
מחיקת היסטוריית ההורדות
למחוק את הקבצים שהורדתי
נמחקו %1$s הורדות
+ יש להעניק הרשאה להציג על גבי יישומונים אחרים
+ שפת היישומון
+ בררת המחדל של המערכת
\ No newline at end of file
From 2cceb048e3672189cad616a6eaaa8b5e89162cf3 Mon Sep 17 00:00:00 2001
From: WaldiS
Date: Sat, 1 Feb 2020 17:18:57 +0000
Subject: [PATCH 0276/1194] Translated using Weblate (Polish)
Currently translated at 99.8% (529 of 530 strings)
---
app/src/main/res/values-pl/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 4d2b38b5f..ed6ba75d7 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -544,4 +544,7 @@
Wyczyść historię pobierania
Usuń pobrane pliki
Usunięte %1$s pobrania
+ Zezwól na wyświetlanie w innych aplikacjach
+ Język aplikacji
+ Domyślny systemu
\ No newline at end of file
From 5d5c2ae2ed4d29048123689d8ae55083d095db26 Mon Sep 17 00:00:00 2001
From: JoC
Date: Mon, 3 Feb 2020 15:53:51 +0000
Subject: [PATCH 0277/1194] Translated using Weblate (Spanish)
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-es/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 5b3265cd7..7de8cc5ca 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -537,4 +537,7 @@
Limpiar historial de descargas
Eliminar archivos descargados
Eliminadas %1$s descargas
+ Dar permisos para que se muestre por sobre otras apps
+ Idioma de la app
+ Predeterminado del sistema
\ No newline at end of file
From 0a2374892ce8f97ad1eea73ce72c66cd8d24fd4a Mon Sep 17 00:00:00 2001
From: B0pol
Date: Sun, 2 Feb 2020 19:16:50 +0000
Subject: [PATCH 0278/1194] Translated using Weblate (French)
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-fr/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 5f9dc0b18..b0c83592f 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -538,4 +538,7 @@
Effacer l\'historique de téléchargement
Supprimer les fichiers téléchargés
%1$s téléchargements supprimés
+ Autoriser la superposition d\'applis
+ Langue de l\'application
+ Langue du système
\ No newline at end of file
From 9560cf59bed360738e4c988b839367dcf6fdc072 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isak=20Holmstr=C3=B6m?=
Date: Mon, 3 Feb 2020 15:24:26 +0000
Subject: [PATCH 0279/1194] Translated using Weblate (Swedish)
Currently translated at 87.9% (466 of 530 strings)
---
app/src/main/res/values-sv/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 90e976823..b2e7ac050 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -467,4 +467,5 @@
Töm data
Snabb spola -framåt/-bakåt
Aktivera video på låsskärmen
+ När bakgrundsspelaren används så visas videon på låsskärmen
\ No newline at end of file
From 6941917c7556b7e45bab0ab5c90da20cdce55021 Mon Sep 17 00:00:00 2001
From: Marian Hanzel
Date: Sun, 2 Feb 2020 17:14:37 +0000
Subject: [PATCH 0280/1194] Translated using Weblate (Slovak)
Currently translated at 98.5% (522 of 530 strings)
---
app/src/main/res/values-sk/strings.xml | 97 ++++++++++++++++++--------
1 file changed, 67 insertions(+), 30 deletions(-)
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 6624f7a3b..5a453370a 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -17,11 +17,11 @@
Použiť externý prehrávač videa
Použiť externý prehrávač zvuku
Prevzaté video ukladať do
- Cesta kam sa budú ukladať prevzaté videá
- Vložte cestu kam sa budú ukladať videá
- Prevzaté audio ukladať do
+ Tu sú uložené stiahnuté video súbory
+ Vyberte adresár pre ukladanie video súborov
+ Adresár pre stiahnuté audio
Vložte cestu kam sa budú ukladať zvukové súbory
- Cesta kam sa bude ukladať prevzaté audio
+ Tu sú uložené stiahnuté audio súbory
Štandardné rozlíšenie
Prehrať cez Kodi
Aplikácia Kore nie je nainštalovaná. Chcete ju nainštalovať?
@@ -49,7 +49,7 @@
Nemožno analyzovať webovú stránku
Obsah nie je dostupný
Náhľad videa
- Náhľad videa
+ Prehrať video, dĺžka:
Náhľad avataru uploadera
Lajky
Dislajky
@@ -66,7 +66,7 @@
NAŽIVO
Nemožno kompletne zanalyzovať web
Nemožno nastaviť menu preberania
- Toto je ŽIVÉ VYSIELANIE, ktoré ešte nie je podporované.
+ Živé vysielanie zatiaľ nie je podporované
Nemožno získať žiadny stream
Pardon, toto sa nemalo stať.
Nahlásiť chybu mejlom
@@ -99,7 +99,7 @@
Dotykom zobraziť detaily
Čakajte prosím…
Skopírované do schránky
- Vyberte si dostupný adresár na preberanie
+ Priečinok na sťahovanie zadefinujte prosím neskôr v nastaveniach
Prevzaté
Prevzaté
Hlásenie o chybe
@@ -111,7 +111,7 @@
Čierna
Všetko
Kanál
- K
+ k
M
B
Požiadavka reCAPTCHA
@@ -183,7 +183,7 @@
História
Vyhľadávané
Pozreté
- História je zakázaná
+ História je vypnutá
História
História je prázdna
História bola vyčistená
@@ -213,7 +213,7 @@
- %s videí
Položka bola odstránená
- Nebol nájdený žiadny prehrávač pre stream (môžete si nainštalovať napr. VLC)
+ Nebol nájdený žiadny prehrávač pre stream (môžete si nainštalovať napr. VLC).
Stiahnuť súbor stream
Zobraziť info
Uložené zoznamy
@@ -266,7 +266,7 @@
Novinky
Kanál
Vyberte si kanál
- Žiadny kanál nie je odoberaný
+ Zatiaľ nemáte žiadne odbery kanálov
Vyberte si kiosk
Export je dokončený
Import je dokončený
@@ -285,9 +285,9 @@
Podržaním pridať do zoznamu
Zaradiť na pozadie
Zaradiť do mini okna
- Video odtiaľto
- Zvuk odtiaľto
- Mini okno odtiaľto
+ Prehrať odtiaľto
+ Prehrať (zvuk) odtiaľto na pozadí
+ Prehrať odtiaľto v mini-okne
Otvoriť zásuvku
Zavrieť zásuvku
Prehrávač videa
@@ -296,7 +296,7 @@
Vždy sa opýtať
Získavajú sa informácie…
Načítanie požadované obsahu
- Vytvoriť nový zoznam skladieb
+ Nový zoznam skladieb
Vymazať
Premenovať
Názov
@@ -304,11 +304,11 @@
Nastaviť ako miniatúru zoznamu skladieb
Záložka zoznamu skladieb
Odstrániť Záložku
- Chcete odstrániť tento zoznam skladieb?
+ Odstrániť tento zoznam skladieb\?
Zoznam skladieb vytvorený
- Pridané do zoznamu skladieb
- Miniatúra zoznamu skladieb bola zmenená
- Nemožno odstrániť zoznam skladieb
+ V playliste
+ Miniatúra zoznamu skladieb bola zmenená.
+ Zoznam skladieb nemožno zmazať.
Bez titulkov
Prispôsobiť
Vyplniť
@@ -316,7 +316,7 @@
Používať rýchly posun
Rýchly posun umožňuje prejsť na novú pozíciu rýchlejšie, ale s menšou presnosťou
Načítanie miniatúr
- Vypnutím tejto funkcie sa nebudú vytvárať miniatúry a tým sa ušetrí miesto a pamäť. Zmena nastavení spôsobuje vyčistenie vyrovnávacej pamäte
+ Vypnutím tejto funkcie sa nebudú vytvárať miniatúry a tým sa ušetrí miesto a pamäť. Zmena nastavení spôsobuje vyčistenie vyrovnávacej pamäte.
Vyrovnávacia pamäť obrázkov vymazaná
Vymazať metadáta uložené vo vyrovnávacej pamäti
Odstrániť všetky údaje webových stránok vo vyrovnávacej pamäti
@@ -337,12 +337,12 @@
Predvolená akcia pri otváraní obsahu — %s
Automaticky vygenerované
Titulky
- Upravte mierku textu titulkov a štýly pozadia. Vyžaduje reštart prehrávača
+ Upravte mierku textu titulkov prehrávača a štýly pozadia. Vyžaduje sa reštart aplikácie.
Povoliť službu LeakCanary
Monitorovanie pretečenia pamäte môže spôsobiť, že aplikácia nebude reagovať
Nahlásiť mimo-cyklické chyby
Vynútiť hlásenie výnimiek nedoručiteľných Rx mimo časového cyklu fragmentov alebo aktivity po zneškodnení
- Import/Export
+ Import/export
Import
\n
Importovať z
@@ -376,12 +376,12 @@
"Spomalenie (môže spôsobovať skreslenie)"
Predvolené
Vymazať históriu pozretí
- Odstráni históriu prehrávaných streamov
- Vymazať celú históriu pozretí.
+ Odstráni históriu a pozície prehrávaných streamov
+ Vymazať celú históriu pozretí\?
História pozretí bola vymazaná.
Vymazať históriu vyhľadávania
Vymaže históriu vyhľadávania kľúčových slov
- Vymazať celú históriu vyhľadávania.
+ Vymazať celú históriu vyhľadávania\?
História vyhľadávaní bola vymazaná.
1 položka bola vymazaná.
"NewPipe je slobodný softvér pod licenciou copyleft. Môžete ho používať, študovať a vylepšovať ako len chcete. Konkrétne ho môžete šíriť a/alebo upravovať pod podmienkami Všeobecnej verejnej licencie GNU, ako ju publikuje Free Software Foundation, buď verzia 3 licencie, alebo (podľa vašej voľby) ktorákoľvek neskoršia verzia."
@@ -420,7 +420,7 @@
Oznámenie o aktualizácii aplikácie
Upozornenia na novú verziu NewPipe
Externé úložisko je nedostupné
- Sťahovanie na externú SD kartu ešte nie je možné. Obnoviť umiestnenie priečinka na prevzatie\?
+ Sťahovanie na externú SD kartu nie je možné. Obnoviť umiestnenie priečinka na sťahovanie\?
Chyba pri načítavaní uložených kariet, použijú sa predvolené
Obnoviť predvolené nastavenia
Chcete obnoviť predvolené hodnoty\?
@@ -454,8 +454,8 @@
Sťahovanie s týmto názvom už prebieha
Zobraziť chybu
Kód
- Súbor sa nedá vytvoriť
- Cieľový priečinok nie je možné vytvoriť
+ Adresár nemožno vytvoriť
+ Nemožno vytvoriť súbor
Povolenie odmietnuté systémom
Bezpečnostné pripojenie zlyhalo
Server sa nepodarilo nájsť
@@ -469,7 +469,7 @@
Maximum opakovaní
Maximálny počet pokusov pred zrušením stiahnutia
Pozastaviť pri prechode na mobilné dáta
- Preberania, ktoré nie je možné pozastaviť, budú reštartované
+ Je to užitočné pri prechode na mobilné dáta, niektoré sťahovania však nemožno pozastaviť
Zobraziť komentáre
Vypnutím tejto funkcie sa nebudú zobrazovať komentáre
Automatické prehrávanie
@@ -494,7 +494,7 @@
Máš plnú pamäť
Nemožno pokračovať, súbor bol vymazaný
Spojenie vypršalo
- Ste si istý\?
+ Chcete vymazať históriu sťahovania alebo odstrániť všetky stiahnuté súbory\?
Limitovať počet položiek pri sťahovaní
Súbory sa budú sťahovať jeden po druhom
Spustite sťahovanie
@@ -512,4 +512,41 @@
Zmeniť miesto pre stiahnuté súbory
Prepnúť službu, práve vybraté:
Predvolený kiosk
+ Toto nikto nesleduje
+
+ - %s sleduje
+ - %s sledujú
+ - %s sleduje
+
+ Toto nikto nepočúva
+
+ - %s poslucháč
+ - %s poslucháči
+ - %s poslucháčov
+
+ Zmena jazyka sa prejaví po reštarte aplikácie.
+ Dĺžka rýchleho pretáčania
+ Inštancie PeerTube
+ Vyberte si svoje obľúbené inštancie PeerTube
+ Nájdite najvyhovujúcejšie inštancie na %s
+ Pridať inštanciu
+ Vložiť URL inštancie
+ Nepodarilo sa overiť inštanciu
+ Podporované sú iba adresy URL s HTTPS
+ Inštancia už existuje
+ Miestne
+ Nedávno pridané
+ Najobľúbenejšie
+ Automaticky generované (používateľ sa nenašiel)
+ obnovovanie
+ Sťahovanie nemožno obnoviť
+ Vyberte inštanciu
+ Náhľad videa na uzamknutej obrazovke
+ Pri videu na pozadí sa na zamknutej obrazovke zobrazí náhľad
+ Vymazať históriu sťahovania
+ Vymazať stiahnuté súbory
+ %1$s odstránených
+ Súhlas pre zobrazenie cez ďalšie aplikácie
+ Jazyk aplikácie
+ Predvolený
\ No newline at end of file
From 7009dc574f71010656b65f92640e89ebfd961b86 Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Sat, 1 Feb 2020 20:16:45 +0000
Subject: [PATCH 0281/1194] Translated using Weblate (Kurdish)
Currently translated at 99.8% (529 of 530 strings)
---
app/src/main/res/values-ku/strings.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 9a061bab7..91561066d 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -541,4 +541,7 @@
سڕینەوەی مێژووی داگرتن
سڕینەوەی فایلە داگیراوەکان
%1$ لە داگرتنەکان سڕانەوە
+ دەسەڵاتی پێبدە بۆ پیشاندان لەسەرووی ئەپەکانیترەوە
+ زمانی ئەپ
+ بنەڕەتی سیستەم
\ No newline at end of file
From 0f0a367174e0efba36ddf28ae9b7c6fdc2e4d413 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Sun, 2 Feb 2020 03:39:50 +0000
Subject: [PATCH 0282/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (530 of 530 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index b82736f90..438d4cc45 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -498,8 +498,8 @@
變更下載資料夾以使其生效
切換服務,目前已選取:
- - 影片
-
+ - %s 影片
+
預設 Kiosk
沒有人在看
@@ -534,4 +534,7 @@
清除下載歷史紀錄
刪除已下載的檔案
已刪除 %1$s 個下載
+ 給予顯示在其他應用程式上層的權限
+ 應用程式語言
+ 系統預設值
\ No newline at end of file
From af411a61ae62b37565117957fdecdfdbc855b07d Mon Sep 17 00:00:00 2001
From: Harshal Lele
Date: Tue, 4 Feb 2020 16:40:57 +0530
Subject: [PATCH 0283/1194] added ability to copy comments on long press
---
.../holder/CommentsMiniInfoItemHolder.java | 29 ++++++++++++++++++-
app/src/main/res/values/settings_keys.xml | 1 +
app/src/main/res/values/strings.xml | 1 +
app/src/main/res/xml/content_settings.xml | 6 ++++
4 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
index 4d94ec392..4b1d1bdae 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
@@ -1,9 +1,16 @@
package org.schabi.newpipe.info_list.holder;
-import androidx.appcompat.app.AppCompatActivity;
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.preference.PreferenceManager;
import android.text.util.Linkify;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AppCompatActivity;
import org.jsoup.helper.StringUtil;
import org.schabi.newpipe.R;
@@ -120,6 +127,26 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
itemBuilder.getOnCommentsSelectedListener().selected(item);
}
});
+
+ boolean copyCommentOnLongPress = PreferenceManager.getDefaultSharedPreferences(
+ itemBuilder.getContext()).getBoolean(itemBuilder.getContext().getString(R.string.copy_comment_long_press),
+ false);
+
+ if(copyCommentOnLongPress){
+
+ itemView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
+
+ ClipboardManager clipboardManager = (ClipboardManager) itemBuilder.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
+ clipboardManager.setPrimaryClip(ClipData.newPlainText(null,itemContentView.getText()));
+ Toast.makeText(itemBuilder.getContext(), R.string.msg_copied, Toast.LENGTH_SHORT).show();
+ return true;
+
+ }
+ });
+
+ }
}
private void ellipsize() {
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 1a7d61dae..90edd0ef8 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -159,6 +159,7 @@
show_play_with_kodi
show_next_video
show_comments
+ copy_comment_long_press
stream_info_selected_tab
show_hold_to_append
en
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index dab9bde10..ca5a7527f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -76,6 +76,7 @@
Load thumbnails
Show comments
Disable to stop showing comments
+ Copy comment on long press
Turn off to prevent loading thumbnails, saving data and memory usage. Changes clear both in-memory and on-disk image cache.
Image cache wiped
Wipe cached metadata
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index 197c14487..d1080bb4d 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -65,6 +65,12 @@
android:title="@string/show_comments_title"
android:summary="@string/show_comments_summary"/>
+
+
Date: Tue, 4 Feb 2020 18:01:39 +0530
Subject: [PATCH 0284/1194] removed settings entry
---
.../holder/CommentsMiniInfoItemHolder.java | 26 +++++++------------
app/src/main/res/values/settings_keys.xml | 1 -
app/src/main/res/values/strings.xml | 1 -
app/src/main/res/xml/content_settings.xml | 5 ----
4 files changed, 10 insertions(+), 23 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
index 4b1d1bdae..592378dc0 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
@@ -3,7 +3,6 @@ package org.schabi.newpipe.info_list.holder;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
-import android.preference.PreferenceManager;
import android.text.util.Linkify;
import android.view.View;
import android.view.ViewGroup;
@@ -128,25 +127,20 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
}
});
- boolean copyCommentOnLongPress = PreferenceManager.getDefaultSharedPreferences(
- itemBuilder.getContext()).getBoolean(itemBuilder.getContext().getString(R.string.copy_comment_long_press),
- false);
- if(copyCommentOnLongPress){
+ itemView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
- itemView.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View view) {
+ ClipboardManager clipboardManager = (ClipboardManager) itemBuilder.getContext()
+ .getSystemService(Context.CLIPBOARD_SERVICE);
+ clipboardManager.setPrimaryClip(ClipData.newPlainText(null,itemContentView.getText()));
+ Toast.makeText(itemBuilder.getContext(), R.string.msg_copied, Toast.LENGTH_SHORT).show();
+ return true;
- ClipboardManager clipboardManager = (ClipboardManager) itemBuilder.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
- clipboardManager.setPrimaryClip(ClipData.newPlainText(null,itemContentView.getText()));
- Toast.makeText(itemBuilder.getContext(), R.string.msg_copied, Toast.LENGTH_SHORT).show();
- return true;
+ }
+ });
- }
- });
-
- }
}
private void ellipsize() {
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 90edd0ef8..1a7d61dae 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -159,7 +159,6 @@
show_play_with_kodi
show_next_video
show_comments
- copy_comment_long_press
stream_info_selected_tab
show_hold_to_append
en
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ca5a7527f..dab9bde10 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -76,7 +76,6 @@
Load thumbnails
Show comments
Disable to stop showing comments
- Copy comment on long press
Turn off to prevent loading thumbnails, saving data and memory usage. Changes clear both in-memory and on-disk image cache.
Image cache wiped
Wipe cached metadata
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index d1080bb4d..2187b4a3c 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -65,11 +65,6 @@
android:title="@string/show_comments_title"
android:summary="@string/show_comments_summary"/>
-
Date: Tue, 4 Feb 2020 18:16:33 +0000
Subject: [PATCH 0285/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-ru/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 6455a42c2..f21e0e074 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -546,4 +546,6 @@
Разрешите отображение поверх приложений
Язык интерфейса
Как в системе
+ По завершении нажмите Готово
+ Готово
\ No newline at end of file
From 2bac66b5feb69bd4bed18eae9ac5f303ea7974cd Mon Sep 17 00:00:00 2001
From: nautilusx
Date: Tue, 4 Feb 2020 07:48:42 +0000
Subject: [PATCH 0286/1194] Translated using Weblate (German)
Currently translated at 99.8% (531 of 532 strings)
---
app/src/main/res/values-de/strings.xml | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 306fcf9de..69e0b273b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -203,8 +203,8 @@
Keine Videos
- - %s Video
- - %s Videos
+ - Video
+ - Videos
Die meisten Sonderzeichen
Element gelöscht
@@ -495,9 +495,9 @@
Downloads starten
Downloads anhalten
Frage, wohin heruntergeladen werden soll
- Du wirst gefragt, wohin Du jeden Download speichern willst
- Du wirst gefragt, wohin Du jeden Download speichern willst.
-\nAktiviere diese Option, wenn Du auf die externe SD-Karte herunterladen möchtest
+ Du wirst gefragt, wohin du jeden Download speichern willst
+ Du wirst gefragt, wohin du jeden Download speichern willst.
+\nAktiviere diese Option, wenn du auf die externe SD-Karte herunterladen möchtest
SAF verwenden
Das Storage Access Framework erlaubt Downloads auf eine externe SD-Karte.
\nHinweis: Manche Geräte sind nicht kompatibel
@@ -539,4 +539,9 @@
Downloadverlauf löschen
Heruntergeladene Dateien löschen
%1$s Downloads gelöscht
+ Berechtigung zur Anzeige über andere Apps erteilen
+ Sprache der App
+ Systemstandard
+ \"Fertig\" drücken, wenn es gelöst wurde
+ Fertig
\ No newline at end of file
From 21184f875522a17dc59f89bfcf44cbc103b69514 Mon Sep 17 00:00:00 2001
From: harshlele <45959248+harshlele@users.noreply.github.com>
Date: Wed, 5 Feb 2020 14:48:39 +0530
Subject: [PATCH 0287/1194] Update CommentsMiniInfoItemHolder.java
Co-Authored-By: yausername <5203007+yausername@users.noreply.github.com>
---
.../newpipe/info_list/holder/CommentsMiniInfoItemHolder.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
index 592378dc0..58f1ab90d 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java
@@ -134,7 +134,7 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
ClipboardManager clipboardManager = (ClipboardManager) itemBuilder.getContext()
.getSystemService(Context.CLIPBOARD_SERVICE);
- clipboardManager.setPrimaryClip(ClipData.newPlainText(null,itemContentView.getText()));
+ clipboardManager.setPrimaryClip(ClipData.newPlainText(null,commentText));
Toast.makeText(itemBuilder.getContext(), R.string.msg_copied, Toast.LENGTH_SHORT).show();
return true;
From 34e31807fc864ae99511ded080323aa723dcad56 Mon Sep 17 00:00:00 2001
From: harshlele <45959248+harshlele@users.noreply.github.com>
Date: Thu, 6 Feb 2020 18:33:06 +0530
Subject: [PATCH 0288/1194] removed empty line
---
app/src/main/res/xml/content_settings.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index 2187b4a3c..197c14487 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -65,7 +65,6 @@
android:title="@string/show_comments_title"
android:summary="@string/show_comments_summary"/>
-
Date: Thu, 6 Feb 2020 17:00:32 -0300
Subject: [PATCH 0289/1194] Update DataReader.java
make rewind() method fully rewind the stream
---
app/src/main/java/org/schabi/newpipe/streams/DataReader.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java
index 0e62810c5..75b55cd73 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java
@@ -137,6 +137,7 @@ public class DataReader {
position = 0;
readOffset = readBuffer.length;
+ readCount = 0;
}
public boolean canRewind() {
From 7045f9711c04a4a0610553f605c8c69a7fd4f21f Mon Sep 17 00:00:00 2001
From: bopol
Date: Sun, 2 Feb 2020 16:54:09 +0100
Subject: [PATCH 0290/1194] fix thumbnail for PeerTube, and description changes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
description:
- PeerTube: it's now full description (it cut at 250 characters before), and it displays ok (newlines are ok, but markdown isn't)
- MediaCCC: descriptions are now displayed well (newlines added)
- YouTube: timestamps in descriptions are clickable and work
more PeerTube fixes:
thumbnail is now high quality
age limit is now handled
upload date in «recently added» feed is good now (it was one hour delayed)
all fixes come from https://github.com/TeamNewPipe/NewPipeExtractor/pull/239, so it need to be merged before this PR
---
app/build.gradle | 2 +-
.../fragments/detail/VideoDetailFragment.java | 75 +++++++++++++------
2 files changed, 53 insertions(+), 24 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index f8fc1565f..0f7ad5f92 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -62,7 +62,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:ff61e284'
+ implementation 'com.github.B0pol:NewPipeExtractor:5756df8dc7e89b7383d1d1e07a91c30bdab6f868'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index f59cfaef0..a297cddf3 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -2,7 +2,6 @@ package org.schabi.newpipe.fragments.detail;
import android.app.Activity;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
@@ -18,7 +17,6 @@ import androidx.fragment.app.Fragment;
import androidx.core.content.ContextCompat;
import androidx.viewpager.widget.ViewPager;
import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.text.Html;
import android.text.Spanned;
@@ -193,6 +191,14 @@ public class VideoDetailFragment
private TabLayout tabLayout;
private FrameLayout relatedStreamsLayout;
+ private static final int DESCRIPTION_HTML = 1;
+ private static final int DESCRIPTION_MARKDOWN = 2;
+ private static final int DESCRIPTION_PLAIN_TEXT = 3;
+
+ private static final int YOUTUBE_SERVICE_ID = ServiceList.YouTube.getServiceId();
+ private static final int MEDIACCC_SERVICE_ID = ServiceList.MediaCCC.getServiceId();
+ private static final int PEERTUBE_SERVICE_ID = ServiceList.PeerTube.getServiceId();
+
/*////////////////////////////////////////////////////////////////////////*/
@@ -483,7 +489,6 @@ public class VideoDetailFragment
videoUploadDateView = rootView.findViewById(R.id.detail_upload_date_view);
videoDescriptionView = rootView.findViewById(R.id.detail_description_view);
videoDescriptionView.setMovementMethod(LinkMovementMethod.getInstance());
- videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS);
thumbsUpTextView = rootView.findViewById(R.id.detail_thumbs_up_count_view);
thumbsUpImageView = rootView.findViewById(R.id.detail_thumbs_up_img_view);
@@ -919,28 +924,39 @@ public class VideoDetailFragment
return sortedVideoStreams != null ? sortedVideoStreams.get(selectedVideoStreamIndex) : null;
}
- private void prepareDescription(final String descriptionHtml) {
- if (TextUtils.isEmpty(descriptionHtml)) {
+ private void prepareDescription(final String descriptionText, int descriptionTypeId) {
+ if (TextUtils.isEmpty(descriptionText)) {
return;
}
- disposables.add(Single.just(descriptionHtml)
- .map((@io.reactivex.annotations.NonNull String description) -> {
- Spanned parsedDescription;
- if (Build.VERSION.SDK_INT >= 24) {
- parsedDescription = Html.fromHtml(description, 0);
- } else {
- //noinspection deprecation
- parsedDescription = Html.fromHtml(description);
- }
- return parsedDescription;
- })
- .subscribeOn(Schedulers.computation())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe((@io.reactivex.annotations.NonNull Spanned spanned) -> {
- videoDescriptionView.setText(spanned);
- videoDescriptionView.setVisibility(View.VISIBLE);
- }));
+ if (descriptionTypeId == DESCRIPTION_PLAIN_TEXT) {
+ videoDescriptionView.setText(descriptionText, TextView.BufferType.SPANNABLE);
+ videoDescriptionView.setVisibility(View.VISIBLE);
+ } else if (descriptionTypeId == DESCRIPTION_MARKDOWN) {
+ //in the future we would use a library or a good method to show markdown.
+ //rn, we just remove **bold**, and let plain_text otherwise
+ videoDescriptionView.setText(descriptionText.replace("**", ""), TextView.BufferType.SPANNABLE);
+ videoDescriptionView.setVisibility(View.VISIBLE);
+ } else {
+ //== DESCRIPTION_HTML
+ disposables.add(Single.just(descriptionText)
+ .map((@io.reactivex.annotations.NonNull String description) -> {
+ Spanned parsedDescription;
+ if (Build.VERSION.SDK_INT >= 24) {
+ parsedDescription = Html.fromHtml(description, 0);
+ } else {
+ //noinspection deprecation
+ parsedDescription = Html.fromHtml(description);
+ }
+ return parsedDescription;
+ })
+ .subscribeOn(Schedulers.computation())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe((@io.reactivex.annotations.NonNull Spanned spanned) -> {
+ videoDescriptionView.setText(spanned);
+ videoDescriptionView.setVisibility(View.VISIBLE);
+ }));
+ }
}
private void setHeightThumbnail() {
@@ -1126,7 +1142,20 @@ public class VideoDetailFragment
videoUploadDateView.setVisibility(View.GONE);
}
- prepareDescription(info.getDescription());
+ int serviceId = info.getServiceId();
+
+ if (serviceId != YOUTUBE_SERVICE_ID) {
+ videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS);
+ }
+
+ if (serviceId == PEERTUBE_SERVICE_ID) {
+ prepareDescription(info.getDescription(), DESCRIPTION_MARKDOWN);
+ } else if (serviceId == MEDIACCC_SERVICE_ID) {
+ prepareDescription(info.getDescription(), DESCRIPTION_PLAIN_TEXT);
+ } else {
+ prepareDescription(info.getDescription(), DESCRIPTION_HTML);
+ }
+
updateProgressInfo(info);
animateView(spinnerToolbar, true, 500);
From badaff8ebcd6f446a6a4b575adba43d627b4c7c2 Mon Sep 17 00:00:00 2001
From: bopol
Date: Thu, 6 Feb 2020 23:54:36 +0100
Subject: [PATCH 0291/1194] refactor Description
---
app/build.gradle | 2 +-
.../fragments/detail/VideoDetailFragment.java | 60 +++++++------------
2 files changed, 23 insertions(+), 39 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 0f7ad5f92..728d380c4 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -62,7 +62,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.B0pol:NewPipeExtractor:5756df8dc7e89b7383d1d1e07a91c30bdab6f868'
+ implementation 'com.github.B0pol:NewPipeExtractor:11bcc78d9c8eb39e8d61a6f4bc4112025937f087'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index a297cddf3..c6c8ca04c 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -56,6 +56,7 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor;
import org.schabi.newpipe.extractor.stream.AudioStream;
+import org.schabi.newpipe.extractor.stream.Description;
import org.schabi.newpipe.extractor.stream.Stream;
import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.StreamType;
@@ -191,14 +192,6 @@ public class VideoDetailFragment
private TabLayout tabLayout;
private FrameLayout relatedStreamsLayout;
- private static final int DESCRIPTION_HTML = 1;
- private static final int DESCRIPTION_MARKDOWN = 2;
- private static final int DESCRIPTION_PLAIN_TEXT = 3;
-
- private static final int YOUTUBE_SERVICE_ID = ServiceList.YouTube.getServiceId();
- private static final int MEDIACCC_SERVICE_ID = ServiceList.MediaCCC.getServiceId();
- private static final int PEERTUBE_SERVICE_ID = ServiceList.PeerTube.getServiceId();
-
/*////////////////////////////////////////////////////////////////////////*/
@@ -924,29 +917,24 @@ public class VideoDetailFragment
return sortedVideoStreams != null ? sortedVideoStreams.get(selectedVideoStreamIndex) : null;
}
- private void prepareDescription(final String descriptionText, int descriptionTypeId) {
- if (TextUtils.isEmpty(descriptionText)) {
+ private void prepareDescription(Description description) {
+ if (TextUtils.isEmpty(description.getContent()) || description == Description.emptyDescription) {
return;
}
- if (descriptionTypeId == DESCRIPTION_PLAIN_TEXT) {
- videoDescriptionView.setText(descriptionText, TextView.BufferType.SPANNABLE);
- videoDescriptionView.setVisibility(View.VISIBLE);
- } else if (descriptionTypeId == DESCRIPTION_MARKDOWN) {
- //in the future we would use a library or a good method to show markdown.
- //rn, we just remove **bold**, and let plain_text otherwise
- videoDescriptionView.setText(descriptionText.replace("**", ""), TextView.BufferType.SPANNABLE);
- videoDescriptionView.setVisibility(View.VISIBLE);
- } else {
- //== DESCRIPTION_HTML
- disposables.add(Single.just(descriptionText)
- .map((@io.reactivex.annotations.NonNull String description) -> {
+ if (description.getType() != Description.HTML) {
+ videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS);
+ }
+
+ if (description.getType() == Description.HTML) {
+ disposables.add(Single.just(description.getContent())
+ .map((@io.reactivex.annotations.NonNull String descriptionText) -> {
Spanned parsedDescription;
if (Build.VERSION.SDK_INT >= 24) {
- parsedDescription = Html.fromHtml(description, 0);
+ parsedDescription = Html.fromHtml(descriptionText, 0);
} else {
//noinspection deprecation
- parsedDescription = Html.fromHtml(description);
+ parsedDescription = Html.fromHtml(descriptionText);
}
return parsedDescription;
})
@@ -956,6 +944,15 @@ public class VideoDetailFragment
videoDescriptionView.setText(spanned);
videoDescriptionView.setVisibility(View.VISIBLE);
}));
+ } else if (description.getType() == Description.MARKDOWN) {
+ //in the future we would use a library or a good method to show markdown.
+ //rn, we just remove **bold**, and let PLAIN_TEXT otherwise
+ videoDescriptionView.setText(description.getContent().replace("**", ""), TextView.BufferType.SPANNABLE);
+ videoDescriptionView.setVisibility(View.VISIBLE);
+ } else {
+ //== Description.PLAIN_TEXT
+ videoDescriptionView.setText(description.getContent(), TextView.BufferType.SPANNABLE);
+ videoDescriptionView.setVisibility(View.VISIBLE);
}
}
@@ -1142,20 +1139,7 @@ public class VideoDetailFragment
videoUploadDateView.setVisibility(View.GONE);
}
- int serviceId = info.getServiceId();
-
- if (serviceId != YOUTUBE_SERVICE_ID) {
- videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS);
- }
-
- if (serviceId == PEERTUBE_SERVICE_ID) {
- prepareDescription(info.getDescription(), DESCRIPTION_MARKDOWN);
- } else if (serviceId == MEDIACCC_SERVICE_ID) {
- prepareDescription(info.getDescription(), DESCRIPTION_PLAIN_TEXT);
- } else {
- prepareDescription(info.getDescription(), DESCRIPTION_HTML);
- }
-
+ prepareDescription(info.getDescription());
updateProgressInfo(info);
animateView(spinnerToolbar, true, 500);
From 294c35b2fb2f15e4393eb38cb6985ecbb52b6272 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Fri, 7 Feb 2020 17:51:14 +0100
Subject: [PATCH 0292/1194] Spelling: the settings
Co-Authored-By: Tobias Groza
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 940008aae..cf44da7c0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -138,7 +138,7 @@
Play
Content
Age restricted content
- Show age restricted video. Future changes are possible from \"Settings\".
+ Show age restricted video. Future changes are possible from the settings.
Live
Live
Downloads
From 4c13dda1f953fcf38ddf579e52fd4acdc62aac84 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Fri, 7 Feb 2020 17:55:37 +0100
Subject: [PATCH 0293/1194] Spelling: Could not establish secure connection
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cf44da7c0..9d450634c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -557,7 +557,7 @@
The file can not be created
The destination folder can not be created
Permission denied by the system
- Could not connect securely
+ Could not establish secure connection
Could not find the server
Can not connect to the server
The server does not send data
From 3abc660eb30a103cbd6ec355d96f52348b3d0fe7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Fri, 7 Feb 2020 17:57:38 +0100
Subject: [PATCH 0294/1194] Spelling: Install the fresh NewPipe version.
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9d450634c..bdc3b30e0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -529,7 +529,7 @@
Auto
Switch View
- There is a fresh NewPipe version available!
+ Install the fresh NewPipe version.
Tap to download
Finished
Pending
From f319e3e75a886c3523708f8b7a562be8cabd17b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Fri, 7 Feb 2020 18:01:45 +0100
Subject: [PATCH 0295/1194] Spelling: Treat the NewPipe makers to something you
like
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bdc3b30e0..4ae59aa33 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -355,7 +355,7 @@
https://github.com/TeamNewPipe/NewPipe
View on GitHub
Donate
- NewPipe is developed by volunteers spending time bringing you the best experience. Give back to help make NewPipe even better.
+ Treat the newPipe makers to something you like, by way of funding its development.
https://newpipe.schabi.org/donate
Give back
Website
From 85acc53d408630ae63bd045dfe69604841046d24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Fri, 7 Feb 2020 18:06:09 +0100
Subject: [PATCH 0296/1194] Spelling: Video thumbnail shown
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4ae59aa33..c3ffc9c14 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -60,7 +60,7 @@
Show \"Play with Kodi\" option
Lock screen video thumbnail
Displayed option to play a video via Kodi media center
- Using the background player displays a video thumbnail on the lock screen
+ A video thumbnail is shown on the lock screen when using the background player
Audio
Default audio format
Default video format
From 6d49148c32e8f3c83a07429eebebae3b392794d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Tue, 4 Feb 2020 09:23:10 +0000
Subject: [PATCH 0297/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-tr/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 318b30098..bab98a791 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -541,4 +541,6 @@
Diğer uygulamaların üzerinde görüntüleme izni ver
Uygulama dili
Sistem öntanımlısı
+ Çözüldüğünde \"Bitti\" butonuna basın
+ Bitti
\ No newline at end of file
From a476f332f71b0e6f1be710e50b21c7b83ba5b901 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Wed, 5 Feb 2020 00:03:15 +0000
Subject: [PATCH 0298/1194] Translated using Weblate (German)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-de/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 69e0b273b..fbd3f676f 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -203,8 +203,8 @@
Keine Videos
- - Video
- - Videos
+ - %s Video
+ - %s Videos
Die meisten Sonderzeichen
Element gelöscht
From 06eff256f3665075cead89d3ebf0b28265cfe4eb Mon Sep 17 00:00:00 2001
From: B0pol
Date: Tue, 4 Feb 2020 23:43:42 +0000
Subject: [PATCH 0299/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-eo/strings.xml | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index d4c5d4c80..ddbda086a 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -123,7 +123,7 @@
Tiu permeso estas necesa por
\nmalfermi en ŝprucfenestra modo
Ludante en ŝprucfenestra modo
- Malaktiva
+ Malŝatitaj
Filtri
Aktualigi
Forviŝi
@@ -138,7 +138,7 @@
Elŝuti
Leteroj kaj ciferoj
Plej specialaj karakteroj
- Rekomencu en fokusa gajno
+ Rekomenci en fokusa gajno
Daŭrigi la ludon post la interrompaĵoj (ekzemple telefonadoj)
Serĉa historio
Konservi la historio de serĉo lokale
@@ -172,7 +172,7 @@
[Nekonata]
Viciĝi en la fona ludilo
Viciĝi en nova ŝprucfenestro
- Komencu ludi en nova ŝprucfenestro
+ Komenci ludi en nova ŝprucfenestro
Defaŭlta enhava lando
Ŝangi Orientiĝon
Ŝanĝi al Fono
@@ -540,4 +540,6 @@
Doni la permeson por afiŝiĝi supre aliaj apoj
Lingvo de la apo
Sistema lingvo
+ Premu « Finita » kiam solvita
+ Finita
\ No newline at end of file
From 75248d7a12f5e7afd2bff65f3143e22526b251ff Mon Sep 17 00:00:00 2001
From: Osoitz
Date: Thu, 6 Feb 2020 19:03:14 +0000
Subject: [PATCH 0300/1194] Translated using Weblate (Basque)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-eu/strings.xml | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 96745ee23..8e74ed126 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -199,8 +199,8 @@
Bideorik ez
- - Bideoa
- - Bideoak
+ - Bideo %
+ - % bideo
Historiala
Bilatuta
@@ -538,4 +538,9 @@
Garbitu deskargen historiala
Ezabatu deskargatutako fitxategiak
%1$s deskarga ezabatuta
+ Eman beste aplikazioen gainean erakusteko baimena
+ Aplikazioaren hizkuntza
+ Sisteman lehenetsia
+ Sakatu \"Egina\" konponduta dagoenean
+ Egina
\ No newline at end of file
From ce003d2683ed1afa79548c4601adc67da7e4dba3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vojt=C4=9Bch=20=C5=A0amla?=
Date: Tue, 4 Feb 2020 20:58:55 +0000
Subject: [PATCH 0301/1194] Translated using Weblate (Czech)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-cs/strings.xml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 44001ce9f..4c66d4f66 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -319,7 +319,7 @@ otevření ve vyskakovacím okně
Povolit službu LeakCanary
Monitoring úniku paměti může způsobit nereagování aplikace při heap dumpingu
Nahlásit mimo-cyklické chyby
- Vynutit hlášení nedoručitelných výjimek Rx mimo fragment nebo trvání činnosti po odstranění
+ Vynutit hlášení nedoručitelných výjimek Rx mimo životnost fragmentu nebo aktivity po odstranění
Použít rychlé nepřesné hledání
Nepřesné hledání umožní přehrávači posouvat se rychleji, ale se sníženou přesností
Načítat náhledy
@@ -550,4 +550,6 @@ otevření ve vyskakovacím okně
Souhlasit se zobrazením přes jiné aplikace
Jazyk aplikace
Jazyk systému
+ Po vyřešení stiskni \"Hotovo\"
+ Hotovo
\ No newline at end of file
From 5ed5a81708956bd17acb37f08151ad9608fa2ac6 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Tue, 4 Feb 2020 05:48:21 +0000
Subject: [PATCH 0302/1194] Translated using Weblate (Hebrew)
Currently translated at 99.8% (531 of 532 strings)
---
app/src/main/res/values-he/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index dacde43bc..72b6a92ab 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -553,4 +553,6 @@
יש להעניק הרשאה להציג על גבי יישומונים אחרים
שפת היישומון
בררת המחדל של המערכת
+ יש ללחוץ על „סיום” לאחר הפתירה
+ סיום
\ No newline at end of file
From 83d43f845fc7fc15e78a492a2e0d7aa8dbdc70f7 Mon Sep 17 00:00:00 2001
From: WaldiS
Date: Tue, 4 Feb 2020 14:54:43 +0000
Subject: [PATCH 0303/1194] Translated using Weblate (Polish)
Currently translated at 99.8% (531 of 532 strings)
---
app/src/main/res/values-pl/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index cfb2c00d2..53de33521 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -547,4 +547,6 @@
Zezwól na wyświetlanie w innych aplikacjach
Język aplikacji
Domyślny systemu
+ Po rozwiązaniu naciśnij „Gotowe”
+ Gotowe
\ No newline at end of file
From 72e90b4d576849d247a58bf4e955c1d6b559ca4e Mon Sep 17 00:00:00 2001
From: thami simo
Date: Thu, 6 Feb 2020 10:55:18 +0000
Subject: [PATCH 0304/1194] Translated using Weblate (Arabic)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-ar/strings.xml | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 4d91b40da..79fe2a6fe 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -246,12 +246,12 @@
- %s مشاهدة
- - فيديوهات
- - فيديوهات
- - فيديوهات
- - فيديوهات
- - فيديوهات
- - فيديوهات
+ - %s فيديو
+ - %s أشرطة فيديو
+ - %s أشرطة فيديو
+ - %s أشرطة فيديو
+ - %s أشرطة فيديو
+ - %s أشرطة فيديو
طلب اختبار الكابتشا مطلوب
© %1$sبواسطة%2$sتحت%3$s
@@ -556,9 +556,14 @@
لا يمكن استرداد هذا التنزيل
اختيار مثيل
ابحث عن الحالات التي تناسبك على %s
- تمكين صور مصغرة قفل شاشة فيديو
+ تمكين قفل شاشة الصور المصغرة الفيديو
عند استخدام مشغل الخلفية ، سيتم عرض صورة مصغرة للفيديو على شاشة القفل
تنظيف تاريخ التحميل
حذف الملفات التي تم تنزيلها
التنزيلات %1$s المحذوفة
+ إعطاء إذن لعرضه على التطبيقات الأخرى
+ لغة التطبيق
+ النظام الافتراضي
+ اضغط على \"تم\" عند حلها
+ منجز
\ No newline at end of file
From 06e536eb459ec824cdfff0b3fd02170e867525d9 Mon Sep 17 00:00:00 2001
From: zmni
Date: Wed, 5 Feb 2020 13:00:11 +0000
Subject: [PATCH 0305/1194] Translated using Weblate (Indonesian)
Currently translated at 99.6% (530 of 532 strings)
---
app/src/main/res/values-in/strings.xml | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 36929856e..7c3cce473 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -498,7 +498,7 @@
Hapus semua posisi pemutaran\?
Ubah folder unduhan
- - Video
+ - %s video
Aktif/Nonaktifkan layanan, saat ini aktif:
Tidak ada yang menonton
@@ -531,4 +531,8 @@
Hapus riwayat unduhan
Hapus berkas yang diunduh
%1$s unduhan dihapus
+ Izinkan untuk ditampilkan di atas aplikasi lain
+ Bahasa apl
+ Default sistem
+ Selesai
\ No newline at end of file
From e9dc96944b4902e5fe776530a045e54d6ad35d4f Mon Sep 17 00:00:00 2001
From: JoC
Date: Tue, 4 Feb 2020 05:47:51 +0000
Subject: [PATCH 0306/1194] Translated using Weblate (Spanish)
Currently translated at 99.8% (531 of 532 strings)
---
app/src/main/res/values-es/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index aadb818f9..1216c02c5 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -540,4 +540,6 @@
Dar permisos para que se muestre por sobre otras apps
Idioma de la app
Predeterminado del sistema
+ Presiona \"Hecho\" cuando esté resuelto
+ Hecho
\ No newline at end of file
From c93be13dfe5c4acd963076545fdc21de7e5e1245 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Tue, 4 Feb 2020 23:51:01 +0000
Subject: [PATCH 0307/1194] Translated using Weblate (French)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-fr/strings.xml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index ad416aabc..8a8c00c60 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -116,7 +116,7 @@
Lecture en mode flottant
Oui
Plus tard
- Désactivé
+ Désactivés
Quoi :\\nRequête :\\nLangue du contenu :\\nService :\\nHeure UTC :\\nPaquet :\\nVersion :\\nVersion du système d’exploitation :
k
M
@@ -541,4 +541,6 @@
Autoriser la superposition d\'applis
Langue de l\'application
Langue du système
+ Appuyez sur « Terminé » une fois résolu
+ Terminé
\ No newline at end of file
From 7568616f8ea221bd757337dae6b7bc452b2f4233 Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Tue, 4 Feb 2020 16:53:02 +0000
Subject: [PATCH 0308/1194] Translated using Weblate (Kurdish)
Currently translated at 99.8% (531 of 532 strings)
---
app/src/main/res/values-ku/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 6a1ac3b9b..20ce04100 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -544,4 +544,6 @@
دەسەڵاتی پێبدە بۆ پیشاندان لەسەرووی ئەپەکانیترەوە
زمانی ئەپ
بنەڕەتی سیستەم
+ گرتە بکە لەسەر ”تەواو” کاتێ کە چارەسەرکرا
+ تەواو
\ No newline at end of file
From 6adbfade2b0736c606f3815a38a7b1e685316cc7 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Tue, 4 Feb 2020 02:51:37 +0000
Subject: [PATCH 0309/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 51d21f167..395a555e7 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -537,4 +537,6 @@
給予顯示在其他應用程式上層的權限
應用程式語言
系統預設值
+ 解決後請按「完成」
+ 完成
\ No newline at end of file
From 9eb55e1be5fa98b06a1836a7ce2c09f3b4078e45 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Mon, 3 Feb 2020 20:50:00 +0000
Subject: [PATCH 0310/1194] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?=
=?UTF-8?q?gian=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 98.1% (522 of 532 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index fa39ae466..9757df2ad 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -537,4 +537,9 @@
gjenoppretter
Kan ikke gjenopprette denne nedlastingen
Hurtigframoverspoling/-tilbakeblafringsvarighet
+ Gi tilgang til visning over andre programmer
+ Programspråk
+ Systemforvalg
+ Trykk \"Ferdig\" når den er løst
+ Ferdig
\ No newline at end of file
From 3ff85c2ab71d89ff54cf67507b0a81ad12999ce6 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Fri, 7 Feb 2020 22:22:27 +0100
Subject: [PATCH 0311/1194] Make report error title in snackbar uppercase again
---
app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
index e7a6319e3..0bb93c63f 100644
--- a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
@@ -91,7 +91,7 @@ public class ErrorActivity extends AppCompatActivity {
if (rootView != null) {
Snackbar.make(rootView, R.string.error_snackbar_message, 3 * 1000)
.setActionTextColor(Color.YELLOW)
- .setAction(R.string.error_snackbar_action, v ->
+ .setAction(context.getString(R.string.error_snackbar_action).toUpperCase(), v ->
startErrorActivity(returnActivity, context, errorInfo, el)).show();
} else {
startErrorActivity(returnActivity, context, errorInfo, el);
From 2d62fa401d63551785859b0d909f8414e94ba191 Mon Sep 17 00:00:00 2001
From: bopol
Date: Sat, 8 Feb 2020 09:56:37 +0100
Subject: [PATCH 0312/1194] real markdown support for descriptions
and update third-party licences in about page
---
app/build.gradle | 4 ++++
.../org/schabi/newpipe/about/AboutActivity.java | 16 +++++++++-------
.../fragments/detail/VideoDetailFragment.java | 14 +++++++-------
3 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 728d380c4..65ab78ffa 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -53,6 +53,7 @@ ext {
okHttpLibVersion = '3.12.6'
icepickLibVersion = '3.2.0'
stethoLibVersion = '1.5.0'
+ markwonVersion = '4.2.1'
}
dependencies {
@@ -108,4 +109,7 @@ dependencies {
implementation "com.squareup.okhttp3:okhttp:${okHttpLibVersion}"
debugImplementation "com.facebook.stetho:stetho-okhttp3:${stethoLibVersion}"
+
+ implementation "io.noties.markwon:core:${markwonVersion}"
+ implementation "io.noties.markwon:linkify:${markwonVersion}"
}
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index 9e23d9d3d..edfc54375 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -32,18 +32,20 @@ public class AboutActivity extends AppCompatActivity {
* List of all software components
*/
private static final SoftwareComponent[] SOFTWARE_COMPONENTS = new SoftwareComponent[]{
- new SoftwareComponent("Giga Get", "2014", "Peter Cai", "https://github.com/PaperAirplane-Dev-Team/GigaGet", StandardLicenses.GPL2),
- new SoftwareComponent("NewPipe Extractor", "2017", "Christian Schabesberger", "https://github.com/TeamNewPipe/NewPipeExtractor", StandardLicenses.GPL3),
+ new SoftwareComponent("Giga Get", "2014 - 2015", "Peter Cai", "https://github.com/PaperAirplane-Dev-Team/GigaGet", StandardLicenses.GPL2),
+ new SoftwareComponent("NewPipe Extractor", "2017 - 2020", "Christian Schabesberger", "https://github.com/TeamNewPipe/NewPipeExtractor", StandardLicenses.GPL3),
new SoftwareComponent("Jsoup", "2017", "Jonathan Hedley", "https://github.com/jhy/jsoup", StandardLicenses.MIT),
new SoftwareComponent("Rhino", "2015", "Mozilla", "https://www.mozilla.org/rhino/", StandardLicenses.MPL2),
new SoftwareComponent("ACRA", "2013", "Kevin Gaudin", "http://www.acra.ch", StandardLicenses.APACHE2),
new SoftwareComponent("Universal Image Loader", "2011 - 2015", "Sergey Tarasevich", "https://github.com/nostra13/Android-Universal-Image-Loader", StandardLicenses.APACHE2),
- new SoftwareComponent("CircleImageView", "2014 - 2017", "Henning Dodenhof", "https://github.com/hdodenhof/CircleImageView", StandardLicenses.APACHE2),
+ new SoftwareComponent("CircleImageView", "2014 - 2020", "Henning Dodenhof", "https://github.com/hdodenhof/CircleImageView", StandardLicenses.APACHE2),
new SoftwareComponent("NoNonsense-FilePicker", "2016", "Jonas Kalderstam", "https://github.com/spacecowboy/NoNonsense-FilePicker", StandardLicenses.MPL2),
- new SoftwareComponent("ExoPlayer", "2014-2017", "Google Inc", "https://github.com/google/ExoPlayer", StandardLicenses.APACHE2),
- new SoftwareComponent("RxAndroid", "2015", "The RxAndroid authors", "https://github.com/ReactiveX/RxAndroid", StandardLicenses.APACHE2),
- new SoftwareComponent("RxJava", "2016-present", "RxJava Contributors", "https://github.com/ReactiveX/RxJava", StandardLicenses.APACHE2),
- new SoftwareComponent("RxBinding", "2015", "Jake Wharton", "https://github.com/JakeWharton/RxBinding", StandardLicenses.APACHE2)
+ new SoftwareComponent("ExoPlayer", "2014 - 2020", "Google Inc", "https://github.com/google/ExoPlayer", StandardLicenses.APACHE2),
+ new SoftwareComponent("RxAndroid", "2015 - 2018", "The RxAndroid authors", "https://github.com/ReactiveX/RxAndroid", StandardLicenses.APACHE2),
+ new SoftwareComponent("RxJava", "2016 - 2020", "RxJava Contributors", "https://github.com/ReactiveX/RxJava", StandardLicenses.APACHE2),
+ new SoftwareComponent("RxBinding", "2015 - 2018", "Jake Wharton", "https://github.com/JakeWharton/RxBinding", StandardLicenses.APACHE2),
+ new SoftwareComponent("PrettyTime", "2012 - 2020", "Lincoln Baxter, III", "https://github.com/ocpsoft/prettytime", StandardLicenses.APACHE2),
+ new SoftwareComponent("Markwon", "2017 - 2020", "Noties", "https://github.com/noties/Markwon", StandardLicenses.APACHE2)
};
/**
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index c6c8ca04c..3c594bdfa 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -95,6 +95,8 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import icepick.State;
+import io.noties.markwon.Markwon;
+import io.noties.markwon.linkify.LinkifyPlugin;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
@@ -922,10 +924,6 @@ public class VideoDetailFragment
return;
}
- if (description.getType() != Description.HTML) {
- videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS);
- }
-
if (description.getType() == Description.HTML) {
disposables.add(Single.just(description.getContent())
.map((@io.reactivex.annotations.NonNull String descriptionText) -> {
@@ -945,12 +943,14 @@ public class VideoDetailFragment
videoDescriptionView.setVisibility(View.VISIBLE);
}));
} else if (description.getType() == Description.MARKDOWN) {
- //in the future we would use a library or a good method to show markdown.
- //rn, we just remove **bold**, and let PLAIN_TEXT otherwise
- videoDescriptionView.setText(description.getContent().replace("**", ""), TextView.BufferType.SPANNABLE);
+ final Markwon markwon = Markwon.builder(getContext())
+ .usePlugin(LinkifyPlugin.create())
+ .build();
+ markwon.setMarkdown(videoDescriptionView, description.getContent());
videoDescriptionView.setVisibility(View.VISIBLE);
} else {
//== Description.PLAIN_TEXT
+ videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS);
videoDescriptionView.setText(description.getContent(), TextView.BufferType.SPANNABLE);
videoDescriptionView.setVisibility(View.VISIBLE);
}
From 3f3d1bfccf9be4182bd2872358263d3c904e447a Mon Sep 17 00:00:00 2001
From: bopol
Date: Sun, 9 Feb 2020 00:00:14 +0100
Subject: [PATCH 0313/1194] update extractor version
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 65ab78ffa..5da8c9ff0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -63,7 +63,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.B0pol:NewPipeExtractor:11bcc78d9c8eb39e8d61a6f4bc4112025937f087'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:9112a10'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
From eb7d9f76e56731407f850f2fd278f5d052b5ab08 Mon Sep 17 00:00:00 2001
From: AioiLight
Date: Sat, 8 Feb 2020 17:47:01 +0000
Subject: [PATCH 0314/1194] Translated using Weblate (Japanese)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-ja/strings.xml | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index cf63e33e1..adaaa3828 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -498,7 +498,7 @@
ダウンロードフォルダーを変更して有効にします
サービスの切り替え、現在の選択:
- - 動画
+ - %s つの動画
デフォルトのキオスク
誰も見ていません
@@ -530,4 +530,10 @@
ダウンロード履歴を消去
ダウンロードしたファイルを消去
%1$s 個削除しました
+ 自動生成 (アップローダーが見つかりません)
+ 他のアプリの上に表示する権限を与えてください
+ アプリの言語
+ システムの既定
+ 解けたら \"完了\" を押してください
+ 完了
\ No newline at end of file
From c1d9a253b0f72b504414f832ff4972fbe657cee4 Mon Sep 17 00:00:00 2001
From: pjammo
Date: Sat, 8 Feb 2020 19:20:17 +0000
Subject: [PATCH 0315/1194] Translated using Weblate (Italian)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-it/strings.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 5acc513e7..eef99d93f 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -538,4 +538,9 @@
Svuota Cronologia Download
Elimina File Scaricati
%1$s download eliminati
+ Consentire la visualizzazione sopra altre applicazioni
+ Lingua Applicazione
+ Predefinita di Sistema
+ Premere \"Fatto\" quando risolto
+ Fatto
\ No newline at end of file
From a75deb6ba2b7a6758caa44cb3d3dff62a730ad11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Sun, 9 Feb 2020 16:29:51 +0100
Subject: [PATCH 0316/1194] Reverted changes
---
app/src/main/res/values/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c3ffc9c14..ccd58f003 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -355,7 +355,7 @@
https://github.com/TeamNewPipe/NewPipe
View on GitHub
Donate
- Treat the newPipe makers to something you like, by way of funding its development.
+ NewPipe is developed by volunteers spending their free time bringing you the best user experience. Give back to help developers make NewPipe even better while they enjoy a cup of coffee.
https://newpipe.schabi.org/donate
Give back
Website
@@ -529,7 +529,7 @@
Auto
Switch View
- Install the fresh NewPipe version.
+ NewPipe Update Available!
Tap to download
Finished
Pending
From 0df81409bfe97e3d9dc1ab4a52343bd4415a8d04 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Mon, 10 Feb 2020 22:32:10 +0100
Subject: [PATCH 0317/1194] Update extractor and release 0.18.3 (830)
---
app/build.gradle | 6 +++---
fastlane/metadata/android/en-US/changelogs/830.txt | 1 +
2 files changed, 4 insertions(+), 3 deletions(-)
create mode 100644 fastlane/metadata/android/en-US/changelogs/830.txt
diff --git a/app/build.gradle b/app/build.gradle
index 0ca03f158..539446e48 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 19
targetSdkVersion 28
- versionCode 820
- versionName "0.18.2"
+ versionCode 830
+ versionName "0.18.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@@ -62,7 +62,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:ff61e284'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:33961b20'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
diff --git a/fastlane/metadata/android/en-US/changelogs/830.txt b/fastlane/metadata/android/en-US/changelogs/830.txt
new file mode 100644
index 000000000..c9876f338
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/830.txt
@@ -0,0 +1 @@
+Updated SoundCloud client_id to fix SoundCloud issues.
From 0882d9d66b94994d5c85e312cf28cbb95da9f2a7 Mon Sep 17 00:00:00 2001
From: Ali Demirtas
Date: Sun, 9 Feb 2020 08:55:08 +0000
Subject: [PATCH 0318/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-tr/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index bab98a791..1dd9deff6 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -430,7 +430,7 @@
durduruldu
sırada
son işlemler uygulanıyor
- Kuyruk
+ Sıra
İşlem sistem tarafından reddedildi
İndirme başarısız
İndirme bitti
From 17d00837bdc105cfbed1f47010be889e666aba4a Mon Sep 17 00:00:00 2001
From: vkhomenk
Date: Mon, 10 Feb 2020 10:59:09 +0000
Subject: [PATCH 0319/1194] Translated using Weblate (Ukrainian)
Currently translated at 99.2% (528 of 532 strings)
---
app/src/main/res/values-uk/strings.xml | 30 ++++++++++++++++++++------
1 file changed, 23 insertions(+), 7 deletions(-)
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index ef5dbee53..a041a5496 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -233,9 +233,9 @@
- %s підписників
- - Відео
- - Відео
- - Відео
+ - %s відео
+ - %s відео
+ - %s відео
Створити
Видалити одне
@@ -491,7 +491,7 @@
На пристрої не залишилося вільного місця
Прогрес втрачено через видалення файлу
Час очікування з\'єднання вичерпано
- Ви впевнені\?
+ Очистити історію завантажень, чи завантажені файли\?
Обмежити чергу завантажень
В кожен момент часу виконуватиметься одне завантаження
Почати завантаження
@@ -524,8 +524,24 @@
Мова зміниться після перезапуску програми.
Швидке перемотування
Не вдалося перевірити екземпляр
- Оберіть ваш улюблений екземпляр peertube.
- Знайдіть екземпляри, які найбільше підходять вам на https://joinpeertube.org/instance#instance-list
+ Оберіть сервер PeerTube
+ Знайти найбільш підходящий сервер можна на %s
Додати екземпляр
- Введіть посилання на екземпляр
+ Введіть посилання на сервер
+ Підтримуються лише HTTP посилання
+ Сервер уже додано
+ Недавно додані
+ Найбільш вподобані
+ відновлюється
+ Неможливо відновити це завантаження
+ Оберіть сервер
+ Прев\'ю на екрані блокування
+ При використанні фонового плеєра, прев\'ю відео буде показано на екрані блокування
+ Очистити історію завантажень
+ Видалити завантажені файли
+ Потрібен дозвіл показувати поверх інших додатків
+ Мова
+ Мова телефону
+ Натисніть \"Готово\" по закінченню
+ Готово
\ No newline at end of file
From 99400fa570721fe76cca082221d76230901c0b45 Mon Sep 17 00:00:00 2001
From: zeritti
Date: Mon, 10 Feb 2020 20:02:14 +0000
Subject: [PATCH 0320/1194] Translated using Weblate (Czech)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-cs/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 4c66d4f66..ff89170ac 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -64,7 +64,7 @@
Zobrazit video s věkovým omezením. Povolit tento obsah lze v \"Nastavení\".
ŽIVĚ
Nebylo možné kompletně analyzovat stránku
- Začni stiskem hledat
+ Začni klepnutím na hledat
Zkopírováno do schránky
Počkejte prosím…
NewPipe stahuje
From 9f9c6eff0042cb114b71794a91c10be266d3cc4a Mon Sep 17 00:00:00 2001
From: Shafiq Jamzuri <1994_shafiq_1414@outlook.my>
Date: Sun, 9 Feb 2020 14:09:27 +0000
Subject: [PATCH 0321/1194] Translated using Weblate (Malay)
Currently translated at 84.2% (448 of 532 strings)
---
app/src/main/res/values-ms/strings.xml | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml
index f53450e13..d8d291759 100644
--- a/app/src/main/res/values-ms/strings.xml
+++ b/app/src/main/res/values-ms/strings.xml
@@ -1,5 +1,6 @@
-Tekan carian untuk bermula
+
+ Tekan carian untuk bermula
%1$s tontonan
Diterbitkan pada %1$s
Tiada pemain strim ditemui. Adakah anda mahu memasang VLC\?
@@ -27,7 +28,6 @@
Tidak dapat menukar langganan
Tidak dapat mengemaskini langganan
Papar maklumat
-
Utama
Langganan
Penanda halaman Senarai main
@@ -38,12 +38,12 @@
Latar Belakang
Popup
Tambahkan Ke
- Lokasi muat turun video
- Lokasi untuk menyimpan video yang dimuat turun
- Memasukkan lokasi muat turun video
+ Folder muat turun video
+ Fail video yang dimuat turun disimpan di sini
+ Pilih folder muat turun untuk fail video
Lokasi muat turun audio
- Audio yang dimuat turun disimpan sini
- Memasukkan lokasi muat turun fail audio
+ Fail audio yang dimuat turun disimpan di sini
+ Pilih folder muat turun untuk fail audio
Main secara automatik
Memain video apabila NewPipe dipanggil dari app lain
Resolusi utama
@@ -224,13 +224,13 @@
B
Tiada pelanggan
- - %s pelanggan
-
+ - %s pelanggan
+
Kira pelanggan tidak tersedia
Tiada tontonan
- - %s tontonan
-
+ - %s tontonan
+
Tiada video
Mula
Jeda
@@ -459,4 +459,6 @@
Jeda semasa beralih ke data mudah alih
Muat turun yang tidak dapat dihentikan akan dimulakan semula
Menunggu
+ Ubah folder muat turun untuk melihat kesan
+ Dayakan lakaran kecil video skrin kunci
\ No newline at end of file
From aecc9081527fb54cdf4176871a451f12f8e3d590 Mon Sep 17 00:00:00 2001
From: Adolfo Jayme Barrientos
Date: Sun, 9 Feb 2020 17:29:43 +0000
Subject: [PATCH 0322/1194] Translated using Weblate (Spanish)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-es/strings.xml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 1216c02c5..17ef8b5b7 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -221,7 +221,7 @@
Seleccione un canal
No hay suscripciones a canales todavía
Seleccione un kiosco
- Kiosco
+ Quiosco
Tendencias
50 mejores
Mostrar sugerencia cuando se presiona el botón de 2.º plano o emergente en la página de detalles del vídeo
@@ -517,7 +517,7 @@
- %s escucha
- %s escuchas
- El idioma cambiará luego de que la app sea reiniciada.
+ El idioma cambiará luego de que se reinicie la aplicación.
Duración de búsqueda al avanzar y/o retroceder
Instancias de PeerTube
Selecciona tus instancias favoritas de PeerTube
@@ -525,7 +525,7 @@
Agregar instancia
Ingresar URL de la instancia
No se pudo validar la instancia
- Sólo URLs con HTTPS son soportados
+ Solo se admiten URL HTTPS
La instancia ya existe
Local
Agregados recientemente
@@ -538,8 +538,8 @@
Eliminar archivos descargados
Eliminadas %1$s descargas
Dar permisos para que se muestre por sobre otras apps
- Idioma de la app
+ Idioma de aplicación
Predeterminado del sistema
- Presiona \"Hecho\" cuando esté resuelto
+ Pulse en «Hecho» cuando esté resuelto
Hecho
\ No newline at end of file
From 3624f1b9a2c1113a2bd09618590e265f84bdad48 Mon Sep 17 00:00:00 2001
From: burstw0w
Date: Tue, 11 Feb 2020 01:05:34 +0000
Subject: [PATCH 0323/1194] Translated using Weblate (Serbian)
Currently translated at 46.6% (248 of 532 strings)
---
app/src/main/res/values-sr/strings.xml | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index a8abb98e9..ee999d779 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -14,9 +14,9 @@
Подели помоћу
Отвори помоћу
ротација
- Одредиште преузимања за видео
- Путања за упис преузетих видеа
- Унесите путању за преузимање видеа
+ Одредиште преузимања снимака
+ Преузети снимци се чувају овде
+ Изаберите фолдер за преузимање видео снимака
Подразумевана резолуција
Пусти помоћу Кодија
Апликација Кор (Kore) није нађена. Инсталирати је?
@@ -57,7 +57,6 @@
Не могу да дешифрујем потпис видео урл-а
Не могу да рашчланим веб-сајт
Садржај није доступан
-
Садржај
Прикажи старосно-ограничени садржај
Старосно-ограничени видео. Премошћавање је доступно у поставкама.
@@ -82,7 +81,7 @@
уживо
Тапните на претрагу за почетак
Аутопуштање
- Аутоматско пуштање видеа по позиву друге апликације
+ Пушта видео по позиву друге апликације
Почни
Паузирај
Пусти
@@ -179,7 +178,7 @@
Не могу да учитам лиценцу
Одјављен са канала
Не могу да изменим претплату
- Не могу да ажурирам претплату
+ Није могуће ажурирати претплату
Плејер
Понашање
Историјат
From c7a9847e662c01e8aa7b6536008dc254ffb7fcf1 Mon Sep 17 00:00:00 2001
From: Daniele Lira Mereb
Date: Thu, 13 Feb 2020 19:36:39 +0000
Subject: [PATCH 0324/1194] Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-pt-rBR/strings.xml | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 04c4e3960..04f73b7e4 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -496,7 +496,7 @@ abrir em modo popup
Não há espaço disponível no dispositivo
Progresso perdido devido ao arquivo ter sido apagado
Tempo limite de conexão
- Tem certeza\?
+ Apagar todo o histórico de downloads ou excluir todos os arquivos baixados\?
Limitar tamanho da fila de download
Um download será executado ao mesmo tempo
Iniciar downloads
@@ -543,4 +543,12 @@ abrir em modo popup
Escolha uma instância
Ativar capa do vídeo na tela de bloqueio
Mostra capa do vídeo na tela de bloqueio ao usar player em segundo plano
+ Limpar histórico de downloads
+ Excluir arquivos baixados
+ %1$s arquivos excluídos
+ Permita sobreposição a outros aplicativos
+ Idioma do aplicativo
+ Padrão do sistema
+ Toque em \"Feito\" ao resolver
+ Feito
\ No newline at end of file
From 3b5cf0e37c012935d0f4df5a94012d6f8c9c7aaf Mon Sep 17 00:00:00 2001
From: Nogooduser
Date: Thu, 13 Feb 2020 16:14:56 +0000
Subject: [PATCH 0325/1194] Translated using Weblate (Portuguese)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-pt/strings.xml | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 3c4977a06..c06a1909d 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -23,7 +23,7 @@
Reproduzir no Kodi
Aplicação Kore não encontrada. Instalar?
Mostrar opção \"Reproduzir no Kodi\"
- Exibe uma opção para reproduzir o vídeo no Kodi
+ Exibir uma opção para reproduzir o vídeo via Kodi media center
Áudio
Formato de áudio predefinido
Transferir
@@ -109,7 +109,7 @@
Abrir no modo de janela autónoma
Preto
Tudo
- Canais
+ Canal
Sim
Depois
k
@@ -152,7 +152,7 @@
Sobre
Colaboradores
Licenças
- Aplicação de reprodução de emissões livre para Android.
+ Aplicação livre de reprodução de emissões para Android.
Ver no GitHub
Licença do NewPipe
Se tem ideias para: tradução, alterações de desenho, limpeza de código, ou alterações significativas no código fonte - todas as ajudas são bem-vindas. Quanto mais se faz, melhor ficará!
@@ -217,7 +217,7 @@
A recuperar de um erro do reprodutor
Conteúdo da página principal
Página vazia
- Página de subscrições
+ Subscrições
Página do canal
Selecione um canal
Não existem canais subscritos
@@ -225,7 +225,7 @@
Kiosk
Tendências
Top 50
- Novo e popular
+ Tendências
Reprodutor em segundo plano
Reprodutor \'popup\'
Remover
@@ -266,7 +266,7 @@
Carregar miniaturas
Desative para parar o carregamento das miniaturas, poupar dados e utilização da memória. As alterações limpam a cache de imagem do disco e da memória.
Cache de imagens limpa
- País do conteúdo predefinido
+ País predefinido dos conteúdos
Depuração
Não foram encontradas emissões de vídeo
Não foram encontradas emissões de áudio
@@ -279,7 +279,7 @@
Rejeitar
Site
Visite ao site NewPipe para obter mais informação e novidades.
- Página \"kiosk\"
+ Página de Quiosque
Página de \"Feed\"
Exportados
Importados
@@ -372,8 +372,8 @@
Colocar em fila em segundo plano
Colocar em fila num nova janela
Ação de \'abrir\' preferida
- Ação predefinida para abrir o conteúdo — %s
- Definir como miniatura da lista de reprodução
+ Ação predefinida ao abrir o conteúdo — %s
+ Definir como Miniatura da Lista de Reprodução
Não foi possível eliminar a lista de reprodução.
Ajustar
Preencher
@@ -537,4 +537,9 @@
Limpar histórico de descarregamentos
Apagar ficheiros descarregados
%1$s descarregamentos apagados
+ Permitir sobreposição da janela sobre outras aplicações
+ Idioma da aplicação
+ Predefinição do sistema
+ Pressionar \"Aceitar\" quando terminar
+ Aceitar
\ No newline at end of file
From c995c6fda5d4c29494c9084c19c2640ab49082b0 Mon Sep 17 00:00:00 2001
From: Milo Ivir
Date: Wed, 12 Feb 2020 22:32:21 +0000
Subject: [PATCH 0326/1194] Translated using Weblate (Croatian)
Currently translated at 88.2% (469 of 532 strings)
---
app/src/main/res/values-hr/strings.xml | 34 +++++++++++++-------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index beb2bdd02..d5e751262 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -30,12 +30,12 @@
Što je novo
Pozadina
Skočni prozor
- Put za preuzimanje videozapisa
- Put za spremanje videozapisa u
- Unesi put za preuzimanje videozapisa
+ Mapa za preuzimanje videozapisa
+ Preuzete video datoteke se spremaju ovdje
+ Odaberi mapu za preuzimanje video datoteka
Mapa za preuzimanje zvuka
- Preuzeti zvuk je spremljen ovdje
- Unesi put za preuzimanje zvučne datoteke
+ Preuzete audio datoteke se spremaju ovdje
+ Odaberi mapu za preuzimanje audio datoteka
Automatska reprodukcija
Reproducira videozapis kad je NewPipe pozvan iz druge aplikacije
Zadana razlučivost
@@ -61,7 +61,7 @@
Prikaži prijedloge pri traženju
Povijest pretraživanja
Svaku pretragu spremi lokalno
- Povijest & Predmemorija
+ Prati povijest
Pratite pogledane videozapise
Nastavi nakon dobivanja fokusa
Nastavi reproducirati nakon prekidanja (npr. telefonski pozivi)
@@ -116,7 +116,7 @@
Vaš komentar (na engleskom):
Detalji:
Sličica pregleda videozapisa
- Sličica pregleda videozapisa
+ Pokreni video, trajanje:
Profilna slika prenositelja
Goreglasovi
Doljeglasovi
@@ -130,9 +130,9 @@
Zvuk
Ponovno pokušaj
Dozvola za pisanje po pohrani je odbijena
- tis
+ tis.
mil
- mlrd
+ mlrd.
Počni
Pauziraj
Reproduciraj
@@ -150,7 +150,7 @@
Dodirni za detalje
Molimo pričekajte…
Kopirano u međuspremnik
- Molimo odaberite dostupnu mapu za preuzimanje
+ Kasnije odredite mapu za preuzimanje u postavkama
Ova dozvola je potrebna za
\notvaranje skočnog prozora
reCAPTCHA
@@ -209,8 +209,8 @@
Nema videozapisa
- %s video
- - %s videozapisa
- - %s videozapisi
+ - %s videa
+ - %s videa
Stavka je izbrisana
U redu čekanja za reprod. u pozadini
@@ -397,7 +397,7 @@
Otkrivanje grešaka
Obavijest o ažuriranju aplikacije
Uključite ili isključite orijentaciju
- Preuzimanje na vanjsku SD karticu još nije moguće. Poništite lokaciju mape za preuzimanje\?
+ Preuzimanje na vanjsku SD karticu nije moguće. Ponovo postaviti lokaciju mape za preuzimanje\?
Vanjski playeri ne podržavaju ove vrste veza
Nije pronađen nijedan videozapis
Nije pronađen nijedan zvuk
@@ -433,7 +433,7 @@
Način prikaza popisa
Automatski
Gotovo
- U redu za čekanje
+ Na čekanju
pauzirano
Na redu za čekanje
naknadna obrada
@@ -446,8 +446,8 @@
Preuzeta datoteka s tim nazivom već postoji
U tijeku je preuzimanje s ovim nazivom
Kod
- Datoteku nije moguće izraditi
- Odredišnu mapu nije moguće izraditi
+ Odredišnu mapu nije moguće stvoriti
+ Datoteku nije moguće stvoriti
Sustav je odbio dozvolu
Sigurna veza nije uspjela
Nije moguće pronaći server
@@ -460,7 +460,7 @@
Stop
Maksimalnih ponovnih pokušaja
Maksimalni broj pokušaja prije poništavanja preuzimanja
- Pauziraj prilikom prebacivanja na mobilne podatke
+ Prekini na mrežama s ograničenim prometom
Preuzimanja koja se ne mogu zaustaviti ponovno će se pokrenuti
Prikaži komentare
Onemogućite da biste prestali prikazivati komentare
From 67af05e5048dc6124a741ad1dd1544845f815976 Mon Sep 17 00:00:00 2001
From: Tobias Groza
Date: Fri, 14 Feb 2020 19:12:59 +0100
Subject: [PATCH 0327/1194] Use "Report error" instead of "Report Error"
Co-Authored-By: Stypox
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ccd58f003..eb17fcd50 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -246,7 +246,7 @@
Dislikes
Use Tor
(Experimental) Force download traffic through Tor for increased privacy (streaming videos not yet supported).
- Report Error
+ Report error
User report
No results
@string/no_videos
From dbb6848a9b0282b2d0ff62abe53d56e7f43885b1 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 14 Feb 2020 20:35:48 +0000
Subject: [PATCH 0328/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-eo/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index ddbda086a..33f24695f 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -539,7 +539,7 @@
%1$s elŝutoj forviŝitaj
Doni la permeson por afiŝiĝi supre aliaj apoj
Lingvo de la apo
- Sistema lingvo
+ Sistemnormo
Premu « Finita » kiam solvita
Finita
\ No newline at end of file
From 0d896674286d3317d04fa2695507dddb5339dcbe Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 14 Feb 2020 20:32:32 +0000
Subject: [PATCH 0329/1194] Translated using Weblate (French)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-fr/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 8a8c00c60..c200b1b8b 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -540,7 +540,7 @@
%1$s téléchargements supprimés
Autoriser la superposition d\'applis
Langue de l\'application
- Langue du système
+ Prédéfini par le système
Appuyez sur « Terminé » une fois résolu
Terminé
\ No newline at end of file
From 6a91a3a9478fcd5d6520c5549cc87802b92487bd Mon Sep 17 00:00:00 2001
From: chr56
Date: Sat, 15 Feb 2020 12:52:19 +0800
Subject: [PATCH 0330/1194] reapply changes after merging
---
app/src/main/res/values-cmn/strings.xml | 504 ------------
app/src/main/res/values-zh-rCN/strings.xml | 867 +++++++++++----------
2 files changed, 475 insertions(+), 896 deletions(-)
delete mode 100644 app/src/main/res/values-cmn/strings.xml
diff --git a/app/src/main/res/values-cmn/strings.xml b/app/src/main/res/values-cmn/strings.xml
deleted file mode 100644
index 878efa9f2..000000000
--- a/app/src/main/res/values-cmn/strings.xml
+++ /dev/null
@@ -1,504 +0,0 @@
-
-
- 点击搜索按钮即可开始使用
- %1$s 次观看
- 发布于 %1$s
- 找不到媒体播放器。您要安装 VLC 吗?
- 找不到媒体播放器(您可以安装 VLC 来播放)。
- 安装
- 取消
- 在浏览器中打开
- 在悬浮窗模式下打开
- 分享
- 下载
- 下载媒体文件
- 搜索
- 设置
- 您是不是要找:%1$s?
- 分享至
- 选择浏览器
- 旋转
- 使用外部视频播放器
- 删除某些分辨率下的音频
- 使用外部音频播放器
- NewPipe 悬浮窗模式
- 订阅
- 已订阅
- 退订成功
- 无法更改订阅
- 无法更新订阅
- 显示信息
- 主页
- 订阅
- 已添加书签到播放列表
- 新功能
- 转到后台
- 悬浮窗
- 添加到
- 视频下载文件夹
- 已下载的视频储存在此处
- 选择视频文件的下载文件夹
- 音频下载文件夹
- 已下载的音频存储在此处
- 选择音频文件的下载文件夹
- 自动播放
- NewPipes被其它程序调用时播放视频
- 默认分辨率
- 默认悬浮窗分辨率
- 显示更高的分辨率
- 只有部分设备支持播放 2K/4K 视频
- 用 Kodi 播放
- 没找到 Kore 应用,需要安装它吗?
- 显示“用 Kodi 播放”选项
- 显示以 Kodi 媒体中心播放视频的选项
- 音频
- 默认音频格式
- 默认视频格式
- 主题
- 亮色
- 酷黑
- 黑色
- 记住悬浮窗的尺寸与位置
- 记住上一次悬浮窗的位置以及大小
- 已清除图像缓存
- 最小化悬浮窗播放器
- 清除观看历史
- 搜索记录已删除。
- 错误
- 网络错误
- 举报错误
- 没有结果
- 开始
- 暂停
- 播放
- 创建
- 删除
- 删除所有
- 新任务
- 好
-\n
- 错误
-\n
- 不支持的服务器
- 文件已存在
- NewPipe 下载中
- 请稍等…
- 字母与数字
- 最特别的字符
- 这个文件里没有已下载应用程式
- 关于NewPipe
- 设置
- 关于
- 第三方执照
- 打开网页
- 删除书签
- 确定删除该播放列表吗?
- 已创建播放列表
- 播放列表
- 步骤
- 重置
- 为了遵守欧洲通用数据保护法规(GDPR,我们请你注意NewPipe的隐私政策.请仔细阅读.
-\n你必须接受它才能将错误报告发送给我们.
- 接受
- 拒绝
- 没有限制
- 使用移动数据时的解析度限制
- 最小化应用程序切换
- 从主视频播放器切换到其他应用时的操作 - %s
- 没有
- 最小化后台播放
- 使用快速粗略定位
- 粗略定位功能允许播放器以略低的精确度为代价换取更快的定位速度
- 下载缩略图
- 清除缓存的元数据
- 移除所有缓存的网页数据
- 已清除缓存的元数据
- 不加载缩略图时,可以节省数据和存储空间。更改后将清除存储空间和扩展空间的缓存。
- 自动排列下一个媒体
- 在非重复排列中播放最后一个媒体时自动推荐相关媒体
- 玩家手势控制
- 使用手势控制播放器的亮度和音量
- 搜索建议
- 搜索时显示建议
- 搜索历史记录
- 在本地存储搜索
- 观看历史
- 记录观看过的视频
- 取得视窗焦点时继续播放
- 在被打断后继续播放(例如有来电)
- 下载
- 下一部
- 显示「下一部」及「相关」的视频
- 显示「长按以新增」的提示
- 在视频详细信息页按下后台播放或悬浮窗按钮时提示
- 不支持该网址
- 默认内容的国家
- 服务
- 播放器
- 行为
- 视频与音频
- 历史记录和缓存数据
- 悬浮窗
- 外观
- 其他
- 调试
- 在后台播放
- 在悬浮窗下播放
- 已添加到后台播放队列
- 已添加到悬浮窗播放队列
- 播放
- 内容
- 年龄限制内容
- 显示有年龄限制的视频。可以从设置中允许该内容。
- 直播
- 下载
- 下载
- 错误报告
- 所有
- 频道
- 频道
- 播放列表
- 播放列表
- 曲目
- 用户
- 是的
- 稍等
- 不适用
- 过滤
- 刷新
- 清除
- 调整
- 最佳分辨率
- 复原
- 全部播放
- 总是
- 仅一次
- 文件
- NewPipe 通知
- NewPipe 后台播放和悬浮窗播放的通知
- [未知]
- 切换方向
- 切换到后台
- 切换到悬浮窗
- 切换到首页
- 导入数据库
- 导出数据库
- 覆盖您当前的历史记录和订阅
- 导出历史记录、订阅和播放列表
- 删除播放过的媒体的历史记录及回放位置
- 确定要清除所有观看历史记录吗?
- 观看历史记录已清除。
- 清除搜索历史记录
- 清除搜索关键词的历史记录
- 确定要清除所有搜索历史记录吗?
- 无法加载所有缩略图
- 无法解析视频网址签名
- 无法解析网站
- 无法完全解析网站
- 内容不可用
- 无法设置下载菜单
- 目前还不支持观看直播
- 无法获得任何媒体
- 无法加载图片
- 应用程序或界面出现崩溃了
- 无法播放此媒体
- 发生了无法恢复的播放器错误
- 正在从播放器错误中恢复
- 外部播放器不支持此类型的链接
- 无效的网址
- 找不到视频串流
- 找不到音频串流
- 无效的文件夹
- 无效的文件/内容来源
- 该文件不存在或缺少读写权限
- 文件名不能为空
- 发生错误:%1$s
- 没有可供下载的串流
- 抱歉,这不应该发生的。
- 通过电子邮件报告错误
- 抱歉,发生了一些错误。
- 报告
- 信息:
- 发生了什么:
- 事件:\\n请求:\\n内容语言:\\n服务:\\nGMT 时间:\\n组件:\\n版本:\\n系统版本:
- 您的评论(请用英语):
- 详细:
- 视频预览缩略图
- 视频预览缩略图
- 上传者的头像缩略图
- 喜欢
- 不喜欢
- 使用 Tor
- (实验性)通过 Tor 强制下载流量以增加隐私(暂不支持视频媒体)。
- 用户报告
- 这里什么都没有
- 拖动以重新排序
- 无法创建下载目录「%1$s」
- 已成功创建下载目录「%1$s」
- 视频
- 音频
- 重试
- 手机存储访问权限被拒绝
- 千
- 万
- 十亿
- 没有订阅者
-
- - %s 位订阅者
-
-
- 无观看次数
-
- - %s 次观看
-
-
- 没有视频
- 删除
- 校验
- 退出
- 重命名
- 文件名
- 线程
- 错误的网址或网络不可用
- 点按以查看详细信息
- 复制到剪贴板
- 请稍后在设置中定义一个下载文件夹
- 在悬浮窗模式打开
-\n需要此权限
- 已删除一个项目。
- reCAPTCHA 验证
- reCAPTCHA 验证
- 需完成 reCAPTCHA 验证
- 下载
- 文件名中允许的字符
- 无效字符将替换为该值
- 替换字符
- © %1$s 由 %2$s 使用 %3$s 版权所有
- 无法加载许可证
- 关于
- 贡献者
- 许可证
- 安卓上开源且轻便的媒体播放器。
- 贡献
- 您是否有想法帮助我们:翻译、界面设计、代码优化以及真正繁重的功能扩展 - 我们随时欢迎您提供帮助。让 NewPipe 越变越好!
- 在 GitHub 上查看
- 捐赠
- NewPipe 由社区人员维护和开发额,他们耗费时间务求为您带来最佳体验。现在是时候回过头来,让我们的开发人员能够在使 NewPipe 更加完美的同时,享受一杯咖啡。
- 回馈
- 网站
- 访问 NewPipe 网站了解更多信息和新闻。
- NewPipe 的隐私政策
- NewPipe 项目是非常重视您的隐私。因此,未经您的同意,该应用程序不会收集任何数据。
-\nNewPipe 的隐私政策详细说明了当您发送崩溃报告时,什么资料会被传送及储存。
- 阅读隐私政策
- NewPipe 的许可证
- NewPipe 是一个 Copyleft 的自由软件:您可以随意使用、研究、分享或改进它。在遵守由自由软件基金会所发布的 GNU 通用公共授权条款的状况下,您可以自由地再发布或修改它;授权条款预设使用第三版,但您也可以选择更新的版本。
- 阅读许可证
- 历史记录
- 搜索
- 观看
- 历史记录被关闭了
- 历史记录
- 没有历史记录
- 清除历史记录
- 项目已删除
- 确定要从搜索历史记录中删除该项吗?
- 确定要从观看历史记录中删除该项吗?
- 您确定要删除历史记录中的所有项吗?
- 上一次播放
- 最受欢迎
- 首页内容
- 空白页面
- 互动页面
- 订阅页面
- Feed 页面
- 频道页面
- 选择一个频道
- 尚未订阅任何频道
- 选择一个互动
- 输出
- 接入
- 无效的压缩文件
- 警告:无法导入所有文件。
- 这将覆盖您当前的设定。
- 您是否要导入设定?
- 互动
- 趋势
- 前 50
- 最新和热门
- 转到后台播放
- 悬浮窗播放
- 移除
- 详细
- 音频设置
- 长按加入队列
- 加入后台播放列表
- 加入悬浮窗播放列表
- 从这里开始播放
- 开始在后台播放
- 开始在新悬浮窗播放
- 打开抽屉
- 关闭抽屉
- 很快就会出现在这里 ;D
- 偏好的「开启」动作
- 开启内容时的默认动作 - %s
- 视频播放器
- 后台播放器
- 悬浮窗播放器
- 总是询问
- 正在获取信息…
- 正在载入请求的内容
- 新的播放列表
- 删除
- 重命名
- 名称
- 添加到播放列表
- 设为播放列表缩略图
- 将播放列表加入书签
- 播放列表缩略图已更改。
- 无法删除播放列表。
- 没有字幕
- 合适
- 填满
- 缩放
- 自动生成
- 字幕
- 修改播放器字幕文本比列和背景样式。需要重启才能生效。
- 启用 LeakCanary
- 内存泄漏监视可能导致应用程序在存储时无响应
- 报告活动周期外错误
- 强制报告在处理完片段或活动周期外发生的无法传递的 Rx 异常
- 导入/导出
- 导入
- 导入至
- 导出到
- 正在导入…
- 正在导出…
- 导入文件
- 之前的导出
- 无法导入订阅
- 无法导出订阅
- 通过下载导出文件来导入 YouTube 订阅:
-\n
-\n1.移至该网址:%1$s
-\n2.当被询问时登入帐号
-\n3.应该开始下载(这是导出文件)
- 通过输入 URL 或 ID 来导入 SoundCloud的配置文件:
-\n
-\n1.在浏览器中启用「桌面模式」(该网站不适用于移动设备)
-\n2.移至该网址:%1$s
-\n3.当被询问时登入帐号
-\n4.复制您重定向的配置文件到网址。
- 您的 ID,soundcloud.com/yourid
- 请记住,此操作可能造成昂贵的网络花费。
-\n
-\n您是否要继续?
- 播放速度控制
- 速度
- 音量
- 取消链接(可能会导致扭曲)
- 静音时快进
- 退订
- 新标签
- 选择标签
- 音量手势控制
- 用手势控制播放器的音量
- 手势控制亮度
- 用手势控制播放器的亮度
- 默认的内容语言
- 升级
- 文件已删除
- 应用升级通知
- 新 NewPipe 版本通知
- 外储存不可行
- 无法下载到外部SD卡。重置下载文件夹位置?
- 恢复默认
- 您真的要恢复至默认吗?
- 选择
- 升级
- 列表
- 自动
- 轻按以下载
- 已完成
- 有待
- 已暂停
- 已加入队列
- 后处理
- 队列
- 系统拒绝该行动
- 下载失败
- 下载完成
- %s已下载完毕
- 生成独特的名字
- 覆写
- 同名的已下载文件已经存在
- 同名下载进行中
- 显示错误
- 代码
- 无法创建该文件
- 系统拒绝此批准
- 安全连接失败
- 找不到服务器
- 连不上服务器
- 伺服器没回送数据
- 找不到
- 后处理失败
- 清除已完毕的下载
- 停
- 重试上限
- 取消下载前可以尝试的最多次数
- 换成手机数据时中断
- 事件
- 使用默认选项卡, 读取保存的选项卡时出错
- 订阅者计数不可用
- 主页上显示的选项卡
- 会议
- 显示通知, 以便在新版本可用时提示应用更新
- 列表视图模式
- 网格
- 切换视图
- NewPipe 更新可用!
- 无法创建目标文件夹
- 服务器不接受多线程下载, 请使用 @string/msg_threads = 1重试
- 切换至移动数据时有用,尽管一些下载无法被暂停
- 显示评论
- 禁用停止显示评论
- 自动播放
-
- - 评论
-
-
- 没有评论
- 无法加载评论
- 关闭
- 继续播放
- 恢复上次播放位置
- 列表中的位置
- 在列表中显示播放位置指示符
- 清除数据
- 播放位置已删除。
- 文件被移动或删除
- 已存在具有此名称的文件
- 无法覆盖该文件
- 同名文件正在等待下载
- 处理此文件时 NewPipe 已关闭
- 设备上没有剩余空间
- 进度丢失,因为文件已被删除
- 连接超时
- 你确定吗?
- 限制下载队列
- 同时只有一个下载进行
- 开始全部下载
- 暂停全部下载
- 询问下载位置
- 每次下载将询问保存的位置
- 每次下载将询问保存的位置.
-\n如果要下载到外部SD卡,请选择外部存储访问框架
- 使用存储访问框架
- 存储访问框架(SAF)允许下载文件到外部SD卡。
-\n注:一些设备不兼容SAF
- 删除回放位置
- 删除所有回放位置
- 删除所有的回放位置吗?
- 更改要生效的下载文件夹
-
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 0282e6c92..d0405b57d 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -1,457 +1,540 @@
-
+
- 点播%1$s次
- %1$s发布
- 找不到播放器。您是否要安装 VLC?
+ 点击搜索按钮即可开始使用
+ %1$s 次观看
+ 发布于 %1$s
+ 在浏览器中打开
+ 在悬浮窗模式下打开
+ 您是不是要找:%1$s?
+ 找不到串流播放器 (您可以安装 VLC 进行播放)。
+ 下载串流文件
安装
取消
- 用浏览器打开
分享
下载
搜索
设置
- 您是不是要找: %1$s ?
- 分享视频
+ 分享给...
选择浏览器
- 旋转
- 使用外置视频播放器
- 使用外置音频播放器
视频下载路径
- 下载视频的存储路径
- 输入视频存储路径
- 默认分辨率
- 用Kodi播放
- 找不到Kore,您要安装Kore吗?
- 显示“用Kodi播放”的选项
- 显示 Kodi 媒体中心播放视频的选项
- 音频
- 默认音频格式
+ 已下载的视频存储在这里
+ 请选择下载视频的保存位置
+ 已下载的音频存储在这里
+ 选择下载音频的储存位置
+ 自动播放
+ 使用Kodi播放
主题
- 灰暗
- 明亮
-
+ 浅色
+ 暗黑
+ 黑色
下载
- 即将播放
- 显示下一部和相似的视频
- 不支援此网址
- 默认内容语言
- 视频和音频
+ 下一个
+ 不支持的 URL
外观
其他
- 后台播放
- 播放
+ 全部
+ 频道
+ 是
+ 稍后
网络错误
-
- 视频预览缩略图
- 视频预览缩略图
- 上传者的头像缩图
+
+ - %s 个视频
+ - %s 个视频
+
+ 禁用
+ 后台播放
+ 过滤器
+ 刷新
+ 搜索建议
+ 订阅
+ 已订阅
+ 观看历史
+ 播放器
+ 历史记录与缓存
+ 播放列表
+ 撤销
+ 全部播放
+ 总是
+ 仅一次
+ 添加至
+ 文件
+ 加载缩略图
+ 清除观看记录
+ 无
+ 最小化后台播放器
+ 最小化悬浮窗播放器
+ 频道
+ 播放列表
+ 取消订阅
+ 新标签
+ 更新
+ 文件已删除
+ 无法得知订阅人数
+ 每推出新版本时,弹出应用升级通知
+ 网格
+ 新版 NewPipe 已可升级!
+ 服务器不接受 接收 multi-threaded 下载, 以 @string/msg_threads = 1 重试
+ 自动播放
+ 清除数据
+ 观看记录已删除
喜欢
不喜欢
- 使用 Tor
- (实验性)强制下载流量使用 Tor 加强隐私(暂不支援流媒体视频)。
- 音频存储路径
- 下载音频的存储路径
- 输入音频文件存储路径
-
- 未能建立下载路径 “%1$s”
- 已创建下载目录 “%1$s”
- 内容
- 显示年龄限制内容
- 视频有年龄限制。请先在设置中启用\"显示年龄限制内容\"。
- 错误
- 无法加载所有缩略图
- 无法解密视频网址签名
- 无法解析网站
- 无法完全解析网站
- 内容不可用
- 无法设置下载菜单
- 这是一个在线流媒体,尚不支持。
- 无法获取任何流媒体
- 抱歉,这本不应该发生。
- 使用邮件报告错误
- 抱歉,发生了一些错误。
- 报告
- 信息:
- 发生什么:
- 您的注释(英文):
- 详细信息:
-
-
+ 使用Tor
+ (实验性)通过 Tor 强制下载流量以增强隐私(暂不支持串流视频)。
报告错误
用户报告
-
+ 无法创建下载目录\"%1$s\"
+ 已成功创建下载目录「%1$s」
视频
音频
重试
- 无权访问存储空间
- 自动播放
- 当NewPipe被其他应用调用时,自动播放视频
- 直播
-
- 点击搜索开始NewPipe
+ 存储访问权限已被拒绝
+
+ - %s 次观看
+ - %s 次观看
+
+ 千
+ 百万
开始
暂停
播放
删除
- 校验和
-
- 确定
-
- 文件名
- 线程
- 错误
- 服务器不支持
- 文件已经存在
- 网址不正确或网络不可用
- NewPipe 正在下载
- 点击了解细节
- 请稍候…
- 已复制到剪贴板
- 请选择一个可用的下载目录
-
+ 校验
新任务
- 下载
- 下载
- 错误报告
-
- 无法加载图像
- 应用/界面已崩溃
- 原因:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:
- reCAPTCHA
- reCAPTCHA 验证
-
- 需要 reCAPTCHA 验证
-
-以悬浮窗打开
- 选项启用时,某分辨率的视频将没有声音
- NewPipe悬浮窗模式
- 订阅
- 已订阅
- 已取消订阅频道
- 无法更改订阅
- 无法更新订阅
-
- 首页
- 订阅
-
- 新鲜事
-
- 后台播放
- 悬浮窗
-
- 窗口模式默认分辨率
- 显示更高的分辨率
- 只有部分设备支持 2K/4K 视频
- 首选视频格式
- 纯黑
- 记住悬浮窗大小和位置
- 记住上次悬浮窗的大小和位置
- 播放手势控制
- 使用手势操作控制播放器的亮度和音量
- 搜索建议
- 在搜索时显示搜索建议
- 搜索记录
- 在本地存储搜索请求
- 历史和缓存
- 记住观看的视频
- 焦点恢复
- 在打扰(例如来电)过后恢复视频播放
-
-
- 窗口模式
- 以窗口模式播放
- 所有
- 频道
- 是的
- 稍后
- 已禁用
- 筛选器
- 刷新
- 清除
- 重新调整大小
- 最佳分辨率
-
- NewPipe 通知
- NewPipe 后台播放和窗口播放器的通知
-
- K
- M
- B
-
- 该项权限用于
-\n以窗口模式打开
-
- 下载
- 在文件名中允许的字符
- 无效的字符将以该值取代
- 替换字符
-
- 字母和数字
- 特殊字符
-
- 关于 NewPipe
+ OK
+ 文件名
+ 线程数
+ 错误
+ 不支持的服务器
+ 文件已存在
+ 点击了解详情
+ 请稍候…
+ 复制至剪贴板
+ reCAPTCHA验证码
+ 悬浮窗播放
+ 关于NewPipe
设置
关于
第三方许可
- © %1$s by %2$s under %3$s
- 无法加载许可
+ © %1$s :作者 %2$s (使用 %3$s )
+ 无法加载许可证
打开网站
关于
贡献者
- 许可
- 开源的轻量级流媒体Android客户端。
- 在 GitHub 上查看
- NewPipe 许可
- 无论你有什么想法:翻译程序,改进设计,优化代码或是想做出大量修改——我们都随时欢迎。做得越多它将变得越好!
- 阅读许可
- 贡献
-
- 历史记录
- 搜索记录
- 观看记录
- 历史记录已禁用
- 历史记录
- 没有历史记录
- 历史记录已清除
-
-播放器
- 行为
- 历史记录 & 缓存
- 在后台播放器上排队
- 在弹出播放器上排队
- 播放列表
- 撤销
- 全部播放
-
- [未知]
-
- 无法播放此流媒体
- 发生无法解决的播放器错误
+ 许可证
+ 下载
+ 文件名中允许的字符
+ 无效字符将会被替换为此
+ 字母和数字
+ 最特殊字符
没有结果
- 空空如也
-
- 无订阅者
+ 没有订阅者
- - %s 位订阅者
-
-
- 无观看次数
-
- - %s 次观看
-
-
+ - %s 位订阅者
+ - %s 位订阅者
+
没有视频
-
- - %s 部视频
-
-
- 项目已删除
- 找不到播放器(你可以安装 VLC 来播放)
- 下载串流文件。
- 显示详情
-
- 书签
-
- 添入
-
- 使用粗略但快速的寻找
- 粗略寻找让播放器更快找到视频的进度位置
- 加载缩略图
- 停用后,NewPipe將不再加载缩略图,减少数据使用和腾空存储空间,亦会清除内存和内存卡上的缩略图缓存
- 已清除图像缓存
- 清除缓存元数据
- 移除所有网页的缓存数据
- 已清除元数据缓存
- 自动播放队列中下一个视频
- 当播放完非循环列表中的最后一个视频时,自动加入一个相关视频到播放列表
- 显示\"长按添加\"提示
- 当视频详情页中的背景或悬浮按钮被按下的时候显示提示
- 默认内容国家
- 服务
- 调试
- 总是
- 仅一次
- 文件
-
- 切换方向
- 切换到后台
- 切换到悬浮窗
- 切换到主页
-
- 导入数据库
- 导出数据库
- 将覆盖你现有历史记录和订阅
- 导出历史记录,订阅和播放列表
- 从播放器错误中恢复
- 外部播放器不支持这些链接类型
- 无效的链接
- 未找到视频
- 未找到音频
- 无效的目录
- 无效的文件/内容来源
- 文件不存在或无读写权限
- 文件名不能为空
- 发生了一个错误:%1$s
- 无视频媒体可以下载
-
- 拖拽以重新排列
-
+ 视频
+ 拖动以重新排序
创建
- 删除一个
- 删除全部
+ 仅删除一个
+ 全部删除
解除
- 重命名
-
- 捐赠
- NewPipe 是一群志愿者花费业余时间开发的,目的是为您带来最佳体验。你的一点心意,可以让开发者们在享受一杯 Java 的咖啡的同时让 NewPipe 变得更好用。
- 捐赠
- 网页
- 访问 NewPipe 网站以获取更多的信息和新闻。
- 你想从搜索历史中删除此项吗?
- 你想从观看历史中删除此项吗?
- 确实要删除历史记录的所有项目吗?
- 上一次播放
- 最多播放
-
- 主页内容
+ 重 命名
+ 未安装用于播放此文件的应用程序
+ 已删除1个项目。
+ 哪些标签需要在主页上展示
+ 列表视图模式
+ 已完成
+ 等待中…
+ 已暂停
+ 排队中
+ 加入队列
+ 操作已被系统拒绝
+ 下载失败
+ 下载完成
+ %s 次下载已完成
+ 没有评论
+ 切换服务,当前选择:
+ 找不到串流播放器。您想安装 VLC 吗?
+ 旋转
+ 使用外部视频播放器
+ 使用外部音频播放器
+ 音频下载文件夹
+ 从其他应用调用 NewPipe 时播放视频
+ 默认分辨率
+ 找不到Kore。是否安装?
+ 显示“用Kodi播放”选项
+ 显示“通过Kodi media center播放视频的选项”
+ 音频
+ 默认音频格式
+ 显示“下一个”和“类似的”视频
+ 视频和音频
+ 在后台播放
+ 播放
+ 内容
+ 受年龄限制的内容
+ 显示受年龄限制的视频。可从设置允许此类内容。
+ 直播
+ 下载
+ 下载
+ 错误报告
+ 错误
+ 无法加载所有缩略图
+ 无法解密视频的 URL 签名
+ 无法解析网址
+ 无法完全解析网址
+ 内容不可用
+ 无法设置下载菜单
+ 暂时不支持观看直播
+ 无法获得任何信息流
+ 无法加载图像
+ App UI 崩溃
+ 抱歉,这不应该发生的。
+ 通过电子邮件报告错误
+ 抱歉,发生了一些错误。
+ 报告
+ 信息:
+ 发生了什么:
+ 详情:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:
+ 您的注释(请用英文):
+ 详细信息:
+ 视频预览缩略图
+ 播放视频,时长:
+ 视频上传者的头像缩略图
+ 字节
+ 错误的 URL 或未联网
+ NewPipe下载中
+ 请稍后在设置中设定下载目录
+ 用悬浮窗模式
+\n需要此权限
+ reCAPTCHA验证
+ 请求的新的CAPTCHA验证
+ NewPipe 悬浮窗模式
+ 在悬浮窗中播放
+ 默认悬浮窗分辨率
+ 使用更高的分辨率
+ 仅某些设备支持播放2K / 4K视频
+ 清除
+ 记住悬浮窗的尺寸与位置
+ 记住最后一次使用悬浮窗的大小和位置
+ 悬浮窗
+ 调整大小
+ 隐藏部分没有音频的分辨率
+ 播放器手势控制
+ 使用手势控制播放器的亮度和音量
+ 显示搜索建议
+ 最佳分辨率
+ 开源小巧的Android媒体播放器。
+ 在GitHub上查看
+ NewPipe开源许可证
+ 你是否有想:翻译、设计、清理或重型代码更改 ——我们始终欢迎你来贡献!
+ 阅读许可证
+ 贡献
+ 替换字符
+ 取消订阅频道
+ 无法修改订阅
+ 无法更新订阅
+ 主页
+ 订阅
+ 最新
+ 恢复前台焦点
+ 中断后继续播放(例如突然来电后)
+ 搜索历史记录
+ 在本地存储搜索查询记录
+ 记录已观看视频
+ 历史
+ 已搜索
+ 已观看
+ 历史记录功能已关闭
+ 历史
+ 历史记录为空
+ 清除历史记录
+ NewPipe 通知
+ NewPipe 后台播放和悬浮窗播放的通知
+ 默认视频格式
+ 行为
+ 空空如也...
+ 0次观看
+ 项目已删除
+ 是否要从搜索历史记录中删除此项目?
+ 显示在主页面内容
空白页
- Kiosk 页
+ 『时下流行』页-自定义
订阅页
- Feed 页
+ Feed 页面
频道页
- 选择频道
- 还没有订阅的频道
- 选择 kiosk
- 导出完成
- 导入完成
- 无有效的 ZIP 文件
- 警告:无法导入所有文件。
- 将覆盖你现有设置。
-
- Kiosk
- 流行的
+ 选择一个频道
+ 尚未订阅频道
+ 选择一个时下流行页
+ 『时下流行』
+ 趋势
前50
- 最新 & 最热
- 后台播放器
+ 最新与热门
+ 显示 \"长按添加\" 说明
+ 在视频详情页中,按下背景播放或悬浮窗播放按钮时显示提示
+ 已加入后台播放播放列表
+ 已加入悬浮窗播放列表
+ 无法播放此串流
+ 发生无法恢复播放器错误
+ 恢复播放器错误
+ 后台播放
悬浮窗播放器
移除
详情
音频设置
- 按住以队列
- 在后台队列
- 在悬浮窗队列
- 从这里播放
- 从这里在后台播放
- 从这里在悬浮窗播放
-
- 打开侧栏菜单
- 关闭侧栏菜单
- 精彩内容即将呈现 ;D
-
-
- 偏好\"打开\"动作
- 打开内容的默认动作 — %s
-
+ 长按队列
+ [未知]
+ 添加到后台部分队列
+ 添加至新悬浮窗列表
+ 开始在此处开始播放
+ 开始后台播放
+ 开始在新悬浮窗中播放
+ 捐赠
+ NewPipe 是由志愿者花费时间为您带来最佳体验开发的。回馈帮助开发人员在享用一杯咖啡的同时,让 NewPipe 变得更好。
+ 回馈
+ 网站
+ 请访问 NewPipe 网站了解更多信息和讯息。
+ 默认国家/地区
+ 切换方向
+ 切换到背景播放
+ 切换到悬浮窗播放
+ 切换到主页面
+ 服务
+ 打开抽屉
+ 关闭抽屉
+ 第三方播放器不支持此类型链接
+ 无效 URL
+ 未找到视频串流
+ 找不到音频串流
视频播放器
后台播放器
悬浮窗播放器
- 总是询问
-
- 获取信息中…
- 正在加载请求内容
-
- 创建新播放列表
- 删除播放列表
- 重命名播放列表
+ 正在获取信息…
+ 正在加载请求的内容
+ 导入数据库
+ 导出数据库
+ 覆盖当前历史记录和订阅
+ 导出历史记录、订阅和播放列表
+ 导出成功
+ 导入成功
+ 没有有效的ZIP文件
+ 警告:无法导入所有文件。
+ 这将覆盖当前设置。
+ 显示信息
+ 书签
+ 确定要从观看历史记录中删除该项吗?
+ 是否确实要从历史记录中删除所有项目?
+ 最后播放
+ 播放最多
+ 总是寻问
+ 新建播放列表
+ 删除
+ 重 命名
名称
- 加入播放列表
- 设置为播放列表缩略图
-
- 书签播放列表
- 移除书签
-
- 你想删除此播放列表吗?
- 播放列表已创建
- 加入播放列表
- 播放列表缩略图已更改
+ 添加到播放列表
+ 设为播放列表缩略图
+ 收藏播放列表
+ 删除收藏
+ 删除此播放列表?
+ 新建播放列表成功
+ 加入播放列表成功
+ 播放列表缩略图更改成功。
无法删除播放列表
-
无字幕
-
适应屏幕
填充屏幕
- 放大填充
-
+ 缩放
+ 敬请等待
+ 调试
自动生成
-
- 启用 LeakCanary
- 内存泄露监测可能会在heap dumping时导致应用失去响应
-
- 报告生命周期外的错误
- 处理完无法送达的、发生在Fragment或activity生命周期之外的Rx异常后强制报告
-
+ 启用LeakCanary
+ 『内存泄漏监视』可能导致应用在『核心转储』时无响应
+ 报告『提前结束Android生命周期』错误
+ 强制报告处理后的未送达的Activity或Fragment生命周期之外的Rx异常
+ 使用快速不精确搜索
+ 粗略定位播放:允许播放器以略低的精确度为代价换取更快的定位速度
+ 自动播放下一个
+ 当播放完非循环列表中的最后一个视频时,自动加入一个相关视频到播放列表
+ 没有此文件夹
+ 无相似文件/内容源
+ 该文件不存在 或 缺少读写该文件的权限
+ 文件名不能为空
+ 发生错误: %1$s
导入/导出
导入
- 从导入
- 导出至
-
- 导入中…
- 导出中…
-
+ 从...导入
+ 导出到...
+ 正在导入…
+ 正在导出…
导入文件
- 之前的导出
-
+ 以前的导出
无法导入订阅
无法导出订阅
-
- 通过下载导出文件导入 YouTube 订阅:
-\n1. 在浏览器打开URL:%1$s
-\n2. 登录账户
-\n3. 下载应该会马上开始(这个就是导出文件)
- 通过输入URL或您的ID导入SoundCloud配置:
-\n1. 在浏览器中开启\"桌面模式\"(该网站不适用于移动设备)
-\n2. 打开URL:%1$s
-\n3. 登录账号
-\n3. 复制重定向后的URL。
- 你的ID 或 soundcloud.com/你的ID
-
- 请注意该操作可能消耗大量网络流量。
-\n您希望继续吗?
-
+ 通过下载导出文件来导入 YouTube 订阅:
+\n
+\n1. 转到此网站: %1$s
+\n2. 登录(如果需要)
+\n3. 应该立即开始下载(即导出文件)
+ 通过键入网址或你的 ID 导入 SoundCloud 配置文件:
+\n
+\n1. 在浏览器中启用\"电脑模式\"(该网站不适用于移动设备)
+\n2. 转到此 URL: %1$s
+\n3. 登录(如果需要)
+\n4. 复制重定向的配置文件下载地址。
+ 你的 ID:soundcloud.com/[你的ID]
+ 该操作消耗大量流量,
+\n你想继续吗?
+ 关闭可防止加载缩略图,节已省数据和内存使用。(若现在更改会清除内存和储存中缓存)
+ 清空图像缓存成功
+ 清空已缓存元数据
+ 清空已缓存的网页数据
+ 清空元数据缓存成功
播放速度控制
- 速度
+ 节奏
音调
- Unhook(可能导致失真)
- 默认
-未安装能播放此文件的应用
-
+ 解除关联(可能导致失真)
+ 首选“打开”操作
+ 打开内容时默认操作: = %s
+ 无可下载的串流内容
字幕
- 修改播放器的字幕文本大小和背景样式。需要重启应用程序以生效
-
- 清除观看记录
- 删除视频观看记录
- 删除全部观看记录。
- 观看记录已删除。
- 清除搜索记录
- 删除搜索关键词记录
- 删除全部搜索记录。
- 搜索记录已删除。
- 已删除1项。
-
- NewPipe的隐私策略
- NewPipe 项目非常重视您的隐私。因此, 未经您的同意,应用程序不会收集任何您的数据。 NewPipe 的隐私策略详细解释了您在发送崩溃报告时会发送和存储的哪些数据。
- 阅读隐私策略
- NewPipe 是 copyleft 的自由软件: 你可以按照自己的意愿使用、学习、分享和改进它。具体地说, 您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款(第3版或者任何更高版本), 重新发布和/或修改本软件。
- 您是否希望同时导入设置?
-
- 为了遵守欧洲通用数据保护条例(GDPR),我们提醒您注意NewPipe的隐私政策。 请仔细阅读。
-\n您必须接受它才能向我们发送错误报告。
+ 修改播放器字幕比例和背景样式。需要重新启动应用程序才能生效。
+ 删除串流的播放历史和播放位置
+ 删除全部观看记录?
+ 清除搜索历史记录
+ 清除搜索关键词的历史记录
+ 是否删除全部搜索历史记录?
+ 搜索历史记录已删除。
+ NewPipe 是版权自由软件:您可以随时使用、研究共享和改进它。您可以根据自由软件基金会发布的 GNU 通用公共许可证GPLv3或(由您选择的)任何更高版本的许可证重新分发或修改该许可证。
+ 是否要同时导入设置?
+ NewPipe的隐私政策
+ NewPipe 项目非常重视您的隐私。因此,未经您的同意,应用程序不会收集任何数据。
+\nNewPipe 的隐私政策详细解释了在发送崩溃报告时发送和存储的数据。
+ 阅读隐私政策
+ 为了遵守欧盟的《通用数据保护条例》(GDPR),我们特此提醒您注意 NewPipe 的隐私政策。请您仔细阅读。
+\n您必须在同意以后才能向我们发送错误报告。
接受
拒绝
-
- 不限制
+ 无限制
使用移动数据时限制分辨率
- 更多频道
- 更多频道
- 用户们
-
+ 退出应用时最小化
+ 从主播放器切换到其他应用时的操作 - %s
+ 静音时快进
+ 滑块[比例尺]
+ 重 置
+ 曲目
+ 用户
+ 选择标签
+ 音量手势控制
+ 使用手势控制播放器的音量
+ 亮度手势控制
+ 使用手势控制播放器的亮度
+ 视频默认语言
+ 应用更新通知
+ NewPipe有新版本的通知
+ 外置存储不可用
+ 无法下载到外部 SD 卡。重置下载文件夹位置?
+ 读取已保存标签时发生错误,因此使用者默认标签
+ 恢复默认
+ 是否恢复默认值?
+ 选择
+ 更新
+ 列表
+ 自动
+ 切换视图
+ 点击下载
+ 后期处理
+ 生成唯一名称
+ 覆盖
+ 正在使用此名称进行下载
+ 显示错误
+ 代码
+ 无法创建目标文件夹
+ 无法创建文件
+ 权限被系统拒绝
+ 安全连接失败
+ 找不到服务器
+ 无法连接到服务器
+ 服务器未发送数据
+ 找不到 NOT FOUND
+ 后期处理失败
+ 清除已完成的下载
+ 停止
+ 最大重试次数
+ 取消下载前的最多尝试次数
+ 在切换到移动流量网络时中断播放
+ 切换至移动数据时可能有用,尽管一些下载无法被暂停
+ 事件
+ 近期大会
+ 显示评论
+ 禁用,以停止显示评论
+
+ - %s 条评论
+ - %s 条评论
+
+ 无法加载评论
+ 关闭
+ 恢复播放
+ 恢复上次播放位置
+ 列表中的位置
+ 在列表中,显示视频最后一次播放时的播放位置
+ 已删除播放位置记录。
+ 文件被已移动或删除
+ 该名称的文件已经存在
+ 命名冲突,已存在具有此名称文件
+ 无法覆盖文件
+ 有此名称的已暂停下载
+ NewPipe 在处理文件时被关闭
+ 设备上没有剩余储存空间
+ 进度丢失,文件已被删除
+ 连接超时
+ 是否要清除下载历史记录或删除所有下载的文件?
+ 最大下载队列
+ 同时只允许一个下载进行
+ 开始下载
+ 暂停下载
+ 询问下载位置
+ 系统将询问您将每次下载的保存位置
+ 系统将询问您将每次下载的保存位置。
+\n(如果要下载到外部 SD 卡,请选择 SAF)
+ 使用 SAF
+ 存储访问框架(SAF)允许下载文件到外部SD卡。
+\n注:一些设备不兼容SAF
+ 删除播放位置记录
+ 删除所有播放位置记录
+ 删除所有播放位置记录?
+ 更改下载目录让内容生效
+ 『时下流行』页-默认
+ 没有人在观看
+
+ - %s 人在观看
+ - %s 人在观看
+
+ 没有人在听
+
+ - %s 人在听
+ - %s 人在听
+
+ 重新启动应用后,语言将更改。
+ PeerTube 服务器
+ 设置自己喜欢的PeerTube服务器
+ 查找最适合你的服务器%s
+ 添加服务器
+ 输入服务器网址(URL)
+ 无法验证服务器
+ 仅支持 HTTPS和URL
+ 该服务器已存在
+ 本地
+ 最近添加
+ 最喜欢的
+ 自动生成的(未找到上传者)
+ 正在恢复
+ 无法恢复此下载
+ 选择一个服务器
+ 快进 / 快退的单位时间
+ 在锁屏上显示视频缩略图
+ 在后台播放时,锁屏上将会显示视频的缩略图
+ 清除下载历史记录
+ 删除下载了的文件
+ 已删除 %1$s 下载
+
\ No newline at end of file
From 9407ac8c247cc57d1701dc68f3dbb7214150c2b4 Mon Sep 17 00:00:00 2001
From: chr56
Date: Sat, 15 Feb 2020 13:07:34 +0800
Subject: [PATCH 0331/1194] fix reCaptcha strings in zh-rCN
---
app/src/main/res/values-zh-rCN/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index d0405b57d..8be5dd967 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -110,7 +110,7 @@
点击了解详情
请稍候…
复制至剪贴板
- reCAPTCHA验证码
+ reCAPTCHA验证码
悬浮窗播放
关于NewPipe
设置
@@ -208,7 +208,7 @@
请稍后在设置中设定下载目录
用悬浮窗模式
\n需要此权限
- reCAPTCHA验证
+ reCAPTCHA验证
请求的新的CAPTCHA验证
NewPipe 悬浮窗模式
在悬浮窗中播放
From 5151c6cb54d853366dd5aaf1cc527bd1877f45b4 Mon Sep 17 00:00:00 2001
From: chr56
Date: Sat, 15 Feb 2020 18:39:41 +0800
Subject: [PATCH 0332/1194] fix wrong langcode of Chinesein settings_keys.xml
---
app/src/main/res/values/settings_keys.xml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 1a7d61dae..cdb29ca86 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -988,8 +988,8 @@
- uk
- ur
- vi
- - zh
- - zh-hans
+ - zh-cn
+ - zh-hk
- zh-tw
@@ -1053,9 +1053,9 @@
- українська мова
- اردو
- Tiếng Việt
- - 官话
- - 简化字
- - 臺灣華語
+ - 简体中文
+ - 繁體中文(廣東話)
+ - 正體中文
From f089cd027ebe1dc6088e3d7427e9d1c78352a815 Mon Sep 17 00:00:00 2001
From: bopol
Date: Fri, 14 Feb 2020 18:19:35 +0100
Subject: [PATCH 0333/1194] Multiple localization fixes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
With the extractor PR, fixes title & description shown in the wrong language.
Fixed views / spectators counts possibly in the wrong language
Fixed live spectators not showing full count on detail page
Fixed LIVE shown on players, it shows translated instead
Fixed Videos string in search / three dots not available in Weblate
(because it was videos, but there already was a plural string named videos, in Weblate)
Subscriber count is always giving the short count.
We can't get exact number since this YouTube update: https://support.google.com/youtube/thread/6543166
But only short count (B, M, k), so showing full number, eg for 1.9M: 1,900,000, is wrong because the number could be 1,923,490 or 1,897,789…
Added a « sytem default » option to content language and country language selector.
It's the one selected by default (not en-GB anymore then), and correspond to the
language of the system / country of the system
By system I mean phone, tablet, TV…
Fixed russian showing - before time ago (eg 19hrs ago)
This is a workaround fix, I opened an issue on prettytime library repo.
Fixed russian plurals:
other was used instead of many for videos and subscribers
Fixed seek_duration english only
---
app/build.gradle | 2 +-
.../fragments/detail/VideoDetailFragment.java | 2 +-
.../list/channel/ChannelFragment.java | 2 +-
.../holder/StreamInfoItemHolder.java | 2 +-
.../settings/VideoAudioSettingsFragment.java | 12 +++++++-
.../org/schabi/newpipe/util/Localization.java | 29 ++++++++++++-------
.../schabi/newpipe/util/ServiceHelper.java | 2 +-
.../activity_player_queue_control.xml | 3 +-
.../activity_main_player.xml | 3 +-
.../main/res/layout/activity_main_player.xml | 3 +-
.../layout/activity_player_queue_control.xml | 3 +-
app/src/main/res/layout/player_popup.xml | 3 +-
app/src/main/res/values-eo/strings.xml | 2 ++
app/src/main/res/values-ru/strings.xml | 4 +--
app/src/main/res/values/settings_keys.xml | 22 ++++++++------
app/src/main/res/values/strings.xml | 7 ++---
16 files changed, 59 insertions(+), 42 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 5da8c9ff0..10afbef31 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -63,7 +63,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:9112a10'
+ implementation 'com.github.B0pol:NewPipeExtractor:a9c6beec1434f4edd4197fb655e5327bae94cc92'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index 3c594bdfa..7dd98003a 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -1074,7 +1074,7 @@ public class VideoDetailFragment
if (info.getStreamType().equals(StreamType.AUDIO_LIVE_STREAM)) {
videoCountView.setText(Localization.listeningCount(activity, info.getViewCount()));
} else if (info.getStreamType().equals(StreamType.LIVE_STREAM)) {
- videoCountView.setText(Localization.watchingCount(activity, info.getViewCount()));
+ videoCountView.setText(Localization.localizeWatchingCount(activity, info.getViewCount()));
} else {
videoCountView.setText(Localization.localizeViewCount(activity, info.getViewCount()));
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java
index c20ff0fc2..7b7a08a48 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java
@@ -370,7 +370,7 @@ public class ChannelFragment extends BaseListInfoFragment {
headerSubscribersTextView.setVisibility(View.VISIBLE);
if (result.getSubscriberCount() >= 0) {
- headerSubscribersTextView.setText(Localization.localizeSubscribersCount(activity, result.getSubscriberCount()));
+ headerSubscribersTextView.setText(Localization.shortSubscriberCount(activity, result.getSubscriberCount()));
} else {
headerSubscribersTextView.setText(R.string.subscribers_count_not_available);
}
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java
index c48934d10..1dfbbca3f 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java
@@ -60,7 +60,7 @@ public class StreamInfoItemHolder extends StreamMiniInfoItemHolder {
if (infoItem.getStreamType().equals(StreamType.AUDIO_LIVE_STREAM)) {
viewsAndDate = Localization.listeningCount(itemBuilder.getContext(), infoItem.getViewCount());
} else if (infoItem.getStreamType().equals(StreamType.LIVE_STREAM)) {
- viewsAndDate = Localization.watchingCount(itemBuilder.getContext(), infoItem.getViewCount());
+ viewsAndDate = Localization.shortWatchingCount(itemBuilder.getContext(), infoItem.getViewCount());
} else {
viewsAndDate = Localization.shortViewCount(itemBuilder.getContext(), infoItem.getViewCount());
}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 7bb931309..21560ee55 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -4,9 +4,9 @@ import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
-import android.view.View;
import androidx.annotation.Nullable;
+import androidx.preference.ListPreference;
import com.google.android.material.snackbar.Snackbar;
@@ -21,6 +21,16 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ String[] durationsDescriptions = getResources().getStringArray(R.array.seek_duration_description);
+ String[] durationsValues = getResources().getStringArray(R.array.seek_duration_value);
+ int currentDurationValue;
+ for (int i = 0; i < durationsDescriptions.length; i++) {
+ currentDurationValue = Integer.parseInt(durationsValues[i]) / 1000;
+ durationsDescriptions[i] = String.format(durationsDescriptions[i], currentDurationValue);
+ }
+ ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key));
+ durations.setEntries(durationsDescriptions);
+
listener = (sharedPreferences, s) -> {
// on M and above, if user chooses to minimise to popup player on exit and the app doesn't have
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index 6149118cc..b24298f4e 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -48,8 +48,8 @@ import java.util.Locale;
public class Localization {
- private static PrettyTime prettyTime;
private static final String DOT_SEPARATOR = " • ";
+ private static PrettyTime prettyTime;
private Localization() {
}
@@ -84,6 +84,9 @@ public class Localization {
final String contentLanguage = PreferenceManager
.getDefaultSharedPreferences(context)
.getString(context.getString(R.string.content_language_key), context.getString(R.string.default_language_value));
+ if (contentLanguage.equals("system")) {
+ return org.schabi.newpipe.extractor.localization.Localization.fromLocale(Locale.getDefault());
+ }
return org.schabi.newpipe.extractor.localization.Localization.fromLocalizationCode(contentLanguage);
}
@@ -91,6 +94,9 @@ public class Localization {
final String contentCountry = PreferenceManager
.getDefaultSharedPreferences(context)
.getString(context.getString(R.string.content_country_key), context.getString(R.string.default_country_value));
+ if (contentCountry.equals("system")) {
+ return new ContentCountry(Locale.getDefault().getCountry());
+ }
return new ContentCountry(contentCountry);
}
@@ -114,8 +120,7 @@ public class Localization {
}
public static String localizeNumber(Context context, long number) {
- Locale locale = getPreferredLocale(context);
- NumberFormat nf = NumberFormat.getInstance(locale);
+ NumberFormat nf = NumberFormat.getInstance(getAppLocale(context));
return nf.format(number);
}
@@ -132,14 +137,14 @@ public class Localization {
return getQuantity(context, R.plurals.views, R.string.no_views, viewCount, localizeNumber(context, viewCount));
}
- public static String localizeSubscribersCount(Context context, long subscriberCount) {
- return getQuantity(context, R.plurals.subscribers, R.string.no_subscribers, subscriberCount, localizeNumber(context, subscriberCount));
- }
-
public static String localizeStreamCount(Context context, long streamCount) {
return getQuantity(context, R.plurals.videos, R.string.no_videos, streamCount, localizeNumber(context, streamCount));
}
+ public static String localizeWatchingCount(Context context, long watchingCount) {
+ return getQuantity(context, R.plurals.watching, R.string.no_one_watching, watchingCount, localizeNumber(context, watchingCount));
+ }
+
public static String shortCount(Context context, long count) {
if (count >= 1000000000) {
return Long.toString(count / 1000000000) + context.getString(R.string.short_billion);
@@ -156,7 +161,7 @@ public class Localization {
return getQuantity(context, R.plurals.listening, R.string.no_one_listening, listeningCount, shortCount(context, listeningCount));
}
- public static String watchingCount(Context context, long watchingCount) {
+ public static String shortWatchingCount(Context context, long watchingCount) {
return getQuantity(context, R.plurals.watching, R.string.no_one_watching, watchingCount, shortCount(context, watchingCount));
}
@@ -215,7 +220,9 @@ public class Localization {
}
public static String relativeTime(Calendar calendarTime) {
- return getPrettyTime().formatUnrounded(calendarTime);
+ String time = getPrettyTime().formatUnrounded(calendarTime);
+ return time.startsWith("-") ? time.substring(1) : time;
+ //workaround fix for russian showing -1 day ago, -19hrs ago…
}
private static void changeAppLanguage(Locale loc, Resources res) {
@@ -226,8 +233,8 @@ public class Localization {
}
public static Locale getAppLocale(Context context) {
- SharedPreferences prefs = androidx.preference.PreferenceManager.getDefaultSharedPreferences(context);
- String lang = prefs.getString("app_language_key", "en");
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ String lang = prefs.getString(context.getString(R.string.app_language_key), "en");
Locale loc;
if (lang.equals("system")) {
loc = Locale.getDefault();
diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java
index 8929cc654..6726e4cfc 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java
@@ -44,7 +44,7 @@ public class ServiceHelper {
public static String getTranslatedFilterString(String filter, Context c) {
switch (filter) {
case "all": return c.getString(R.string.all);
- case "videos": return c.getString(R.string.videos);
+ case "videos": return c.getString(R.string.videos_string);
case "channels": return c.getString(R.string.channels);
case "playlists": return c.getString(R.string.playlists);
case "tracks": return c.getString(R.string.tracks);
diff --git a/app/src/main/res/layout-land/activity_player_queue_control.xml b/app/src/main/res/layout-land/activity_player_queue_control.xml
index 7467a79cf..6468c6784 100644
--- a/app/src/main/res/layout-land/activity_player_queue_control.xml
+++ b/app/src/main/res/layout-land/activity_player_queue_control.xml
@@ -304,10 +304,9 @@
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:gravity="center"
- android:text="@string/duration_live_button"
+ android:text="@string/duration_live"
android:textAllCaps="true"
android:textColor="?attr/colorAccent"
- android:maxLength="4"
android:background="?attr/selectableItemBackground"
android:visibility="gone"/>
diff --git a/app/src/main/res/layout-large-land/activity_main_player.xml b/app/src/main/res/layout-large-land/activity_main_player.xml
index 98017b132..8e11b99f3 100644
--- a/app/src/main/res/layout-large-land/activity_main_player.xml
+++ b/app/src/main/res/layout-large-land/activity_main_player.xml
@@ -442,10 +442,9 @@
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:gravity="center"
- android:text="@string/duration_live_button"
+ android:text="@string/duration_live"
android:textAllCaps="true"
android:textColor="@android:color/white"
- android:maxLength="4"
android:visibility="gone"
android:background="?attr/selectableItemBackground"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />
diff --git a/app/src/main/res/layout/activity_main_player.xml b/app/src/main/res/layout/activity_main_player.xml
index ab9eb8a61..804434456 100644
--- a/app/src/main/res/layout/activity_main_player.xml
+++ b/app/src/main/res/layout/activity_main_player.xml
@@ -440,10 +440,9 @@
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:gravity="center"
- android:text="@string/duration_live_button"
+ android:text="@string/duration_live"
android:textAllCaps="true"
android:textColor="@android:color/white"
- android:maxLength="4"
android:visibility="gone"
android:background="?attr/selectableItemBackground"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />
diff --git a/app/src/main/res/layout/activity_player_queue_control.xml b/app/src/main/res/layout/activity_player_queue_control.xml
index e113075af..d17a7007a 100644
--- a/app/src/main/res/layout/activity_player_queue_control.xml
+++ b/app/src/main/res/layout/activity_player_queue_control.xml
@@ -154,10 +154,9 @@
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:gravity="center"
- android:text="@string/duration_live_button"
+ android:text="@string/duration_live"
android:textAllCaps="true"
android:textColor="?attr/colorAccent"
- android:maxLength="4"
android:background="?attr/selectableItemBackground"
android:visibility="gone"/>
diff --git a/app/src/main/res/layout/player_popup.xml b/app/src/main/res/layout/player_popup.xml
index 9fbc22145..28c730913 100644
--- a/app/src/main/res/layout/player_popup.xml
+++ b/app/src/main/res/layout/player_popup.xml
@@ -208,10 +208,9 @@
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:gravity="center_vertical"
- android:text="@string/duration_live_button"
+ android:text="@string/duration_live"
android:textAllCaps="true"
android:textColor="@android:color/white"
- android:maxLength="4"
android:visibility="gone"
android:background="?attr/selectableItemBackground"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 6370c5e0e..469fb9e21 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -537,4 +537,6 @@
Forviŝi la historion de elŝutoj
Forviŝi elŝutitajn dosierojn
%1$s elŝutoj forviŝitaj
+ Filmetoj
+ %s sekundoj
\ No newline at end of file
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 807351a52..940d2ef2f 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -201,13 +201,13 @@
- %s подписчик
- %s подписчика
- - %s подписчиков
+ - %s подписчиков
Нет просмотров
- %s просмотр
- %s просмотра
- - %s просмотров
+ - %s просмотров
Нет видео
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 1a7d61dae..3a4e7c493 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -31,12 +31,12 @@
seek_duration
10000
- - 5 seconds
- - 10 seconds
- - 15 seconds
- - 20 seconds
- - 25 seconds
- - 30 seconds
+ - @string/dynamic_seek_duration_description
+ - @string/dynamic_seek_duration_description
+ - @string/dynamic_seek_duration_description
+ - @string/dynamic_seek_duration_description
+ - @string/dynamic_seek_duration_description
+ - @string/dynamic_seek_duration_description
- 5000
@@ -161,8 +161,8 @@
show_comments
stream_info_selected_tab
show_hold_to_append
- en
- GB
+ system
+ system
content_language
peertube_instance_setup
peertube_selected_instance
@@ -267,6 +267,7 @@
+ - system
- af
- az
- id
@@ -346,6 +347,7 @@
- ko
+ - @string/system_default
- Afrikaans
- Azərbaycan
- Bahasa Indonesia
@@ -427,6 +429,7 @@
+ - @string/system_default
- Afghanistan
- Aland Islands
- Albania
@@ -677,6 +680,7 @@
+ - system
- AF
- AX
- AL
@@ -993,7 +997,7 @@
- zh-tw
- - @string/systems_language
+ - @string/system_default
- العربية
- Azərbaycan dili
- Asturianu
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index dab9bde10..622b43bfd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -140,7 +140,6 @@
Age restricted content
Show age restricted video. Allowing such material is possible from Settings.
LIVE
- LIVE
Downloads
Downloads
Error report
@@ -149,8 +148,7 @@
Channels
Playlist
Playlists
- Videos
- Comments
+ Videos
Tracks
Users
Events
@@ -593,5 +591,6 @@
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
App language
- System default
+ System default
+ %s seconds
From 5b541cc9fb4b784ffd7a99e583356d70c8966c9c Mon Sep 17 00:00:00 2001
From: bopol
Date: Sat, 15 Feb 2020 14:53:05 +0100
Subject: [PATCH 0334/1194] resolve merge conflicts
---
app/src/main/res/values/settings_keys.xml | 6 +++---
app/src/main/res/values/strings.xml | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index e652f24ae..05a7416f0 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -347,7 +347,7 @@
- ko
- - @string/system_default
+ - @string/systems_language
- Afrikaans
- Azərbaycan
- Bahasa Indonesia
@@ -429,7 +429,7 @@
- - @string/system_default
+ - @string/systems_language
- Afghanistan
- Aland Islands
- Albania
@@ -997,7 +997,7 @@
- zh-tw
- - @string/system_default
+ - @string/systems_language
- العربية
- Azərbaycan dili
- Asturianu
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 622b43bfd..a5f1cb345 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -591,6 +591,6 @@
The Storage Access Framework allows downloads to an external SD card.\nNote: some devices are not compatible
Choose an instance
App language
- System default
+ System default
%s seconds
From 6f9543b9cfc3fb435e25a4af030016b13c221c5e Mon Sep 17 00:00:00 2001
From: B0pol
Date: Sat, 15 Feb 2020 13:50:12 +0000
Subject: [PATCH 0335/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-eo/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 33f24695f..0bec72e02 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -173,7 +173,7 @@
Viciĝi en la fona ludilo
Viciĝi en nova ŝprucfenestro
Komenci ludi en nova ŝprucfenestro
- Defaŭlta enhava lando
+ Preferata enhavlando
Ŝangi Orientiĝon
Ŝanĝi al Fono
Ŝanĝi al ŝprucfenestro
@@ -538,7 +538,7 @@
Forviŝi elŝutitajn dosierojn
%1$s elŝutoj forviŝitaj
Doni la permeson por afiŝiĝi supre aliaj apoj
- Lingvo de la apo
+ Preferata aplingvo
Sistemnormo
Premu « Finita » kiam solvita
Finita
From 4de2cfdcc62da47e8388701e689cd6cfa49ced98 Mon Sep 17 00:00:00 2001
From: B0pol
Date: Sun, 16 Feb 2020 09:12:55 +0000
Subject: [PATCH 0336/1194] Added translation using Weblate (Chuvash)
---
app/src/main/res/values-cv/strings.xml | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 app/src/main/res/values-cv/strings.xml
diff --git a/app/src/main/res/values-cv/strings.xml b/app/src/main/res/values-cv/strings.xml
new file mode 100644
index 000000000..a6b3daec9
--- /dev/null
+++ b/app/src/main/res/values-cv/strings.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
From 51f2efd48c6e58c6e835b11f54a81784a8191788 Mon Sep 17 00:00:00 2001
From: Alexey Dubrov
Date: Sun, 16 Feb 2020 16:08:53 +0300
Subject: [PATCH 0337/1194] Fix initial brightness value
---
.../java/org/schabi/newpipe/player/MainVideoPlayer.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 31f7dd74a..ebb9e2423 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -909,6 +909,14 @@ public final class MainVideoPlayer extends AppCompatActivity
final float currentVolumeNormalized = (float) getAudioReactor().getVolume() / getAudioReactor().getMaxVolume();
volumeProgressBar.setProgress((int) (volumeProgressBar.getMax() * currentVolumeNormalized));
}
+
+ final float screenBrightness = getWindow().getAttributes().screenBrightness;
+ brightnessProgressBar.setProgress((int) (brightnessProgressBar.getMax() * screenBrightness));
+
+ if (DEBUG) Log.d(TAG, "setInitialGestureValues: volumeProgressBar.getProgress() ["
+ + volumeProgressBar.getProgress() + "] "
+ + "brightnessProgressBar.getProgress() ["
+ + brightnessProgressBar.getProgress() + "]");
}
@Override
From e62e34fd5cef0a265946b99bbb3e020ea6dbf39a Mon Sep 17 00:00:00 2001
From: bopol
Date: Sat, 15 Feb 2020 16:29:46 +0100
Subject: [PATCH 0338/1194] created default_localization_key
---
app/build.gradle | 2 +-
.../fragments/list/search/SearchFragment.java | 2 +-
.../newpipe/settings/VideoAudioSettingsFragment.java | 1 +
.../java/org/schabi/newpipe/util/Localization.java | 12 ++++++------
app/src/main/res/values/settings_keys.xml | 10 +++++-----
app/src/main/res/xml/content_settings.xml | 6 +++---
6 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 9f23bffcf..77b27f50a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -63,7 +63,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.B0pol:NewPipeExtractor:a9c6beec1434f4edd4197fb655e5327bae94cc92'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:fc9f031'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
index f2e8aa244..fcb3eafa7 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
@@ -190,7 +190,7 @@ public class SearchFragment
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
isSuggestionsEnabled = preferences.getBoolean(getString(R.string.show_search_suggestions_key), true);
- contentCountry = preferences.getString(getString(R.string.content_country_key), getString(R.string.default_country_value));
+ contentCountry = preferences.getString(getString(R.string.content_country_key), getString(R.string.default_localization_key));
}
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 21560ee55..e5f49e2e8 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -21,6 +21,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ //initializing R.array.seek_duration_description to display the translation of seconds
String[] durationsDescriptions = getResources().getStringArray(R.array.seek_duration_description);
String[] durationsValues = getResources().getStringArray(R.array.seek_duration_value);
int currentDurationValue;
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index b24298f4e..cd66ec3c2 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -83,8 +83,8 @@ public class Localization {
public static org.schabi.newpipe.extractor.localization.Localization getPreferredLocalization(final Context context) {
final String contentLanguage = PreferenceManager
.getDefaultSharedPreferences(context)
- .getString(context.getString(R.string.content_language_key), context.getString(R.string.default_language_value));
- if (contentLanguage.equals("system")) {
+ .getString(context.getString(R.string.content_language_key), context.getString(R.string.default_localization_key));
+ if (contentLanguage.equals(context.getString(R.string.default_localization_key))) {
return org.schabi.newpipe.extractor.localization.Localization.fromLocale(Locale.getDefault());
}
return org.schabi.newpipe.extractor.localization.Localization.fromLocalizationCode(contentLanguage);
@@ -93,8 +93,8 @@ public class Localization {
public static ContentCountry getPreferredContentCountry(final Context context) {
final String contentCountry = PreferenceManager
.getDefaultSharedPreferences(context)
- .getString(context.getString(R.string.content_country_key), context.getString(R.string.default_country_value));
- if (contentCountry.equals("system")) {
+ .getString(context.getString(R.string.content_country_key), context.getString(R.string.default_localization_key));
+ if (contentCountry.equals(context.getString(R.string.default_localization_key))) {
return new ContentCountry(Locale.getDefault().getCountry());
}
return new ContentCountry(contentCountry);
@@ -104,7 +104,7 @@ public class Localization {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
String languageCode = sp.getString(context.getString(R.string.content_language_key),
- context.getString(R.string.default_language_value));
+ context.getString(R.string.default_localization_key));
try {
if (languageCode.length() == 2) {
@@ -236,7 +236,7 @@ public class Localization {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String lang = prefs.getString(context.getString(R.string.app_language_key), "en");
Locale loc;
- if (lang.equals("system")) {
+ if (lang.equals(context.getString(R.string.default_localization_key))) {
loc = Locale.getDefault();
} else if (lang.matches(".*-.*")) {
//to differentiate different versions of the language
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 05a7416f0..fba5546c1 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -161,8 +161,6 @@
show_comments
stream_info_selected_tab
show_hold_to_append
- system
- system
content_language
peertube_instance_setup
peertube_selected_instance
@@ -265,9 +263,11 @@
update_app_key
update_pref_screen_key
+
+ system
- - system
+ - @string/default_localization_key
- af
- az
- id
@@ -680,7 +680,7 @@
- - system
+ - @string/default_localization_key
- AF
- AX
- AL
@@ -932,7 +932,7 @@
- - system
+ - @string/default_localization_key
- ar
- az
- ast
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index 197c14487..8fe8a66af 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -6,7 +6,7 @@
Date: Sun, 16 Feb 2020 22:41:56 +0100
Subject: [PATCH 0339/1194] Apply suggestions from code review
Co-Authored-By: Stypox
---
app/src/main/res/values/strings.xml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a2c303c17..1a70d9eaa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -59,7 +59,7 @@
org.xbmc.kore
Show \"Play with Kodi\" option
Lock screen video thumbnail
- Displayed option to play a video via Kodi media center
+ Display an option to play a video via Kodi media center
A video thumbnail is shown on the lock screen when using the background player
Audio
Default audio format
@@ -100,7 +100,7 @@
Show playback position indicators in lists
Clear data
Keep track of watched videos
- Resumed playing
+ Resume playing
Continue playing after interruptions (e.g. phonecalls)
Download
Next
@@ -231,7 +231,7 @@
Sorry, that should not have happened.
Guru Meditation.
- Report this per e-mail
+ Report this error via e-mail
Sorry, some errors occurred.
Report
Info:
@@ -560,7 +560,7 @@
The file can not be created
The destination folder can not be created
Permission denied by the system
- Could not establish secure connection
+ Could not establish a secure connection
Could not find the server
Can not connect to the server
The server does not send data
@@ -590,7 +590,7 @@
You will be asked where to save each download
You will be asked where to save each download.\nChoose SAF if you want to download to an external SD card
Use SAF
- The \'Storage Access Framework\' allows downloads to an external SD card.\nNote: Some devices are incompatible
+ The \'Storage Access Framework\' allows downloads to an external SD card.\nNote: some devices are incompatible
Choose an instance
App language
System default
From e3a891688bb71bda52f26ffe697f469e347aaf3d Mon Sep 17 00:00:00 2001
From: Alexey Dubrov
Date: Mon, 17 Feb 2020 12:11:00 +0300
Subject: [PATCH 0340/1194] Get brightness from settings if screenBrightness is
set to auto
---
.../java/org/schabi/newpipe/player/MainVideoPlayer.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index ebb9e2423..3340f1107 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -910,7 +910,11 @@ public final class MainVideoPlayer extends AppCompatActivity
volumeProgressBar.setProgress((int) (volumeProgressBar.getMax() * currentVolumeNormalized));
}
- final float screenBrightness = getWindow().getAttributes().screenBrightness;
+ float screenBrightness = getWindow().getAttributes().screenBrightness;
+ if (screenBrightness < 0)
+ screenBrightness = Settings.System.getInt(getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS, 0) / 255.0f;
+
brightnessProgressBar.setProgress((int) (brightnessProgressBar.getMax() * screenBrightness));
if (DEBUG) Log.d(TAG, "setInitialGestureValues: volumeProgressBar.getProgress() ["
From 54f71c623a03af80dd9c27fd160d7e87fefca0dc Mon Sep 17 00:00:00 2001
From: bopol
Date: Mon, 17 Feb 2020 10:10:15 +0100
Subject: [PATCH 0341/1194] use plural string for
dynamic_seek_duration_description
---
.../settings/VideoAudioSettingsFragment.java | 14 +++++++++++---
app/src/main/res/values-eo/strings.xml | 4 +++-
app/src/main/res/values/settings_keys.xml | 14 ++++++++------
app/src/main/res/values/strings.xml | 5 +++++
4 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index e5f49e2e8..d5f46fb22 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -1,6 +1,7 @@
package org.schabi.newpipe.settings;
import android.content.SharedPreferences;
+import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
@@ -22,12 +23,19 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
super.onCreate(savedInstanceState);
//initializing R.array.seek_duration_description to display the translation of seconds
- String[] durationsDescriptions = getResources().getStringArray(R.array.seek_duration_description);
- String[] durationsValues = getResources().getStringArray(R.array.seek_duration_value);
+ Resources res = getResources();
+ String[] durationsValues = res.getStringArray(R.array.seek_duration_value);
+ String[] durationsDescriptions = res.getStringArray(R.array.seek_duration_description);
int currentDurationValue;
for (int i = 0; i < durationsDescriptions.length; i++) {
currentDurationValue = Integer.parseInt(durationsValues[i]) / 1000;
- durationsDescriptions[i] = String.format(durationsDescriptions[i], currentDurationValue);
+ try {
+ durationsDescriptions[i] = String.format(
+ res.getQuantityString(R.plurals.dynamic_seek_duration_description, currentDurationValue),
+ currentDurationValue);
+ } catch (Resources.NotFoundException ignored) {
+ //if this happens, the translation is missing, and the english string will be displayed instead
+ }
}
ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key));
durations.setEntries(durationsDescriptions);
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 8238b13bc..aa34644d1 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -538,10 +538,12 @@
Forviŝi elŝutitajn dosierojn
%1$s elŝutoj forviŝitaj
Filmetoj
- %s sekundoj
Doni la permeson por afiŝiĝi supre aliaj apoj
Lingvo de la apo
Sistemnormo
Premu « Finita » kiam solvita
Finita
+
+ - %s sekundoj
+
\ No newline at end of file
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index fba5546c1..b5bf738fb 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -31,12 +31,14 @@
seek_duration
10000
- - @string/dynamic_seek_duration_description
- - @string/dynamic_seek_duration_description
- - @string/dynamic_seek_duration_description
- - @string/dynamic_seek_duration_description
- - @string/dynamic_seek_duration_description
- - @string/dynamic_seek_duration_description
+
+ - 5 seconds
+ - 10 seconds
+ - 15 seconds
+ - 20 seconds
+ - 25 seconds
+ - 30 seconds
- 5000
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 712916449..39b2907ce 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -593,4 +593,9 @@
App language
System default
%s seconds
+
+ - %s seconds
+ - %s seconds
+ - %s seconds
+
From 55d17b556a4bc88c6c0e5e4a8f8d1c0f7a4a05f1 Mon Sep 17 00:00:00 2001
From: bopol
Date: Mon, 17 Feb 2020 10:18:20 +0100
Subject: [PATCH 0342/1194] added all the .iml files in gitignore, not only
app.iml
if somehow your module name isn't app, it will create a module-name.iml file, and isn't needed
---
app/.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/.gitignore b/app/.gitignore
index d9a86a57c..74862ab9f 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -1,3 +1,4 @@
.gitignore
/build
app.iml
+*.iml
From 91bd0be39eb8b8fd3315005efeaee729f4dd7bbf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Mon, 17 Feb 2020 14:54:45 +0100
Subject: [PATCH 0343/1194] Spelling: Some devices are incompatible
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1a70d9eaa..2329f1a77 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -590,7 +590,7 @@
You will be asked where to save each download
You will be asked where to save each download.\nChoose SAF if you want to download to an external SD card
Use SAF
- The \'Storage Access Framework\' allows downloads to an external SD card.\nNote: some devices are incompatible
+ The \'Storage Access Framework\' allows downloads to an external SD card.\nSome devices are incompatible
Choose an instance
App language
System default
From 9912ee8199e188bf0660fda1f6f67ea9a67936db Mon Sep 17 00:00:00 2001
From: bopol
Date: Tue, 18 Feb 2020 18:35:13 +0100
Subject: [PATCH 0344/1194] give info if content language is system on crash
---
.../main/java/org/schabi/newpipe/report/ErrorActivity.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
index c90aff1c9..b78751496 100644
--- a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
@@ -43,6 +43,7 @@ import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
+import java.util.Locale;
import java.util.TimeZone;
import java.util.Vector;
@@ -377,8 +378,12 @@ public class ErrorActivity extends AppCompatActivity {
}
private String getContentLangString() {
- return PreferenceManager.getDefaultSharedPreferences(this)
+ String contentLanguage = PreferenceManager.getDefaultSharedPreferences(this)
.getString(this.getString(R.string.content_country_key), "none");
+ if (contentLanguage.equals(getString(R.string.default_localization_key))) {
+ contentLanguage = Locale.getDefault().toString();
+ }
+ return contentLanguage;
}
private String getOsString() {
From 831e9985e2484665f8cc1159ea30d208d8c71cc1 Mon Sep 17 00:00:00 2001
From: Laurent Arnoud
Date: Tue, 18 Feb 2020 21:50:28 +0100
Subject: [PATCH 0345/1194] Migrate annotation to androidx on ReCaptchaActivity
---
app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index d72f729b5..4219638d6 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -18,7 +18,7 @@ import android.webkit.WebViewClient;
import org.schabi.newpipe.util.ThemeHelper;
-import javax.annotation.Nonnull;
+import androidx.annotation.NonNull;
/*
* Created by beneth on 06.12.16.
@@ -147,7 +147,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
// add other methods to extract cookies here
}
- private void addYoutubeCookies(@Nonnull String cookies) {
+ private void addYoutubeCookies(@NonNull String cookies) {
if (cookies.contains("s_gl=") || cookies.contains("goojf=") || cookies.contains("VISITOR_INFO1_LIVE=")) {
// youtube seems to also need the other cookies:
addCookie(cookies);
From 316871714ac5ff548465884f68e944ed663b410e Mon Sep 17 00:00:00 2001
From: B0pol
Date: Wed, 19 Feb 2020 17:40:03 +0100
Subject: [PATCH 0346/1194] Update app/.gitignore
Co-Authored-By: Stypox
---
app/.gitignore | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/.gitignore b/app/.gitignore
index 74862ab9f..53edac5e4 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -1,4 +1,3 @@
.gitignore
/build
-app.iml
*.iml
From f0e85b31aa7c7c74678a19fd0b6966f6a539fb8f Mon Sep 17 00:00:00 2001
From: mk3z
Date: Wed, 19 Feb 2020 20:59:14 +0000
Subject: [PATCH 0347/1194] Translated using Weblate (Finnish)
Currently translated at 64.8% (345 of 532 strings)
---
app/src/main/res/values-fi/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index edf10c6f0..d34a6408a 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -400,4 +400,6 @@
Peru tilaus
Uusi välilehti
Valitse välilehti
+ Valmis
+ Jono
\ No newline at end of file
From 61632b3d9dca940230d733c4eac0dd7e17df2d01 Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Thu, 20 Feb 2020 13:20:20 -0300
Subject: [PATCH 0348/1194] fixup for #3081 * dont write the "sbpg" box in
video tracks
---
.../java/org/schabi/newpipe/streams/Mp4FromDashWriter.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
index 57a7aaa9c..64e4534cb 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
@@ -291,7 +291,9 @@ public class Mp4FromDashWriter {
sampleCount[i] = 1;// the index is not base zero
sampleExtra[i] = -1;
}
- writeEntryArray(tablesInfo[i].sbgp, 1, sampleCount[i]);
+ if (tablesInfo[i].sbgp > 0) {
+ writeEntryArray(tablesInfo[i].sbgp, 1, sampleCount[i]);
+ }
}
if (auxBuffer == null) {
From 9f9b53c067f65859d2b9519a37e99420ad04b296 Mon Sep 17 00:00:00 2001
From: bopol
Date: Thu, 20 Feb 2020 18:55:22 +0100
Subject: [PATCH 0349/1194] =?UTF-8?q?remove=20unecessary=20=C2=ABfew=C2=BB?=
=?UTF-8?q?=20and=20=C2=ABmany=C2=BB=20for=20plural=20string=20in=20englis?=
=?UTF-8?q?h?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/res/values/strings.xml | 2 --
1 file changed, 2 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 39b2907ce..148a339a9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -594,8 +594,6 @@
System default
%s seconds
- - %s seconds
- - %s seconds
- %s seconds
From f7d73fc21b2b85776aadb20028eb3acf12a50e25 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vojt=C4=9Bch=20=C5=A0amla?=
Date: Thu, 20 Feb 2020 20:29:40 +0000
Subject: [PATCH 0350/1194] Translated using Weblate (Czech)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-cs/strings.xml | 38 +++++++++++++-------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index ff89170ac..65cd4026a 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -20,7 +20,7 @@
Složka pro stažené audio
Výchozí rozlišení
Přehrát pomocí Kodi
- Aplikace Kore nenalezena. Chcete ji nainstalovat?
+ Nainstalovat chybějící aplikaci Kore\?
%1$s zhlédnutí
Adresář pro stažená videa
Stažená videa jsou uložena tady
@@ -61,10 +61,10 @@
Přehrává video, když je NewPipe otevřen z jiné aplikace
Obsah
Věkově omezený obsah
- Zobrazit video s věkovým omezením. Povolit tento obsah lze v \"Nastavení\".
- ŽIVĚ
+ Zobrazit video s věkovým omezením. Změnit tuto volbu v budoucnu lze v \"Nastavení\".
+ Živě
Nebylo možné kompletně analyzovat stránku
- Začni klepnutím na hledat
+ Začni klepnutím na \"Hledat\"
Zkopírováno do schránky
Počkejte prosím…
NewPipe stahuje
@@ -84,9 +84,9 @@
Nahlásit chybu
Podrobnosti:
Co se stalo:
- NAHLÁSIT
+ Nahlásit
Omlouváme se, tohle se nemělo stát.
- Nahlásit chybu přes e-mail
+ Nahlásit tuto chybu přes e-mail
Omlouváme se, nastaly určité chyby.
Nepodařilo se nahrát obrázek
Aplikace/UI spadlo
@@ -121,11 +121,11 @@
otevření ve vyskakovacím okně
Odstraňuje zvuk v některých rozlišeních
Zobrazovat vyšší rozlišení
- Pouze některá zařízení podporují přehrávání 2K/4K videí
+ Pouze některá zařízení dokáží přehrát 2K/4K videa
Výchozí formát videa
Pamatovat si velikost a pozici vyskakovacího okna
Pamatovat si poslední velikost a pozici vyskakovacího okna
- NewPipe režim vyskakovacího okna
+ Režim vyskakovacího okna
Odebírat
Odebíráno
Odběr zrušen
@@ -138,14 +138,14 @@ otevření ve vyskakovacím okně
V okně
Výchozí rozlišení vyskakovacího okna
Ovládání přehrávače gesty
- Používat gesta pro nastavení jasu a hlasitosti přehrávače
+ Používat gesta pro ovládání jasu a hlasitosti přehrávače
Návrhy vyhledávání
Zobrazovat návrhy při vyhledávání
Historie vyhledávání
Hledané výrazy lokálně uchovávat
Historie sledování
Evidovat zhlédnutá videa
- Přehrávat po přechodu do popředí
+ Obnovit přehrávání
Pokračovat v přehrávání po přerušení (např. hovor)
Přehrávač
Chování
@@ -248,7 +248,7 @@ otevření ve vyskakovacím okně
Začít přehrávat na pozadí
Začít přehrávat v okně
Donate
- NewPipe je vyvíjen dobrovolníky, kteří tráví svůj čas, aby vaše zkušenost s aplikací byla co nejlepší. Vraťte vývojářům něco zpět, aby mohli NewPipe dále zlepšovat a zároveň si vychutnat šálek kávy.
+ NewPipe je vyvíjen dobrovolníky, kteří tráví svůj volný čas, aby vaše zkušenost s aplikací byla co nejlepší. Vraťte vývojářům něco zpět, aby mohli NewPipe dále zlepšovat a zároveň si vychutnat šálek kávy.
Daruj
Webová stránka
Pro další informace a novinky navštivte webovou stránku NewPipe.
@@ -316,7 +316,7 @@ otevření ve vyskakovacím okně
Zvětšit
Ladění
"Automaticky generováno "
- Povolit službu LeakCanary
+ LeakCanary
Monitoring úniku paměti může způsobit nereagování aplikace při heap dumpingu
Nahlásit mimo-cyklické chyby
Vynutit hlášení nedoručitelných výjimek Rx mimo životnost fragmentu nebo aktivity po odstranění
@@ -414,13 +414,13 @@ otevření ve vyskakovacím okně
Ovládání hlasitosti gesty
Používat gesta pro ovládání hlasitosti přehrávače
Ovládání jasu gesty
- Používat gesta pro kontrolu jasu přehrávače
+ Používat gesta pro ovládání jasu přehrávače
Aktualizace
Soubor smazán
Notifikace aktualizace aplikace
Notifikace pro novou verzi NewPipe
Externí úložiště není k dispozici
- Chyba při načítání uložených karet, použijí se výchozí karty
+ Nelze načíst uložené karty, takže se použijí výchozí karty
Obnovit do výchozího nastavení
Chcete obnovit výchozí nastavení\?
Počet odběratelů není k dispozici
@@ -457,7 +457,7 @@ otevření ve vyskakovacím okně
Cílovou složku nelze vytvořit
Soubor nelze vytvořit
Oprávnění odepřeno systémem
- Zabezpečené připojení selhalo
+ Nelze navázat zabezpečené připojení
Server se nepodařilo najít
Nelze se připojit k serveru
Server neposílá data
@@ -502,7 +502,7 @@ otevření ve vyskakovacím okně
Budete dotázáni, kam jednotlivé soubory stáhnout.
\nZvolte SAF, pokud si přejete stahovat na externí SD kartu
Použít SAF
- Storage Access Framework umožňuje stahovat na externí SD kartu.
+ \"Storage Access Framework\" umožňuje stahovat na externí SD kartu.
\nUpozornění: některá zařízení jsou nekompatibilní
Zobrazit pozici přehrávání v seznamech
Pozice playbacku smazány.
@@ -529,7 +529,7 @@ otevření ve vyskakovacím okně
Délka přetočení vpřed/zpět
Instance PeerTube
Vybrat oblíbené instance PeerTube
- Vyhledat nejvhodnější instance na %s
+ Vyhledat instance, které se vám líbí, na %s
Přidat instanci
Zadat URL instance
Instanci nebylo možno potvrdit
@@ -542,8 +542,8 @@ otevření ve vyskakovacím okně
obnovuji
Toto stahování nelze obnovit
Vyberte instanci
- Zapnout náhled videa na zamknuté obrazovce
- Hraje-li video na pozadí, náhled videa se ukáže na zamknuté obrazovce
+ Náhled videa na zamknuté obrazovce
+ Při použití přehrávače na pozadí se náhled videa ukáže na zamknuté obrazovce
Smazat historii stahování
Smazat stažené soubory
Smazat %1$s stahování
From fd076f5a58f25e39373999b90a63ec4415fb51ca Mon Sep 17 00:00:00 2001
From: zeritti
Date: Fri, 21 Feb 2020 15:53:31 +0000
Subject: [PATCH 0351/1194] Translated using Weblate (Czech)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-cs/strings.xml | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 65cd4026a..01bcfede7 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -98,7 +98,7 @@
Stažené soubory
Info:
Vaše poznámky (anglicky):
- Oprávnění přístupu do úložiště zamítnuto
+ Nejdříve udělit oprávnění přístupu k úložišti
Přehrát
Nová mise
OK
@@ -179,9 +179,9 @@ otevření ve vyskakovacím okně
Žádná videa
- - %s video
- - %s videa
- - %s videí
+ - %s Video
+ - %s Videa
+ - %s Videí
Stahování
Povolené znaky v názvech souborů
@@ -214,7 +214,7 @@ otevření ve vyskakovacím okně
Historie vymazána
Položka byla odstraněna
Zobrazovat tip \"Podržet pro přidání\"
- Zobrazí se po stisku tlačítek přehrát na pozadí nebo přehrát v okně na stránce s videem
+ Ukázat tip po stisku na pozadí nebo na popup tlačítko v \"Podrobnostech\" o videu
Ve frontě přehrávače na pozadí
Ve frontě přehrávače v okně
Přehrát vše
@@ -329,7 +329,7 @@ otevření ve vyskakovacím okně
Odebrat všechna data uložená v mezipaměti
Mezipaměť metadat vymazána
Automatická fronta dalšího streamu
- Automaticky připojí související stream při přehrávání posledního streamu v neopakující se frontě
+ Pokračovat konečnou (neopakující se) frontu playbacku připojením souvisejícího streamu
Soubor
Neexistující složka
Neexistující zdroj souboru/obsahu
@@ -552,4 +552,5 @@ otevření ve vyskakovacím okně
Jazyk systému
Po vyřešení stiskni \"Hotovo\"
Hotovo
+ Live
\ No newline at end of file
From d460351da2f3c7a0e30382298d40fb1b24ef9262 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Thu, 20 Feb 2020 09:59:03 +0000
Subject: [PATCH 0352/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-tr/strings.xml | 51 +++++++++++++-------------
1 file changed, 26 insertions(+), 25 deletions(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 1dd9deff6..557e59236 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -1,9 +1,9 @@
- Başlamak için aramaya dokunun
+ Başlamak için \"Arama\"ya dokunun
%1$s görüntüleme
Yayınlanma: %1$s
- Akış oynatıcısı bulunamadı. VLC\'yi yüklemek ister misiniz\?
+ Akış oynatıcısı bulunamadı. VLC yüklensin mi\?
Yükle
Vazgeç
Tarayıcıda aç
@@ -27,7 +27,7 @@
NewPipe başka uygulamadan çağrıldığında video oynatır
Öntanımlı çözünürlük
Kodi ile oynat
- Kore uygulaması bulunamadı. Yüklensin mi\?
+ Eksik Kore uygulaması yüklensin mi\?
\"Kodi ile oynat\" seçeneğini göster
Kodi ortam merkezi üzerinden video oynatmak için bir seçenek göster
Öntanımlı ses biçimi
@@ -47,8 +47,8 @@
Oynat
İçerik
Yaş kısıtlamalı içerik
- Yaş kısıtlamalı videoyu göster. Bu tür malzemelere Ayarlardan izin vermek mümkündür.
- CANLI
+ Yaş kısıtlamalı videoyu göster. Daha sonra ayarlardan değiştirilebilir.
+ Canlı
İndirilenler
İndirilenler
Hata bildirimi
@@ -64,9 +64,9 @@
Görüntü yüklenemedi
Uygulama/kullanıcı arayüzü çöktü
Üzgünüz, bu olmamalıydı.
- Hatayı e-posta aracılığıyla bildir
+ Bu hatayı e-posta aracılığıyla bildir
Üzgünüz, bazı hatalar oluştu.
- BİLDİR
+ Bildir
Bilgi:
Ne oldu:
Ne:\\nİstek:\\nİçerik Dili:\\nHizmet:\\nGMT Zamanı:\\nPaket:\\nSürüm:\\nİşletim sistemi sürümü:
@@ -76,14 +76,14 @@
Beğenmeme
Tor kullanın
(Deneysel) Artırılmış gizlilik için indirme trafiğini Tor\'dan geçmesi için zorlayın (video yayımlama henüz desteklenmemektedir).
- Hata Bildirin
+ Hata bildir
Kullanıcı raporu
İndirme dizini \'%1$s\' oluşturulamıyor
İndirme dizini \'%1$s\' oluşturuldu
Video
Ses
Yeniden dene
- Depolama erişim izni reddedildi
+ Önce depolama alanına erişim izni verin
Başlat
Duraklat
Oynat
@@ -104,10 +104,10 @@
Lütfen daha sonra ayarlardan uygun bir indirme dizini belirleyin
İndirme menüsü ayarlanamadı
Açılır pencere kipinde aç
- NewPipe açılır pencere kipi
+ Açılır pencere modu
Öntanımlı açılır pencere çözünürlüğü
Yüksek çözünürlükleri göster
- Yalnızca bazı aygıtlar 2K/4K video oynatmayı desteklemektedir
+ Yalnızca bazı aygıtlar 2K/4K videoları oynatabilir
Öntanımlı video biçimi
Siyah
Açılır pencere kipinde oynatılıyor
@@ -136,7 +136,7 @@
Açılan pencerenin son boyutunu ve konumunu hatırla
Açılır pencere
Yeniden boyutlandırılıyor
- BAZI çözünürlüklerde ses kaldırılır
+ Bazı çözünürlüklerde sesi kaldırır
Oynatıcının parlaklığını ve sesini kontrol etmek için hareketleri kullanın
Hareketli oynatıcı kontrolü
Arama önerileri
@@ -176,7 +176,7 @@
Arama sorgularını yerel olarak saklayın
İzleme geçmişi
İzlenen videoların kaydını tut
- Odaklanıldığında sürdür
+ Oynatmaya devam et
Kesintilerden sonra (örneğin telefon çağrısı) oynatmaya devam et
Oynatıcı
Davranış
@@ -208,7 +208,7 @@
Öge silindi
Bu ögeyi arama geçmişinden silmek istiyor musunuz\?
\"Eklemek için basılı tutun\" ipucunu göster
- Video ayrıntıları sayfasında arka plan veya açılır pencere düğmesine basıldığında ipucu göster
+ Video \"Ayrıntılar:\" sayfasında arka plan veya açılır pencere butonuna basıldığında ipucu göster
Arka plan oynatıcısı kuyruğuna eklendi
Açılır pencere oynatıcısı kuyruğuna eklendi
Tümünü Oynat
@@ -241,7 +241,7 @@
Arka planda oynatmayı başlat
Yeni açılır pencerede oynatmayı başlat
Bağışta bulunun
- NewPipe, size en iyi deneyimi sunmak için zaman harcayan gönüllüler tarafından geliştirilmiştir. Geliştiricilerin bir fincan kahvenin tadını çıkarırken NewPipe\'ı daha iyi hale getirmelerine yardımcı olun.
+ NewPipe, boş zamanlarını size en iyi kullanıcı deneyimi sunmak için harcayan gönüllüler tarafından geliştirilmiştir. Geliştiricilerin bir fincan kahvenin tadını çıkarırken NewPipe\'ı daha iyi hale getirmelerine yardımcı olun.
Bağışta bulunun
Web sitesi
Daha çok bilgi ve haber için NewPipe web sitesini ziyaret edin.
@@ -309,14 +309,14 @@
Hata ayıklama
Yakında bir şeyler burada görünecek ;D
Kendiliğinden oluşturulan
- LeakCanary\'i etkinleştir
+ LeakCanary
Bellek sızıntısı izleme, yığın boşaltımı sırasında uygulamanın yanıt vermemesine neden olabilir
Yaşam döngüsü dışı hatalarını bildir
Parçanın dışında veya atımdan sonraki etkinlik yaşam döngüsündeki teslim edilemeyen Rx beklentilerinin bildirimini zorla
Hızlı isabetsiz konumlama kullan
İsabetsiz konumlama, oynatıcının daha düşük hassasiyetle daha hızlı pozisyon aramasını sağlar
Sonraki akışı otomatik kuyruğa ekle
- Yinelenmeyen bir kuyruktaki son akışı oynatırken, ilgili bir akışı otomatik olarak ekle
+ İlgili bir akış ekleyerek sonlu (tekrarlanmayan) oynatma sırasını devam ettir
Dosya
Böyle bir dizin yok
Böyle bir dosya/içerik kaynağı yok
@@ -411,9 +411,9 @@
Yeni NewPipe sürümü için bildirimler
Harici depolama kullanılamıyor
Harici SD karta indirmek mümkün değil. İndirme dizini konumu sıfırlansın mı\?
- Öntanımlı sekmeler kullanılıyor, kaydedilen sekmeler okunurken hata
+ Kayıtlı sekmeler okunamadı, bu nedenle varsayılanlar kullanılıyor
Öntanımlıları geri yükle
- Öntanımlıları geri yüklemek istiyor musunuz\?
+ Varsayılanları geri yüklemek istiyor musunuz\?
Abone sayısı mevcut değil
Ana sayfada hangi sekmeler gösterilir
Seçim
@@ -444,7 +444,7 @@
Dosya oluşturulamıyor
Hedef dizin oluşturulamıyor
İzin sistem tarafından reddedildi
- Güvenli bağlantı başarısız
+ Güvenli bağlantı kurulamadı
Sunucu bulunamadı
Sunucuya bağlanılamıyor
Sunucu veri göndermiyor
@@ -461,7 +461,7 @@
Konferanslar
Beklemede
Yorumları göster
- Yorumları göstermeyi durdurmak için devre dışı bırak
+ Yorumları gizlemek için kapatın
Otomatik oynat
- Yorum
@@ -494,7 +494,7 @@
Her indirme için nereye kaydedileceği sorulacak.
\nEğer harici SD karta indirmek istiyorsanız DEÇ\'i seçin
DEÇ\'i kullan
- Depolama Erişimi Çerçevesi harici SD karta indirmelere izin verir.
+ \'Depolama Erişimi Çerçevesi\' harici SD karta indirmelere izin verir.
\nNot: Bazı aygıtlar uyumlu değildir
Oynatım konumlarını sil
Tüm oynatım konumlarını siler
@@ -520,7 +520,7 @@
Hızlı ileri/geri sarma süresi
PeerTube örnekleri
Favori PeerTube örneklerinizi seçin
- %s adresinde size en uygun örnekleri bulun
+ %s adresinde beğendiğiniz örnekleri bulun
Örnek ekle
Örnek URL\'sini girin
Örnek doğrulanamadı
@@ -533,8 +533,8 @@
kurtarılıyor
Bu indirme kurtarılamıyor
Oluşum seçin
- Kilit ekranı video küçük resmini etkinleştir
- Arka plan oynatıcıyı kullanırken kilit ekranında bir video küçük resmi görüntülenecektir
+ Kilit ekranı video küçük resmi
+ Arka plan oynatıcıyı kullanırken kilit ekranında bir video küçük resmi gösterilir
İndirme geçmişini temizle
İndirilen dosyaları sil
%1$s indirme silindi
@@ -543,4 +543,5 @@
Sistem öntanımlısı
Çözüldüğünde \"Bitti\" butonuna basın
Bitti
+ Canlı
\ No newline at end of file
From e1101dd6f13bc546f2fed75524b3240d16fd0eb0 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Thu, 20 Feb 2020 07:30:05 +0000
Subject: [PATCH 0353/1194] Translated using Weblate (Hebrew)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-he/strings.xml | 41 +++++++++++++-------------
1 file changed, 21 insertions(+), 20 deletions(-)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 72b6a92ab..59e4ce6be 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -19,7 +19,7 @@
שימוש בנגן סרטונים חיצוני
בחלק מהרזולוציות השמע יוסר
שימוש בנגן סרטונים חיצוני
- מצב חלון צף של NewPipe
+ מצב חלון צף
רקע
חלון צף
תיקייה להורדת סרטונים
@@ -33,9 +33,9 @@
רזולוציית בררת המחדל
רזולוציית בררת המחדל לחלון צף
הצגת רזולוציות גבוהות יותר
- רק חלק מהמכשירים תומכים בצפייה בסרטונים ב־2K/4K
+ רק חלק מהמכשירים יכולים לנגן סרטונים ב־2K/4K
נגינה ב־Kodi
- היישומון Kore לא נמצא. להתקין אותו\?
+ להתקין את יישומון Kore החסר\?
הצגת האפשרות לניגון עם Kodi
הצגת אפשרות לנגן סרטון דרך מרכז המדיה Kodi
שמע
@@ -65,7 +65,7 @@
נגינה
תוכן
תוכן עם הגבלת גיל
- הצגת סרטונים עם הגבלת גיל. ניתן לאפשר תכנים שכאלו דרך ההגדרות.
+ הצגת סרטונים עם הגבלת גיל. ניתן לשנות את זה בעתיד דרך ההגדרות.
חי
הורדות
הורדות
@@ -110,10 +110,10 @@
שמירת שאילתות החיפוש מקומית
היסטוריית צפייה
תיעוד הסרטונים שנצפו
- להמשיך את הניגון עם החזרת המיקוד
+ להמשיך את הניגון
להמשיך לנגן לאחר הפרעות (למשל: שיחות טלפון)
להציג את העצה „להחזיק כדי להוסיף לרשימת נגינה”
- להציג עצה בעת לחיצה על כפתור בנגן רקע או צף בעמוד פרטי סרטון
+ להציג עצה בעת לחיצה על הרקע או על הכפתור של הנגן הצף ב„פרטים:” על הסרטון
נגן
התנהגות
היסטוריה ומטמון
@@ -147,7 +147,7 @@
סרטון
שמע
ניסיון חוזר
- הגישה לאחסון נדחתה
+ יש להעניק גישה לאחסון תחילה
ק׳
מ׳
מיליארד
@@ -216,7 +216,7 @@
אם יש לך רעיון כלשהו בנוגע לתרגום, שינויי עיצוב, ניקוי הקוד או שינויים מהותיים בקוד - אנו תמיד שמחים לקבל עזרה. ככל שיותר דברים מתבצעים כך היישומון משתפר!
הצגה ב־GitHub
תרומה
- הפיתוח של NewPipe נערך ע״י מתנדבים שמשקיעים את זמנם כדי להגיש לך את החוויה הטובה ביותר. באפשרותך להעניק בחזרה כדי לסייע למפתחים לשפר את NewPipe בעודם נהנים מכוס קפה.
+ הפיתוח של NewPipe נערך ע״י מתנדבים שמשקיעים את זמנם הפנוי כדי להגיש לך את חווית השימוש הטובה ביותר. באפשרותך להעניק בחזרה כדי לסייע למפתחים לשפר את NewPipe בעודם נהנים מכוס קפה.
לתרום בחזרה
אתר הבית
מומלץ לבקר באתר של NewPipe לפרטים נוספים ולחדשות.
@@ -338,7 +338,7 @@
כיבוי האפשרות מונע את טעינת התמונות הממוזערות, חוסך בתקשורת נתונים ובניצולת הזיכרון. שינויים באפשרות זו מוחקים את המטמון בזיכרון ובכונן.
הסרת כל נתוני העמודים שבמטמון
הוספת התזרים הבא לרשימת הנגינה אוטומטית
- להוסיף אוטומטית תזרים דומה בעת נגינת התזרים האחרון בתור שאינו מחזורי
+ להמשיך תור נגינה סופית (בלתי מחזורית) על ידי הוספת תזרים קשור
החלפת כיווניות
העברה לראשי
משכתב את ההיסטוריה והמינויים הנוכחיים שלך
@@ -377,7 +377,7 @@
התאמה
כתוביות
שינוי גודל כותרת הנגן וסגנונות הרקע. נדרשת הפעלה מחדש כדי ששינויים אלה יכנסו לתוקף.
- הפעלת LeakCanary
+ LeakCanary
מעקב אחר זליגת זיכרון עשויה לגרום ליישומון להיות בלתי זמין בזמן העתקת תוכן הזיכרון לקובץ
המזהה שלך, soundcloud.com/המזהה שלך
נא לשים לב כי פעולה זו עשויה להעמיס על תקשורת הנתונים.
@@ -399,18 +399,18 @@
לשונית חדשה
בחירת לשונית
מחוות בקרת עצמת שמע
- ניתן להשתמש במחוות כדי לשלוט בעצמת השמע של הנגן
+ שימוש במחוות כדי לשלוט בעצמת השמע של הנגן
מחוות בקרת בהירות
- ניתן להשתמש במחוות כדי לשלוט בבהירות הנגן
+ שימוש במחוות כדי לשלוט בבהירות הנגן
עדכונים
נמחק קובץ
התראת עדכון יישומון
התראות על גרסה חדשה של NewPipe
האחסון החיצוני אינו זמין
אין אפשרות להוריד לכרטיס SD. לאפס את מיקום תיקיית ההורדה\?
- נעשה שימוש בלשוניות בררת המחדל, אירעה שגיאה בעת קריאת הלשוניות שנשמרו
+ לא ניתן לקרוא לשוניות שמורות, לכן נעשה שימוש באלו של בררת המחדל
שחזור בררות מחדל
- לשחזר את בררות המחדל\?
+ לשחזר בררות מחדל\?
מספר המנויים אינו זמין
אילו לשוניות תופענה בעמוד הראשי
בחירה
@@ -456,7 +456,7 @@
לא ניתן ליצור את הקובץ
לא ניתן ליצור את תיקיית היעד
ההרשאה נדחתה על ידי המערכת
- החיבור המאובטח נכשל
+ לא ניתן להקים חיבור מאובטח
לא ניתן למצוא את השרת
לא ניתן להתחבר לשרת
השרת לא שולח נתונים
@@ -470,7 +470,7 @@
לייצר הפרעה ברשתות מדודות
שימושי בעת מעבר לחיבור רשת סלולרית, למרות שישנן הורדות שלא ניתן להשהות
הצגת תגובות
- יש להשבית כדי להפסיק הצגת תגובות
+ יש להשבית כדי להפסיק הסתרת תגובות
ניגון אוטומטי
- תגובות
@@ -506,7 +506,7 @@
תוצג שאלה היכן לשמור כל הורדה.
\nיש להפעיל זאת אם ברצונך להוריד לכרטיס SD חיצוני
שימוש ב־SAF
- תשתית גישה לאחסון מאפשרת הורדות לכרטיס SD חיוני.
+ ‚תשתית גישה לאחסון’ מאפשרת הורדות לכרטיס SD חיצוני.
\nלתשומת לבך: חלק מהמכשירים אינם נתמכים
מחיקת מיקומי נגינה
מחיקת כל מיקומי הנגינה
@@ -532,7 +532,7 @@
משך קפיצה מהירה קדימה/אחורה
מופעים של PeerTube
נא לבחור את מופעי ה־PeerTube המועדפים עליך
- איתור המופעים שהכי מתאימים לך תחת %s
+ איתור המופעים האהובים עליך תחת %s
הוספת מופע
נא להכניס כתובת מופע
לא ניתן לאמת את המופע
@@ -545,8 +545,8 @@
בשחזור
לא ניתן לשחזר את ההורדה הזאת
נא לבחור מופע
- הפעלת תמונה מוקטנת של הסרטון במסך הנעילה
- בעת השימוש בנגן הרקע תופיע תמונה מוקטנת של הסרטון על מסך הנעילה
+ תמונה מוקטנת של הסרטון במסך הנעילה
+ תמונה מוקטנת של הסרטון תופיע על מסך הנעילה בעת שימוש בנגן הרקע
מחיקת היסטוריית ההורדות
למחוק את הקבצים שהורדתי
נמחקו %1$s הורדות
@@ -555,4 +555,5 @@
בררת המחדל של המערכת
יש ללחוץ על „סיום” לאחר הפתירה
סיום
+ חי
\ No newline at end of file
From 47d2ae5c5edcb803da01c7045dc19e3a828ce963 Mon Sep 17 00:00:00 2001
From: Karol Kosek
Date: Thu, 20 Feb 2020 23:16:29 +0000
Subject: [PATCH 0354/1194] Translated using Weblate (Polish)
Currently translated at 99.6% (530 of 532 strings)
---
app/src/main/res/values-pl/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 53de33521..46494c1e5 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -1,6 +1,6 @@
- Naciśnij Szukaj, aby zacząć
+ Naciśnij „Szukaj”, aby zacząć
Zainstaluj
Anuluj
Otwórz w przeglądarce
@@ -16,7 +16,7 @@
Użyj zewnętrznego odtwarzacza audio
%1$s wyświetleń
Opublikowano %1$s
- Nie znaleziono odtwarzacza strumieni. Czy chcesz zainstalować VLC\?
+ Nie znaleziono odtwarzacza strumieni. Zainstalować VLC\?
Folder pobierania wideo
Pobrane pliki wideo są przechowywane tutaj
Wybierz folder pobierania plików wideo
@@ -139,7 +139,7 @@
To pozwolenie jest wymagane, aby
\notworzyć w trybie okienkowym
Odtwórz w trybie okienkowym
- Tryb okienkowy NewPipe
+ Tryb okienkowy
Tryb okienkowy
Najlepsza rozdzielczość
Pobierz
@@ -409,7 +409,7 @@
Nowa karta
Wybierz kartę
Kontrola gestów głośności
- Użyj gestów do sterowania głośnośnością odtwarzania
+ Użyj gestów do sterowania głośnośnością odtwarzacza
Kontrola gestów jasności
Użyj gestów do sterowania jasnością odtwarzacza
Aktualizacje
From ae5360fb275dea4e4101b1e02578a2c7da0051f3 Mon Sep 17 00:00:00 2001
From: WaldiS
Date: Fri, 21 Feb 2020 11:31:47 +0000
Subject: [PATCH 0355/1194] Translated using Weblate (Polish)
Currently translated at 99.6% (530 of 532 strings)
---
app/src/main/res/values-pl/strings.xml | 31 +++++++++++++-------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 46494c1e5..fe650d099 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -27,7 +27,7 @@
Odtwórz wideo, kiedy NewPipe zostanie wywołany z innej aplikacji
Domyślna rozdzielczość
Odtwórz w Kodi
- Nie znaleziono aplikacji Kore. Zainstalować ją\?
+ Zainstalować brakującą aplikację Kore\?
Pokaż opcję „Odtwórz z Kodi”
Wyświetl opcję odtwarzania filmów za pośrednictwem centrum multimedialnego Kodi
Dźwięk
@@ -65,7 +65,7 @@
Przepraszamy, to nie powinno mieć miejsca.
Zgłoś błąd przez e-mail
Przepraszamy, wystąpiły pewne błędy.
- ZGŁOŚ
+ Zgłoś
Informacje:
Co się stało:
Co:\\nRequest:\\nJęzyk treści:\\nUsługa:\\nCzas GMT:\\nPakiet:\\nWersja:\\nWersja systemu:
@@ -84,7 +84,7 @@
Film
Dźwięk
Ponów
- Odmowa dostępu do pamięci
+ Najpierw udziel dostępu do pamięci
Wstrzymaj
Odtwórz
Usuń
@@ -174,7 +174,7 @@
Zapisuj lokalnie historię wyszukiwania
Historia oglądanych
Zapisuj historię oglądania
- Wznów gdy na pierwszym planie
+ Wznów odtwarzanie
Kontynuuj odtwarzanie po przerwaniu (np. po rozmowie telefonicznej)
Powiadomienia NewPipe
Powiadomienia dla NewPipe w tle i trybie wyskakujących okien odtwarzania
@@ -222,7 +222,7 @@
Większość znaków specjalnych
Dotacja
- NewPipe rozwijane jest przez wolontariuszy, którzy poświęcają swój wolny czas, by zapewnić Ci jak najlepsze wrażenia podczas korzystania z aplikacji. To dobry moment, aby wesprzeć programistów i sprawić, by program był jeszcze lepszy, delektując się filiżanką kawy.
+ NewPipe jest rozwijany przez wolontariuszy, którzy poświęcają swój wolny czas, by zapewnić Ci jak najlepsze wrażenia podczas korzystania z aplikacji. To dobry moment, aby wesprzeć programistów i sprawić, by program był jeszcze lepszy, delektując się filiżanką kawy.
Wspomóż
Witryna
By otrzymać więcej informacji oraz najnowsze wiadomości o NewPipe, odwiedź naszą stronę.
@@ -316,7 +316,7 @@
Wypełnij
Powiększ
Wygenerowane automatycznie
- Włącz LeakCanary
+ LeakCanary
Monitorowanie wycieków pamięci może powodować niestabilność aplikacji podczas zrzutu pamięci
Zgłaszanie błędów poza cyklem życia
Wymusza raportowanie niedostarczonych wyjątków Rx poza cyklem życia fragmentu lub aktywności
@@ -329,7 +329,7 @@
Wyczyść pamięć podręczną stron
Wyczyszczono pamięć podręczną metadanych
Automatyczne kolejkowanie następnego strumienia
- Automatycznie dodaj kolejny powiązany strumień podczas odtwarzania ostatniego strumienia w niezapętlonej kolejce
+ Kontynuuj kończenie (niepowtarzanie) kolejki odtwarzania, dołączając powiązany strumień
Plik
Nie ma takiego folderu
Nie ma takiego źródła plików/treści
@@ -418,10 +418,10 @@
Powiadomienia o nowej wersji NewPipe
Pamięć zewnętrzna jest niedostępna
Pobieranie na zewnętrzną kartę SD nie jest możliwe. Zresetować lokalizację folderu pobierania\?
- Korzystanie z domyślnych kart, błąd podczas czytania zapisanych kart
+ Nie można odczytać zapisanych kart, więc będzie używana domyślna
Przywróć domyślne
Czy chcesz przywrócić ustawienia domyślne\?
- Subskrybenci nie są dostępni
+ Subskrybent jest niedostępny
Karty wyświetlane na stronie głównej
Wybierz
Aktualizacje
@@ -451,7 +451,7 @@
Nie można utworzyć pliku
Nie można utworzyć folderu docelowego
Odmowa dostępu do systemu
- Bezpieczne połączenie nie powiodło się
+ Nie można nawiązać bezpiecznego połączenia
Nie można znaleźć serwera
Nie można połączyć się z serwerem
Serwer nie wysyła danych
@@ -468,7 +468,7 @@
Konferencje
Oczekuje
Pokaż komentarze
- Wyłącz, aby przestać wyświetlać komentarze
+ Wyłącz, aby ukryć komentarze
Automatyczne odtwarzanie
- Komentarze
@@ -502,7 +502,7 @@
Zostaniesz zapytany, gdzie zapisać każde pobranie.
\nWybierz SAF, jeśli chcesz pobrać na zewnętrzną kartę SD
Użyj SAF
- Biblioteka dostępu do pamięci pozwala na pobieranie danych na zewnętrzną kartę.
+ Struktura dostępu do pamięci masowej umożliwia pobieranie danych na zewnętrzną kartę SD.
\nUwagi: Niektóre urządzenia nie są kompatybilne
Usuń pozycje odtwarzania
Usuwa wszystkie pozycje odtwarzania
@@ -526,7 +526,7 @@
Krok czasu przewijania
Wystąpienia PeerTube
Wybierz swoje ulubione instancje PeerTube
- Znajdź wystąpienia, które najbardziej Ci odpowiadają na %s
+ Znajdź wystąpienia, które lubisz na %s
Dodaj instancję
Wprowadź adres URL instancji
Nie można sprawdzić poprawności instancji
@@ -539,8 +539,8 @@
odzyskiwanie
Nie można odzyskać tego pobrania
Wybierz instancję
- Włącz miniaturę wideo na ekranie blokady
- Podczas korzystania z odtwarzacza w tle na ekranie blokady zostanie wyświetlona miniatura filmu
+ Zablokuj miniaturę wideo na ekranie
+ Podczas korzystania z odtwarzacza w tle na ekranie blokady wyświetlana jest miniatura filmu
Wyczyść historię pobierania
Usuń pobrane pliki
Usunięte %1$s pobrania
@@ -549,4 +549,5 @@
Domyślny systemu
Po rozwiązaniu naciśnij „Gotowe”
Gotowe
+ Na żywo
\ No newline at end of file
From da43f47487b1c19b65bca0f5b9202e21269f4c8b Mon Sep 17 00:00:00 2001
From: zmni
Date: Fri, 21 Feb 2020 12:08:21 +0000
Subject: [PATCH 0356/1194] Translated using Weblate (Indonesian)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-in/strings.xml | 57 ++++++++++++++------------
1 file changed, 30 insertions(+), 27 deletions(-)
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 7c3cce473..0f7980dc0 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -1,6 +1,6 @@
- Ketuk pencarian untuk memulai
+ Ketuk \"Cari\" untuk memulai
%1$s ditonton
Dipublikasikan tanggal %1$s
Pasang
@@ -24,7 +24,7 @@
Putar video ketika NewPipe dijalankan dari aplikasi lain
Resolusi
Putar dengan Kodi
- Apl Kore tidak ditemukan. Pasang Kore\?
+ Pasang apl Kore\?
Tampilkan opsi \"Putar dengan Kodi\"
Tampilkan opsi untuk memutar video via Kodi
Audio
@@ -43,12 +43,12 @@
Putar
Konten
Konten yang dibatasi usia
- Tampilkan video yang dibatasi usia. Membuka akses konten tersebut bisa dilakukan dari Pengaturan.
+ Tampilkan video yang dibatasi usia. Bisa diubah nanti dari pengaturan.
Galat jaringan
Tidak bisa memuat semua thumbnail
Maksud anda: %1$s\?
rotasi
- LANGSUNG
+ Langsung
Unduhan
Unduhan
Laporan galat
@@ -60,9 +60,9 @@
Siaran langsung belum didukung
Tidak bisa memuat gambar
Maaf, hal tersebut seharusnya tidak terjadi.
- Lapor galat via surel
+ Laporkan kesalahan via surel
Maaf, telah terjadi galat.
- LAPOR
+ Lapor
Info:
Yang terjadi:
Komentar anda (dalam bahasa Inggris):
@@ -74,13 +74,13 @@
Tidak suka
Gunakan Tor
(Eksperimental) Paksa trafik unduhan melalui Tor untuk meningkatkan privasi (video stream belum didukung).
- Laporkan Galat
+ Laporkan kesalahan
Tidak bisa membuat direktori unduhan \'%1$s\'
Direktori unduhan dibuat \'%1$s\'
Video
Audio
Ulangi
- Izin akses penyimpanan ditolak
+ Izinkan akses penyimpanan terlebih dahulu
Hapus
Putar
Mulai
@@ -98,7 +98,7 @@
Mohon tunggu…
Disalin ke papan klip
Silakan pilih folder unduhan di pengaturan
- Pemutar stream tidak ditemukan. Apakah anda ingin memasang VLC\?
+ Pemutar stream tidak ditemukan. Pasang VLC\?
Tidak bisa dekripsi tanda tangan URL video
App/UI rusak
Tidak bisa mendapatkan stream apapun
@@ -119,19 +119,19 @@
Buka di mode popup
Izin ini dibutuhkan untuk
\nmembuka di mode popup
- Mode popup NewPipe
+ Mode popup
Memutar dalam mode popup
Dinonaktifkan
Format video
Resolusi popup
Tampilkan resolusi yang lebih tinggi
- Hanya perangkat tertentu yang mendukung pemutaran video 2K/4K
+ Hanya perangkat tertentu yang bisa memutar video 2K/4K
Latar Belakang
Popup
Segarkan
Bersihkan
Filter
- Menghapus audio pada BEBERAPA resolusi
+ Menghapus audio pada beberapa resolusi
Ingat ukuran dan posisi popup
Ingat ukuran dan posisi terakhir popup
Popup
@@ -166,8 +166,8 @@
Subscribe
Disubscribe
Apa Yang Baru
- Lanjutkan saat fokus
- Lanjutkan pemutaran setelah interupsi (mis. panggilan telepon)
+ Lanjutkan pemutaran
+ Melanjutkan pemutaran setelah interupsi (mis. panggilan telepon)
Utama
Riwayat pencarian
Simpan pencarian secara lokal
@@ -183,10 +183,10 @@
Hapus tembolok metadata
Buang semua data tembolok laman web
Cache metadata dihapus
- Otomatis tambahkan stream terkait ketika memutar stream terakhir dalam antrean tanpa perulangan
+ Melanjutkan akhir dari antrean pemutaran (tak berulang) dengan menambahkan stream terkait
Simpan daftar video yang telah ditonton
Tampilkan tip \"Tahan untuk menambahkan\"
- Tampilkan tip ketika tombol latar belakang atau popup disentuh pada halaman detail video
+ Tampilkan tip ketika menekan tombol latar belakang atau popup di dalam \"Detail:\" video
Negara konten
Layanan
Pemutar
@@ -309,7 +309,7 @@
Isi
Perbesar
Otomatis dibuat
- Aktifkan LeakCanary
+ LeakCanary
Bawaan
Pemutar stream tidak ditemukan (anda bisa memasang VLC untuk memutarnya).
Unduh berkas stream
@@ -410,10 +410,10 @@
Notifikasi untuk versi NewPipe baru
Penyimpanan eksternal tidak tersedia
Tidak bisa mengunduh ke kartu SD eksternal. Atur ulang lokasi folder unduhan\?
- Menggunakan tab baku, ralat saat membaca tab yang disimpan
+ Tidak bisa membaca tab yang disimpan, beralih menggunakan tab bawaan
Kembali ke awal
- Apakah anda ingin kembali ke awal\?
- Jumlah pelanggan tidak tersedia
+ Apakah anda ingin mengembalikan ke bawaan\?
+ Jumlah subscriber tidak tersedia
Tab apa yang ditampilkan di halaman utama
Pilihan
Konferensi
@@ -445,7 +445,7 @@
File tidak dapat dibuat
Folder tujuan tidak dapat dibuat
Izin ditolak oleh sistem
- Koneksi aman gagal
+ Tidak bisa membuat koneksi yang aman
Tidak dapat menemukan server
Tidak dapat terhubung ke server
Server tidak mengirim data
@@ -459,7 +459,7 @@
Berhenti pada jaringan terbatas
Berguna saat beralih ke data seluler, walaupun beberapa unduhan tidak bisa ditangguhkan
Tampilkan komentar
- Nonaktifkan untuk berhenti menampilkan komentar
+ Nonaktifkan untuk menyembunyikan komentar
Otomatis putar
- Komentar
@@ -491,14 +491,14 @@
\nPilih SAF jika anda ingin mengunduh ke kartu SD eksternal
Batas waktu koneksi
Gunakan SAF
- Storage Access Framework memungkinkan mengunduh ke kartu SD eksternal.
+ \'Storage Access Framework\' memungkinkan untuk mengunduh ke kartu SD eksternal.
\nCatatan: beberapa perangkat tidak kompatibel
Hapus posisi pemutaran
Hapus semua posisi pemutaran
Hapus semua posisi pemutaran\?
Ubah folder unduhan
- - %s video
+ - Video
Aktif/Nonaktifkan layanan, saat ini aktif:
Tidak ada yang menonton
@@ -512,7 +512,7 @@
Bahasa akan diterapkan setelah aplikasi dimulai ulang.
Situs PeerTube
Pilih situs PeerTube favorit anda
- Temukan situs yang sesuai dengan anda di %s
+ Temukan situs yang anda suka di %s
Tambah situs
Masukkan URL situs
Tidak bisa memvalidasi situs
@@ -525,8 +525,8 @@
memulihkan
Tidak bisa memulihkan unduhan ini
Pilih situs
- Aktifkan kunci layar thumbnail video
- Ketika menggunakan pemutar latar belakang, thumbnail video akan ditampilkan di tampilan kunci layar
+ Thumbnail video layar kunci
+ Ketika menggunakan pemutar latar belakang, thumbnail video akan ditampilkan pada layar kunci
Kiosk Default
Hapus riwayat unduhan
Hapus berkas yang diunduh
@@ -535,4 +535,7 @@
Bahasa apl
Default sistem
Selesai
+ Langsung
+ Durasi maju/mundur cepat
+ Tekan \"Selesai\" saat selesai
\ No newline at end of file
From 95a6aaac7617bd956ffd3a0ee5e99394200e937c Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Fri, 21 Feb 2020 10:58:22 +0000
Subject: [PATCH 0357/1194] Translated using Weblate (Kurdish)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-ku/strings.xml | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 20ce04100..75c8d9d02 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -1,6 +1,6 @@
- گرته له گهڕان بكه بۆ دهستپێكردن
+ گرته له ”گهڕان” بكه بۆ دهستپێكردن
%1$s بینراو
بڵاوكراوهتهوه له %1$s
هیچ كارپێكهرێكی ڤیدیۆیی نهدۆزرایهوه. دهتهوێت VLC دابمەزرێنیت؟
@@ -38,10 +38,10 @@
زیادکردن بۆ
فۆڵدەری داگرتنی ڤیدیۆ
ڤیدیۆ داگیراوەکان لێرەدا هەڵدەگیرێن
- فۆڵدەری داگرتن بۆ ڤیدیۆکان هەڵبژێرە
+ پەڕگەی داگرتن بۆ ڤیدیۆکان هەڵبژێرە
فۆڵدەری داگرتنی دهنگ
دەنگە داگیراوەکان لێرەدا هەڵدەگیرێن
- فۆڵدەری داگرتنی دەنگەکان هەڵبژێرە
+ پەڕگەی داگرتنی دەنگەکان هەڵبژێرە
كاركردنی خۆكارانه
قهبارهی بنەڕەتی
قهبارهی بنەڕەتی پهنجهرهی بچووک
@@ -546,4 +546,5 @@
بنەڕەتی سیستەم
گرتە بکە لەسەر ”تەواو” کاتێ کە چارەسەرکرا
تەواو
+ ڕاستەوخۆ
\ No newline at end of file
From 40207b515d88126e42af2cccd2f52f6f43a75338 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Thu, 20 Feb 2020 08:59:23 +0000
Subject: [PATCH 0358/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 39 +++++++++++-----------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 395a555e7..5fa590a52 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -2,7 +2,7 @@
點播 %1$s 次
%1$s 發布
- 找不到串流播放器,您要安裝 VLC 嗎?
+ 找不到串流播放器。安裝 VLC 嗎?
安裝
取消
以瀏覽器開啟
@@ -23,7 +23,7 @@
用 Kodi 播放
顯示用 Kodi 媒體中心播放影片的選項
聲音
- 找不到 Kore,您要安裝 Kore 嗎?
+ 安裝遺失的 Kore 應用程式嗎?
顯示「用 Kodi 播放」的選項
預設音訊格式
主題
@@ -52,16 +52,16 @@
選擇音訊檔的下載資料夾
無法建立下載目錄「%1$s」
已建立下載目錄「%1$s」
- 輕觸搜尋按鈕開始使用 NewPipe
+ 輕觸「搜尋」按鈕開始使用
以懸浮視窗開啟
移除某些解析度的音訊
- NewPipe 懸浮視窗模式
+ 懸浮視窗模式
背景播放
自動播放
當 NewPipe 被其他應用程式呼叫時播放影片
懸浮視窗預設解析度
顯示更高的解析度
- 只有部分裝置能播 2K 及 4K 影片
+ 僅部份裝置可播放 2K/4K 影片
預設影片格式
純黑
記住懸浮視窗大小和位置
@@ -74,7 +74,7 @@
以懸浮視窗播放中
內容
年齡限制內容
- 顯示有年齡限制的影片。可於設定中選擇允許此種內容。
+ 顯示有年齡限制的影片。未來仍可從設定中變更。
下載
下載
錯誤回報
@@ -100,7 +100,7 @@
無法載入圖片
應用程式或界面已停止運作
抱歉,這是不該發生的。
- 使用電子郵件回報錯誤
+ 使用電子郵件回報此錯誤
抱歉,發生了一些問題。
回報
資訊:
@@ -113,7 +113,7 @@
影片
音訊
重試
- 無法存取儲存空間
+ 先授予儲存空間權限
k
百萬
B
@@ -153,7 +153,7 @@
在本機儲存搜尋紀錄
檢視歷史
記錄觀看過的影片
- 取得視窗焦點時繼續播放
+ 恢復播放
在干擾結束後繼續播放(例如有來電)
播放器
行為
@@ -221,7 +221,7 @@
無法播放此串流
發生無法復原的播放器錯誤
正在從播放器錯誤中復原
- 在影片詳細資訊頁按下背景播放或懸浮視窗按鈕時顯示提示
+ 按下影片「詳細資訊:」中的背景或懸浮式視窗按鈕時顯示提示
外部播放器不支援此類型連結
無效的 URL
找不到影片串流
@@ -263,7 +263,7 @@
在背景開始播放
在新彈出式視窗中開始播放
長按以新增至佇列
- NewPipe 由志願者所開發,他們耗費時間務求為您帶來最佳體驗。現在是時候回過頭來,讓我們的開發人員能夠在使 NewPipe 更臻完美的同時,享受一杯咖啡。
+ NewPipe 由志願者所開發,他們花費他們的空閒時間務求為您帶來最佳的使用體驗。現在是時候回過頭來,讓我們的開發人員能夠在使 NewPipe 更臻完美的同時,享受一杯咖啡。
打開抽屜
關閉抽屜
影片播放器
@@ -306,14 +306,14 @@
某些東西即將在此出現 ;D
除錯
自動產生
- 啟用 LeakCanary
+ LeakCanary
記憶體洩漏監測,在 heap dumping 時可能導致應用程式無法回應
報告週期不足錯誤
強制報告在處理完片段或活動週期外發生的無法傳遞的 Rx 異常
使用粗略但快速的尋找
粗略的尋找能讓播放器以降低的精確度更快找到影片的進度位置
自動將下一部影片新增至佇列
- 在非重複播放佇列中最後一個串流開始播放時,自動新增相關串流
+ 透過加入相關的串流來繼續結束的(未重複)播放佇列
檔案
無效的資料夾
無效的檔案/內容來源
@@ -408,7 +408,7 @@
新 NewPipe 版本通知
外部儲存不可用
無法下載到外部 SD 卡。重設下載資料夾位置?
- 使用預設分頁,讀取已儲存的分頁時發生錯誤
+ 無法讀取已儲存的分頁,因此使用預設分頁
恢復預設值
您想要恢復預設值嗎?
訂閱數不可用
@@ -442,7 +442,7 @@
無法建立檔案
無法建立目的地資料夾
被系統拒絕的權限
- 安全連線失敗
+ 無法建立安全連線
找不到伺服器
無法連線到伺服器
伺服器沒有傳送資料
@@ -459,7 +459,7 @@
會議
連接超時
顯示留言
- 停用以停止顯示留言
+ 關閉以隱藏留言
自動播放
- 留言
@@ -499,7 +499,7 @@
切換服務,目前已選取:
- %s 影片
-
+
預設 Kiosk
沒有人在看
@@ -516,7 +516,7 @@
快轉/快退搜尋持續時間
PeerTube 站臺
選取您最愛的 PeerTube 站臺
- 在 %s 上找到最適合您的站臺
+ 在 %s 上找到您喜愛的站臺
新增站臺
輸入站臺 URL
無法驗證站臺
@@ -529,7 +529,7 @@
正在恢復
無法復原此下載
選擇一個站臺
- 啟用鎖定畫面影片縮圖
+ 鎖定畫面影片縮圖
使用背景播放器時,鎖定畫面上將會顯示影片縮圖
清除下載歷史紀錄
刪除已下載的檔案
@@ -539,4 +539,5 @@
系統預設值
解決後請按「完成」
完成
+ 直播
\ No newline at end of file
From 30e5e581780430a3fd29db960197d504296a9304 Mon Sep 17 00:00:00 2001
From: chr56
Date: Thu, 20 Feb 2020 12:12:43 +0000
Subject: [PATCH 0359/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 93.0% (495 of 532 strings)
---
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index d4119e83c..c5ff40750 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -536,4 +536,5 @@
清除下载历史记录
删除下载了的文件
已删除 %1$s 下载
+ 授予在其他应用上层显示的权限
\ No newline at end of file
From 6e5851aea89fc29efca8de59d549c7984c6f70bd Mon Sep 17 00:00:00 2001
From: Brikkho
Date: Fri, 21 Feb 2020 09:35:26 +0000
Subject: [PATCH 0360/1194] Translated using Weblate (Bengali (Bangladesh))
Currently translated at 28.5% (152 of 532 strings)
---
app/src/main/res/values-bn-rBD/strings.xml | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml
index 37938334c..ce7121095 100644
--- a/app/src/main/res/values-bn-rBD/strings.xml
+++ b/app/src/main/res/values-bn-rBD/strings.xml
@@ -1,9 +1,9 @@
- শুরু করতে অনুসন্ধান এ আলতো চাপ
+ অনুসন্ধান এ চাপ দিয়ে শুরু করুন
"%1$s জন দেখছে"
প্রকাশকাল %1$s
- কোন স্ট্রিম প্লেয়ার পাওয়া যায়নি। তুমি কি VLC ইনস্টল করতে চাও?
+ কোন স্ট্রিম প্লেয়ার পাওয়া যায়নি। VLC ইনস্টল করতে চাও\?
ইনস্টল
বাদ দিন
@@ -16,13 +16,13 @@
আপনি কি বুঝিয়েছেনঃ %1$s ?
শেয়ার করুন
ব্রাউজার বাছাই করুন
- রোটেশন
+ ঘূর্ণন
বাইরের ভিডিও প্লেয়ার ব্যবহার করুন
বহির্গত অডিও প্লেয়ার ব্যবহার করুন
- NewPipe পপআপ মোড
+ পপআপ মোড
ব্যাকগ্রাউন্ড
পপআপ
- ভিডিও ডাউনলোড করার পাথ
+ ভিডিও ডাউনলোড করার ফোল্ডার
ডাউনলোড করা ভিডিওগুলো রাখার ফোল্ডার
ভিডিওগুলির জন্য ডাউনলোডের পাথ প্রবেশ করাও
অডিও ডাউনলোড পাথ
@@ -171,7 +171,7 @@
ওয়েব সাইট খুলুন
ওয়েব সাইট
কোন স্ট্রিম প্লেয়ার পাওয়া যায়নি (প্লে করতে VLC ইন্সটল করতে পারেন)
- কিছু রেজোলিউশনে ভিডিওর অডিও কাজ করে না
+ কিছু কিছু রেজোলিউশনে অডিও বন্ধ করে দেয়
সাবস্ক্রাইব
সাবস্ক্রাইব করা আছে
চ্যানেল থেকে আনসাবস্ক্রাইব্ড
@@ -183,4 +183,5 @@
দ্রুত টানা ব্যাবহার করুন
আনসাবস্ক্রাইব
নতুন ট্যাব
+ ট্যাব পছন্দ করুন
\ No newline at end of file
From e539753279fbdb584bf51f62582c64b1cc7a6492 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Fri, 21 Feb 2020 21:59:36 +0100
Subject: [PATCH 0361/1194] Clean translations
---
app/src/main/res/values-bn-rBD/strings.xml | 8 --------
app/src/main/res/values-ku/strings.xml | 1 -
2 files changed, 9 deletions(-)
diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml
index ce7121095..60b87caa9 100644
--- a/app/src/main/res/values-bn-rBD/strings.xml
+++ b/app/src/main/res/values-bn-rBD/strings.xml
@@ -6,7 +6,6 @@
কোন স্ট্রিম প্লেয়ার পাওয়া যায়নি। VLC ইনস্টল করতে চাও\?
ইনস্টল
বাদ দিন
-
ব্রাউজারে ওপেন করো
পপ-আপ মোডে ওপেন করো
শেয়ার
@@ -36,7 +35,6 @@
শুধুমাত্র কিছু ডিভাইস 2k / 4k ভিডিও চালানোয় সমর্থন
Kodi এর মাধ্যমে চালাও
Kore অ্যাপ্লিকেশন খুঁজে পাওয়া যায়নি। Kore ইনস্টল করবে?
-
দেখাও \"Kodi এর মাধ্যমে চালাও \" বিকল্প
Kodi মিডিয়া সেন্টারে এর মাধ্যমে ভিডিও প্লে করার জন্য একটি বিকল্প প্রদর্শন কর
অডিও
@@ -57,10 +55,8 @@
পপআপ
অ্যাপিয়ারেন্স
অন্যান্য
-
ব্যাকগ্রাউন্ডে চলছে
পপআপ মোডে চলছে
-
চালাও
কন্টেন্ট
বয়স সীমাবদ্ধ কন্টেন্ট দেখাও
@@ -93,7 +89,6 @@
অ্যাপ / UI ক্র্যাশ করেছে
দুঃখিত, এটা ঘটা উচিত ছিল না।
-
মেইলের মাধ্যমে ত্রুটি প্রতিবেদন করো
দুঃখিত, কিছু ত্রুটি ঘটেছে।
প্রতিবেদন
@@ -142,9 +137,6 @@
ক্লিপবোর্ডে অনুলিপি করা হয়েছে।
অনুগ্রহ করে একটি উপলব্ধ ডাউনলোড ডিরেক্টরি নির্বাচন করো।
এই অনুমতিটি পপআপ মোডে খুলতে প্রয়োজন
-
-
-
রিক্যাপচা
reCAPTCHA চ্যালেঞ্জ
reCAPTCHA চ্যালেঞ্জ অনুরোধ করা হয়েছে
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 75c8d9d02..b3429d6a2 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -215,7 +215,6 @@
تکایە فۆڵدەرێک بۆ شوێنی داگرتن دیاریبکە لە ڕێکخستنەکان
ئەم دەسەڵاتە پێویستە بۆ
\nکردنەوەی پەنجەرەی بچووک
- reCAPTCHA
reCAPTCHA داواکاری
reCAPTCHA داواکراوە
داگرتن
From 9445e8e8a0faabc24a25d85fc85772925d63a376 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sat, 22 Feb 2020 00:37:34 +0100
Subject: [PATCH 0362/1194] Remove 'duration_live_button' string from
translations
---
app/src/main/res/values-cs/strings.xml | 1 -
app/src/main/res/values-he/strings.xml | 1 -
app/src/main/res/values-in/strings.xml | 1 -
app/src/main/res/values-ku/strings.xml | 1 -
app/src/main/res/values-pl/strings.xml | 1 -
app/src/main/res/values-tr/strings.xml | 1 -
app/src/main/res/values-zh-rTW/strings.xml | 1 -
7 files changed, 7 deletions(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 01bcfede7..104ba6695 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -552,5 +552,4 @@ otevření ve vyskakovacím okně
Jazyk systému
Po vyřešení stiskni \"Hotovo\"
Hotovo
- Live
\ No newline at end of file
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 59e4ce6be..e0567359b 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -555,5 +555,4 @@
בררת המחדל של המערכת
יש ללחוץ על „סיום” לאחר הפתירה
סיום
- חי
\ No newline at end of file
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 0f7980dc0..59678be19 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -535,7 +535,6 @@
Bahasa apl
Default sistem
Selesai
- Langsung
Durasi maju/mundur cepat
Tekan \"Selesai\" saat selesai
\ No newline at end of file
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index b3429d6a2..5c4506365 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -545,5 +545,4 @@
بنەڕەتی سیستەم
گرتە بکە لەسەر ”تەواو” کاتێ کە چارەسەرکرا
تەواو
- ڕاستەوخۆ
\ No newline at end of file
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index fe650d099..93bb2cd5c 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -549,5 +549,4 @@
Domyślny systemu
Po rozwiązaniu naciśnij „Gotowe”
Gotowe
- Na żywo
\ No newline at end of file
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 557e59236..6d416c901 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -543,5 +543,4 @@
Sistem öntanımlısı
Çözüldüğünde \"Bitti\" butonuna basın
Bitti
- Canlı
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 5fa590a52..a8cb87458 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -539,5 +539,4 @@
系統預設值
解決後請按「完成」
完成
- 直播
\ No newline at end of file
From 476b3f804b6a0dbb565f01ffc565975b6878965b Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Fri, 21 Feb 2020 22:19:20 +0100
Subject: [PATCH 0363/1194] Add changelog
---
.../metadata/android/en-US/changelogs/840.txt | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 fastlane/metadata/android/en-US/changelogs/840.txt
diff --git a/fastlane/metadata/android/en-US/changelogs/840.txt b/fastlane/metadata/android/en-US/changelogs/840.txt
new file mode 100644
index 000000000..c79321b45
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/840.txt
@@ -0,0 +1,22 @@
+New
+• Added language selector to change the app language
+• Added send to Kodi button to player collapsible menu
+• Added ability to copy comments on long press
+
+Improved
+• Fix ReCaptcha activity and correctly save obtained cookies
+• Removed dot-menu in favour of drawer and hide history button when watch history is not enabled in settings
+• Ask for display over other apps permission in settings correctly on Android 6 and later
+• Rename local playlist by long-clicking in BookmarkFragment
+• Various PeerTube improvements
+• Improved several English source strings
+
+Fixed
+• Fixed player starting again although it is paused when option "minimize on app switch" enabled and NewPipe is minimized
+• Fix initial brightness value for gesture
+• Fixed .srt subtitle downloads containing not all line breaks
+• Fixed download to SD card failing because some Android 5 devices are not CTF compliant
+• Fixed downloading on Android KitKat
+• Fixed corrupt video .mp4 file being recognized as audio file
+• Fixed multiple localization problems, including wrong Chinese language codes
+• [YouTube] Timestamps in description are clickable again
\ No newline at end of file
From e84d5311f9730ecbcb0dcf39b863b6787396b236 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Fri, 21 Feb 2020 22:30:59 +0100
Subject: [PATCH 0364/1194] Update extractor version to latest release
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 77b27f50a..dd5dbb865 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -63,7 +63,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:fc9f031'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:v0.18.4'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
From 533aede80f8f89da84ba0ec99e6dead73626ea92 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Fri, 21 Feb 2020 22:19:23 +0100
Subject: [PATCH 0365/1194] Update bump version to 0.18.4 (840)
---
app/build.gradle | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index dd5dbb865..c2bceab9e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 19
targetSdkVersion 28
- versionCode 830
- versionName "0.18.3"
+ versionCode 840
+ versionName "0.18.4"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
From 065faf31b65b2ea5fbb901ab05d3c9cda5f3fd59 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sat, 22 Feb 2020 10:23:01 +0100
Subject: [PATCH 0366/1194] Add settings button back in dot menu
---
app/src/main/res/menu/download_menu.xml | 3 +++
app/src/main/res/menu/menu_channel.xml | 17 ++++++++++++-----
app/src/main/res/menu/menu_play_queue.xml | 9 +++++++--
app/src/main/res/menu/menu_playlist.xml | 17 ++++++++++++-----
app/src/main/res/menu/video_detail_menu.xml | 7 +++++++
5 files changed, 41 insertions(+), 12 deletions(-)
diff --git a/app/src/main/res/menu/download_menu.xml b/app/src/main/res/menu/download_menu.xml
index 27d9bfe29..c74dc804a 100644
--- a/app/src/main/res/menu/download_menu.xml
+++ b/app/src/main/res/menu/download_menu.xml
@@ -27,4 +27,7 @@
android:title="@string/clear_download_history"
app:showAsAction="ifRoom" />
+
diff --git a/app/src/main/res/menu/menu_channel.xml b/app/src/main/res/menu/menu_channel.xml
index cc6a9ed71..f8449d8b5 100644
--- a/app/src/main/res/menu/menu_channel.xml
+++ b/app/src/main/res/menu/menu_channel.xml
@@ -4,11 +4,6 @@
xmlns:tools="http://schemas.android.com/tools"
tools:context=".fragments.list.impl.ChannelFragment">
-
-
+
+
+
+
diff --git a/app/src/main/res/menu/menu_play_queue.xml b/app/src/main/res/menu/menu_play_queue.xml
index 5413794be..be6cea46c 100644
--- a/app/src/main/res/menu/menu_play_queue.xml
+++ b/app/src/main/res/menu/menu_play_queue.xml
@@ -10,13 +10,18 @@
android:visible="true"
app:showAsAction="ifRoom"/>
+
+
diff --git a/app/src/main/res/menu/menu_playlist.xml b/app/src/main/res/menu/menu_playlist.xml
index 4583ff719..5e62d40a3 100644
--- a/app/src/main/res/menu/menu_playlist.xml
+++ b/app/src/main/res/menu/menu_playlist.xml
@@ -3,11 +3,6 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
-
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/video_detail_menu.xml b/app/src/main/res/menu/video_detail_menu.xml
index fd44c7860..65e7bc4da 100644
--- a/app/src/main/res/menu/video_detail_menu.xml
+++ b/app/src/main/res/menu/video_detail_menu.xml
@@ -14,8 +14,15 @@
android:title="@string/share"
app:showAsAction="ifRoom"/>
+
+
From c7b470553827c696465d5b6e5d9de3261177ee69 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sat, 22 Feb 2020 10:36:10 +0100
Subject: [PATCH 0367/1194] Implement Settings buttons
---
.../schabi/newpipe/download/DownloadActivity.java | 8 +++++---
.../fragments/detail/VideoDetailFragment.java | 15 ++++++++++-----
.../fragments/list/channel/ChannelFragment.java | 7 +++++--
.../fragments/list/playlist/PlaylistFragment.java | 7 +++++--
.../newpipe/player/ServicePlayerActivity.java | 3 +++
5 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index 00dd45ac9..2c54f75cf 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -12,6 +12,7 @@ import android.view.MenuItem;
import android.view.ViewTreeObserver;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
import us.shandian.giga.service.DownloadManagerService;
@@ -76,11 +77,12 @@ public class DownloadActivity extends AppCompatActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
- case android.R.id.home: {
+ case android.R.id.home:
onBackPressed();
return true;
- }
-
+ case R.id.action_settings:
+ NavigationHelper.openSettings(this);
+ return true;
default:
return super.onOptionsItemSelected(item);
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index 7dd98003a..b28c71d72 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -600,22 +600,27 @@ public class VideoDetailFragment
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (isLoading.get()) {
- // if is still loading block menu
+ int id = item.getItemId();
+ if (id == R.id.action_settings) {
+ NavigationHelper.openSettings(requireContext());
+ return true;
+ }
+
+ if (isLoading.get()) {
+ // if still loading, block menu buttons related to video info
return true;
}
- int id = item.getItemId();
switch (id) {
case R.id.menu_item_share: {
if (currentInfo != null) {
- ShareUtils.shareUrl(this.getContext(), currentInfo.getName(), currentInfo.getOriginalUrl());
+ ShareUtils.shareUrl(requireContext(), currentInfo.getName(), currentInfo.getOriginalUrl());
}
return true;
}
case R.id.menu_item_openInBrowser: {
if (currentInfo != null) {
- ShareUtils.openUrlInBrowser(this.getContext(), currentInfo.getOriginalUrl());
+ ShareUtils.openUrlInBrowser(requireContext(), currentInfo.getOriginalUrl());
}
return true;
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java
index 7b7a08a48..4742fcca1 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java
@@ -175,17 +175,20 @@ public class ChannelFragment extends BaseListInfoFragment {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
+ case R.id.action_settings:
+ NavigationHelper.openSettings(requireContext());
+ break;
case R.id.menu_item_rss:
openRssFeed();
break;
case R.id.menu_item_openInBrowser:
if (currentInfo != null) {
- ShareUtils.openUrlInBrowser(this.getContext(), currentInfo.getOriginalUrl());
+ ShareUtils.openUrlInBrowser(requireContext(), currentInfo.getOriginalUrl());
}
break;
case R.id.menu_item_share:
if (currentInfo != null) {
- ShareUtils.shareUrl(this.getContext(), name, currentInfo.getOriginalUrl());
+ ShareUtils.shareUrl(requireContext(), name, currentInfo.getOriginalUrl());
}
break;
default:
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java
index 6941741af..a992cd7ba 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java
@@ -222,11 +222,14 @@ public class PlaylistFragment extends BaseListInfoFragment {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
+ case R.id.action_settings:
+ NavigationHelper.openSettings(requireContext());
+ break;
case R.id.menu_item_openInBrowser:
- ShareUtils.openUrlInBrowser(this.getContext(), url);
+ ShareUtils.openUrlInBrowser(requireContext(), url);
break;
case R.id.menu_item_share:
- ShareUtils.shareUrl(this.getContext(), name, url);
+ ShareUtils.shareUrl(requireContext(), name, url);
break;
case R.id.menu_item_bookmark:
onBookmarkClicked();
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 669d1c16c..aeba763be 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -156,6 +156,9 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
case android.R.id.home:
finish();
return true;
+ case R.id.action_settings:
+ NavigationHelper.openSettings(this);
+ return true;
case R.id.action_append_playlist:
appendAllToPlaylist();
return true;
From 8754cbb38ffac180ffe42543eb114da42e9c5c6f Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sat, 22 Feb 2020 11:12:22 +0100
Subject: [PATCH 0368/1194] Remove Settings button from download activity
---
.../java/org/schabi/newpipe/download/DownloadActivity.java | 3 ---
app/src/main/res/menu/download_menu.xml | 4 ----
2 files changed, 7 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index 2c54f75cf..de3df3527 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -80,9 +80,6 @@ public class DownloadActivity extends AppCompatActivity {
case android.R.id.home:
onBackPressed();
return true;
- case R.id.action_settings:
- NavigationHelper.openSettings(this);
- return true;
default:
return super.onOptionsItemSelected(item);
}
diff --git a/app/src/main/res/menu/download_menu.xml b/app/src/main/res/menu/download_menu.xml
index c74dc804a..d41434711 100644
--- a/app/src/main/res/menu/download_menu.xml
+++ b/app/src/main/res/menu/download_menu.xml
@@ -26,8 +26,4 @@
android:icon="?attr/ic_delete"
android:title="@string/clear_download_history"
app:showAsAction="ifRoom" />
-
-
From 6968dd266a6f8c0de34d9890efc3449f698d9f79 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sat, 22 Feb 2020 11:30:57 +0100
Subject: [PATCH 0369/1194] Remove empty about menu
---
.../main/java/org/schabi/newpipe/about/AboutActivity.java | 7 -------
app/src/main/res/menu/menu_about.xml | 6 ------
2 files changed, 13 deletions(-)
delete mode 100644 app/src/main/res/menu/menu_about.xml
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index edfc54375..7fab44f8f 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -88,13 +88,6 @@ public class AboutActivity extends AppCompatActivity {
}
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.menu_about, menu);
- return true;
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
diff --git a/app/src/main/res/menu/menu_about.xml b/app/src/main/res/menu/menu_about.xml
deleted file mode 100644
index dbe91a04f..000000000
--- a/app/src/main/res/menu/menu_about.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
From d65b8d7d18a953b98f11a7cdf9938d2516d96ed1 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sat, 22 Feb 2020 11:34:08 +0100
Subject: [PATCH 0370/1194] Address @mauriciocolli suggestions in #2960
Simplify code to enable history button
---
.../main/java/org/schabi/newpipe/MainActivity.java | 12 +++---------
.../main/java/org/schabi/newpipe/util/Constants.java | 2 --
2 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 7cd620faa..29dde41c1 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -453,15 +453,9 @@ public class MainActivity extends AppCompatActivity {
NavigationHelper.openMainActivity(this);
}
- if (sharedPreferences.getBoolean(Constants.KEY_ENABLE_WATCH_HISTORY, true)) {
- if (DEBUG) Log.d(TAG, "do not show History-menu as its disabled in settings");
- drawerItems.getMenu().findItem(ITEM_ID_HISTORY).setVisible(true);
- }
-
- if (!sharedPreferences.getBoolean(Constants.KEY_ENABLE_WATCH_HISTORY, true)) {
- if (DEBUG) Log.d(TAG, "show History-menu as its enabled in settings");
- drawerItems.getMenu().findItem(ITEM_ID_HISTORY).setVisible(false);
- }
+ final boolean isHistoryEnabled = sharedPreferences.getBoolean(
+ getString(R.string.enable_watch_history_key), true);
+ drawerItems.getMenu().findItem(ITEM_ID_HISTORY).setVisible(isHistoryEnabled);
}
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/util/Constants.java b/app/src/main/java/org/schabi/newpipe/util/Constants.java
index 50350651d..b01b6df6a 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Constants.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Constants.java
@@ -11,7 +11,5 @@ public class Constants {
public static final String KEY_THEME_CHANGE = "key_theme_change";
public static final String KEY_MAIN_PAGE_CHANGE = "key_main_page_change";
- public static final String KEY_ENABLE_WATCH_HISTORY = "enable_watch_history";
-
public static final int NO_SERVICE_ID = -1;
}
From 7f86b13d9336a3c14a4d656abe1d4760b3717602 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sat, 22 Feb 2020 10:52:48 +0000
Subject: [PATCH 0371/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-ru/strings.xml | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index f21e0e074..2b8591854 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -19,7 +19,7 @@
Введите путь к папке для скачивания видео
Разрешение по умолчанию
Воспроизвести в Kodi
- Приложение Kore не найдено. Установить его?
+ Приложение Kore не найдено, установить\?
\"Воспроизвести в Kodi\"
Показать опцию воспроизведения через медиацентр Kodi
Аудио
@@ -48,7 +48,7 @@
Использовать Tor
Папка для скачанного аудио
Папка для хранения скачанного аудио
- Введите путь к папке для скачанного аудио
+ Введите путь к папке для скачивания аудио
Начните с поиска
Подождите…
Файл уже существует
@@ -88,7 +88,7 @@
Простите, это не должно было произойти.
Отправить отчёт по e-mail
Простите, произошли ошибки.
- ОТЧЁТ
+ Отчёт
Информация:
Что произошло:
Подробности:
@@ -130,7 +130,7 @@
Позже
Отключено
Изменение размера
- Убирает звук в НЕКОТОРЫХ разрешениях
+ Убирает звук в некоторых разрешениях
" млн"
" млрд"
" тыс."
@@ -331,7 +331,7 @@
Заполнить
Приблизить
Создано автоматически
- Включить LeakCanary
+ LeakCanary
Мониторинг утечки памяти может привести к зависанию приложения
Сообщать об ошибках жизненного цикла
Принудительно сообщать о недоставляемых Rx-исключениях вне фрагмента или жизненного цикла после удаления
@@ -548,4 +548,5 @@
Как в системе
По завершении нажмите Готово
Готово
+ Трансляция
\ No newline at end of file
From 44305b4ccd91ac06f067ee48fa4e407ae8f2c1f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=2E=20R=C3=BCdinger?=
Date: Fri, 21 Feb 2020 19:12:06 +0000
Subject: [PATCH 0372/1194] Translated using Weblate (German)
Currently translated at 99.4% (529 of 532 strings)
---
app/src/main/res/values-de/strings.xml | 65 +++++++++++++-------------
1 file changed, 33 insertions(+), 32 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index fbd3f676f..1b3528e04 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -2,7 +2,7 @@
%1$s Aufrufe
Veröffentlicht am %1$s
- Keinen Stream-Player gefunden. Möchtest du VLC installieren\?
+ Keinen Stream-Player gefunden. VLC installieren\?
Installieren
Abbrechen
\n
@@ -17,17 +17,17 @@
Bildschirm drehen
Downloadordner für Videos
Heruntergeladene Videodateien werden hier gespeichert
- Wähle den Downloadordner für Videodateien aus
+ Downloadordner für Videodateien wählen
Standardauflösung
Mit Kodi abspielen
- Kore App wurde nicht gefunden. Kore jetzt installieren?
- Option \"Mit Kodi abspielen\" anzeigen
+ Fehlende Kore-App installieren\?
+ Option „Mit Kodi abspielen“ anzeigen
Zeigt eine Option an, über die man Videos mit Kodi abspielen kann
Audio
Bevorzugtes Audioformat
Herunterladen
Nächste
- \"Nächste\" und \"ähnliche\" Videos anzeigen
+ ‚Nächste‘ und ‚ähnliche‘ Videos anzeigen
Nicht unterstützte URL
Video & Audio
Bevorzugte Sprache des Inhalts
@@ -45,7 +45,7 @@
Netzwerkfehler
Downloadordner für Audiodateien
Heruntergeladene Audiodateien werden hier gespeichert
- Wähle den Downloadordner für Audiodateien aus
+ Downloadordner für Audiodateien wählen
Design
Dunkel
Hell
@@ -60,12 +60,12 @@
Inhalt nicht verfügbar
Inhalt
Altersbeschränkte Inhalte
- Altersbeschränktes Video anzeigen. Das Zulassen dieses Materials ist von den Einstellungen aus möglich.
+ Altersbeschränktes Video anzeigen. Spätere Änderungen sind in den Einstellungen möglich.
Konnte Download-Menü nicht einrichten
Live-Streams werden noch nicht unterstützt
Konnte Webseite nicht vollständig analysieren
Fehler via E-Mail melden
- MELDEN
+ Melden
Info:
Dies ist passiert:
Was:\\nAnfrage:\\nSprache des Inhalts:\\nDienst:\\nZeit (GMT):\\nPaket:\\nVersion:\\nOS-Version:
@@ -73,17 +73,17 @@
Video
Audio
Wiederholen
- Zugriff auf den Speicher wurde verweigert
+ Gewähre zuerst Speicherzugriff
Entschuldigung. Dies hätte nicht passieren sollen.
Entschuldigung. Es sind einige Fehler aufgetreten.
Dein Kommentar (auf englisch):
Konnte keinen Stream abrufen
Automatische Wiedergabe
Video abspielen, wenn NewPipe von einer anderen App aufgerufen wird
- Einen Fehler melden
+ Fehler melden
Anwenderbericht
- LIVE
- Suchen antippen, um zu beginnen
+ Live
+ „Suchen“ antippen, um zu beginnen
Downloads
Downloads
Fehlerbericht
@@ -121,17 +121,17 @@
Deaktiviert
Im Pop-up-Modus öffnen
Bevorzugtes Videoformat
- Im Pop-up Modus abspielen
- NewPipe-Pop-up-Modus
+ Im Pop-up-Modus abspielen
+ Pop-up-Modus
Diese Berechtigung ist für das
\nÖffnen im Pop-up-Modus erforderlich
Standardauflösung des Pop-ups
Höhere Auflösungen anzeigen
- Nur manche Geräte unterstützen das Abspielen von 2K-/4K-Videos
+ Nur manche Geräte können Videos in 2K/4K abspielen
Hintergrund
Pop-up
Größe und Position des Pop-ups merken
- Entfernt Tonspur bei MANCHEN Auflösungen
+ Entfernt Tonspur bei manchen Auflösungen
Letzte Größe und Position des Pop-ups merken
Gestensteuerung
Helligkeit und Lautstärke mittels Gesten einstellen
@@ -172,7 +172,7 @@
Suchverlauf
Suchanfragen lokal speichern
Verlauf ansehen
- Speichere den Wiedergabeverlauf
+ Wiedergabeverlauf speichern
Verlauf
Gesucht
Angesehen
@@ -208,7 +208,7 @@
Die meisten Sonderzeichen
Element gelöscht
- Fortsetzen bei erneutem Fokussieren
+ Wiedergabe fortsetzen
Player
Nichts hier außer das Zirpen der Grillen
Möchtest Du dieses Element aus dem Suchverlauf löschen\?
@@ -238,7 +238,7 @@
In der Warteschlange der Hintergrundwiedergabe
Neu & Heiß
Halten, um zur Wiedergabeliste hinzuzufügen
- \"Gedrückt halten, um hinzuzufügen\" Tipp anzeigen
+ „Zum Anhängen gedrückt halten“ Tipp anzeigen
[Unbekannt]
In Warteschlange für Hintergrundwiedergabe
In Warteschlange in neuen Pop-up
@@ -305,14 +305,14 @@
Abbrechen
Stream-Datei herunterladen
Schnelle, ungenaue Suche verwenden
- Mit ungenauem Suchen kann die Abspielposition schneller erreicht werden, aber auf Kosten der Genauigkeit
+ Mit ungenauem Suchen kann die ungefähre Abspielposition schneller erreicht werden
Datei
Ordner existiert nicht
Die Datei existiert nicht oder die Rechte zum Lesen oder Schreiben fehlen
Dateiname darf nicht leer sein
Ein Fehler ist aufgetreten: %1$s
Automatisch erzeugt
- LeakCanary aktivieren
+ LeakCanary
Import von
Export nach
Importiere…
@@ -361,8 +361,8 @@
\n
\n1. Aktiviere den \"Desktop-Modus\" in einem Web-Browser (die Seite ist für mobile Geräte nicht verfügbar)
\n2. Gehe zu dieser URL: %1$s
-\n3. Melden dich an, falls Du dazu aufgefordert wirst
-\n4. Kopiere die Profil-URL, zu der Du weitergeleitet wurdest.
+\n3. Melde dich an, falls du dazu aufgefordert wirst
+\n4. Kopiere die Profil-URL, zu der du weitergeleitet wurdest.
yourID, soundcloud.com/yourid
Keine Streams zum Download verfügbar
Bevorzugte \"Öffnen\" Aktion
@@ -407,9 +407,9 @@
Neuer Tab
Tab wählen
Gestensteuerung für Lautstärke
- Die Player-Lautstärke über Gesten steuern
+ Player-Lautstärke über Gesten steuern
Gestensteuerung für Helligkeit
- Die Player-Helligkeit über Gesten steuern
+ Player-Helligkeit über Gesten steuern
Aktualisierungen
Datei gelöscht
App Update-Benachrichtigung
@@ -419,7 +419,7 @@
Fehler beim Lesen der gespeicherten Tabs – es werden die Voreinstellungen benutzt
Standardwerte wiederherstellen
Möchtest Du die Standardwerte wiederherstellen\?
- Abonnentenzahl nicht verfügbar
+ Abonnentenzahl nicht abrufbar
Welche Tabs auf der Hauptseite angezeigt werden
Auswahl
Updates
@@ -450,7 +450,7 @@
Die Datei kann nicht erstellt werden
Das Zielverzeichnis kann nicht erstellt werden
System verweigert den Zugriff
- Sichere Verbindung fehlgeschlagen
+ Aufbau einer sicheren Verbindung nicht möglich
Der Server konnte nicht gefunden werden
Kann nicht mit dem Server verbinden
Der Server sendet keine Daten
@@ -467,7 +467,7 @@
Ereignisse
Verbindungszeitüberschreitung
Kommentare anzeigen
- Deaktivieren, um die Anzeige von Kommentaren zu beenden
+ Ausschalten, um Kommentare auszublenden
Autoplay
- Kommentar
@@ -499,7 +499,7 @@
Du wirst gefragt, wohin du jeden Download speichern willst.
\nAktiviere diese Option, wenn du auf die externe SD-Karte herunterladen möchtest
SAF verwenden
- Das Storage Access Framework erlaubt Downloads auf eine externe SD-Karte.
+ Das ‚Storage Access Framework‘ ermöglicht Downloads auf eine externe SD-Karte.
\nHinweis: Manche Geräte sind nicht kompatibel
Wiedergabepositionen löschen
Alle Wiedergabepositionen löschen
@@ -519,7 +519,7 @@
Die Sprache ändert sich, sobald die App neu gestartet wird.
PeerTube-Instanzen
- Finde auf %s die Instanzen, die am besten zu dir passen
+ Finde auf %s die Instanzen, die dir gefallen
Instanz hinzufügen
URL der Instanz eingeben
Validierung der Instanz fehlgeschlagen
@@ -534,8 +534,8 @@
Am beliebtesten
Wiederherstellen
Dieser Download kann nicht wiederhergestellt werden
- Video-Vorschaubild für Sperrbildschirm aktivieren
- Bei Verwendung des Hintergrundplayers wird ein Video-Miniaturbild auf dem Sperrbildschirm angezeigt
+ Video-Vorschaubild auf Sperrbildschirm
+ Ein Video-Miniaturbild wird auf dem Sperrbildschirm angezeigt, wenn der Hintergrundplayer verwendet wird
Downloadverlauf löschen
Heruntergeladene Dateien löschen
%1$s Downloads gelöscht
@@ -544,4 +544,5 @@
Systemstandard
\"Fertig\" drücken, wenn es gelöst wurde
Fertig
+ Live
\ No newline at end of file
From 4d6bbbf00408ef462da45470118cb37e7fb6feeb Mon Sep 17 00:00:00 2001
From: B0pol
Date: Fri, 21 Feb 2020 22:07:55 +0000
Subject: [PATCH 0373/1194] Translated using Weblate (French)
Currently translated at 97.9% (521 of 532 strings)
---
app/src/main/res/values-fr/strings.xml | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index c200b1b8b..5405179bb 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -58,19 +58,19 @@
Désolé, des erreurs sont survenues.
Contenu
Contenu avec limite d’âge
- EN DIRECT
+ En direct
Impossible de charger toutes les miniatures
Impossible de déchiffrer la signature URL de la vidéo
Impossible d’analyser complètement le site web
Les flux en direct ne sont pas encore pris en charge
Désolé, une erreur est survenue.
Lire la vidéo lorsque NewPipe est appelée par une autre application
- Rapporter l’erreur par courriel
+ Signaler cette erreur par courriel
Information :
Ce qui s’est passé :
Votre commentaire (en anglais) :
Détails :
- Rapporter une erreur
+ Signaler une erreur
Vidéo
Audio
Réessayer
@@ -79,7 +79,7 @@
Lecture automatique
Affiche les vidéos soumises à une limite d’âge. Autoriser ce type de contenu est possible depuis les paramètres.
Rapport utilisateur
- RAPPORTER
+ Signaler
Impossible de configurer le menu de téléchargement
Impossible d’obtenir le moindre flux
Téléchargements
@@ -112,7 +112,7 @@
Défi reCAPTCHA
Défi reCAPTCHA demandé
Ouvrir en mode flottant
- Mode flottant NewPipe
+ Mode flottant
Lecture en mode flottant
Oui
Plus tard
@@ -136,7 +136,7 @@
Effacer
Redimensionner
Mrd
- Retire l’audio à CERTAINES définitions
+ Retire l’audio à certaines définitions
Utiliser des gestes pour contrôler la luminosité et le volume du lecteur
Suggestions de recherche
Affiche les suggestions lors d’une recherche
@@ -168,7 +168,7 @@
Que ce soit pour des idées de traductions, de changements de design, de nettoyage de code ou de gros changements de code, une aide est toujours la bienvenue. Plus on contribue, meilleur il devient !
Impossible de modifier l’abonnement
Impossible d’actualiser l’abonnement
- Continue la lecture après les interruptions (ex : appels téléphoniques)
+ Continuer la lecture après les interruptions (ex : appels téléphoniques)
Caractères autorisés dans les noms de fichier
Les caractères invalides sont remplacés par cette valeur
Caractère de remplacement
@@ -232,7 +232,7 @@
Détails
Paramètres audios
Afficher l’astuce « Maintenir pour ajouter »
- Affiche l’astuce lors de l’appui du bouton « Arrière-plan » ou « Mode flottant » sur la page de détails d’une vidéo
+ Afficher l’astuce lors de l’appui du bouton « Arrière-plan » ou « Mode flottant » sur la page de détails d’une vidéo
[Inconnu]
Récupération depuis l’erreur du lecteur
Kiosque
@@ -329,7 +329,7 @@
Débogage
Remplir
Générés automatiquement
- Activer LeakCanary
+ LeakCanary
La surveillance des fuites de mémoire peut geler l’application durant le vidage du tas
Rapporter les erreurs hors cycle de vie
Forcer le rapport des exceptions Rx inlivrables en dehors des fragments ou activités durant le cycle de vie après traitement
@@ -467,7 +467,7 @@
En utilisation les onglets par défaut, une erreur est survenue en lisant les onglets sauvegardés
Le serveur n’accepte pas les téléchargements multi-fils, veuillez réessayer avec @string/msg_threads = 1
Afficher les commentaires
- Désactiver pour ne pas afficher les commentaires
+ Désactiver pour masquer les commentaires
Lecture automatique
- Commentaire
@@ -498,7 +498,7 @@
Afficher les indicateurs de position de lecture dans les listes
Positions de reprise de lecture supprimées.
Utiliser ILAF
- L\'Infrastructure Logicielle d\'Accès au Stockage permet de télécharger sur une carte mémoire externe.
+ L\' « Infrastructure Logicielle d\'Accès au Stockage » permet de télécharger sur une carte mémoire externe.
\nNote : certains appareils ne sont pas compatibles
Supprimer les positions de reprise de lecture
Supprime toutes les positions de reprise de lecture
@@ -534,7 +534,7 @@
Choisissez une instance
Généré automatiquement (pas de téléverseur trouvé)
Activer la vidéo miniaturisée sur l\'écran de verrouillage
- En utilisant le lecteur audio, la miniature de la vidéo sera affichée sur l\'écran de verrouillage
+ La miniature de la vidéo sera affichée sur l\'écran de verrouillage en utilisant le lecteur audio
Effacer l\'historique de téléchargement
Supprimer les fichiers téléchargés
%1$s téléchargements supprimés
@@ -543,4 +543,5 @@
Prédéfini par le système
Appuyez sur « Terminé » une fois résolu
Terminé
+ En direct
\ No newline at end of file
From 9864e04aaee2daaed79e8f151e99f5e1e304c358 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Sat, 22 Feb 2020 02:47:42 +0000
Subject: [PATCH 0374/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (532 of 532 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 5fa590a52..df89264f6 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -499,7 +499,7 @@
切換服務,目前已選取:
- %s 影片
-
+
預設 Kiosk
沒有人在看
From 0bc769b9714db1fa163b41d07d52f6f1a2adfcaa Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sat, 22 Feb 2020 20:43:38 +0100
Subject: [PATCH 0375/1194] Fix regression: Unable to find explicit activity
class
See https://github.com/TeamNewPipe/NewPipe/issues/3114#issuecomment-589940878 for info on this crash.
This reverts ef90493c27af898d8e79adbb5e8d449ef5d0ae35 partly.
---
.../player/BackgroundPlayerActivity.java | 8 +++++++-
.../player/PopupVideoPlayerActivity.java | 8 +++++++-
.../newpipe/player/ServicePlayerActivity.java | 17 ++++++++---------
3 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java
index 1b5b5d07c..59f6e1e6d 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayerActivity.java
@@ -55,7 +55,13 @@ public final class BackgroundPlayerActivity extends ServicePlayerActivity {
return true;
}
- return switchTo(PopupVideoPlayer.class);
+ this.player.setRecovery();
+ getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
+ getApplicationContext().startService(
+ getSwitchIntent(PopupVideoPlayer.class)
+ .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
+ );
+ return true;
}
return false;
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java
index b2af6d9d8..5000d07e2 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayerActivity.java
@@ -48,7 +48,13 @@ public final class PopupVideoPlayerActivity extends ServicePlayerActivity {
@Override
public boolean onPlayerOptionSelected(MenuItem item) {
if (item.getItemId() == R.id.action_switch_background) {
- return switchTo(BackgroundPlayer.class);
+ this.player.setRecovery();
+ getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
+ getApplicationContext().startService(
+ getSwitchIntent(BackgroundPlayer.class)
+ .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
+ );
+ return true;
}
return false;
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index aeba763be..7aa2be05d 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -166,7 +166,13 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS));
return true;
case R.id.action_switch_main:
- return switchTo(MainVideoPlayer.class);
+ this.player.setRecovery();
+ getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
+ getApplicationContext().startActivity(
+ getSwitchIntent(MainVideoPlayer.class)
+ .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
+ );
+ return true;
}
return onPlayerOptionSelected(item) || super.onOptionsItemSelected(item);
}
@@ -190,14 +196,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
false,
false
).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying());
- }
-
- protected boolean switchTo(final Class clazz) {
- this.player.setRecovery();
- getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
- getApplicationContext().startActivity(getSwitchIntent(clazz));
- return true;
+ .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying());
}
////////////////////////////////////////////////////////////////////////////
From 484c3aa320d49c06310887d4dfc8213f36e517d7 Mon Sep 17 00:00:00 2001
From: chr56
Date: Sat, 22 Feb 2020 22:55:53 +0000
Subject: [PATCH 0376/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (533 of 533 strings)
---
.../main/res/values-b+zh+HANS+CN/strings.xml | 25 +++++++++++++------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index c5ff40750..7ec56041b 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -39,7 +39,7 @@
网络错误
- 视频
-
+
禁用
后台播放
@@ -90,8 +90,8 @@
重试
存储访问权限已被拒绝
- - %1$s 次观看
-
+ - %s 次观看
+
千
百万
@@ -131,7 +131,7 @@
没有订阅者
- %s 位订阅者
-
+
没有视频
拖动以重新排序
@@ -468,8 +468,8 @@
显示评论
禁用,以停止显示评论
- - 评论
-
+ - %s 条评论
+
无法加载评论
关闭
@@ -507,12 +507,12 @@
没有人在观看
- %s 人在观看
-
+
没有人在听
- %s 人在听
-
+
重新启动应用后,语言将更改。
PeerTube 服务器
@@ -537,4 +537,13 @@
删除下载了的文件
已删除 %1$s 下载
授予在其他应用上层显示的权限
+ Newpipe应用语言
+ [系统默认]
+ 完成后请按\"完成(Done)\"
+ 完成
+ 视频
+
+ - %s秒
+
+
\ No newline at end of file
From 302e4ab664aa810f7101e1bade27e1ddf5871ccb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Sat, 22 Feb 2020 15:11:32 +0000
Subject: [PATCH 0377/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-tr/strings.xml | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 6d416c901..733cacce5 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -464,8 +464,8 @@
Yorumları gizlemek için kapatın
Otomatik oynat
- - Yorum
- - Yorumlar
+ - %s yorum
+ - %s yorum
Yorum yok
Yorumlar yüklenemedi
@@ -543,4 +543,9 @@
Sistem öntanımlısı
Çözüldüğünde \"Bitti\" butonuna basın
Bitti
+ Videolar
+
+ - %s saniye
+
+
\ No newline at end of file
From 60e9f56b0fd462d3e103ebe19d6997f9be11df2b Mon Sep 17 00:00:00 2001
From: nautilusx
Date: Sat, 22 Feb 2020 11:21:43 +0000
Subject: [PATCH 0378/1194] Translated using Weblate (German)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-de/strings.xml | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 1b3528e04..c640b620a 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -234,7 +234,7 @@
Kiosk-Seite
Kiosk auswählen
Kiosk
- Tipp anzeigen, wenn der Hintergrundwiedergabe- oder Pop-up-Button auf der Videodetailseite gedrückt gehalten wird
+ Tipp anzeigen, wenn der Hintergrundwiedergabe- oder Pop-up-Button \"Details:\" im Video gedrückt wird
In der Warteschlange der Hintergrundwiedergabe
Neu & Heiß
Halten, um zur Wiedergabeliste hinzuzufügen
@@ -343,7 +343,7 @@
Standard
Abschalten, um das Laden von Miniaturansichten zu verhindern, was Daten- und Speicherverbrauch spart. Änderungen löschen den Bildzwischenspeicher sowohl im Arbeitsspeicher als auch auf dem internen Speicher.
Nächsten Stream automatisch einreihen
- Automatisches Anhängen eines verwandten Streams beim Abspielen des letzten Streams in einer nicht wiederholten Warteschlange
+ Wiedergabe durch Anhängen eines verwandten Streams an die Warteschlange (ohne Wiederholungsschleife) fortsetzen
Hier wird bald etwas stehen ;D
Wiedergabeliste mit Lesezeichen versehen
Anpassen
@@ -470,8 +470,8 @@
Ausschalten, um Kommentare auszublenden
Autoplay
- - Kommentar
- - Kommentare
+ - %s Kommentar
+ - %s Kommentare
Keine Kommentare
Kommentare konnten nicht geladen werden
@@ -545,4 +545,9 @@
\"Fertig\" drücken, wenn es gelöst wurde
Fertig
Live
+ Videos
+
+ - %s Sekunden
+
+
\ No newline at end of file
From 09c1e21560a380d5d5dbad4f114fc4c454346e8e Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sat, 22 Feb 2020 19:36:49 +0000
Subject: [PATCH 0379/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-ru/strings.xml | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 7114aec5e..7c7965f80 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -478,9 +478,9 @@
Отключите, чтобы скрыть комментарии
Автовоспроизведение
- - комментарий
- - комментария
- - комментариев
+ - %s комментарий
+ - %s комментария
+ - %s комментариев
Нет комментариев
Не удалось загрузить комментарии
@@ -549,4 +549,10 @@
По завершении нажмите Готово
Готово
Трансляция
+ Видео
+
+ - %s секунд
+
+
+
\ No newline at end of file
From aee7777478a7e1e9bcb4123651a6f6c00af13799 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vojt=C4=9Bch=20=C5=A0amla?=
Date: Sat, 22 Feb 2020 19:24:43 +0000
Subject: [PATCH 0380/1194] Translated using Weblate (Czech)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-cs/strings.xml | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 104ba6695..468bfd611 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -474,9 +474,9 @@ otevření ve vyskakovacím okně
Deaktivovat zobrazování komentářů
Automatické přehrávání
- - Komentáře
-
-
+ - %s komentář
+ - %s komentáře
+ - %s komentářů
Žádné komentáře
Nelze načíst komentáře
@@ -552,4 +552,10 @@ otevření ve vyskakovacím okně
Jazyk systému
Po vyřešení stiskni \"Hotovo\"
Hotovo
+ Videa
+
+ - %s sekund
+
+
+
\ No newline at end of file
From c04040468e257a319519d67ebe381ed3aafb61d3 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Sat, 22 Feb 2020 17:41:43 +0000
Subject: [PATCH 0381/1194] Translated using Weblate (Hebrew)
Currently translated at 99.4% (530 of 533 strings)
---
app/src/main/res/values-he/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index e0567359b..06fb712e3 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -555,4 +555,5 @@
בררת המחדל של המערכת
יש ללחוץ על „סיום” לאחר הפתירה
סיום
+ סרטונים
\ No newline at end of file
From b3b1d6d706aa421bbcfc5d5c8558381f8f6dc044 Mon Sep 17 00:00:00 2001
From: zmni
Date: Sat, 22 Feb 2020 12:05:18 +0000
Subject: [PATCH 0382/1194] Translated using Weblate (Indonesian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-in/strings.xml | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 59678be19..40a4e65a9 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -462,7 +462,7 @@
Nonaktifkan untuk menyembunyikan komentar
Otomatis putar
- - Komentar
+ - %s komentar
Tidak ada komentar
Tidak bisa memuat komentar
@@ -498,7 +498,7 @@
Hapus semua posisi pemutaran\?
Ubah folder unduhan
- - Video
+ - %s video
Aktif/Nonaktifkan layanan, saat ini aktif:
Tidak ada yang menonton
@@ -537,4 +537,8 @@
Selesai
Durasi maju/mundur cepat
Tekan \"Selesai\" saat selesai
+ Video
+
+ - %s detik
+
\ No newline at end of file
From 39dce71c2832bba73e04b97d18ad8a99c44440be Mon Sep 17 00:00:00 2001
From: MohammedSR Vevo
Date: Sat, 22 Feb 2020 18:21:34 +0000
Subject: [PATCH 0383/1194] Translated using Weblate (Kurdish)
Currently translated at 99.8% (532 of 533 strings)
---
app/src/main/res/values-ku/strings.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 5c4506365..967a8a795 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -545,4 +545,9 @@
بنەڕەتی سیستەم
گرتە بکە لەسەر ”تەواو” کاتێ کە چارەسەرکرا
تەواو
+ ڤیدیۆکان
+
+ - %s چرکە
+
+
\ No newline at end of file
From 286fd19ba28de5f2258d9d5f242af79bee4f66b5 Mon Sep 17 00:00:00 2001
From: chr56
Date: Sat, 22 Feb 2020 23:00:48 +0000
Subject: [PATCH 0384/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index a9e9c870d..0b3638ec0 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -462,7 +462,8 @@
關閉以隱藏留言
自動播放
- - 留言
+ - %s 條留言
+
沒有留言
無法載入留言
@@ -499,7 +500,7 @@
切換服務,目前已選取:
- %s 影片
-
+
預設 Kiosk
沒有人在看
@@ -539,4 +540,9 @@
系統預設值
解決後請按「完成」
完成
+ 影片
+
+ - %s秒
+
+
\ No newline at end of file
From 01dcf550cfd6f5e5b0d8f72779f118bea3622028 Mon Sep 17 00:00:00 2001
From: Poolitzer <25934244+Poolitzer@users.noreply.github.com>
Date: Sat, 22 Feb 2020 19:56:56 -0800
Subject: [PATCH 0385/1194] Update issue templates
---
.github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++++++++++++++++
.github/ISSUE_TEMPLATE/feature_request.md | 24 ++++++++++++++
2 files changed, 62 insertions(+)
create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md
create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 000000000..32fa3e03e
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,38 @@
+---
+name: Bug report
+about: Create a bug report to help us improve
+title: "[BUG]"
+labels: bug
+assignees: ''
+
+---
+
+
+### Steps to reproduce
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Press on '....'
+3. Swipe down to '....'
+
+### Expected behavior
+Tell us what you expected to happen.
+
+### Actual behaviour
+Tell us what happens instead
+
+### Screenshots/-recording
+If applicable, add screenshots or a screen recording to help explain your problem. Github should support uploading them directly in the issue field. If your file is too big, feel free to paste a link from a image/video hoster here instead.
+
+### Logs
+If your bug includes a crash, please head over to the [incredible bugreport to markdown converter](https://teamnewpipe.github.io/CrashReportToMarkdown/). Copy the result. Paste it between the code tags:
+here
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 000000000..a0bde3dc0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,24 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: "[Feature]"
+labels: enhancement
+assignees: ''
+
+---
+
+#### Is your feature request related to a problem? Please describe.
+A clear and concise description of what the problem is.
+Ex. *I want to do X, but there is no way to do it.*
+
+#### Describe the solution you'd like
+A clear and concise description of what you want to happen.
+Ex. *I think it would be nice if you would add feature Y so it will make it easier.*
+
+#### Describe alternatives you've considered
+A clear and concise description of any alternative solutions or features you've considered.
+Ex. *I considered Z, but that didn't work because...*
+
+#### Additional context
+Add any other context or screenshots about the feature request here.
+Ex. *Here's a photo of my cat!*
From 495b495f27ced0191ef89b7625577b99ae87d9be Mon Sep 17 00:00:00 2001
From: poolitzer <25934244+Poolitzer@users.noreply.github.com>
Date: Sat, 22 Feb 2020 20:03:38 -0800
Subject: [PATCH 0386/1194] deleting old template
---
.github/ISSUE_TEMPLATE.md | 3 ---
1 file changed, 3 deletions(-)
delete mode 100644 .github/ISSUE_TEMPLATE.md
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index 8073503ad..000000000
--- a/.github/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,3 +0,0 @@
-- [ ] I carefully read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) and agree to them.
-- [ ] I checked if the issue/feature exists in the latest version.
-- [ ] I did use the [incredible bugreport to markdown converter](https://teamnewpipe.github.io/CrashReportToMarkdown/) to paste bug reports.
From 30f66d012e53a8d13ee8a448f2229162ed8c3df6 Mon Sep 17 00:00:00 2001
From: Poolitzer <25934244+Poolitzer@users.noreply.github.com>
Date: Sat, 22 Feb 2020 20:16:14 -0800
Subject: [PATCH 0387/1194] Update PULL_REQUEST_TEMPLATE.md
---
.github/PULL_REQUEST_TEMPLATE.md | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index d0e58680a..ea06e601a 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1 +1,19 @@
+
+
+#### long description of the changes in your PR
+*Now you can make videos*
+
+#### Fixes the following issue(s)
+
+- #1234
+
+#### Relies on the following changes
+
+- #1234
+
+#### Testing apk
+
+debug.zip
+
+#### Agreement
- [ ] I carefully read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) and agree to them.
From a3bce7f7caf14f034fd550870bcbeaf5d04dee5e Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sun, 23 Feb 2020 09:46:42 +0100
Subject: [PATCH 0388/1194] Change app id based on current git branch
This enables to install multiple builds from different branches at once
---
app/build.gradle | 11 ++++++++++-
app/src/debug/AndroidManifest.xml | 17 -----------------
app/src/main/res/values/strings.xml | 1 -
3 files changed, 10 insertions(+), 19 deletions(-)
delete mode 100644 app/src/debug/AndroidManifest.xml
diff --git a/app/build.gradle b/app/build.gradle
index c2bceab9e..36a712cc3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,6 +9,7 @@ android {
defaultConfig {
applicationId "org.schabi.newpipe"
+ resValue "string", "app_name", "NewPipe"
minSdkVersion 19
targetSdkVersion 28
versionCode 840
@@ -28,7 +29,15 @@ android {
debug {
multiDexEnabled true
debuggable true
- applicationIdSuffix ".debug"
+
+ def workingBranch = "git rev-parse --abbrev-ref HEAD".execute().text.trim()
+ if (workingBranch.isEmpty() || workingBranch == "master" || workingBranch == "dev") {
+ applicationIdSuffix ".debug"
+ resValue "string", "app_name", "NewPipe Debug"
+ } else {
+ applicationIdSuffix ".debug." + workingBranch.replaceAll("[^A-Za-z]+", "")
+ resValue "string", "app_name", "NewPipe " + workingBranch
+ }
}
}
diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml
deleted file mode 100644
index a16d6796a..000000000
--- a/app/src/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 148a339a9..bcbfcd6d0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,6 +1,5 @@
- NewPipe
Tap \"Search\" to get started
%1$s views
Published on %1$s
From 84664ebcdcb5be61dbd14d2f948039fb5061e065 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Sun, 23 Feb 2020 17:01:52 +0000
Subject: [PATCH 0389/1194] Translated using Weblate (Hebrew)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-he/strings.xml | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 06fb712e3..0adfd72be 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -167,10 +167,10 @@
אין סרטונים
- - סרטון
- - סרטונים
- - סרטונים
- - סרטונים
+ - סרטון %s
+ - %s סרטונים
+ - %s סרטונים
+ - %s סרטונים
התחלה
השהיה
@@ -473,10 +473,10 @@
יש להשבית כדי להפסיק הסתרת תגובות
ניגון אוטומטי
- - תגובות
-
-
-
+ - תגובה %s
+ - %s תגובות
+ - %s תגובות
+ - %s תגובות
אין תגובות
לא ניתן לטעון תגובות
@@ -556,4 +556,10 @@
יש ללחוץ על „סיום” לאחר הפתירה
סיום
סרטונים
+
+ - %s שניות
+
+
+
+
\ No newline at end of file
From d468423db30d50b67ccb39b44bb2daa5b3b2681a Mon Sep 17 00:00:00 2001
From: ButterflyOfFire
Date: Sun, 23 Feb 2020 17:27:16 +0000
Subject: [PATCH 0390/1194] Translated using Weblate (Arabic)
Currently translated at 97.1% (518 of 533 strings)
---
app/src/main/res/values-ar/strings.xml | 35 ++++++++++++++++----------
1 file changed, 22 insertions(+), 13 deletions(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 79fe2a6fe..469c13177 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -13,7 +13,7 @@
هل تقصد: %1$s\?
تنزيل
تنزيل
- اختر مجلد التنزيل لملفات الصوت
+ اختر مجلد التنزيل للملفات الصوتية
يتم تخزين الملفات الصوتية التي تم تنزيلها هنا
مسار مجلد الصوتيات المحفوظة
اختر مجلد التنزيل لملفات الفيديو
@@ -22,12 +22,12 @@
"لا يمكن إنشاء مجلد للتنزيلات في '%1$s'"
إنشاء دليل التحميل \'%1$s\'
تثبيت
- تطبيق Kore غير موجود. هل تريد تثبيته ؟
+ تطبيق Kore غير موجود. هل تريد تنصيبه؟
مضيء
صور معاينة الفيديو
خطأ في الشبكة
التالي
- لا يوجد مشغل فيديو. هل تريد تثبيت VLC ؟
+ لا يوجد مشغل فيديو. هل تريد تنصيب VLC؟
افتح في المتصفح
الصوت
تشغيل
@@ -57,7 +57,7 @@
خطأ
تعذرت عملية تحليل الموقع
تعذر فك تشفير توقيع رابط الفيديو
- انقر فوق بحث لتبدأ
+ اضغط فوق \"البحث\" لتبدأ
اشتراك
مشترك
الرئيسية
@@ -80,8 +80,8 @@
التاريخ
التاريخ
فتح في وضع منبثق
- يزيل الصوت في بعض القرارات
- وضع النوافذ المنبثقة NewPipe
+ يزيل الصوت في بعض الجودات
+ وضع النافذة الطافية
تم إلغاء الاشتراك في القناة
تعذر تغيير حالة الاشتراك
تعذر تحديث الاشتراك
@@ -89,7 +89,7 @@
تشغيل مقطع الفيديو عند إستدعاء NewPipe من تطبيق آخر
الدقة الافتراضية لنوافذ المنبثقة
عرض أعلى جودة
- بعض الأجهزة فقط تدعم تشغيل مقاطع الفيديو 2K / 4K
+ بعض الأجهزة فقط تدعم تشغيل مقاطع الفيديو 2K/4K
تنسيق الفيديو الافتراضي
تذكر حجم النافذة و وضعها
تذكر آخر مكان و حجم للنافذة المنبثقة
@@ -100,7 +100,7 @@
سجل البحث
تخزين طلبات البحث محليا
تتبع مقاطع الفيديو التي تمت مشاهدتها
- استئناف عند اكتساب التركيز
+ استئناف التشغيل
متابعة التشغيل بعد المقاطعات (مثل المكالمات الهاتفية)
إظهار التلميحات \"اضغط للتجاهل\"
عرض تلميح على صفحة التفاصيل عند استخدام وضع مشغل الخلفية أو النافذة المنبثقة
@@ -138,9 +138,9 @@
حدث خطأ للمشغل غير قابل للاسترداد
استرداد المشغل من الخطأ
عذرا، لا ينبغي أن يحدث ذلك.
- الإبلاغ عن خطأ عبر البريد الإلكتروني
+ الإبلاغ عن هذا الخطأ عبر البريد الإلكتروني
عذرا، حدثت بعض الأخطاء.
- تقرير
+ أبلِغ
معلومات:
ماذا حدث:
ماذا:\\nطلب:\\nيحتوى اللغة:\\nSالخدمات:\\nتوقيت غرينتش:\\nحزمة:\\nالإصدار:\\nOS إصدار نظام التشغيل:
@@ -152,7 +152,7 @@
لا شيء هنا غير الصراصير
الصوت
إعادة المحاولة
- تم رفض إذن الوصول إلى التخزين
+ ترخيص الوصول إلى التخزين أوّلا
ألف
مليون
B
@@ -477,7 +477,7 @@
"إنقطع الإتصال بالشبكة عند التحويل إلى البيانات المتنقلة"
مفيد عند التبديل إلى بيانات الجوال ، على الرغم من أنه لا يمكن تعليق بعض التنزيلات
إظهار التعليقات
- تعطيل لإيقاف عرض التعليقات
+ عطّله لإخفاء التعليقات
تشغيل تلقائي
- التعليقات
@@ -555,7 +555,7 @@
استرد
لا يمكن استرداد هذا التنزيل
اختيار مثيل
- ابحث عن الحالات التي تناسبك على %s
+ ابحث عن مثيلات الخوادم التي تناسبك على %s
تمكين قفل شاشة الصور المصغرة الفيديو
عند استخدام مشغل الخلفية ، سيتم عرض صورة مصغرة للفيديو على شاشة القفل
تنظيف تاريخ التحميل
@@ -566,4 +566,13 @@
النظام الافتراضي
اضغط على \"تم\" عند حلها
منجز
+ الفيديوهات
+
+ - %s ثوانٍ
+
+
+
+
+
+
\ No newline at end of file
From 740fa67a4e960d7b7c86bd3a26f8318253b8774a Mon Sep 17 00:00:00 2001
From: JoC
Date: Sun, 23 Feb 2020 01:04:20 +0000
Subject: [PATCH 0391/1194] Translated using Weblate (Spanish)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-es/strings.xml | 54 ++++++++++++++------------
1 file changed, 30 insertions(+), 24 deletions(-)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 17ef8b5b7..2fd43edce 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -2,7 +2,7 @@
%1$s vistas
Publicado el %1$s
- No se encontró ningún reproductor de retransmisiones. ¿Quiere instalar VLC\?
+ No se encontró reproductor. ¿Instalar VLC\?
Instalar
Cancelar
Abrir en el navegador
@@ -20,7 +20,7 @@
Cambie las carpetas de descarga para que tenga efecto
Resolución predeterminada
Reproducir con Kodi
- No se encontró la aplicación Kore. ¿Quiere instalarla\?
+ ¿Instalar aplicación Kore faltante\?
Mostrar opción «Reproducir con Kodi»
Mostrar una opción para reproducir vídeo en el centro multimedia Kodi
Audio
@@ -61,11 +61,11 @@
Aún no se admiten las transmisiones en vivo
Contenido
Contenido restringido por edad
- Mostrar vídeo restringido por edad. Se puede permitir este tipo de material desde Ajustes.
- Toque en buscar para empezar
+ Mostrar vídeo restringido por edad. Se pueden realizar más cambios desde los ajustes.
+ Toque \"Buscar\" para comenzar
Reproducción automática
Reproducir un vídeo cuando NewPipe es llamado desde otra app
- EN DIRECTO
+ En directo
Descargas
Descargas
Informe de error
@@ -73,19 +73,19 @@
No se pudo configurar el menú de descarga
No se pudo obtener ninguna transmisión
Lo siento, esto no debería haber ocurrido.
- Reportar error vía email
+ Informar de este error vía email
Lo siento, ocurrieron algunos errores.
- REPORTAR
+ Informar
Información:
Qué ha ocurrido:
Su comentario (en Inglés):
Detalles:
- Reportar un error
+ Informar de un error
Reporte de usuario
Vídeo
Audio
Reintentar
- Permiso de acceso al almacenamiento denegado
+ Conceder permisos de almacenamiento primero
Iniciar
Pausar
Reproducir
@@ -126,7 +126,7 @@
Formato de vídeo predeterminado
Desactivado
Mostrar resoluciones más altas
- Solo algunos dispositivos soportan reproducción de vídeos en 2K/4K
+ Solo algunos dispositivos pueden reproducir vídeos en 2K/4K
Resolución predeterminada de emergente
Segundo plano
Popup
@@ -137,7 +137,7 @@
Recordar el último tamaño y posición del repr. emerg.
Emergente
Redimensionando
- Elimina el audio en ALGUNAS resoluciones
+ Elimina el audio en algunas resoluciones
Controles del reproductor por gestos
Usar gestos para controlar el brillo y volumen del reproductor
Sugerencias de búsqueda
@@ -167,7 +167,7 @@
Principal
Suscripciones
Qué hay de nuevo
- Reanudar al enfocar
+ Reanudar reproducción
Continuar reproduciendo después de las interrupciones (ej. llamadas telefónicas)
Descargar
Caracteres permitidos en los nombres de archivo
@@ -224,7 +224,7 @@
Quiosco
Tendencias
50 mejores
- Mostrar sugerencia cuando se presiona el botón de 2.º plano o emergente en la página de detalles del vídeo
+ Mostrar sugerencia cuando se presiona el botón de segundo plano o emergente en la página \"Detalles:\" del vídeo
En cola en el reproductor de 2.º plano
En cola en el reproductor emergente
Reproducir todo
@@ -246,7 +246,7 @@
Novedades
Mantener presionado para agregar a la cola
Donar
- NewPipe es desarrollado por voluntarios que emplean su tiempo libre para brindarle la mejor experiencia. Haga una aportación para ayudarlos a crear un NewPipe aún mejor mientras disfrutan de una taza de café.
+ NewPipe es desarrollado por voluntarios que emplean su tiempo libre para brindarle la mejor experiencia. Haga una aportación para ayudarlos a crear un NewPipe mejor mientras disfrutan de una taza de café.
Donar
Sitio web
Visite el sitio web de NewPipe para más información y noticias.
@@ -321,7 +321,7 @@
Usar búsqueda rápida inexacta
La búsqueda inexacta permite al reproductor buscar posiciones más rápido con menor precisión
Poner en cola vídeo relacionado siguiente
- Añadir de forma automática un vídeo relacionado con el último reproducido en una cola sin repetición
+ Continuar reproducción sin repetir al añadir de forma automática un vídeo relacionado con el último visto
Archivo
Archivo movido o eliminado
La carpeta no existe
@@ -441,7 +441,7 @@
No se puede crear el archivo
No se puede crear la carpeta de destino
Permiso denegado por el sistema
- Fallo la conexión segura
+ No se pudo establecer una conexión segura
No se pudo encontrar el servidor
No se puede conectar con el servidor
El servidor no devolvio datos
@@ -458,7 +458,8 @@
Se le preguntará dónde guardar cada descarga.
\nHabilite esta opción junto con SAF si quiere descargar en la tarjeta SD
Usar SAF
- El Framework de Acceso al Almacenamiento permite descargar en la tarjeta SD externa.\nNota: Algunos los dispositivos no son compatibles
+ El \'Framework de Acceso al Almacenamiento\' permite descargar en una tarjeta SD externa.
+\nNota: algunos dispositivos no son compatibles
Cancelar suscripción
Pestaña nueva
Elija la pestaña
@@ -472,7 +473,7 @@
Notificaciones de versiones nuevas de NewPipe
Almacenamiento externo no disponible
No es posible descargar a una tarjeta SD externa. \¿Restablecer la ubicación de la carpeta de descarga\?
- Usando las pestañas por defecto, error al leer las pestañas guardadas
+ No se pudo leer las pestañas guardadas, se usarán las pestañas por defecto
Restaurar valores por defecto
¿Quieres restaurar los valores por defecto\?
Número de suscriptores no disponible
@@ -487,11 +488,11 @@
¡Actualización de NewPipe disponible!
Pulsa para descargar
Mostrar comentarios
- Desactívela para ocultar los comentarios
+ Desactivar para ocultar comentarios
Reproducción automática
- - Comentario
- - Comentarios
+ - %s comentario
+ - %s comentarios
Sin comentarios
No se pudo cargar comentarios
@@ -521,7 +522,7 @@
Duración de búsqueda al avanzar y/o retroceder
Instancias de PeerTube
Selecciona tus instancias favoritas de PeerTube
- Encuentra las mejores instancias para ti en %s
+ Encuentra las instancias que te gusten en %s
Agregar instancia
Ingresar URL de la instancia
No se pudo validar la instancia
@@ -532,8 +533,8 @@
Más gustados
Generado automáticamente (no se encontró creador)
Elige una instancia
- Habilitar miniatura de video de la pantalla de bloqueo
- Al usar el reproductor de fondo, se mostrará una miniatura de video en la pantalla de bloqueo
+ Miniatura de vídeo en la pantalla de bloqueo
+ Se mostrará una miniatura del video en la pantalla de bloqueo al usar el reproductor de fondo
Limpiar historial de descargas
Eliminar archivos descargados
Eliminadas %1$s descargas
@@ -542,4 +543,9 @@
Predeterminado del sistema
Pulse en «Hecho» cuando esté resuelto
Hecho
+ Vídeos
+
+ - %s segundos
+
+
\ No newline at end of file
From 26e2fc6d916744d051f311d5d05d287194590f57 Mon Sep 17 00:00:00 2001
From: chr56
Date: Sun, 23 Feb 2020 05:32:14 +0000
Subject: [PATCH 0392/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (533 of 533 strings)
---
.../main/res/values-b+zh+HANS+CN/strings.xml | 68 +++++++++----------
1 file changed, 34 insertions(+), 34 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index 7ec56041b..25cda17c3 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -39,7 +39,7 @@
网络错误
- 视频
-
+
禁用
后台播放
@@ -70,9 +70,9 @@
更新
文件已删除
无法得知订阅人数
- 每推出新版本时,弹出应用升级通知
+ 发布新版本时,通知我升级应用
网格
- 新版 NewPipe 已可升级!
+ 新版 NewPipe 发布!
服务器不接受 接收 multi-threaded 下载, 以 @string/msg_threads = 1 重试
自动播放
清除数据
@@ -80,7 +80,7 @@
喜欢
不喜欢
使用Tor
- (实验性)通过 Tor 强制下载流量以增强隐私(暂不支持串流视频)。
+ (实验性)通过 Tor 强制播放来增强隐私(暂不支持串流视频)。
报告错误
用户报告
无法创建下载目录\"%1$s\"
@@ -91,7 +91,7 @@
存储访问权限已被拒绝
- %s 次观看
-
+
千
百万
@@ -131,7 +131,7 @@
没有订阅者
- %s 位订阅者
-
+
没有视频
拖动以重新排序
@@ -139,8 +139,8 @@
仅删除一个
全部删除
解除
- 重 命名
- 未安装用于播放此文件的应用程序
+ 重命名
+ 未安装可播放此文件的应用程序
已删除1个项目。
哪些标签需要在主页上展示
列表视图模式
@@ -164,10 +164,10 @@
默认分辨率
找不到Kore。是否安装?
显示“用Kodi播放”选项
- 显示“通过Kodi media center播放视频的选项”
+ 显示“通过Kodi media center播放视频”的选项
音频
默认音频格式
- 显示“下一个”和“类似的”视频
+ 显示“下一个”和“相似”视频
视频和音频
在后台播放
播放
@@ -186,17 +186,17 @@
内容不可用
无法设置下载菜单
暂时不支持观看直播
- 无法获得任何信息流
+ 无法获得任何串流
无法加载图像
App UI 崩溃
- 抱歉,这不应该发生的。
- 通过电子邮件报告错误
+ 抱歉,这本不应该发生。
+ 使用电子邮件报告错误
抱歉,发生了一些错误。
报告
信息:
发生了什么:
详情:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:
- 您的注释(请用英文):
+ 您的附近说明(请用英文):
详细信息:
视频预览缩略图
播放视频,时长:
@@ -221,13 +221,13 @@
调整大小
隐藏部分没有音频的分辨率
播放器手势控制
- 使用手势控制播放器的亮度和音量
+ 允许使用手势控制亮度和音量
显示搜索建议
最佳分辨率
开源小巧的Android媒体播放器。
在GitHub上查看
NewPipe开源许可证
- 你是否有想:翻译、设计、清理或重型代码更改 ——我们始终欢迎你来贡献!
+ 你是否有想:翻译、设计、清理或重构代码更改 ——我们始终欢迎你来贡献!
阅读许可证
贡献
替换字符
@@ -291,7 +291,7 @@
开始在新悬浮窗中播放
捐赠
NewPipe 是由志愿者花费时间为您带来最佳体验开发的。回馈帮助开发人员在享用一杯咖啡的同时,让 NewPipe 变得更好。
- 回馈
+ 反馈
网站
请访问 NewPipe 网站了解更多信息和讯息。
默认国家/地区
@@ -319,17 +319,17 @@
导入成功
没有有效的ZIP文件
警告:无法导入所有文件。
- 这将覆盖当前设置。
+ 此操作会覆盖当前设置 。
显示信息
书签
确定要从观看历史记录中删除该项吗?
是否确实要从历史记录中删除所有项目?
最后播放
播放最多
- 总是寻问
+ 总是询问
新建播放列表
删除
- 重 命名
+ 重命名
名称
添加到播放列表
设为播放列表缩略图
@@ -344,7 +344,7 @@
适应屏幕
填充屏幕
缩放
- 敬请等待
+ 敬请期待
调试
自动生成
启用LeakCanary
@@ -375,11 +375,11 @@
\n1. 转到此网站: %1$s
\n2. 登录(如果需要)
\n3. 应该立即开始下载(即导出文件)
- 通过键入网址或你的 ID 导入 SoundCloud 配置文件:
-\n
-\n1. 在浏览器中启用\"电脑模式\"(该网站不适用于移动设备)
-\n2. 转到此 URL: %1$s
-\n3. 登录(如果需要)
+ 通过输入网址或你的 ID 导入 SoundCloud 配置文件:
+\n
+\n1. 在浏览器中启用\"电脑模式\"(该网站不适用于移动设备)
+\n2. 转到此 URL: %1$s
+\n3. 登录(如果需要)
\n4. 复制重定向的配置文件下载地址。
你的 ID:soundcloud.com/[你的ID]
该操作消耗大量流量,
@@ -389,7 +389,7 @@
清空已缓存元数据
清空已缓存的网页数据
清空元数据缓存成功
- 播放速度控制
+ 播放速度
节奏
音调
解除关联(可能导致失真)
@@ -399,7 +399,7 @@
字幕
修改播放器字幕比例和背景样式。需要重新启动应用程序才能生效。
删除串流的播放历史和播放位置
- 删除全部观看记录?
+ 删除全部观看历史记录?
清除搜索历史记录
清除搜索关键词的历史记录
是否删除全部搜索历史记录?
@@ -460,7 +460,7 @@
清除已完成的下载
停止
最大重试次数
- 取消下载前的最多尝试次数
+ 取消下载前的最多重试着次数
在切换到移动流量网络时中断播放
切换至移动数据时可能有用,尽管一些下载无法被暂停
事件
@@ -469,7 +469,7 @@
禁用,以停止显示评论
- %s 条评论
-
+
无法加载评论
关闭
@@ -507,12 +507,12 @@
没有人在观看
- %s 人在观看
-
+
没有人在听
- %s 人在听
-
+
重新启动应用后,语言将更改。
PeerTube 服务器
@@ -534,7 +534,7 @@
在锁屏上显示视频缩略图
在后台播放时,锁屏上将会显示视频的缩略图
清除下载历史记录
- 删除下载了的文件
+ 删除已下载的文件
已删除 %1$s 下载
授予在其他应用上层显示的权限
Newpipe应用语言
@@ -544,6 +544,6 @@
视频
- %s秒
-
+
\ No newline at end of file
From 030e5ab894ed576e9e63332c6b08cdda090eade6 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sun, 23 Feb 2020 20:56:56 +0100
Subject: [PATCH 0393/1194] Add comment to gradle
---
app/build.gradle | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/build.gradle b/app/build.gradle
index 36a712cc3..2329a7a0e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -30,6 +30,7 @@ android {
multiDexEnabled true
debuggable true
+ // suffix the app id and the app name with git branch name
def workingBranch = "git rev-parse --abbrev-ref HEAD".execute().text.trim()
if (workingBranch.isEmpty() || workingBranch == "master" || workingBranch == "dev") {
applicationIdSuffix ".debug"
From dc6a0e3eec32d21eddd10fe4bdd4147140d7f79a Mon Sep 17 00:00:00 2001
From: karol
Date: Sun, 23 Feb 2020 21:28:40 +0100
Subject: [PATCH 0394/1194] mute-button added to activity_main_player.xml's
---
.../activity_main_player.xml | 18 ++++++++++++++++++
.../main/res/layout/activity_main_player.xml | 19 +++++++++++++++++++
2 files changed, 37 insertions(+)
diff --git a/app/src/main/res/layout-large-land/activity_main_player.xml b/app/src/main/res/layout-large-land/activity_main_player.xml
index 8e11b99f3..10fda556a 100644
--- a/app/src/main/res/layout-large-land/activity_main_player.xml
+++ b/app/src/main/res/layout-large-land/activity_main_player.xml
@@ -389,6 +389,24 @@
android:background="?attr/selectableItemBackground"
android:contentDescription="@string/switch_to_background"
tools:ignore="RtlHardcoded"/>
+
+
+
+
+
Date: Sun, 23 Feb 2020 22:32:23 +0100
Subject: [PATCH 0395/1194] mute-button implementation in main player
---
.../org/schabi/newpipe/player/BasePlayer.java | 14 ++++++++++++
.../newpipe/player/MainVideoPlayer.java | 22 +++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index 46ca3921d..79496388c 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -532,6 +532,20 @@ public abstract class BasePlayer implements
if (simpleExoPlayer == null) return;
simpleExoPlayer.setShuffleModeEnabled(!simpleExoPlayer.getShuffleModeEnabled());
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Mute / Unmute
+ //////////////////////////////////////////////////////////////////////////*/
+
+ public void onMuteUnmuteButtonClicled(){
+ if (DEBUG) Log.d(TAG, "onMuteUnmuteButtonClicled() called");
+
+ if (simpleExoPlayer.getVolume() != 0) {
+ simpleExoPlayer.setVolume(0);
+ }
+ else {
+ simpleExoPlayer.setVolume(1);
+ }
+ }
/*//////////////////////////////////////////////////////////////////////////
// Progress Updates
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 3340f1107..18412b6cd 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -40,6 +40,7 @@ import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
+import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.ItemTouchHelper;
import android.util.DisplayMetrics;
@@ -446,6 +447,7 @@ public final class MainVideoPlayer extends AppCompatActivity
private ImageButton toggleOrientationButton;
private ImageButton switchPopupButton;
private ImageButton switchBackgroundButton;
+ private ImageButton muteButton;
private RelativeLayout windowRootLayout;
private View secondaryControls;
@@ -482,6 +484,7 @@ public final class MainVideoPlayer extends AppCompatActivity
this.shareButton = rootView.findViewById(R.id.share);
this.toggleOrientationButton = rootView.findViewById(R.id.toggleOrientation);
this.switchBackgroundButton = rootView.findViewById(R.id.switchBackground);
+ this.muteButton = rootView.findViewById(R.id.switchMute);
this.switchPopupButton = rootView.findViewById(R.id.switchPopup);
this.queueLayout = findViewById(R.id.playQueuePanel);
@@ -533,6 +536,7 @@ public final class MainVideoPlayer extends AppCompatActivity
shareButton.setOnClickListener(this);
toggleOrientationButton.setOnClickListener(this);
switchBackgroundButton.setOnClickListener(this);
+ muteButton.setOnClickListener(this);
switchPopupButton.setOnClickListener(this);
getRootView().addOnLayoutChangeListener((view, l, t, r, b, ol, ot, or, ob) -> {
@@ -670,6 +674,21 @@ public final class MainVideoPlayer extends AppCompatActivity
destroy();
finish();
}
+ @Override
+ public void onMuteUnmuteButtonClicled() {
+ super.onMuteUnmuteButtonClicled();
+ setMuteIcon();
+ }
+
+ public void setMuteIcon() {
+ if (simpleExoPlayer.getVolume() == 0){
+ muteButton.setColorFilter(ContextCompat.getColor(context, R.color.white));
+ }
+
+ else {
+ muteButton.setColorFilter(ContextCompat.getColor(context, R.color.gray));
+ }
+ }
@Override
@@ -708,6 +727,9 @@ public final class MainVideoPlayer extends AppCompatActivity
} else if (v.getId() == switchBackgroundButton.getId()) {
onPlayBackgroundButtonClicked();
+ } else if (v.getId() == muteButton.getId()) {
+ onMuteUnmuteButtonClicled();
+
} else if (v.getId() == closeButton.getId()) {
onPlaybackShutdown();
return;
From cc559dc9ce181fef19946667bfe4a9b5e827ee8d Mon Sep 17 00:00:00 2001
From: karol
Date: Sun, 23 Feb 2020 22:55:34 +0100
Subject: [PATCH 0396/1194] isMuted() added
---
.../java/org/schabi/newpipe/player/BasePlayer.java | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index 79496388c..2fe04c9d1 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -538,13 +538,11 @@ public abstract class BasePlayer implements
public void onMuteUnmuteButtonClicled(){
if (DEBUG) Log.d(TAG, "onMuteUnmuteButtonClicled() called");
+ simpleExoPlayer.setVolume(isMuted() ? 1 : 0);
+ }
- if (simpleExoPlayer.getVolume() != 0) {
- simpleExoPlayer.setVolume(0);
- }
- else {
- simpleExoPlayer.setVolume(1);
- }
+ public boolean isMuted(){
+ return simpleExoPlayer.getVolume() == 0;
}
/*//////////////////////////////////////////////////////////////////////////
From 2a63f2a3a633b18d87f4874f11d6961ad2e5a907 Mon Sep 17 00:00:00 2001
From: karol
Date: Sun, 23 Feb 2020 23:31:30 +0100
Subject: [PATCH 0397/1194] mute-buton in queue layout and logic, but no icon
change
---
.../newpipe/player/ServicePlayerActivity.java | 8 +++++-
.../activity_player_queue_control.xml | 27 ++++++++++++++-----
.../layout/activity_player_queue_control.xml | 18 ++++++++++++-
3 files changed, 44 insertions(+), 9 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 7aa2be05d..034746a2b 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -83,6 +83,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
private TextView seekDisplay;
private ImageButton repeatButton;
+ private ImageButton muteButton;
private ImageButton backwardButton;
private ImageButton playPauseButton;
private ImageButton forwardButton;
@@ -305,6 +306,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
private void buildControls() {
repeatButton = rootView.findViewById(R.id.control_repeat);
+ muteButton = rootView.findViewById(R.id.control_mute);
backwardButton = rootView.findViewById(R.id.control_backward);
playPauseButton = rootView.findViewById(R.id.control_play_pause);
forwardButton = rootView.findViewById(R.id.control_forward);
@@ -314,6 +316,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
progressBar = rootView.findViewById(R.id.control_progress_bar);
repeatButton.setOnClickListener(this);
+ muteButton.setOnClickListener(this);
backwardButton.setOnClickListener(this);
playPauseButton.setOnClickListener(this);
forwardButton.setOnClickListener(this);
@@ -446,6 +449,9 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
if (view.getId() == repeatButton.getId()) {
player.onRepeatClicked();
+ } else if (view.getId() == muteButton.getId()) {
+ player.onMuteUnmuteButtonClicled();
+
} else if (view.getId() == backwardButton.getId()) {
player.onPlayPrevious();
@@ -661,7 +667,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
final int shuffleAlpha = shuffled ? 255 : 77;
shuffleButton.setImageAlpha(shuffleAlpha);
}
-
+
private void onPlaybackParameterChanged(final PlaybackParameters parameters) {
if (parameters != null) {
playbackSpeedButton.setText(formatSpeed(parameters.speed));
diff --git a/app/src/main/res/layout-land/activity_player_queue_control.xml b/app/src/main/res/layout-land/activity_player_queue_control.xml
index 6468c6784..0277c28b5 100644
--- a/app/src/main/res/layout-land/activity_player_queue_control.xml
+++ b/app/src/main/res/layout-land/activity_player_queue_control.xml
@@ -192,7 +192,7 @@
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_centerVertical="true"
- android:layout_toLeftOf="@+id/control_repeat"
+ android:layout_toLeftOf="@+id/control_mute"
android:gravity="center"
android:minWidth="50dp"
android:text="1x"
@@ -201,13 +201,30 @@
android:background="?attr/selectableItemBackground"
tools:ignore="HardcodedText,RtlHardcoded"/>
+
+
-
+
+
Date: Sun, 23 Feb 2020 23:44:16 +0100
Subject: [PATCH 0398/1194] icon change implemented in queque
---
.../schabi/newpipe/player/BackgroundPlayer.java | 6 ++++++
.../schabi/newpipe/player/PopupVideoPlayer.java | 6 ++++++
.../newpipe/player/ServicePlayerActivity.java | 14 +++++++++++++-
3 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index 9e23d9145..25a9f3be3 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -398,6 +398,12 @@ public final class BackgroundPlayer extends Service {
updatePlayback();
}
+ @Override
+ public void onMuteUnmuteButtonClicled() {
+ super.onMuteUnmuteButtonClicled();
+ updatePlayback();
+ }
+
@Override
public void onUpdateProgress(int currentProgress, int duration, int bufferPercent) {
updateProgress(currentProgress, duration, bufferPercent);
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
index fc14e8d51..88d227936 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
@@ -607,6 +607,12 @@ public final class PopupVideoPlayer extends Service {
updatePlayback();
}
+ @Override
+ public void onMuteUnmuteButtonClicled() {
+ super.onMuteUnmuteButtonClicled();
+ updatePlayback();
+ }
+
@Override
public void onUpdateProgress(int currentProgress, int duration, int bufferPercent) {
updateProgress(currentProgress, duration, bufferPercent);
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 034746a2b..a3d8dde8d 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -7,6 +7,7 @@ import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
@@ -22,6 +23,7 @@ import android.widget.PopupMenu;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
+import android.widget.Toast;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
@@ -560,6 +562,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
onPlayModeChanged(repeatMode, shuffled);
onPlaybackParameterChanged(parameters);
onMaybePlaybackAdapterChanged();
+ onMaybeMuteChanged();
}
@Override
@@ -667,7 +670,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
final int shuffleAlpha = shuffled ? 255 : 77;
shuffleButton.setImageAlpha(shuffleAlpha);
}
-
+
private void onPlaybackParameterChanged(final PlaybackParameters parameters) {
if (parameters != null) {
playbackSpeedButton.setText(formatSpeed(parameters.speed));
@@ -682,4 +685,13 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
itemsList.setAdapter(maybeNewAdapter);
}
}
+
+ private void onMaybeMuteChanged(){
+ if (player.isMuted()) {
+ muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.white));
+ }
+ else {
+ muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.gray));
+ }
+ }
}
From 01c1fa0393df8e856129b59b0869ddfb1128d0ee Mon Sep 17 00:00:00 2001
From: poolitzer <25934244+poolitzer@users.noreply.github.com>
Date: Sun, 23 Feb 2020 16:16:18 -0800
Subject: [PATCH 0399/1194] B0pol suggested improvements
---
.github/ISSUE_TEMPLATE/bug_report.md | 8 +++++---
.github/ISSUE_TEMPLATE/feature_request.md | 5 +++++
.github/PULL_REQUEST_TEMPLATE.md | 14 +++++++++-----
3 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 32fa3e03e..d4e0ea9b7 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -16,9 +16,10 @@ To make it easier for us to help you please enter detailed information below.
Please note, we only support the latest version of NewPipe and
master branch. Please make sure to upgrade & recreate the issue on the latest
-version prior to opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start, make sure its version is the same as in you app (left sidebar, about)
+version prior to opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start, make sure its version is the same as in you app (To check you version, press on the three line menu on the left, click on "About", and you will see your current version.)
-->
### Steps to reproduce
+
Steps to reproduce the behavior:
1. Go to '...'
2. Press on '....'
@@ -34,5 +35,6 @@ Tell us what happens instead
If applicable, add screenshots or a screen recording to help explain your problem. Github should support uploading them directly in the issue field. If your file is too big, feel free to paste a link from a image/video hoster here instead.
### Logs
-If your bug includes a crash, please head over to the [incredible bugreport to markdown converter](https://teamnewpipe.github.io/CrashReportToMarkdown/). Copy the result. Paste it between the code tags:
-here
+If your bug includes a crash, please head over to the [incredible bugreport to markdown converter](https://teamnewpipe.github.io/CrashReportToMarkdown/). Copy the result. Paste it here:
+
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index a0bde3dc0..e39fc5f07 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -22,3 +22,8 @@ Ex. *I considered Z, but that didn't work because...*
#### Additional context
Add any other context or screenshots about the feature request here.
Ex. *Here's a photo of my cat!*
+
+#### Why do you/everyone wants this feature
+Convince us! How does it change your NewPipe experience and/or your life?
+The better this paragraph is, the more likely a developer will think about developing it
+
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index ea06e601a..570d07778 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,15 +1,19 @@
-
+
-#### long description of the changes in your PR
+#### What is it?
+- [ ] Bug fix
+- [ ] Feature
+
+#### Long description of the changes in your PR
*Now you can make videos*
#### Fixes the following issue(s)
-- #1234
+-
#### Relies on the following changes
-
-- #1234
+
+-
#### Testing apk
From 1d9ffffc497108614a18b877f9017d12d053187f Mon Sep 17 00:00:00 2001
From: poolitzer <25934244+Poolitzer@users.noreply.github.com>
Date: Mon, 24 Feb 2020 14:18:48 -0800
Subject: [PATCH 0400/1194] Minor improvements
---
.github/ISSUE_TEMPLATE/bug_report.md | 9 +++++----
.github/ISSUE_TEMPLATE/feature_request.md | 13 +++++++------
.github/PULL_REQUEST_TEMPLATE.md | 2 +-
3 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index d4e0ea9b7..8b5f10f08 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -15,8 +15,9 @@ Use this template to notify us if you found a bug.
To make it easier for us to help you please enter detailed information below.
Please note, we only support the latest version of NewPipe and
-master branch. Please make sure to upgrade & recreate the issue on the latest
-version prior to opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start, make sure its version is the same as in you app (To check you version, press on the three line menu on the left, click on "About", and you will see your current version.)
+master branch. Please make sure to upgrade & recreate the issue on the latest version prior to opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start, make sure its version is the same as in you app (To check you version, press on the three line menu on the left, click on "About", and you will see your current version).
+
+P.S.: Our [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) might be a nice document to read before you fill out the report :)
-->
### Steps to reproduce
@@ -29,7 +30,7 @@ Steps to reproduce the behavior:
Tell us what you expected to happen.
### Actual behaviour
-Tell us what happens instead
+Tell us what happens instead.
### Screenshots/-recording
If applicable, add screenshots or a screen recording to help explain your problem. Github should support uploading them directly in the issue field. If your file is too big, feel free to paste a link from a image/video hoster here instead.
@@ -37,4 +38,4 @@ If applicable, add screenshots or a screen recording to help explain your proble
### Logs
If your bug includes a crash, please head over to the [incredible bugreport to markdown converter](https://teamnewpipe.github.io/CrashReportToMarkdown/). Copy the result. Paste it here:
-
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index e39fc5f07..8453f99ba 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -6,24 +6,25 @@ labels: enhancement
assignees: ''
---
-
+
#### Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is.
-Ex. *I want to do X, but there is no way to do it.*
+Example: *I want to do X, but there is no way to do it.*
#### Describe the solution you'd like
A clear and concise description of what you want to happen.
-Ex. *I think it would be nice if you would add feature Y so it will make it easier.*
+Example: *I think it would be nice if you would add feature Y so it will make it easier.*
#### Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
-Ex. *I considered Z, but that didn't work because...*
+Example: *I considered Z, but that didn't work because...*
#### Additional context
Add any other context or screenshots about the feature request here.
-Ex. *Here's a photo of my cat!*
+Example: *Here's a photo of my cat!*
#### Why do you/everyone wants this feature
Convince us! How does it change your NewPipe experience and/or your life?
-The better this paragraph is, the more likely a developer will think about developing it
+The better this paragraph is, the more likely a developer will think about developing it.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 570d07778..43a6c0c4d 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -16,7 +16,7 @@
-
#### Testing apk
-
+
debug.zip
#### Agreement
From e7082baaff84f0db24753a01e28879647214524a Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Tue, 25 Feb 2020 23:12:12 +0100
Subject: [PATCH 0401/1194] Exception is ignored in SearchFragment
---
.../schabi/newpipe/fragments/list/search/SearchFragment.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
index fcb3eafa7..bde6920d6 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java
@@ -723,7 +723,7 @@ public class SearchFragment
showError(getString(R.string.url_not_supported_toast), false)));
return;
}
- } catch (Exception e) {
+ } catch (Exception ignored) {
// Exception occurred, it's not a url
}
From 3b5b9d7dab7487d499f547ea4ea8e4db2b50ee20 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Tue, 25 Feb 2020 23:38:41 +0100
Subject: [PATCH 0402/1194] Release 0.18.5 (850) and update extractor version
Update User-Agent
---
app/build.gradle | 6 +++---
app/src/main/java/org/schabi/newpipe/DownloaderImpl.java | 2 +-
fastlane/metadata/android/en-US/changelogs/850.txt | 1 +
3 files changed, 5 insertions(+), 4 deletions(-)
create mode 100644 fastlane/metadata/android/en-US/changelogs/850.txt
diff --git a/app/build.gradle b/app/build.gradle
index c2bceab9e..962704e51 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 19
targetSdkVersion 28
- versionCode 840
- versionName "0.18.4"
+ versionCode 850
+ versionName "0.18.5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@@ -63,7 +63,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:v0.18.4'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:fc465c8bf'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
diff --git a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
index 7e4ac304e..0ae072c66 100644
--- a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
+++ b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
@@ -38,7 +38,7 @@ import okhttp3.ResponseBody;
import static org.schabi.newpipe.MainActivity.DEBUG;
public class DownloaderImpl extends Downloader {
- public static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0";
+ public static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0";
private static DownloaderImpl instance;
private String mCookies;
diff --git a/fastlane/metadata/android/en-US/changelogs/850.txt b/fastlane/metadata/android/en-US/changelogs/850.txt
new file mode 100644
index 000000000..90f343f22
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/850.txt
@@ -0,0 +1 @@
+Tn this release the YouTube website version was updated. The old website version is going to be discontinued in March and therefore you are required to upgrade NewPipe.
\ No newline at end of file
From 6a3a72eb065bdf9419e58f01e90e4bf4a576d6a2 Mon Sep 17 00:00:00 2001
From: Alexander--
Date: Wed, 26 Feb 2020 06:40:46 +0659
Subject: [PATCH 0403/1194] NewPipeRecyclerView should allow scrolling down by
default
---
.../main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java b/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java
index 435281d14..41b823db8 100644
--- a/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java
+++ b/app/src/main/java/org/schabi/newpipe/views/NewPipeRecyclerView.java
@@ -36,7 +36,7 @@ public class NewPipeRecyclerView extends RecyclerView {
private Rect focusRect = new Rect();
private Rect tempFocus = new Rect();
- private boolean allowDpadScroll;
+ private boolean allowDpadScroll = true;
public NewPipeRecyclerView(@NonNull Context context) {
super(context);
From 91aa65e71709913236b7fa9621f3d622201f28cc Mon Sep 17 00:00:00 2001
From: Marcel Dopita
Date: Sat, 18 Jan 2020 14:37:42 +0100
Subject: [PATCH 0404/1194] Support display cutout
Fixes #2682
---
app/src/main/AndroidManifest.xml | 3 ++-
.../schabi/newpipe/player/MainVideoPlayer.java | 15 +++++++++++++++
app/src/main/res/values-v28/styles.xml | 8 ++++++++
app/src/main/res/values/styles.xml | 2 ++
4 files changed, 27 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/res/values-v28/styles.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f27f4bad0..7ca04eed0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -61,7 +61,8 @@
android:name=".player.MainVideoPlayer"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
- android:launchMode="singleTask"/>
+ android:launchMode="singleTask"
+ android:theme="@style/VideoPlayerTheme"/>
= Build.VERSION_CODES.P) {
+ queueLayout.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
+ @Override
+ public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
+ final DisplayCutout cutout = windowInsets.getDisplayCutout();
+ if (cutout != null)
+ view.setPadding(cutout.getSafeInsetLeft(), cutout.getSafeInsetTop(),
+ cutout.getSafeInsetRight(), cutout.getSafeInsetBottom());
+ return windowInsets;
+ }
+ });
+ }
}
public void minimize() {
diff --git a/app/src/main/res/values-v28/styles.xml b/app/src/main/res/values-v28/styles.xml
new file mode 100644
index 000000000..92c2d9214
--- /dev/null
+++ b/app/src/main/res/values-v28/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 8047ef7f4..633003092 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -247,4 +247,6 @@
+
+
From d9a8e4d7971b6ed63bcd42d7318faa7ac0ee843a Mon Sep 17 00:00:00 2001
From: Poolitzer <25934244+Poolitzer@users.noreply.github.com>
Date: Wed, 26 Feb 2020 19:50:11 -0800
Subject: [PATCH 0405/1194] NewPipe is an app though :(
And its our app!
Co-Authored-By: Tobias Groza
---
.github/PULL_REQUEST_TEMPLATE.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 43a6c0c4d..978adc100 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,4 +1,4 @@
-
+
#### What is it?
- [ ] Bug fix
From 40f54aea5353cdcfc52a533665a5d495364c3a91 Mon Sep 17 00:00:00 2001
From: karol
Date: Thu, 27 Feb 2020 22:30:18 +0100
Subject: [PATCH 0406/1194] mute intent send between main-bckgrnd-popup players
---
.../newpipe/player/BackgroundPlayer.java | 12 +++++-------
.../org/schabi/newpipe/player/BasePlayer.java | 18 ++++++++++++------
.../schabi/newpipe/player/MainVideoPlayer.java | 8 +++++---
.../newpipe/player/PopupVideoPlayer.java | 3 ++-
.../newpipe/player/ServicePlayerActivity.java | 3 ++-
.../schabi/newpipe/util/NavigationHelper.java | 6 ++++--
6 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index 25a9f3be3..b020f234b 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -30,16 +30,16 @@ import android.content.res.Resources;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.IBinder;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
-import androidx.core.app.NotificationCompat;
-
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.RemoteViews;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.app.NotificationCompat;
+
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.source.MediaSource;
@@ -341,7 +341,6 @@ public final class BackgroundPlayer extends Service {
@Override
public void handleIntent(final Intent intent) {
super.handleIntent(intent);
-
resetNotification();
if (bigNotRemoteView != null)
bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
@@ -389,7 +388,6 @@ public final class BackgroundPlayer extends Service {
@Override
public void onPrepared(boolean playWhenReady) {
super.onPrepared(playWhenReady);
- simpleExoPlayer.setVolume(1f);
}
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index 2fe04c9d1..ce2f94e0d 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -153,6 +153,8 @@ public abstract class BasePlayer implements
public static final String START_PAUSED = "start_paused";
@NonNull
public static final String SELECT_ON_APPEND = "select_on_append";
+ @NonNull
+ public static final String IS_MUTED = "is_muted";
/*//////////////////////////////////////////////////////////////////////////
// Playback
@@ -275,6 +277,7 @@ public abstract class BasePlayer implements
final float playbackPitch = intent.getFloatExtra(PLAYBACK_PITCH, getPlaybackPitch());
final boolean playbackSkipSilence = intent.getBooleanExtra(PLAYBACK_SKIP_SILENCE,
getPlaybackSkipSilence());
+ final boolean isMuted = intent.getBooleanExtra(IS_MUTED, isMuted());
// seek to timestamp if stream is already playing
if (simpleExoPlayer != null
@@ -283,7 +286,7 @@ public abstract class BasePlayer implements
&& playQueue.getItem() != null
&& queue.getItem().getUrl().equals(playQueue.getItem().getUrl())
&& queue.getItem().getRecoveryPosition() != PlayQueueItem.RECOVERY_UNSET
- ) {
+ ) {
simpleExoPlayer.seekTo(playQueue.getIndex(), queue.getItem().getRecoveryPosition());
return;
@@ -293,7 +296,7 @@ public abstract class BasePlayer implements
stateLoader = recordManager.loadStreamState(item)
.observeOn(AndroidSchedulers.mainThread())
.doFinally(() -> initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence,
- /*playOnInit=*/true))
+ /*playOnInit=*/true, isMuted))
.subscribe(
state -> queue.setRecovery(queue.getIndex(), state.getProgressTime()),
error -> {
@@ -306,7 +309,7 @@ public abstract class BasePlayer implements
}
// Good to go...
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, playbackSkipSilence,
- /*playOnInit=*/!intent.getBooleanExtra(START_PAUSED, false));
+ /*playOnInit=*/!intent.getBooleanExtra(START_PAUSED, false), isMuted);
}
protected void initPlayback(@NonNull final PlayQueue queue,
@@ -314,7 +317,8 @@ public abstract class BasePlayer implements
final float playbackSpeed,
final float playbackPitch,
final boolean playbackSkipSilence,
- final boolean playOnReady) {
+ final boolean playOnReady,
+ final boolean isMuted) {
destroyPlayer();
initPlayer(playOnReady);
setRepeatMode(repeatMode);
@@ -327,6 +331,8 @@ public abstract class BasePlayer implements
if (playQueueAdapter != null) playQueueAdapter.dispose();
playQueueAdapter = new PlayQueueAdapter(context, playQueue);
+
+ if (isMuted) simpleExoPlayer.setVolume(0);
}
public void destroyPlayer() {
@@ -536,12 +542,12 @@ public abstract class BasePlayer implements
// Mute / Unmute
//////////////////////////////////////////////////////////////////////////*/
- public void onMuteUnmuteButtonClicled(){
+ public void onMuteUnmuteButtonClicled() {
if (DEBUG) Log.d(TAG, "onMuteUnmuteButtonClicled() called");
simpleExoPlayer.setVolume(isMuted() ? 1 : 0);
}
- public boolean isMuted(){
+ public boolean isMuted() {
return simpleExoPlayer.getVolume() == 0;
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 18412b6cd..0f7a7dcf9 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -219,7 +219,7 @@ public final class MainVideoPlayer extends AppCompatActivity
playerImpl.setPlaybackQuality(playerState.getPlaybackQuality());
playerImpl.initPlayback(playerState.getPlayQueue(), playerState.getRepeatMode(),
playerState.getPlaybackSpeed(), playerState.getPlaybackPitch(),
- playerState.isPlaybackSkipSilence(), playerState.wasPlaying());
+ playerState.isPlaybackSkipSilence(), playerState.wasPlaying(), playerImpl.isMuted());
}
}
@@ -642,7 +642,8 @@ public final class MainVideoPlayer extends AppCompatActivity
this.getPlaybackSkipSilence(),
this.getPlaybackQuality(),
false,
- !isPlaying()
+ !isPlaying(),
+ isMuted()
);
context.startService(intent);
@@ -666,7 +667,8 @@ public final class MainVideoPlayer extends AppCompatActivity
this.getPlaybackSkipSilence(),
this.getPlaybackQuality(),
false,
- !isPlaying()
+ !isPlaying(),
+ isMuted()
);
context.startService(intent);
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
index 88d227936..ff35aecb9 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
@@ -571,7 +571,8 @@ public final class PopupVideoPlayer extends Service {
this.getPlaybackSkipSilence(),
this.getPlaybackQuality(),
false,
- !isPlaying()
+ !isPlaying(),
+ isMuted()
);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index a3d8dde8d..bb5593f09 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -197,7 +197,8 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
this.player.getPlaybackSkipSilence(),
null,
false,
- false
+ false,
+ this.player.isMuted()
).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying());
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
index a19aa92ae..98264e1bf 100644
--- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
@@ -110,13 +110,15 @@ public class NavigationHelper {
final boolean playbackSkipSilence,
@Nullable final String playbackQuality,
final boolean resumePlayback,
- final boolean startPaused) {
+ final boolean startPaused,
+ final boolean isMuted) {
return getPlayerIntent(context, targetClazz, playQueue, playbackQuality, resumePlayback)
.putExtra(BasePlayer.REPEAT_MODE, repeatMode)
.putExtra(BasePlayer.PLAYBACK_SPEED, playbackSpeed)
.putExtra(BasePlayer.PLAYBACK_PITCH, playbackPitch)
.putExtra(BasePlayer.PLAYBACK_SKIP_SILENCE, playbackSkipSilence)
- .putExtra(BasePlayer.START_PAUSED, startPaused);
+ .putExtra(BasePlayer.START_PAUSED, startPaused)
+ .putExtra(BasePlayer.IS_MUTED, isMuted);
}
public static void playOnMainPlayer(final Context context, final PlayQueue queue, final boolean resumePlayback) {
From 0400fcb10609950c4b79b97ac104e0388c2aae8c Mon Sep 17 00:00:00 2001
From: karol
Date: Thu, 27 Feb 2020 23:30:17 +0100
Subject: [PATCH 0407/1194] mute icon in main refactored
---
.../newpipe/player/MainVideoPlayer.java | 56 +++++++++++--------
1 file changed, 33 insertions(+), 23 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 0f7a7dcf9..d7b518771 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -34,6 +34,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.provider.Settings;
+
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -43,6 +44,7 @@ import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.ItemTouchHelper;
+
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
@@ -115,7 +117,8 @@ public final class MainVideoPlayer extends AppCompatActivity
private SharedPreferences defaultPreferences;
- @Nullable private PlayerState playerState;
+ @Nullable
+ private PlayerState playerState;
private boolean isInMultiWindow;
private boolean isBackPressed;
@@ -129,11 +132,13 @@ public final class MainVideoPlayer extends AppCompatActivity
protected void onCreate(@Nullable Bundle savedInstanceState) {
assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
- if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
+ if (DEBUG)
+ Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
defaultPreferences = PreferenceManager.getDefaultSharedPreferences(this);
ThemeHelper.setTheme(this);
getWindow().setBackgroundDrawable(new ColorDrawable(Color.BLACK));
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) getWindow().setStatusBarColor(Color.BLACK);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
+ getWindow().setStatusBarColor(Color.BLACK);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
WindowManager.LayoutParams lp = getWindow().getAttributes();
@@ -142,7 +147,7 @@ public final class MainVideoPlayer extends AppCompatActivity
hideSystemUi();
setContentView(R.layout.activity_main_player);
- playerImpl = new VideoPlayerImpl(this);
+ playerImpl = new VideoPlayerImpl(this);
playerImpl.setup(findViewById(android.R.id.content));
if (savedInstanceState != null && savedInstanceState.get(KEY_SAVED_STATE) != null) {
@@ -247,7 +252,7 @@ public final class MainVideoPlayer extends AppCompatActivity
if (playerImpl == null) return;
playerImpl.setRecovery();
- if(!playerImpl.gotDestroyed()) {
+ if (!playerImpl.gotDestroyed()) {
playerState = createPlayerState();
}
StateSaver.tryToSave(isChangingConfigurations(), null, outState, this);
@@ -395,6 +400,16 @@ public final class MainVideoPlayer extends AppCompatActivity
shuffleButton.setImageAlpha(shuffleAlpha);
}
+ protected void setMuteButton(final ImageButton muteButton, final boolean isMuted) {
+ if (isMuted) {
+ muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.white));
+ } else {
+ muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.gray));
+
+ }
+ }
+
+
private boolean isInMultiWindow() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && isInMultiWindowMode();
}
@@ -494,7 +509,7 @@ public final class MainVideoPlayer extends AppCompatActivity
titleTextView.setSelected(true);
channelTextView.setSelected(true);
boolean showKodiButton = PreferenceManager.getDefaultSharedPreferences(this.context).getBoolean(
- this.context.getString(R.string.show_play_with_kodi_key), false);
+ this.context.getString(R.string.show_play_with_kodi_key), false);
kodiButton.setVisibility(showKodiButton ? View.VISIBLE : View.GONE);
getRootView().setKeepScreenOn(true);
@@ -676,20 +691,11 @@ public final class MainVideoPlayer extends AppCompatActivity
destroy();
finish();
}
+
@Override
public void onMuteUnmuteButtonClicled() {
super.onMuteUnmuteButtonClicled();
- setMuteIcon();
- }
-
- public void setMuteIcon() {
- if (simpleExoPlayer.getVolume() == 0){
- muteButton.setColorFilter(ContextCompat.getColor(context, R.color.white));
- }
-
- else {
- muteButton.setColorFilter(ContextCompat.getColor(context, R.color.gray));
- }
+ updatePlaybackButtons();
}
@@ -736,7 +742,7 @@ public final class MainVideoPlayer extends AppCompatActivity
onPlaybackShutdown();
return;
} else if (v.getId() == kodiButton.getId()) {
- onKodiShare();
+ onKodiShare();
}
if (getCurrentState() != STATE_COMPLETED) {
@@ -785,7 +791,7 @@ public final class MainVideoPlayer extends AppCompatActivity
// share video at the current time (youtube.com/watch?v=ID&t=SECONDS)
ShareUtils.shareUrl(MainVideoPlayer.this,
playerImpl.getVideoTitle(),
- playerImpl.getVideoUrl() + "&t=" + String.valueOf(playerImpl.getPlaybackSeekBar().getProgress()/1000));
+ playerImpl.getVideoUrl() + "&t=" + String.valueOf(playerImpl.getPlaybackSeekBar().getProgress() / 1000));
}
private void onScreenRotationClicked() {
@@ -978,6 +984,7 @@ public final class MainVideoPlayer extends AppCompatActivity
setRepeatModeButton(repeatButton, getRepeatMode());
setShuffleButton(shuffleButton, playQueue.isShuffled());
+ setMuteButton(muteButton, playerImpl.isMuted());
}
private void buildQueue() {
@@ -1018,7 +1025,7 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
public void onSwiped(int index) {
- if(index != -1) playQueue.remove(index);
+ if (index != -1) playQueue.remove(index);
}
};
}
@@ -1097,7 +1104,8 @@ public final class MainVideoPlayer extends AppCompatActivity
@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());
+ if (DEBUG)
+ Log.d(TAG, "onDoubleTap() called with: e = [" + e + "]" + "rawXy = " + e.getRawX() + ", " + e.getRawY() + ", xy = " + e.getX() + ", " + e.getY());
if (e.getX() > playerImpl.getRootView().getWidth() * 2 / 3) {
playerImpl.onFastForward();
@@ -1193,7 +1201,8 @@ public final class MainVideoPlayer extends AppCompatActivity
layoutParams.screenBrightness = currentProgressPercent;
getWindow().setAttributes(layoutParams);
- if (DEBUG) Log.d(TAG, "onScroll().brightnessControl, currentBrightness = " + currentProgressPercent);
+ if (DEBUG)
+ Log.d(TAG, "onScroll().brightnessControl, currentBrightness = " + currentProgressPercent);
final int resId =
currentProgressPercent < 0.25 ? R.drawable.ic_brightness_low_white_72dp
@@ -1232,7 +1241,8 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
public boolean onTouch(View v, MotionEvent event) {
//noinspection PointlessBooleanExpression
- if (DEBUG && false) Log.d(TAG, "onTouch() called with: v = [" + v + "], event = [" + event + "]");
+ if (DEBUG && false)
+ Log.d(TAG, "onTouch() called with: v = [" + v + "], event = [" + event + "]");
gestureDetector.onTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP && isMoving) {
isMoving = false;
From dfaa5675b609ce9c2a2db75980d04ca573924f95 Mon Sep 17 00:00:00 2001
From: bopol
Date: Thu, 27 Feb 2020 23:10:07 +0100
Subject: [PATCH 0408/1194] Round at one place for Localization.shortCount()
---
.../org/schabi/newpipe/util/Localization.java | 17 ++++++++++++-----
.../java/org/schabi/newpipe/util/Utils.java | 11 +++++++++++
2 files changed, 23 insertions(+), 5 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/util/Utils.java
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index cd66ec3c2..ce06f14d2 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -26,6 +26,8 @@ import java.util.Date;
import java.util.List;
import java.util.Locale;
+import static org.schabi.newpipe.util.Utils.round;
+
/*
* Created by chschtsch on 12/29/15.
*
@@ -110,7 +112,7 @@ public class Localization {
if (languageCode.length() == 2) {
return new Locale(languageCode);
} else if (languageCode.contains("_")) {
- String country = languageCode.substring(languageCode.indexOf("_"), languageCode.length());
+ String country = languageCode.substring(languageCode.indexOf("_"));
return new Locale(languageCode.substring(0, 2), country);
}
} catch (Exception ignored) {
@@ -120,6 +122,10 @@ public class Localization {
}
public static String localizeNumber(Context context, long number) {
+ return localizeNumber(context, (double) number);
+ }
+
+ public static String localizeNumber(Context context, double number) {
NumberFormat nf = NumberFormat.getInstance(getAppLocale(context));
return nf.format(number);
}
@@ -146,14 +152,15 @@ public class Localization {
}
public static String shortCount(Context context, long count) {
+ double value = (double) count;
if (count >= 1000000000) {
- return Long.toString(count / 1000000000) + context.getString(R.string.short_billion);
+ return localizeNumber(context, round(value / 1000000000, 1)) + context.getString(R.string.short_billion);
} else if (count >= 1000000) {
- return Long.toString(count / 1000000) + context.getString(R.string.short_million);
+ return localizeNumber(context, round(value / 1000000, 1)) + context.getString(R.string.short_million);
} else if (count >= 1000) {
- return Long.toString(count / 1000) + context.getString(R.string.short_thousand);
+ return localizeNumber(context, round(value / 1000, 1)) + context.getString(R.string.short_thousand);
} else {
- return Long.toString(count);
+ return localizeNumber(context, value);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/Utils.java b/app/src/main/java/org/schabi/newpipe/util/Utils.java
new file mode 100644
index 000000000..ee9a70b50
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/util/Utils.java
@@ -0,0 +1,11 @@
+package org.schabi.newpipe.util;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+public class Utils {
+
+ public static double round(double value, int places) {
+ return new BigDecimal(value).setScale(places, RoundingMode.HALF_UP).doubleValue();
+ }
+}
From 22aa6d16a2115d2d3d9b688d7a6ccbc3ae9afc79 Mon Sep 17 00:00:00 2001
From: bopol
Date: Fri, 28 Feb 2020 16:59:52 +0100
Subject: [PATCH 0409/1194] public Utils.round() moved to private
Localization.round()
---
.../java/org/schabi/newpipe/util/Localization.java | 7 ++++++-
app/src/main/java/org/schabi/newpipe/util/Utils.java | 11 -----------
2 files changed, 6 insertions(+), 12 deletions(-)
delete mode 100644 app/src/main/java/org/schabi/newpipe/util/Utils.java
diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java
index ce06f14d2..47b914bde 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -18,6 +18,8 @@ import org.ocpsoft.prettytime.units.Decade;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.localization.ContentCountry;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Arrays;
@@ -26,7 +28,6 @@ import java.util.Date;
import java.util.List;
import java.util.Locale;
-import static org.schabi.newpipe.util.Utils.round;
/*
* Created by chschtsch on 12/29/15.
@@ -261,4 +262,8 @@ public class Localization {
public static void assureCorrectAppLanguage(Context c) {
changeAppLanguage(getAppLocale(c), c.getResources());
}
+
+ private static double round(double value, int places) {
+ return new BigDecimal(value).setScale(places, RoundingMode.HALF_UP).doubleValue();
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/Utils.java b/app/src/main/java/org/schabi/newpipe/util/Utils.java
deleted file mode 100644
index ee9a70b50..000000000
--- a/app/src/main/java/org/schabi/newpipe/util/Utils.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.schabi.newpipe.util;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-
-public class Utils {
-
- public static double round(double value, int places) {
- return new BigDecimal(value).setScale(places, RoundingMode.HALF_UP).doubleValue();
- }
-}
From 46165f4a4f38353edebad49790f36717d9f3ae76 Mon Sep 17 00:00:00 2001
From: poolitzer <25934244+poolitzer@users.noreply.github.com>
Date: Fri, 28 Feb 2020 15:32:14 -0800
Subject: [PATCH 0410/1194] adding version section to bug report
---
.github/ISSUE_TEMPLATE/bug_report.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index d4e0ea9b7..ad436f64f 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -18,6 +18,11 @@ Please note, we only support the latest version of NewPipe and
master branch. Please make sure to upgrade & recreate the issue on the latest
version prior to opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start, make sure its version is the same as in you app (To check you version, press on the three line menu on the left, click on "About", and you will see your current version.)
-->
+### Version
+
+-
+
+
### Steps to reproduce
Steps to reproduce the behavior:
From 63e85fe4be4539dcafe3829879d84244f6fff52a Mon Sep 17 00:00:00 2001
From: Florian
Date: Tue, 25 Feb 2020 20:28:34 +0000
Subject: [PATCH 0411/1194] Translated using Weblate (French)
Currently translated at 99.8% (532 of 533 strings)
---
app/src/main/res/values-fr/strings.xml | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 5405179bb..d580662fb 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -9,8 +9,8 @@
Choisissez le dossier de téléchargement des fichiers vidéo
Les fichiers vidéo téléchargés sont stockés ici
Installer
- Impossible de trouver Kore. Voulez-vous l’installer \?
- Aucun lecteur de flux multimédias trouvé. Voulez-vous installer VLC \?
+ Installer l\'application Kore manquante \?
+ Aucun lecteur de flux multimédia trouvé. Installer VLC \?
Ouvrir dans le navigateur
Lire avec Kodi
rotation
@@ -74,7 +74,7 @@
Vidéo
Audio
Réessayer
- Autorisation d’accès au stockage refusée
+ Accordez d\'abord l\'accès au stockage
Appuyer sur la loupe pour commencer
Lecture automatique
Affiche les vidéos soumises à une limite d’âge. Autoriser ce type de contenu est possible depuis les paramètres.
@@ -185,7 +185,7 @@
Notification NewPipe
Annuler
Garde un suivi des vidéos vues
- Reprendre lors du retour dans l\'application
+ Reprendre la lecture
Lecteur
Comportement
Historique et cache
@@ -449,7 +449,7 @@
Le dossier de destination ne peut pas être créé
Le fichier ne peut pas être créé
Autorisation refusée par le système
- La connexion sécurisée a échoué
+ Impossible d\'établir une connexion sécurisée
Impossible de trouver le serveur
Impossible de se connecter au serveur
Le serveur n’envoie pas de données
@@ -470,8 +470,8 @@
Désactiver pour masquer les commentaires
Lecture automatique
- - Commentaire
- - Commentaires
+ - %s commentaire
+ - %s commentaires
Aucun commentaire
Impossible de charger les commentaires
@@ -520,7 +520,7 @@
Avance/rembobinage rapide sur une durée
Instances PeerTube
Choisissez vos instances PeerTube préférées
- Cherchez des instances qui pourraient vous intéresser sur %s
+ Trouvez les instances que vous aimez sur %s
Ajouter une instance
Entrez l’URL de l’instance
Échec de validation de l’instance
@@ -544,4 +544,9 @@
Appuyez sur « Terminé » une fois résolu
Terminé
En direct
+ Vidéos
+
+ - %s secondes
+
+
\ No newline at end of file
From 50777d8d2c9402cca964e931e1b7505032953f6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alexandre=20H=C3=B4?=
Date: Wed, 26 Feb 2020 19:25:41 +0000
Subject: [PATCH 0412/1194] Translated using Weblate (French)
Currently translated at 99.8% (532 of 533 strings)
---
app/src/main/res/values-fr/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index d580662fb..45e5c08d9 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -464,7 +464,7 @@
Le post-traitement a échoué
Nombre maximum de tentatives
Nombre maximum de tentatives avant d’annuler le téléchargement
- En utilisation les onglets par défaut, une erreur est survenue en lisant les onglets sauvegardés
+ Erreur durant la lecture des onglets enregistrés. Onglets par défaut utilisés.
Le serveur n’accepte pas les téléchargements multi-fils, veuillez réessayer avec @string/msg_threads = 1
Afficher les commentaires
Désactiver pour masquer les commentaires
@@ -533,7 +533,7 @@
Impossible de récupérer ce téléchargement
Choisissez une instance
Généré automatiquement (pas de téléverseur trouvé)
- Activer la vidéo miniaturisée sur l\'écran de verrouillage
+ Afficher la miniature de la vidéo sur l\'écran de verrouillage
La miniature de la vidéo sera affichée sur l\'écran de verrouillage en utilisant le lecteur audio
Effacer l\'historique de téléchargement
Supprimer les fichiers téléchargés
From 9b2dc1b2636916788161bd62bd5643aa529dff91 Mon Sep 17 00:00:00 2001
From: Lucas Thuries
Date: Sat, 29 Feb 2020 11:54:16 +0000
Subject: [PATCH 0413/1194] Translated using Weblate (French)
Currently translated at 99.8% (532 of 533 strings)
---
app/src/main/res/values-fr/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 45e5c08d9..60a1bb098 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -325,7 +325,7 @@
Quelque chose va bientôt apparaître ici ;D
Télécharger le fichier de flux
Vidéo suivante en file d’attente
- Lecture automatique après la file d\'attente
+ Lecture automatique après la fin de la file d\'attente
Débogage
Remplir
Générés automatiquement
From 9f05f360f9828e0066df4a2f8f26ead52dbc510f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Sun, 23 Feb 2020 19:52:41 +0000
Subject: [PATCH 0414/1194] Translated using Weblate (Turkish)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-tr/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 733cacce5..7d53054d2 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -358,7 +358,7 @@
Hız
Öntanımlı
Ses yüksekliği
- Bağlantısız (bozulmaya neden olabilir)
+ Ayır (bozulmaya neden olabilir)
İndirilebilecek akış yok
Yeğlenen \'aç\' eylemi
İçerik açılırken öntanımlı eylem — %s
@@ -546,6 +546,6 @@
Videolar
- %s saniye
-
+
\ No newline at end of file
From abc3e8d59c87a0b47fde9f905ff12c2d7a128108 Mon Sep 17 00:00:00 2001
From: Daniele Lira Mereb
Date: Tue, 25 Feb 2020 02:01:19 +0000
Subject: [PATCH 0415/1194] Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-pt-rBR/strings.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 04f73b7e4..8e8e9bccf 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -551,4 +551,9 @@ abrir em modo popup
Padrão do sistema
Toque em \"Feito\" ao resolver
Feito
+ Vídeos
+
+ - %s segundos
+
+
\ No newline at end of file
From eb4b6d2a7f8fe4542f0f48cbe4d47bea519b5575 Mon Sep 17 00:00:00 2001
From: Eduardo Caron
Date: Tue, 25 Feb 2020 13:58:16 +0000
Subject: [PATCH 0416/1194] Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-pt-rBR/strings.xml | 38 +++++++++++-----------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 8e8e9bccf..98524db43 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -7,7 +7,7 @@
Informações:
%1$s visualizações
Reproduzir
- Contém vídeo com restrição de idade. É possível permitir vídeos com essa restrição em Configurações > Conteúdo.
+ Mostrar vídeo com restrição de idade. É possível alterar esta opção no menu de configurações.
Vídeo
Reproduz um vídeo quando o NewPipe for aberto a partir de outro aplicativo
Reprodução automática
@@ -30,9 +30,9 @@
Baixar
Detalhes:
Não foi possível criar pasta de download \'%1$s\'
- Reportar erro por e-mail
+ Reportar este erro por e-mail
Relatório de erro
- RELATÓRIO
+ Relatório
Desculpe, ocorreram alguns erros.
OK
Erro
@@ -53,7 +53,7 @@
reCAPTCHA
Desafio reCAPTCHA
Desafio reCAPTCHA solicitado
- Reportar um erro
+ Reportar erro
Tentar novamente
Rotação
Idioma favorito de conteúdo
@@ -67,12 +67,12 @@
Mostrar \'Próximo\' e \'Relacionados\'
Desculpe, isto não deveria ter acontecido.
Iniciar
- Permissão para acessar armazenamento negada
+ Permita acesso ao armazenamento primeiramente
Tema
Publicado em %1$s
Link não suportado
pt
- AO VIVO
+ Ao vivo
Downloads
Downloads
Você quis dizer: %1$s\?
@@ -88,7 +88,7 @@
Escolha a pasta de download para vídeos
Os vídeos baixados serão salvos aqui
Pasta para vídeos baixados
- Aplicativo Kore não instalado. Instalar?
+ Instalar o aplicativo faltante Kore\?
Não foi possível interpretar completamente o site
Capa do vídeo
Transmissões ao vivo ainda não são suportadas
@@ -97,7 +97,7 @@
Threads
Link inválido ou internet indisponível
Selecione uma pasta de download posteriormente nas configurações
- Nenhum player de vídeo encontrado. Deseja instalar o VLC\?
+ Nenhum player de vídeo encontrado. Instalar o VLC\?
Não foi possível interpretar o site
Áudio
Reproduzir
@@ -127,7 +127,7 @@
B
Essa permissão é necessária para
abrir em modo popup
- Modo de popup NewPipe
+ Modo popup
Filtro
Atualizar
Limpar
@@ -137,7 +137,7 @@ abrir em modo popup
Lembra da última posição e o tamanho usado no popup
Popup
Redimensionando
- Remove o áudio em ALGUMAS resoluções
+ Remove o áudio em algumas resoluções
Controle por gestos do player
Use gestos para controlar o volume e o brilho do player
Sugestões de pesquisa
@@ -174,7 +174,7 @@ abrir em modo popup
Inscrições
Novidades
Retomar reprodução
- Ative para continuar reproduzindo depois de interrupções (por exemplo: ligações)
+ Continuar reproduzindo depois de interrupções (por exemplo: ligações)
Histórico de pesquisas
Armazena histórico de pesquisas feitas
Histórico de assistidos
@@ -246,7 +246,7 @@ abrir em modo popup
Iniciar a reprodução quando estiver em segundo plano
Reproduzir em novo popup
Doar
- NewPipe é desenvolvido por voluntários que usam seu tempo para trazer a melhor experiência para você. Retribua para ajudar os desenvolvedores a tornarem o NewPipe ainda melhor enquanto desfrutam uma xícara de café.
+ NewPipe é desenvolvido por voluntários que usam seu tempo livre para trazer a melhor experiência para você. Retribua para ajudar os desenvolvedores a tornarem o NewPipe ainda melhor enquanto desfrutam uma xícara de café.
Retribuir
Site oficial
Visite o site do NewPipe para mais informações e novidades.
@@ -311,7 +311,7 @@ abrir em modo popup
Zoom
Algo irá aparecer aqui em breve ;D
Gerado automaticamente
- Habilitar LeakCanary
+ LeakCanary
O monitoramento de vazamento de memória pode fazer com que o aplicativo fique sem responder ao despejar a pilha
Reportar erros fora do ciclo de vida
Forçar reportagem de exceções Rx não entregáveis ocorrendo fora do fragmento ou ciclo de vida da atividade após o descarte
@@ -424,7 +424,7 @@ abrir em modo popup
Notificações para nova versão do NewPipe
Armazenamento externo indisponível
Não foi possível baixar para o cartão SD externo. Redefinir a pasta de download\?
- Usando abas padrões, erro ao ler abas salvas
+ Não foi possível carregar as abas salvas, carregando então as abas padrão
Restaurar padrões
Deseja restaurar os padrões\?
Número de inscritos indisponível
@@ -458,7 +458,7 @@ abrir em modo popup
O arquivo não pode ser criado
Não foi possível criar a pasta de destino
Permissão negada pelo sistema
- Falha na conexão segura
+ Não foi possível estabelecer uma conexão segura
Não foi possível encontrar o servidor
Não foi possível conectar ao servidor
O servidor não envia dados
@@ -476,7 +476,7 @@ abrir em modo popup
Desative para ocultar comentários
Reprodução automática
- - Comentário
+ - %s comentários
- Comentários
Sem comentários
@@ -528,7 +528,7 @@ abrir em modo popup
Duração do avançar/retroceder rápido
Instâncias PeerTube
Selecione instâncias PeerTube favoritas
- Encontre instâncias PeerTube em %s
+ Encontre instâncias que você gosta em %s
Adicionar instância
Insira o link aqui
Não foi possível acessá-la
@@ -541,8 +541,8 @@ abrir em modo popup
recuperando
Não foi possível recuperar o download
Escolha uma instância
- Ativar capa do vídeo na tela de bloqueio
- Mostra capa do vídeo na tela de bloqueio ao usar player em segundo plano
+ Capa do vídeo na tela de bloqueio
+ A capa do vídeo é mostrada na tela de bloqueio ao usar player em segundo plano
Limpar histórico de downloads
Excluir arquivos baixados
%1$s arquivos excluídos
From bb3b7d68c13ee0d9e80c9de36dfb8cf5bf6cb1b6 Mon Sep 17 00:00:00 2001
From: nautilusx
Date: Mon, 24 Feb 2020 17:35:29 +0000
Subject: [PATCH 0417/1194] Translated using Weblate (German)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-de/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index c640b620a..968a892d0 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -339,7 +339,7 @@
Wiedergabegeschwindigkeitsregler
Geschwindigkeit
Tonhöhe
- Verknüpfung aufheben (kann zu Verzerrungen führen)
+ Entkoppeln (kann zu Verzerrungen führen)
Standard
Abschalten, um das Laden von Miniaturansichten zu verhindern, was Daten- und Speicherverbrauch spart. Änderungen löschen den Bildzwischenspeicher sowohl im Arbeitsspeicher als auch auf dem internen Speicher.
Nächsten Stream automatisch einreihen
@@ -548,6 +548,6 @@
Videos
- %s Sekunden
-
+
\ No newline at end of file
From 720bcbf8ace897ff5750bd103b507075c0511ae7 Mon Sep 17 00:00:00 2001
From: Gontzal Manuel Pujana Onaindia
Date: Mon, 24 Feb 2020 06:17:03 +0000
Subject: [PATCH 0418/1194] Translated using Weblate (Basque)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-eu/strings.xml | 75 ++++++++++++++------------
1 file changed, 40 insertions(+), 35 deletions(-)
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 8e74ed126..3b78a974e 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -14,10 +14,10 @@
biratzea
Bideoak deskargatzeko karpeta
Deskargatutako bideoak hemen gordeko dira
- Hautatu bideoak deskargatzeko karpeta
+ Aukeratu bideoak deskargatzeko karpeta
Lehenetsitako bereizmena
Jo Kodirekin
- Ez da aurkitu Kore aplikazioa. Kore instalatu?
+ Kore aplikazioa instalatu\?
Erakutsi \"Jo Kodirekin\" aukera
Erakutsi bideoa Kodi multimedia zentroarekin erreproduzitzeko aukera
Audioa
@@ -36,14 +36,14 @@
Gustoko dute
Tor erabili
(Esperimentala) Trafikoa Tor bidez deskargatzea behartzen du pribatutasuna hobetzeko (bideo-jarioak ez daude oraindik onartuta).
- Ez da jario erreproduzigailurik aurkitu. VLC instalatu nahi duzu?
+ Ez da jario erreproduzigailurik aurkitu. VLC instalatu\?
Hau esan nahi al zenuen: %1$s?
Erabili kanpo bideo-erreproduzigailua
Erabili kanpo audio-erreproduzigailua
Atzeko planoan erreproduzitzen
- Ukitu bilaketa hasteko
+ Sakatu \"Bilatu\" hasteko
Audioa deskargatzeko karpeta
- Hautatu audio fitxategiak deskargatzeko karpeta
+ Aukeratu audio fitxategiak deskargatzeko karpeta
Deskargatutako audio fitxategiak hemen gordetzen dira
Erreprodukzio automatikoa
Bideoa abiatzen du NewPipe beste aplikazio batek deitu badu
@@ -52,12 +52,12 @@
Itxura
Ireki laster-leiho moduan
Audioa kentzen du bereizmen batzuetan
- NewPipe laster-leiho modua
+ Popup modua
Bigarren planoa
Laster-leihoa
Laster-leihoaren lehenetsitako bereizmena
Erakutsi bereizmen altuagoak
- Gailu batzuk besterik ez dute onartzen 2K/4K bideoak erreproduzitzea
+ Bakarrik gailu batzuk onartzen dituzte 2K/4K bideoak erreproduzitzea
Hobetsitako bideo-formatua
Gaia
Beltza
@@ -72,8 +72,8 @@
Laster-leiho moduan erreproduzitzen
Edukia
Adinez mugatutako edukia
- Erakutsi adinez mugatutako bideoa. Ezarpenetan gaitu daiteke eduki mota hau.
- ZUZENEAN
+ Erakutsi adinez mugatutako bideoa. Ezarpenetan aldaketak egin daitezke gero.
+ Zuzenean
Deskargak
Deskargak
Errore-txostena
@@ -100,22 +100,22 @@
Ezin izan da irudia kargatu
Aplikazioa/interfazea kraskatu da
Hori ez litzateke gertatu behar.
- Eman errorearen berri e-posta bidez
+ Eman errore honen berri e-posta bidez
Erroreak gertatu dira.
- TXOSTENA
+ Salatu
Informazioa:
Zer gertatu da:
Zer:\\nEskaria:\\nEdukiaren hizkuntza:\\nZerbitzua:\\nGMT Ordua:\\nPaketea:\\nBertsioa:\\nSE bertsioa:
Zure iruzkina (Ingelesez):
Xehetasunak:
- Eman errore baten berri
+ Salatu errorea
Erabiltzaile-txostena
Ezin izan da \'%1$s\' karpeta sortu deskargetarako
\'%1$s\' karpeta sortu da deskargetarako
Bideoa
Audioa
Saiatu berriro
- Biltegia atzitzeko baimena ukatu da
+ Eman biltegia atzitzeko baimena lehenengo
k
M
MM
@@ -166,7 +166,7 @@
Nagusia
Harpidetzak
Zer dago berri
- Jarraitu fokua irabaztean
+ Jarraitu erreprodukzioa
Jarraitu etenaldiak eta gero (adib. telefono deiak)
Deskargak
Fitxategi-izenetan baimendutako karaktereak
@@ -199,8 +199,8 @@
Bideorik ez
- - Bideo %
- - % bideo
+ - Bideo %s
+ - %s bideo
Historiala
Bilatuta
@@ -211,7 +211,7 @@
Historiala garbitu da
Elementua ezabatuta
Erakutsi \"mantendu eransteko\" aholkua
- Erakutsi aholkua bigarren planoko eta laster-leihoko botoia sakatzean bideoaren xehetasunen orrian
+ Erakutsi aholkua bigarren planoko eta popup botoia sakatzean bideoaren \"Xehetasunak:\" atalean
Lehenetsitako edukiaren herrialdea
Zerbitzua
Bigarren planoko erreproduzigailuaren ilaran
@@ -226,7 +226,7 @@
Erreproduzigailuaren errore berreskuraezina gertatu da
Erreproduzigailuaren erroretik berreskuratzen
Dohaintza
- NewPipe zuri esperientziarik onena ekartzeko denbora ematen duten boluntarioek garatzen dute. Emaiezu zerbait garatzaileei NewPipe kafe bat hartzen duten bitartean hobetu ahal izan dezaten.
+ NewPipe zuri erabiltzaile esperientziarik onena ekartzeko haien denbora librea ematen duten boluntarioek garatzen dute. Emaiezu zerbait garatzaileei NewPipe kafe bat hartzen duten bitartean hobetu ahal izan dezaten.
Egin dohaintza
Webgunea
Bisitatu NewPipe webgunea informazio gehiagorako eta berriak irakurtzeko.
@@ -280,7 +280,7 @@
Kendu cachetik webguneen datu guztiak
Metadatuen cachea ezabatuta
Gehitu ilarara hurrengo jarioa
- Gehitu erlazionatutako jario bat azken jarioa jo bitartean errepikapenik gabeko ilara batean
+ Jarraitu bukaerako (errepikapenik gabe) ilara erlazionatutako jario bat gehituz
Arazketa
Fitxategia
Inportatu datu-basea
@@ -342,7 +342,7 @@
Automatikoki sortuak
Azpitituluak
Aldatu azpitituluen testuaren eskala eta atzealdeko estiloa. Aplikazioa berrabiarazi behar da aldaketak aplikatzeko.
- Gaitu LeakCanary
+ LeakCanary
Memoria galeren monitorizazioa. Aplikazioak agian ez du erantzungo memoriaren aitortza egin bitartean
Eman bizitza-ziklo kanpoko erroreen berri
Inportatu/esportatu
@@ -373,7 +373,7 @@
Erreprodukzio-abiaduraren kontrolak
Tempoa
Tonua
- Deslotu (distortsioa sor lezake)
+ Desaktibatu (distortsioa sor lezake)
Lehenetsia
Ezarpenak ere inportatu nahi dituzu?
Bilaketa ez zehatzak posizioak azkarrago baina prezisio gutxiagoz bilatzea ahalbidetzen du
@@ -416,10 +416,10 @@
NewPipe aplikazioaren bertsio berrien jakinarazpena
Kanpo biltegiratzea ez dago eskuragarri
Ezin da SD txartel batera deskargatu. Deskargen karpeta berrezarri nahi duzu\?
- Lehenetsitako fitxak erabiltzen, errorea gordetako fitxak irakurtzean
+ Ezin izan dira gordetako fitxak irakurri, lehenetsitako fitxak erabiltzen
Berrezarri lehenetsitakoak
- Lehenetsitakoak berrezarri nahi dituzu\?
- Harpidedunen kontua ez dago eskuragarri
+ Lehenetsiak berrezarri nahi dituzu\?
+ Harpidedun kopurua ez dago eskuragarri
Orri nagusian ikusiko diren fitxak
Hautaketa
Konferentziak
@@ -451,7 +451,7 @@
Ezin da fitxategia sortu
Ezin da helburu karpeta sortu
Sistemak baimena ukatu du
- Konexio seguruak huts egin du
+ Ezin izan da konexio seguru bat ezarri
Ezin izan da zerbitzaria aurkitu
Ezin da zerbitzariarekin konektatu
Zerbitzariak ez du daturik bidaltzen
@@ -466,11 +466,11 @@
Erabilgarria datu mugikorretara aldatzean, hala ere deskarga batzuk ezin dira pausatu
Konexioaren denbora muga
Erakutsi iruzkinak
- Desgaitu iruzkinak erakusteari erakusteko
+ Desgaitu iruzkinak ezkutatzeko
Erreprodukzio automatikoa
- - Iruzkinak
-
+ - Iruzkin %s
+ - %s iruzkin
Iruzkinik ez
Ezin izan dira iruzkinak kargatu
@@ -483,7 +483,7 @@
Erreprodukzio-posizioak ezabatuta.
Fitxategia lekuz aldatu edo ezabatu da
Badago izen bereko fitxategi bat
- ezin da fitxategia gainidatzi
+ Ezin da fitxategia gainidatzi
Badago izen bereko deskarga bat burutzeke
NewPipe itxi egin da fitxategian lanean zegoela
Ez dago lekurik gailuan
@@ -509,7 +509,7 @@
- %s entzule
SAF erabili
- Biltegian Sartzeko Armazoiak kanpoko SD txartel betera jaitsierak egitea ahalbidetzen du.
+ \'Biltegiaren Sarrera Framework\'ak kanpoko SD txartel betera jaistea ahalbidetzen du.
\nOharra: gailu batzuk ez dira bateragarriak
Ezabatu erreprodukziorako kokapenak
Erreprodukziorako kokapen guztiak ezabatzen ditu
@@ -520,7 +520,7 @@
Aurreratze/atzeratze bilaketaren iraupena
PeerTube instantziak
Hautatu zure gogoko PeerTube instantziak
- Aurkitu instantziak hemen: %s
+ Aurkitu gustuko instantziak hemen: %s
Gehitu instantzia
Sartu instantziaren URLa
Ezin izan da instantzia balioztatu
@@ -533,14 +533,19 @@
berreskuratzen
Ezin da deskarga hau berreskuratu
Aukeratu instantzia
- Gaitu bideoaren iruditxoa blokeo pantailan
- Bigarren planoko erreproduzigailua erabiltzean bideoaren iruditxo bat bistaratuko da blokeo pantailan
+ Bideoaren miniatura blokeo pantailan
+ Atzeko planoko bideo erreproduzitzailea erabiltzen den bitartean, bideoaren karatula blokeo pantailan erakutsiko da
Garbitu deskargen historiala
Ezabatu deskargatutako fitxategiak
%1$s deskarga ezabatuta
- Eman beste aplikazioen gainean erakusteko baimena
+ Baimena eman beste aplikazioen gainetik erakusteko
Aplikazioaren hizkuntza
- Sisteman lehenetsia
+ Sistemaren lehenetsia
Sakatu \"Egina\" konponduta dagoenean
Egina
+ Bideoak
+
+ - %s segundu
+
+
\ No newline at end of file
From 19fe47f71e70f508786495f110ea75d2aed4e1fa Mon Sep 17 00:00:00 2001
From: Nicu Borta
Date: Tue, 25 Feb 2020 16:37:38 +0000
Subject: [PATCH 0419/1194] Translated using Weblate (Romanian)
Currently translated at 74.1% (395 of 533 strings)
---
app/src/main/res/values-ro/strings.xml | 35 ++++++++++++++------------
1 file changed, 19 insertions(+), 16 deletions(-)
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index e304e862d..d69ad016e 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -2,7 +2,7 @@
%1$s vizionări
Încărcat pe %1$s
- Niciun player pentru streaming găsit. Doriți să instalați VLC?
+ Niciun player pentru streaming găsit. Instalați VLC\?
Instalare
Anulare
Deschidere în browser
@@ -18,10 +18,10 @@
Folosește un player audio extern
Locația videoclipurilor descărcate
Videoclipurile descărcate vor fi salvate aici
- Introduceți locația unde se vor descărca videoclipurile
+ Alegeți locația unde se vor descărca videoclipurile
Directorul audio-ului descărcat
Locul în care se vor descărca fișierele audio
- Introduceți locația în care se va descărca fişierele audio
+ Alegeți locația în care se vor descărca fişierele audio
Rezoluție implicită
Redați folosind Kodi
Aplicația Kore nu a fost găsită. Doriți să o instalați?
@@ -45,7 +45,7 @@
Redați
Conținut
Conținut restricționat în funcție de vârstă
- Arată videoclipul restricționat în funcție de vârstă. Permiterea vizionării este posibilă din Setări.
+ Afișează videoclipuri restricționate în funcție de vârstă. Permiterea vizionării este posibilă din Setări.
Eroare
Eroare de rețea
Nu s-au putut încărca toate thumbnail-urile
@@ -65,7 +65,7 @@
Apăsați căutare pentru a începe
Redare automată
Redă un videoclip atunci când NewPipe este deschis din altă aplicație
- În direct
+ Direct
Descărcări
Descărcări
Raport de erori
@@ -109,7 +109,7 @@ pentru a deschide în mod pop-up
ReCAPTCHA
Provocare reCAPTCHA
reCAPTCHA nouă cerută
- NewPipe mod pop-up
+ Mod pop-up
"Rezoluție pop-up inițială "
Afișează rezoluții mai mari
Doar anumite dispozitive suportă redarea videoclipurilor 2K/4K
@@ -127,7 +127,7 @@ pentru a deschide în mod pop-up
K
mil.
mld.
- Elimina sunetul la anumite rezolutii.
+ Sunetul poate lipsi la unele rezoluții
Fundal
Pop-up
Reține dimensiunea și poziția pop-up-ului
@@ -233,12 +233,12 @@ pentru a deschide în mod pop-up
Niciun player pentru streaming găsit. (Totuși, puteți instala VLC).
Descărcați fișierul de streaming
Arată informații
- Marcaje lista de vizionare
+ Playlist-uri salvate
Adaugă La
Folosește parcurgerea inexactă
Derularea inexactă permite player-ului să fie poziţionat mai rapid dar cu o precizie mai redusă
Încarcă miniaturi
- Dezactivați pentru a opri încărcarea miniaturilor, reduce utilizarea datelor și a memoriei. Schimbarea va curăța tot cache-ul din memorie și de pe disc.
+ Dezactivați pentru a preveni încărcarea thumbnail-urilor şi pentru a economisi consumul de date și de memorie. Schimbarea acestei opțiuni va curăța tot cache-ul din memorie și de pe disc.
Cache-ul de imagini a fost curățat
Șterge cache-ul pentru metadata
Șterge cache-ul pentru datele de pagini web
@@ -280,8 +280,8 @@ pentru a deschide în mod pop-up
"Vizitaţi site-ul nostru pentru mai multe informaţi şi ultimele ştiri despre NewPipe."
Doriţi să ştergeţi acest element din istoricul de vizionare ?
Sunteţi sigur că vreţi să ştergeţi toate elementele din istoric ?
- Ultimul cântec ascultat
- "Cel mai ascultat "
+ Ultimele vizionări
+ Cele mai multe vizionări
Exportat
Importat
Nici-un fişier ZIP valid
@@ -313,7 +313,7 @@ pentru a deschide în mod pop-up
Ştergeţi toate elementele
Ignoraţi
"Redenumiţi "
- Nu este instalată nicio aplicație pentru a reda acest fișier
+ Nicio aplicație instalată nu poate reda acest fişier
Donaţi
Ceva va apărea aici în curând ;D
De asemenea, doriți să importați setări?
@@ -377,14 +377,14 @@ pentru a deschide în mod pop-up
Umplere
Mărire
Import/export
- Subtitre
- Modificați scala textului și stilurile de fundal. Necesită repornirea aplicației.
+ Subtitrări
+ Modificați mărimea textului și stilurile de fundal. Necesită repornirea aplicației.
NewPipe este un software copyleft gratuit: îl puteți utiliza, studia, distribui și îl puteți îmbunătăți după bunul plac. În mod special, îl puteți redistribui și/sau modifica în condițiile Licenței publice generale GNU, publicată de Free Software Foundation, fie versiunea 3 a Licenței, fie (la opțiunea dvs.) orice versiune ulterioară.
Politica de confidențialitate a NewPipe
Proiectul NewPipe ia confidențialitatea în serios. Prin urmare, aplicația nu colectează date fără consimțământul dumneavoastră.
\nPolitica de confidențialitate a NewPipe explică în detaliu ce date sunt trimise și stocate atunci când trimiteți un raport de avarie.
Citiți politica de confidențialitate
- Se folosesc filele implicite, eroare la citirea filelor salvate
+ Nu se pot citi filele salvate, se folosesc filele implicite
Restabilire valori implicite
Doriți să restaurați setările implicite\?
Numărul abonaților nu este disponibil
@@ -409,5 +409,8 @@ pentru a deschide în mod pop-up
Pozițiile de redare șterse.
Fișier mutat sau șters
Șterge pozițiile de redare memorate
- Schimbați folderul de descărcări pentru ca setările să aiba efect
+ Schimbați folderul de descărcări pentru ca setările să aibă efect
+ Salvează playlist-ul
+ Activează LeakCanary
+ Limitați rezoluția când folosiți date mobile
\ No newline at end of file
From d71e6b18c088b2f48c5988ba35c91e3adfb5c9b7 Mon Sep 17 00:00:00 2001
From: Enol P
Date: Mon, 24 Feb 2020 22:53:20 +0000
Subject: [PATCH 0420/1194] Translated using Weblate (Asturian)
Currently translated at 50.8% (271 of 533 strings)
---
app/src/main/res/values-b+ast/strings.xml | 43 +++++++++++++++++------
1 file changed, 33 insertions(+), 10 deletions(-)
diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml
index 5ddfa7ead..129c5d2eb 100644
--- a/app/src/main/res/values-b+ast/strings.xml
+++ b/app/src/main/res/values-b+ast/strings.xml
@@ -24,7 +24,7 @@
Aspeutu
Conteníu
Conteníu torgáu pola edá
- EN DIREUTO
+ En direuto
Fallu
Nun pudieron cargase toles miniatures
Nun pudo descifrase la robla de la URL del videu
@@ -65,18 +65,18 @@
Ventanu
Resolución predeterminada del ventanu
Amosar resoluciones más altes
- Namái dalgunos preseos sofiten la reproducción de vídeos en 2K/4K
+ Namái dalgunos preseos puen reproducir vídeos en 2K/4K
Llimpiar
- Quita l\'audiu en DALGUNES resoluciones
+ Quita l\'audiu en dalgunes resoluciones
Usa xestos pa controlar el brilléu y volume del reproductor
Guetar suxerencies
Amuesa suxerencies al guetar
Soscribise
Nun pudo anovase la soscripción
Soscripciones
- Qué hai nuevo
+ Novedaes
Historial de gueta
- Siguir al recuperar el focu
+
Sigue cola reproducción dempués de les interrupciones (llamaes telefóniques, por exemplu)
Reproductor
Comportamientu
@@ -187,7 +187,7 @@
Falló la descarga
Hai una descarga en cursu con esti nome
Nun pue crease la carpeta de destín
- Falló la conexón segura
+ Nun pudo afitase una conexón segura
Nun pue coneutase col sirvidor
Llimpiar les descargues finaes
Reintentos máximos
@@ -211,14 +211,14 @@
Nun hai comentarios
Llimpieza de datos
Amosar comentarios
- Toca p\'alternar la so des/activación
+
Pa cumplir cola GDPR (Regulación Xeneral de Proteición de Datos) europea, pidímoste que revises la política de privacidá de NewPipe. Lléila con procuru.
¿Desaniciar tol historial de gueta\?
\nHas aceutala unviándonos un informe de fallos.
Aición al cambiar a otra aplicación dende\'l reproductor de vídeos principal — %s
El númberu máximu d\'intentos enantes d\'encaboxar la descarga
Posiciones nes llistes
- ¿De xuru\?
+ ¿Quies llimpiar l\'historial de descargues o desaniciar tolos ficheros baxaos\?
Esportación anterior
Importar el ficheru
Importa les soscripciones de YouTube baxando\'l ficheru d\'esportación:
@@ -246,8 +246,8 @@
Descargues
Descargues
- - Vídeos
-
+ - %s videu
+ - %s vídeos
Control per xestos del reproductor
Cargando\'l conteníu solicitáu
@@ -257,4 +257,27 @@
El ficheru nun pue crease
El sirvidor nun unvia datos
La llingua va camudar namái que se reanicie l\'aplicación.
+ Guetar
+ Compartir con
+ El ficheru yá esiste
+ Soscribiéstite
+ L\'historial ta desactiváu
+ Nun hai vídeos
+ ¿Desaniciar tol historial de guetes\?
+ ¡Hai un anovamientu disponible pa NewPipe!
+ Toca pa baxalu
+
+ - %s comentariu
+ - %s comentarios
+
+ Perdióse\'l progresu porque se desanició\'l ficheru
+ Instancies de PeerTube
+ La instancia yá esiste
+ Llingua de l\'aplicación
+ La predeterminada del sistema
+ Vídeos
+
+ - %s segundos
+
+
\ No newline at end of file
From 61673cda70c0e8410ee289ca30d5bf41cba1098d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vojt=C4=9Bch=20=C5=A0amla?=
Date: Sun, 23 Feb 2020 23:39:17 +0000
Subject: [PATCH 0421/1194] Translated using Weblate (Czech)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-cs/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 468bfd611..84d83827f 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -367,7 +367,7 @@ otevření ve vyskakovacím okně
Ovládání rychlosti přehrávání
Tempo
Výška tónu
- Rozpojit (může způsobit zkreslení)
+ Odpojit (může způsobit zkreslení)
Výchozí nastavení
Ke stažení nejsou dostupné žádné streamy
Preferovaná \'otevřít\' akce
@@ -555,7 +555,7 @@ otevření ve vyskakovacím okně
Videa
- %s sekund
-
-
+
+
\ No newline at end of file
From f3c64edf6e191d7b5de0ec8a33475adb75cf3b95 Mon Sep 17 00:00:00 2001
From: WaldiS
Date: Fri, 28 Feb 2020 16:12:45 +0000
Subject: [PATCH 0422/1194] Translated using Weblate (Polish)
Currently translated at 99.8% (532 of 533 strings)
---
app/src/main/res/values-pl/strings.xml | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 93bb2cd5c..1739b0670 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -47,7 +47,7 @@
Odtwórz
Zawartość
Treści z ograniczeniem wiekowym
- Pokaż wideo z ograniczeniami wiekowymi. Dopuszczenie takiego materiału jest możliwe z poziomu Ustawienia.
+ Pokaż wideo z ograniczeniami wiekowymi. Przyszłe zmiany są możliwe z poziomu ustawień.
Na żywo
Pobrane
Pobrane
@@ -113,7 +113,7 @@
Tło
Domyślna rozdzielczość dla trybu okienkowego
Pokaż wyższe rozdzielczości
- Tylko niektóre urządzenia obsługują odtwarzanie filmów 2K/4K
+ Tylko niektóre urządzenia mogą odtwarzać filmy 2K/4K
Domyślny format filmu
Czarny
Zapamiętaj rozmiar i pozycję trybu okienkowego
@@ -216,9 +216,9 @@
Brak filmów
- - %s Film
- - %s Filmy
- - %s Filmów
+ - %s film
+ - %s filmy
+ - %s filmów
Większość znaków specjalnych
Dotacja
@@ -471,9 +471,9 @@
Wyłącz, aby ukryć komentarze
Automatyczne odtwarzanie
- - Komentarze
-
-
+ - %s komentarz
+ - %s komentarze
+ - %s komentarzy
Brak komentarzy
Nie można załadować komentarzy
@@ -549,4 +549,10 @@
Domyślny systemu
Po rozwiązaniu naciśnij „Gotowe”
Gotowe
+ Filmy
+
+ - %s sekund
+
+
+
\ No newline at end of file
From 64c6aac0cf30bd31b327cfbb495a54e390c2b78b Mon Sep 17 00:00:00 2001
From: pjammo
Date: Thu, 27 Feb 2020 12:15:12 +0000
Subject: [PATCH 0423/1194] Translated using Weblate (Italian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-it/strings.xml | 71 ++++++++++++++------------
1 file changed, 38 insertions(+), 33 deletions(-)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index eef99d93f..2607ab210 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -2,7 +2,7 @@
%1$ visualizzazioni
Pubblicato il %1$s
- Nessun lettore multimediale trovato. Vuoi installare VLC\?
+ Nessun lettore multimediale trovato. Installare VLC\?
Installa
Annulla
Apri nel browser
@@ -19,7 +19,7 @@
Scegli la cartella per i video scaricati
Risoluzione Predefinita
Riproduci con Kodi
- L\'applicazione Kore non è stata trovata. Installarla\?
+ Installare l\'app Kore\?
Mostra l\'opzione \"Riproduci con Kodi\"
Mostra l\'opzione per riprodurre i video tramite Kodi
Audio
@@ -61,27 +61,27 @@
I contenuti in diretta non sono al momento supportati
Contenuti
Contenuti Vietati ai Minori
- Mostra video riservati a un pubblico maggiorenne. Si possono abilitare dalle Impostazioni.
- Tocca Cerca per iniziare
+ Mostra video riservati a un pubblico maggiorenne. Si possono abilitare nelle Impostazioni.
+ Tocca \"Cerca\" per iniziare
Riproduzione Automatica
Riproduci i video quando NewPipe viene aperto da un\'altra app
- IN DIRETTA
+ Diretta
Impossibile analizzare completamente il sito web
Impossibile ottenere alcun flusso
Spiacenti, non sarebbe dovuto succedere.
Segnala l\'errore via e-mail
Spiacenti, si sono verificati degli errori.
- SEGNALA
+ Segnala
Info:
Cosa è successo:
Il tuo commento (in inglese):
Dettagli:
- Segnala un errore
+ Segnala Errore
Segnalazione dell\'utente
Video
Audio
Riprova
- È stato negato il permesso di accesso all\'archiviazione di massa
+ Consentire l\'accesso all\'archiviazione
Download
Download
Segnalazione Errori
@@ -118,15 +118,15 @@
Sì
Più tardi
Apri in modalità Popup
- Modalità Popup di NewPipe
+ Modalità Popup
Riproduzione in modalità Popup
Disattivato
- L\'audio potrebbe non essere disponibile per ALCUNE risoluzioni
+ L\'audio potrebbe non essere disponibile per alcune risoluzioni
In Sottofondo
Popup
Risoluzione Predefinita Popup
Mostra Altre Risoluzioni
- Solo alcuni dispositivi supportano la riproduzione video in 2K e 4K
+ Solo alcuni dispositivi possono riprodurre video 2K/4K
Formato Video Predefinito
Ricorda Dimensione e Posizione Popup
Ricorda dimensione e posizione della finestra Popup
@@ -170,7 +170,7 @@
Cronologia Visualizzazioni
Salva la cronologia dei video visualizzati
Riprendi Riproduzione
- Continua a riprodurre dopo le interruzioni (es. chiamate)
+ Continua a riprodurre dopo le interruzioni (es. telefonate)
Scarica
Caratteri Ammessi per i Nomi dei File
I caratteri non validi vengono sostituiti con
@@ -225,7 +225,7 @@
Top 50
New & hot
Mostra Suggerimento \"Tieni Premuto per Accocodare\"
- Nella pagina dei dettagli del video, mostra un suggerimento alla pressione dei pulsanti per la riproduzione Popup o in Sottofondo
+ Nei \"Dettagli\" dei video, mostra suggerimento alla pressione dei pulsanti per la riproduzione Popup o in Sottofondo
Accoda in Sottofondo
Accodato in Popup
Riproduci tutto
@@ -242,12 +242,12 @@
Accoda in Sottofondo
Accoda in Popup
Inizia la riproduzione qui
- Avvia riproduzione in sottofondo
- Avvia subito in Popup
+ Avvia in Sottofondo
+ Avvia in Popup
Dona
Sito
Visita il sito di NewPipe per informazioni e novità.
- NewPipe è sviluppato da volontari che impiegano il loro tempo libero per offrire un\'esperienza migliore. Restituisci il favore, aiutandoli a rendere NewPipe ancora più piacevole, mentre si gustano una tazza di caffè.
+ NewPipe è sviluppato da volontari che impiegano il loro tempo libero per offrire agli utenti un\'esperienza migliore. Restituisci il favore, aiutandoli a rendere NewPipe ancora più piacevole, mentre si gustano una tazza di caffè.
Restituisci
Paese Predefinito per Contenuti
Cambia orientamento
@@ -297,7 +297,7 @@
Elimina
Rinomina
Nome
- Aggiunti alla playlist
+ Aggiungi a Playlist
Imposta come Copertina della Playlist
Segnalibri playlist
Rimuovi segnalibro
@@ -313,14 +313,14 @@
A breve qualcosa apparirà qui ;D
Debug
Generato automaticamente
- Abilita LeakCanary
+ LeakCanary
Il monitoraggio delle perdite di memoria potrebbe causare la mancata risposta dell\'applicazione durante il dumping dell\'heap
Segnala Errori \"Out-of-lifecycle\"
Forza la segnalazione di eccezioni Rx non consegnabili al di fuori del ciclo di vita dell\'attività dopo la chiusura
Usa Ricerca Rapida (Imprecisa)
Consente al lettore multimediale di spostarsi più velocemente, ma con precisione ridotta
Accoda Automaticamente l\'Elemento Successivo
- Accoda un contenuto consigliato quando è in corso la riproduzione dell\'ultimo elemento, in una coda non ripetitiva
+ Riproduzione continua (non ripetititva) quando si accoda un contenuto consigliato
File
Nessuna cartella
Nessun file o cartella che contiene sorgenti
@@ -381,8 +381,8 @@
NewPipe è un software libero con licenza copyleft: si può utilizzare, studiare, condividere e migliorare a proprio piacimento. In particolare, è possibile ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License (Free Software Foundation), nella versione 3 o successiva, a propria discrezione.
Vuoi anche importare le impostazioni?
Informativa sulla Privacy
- Il progetto NewPipe tiene molto alla tua privacy. Perciò, l\'app non raccoglie alcun dato senza il tuo consenso.
-\nL\'informativa sulla privacy di NewPipe spiega in dettaglio quali dati vengono inviati e memorizzati quando si invia un rapporto sugli arresti anomali.
+ Il progetto NewPipe tiene molto alla tua privacy. Perciò, l\'app non raccoglie alcun dato senza il tuo consenso.
+\nL\'informativa sulla privacy spiega nel dettaglio quali dati vengono trattati e memorizzati durante l\'invio di segnalazioni per arresti anomali.
Leggi l\'informativa sulla privacy
Per rispettare il regolamento europeo sulla protezione dei dati (GDPR), attiriamo la vostra attenzione riguardo l\'informativa sulla privacy di NewPipe. Si prega di leggerla attentamente.
\nDevi accettarla per inviarci il bug report.
@@ -406,18 +406,18 @@
Nuova scheda
Scegli scheda
Movimenti Controllo Volume
- Utilizza i movimenti per controllare il volume del riproduttore
+ Utilizza i movimenti per controllare il volume del lettore multimediale
Movimenti Controllo Luminosità
- Utilizza i movimenti per controllare la luminosità del riproduttore
+ Utilizza i movimenti per controllare la luminosità del lettore multimediale
Aggiornamenti
File eliminato
Notifiche di aggiornamenti dell\'applicazione
Notifiche per una nuova versione di NewPipe
Archiviazione esterna non disponibile
Impossibile scaricare sulla scheda SD esterna. Ripristinare la cartella dei download\?
- Utilizzando le schede predefinite, c\'è stato un errore durante la lettura delle schede salvate
+ Impossibile leggere le schede salvate, verranno usate quelle predefinite
Ripristina predefiniti
- Davvero ripristinare i predefiniti\?
+ Ripristinare valori predefiniti\?
Contatore degli iscritti non disponibile
Schede mostrate nella pagina principale
Selezione
@@ -449,7 +449,7 @@
Impossibile creare il file
Impossibile creare la cartella di destinazione
Permesso negato dal sistema
- Connessione sicura fallita
+ Impossibile stabilire una connessione sicura
Impossibile trovare il server
Impossibile connettersi al server
Il server non invia dati
@@ -466,11 +466,11 @@
Conferenze
Connesione finita
Mostra Commenti
- Disattiva per non visualizzare i commenti
+ Disattiva per nascondere i commenti
Riproduzione Automatica
- - Commenti
-
+ - %s commento
+ - %s commenti
Nessun commento
Impossibile caricare i commenti
@@ -498,7 +498,7 @@
Limita Coda Download
Ogni volta verrà chiesta la destinazione dei file.
\nScegli SAF se vuoi scaricare su una scheda SD esterna
- Lo Storage Access Framework consente di scaricare su una scheda SD esterna.
+ \"Storage Access Framework\" consente di salvare file su una memoria esterna.
\nNota: alcuni dispositivi non sono compatibili
Elimina posizioni di riproduzione
Elimina tutte le posizioni di riproduzione
@@ -520,7 +520,7 @@
Durata Avanzamento e Riavvolgimento Rapidi
Istanze PeerTube
Seleziona le istanze PeerTube preferite
- Trova le istanze più adatte a te su %s
+ Trova altre istanze su %s
Aggiungi Istanza
Inserisci URL istanza
Impossibile convalidare l\'istanza
@@ -533,8 +533,8 @@
recupero
Impossibile recuperare questo download
Scegli un\'Istanza
- Abilita Copertine sulla Schermata di Blocco
- Durante la riproduzione in sottofondo, verrà mostrata la copertina del video sulla schermata di blocco
+ Copertina sulla Schermata di Blocco
+ La copertina del video verrà mostrata nella schermata di blocco, durante la riproduzione in sottofondo.
Svuota Cronologia Download
Elimina File Scaricati
%1$s download eliminati
@@ -543,4 +543,9 @@
Predefinita di Sistema
Premere \"Fatto\" quando risolto
Fatto
+ Video
+
+ - %s secondi
+
+
\ No newline at end of file
From b46d1990868ad06e50b4b628e6d021ef2e800b3f Mon Sep 17 00:00:00 2001
From: Erik Peeremand
Date: Thu, 27 Feb 2020 15:21:38 +0000
Subject: [PATCH 0424/1194] Translated using Weblate (Dutch)
Currently translated at 82.1% (438 of 533 strings)
---
app/src/main/res/values-nl/strings.xml | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 1cd1391a0..9bde969cb 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -2,7 +2,7 @@
%1$s keer bekeken
Gepubliceerd op %1$s
- Geen speler met streamondersteuning gevonden. Wil je VLC installeren?
+ Geen speler met streamondersteuning gevonden. VLC installeren\?
Installeren
Annuleren
Openen in browser
@@ -16,7 +16,7 @@
draaiing
Downloadlocatie voor video\'s
Locatie om gedownloade video\'s in op te slaan
- Voer downloadlocatie in voor video\'s
+ Kies de downloadlocatie voor video\'s
Standaardresolutie
Afspelen met Kodi
Kore-app niet gevonden. Installeren?
@@ -38,7 +38,7 @@
Vind-ik-niet-leuks
Downloadfolder voor audio
Gedownloade muziek wordt hier opgeslagen
- Voer downloadlocatie voor audiobestanden in
+ Kies de downloadlocatie voor audiobestanden
Thema
Donker
Licht
@@ -75,7 +75,7 @@
Video
Geluid
Opnieuw proberen
- Druk op zoeken om te beginnen
+ Druk op \"zoeken\" om te beginnen
Automatisch afspelen
Speelt video’s af als NewPipe vanuit een andere app wordt geopend
LIVE
@@ -120,13 +120,13 @@
B
Deze machtiging is vereist om te
\nopenen in pop-upmodus
- NewPipe-pop-upmodus
+ Pop-up-modus
Speelt af in pop-upmodus
Standaard videoformaat
Uitgeschakeld
Standaardresolutie van pop-up
Hogere resoluties tonen
- 2K-/4K-video\'s worden slechts op sommige apparaten ondersteund
+ Slechts enkele toestellen kunnen 2K-/4K-video\'s afspelen
Achtergrond
Pop-up
Filter
@@ -136,7 +136,7 @@
Onthoud laatste grootte en positie van pop-up
Pop-up
Bezig met wijzigen van grootte
- Verwijdert geluid bij SOMMIGE resoluties
+ Verwijdert geluid bij sommige resoluties
Zoeksuggesties
Toon suggesties bij zoeken
Gebaarbesturing
From fbfaa8d25f79533b117d5c73c654873c6e82d430 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=89frit?=
Date: Sat, 29 Feb 2020 16:04:41 +0000
Subject: [PATCH 0425/1194] Translated using Weblate (French)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-fr/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 60a1bb098..3cd46b9f4 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -325,7 +325,7 @@
Quelque chose va bientôt apparaître ici ;D
Télécharger le fichier de flux
Vidéo suivante en file d’attente
- Lecture automatique après la fin de la file d\'attente
+ Continuer la liste de lecture finie (non répétitive) en ajoutant un flux lié
Débogage
Remplir
Générés automatiquement
@@ -547,6 +547,6 @@
Vidéos
- %s secondes
-
+
\ No newline at end of file
From 83e7af4503b0a51fc35f78276a1236d03fdad2dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isak=20Holmstr=C3=B6m?=
Date: Thu, 27 Feb 2020 01:43:30 +0000
Subject: [PATCH 0426/1194] Translated using Weblate (Swedish)
Currently translated at 81.4% (434 of 533 strings)
---
app/src/main/res/values-sv/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 0848d9b7a..68aeca87c 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -1,6 +1,6 @@
- Tryck på sök för att komma igång
+ Tryck på \"Sök\" för att komma igång
Publicerad den %1$s
Ingen strömspelare hittades. Vill du installera VLC?
Installera
From 68f55e6639adabd66efbfa8029d4595faf6ed280 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Mon, 24 Feb 2020 02:23:05 +0000
Subject: [PATCH 0427/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 0b3638ec0..104266f64 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -354,7 +354,7 @@
播放速度控制
節奏
音高
- 解除連結(可能導致失真)
+ 解除掛鉤(可能導致失真)
預設
偏好的「開啟」動作
開啟內容時的預設動作 — %s
@@ -463,7 +463,7 @@
自動播放
- %s 條留言
-
+
沒有留言
無法載入留言
@@ -543,6 +543,6 @@
影片
- %s秒
-
+
\ No newline at end of file
From 28ecf98fa6fe271bc107b39edd872788bd8ad996 Mon Sep 17 00:00:00 2001
From: Xiang Xu
Date: Mon, 24 Feb 2020 09:57:59 +0000
Subject: [PATCH 0428/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index 25cda17c3..e547220c4 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -392,7 +392,7 @@
播放速度
节奏
音调
- 解除关联(可能导致失真)
+ 解除挂钩(可能导致失真)
首选“打开”操作
打开内容时默认操作: = %s
无可下载的串流内容
From 7f62f5666162d612dd3a9057535fac3853742f4d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Wed, 26 Feb 2020 02:06:51 +0000
Subject: [PATCH 0429/1194] =?UTF-8?q?Translated=20using=20Weblate=20(Norwe?=
=?UTF-8?q?gian=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 91.9% (490 of 533 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 9757df2ad..dd2a9fbd2 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -497,7 +497,7 @@
Du vil bli spurt om hvor hver nedlasting skal plasseres.
\nSkru på SAF hvis du vil laste ned til eksternt SD-kort
Bruk SAF
- Lagringstilgangsrammeverk (SAF) tillater nedlastinger til eksternt SD-kort.
+ \"Lagringstilgangsrammeverk\" (SAF) tillater nedlasting til eksternt SD-kort.
\nMerk: Noen enheter er ikke kompatible
Slett avspillingsposisjoner
Sletter alle avspillingsposisjoner
@@ -542,4 +542,9 @@
Systemforvalg
Trykk \"Ferdig\" når den er løst
Ferdig
+ Videoer
+
+ - %s sekunder
+
+
\ No newline at end of file
From 95d8b120652b359364676c76e2679300fd5768e2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=89frit?=
Date: Sat, 29 Feb 2020 16:06:56 +0000
Subject: [PATCH 0430/1194] Translated using Weblate (French)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-fr/strings.xml | 60 +++++++++++++-------------
1 file changed, 30 insertions(+), 30 deletions(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 3cd46b9f4..e004a8ea1 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -7,11 +7,11 @@
Télécharger
Dossier de téléchargement vidéo
Choisissez le dossier de téléchargement des fichiers vidéo
- Les fichiers vidéo téléchargés sont stockés ici
+ Les vidéos téléchargées sont stockées ici
Installer
Installer l\'application Kore manquante \?
- Aucun lecteur de flux multimédia trouvé. Installer VLC \?
- Ouvrir dans le navigateur
+ Aucun lecteur multimédia trouvé. Voulez-vous installer VLC \?
+ Ouvrir dans un navigateur
Lire avec Kodi
rotation
Rechercher
@@ -64,7 +64,7 @@
Impossible d’analyser complètement le site web
Les flux en direct ne sont pas encore pris en charge
Désolé, une erreur est survenue.
- Lire la vidéo lorsque NewPipe est appelée par une autre application
+ Lire la vidéo lorsque NewPipe est lancée depuis une autre application
Signaler cette erreur par courriel
Information :
Ce qui s’est passé :
@@ -122,21 +122,21 @@
M
Cette autorisation est nécessaire pour
\nutiliser le mode flottant
- Lire l\'audio
- Flottant
+ Lecture audio
+ Lecture flottante
Définition de la fenêtre flottante par défaut
Afficher des définitions plus élevées
Seuls certains appareils prennent en charge les vidéos 2K et 4K
Format vidéo par défaut
Mémoriser les taille et position de la fenêtre flottante
Mémorise les dernières taille et position de la fenêtre flottante
- Fenêtré
+ Flottant
Filtre
Rafraîchir
Effacer
Redimensionner
- Mrd
- Retire l’audio à certaines définitions
+ G
+ Le son peut être supprimé à CERTAINES définitions
Utiliser des gestes pour contrôler la luminosité et le volume du lecteur
Suggestions de recherche
Affiche les suggestions lors d’une recherche
@@ -173,7 +173,7 @@
Les caractères invalides sont remplacés par cette valeur
Caractère de remplacement
Historique de recherche
- Stocke l’historique de recheche sur l’appareil
+ Stocke l’historique de recherche sur l’appareil
Voir l’historique
Historique
Recherché
@@ -220,7 +220,7 @@
Tendances
Top 50
Nouveau & populaire
- En file d’attente sur le lecteur en arrière-plan
+ Ajouté à la liste de lecture audio
En file d’attente sur le lecteur flottant
Tout lire
Impossible de lire ce flux
@@ -232,7 +232,7 @@
Détails
Paramètres audios
Afficher l’astuce « Maintenir pour ajouter »
- Afficher l’astuce lors de l’appui du bouton « Arrière-plan » ou « Mode flottant » sur la page de détails d’une vidéo
+ Afficher l’astuce lors de l’appui du bouton « Lecture audio » ou « Lecture flottante » sur la page de détails d’une vidéo
[Inconnu]
Récupération depuis l’erreur du lecteur
Kiosque
@@ -257,7 +257,7 @@
Service
Ouvrir le menu
Fermer le menu
- Aucun lecteur de flux multimédias trouvé (vous pouvez installer VLC pour le lire).
+ Aucun lecteur multimédia trouvé (vous pouvez installer VLC pour continuer).
Toujours
Une seule fois
Les lecteurs externes ne prennent pas en charge ces types de liens
@@ -278,7 +278,7 @@
Fichier ZIP non valide
Avertissement : Impossible d\'importer tous les fichiers.
Cela effacera vos paramètres actuels.
- Afficher les infos
+ Voir les détails
Listes de lecture enregistrées
Ajouter à
Glisser pour réordonner
@@ -310,7 +310,7 @@
Utiliser la recherche rapide approximative
Permet au lecteur d’accéder plus rapidement à une position au détriment de la précision
Charger les miniatures
- Désactivez pour empêcher le chargement des miniatures afin de réduire l’utilisation de la bande passante et de la mémoire. La modification de cette option, vide le cache en mémoire vive et sur le disque.
+ Désactivez pour empêcher le chargement des miniatures afin de réduire l’utilisation de la bande passante et de la mémoire. La modification de cette option vide le cache en mémoire vive et sur le disque.
Images en cache effacées
Effacer les métadonnées en cache
Efface toutes les données de pages Web en cache
@@ -401,7 +401,7 @@
Action lors du basculement à une autre application depuis le lecteur vidéo — %s
Aucune
Minimiser pour lire en arrière-plan
- Basculer vers le mode fenêtré
+ Réduit vers le lecteur flottant
Se désabonner
Nouvel onglet
Sélectionner un onglet
@@ -428,7 +428,7 @@
Grille
Auto
Changer de vue
- Une mise à jour de NewPipe est disponible !
+ Une mise à jour de NewPipe est disponible !
Appuyer pour télécharger
Terminé
En attente
@@ -438,18 +438,18 @@
Conférences
Téléchargement terminé
%s téléchargements terminés
- Ajouté à la file d’attente
+ ajouté à la liste de lecture
Générer un nom unique
Écraser
Un fichier avec ce nom existe déjà
Un fichier téléchargé avec ce nom existe déjà
- Il y a déjà un téléchargement en cours avec ce nom
+ Un téléchargement en cours porte déjà ce nom
Afficher l’erreur
Code
Le dossier de destination ne peut pas être créé
Le fichier ne peut pas être créé
- Autorisation refusée par le système
- Impossible d\'établir une connexion sécurisée
+ Permission refusée par le système
+ Impossible d’établir une connexion sécurisée
Impossible de trouver le serveur
Impossible de se connecter au serveur
Le serveur n’envoie pas de données
@@ -457,15 +457,15 @@
Effacer les téléchargements terminés
Interrompre sur les connexions limitées
Utile lors du passage aux données mobiles, bien que certains téléchargements ne peuvent pas être suspendus
- Mode d’affichage en liste
+ Mode de vue en liste
post-traitement
- File d’attente
+ Liste de lecture
Action refusée par le système
Le post-traitement a échoué
- Nombre maximum de tentatives
- Nombre maximum de tentatives avant d’annuler le téléchargement
- Erreur durant la lecture des onglets enregistrés. Onglets par défaut utilisés.
- Le serveur n’accepte pas les téléchargements multi-fils, veuillez réessayer avec @string/msg_threads = 1
+ Nombre d’essais maximum
+ Nombre d’essais maximum avant annulation du téléchargement
+ Impossible de lire les onglets enregistrés ; utilisation des onglets par défaut
+ Le serveur n’accepte pas les téléchargements multifils, veuillez réessayer avec @string/msg_threads = 1
Afficher les commentaires
Désactiver pour masquer les commentaires
Lecture automatique
@@ -495,7 +495,7 @@
\nVeuillez choisir ILAF si vous voulez télécharger sur une carte mémoire externe
Reprend la lecture à la dernière position
Positions dans les listes
- Afficher les indicateurs de position de lecture dans les listes
+ Affiche les indicateurs de position de lecture dans les listes
Positions de reprise de lecture supprimées.
Utiliser ILAF
L\' « Infrastructure Logicielle d\'Accès au Stockage » permet de télécharger sur une carte mémoire externe.
@@ -503,7 +503,7 @@
Supprimer les positions de reprise de lecture
Supprime toutes les positions de reprise de lecture
Voulez-vous supprimer toutes les positions de reprise de lecture \?
- Changez les dossiers de téléchargement pour que cela prenne effet
+ Modifiez les dossiers de téléchargement pour que cela prenne effet
Activer/Désactiver le service, actuellement sélectionné :
Kiosque par défaut
Personne ne regarde
@@ -517,7 +517,7 @@
- %s auditeurs
La langue changera lors du redémarrage de l\'application.
- Avance/rembobinage rapide sur une durée
+ Durée de l’avance et retour rapide
Instances PeerTube
Choisissez vos instances PeerTube préférées
Trouvez les instances que vous aimez sur %s
From ee75909c80d399d03d548127ecc2454740ae5b51 Mon Sep 17 00:00:00 2001
From: karol
Date: Sun, 1 Mar 2020 13:02:20 +0100
Subject: [PATCH 0431/1194] set mute button in main player from other player
---
.../java/org/schabi/newpipe/player/MainVideoPlayer.java | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index d7b518771..cad165ab6 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -695,7 +695,7 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override
public void onMuteUnmuteButtonClicled() {
super.onMuteUnmuteButtonClicled();
- updatePlaybackButtons();
+ setMuteButton(muteButton, playerImpl.isMuted());
}
@@ -785,6 +785,7 @@ public final class MainVideoPlayer extends AppCompatActivity
animateView(secondaryControls, SLIDE_AND_ALPHA, !isMoreControlsVisible,
DEFAULT_CONTROLS_DURATION);
showControls(DEFAULT_CONTROLS_DURATION);
+ setMuteButton(muteButton, playerImpl.isMuted());
}
private void onShareClicked() {
@@ -984,7 +985,6 @@ public final class MainVideoPlayer extends AppCompatActivity
setRepeatModeButton(repeatButton, getRepeatMode());
setShuffleButton(shuffleButton, playQueue.isShuffled());
- setMuteButton(muteButton, playerImpl.isMuted());
}
private void buildQueue() {
@@ -1090,6 +1090,10 @@ public final class MainVideoPlayer extends AppCompatActivity
return repeatButton;
}
+ public ImageButton getMuteButton() {
+ return muteButton;
+ }
+
public ImageButton getPlayPauseButton() {
return playPauseButton;
}
From 2b9c7fee20ef58e9c1948d7a346539f3d9707738 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sun, 1 Mar 2020 15:37:47 +0100
Subject: [PATCH 0432/1194] Update extractor version
---
app/build.gradle | 2 +-
app/src/main/java/org/schabi/newpipe/DownloaderImpl.java | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 962704e51..edebc7867 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -63,7 +63,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:fc465c8bf'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:6446abc6d'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
diff --git a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
index 0ae072c66..8c551d2a7 100644
--- a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
+++ b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
@@ -171,7 +171,8 @@ public class DownloaderImpl extends Downloader {
responseBodyToReturn = body.string();
}
- return new Response(response.code(), response.message(), response.headers().toMultimap(), responseBodyToReturn);
+ final String latestUrl = response.request().url().toString();
+ return new Response(response.code(), response.message(), response.headers().toMultimap(), responseBodyToReturn, latestUrl);
}
/**
From 4674431829f1ec6967a8ee48a24d0c75dbbcb6e8 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sun, 1 Mar 2020 15:43:12 +0100
Subject: [PATCH 0433/1194] Release 0.18.6 (860)
---
app/build.gradle | 4 ++--
fastlane/metadata/android/en-US/changelogs/860.txt | 7 +++++++
2 files changed, 9 insertions(+), 2 deletions(-)
create mode 100644 fastlane/metadata/android/en-US/changelogs/860.txt
diff --git a/app/build.gradle b/app/build.gradle
index edebc7867..2a7e039b3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 19
targetSdkVersion 28
- versionCode 850
- versionName "0.18.5"
+ versionCode 860
+ versionName "0.18.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
diff --git a/fastlane/metadata/android/en-US/changelogs/860.txt b/fastlane/metadata/android/en-US/changelogs/860.txt
new file mode 100644
index 000000000..f01b86d47
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/860.txt
@@ -0,0 +1,7 @@
+Improved
+• Save and restore whether pitch and tempo are unhooked or not
+• Support display cutout in player
+• Round view and subscriber count
+• Optimized YouTube to use less data
+
+More than 15 YouTube-related bugs were fixed in this release.
\ No newline at end of file
From a6fcb70d1275e8a1fbc3f712b9152233b1fe8bb1 Mon Sep 17 00:00:00 2001
From: karol
Date: Sun, 1 Mar 2020 16:42:46 +0100
Subject: [PATCH 0434/1194] fix typo
---
.../java/org/schabi/newpipe/player/BackgroundPlayer.java | 4 ++--
app/src/main/java/org/schabi/newpipe/player/BasePlayer.java | 2 +-
.../java/org/schabi/newpipe/player/MainVideoPlayer.java | 6 +++---
.../java/org/schabi/newpipe/player/PopupVideoPlayer.java | 4 ++--
.../org/schabi/newpipe/player/ServicePlayerActivity.java | 3 +--
5 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index b020f234b..dbf27ea7c 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -397,8 +397,8 @@ public final class BackgroundPlayer extends Service {
}
@Override
- public void onMuteUnmuteButtonClicled() {
- super.onMuteUnmuteButtonClicled();
+ public void onMuteUnmuteButtonClicked() {
+ super.onMuteUnmuteButtonClicked();
updatePlayback();
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index ce2f94e0d..adffefa6e 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -542,7 +542,7 @@ public abstract class BasePlayer implements
// Mute / Unmute
//////////////////////////////////////////////////////////////////////////*/
- public void onMuteUnmuteButtonClicled() {
+ public void onMuteUnmuteButtonClicked() {
if (DEBUG) Log.d(TAG, "onMuteUnmuteButtonClicled() called");
simpleExoPlayer.setVolume(isMuted() ? 1 : 0);
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index cad165ab6..63d95e74f 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -693,8 +693,8 @@ public final class MainVideoPlayer extends AppCompatActivity
}
@Override
- public void onMuteUnmuteButtonClicled() {
- super.onMuteUnmuteButtonClicled();
+ public void onMuteUnmuteButtonClicked() {
+ super.onMuteUnmuteButtonClicked();
setMuteButton(muteButton, playerImpl.isMuted());
}
@@ -736,7 +736,7 @@ public final class MainVideoPlayer extends AppCompatActivity
onPlayBackgroundButtonClicked();
} else if (v.getId() == muteButton.getId()) {
- onMuteUnmuteButtonClicled();
+ onMuteUnmuteButtonClicked();
} else if (v.getId() == closeButton.getId()) {
onPlaybackShutdown();
diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
index ff35aecb9..b7638eda7 100644
--- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java
@@ -609,8 +609,8 @@ public final class PopupVideoPlayer extends Service {
}
@Override
- public void onMuteUnmuteButtonClicled() {
- super.onMuteUnmuteButtonClicled();
+ public void onMuteUnmuteButtonClicked() {
+ super.onMuteUnmuteButtonClicked();
updatePlayback();
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index bb5593f09..c0a8d2bfd 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -23,7 +23,6 @@ import android.widget.PopupMenu;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
-import android.widget.Toast;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
@@ -453,7 +452,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
player.onRepeatClicked();
} else if (view.getId() == muteButton.getId()) {
- player.onMuteUnmuteButtonClicled();
+ player.onMuteUnmuteButtonClicked();
} else if (view.getId() == backwardButton.getId()) {
player.onPlayPrevious();
From 5257c5a0a89bf683cabf4a7cbfcb9a01f020c00b Mon Sep 17 00:00:00 2001
From: B0pol
Date: Sat, 29 Feb 2020 17:28:58 +0000
Subject: [PATCH 0435/1194] Translated using Weblate (Esperanto)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-eo/strings.xml | 62 +++++++++++++-------------
1 file changed, 31 insertions(+), 31 deletions(-)
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 4a6fcdfab..6f7779a81 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -38,8 +38,8 @@
Ŝatoj
Malŝatoj
Uzi la programon Tor
- Neniu elsendlflua ludilo trovita. Ĉu vi volas instali la aplikaĵon VLC\?
- La aplikaĵo Kore ne estas trovita. Ĉu instali ĝin?
+ Neniu elsendlflua ludilo trovita. Ĉu instali la aplikaĵon VLC\?
+ Ĉu instali la mankan aplikaĵon Kore\?
Montri la sekvan filmeton kaj similajn filmetojn
Ĉiuj bildetoj ne ŝargeblas
La subskribo de la ligilo de la filmeto ne malĉifreblas
@@ -58,19 +58,19 @@
Elektu lokon por konservi elŝutitajn filmetojn
Elektu lokon por konservi elŝutitajn muzikojn
Enhavo
- Signali eraron per retpoŝto
- SIGNALI
+ Signali tion eraron retpoŝte
+ Signali
Informoj:
Vian komenton (angle):
Detaloj:
Signali eraron
Filmeto
Reprovi
- Premi serĉon por komenci
+ Premi \"Serĉi\" por komenci
Neniu elsendlflua ludilo trovita (instalu VLC por ludi ĝin).
Malfermi en ŝprucfenestran modon
- Forigas aŭdon ĉe KELKAJ rezolucioj
- NewPipe ŝprucfenestran modon
+ Forigas aŭdon ĉe kelkaj rezolucioj
+ Ŝprucfenestran modon
Aboni
Abonita
Kanalo malabonita
@@ -89,7 +89,7 @@
Ludas filmeton kiam NewPipe vokas el alia programo
Defaŭlta rezolucio de la ŝprucfenestra ludilo
Montri pli altajn rezoluciojn
- Nur kelkaj aparatoj subtenas ludi 2K / 4K filmetojn
+ Nur kelkaj aparatoj povas ludi 2K / 4K filmetojn
Defaŭlta fomato de filmeto
Nigra
Memoru ŝprucfenestran grandecon kaj pozicion
@@ -100,10 +100,10 @@
Ne povis konstrui la dosierujon de elŝuto
Nunaj filmetoj ne estas ankoraŭ subtenataj
Enhavo limigita al aĝo
- Montri limigitan al aĝo filmeto. Permesanta tian materialon eblas el Parametroj.
+ Montri limigitan al aĝo filmeto. Postaj ŝanĝoj eblas ĉe la agordoj.
Ne povis tute analizi la retejon
Ne povis akiri ajnan torenton
- NUNA
+ Nuna
Elŝutoj
Elŝutoj
Erarosignalo
@@ -130,7 +130,7 @@
Ŝprucfenestro
Regrandiganta
Kontrolo de gesto de ludilo
- Uzu gestojn por kontroli la brilon kaj volumenon de la ludilo
+ Uzi gestojn por kontroli la brilon kaj volumenon
Serĉi sugestojn
Montri sugestojn kiam serĉanto
Plej bona rezolucio
@@ -138,7 +138,7 @@
Elŝuti
Leteroj kaj ciferoj
Plej specialaj karakteroj
- Rekomenci en fokusa gajno
+ Ludrekomenci
Daŭrigi la ludon post la interrompaĵoj (ekzemple telefonadoj)
Serĉa historio
Konservi la historio de serĉo lokale
@@ -156,7 +156,7 @@
Supro 50
Nova & varma
Montri la indiko « Tenu por aldoni »
- Montri indikon kiam la fona aŭ ŝprucfenestra butono estas premita en la retpaĝo de dalatadoj de la filmeto
+ Montri indikon premante la fona aŭ la ŝprucfenestra butono en filmeta \"Detaloj:\"
Viciĝita en la fona ludilo
Viciĝita en ŝprucfenestra ludilo
Ludi ĉiujn
@@ -205,7 +205,7 @@
Ne povis forviŝi ludliston.
Malcimigi
Auto-vico sekva fluo
- Aŭto-aldoni rilatan enhavon kiam ludanta la lasta enhavo en malrepetita atendovico
+ Daŭrigi finanta (malripetanta) atendovico aldonante rilata enhavo
Dosiero
Tia dosierujo ne ekzistas
Tia dosiero/enhavo ne ekzistas
@@ -246,9 +246,9 @@
Nova ongleto
Elektu ongleton
Kontrolo de volumena gesto
- Uzu gestojn por kontroli la volumon de la ludilo
+ Uzi gestojn por kontroli la volumon
Kontrolo de gesto de brilo
- Uzu gestojn por kontroli la brilon de la ludilo
+ Uzi gestojn por kontroli la brilon
Ĝisdatigoj
Dosiero forviŝita
Sciigo por ĝisdatigi apon
@@ -264,11 +264,11 @@
Eventoj
Konferencoj
Montri komentojn
- Malebligu por malvidigi komentojn
+ Malŝati por malvidigi komentojn
Aŭtoludo
- - Komentoj
-
+ - %s komento
+ - %s komentoj
Ne povis ŝarĝi komentojn
Fermi
@@ -291,8 +291,8 @@
Oni petos vin kie konservi ĉion elŝutaĵon.
\nElektu AFM se vi volas elŝuti al ekstera SD-karto
Uzu AFM
- La Atinga Framo al la Memoro ebligas elŝuti al ekstera SD-karto.
-\nKomento: kelkaj aparatoj ne kongruas
+ La \"Atinga Framo al la Memoro\" ebligas elŝuti al ekstera SD-karto.
+\nKomento: kelkaj aparatoj malkongruas
Forviŝi ludajn poziciojn
Forviŝi la totalon de ludaj pozicioj
Ĉu vi volas forviŝi ĉiujn ludajn poziciojn \?
@@ -302,7 +302,7 @@
Kio okazis:
Kio:\\nPeto:\\nEnhavlingvo:\\nServo:\\nGMT Horo:\\nPako:\\nVersio:\\nOperaciumo versio:
Aŭdio
- Permeso por atingi la konservon rifuzita
+ Permesi la konservadon unue
Uzantosignalo
Komenci
Paŭzigi
@@ -377,7 +377,7 @@
Komenci ludi ĉi tie
Komenci ludi fone
Donaci
- NewPipe estas programadita par volontuoj, elspezante tempo por alporti vin la plej bona sperto. Redoni por helpi programistojn plibonigi NewPipe dum ĝuante tason da kafo.
+ NewPipe estas programadita par volontuoj, elspezante lia tempo por alporti vin la plej bona uzanta sperto. Redoni por helpi programistojn plibonigi NewPipe dum ili ĝuas tason da kafo.
Redoni
Retejo
Viziti la retejon de NewPipe por pli da informoj kaj novaĵoj.
@@ -409,7 +409,7 @@
Zomi
Io aperos ĉi tie baldaŭ ;D
Aŭtomate generita
- Ebligi LeakCanary
+ LeakCanary
La monitorado de la memorlikadoj povas frostigi la apon dum la hejta dumpingo
Signali ekster-vivciklajn erarojn
Perforti signalante neenretigaj Rx esceptoj eksere la fragmento aŭ aktiveco vivciklo post dispono
@@ -455,10 +455,10 @@
Plirapidigi dum silentoj
Paŝo
Restarigi
- Uzante defaŭltajn ongletojn, eraro ludante savajn ongletojn
+ Ne povis legi konservitajn ongletoj, tial uzante la defaŭltajn
Restaŭri la defaŭltojn
- Ĉu vi volas restaŭri la defaŭltojn \?
- Kalkulo de abonantoj malhavebla
+ Ĉu vi volas restaŭri la defaŭltojn valorojn\?
+ Abonantoj kalkulo malhaveblas
Kioj ongletoj estas montritaj en la ĉefpaĝo
Elektaĵo
Ĝisdatigoj
@@ -486,7 +486,7 @@
La celloko-dosierujo ne povas esti kreita
La dosiero ne povas esti kreita
Permeso rifuzita kaŭze de la sistemo
- Sekura konekto malsukcesis
+ Ne povis establi sekuran konekton
Ne povis trovi la servilon
Ne povas konektiĝi al la servilo
La servilo ne sendas datumojn
@@ -519,7 +519,7 @@
Rapida antaŭen / posten daŭron
Instancoj de PeerTube
Elekti viajn preferitajn instancojn de PeerTube
- Trovu la instancojn kiu vi povus ŝati ĉe %s
+ Trovu la instancojn ke vi ŝatas ĉe %s
Aldoni instanco
Eniri la ligilon de la instanco
Ne povis validigi instanco
@@ -532,8 +532,8 @@
Reakiranta
Ne povas reakiri tion elŝuton
Elektu instancon
- Enablu bildeta filmeton ĉe ŝlosita ekrano
- Uzante la fona ludilo, bildeta filmeto vidiĝos ĉe ŝlosita ekrano
+ Bildeta filmeton ĉe ŝlosita ekrano
+ Bildeta filmeto estas montrita ĉe ŝlosita ekrano uzante la fona ludilo
Forviŝi la historion de elŝutoj
Forviŝi elŝutitajn dosierojn
%1$s elŝutoj forviŝitaj
From deafe93e6c0c6b313adcbc9bc7f0554e2851283f Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sat, 29 Feb 2020 21:30:34 +0000
Subject: [PATCH 0436/1194] Translated using Weblate (Russian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-ru/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 7c7965f80..1a94ebb1f 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -552,7 +552,7 @@
Видео
- %s секунд
-
-
+
+
\ No newline at end of file
From ca2e9d4afa43c365619e58b9818a2ee7d6e2b22e Mon Sep 17 00:00:00 2001
From: B0pol
Date: Sat, 29 Feb 2020 17:51:26 +0000
Subject: [PATCH 0437/1194] Translated using Weblate (French)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-fr/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index e004a8ea1..fccfbc387 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -428,7 +428,7 @@
Grille
Auto
Changer de vue
- Une mise à jour de NewPipe est disponible !
+ Une mise à jour de NewPipe est disponible !
Appuyer pour télécharger
Terminé
En attente
From add08ead149afc1c31328eb767ba3d40b782de6a Mon Sep 17 00:00:00 2001
From: wb9688
Date: Mon, 2 Mar 2020 17:58:48 +0100
Subject: [PATCH 0438/1194] Accept music.youtube.com in manifest
---
app/src/main/AndroidManifest.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7ca04eed0..d0e204137 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -146,6 +146,7 @@
+
From e7063b2c69fbfed7b28ccd8e8d0732b2b1ccef8f Mon Sep 17 00:00:00 2001
From: KOK ASiiK
Date: Mon, 2 Mar 2020 02:00:34 +0000
Subject: [PATCH 0439/1194] Translated using Weblate (Indonesian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-in/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 40a4e65a9..450076b35 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -395,7 +395,7 @@
Nihil
Minimalkan ke pemutar latar belakang
Minimalkan ke pemutar popup
- Henti subscribe
+ Unsubscribe
Tab Baru
Pilih Tab
Tema
From 667a52427e8b8838bb24b7cdb2369eabd58b0c8a Mon Sep 17 00:00:00 2001
From: Dani Pragustia
Date: Mon, 2 Mar 2020 17:55:47 +0000
Subject: [PATCH 0440/1194] Translated using Weblate (Indonesian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-in/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 450076b35..4712a91d1 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -228,7 +228,7 @@
Geser untuk ubah urutan
Tidak ada subscriber
- - %s subscriber
+ - %s subscribers
Belum ditonton
@@ -304,7 +304,7 @@
Diplaylist
Thumbnail playlist diubah.
Tidak bisa menghapus playlist.
- Tidak ada Takarir
+ Tanpa Teks
Pas
Isi
Perbesar
@@ -339,7 +339,7 @@
Apakah anda juga ingin mengimpor pengaturan\?
Tindakan \'buka\' yang diinginkan
Tindakan baku ketika membuka konten — %s
- Takarir
+ Teks
Ubah skala teks takarir pemutar dan gaya latar belakang. Perlu memulai ulang apl.
Pemantauan kebocoran memori dapat menyebabkan apl menjadi tidak responsif saat heap dumping
Laporkan galat out-of-lifecycle
From 92f4010e8ee16f0ebebad91e9d217fa20e2e0418 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Mon, 2 Mar 2020 20:50:35 +0100
Subject: [PATCH 0441/1194] Add more checks to prevent build failures in gradle
branch suffix
- Add function `getGitWorkingBranch` that returns the current working branch, and "" if it could not be determined (either because git is not installed or because the directory is not a git repo).
- Make sure normalizedWorkingBranch is not empty (leading to an invalid app id terminating with `.`)
- Make normalizedWorkingBranch lowercase
- Add comments
---
app/build.gradle | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 2329a7a0e..61929173e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,24 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
+
+static String getGitWorkingBranch() {
+ try {
+ def gitProcess = "git rev-parse --abbrev-ref HEAD".execute()
+ gitProcess.waitFor()
+ if (gitProcess.exitValue() == 0) {
+ return gitProcess.text.trim()
+ } else {
+ // not a git repository
+ return ""
+ }
+ } catch (IOException ignored) {
+ // git was not found
+ return ""
+ }
+}
+
+
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
@@ -31,12 +49,14 @@ android {
debuggable true
// suffix the app id and the app name with git branch name
- def workingBranch = "git rev-parse --abbrev-ref HEAD".execute().text.trim()
- if (workingBranch.isEmpty() || workingBranch == "master" || workingBranch == "dev") {
+ def workingBranch = getGitWorkingBranch()
+ def normalizedWorkingBranch = workingBranch.replaceAll("[^A-Za-z]+", "").toLowerCase()
+ if (normalizedWorkingBranch.isEmpty() || workingBranch == "master" || workingBranch == "dev") {
+ // default values when branch name could not be determined or is master or dev
applicationIdSuffix ".debug"
resValue "string", "app_name", "NewPipe Debug"
} else {
- applicationIdSuffix ".debug." + workingBranch.replaceAll("[^A-Za-z]+", "")
+ applicationIdSuffix ".debug." + normalizedWorkingBranch
resValue "string", "app_name", "NewPipe " + workingBranch
}
}
From 92ee51b8db64b4ba6d4dfb22a925af2b4a37dd02 Mon Sep 17 00:00:00 2001
From: karol
Date: Mon, 2 Mar 2020 21:12:02 +0100
Subject: [PATCH 0442/1194] resolved issues
---
.../java/org/schabi/newpipe/player/BackgroundPlayer.java | 1 +
.../main/java/org/schabi/newpipe/player/BasePlayer.java | 2 +-
.../java/org/schabi/newpipe/player/MainVideoPlayer.java | 7 +------
.../org/schabi/newpipe/player/ServicePlayerActivity.java | 7 +------
4 files changed, 4 insertions(+), 13 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
index dbf27ea7c..4eaa2a73b 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java
@@ -341,6 +341,7 @@ public final class BackgroundPlayer extends Service {
@Override
public void handleIntent(final Intent intent) {
super.handleIntent(intent);
+
resetNotification();
if (bigNotRemoteView != null)
bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index adffefa6e..a71671e7b 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -332,7 +332,7 @@ public abstract class BasePlayer implements
if (playQueueAdapter != null) playQueueAdapter.dispose();
playQueueAdapter = new PlayQueueAdapter(context, playQueue);
- if (isMuted) simpleExoPlayer.setVolume(0);
+ simpleExoPlayer.setVolume(isMuted ? 0 : 1);
}
public void destroyPlayer() {
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index 63d95e74f..d74a739cf 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -401,12 +401,7 @@ public final class MainVideoPlayer extends AppCompatActivity
}
protected void setMuteButton(final ImageButton muteButton, final boolean isMuted) {
- if (isMuted) {
- muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.white));
- } else {
- muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.gray));
-
- }
+ muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), isMuted ? R.color.white : R.color.gray));
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index c0a8d2bfd..10b202e4c 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -687,11 +687,6 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
}
private void onMaybeMuteChanged(){
- if (player.isMuted()) {
- muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.white));
- }
- else {
- muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.gray));
- }
+ muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), player.isMuted() ? R.color.white : R.color.gray));
}
}
From 07d1faf544037de0178b368ece3ee2dd964557de Mon Sep 17 00:00:00 2001
From: bopol
Date: Wed, 12 Feb 2020 02:05:34 +0100
Subject: [PATCH 0443/1194] Links support for mediaccc and shortened invidious
---
app/build.gradle | 2 +-
app/src/main/AndroidManifest.xml | 21 ++++++++++++++++++++-
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 2a7e039b3..4bc36a4c7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -63,7 +63,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:6446abc6d'
+ implementation 'com.github.B0pol:NewPipeExtractor:6180226'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7ca04eed0..bd3724770 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -247,6 +247,7 @@
+
@@ -277,8 +278,26 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 124340175a81f8aa244fac41f51bce4d40760b00 Mon Sep 17 00:00:00 2001
From: bopol
Date: Wed, 12 Feb 2020 20:41:59 +0100
Subject: [PATCH 0444/1194] remove redundant code
---
app/src/main/AndroidManifest.xml | 8 --------
1 file changed, 8 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bd3724770..8dfeb03cc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -244,15 +244,7 @@
-
-
-
-
-
-
-
-
From c79f09c119f156cddc574850f79b97a1d9eb9fb0 Mon Sep 17 00:00:00 2001
From: karol
Date: Mon, 2 Mar 2020 22:52:58 +0100
Subject: [PATCH 0445/1194] mute button in actionbar, no color change
---
.../org/schabi/newpipe/player/ServicePlayerActivity.java | 3 +++
app/src/main/res/menu/menu_play_queue.xml | 7 +++++++
app/src/main/res/values/strings.xml | 1 +
3 files changed, 11 insertions(+)
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 10b202e4c..9099c9927 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -164,6 +164,9 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
case R.id.action_append_playlist:
appendAllToPlaylist();
return true;
+ case R.id.action_mute:
+ player.onMuteUnmuteButtonClicked();
+ return true;
case R.id.action_system_audio:
startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS));
return true;
diff --git a/app/src/main/res/menu/menu_play_queue.xml b/app/src/main/res/menu/menu_play_queue.xml
index be6cea46c..fc3fd07a8 100644
--- a/app/src/main/res/menu/menu_play_queue.xml
+++ b/app/src/main/res/menu/menu_play_queue.xml
@@ -10,6 +10,13 @@
android:visible="true"
app:showAsAction="ifRoom"/>
+
+
- Rename
Name
Add To Playlist
+ Mute
Set as Playlist Thumbnail
Bookmark Playlist
Remove Bookmark
From 840bb29c542c797123eede58c15b3482a7e47bb6 Mon Sep 17 00:00:00 2001
From: karol
Date: Tue, 3 Mar 2020 00:01:19 +0100
Subject: [PATCH 0446/1194] icon color change in action bar
---
.../newpipe/player/ServicePlayerActivity.java | 25 ++++++++++++++++---
.../res/drawable/ic_volume_off_gray_24dp.xml | 5 ++++
2 files changed, 26 insertions(+), 4 deletions(-)
create mode 100644 app/src/main/res/drawable/ic_volume_off_gray_24dp.xml
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 9099c9927..75107a7e4 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -3,15 +3,19 @@ package org.schabi.newpipe.player;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
+
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.ItemTouchHelper;
+
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@@ -94,6 +98,8 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
private TextView playbackSpeedButton;
private TextView playbackPitchButton;
+ private Menu menu;
+
////////////////////////////////////////////////////////////////////////////
// Abstracts
////////////////////////////////////////////////////////////////////////////
@@ -147,8 +153,10 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
+ this.menu = menu;
getMenuInflater().inflate(R.menu.menu_play_queue, menu);
getMenuInflater().inflate(getPlayerOptionMenuResource(), menu);
+ onMaybeMuteChanged();
return true;
}
@@ -174,8 +182,8 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
this.player.setRecovery();
getApplicationContext().sendBroadcast(getPlayerShutdownIntent());
getApplicationContext().startActivity(
- getSwitchIntent(MainVideoPlayer.class)
- .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
+ getSwitchIntent(MainVideoPlayer.class)
+ .putExtra(BasePlayer.START_PAUSED, !this.player.isPlaying())
);
return true;
}
@@ -218,7 +226,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
}
private void unbind() {
- if(serviceBound) {
+ if (serviceBound) {
unbindService(serviceConnection);
serviceBound = false;
stopPlayerListener();
@@ -689,7 +697,16 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
}
}
- private void onMaybeMuteChanged(){
+ private void onMaybeMuteChanged() {
muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), player.isMuted() ? R.color.white : R.color.gray));
+
+ if (menu != null) {
+ MenuItem item = menu.findItem(R.id.action_mute);
+ TypedArray a = getTheme().obtainStyledAttributes(R.style.Theme_AppCompat, new int[]{R.attr.volume_off});
+ int attributeResourceId = a.getResourceId(0, 0);
+ Drawable drawableMuted = getResources().getDrawable(attributeResourceId);
+ Drawable drawableUnmuted = getResources().getDrawable(R.drawable.ic_volume_off_gray_24dp);
+ item.setIcon(player.isMuted() ? drawableMuted : drawableUnmuted);
+ }
}
}
diff --git a/app/src/main/res/drawable/ic_volume_off_gray_24dp.xml b/app/src/main/res/drawable/ic_volume_off_gray_24dp.xml
new file mode 100644
index 000000000..156ee53bb
--- /dev/null
+++ b/app/src/main/res/drawable/ic_volume_off_gray_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
From afebd9b724da0c090319d8fba53baa2f791df9f9 Mon Sep 17 00:00:00 2001
From: poolitzer <25934244+poolitzer@users.noreply.github.com>
Date: Mon, 2 Mar 2020 16:38:23 -0800
Subject: [PATCH 0447/1194] improvements
---
.github/ISSUE_TEMPLATE/bug_report.md | 3 +--
.github/ISSUE_TEMPLATE/feature_request.md | 2 +-
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 188dd8b42..1b28d3d79 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -14,8 +14,7 @@ Use this template to notify us if you found a bug.
To make it easier for us to help you please enter detailed information below.
-Please note, we only support the latest version of NewPipe and
-master branch. Please make sure to upgrade & recreate the issue on the latest version prior to opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start, make sure its version is the same as in you app (To check you version, press on the three line menu on the left, click on "About", and you will see your current version).
+Please note, we only support the latest version of NewPipe and master branch. Please make sure to upgrade & recreate the issue on the latest version prior to opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start, make sure its version is the same as in your app (to check your version, open the left drawer and click on "About").
P.S.: Our [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) might be a nice document to read before you fill out the report :)
-->
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 8453f99ba..a6262ad7b 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -18,7 +18,7 @@ Example: *I think it would be nice if you would add feature Y so it will make it
#### Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
-Example: *I considered Z, but that didn't work because...*
+Example: *I considered Z, but that didn't turn out to be a good idea because...*
#### Additional context
Add any other context or screenshots about the feature request here.
From 08dffad16055b3cd889a98548dbe6efbec87a348 Mon Sep 17 00:00:00 2001
From: poolitzer <25934244+poolitzer@users.noreply.github.com>
Date: Mon, 2 Mar 2020 20:52:50 -0800
Subject: [PATCH 0448/1194] opus4improvements
---
.github/ISSUE_TEMPLATE/bug_report.md | 16 ++++++++--------
.github/ISSUE_TEMPLATE/feature_request.md | 8 ++++----
.github/PULL_REQUEST_TEMPLATE.md | 11 +++++++----
3 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 1b28d3d79..19e8a9fbe 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -8,23 +8,23 @@ assignees: ''
---
### Version
-
+
-
-### Steps to reproduce
-
+### Steps to reproduce the bug
+
Steps to reproduce the behavior:
1. Go to '...'
2. Press on '....'
@@ -36,10 +36,10 @@ Tell us what you expected to happen.
### Actual behaviour
Tell us what happens instead.
-### Screenshots/-recording
-If applicable, add screenshots or a screen recording to help explain your problem. Github should support uploading them directly in the issue field. If your file is too big, feel free to paste a link from a image/video hoster here instead.
+### Screenshots/Screen records
+If applicable, add screenshots or a screen recording to help explain your problem. Github should support uploading them directly in the issue field. If your file is too big, feel free to paste a link from an image/video hoster here instead.
### Logs
If your bug includes a crash, please head over to the [incredible bugreport to markdown converter](https://teamnewpipe.github.io/CrashReportToMarkdown/). Copy the result. Paste it here:
-
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index a6262ad7b..b461675bd 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -8,13 +8,13 @@ assignees: ''
---
-#### Is your feature request related to a problem? Please describe.
+#### Is your feature request related to a problem? Please describe it
A clear and concise description of what the problem is.
Example: *I want to do X, but there is no way to do it.*
#### Describe the solution you'd like
A clear and concise description of what you want to happen.
-Example: *I think it would be nice if you would add feature Y so it will make it easier.*
+Example: *I think it would be nice if you add feature Y which makes X possible.*
#### Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
@@ -24,7 +24,7 @@ Example: *I considered Z, but that didn't turn out to be a good idea because...*
Add any other context or screenshots about the feature request here.
Example: *Here's a photo of my cat!*
-#### Why do you/everyone wants this feature
+#### How will you/everyone benefit from this feature?
Convince us! How does it change your NewPipe experience and/or your life?
-The better this paragraph is, the more likely a developer will think about developing it.
+The better this paragraph is, the more likely a developer will think about working on it.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 978adc100..40dd5d616 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,14 +1,17 @@
-
+
#### What is it?
- [ ] Bug fix
- [ ] Feature
#### Long description of the changes in your PR
-*Now you can make videos*
+
+- record videos
+- create clones
+- take over the world
#### Fixes the following issue(s)
-
+
-
#### Relies on the following changes
@@ -16,7 +19,7 @@
-
#### Testing apk
-
+
debug.zip
#### Agreement
From d265382ddfcf4b45482b0548715544f9664c239b Mon Sep 17 00:00:00 2001
From: Poolitzer <25934244+Poolitzer@users.noreply.github.com>
Date: Mon, 2 Mar 2020 20:56:03 -0800
Subject: [PATCH 0449/1194] missed this
because GitHub thought its funny to hide it for a reason.
Co-Authored-By: opusforlife2 <53176348+opusforlife2@users.noreply.github.com>
---
.github/ISSUE_TEMPLATE/feature_request.md | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index b461675bd..946bfb4c6 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -16,7 +16,7 @@ Example: *I want to do X, but there is no way to do it.*
A clear and concise description of what you want to happen.
Example: *I think it would be nice if you add feature Y which makes X possible.*
-#### Describe alternatives you've considered
+#### (Optional) Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Example: *I considered Z, but that didn't turn out to be a good idea because...*
@@ -27,4 +27,3 @@ Example: *Here's a photo of my cat!*
#### How will you/everyone benefit from this feature?
Convince us! How does it change your NewPipe experience and/or your life?
The better this paragraph is, the more likely a developer will think about working on it.
-
From 3f118a72392247579867eb12df8632aaad4bf427 Mon Sep 17 00:00:00 2001
From: Poolitzer <25934244+Poolitzer@users.noreply.github.com>
Date: Mon, 2 Mar 2020 21:08:34 -0800
Subject: [PATCH 0450/1194] appending dots
Co-Authored-By: opusforlife2 <53176348+opusforlife2@users.noreply.github.com>
---
.github/PULL_REQUEST_TEMPLATE.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 40dd5d616..9a1193767 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -15,11 +15,11 @@
-
#### Relies on the following changes
-
+
-
#### Testing apk
-
+
debug.zip
#### Agreement
From 57504acd0017b2825ecbb68a4ff7bec9c7f64fdc Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Sat, 29 Feb 2020 11:23:21 +0100
Subject: [PATCH 0451/1194] If inexact seekt is used, hide 5,15,25 seconds seek
duration options when opening settings
---
.../settings/VideoAudioSettingsFragment.java | 24 +++++++++++++------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index d5f46fb22..5476158c4 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -11,6 +11,8 @@ import androidx.preference.ListPreference;
import com.google.android.material.snackbar.Snackbar;
+import java.util.LinkedList;
+import java.util.List;
import org.schabi.newpipe.R;
import org.schabi.newpipe.util.PermissionHelper;
@@ -26,19 +28,28 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
Resources res = getResources();
String[] durationsValues = res.getStringArray(R.array.seek_duration_value);
String[] durationsDescriptions = res.getStringArray(R.array.seek_duration_description);
+ List durationsValResult = new LinkedList<>();
+ List durationsDesResult = new LinkedList<>();
int currentDurationValue;
+ final boolean inexactSeek = getPreferenceManager().getSharedPreferences()
+ .getBoolean(res.getString(R.string.use_inexact_seek_key), false);
+
for (int i = 0; i < durationsDescriptions.length; i++) {
currentDurationValue = Integer.parseInt(durationsValues[i]) / 1000;
- try {
- durationsDescriptions[i] = String.format(
+ if (inexactSeek && currentDurationValue % 10 != 5) {
+ try {
+ durationsValResult.add(durationsValues[i]);
+ durationsDesResult.add(String.format(
res.getQuantityString(R.plurals.dynamic_seek_duration_description, currentDurationValue),
- currentDurationValue);
- } catch (Resources.NotFoundException ignored) {
- //if this happens, the translation is missing, and the english string will be displayed instead
+ currentDurationValue));
+ } catch (Resources.NotFoundException ignored) {
+ //if this happens, the translation is missing, and the english string will be displayed instead
+ }
}
}
ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key));
- durations.setEntries(durationsDescriptions);
+ durations.setEntryValues(durationsValResult.toArray(new CharSequence[0]));
+ durations.setEntries(durationsDesResult.toArray(new CharSequence[0]));
listener = (sharedPreferences, s) -> {
@@ -62,7 +73,6 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
};
}
-
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.video_audio_settings);
From 446380433804c1c38213c37562d8d34151caca3b Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Sat, 29 Feb 2020 11:53:04 +0100
Subject: [PATCH 0452/1194] Update seek options on inexact seek option change.
Reset to 10 seconds when previous value is not valid anymore
---
.../settings/VideoAudioSettingsFragment.java | 66 +++++++++++--------
1 file changed, 40 insertions(+), 26 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 5476158c4..20e68078a 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -24,32 +24,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- //initializing R.array.seek_duration_description to display the translation of seconds
- Resources res = getResources();
- String[] durationsValues = res.getStringArray(R.array.seek_duration_value);
- String[] durationsDescriptions = res.getStringArray(R.array.seek_duration_description);
- List durationsValResult = new LinkedList<>();
- List durationsDesResult = new LinkedList<>();
- int currentDurationValue;
- final boolean inexactSeek = getPreferenceManager().getSharedPreferences()
- .getBoolean(res.getString(R.string.use_inexact_seek_key), false);
-
- for (int i = 0; i < durationsDescriptions.length; i++) {
- currentDurationValue = Integer.parseInt(durationsValues[i]) / 1000;
- if (inexactSeek && currentDurationValue % 10 != 5) {
- try {
- durationsValResult.add(durationsValues[i]);
- durationsDesResult.add(String.format(
- res.getQuantityString(R.plurals.dynamic_seek_duration_description, currentDurationValue),
- currentDurationValue));
- } catch (Resources.NotFoundException ignored) {
- //if this happens, the translation is missing, and the english string will be displayed instead
- }
- }
- }
- ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key));
- durations.setEntryValues(durationsValResult.toArray(new CharSequence[0]));
- durations.setEntries(durationsDesResult.toArray(new CharSequence[0]));
+ updateSeekOptions();
listener = (sharedPreferences, s) -> {
@@ -69,10 +44,49 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
.show();
}
+ } else if (s.equals(getString(R.string.use_inexact_seek_key))) {
+ updateSeekOptions();
}
};
}
+ /**
+ * Update fast-forward/-rewind seek duration options according to language and inexact seek setting.
+ * Exoplayer can't seek 5 seconds in audio when using inexact seek.
+ */
+ private void updateSeekOptions() {
+ //initializing R.array.seek_duration_description to display the translation of seconds
+ final Resources res = getResources();
+ final String[] durationsValues = res.getStringArray(R.array.seek_duration_value);
+ final List displayedDurationValues = new LinkedList<>();
+ final List displayedDescriptionValues = new LinkedList<>();
+ int currentDurationValue;
+ final boolean inexactSeek = getPreferenceManager().getSharedPreferences()
+ .getBoolean(res.getString(R.string.use_inexact_seek_key), false);
+
+ for (String durationsValue : durationsValues) {
+ currentDurationValue = Integer.parseInt(durationsValue) / 1000;
+ if (inexactSeek && currentDurationValue % 10 == 5) {
+ continue;
+ }
+ try {
+ displayedDurationValues.add(durationsValue);
+ displayedDescriptionValues.add(String.format(
+ res.getQuantityString(R.plurals.dynamic_seek_duration_description,
+ currentDurationValue),
+ currentDurationValue));
+ } catch (Resources.NotFoundException ignored) {
+ //if this happens, the translation is missing, and the english string will be displayed instead
+ }
+ }
+ final ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key));
+ durations.setEntryValues(displayedDurationValues.toArray(new CharSequence[0]));
+ durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0]));
+ if (Integer.parseInt(durations.getValue()) / 1000 % 10 == 5) {
+ durations.setValueIndex(0);
+ }
+ }
+
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.video_audio_settings);
From 288a61895cde2c271ae80c7b927a0200ca1480c9 Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Sat, 29 Feb 2020 11:58:41 +0100
Subject: [PATCH 0453/1194] Update inexact seek summary
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 42b4b77c5..f7fe9c2b2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -71,7 +71,7 @@
Remember popup size and position
Remember last size and position of popup
Use fast inexact seek
- Inexact seek allows the player to seek to positions faster with reduced precision
+ Inexact seek allows the player to seek to positions faster with reduced precision. Seeking for 5, 15 or 25 seconds doesn\'t work with this.
Fast-forward/-rewind seek duration
Load thumbnails
Show comments
From 6a42714326dbd42dabdf4b072cf25396fa4da529 Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Mon, 2 Mar 2020 19:52:42 +0100
Subject: [PATCH 0454/1194] Round seek duration up instead of setting it to 10
seconds
---
.../schabi/newpipe/settings/VideoAudioSettingsFragment.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 20e68078a..05c9ca9fc 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -82,8 +82,9 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
final ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key));
durations.setEntryValues(displayedDurationValues.toArray(new CharSequence[0]));
durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0]));
- if (Integer.parseInt(durations.getValue()) / 1000 % 10 == 5) {
- durations.setValueIndex(0);
+ final int selectedDuration = Integer.parseInt(durations.getValue());
+ if (selectedDuration / 1000 % 10 == 5) {
+ durations.setValue(Integer.toString(selectedDuration + 5 * 1000));
}
}
From 7d3b21582cc94b3954d88d57ec3c186712396a78 Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Mon, 2 Mar 2020 19:54:08 +0100
Subject: [PATCH 0455/1194] Use DateUtils constant for 1000
---
.../newpipe/settings/VideoAudioSettingsFragment.java | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 05c9ca9fc..134285a41 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -6,6 +6,7 @@ import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
+import android.text.format.DateUtils;
import androidx.annotation.Nullable;
import androidx.preference.ListPreference;
@@ -65,7 +66,8 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
.getBoolean(res.getString(R.string.use_inexact_seek_key), false);
for (String durationsValue : durationsValues) {
- currentDurationValue = Integer.parseInt(durationsValue) / 1000;
+ currentDurationValue =
+ Integer.parseInt(durationsValue) / (int) DateUtils.SECOND_IN_MILLIS;
if (inexactSeek && currentDurationValue % 10 == 5) {
continue;
}
@@ -83,8 +85,9 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
durations.setEntryValues(displayedDurationValues.toArray(new CharSequence[0]));
durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0]));
final int selectedDuration = Integer.parseInt(durations.getValue());
- if (selectedDuration / 1000 % 10 == 5) {
- durations.setValue(Integer.toString(selectedDuration + 5 * 1000));
+ if (selectedDuration / (int) DateUtils.SECOND_IN_MILLIS % 10 == 5) {
+ durations.setValue(
+ Integer.toString(selectedDuration + 5 * (int) DateUtils.SECOND_IN_MILLIS));
}
}
From e3fff4356a5c7cc4138f9a4dde954cf2bdea03ef Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Mon, 2 Mar 2020 20:15:54 +0100
Subject: [PATCH 0456/1194] Show a toast when seek duration was rounded up
---
.../settings/VideoAudioSettingsFragment.java | 13 +++++++++++--
app/src/main/res/values/strings.xml | 1 +
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 134285a41..f68fc5e23 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -7,6 +7,7 @@ import android.os.Bundle;
import android.provider.Settings;
import android.text.format.DateUtils;
+import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.preference.ListPreference;
@@ -86,8 +87,16 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0]));
final int selectedDuration = Integer.parseInt(durations.getValue());
if (selectedDuration / (int) DateUtils.SECOND_IN_MILLIS % 10 == 5) {
- durations.setValue(
- Integer.toString(selectedDuration + 5 * (int) DateUtils.SECOND_IN_MILLIS));
+ final int newDuration = selectedDuration / (int) DateUtils.SECOND_IN_MILLIS + 5;
+ durations.setValue(Integer.toString(newDuration * (int) DateUtils.SECOND_IN_MILLIS));
+
+ Toast toast = Toast.makeText(getContext(),
+ getString(R.string.new_seek_duration_toast) + " " + String.format(
+ res.getQuantityString(R.plurals.dynamic_seek_duration_description,
+ newDuration),
+ newDuration),
+ Toast.LENGTH_LONG);
+ toast.show();
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f7fe9c2b2..6152221c0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -593,6 +593,7 @@
App language
System default
%s seconds
+ Due to ExoPlayer contraints the seek duration was set to
- %s seconds
From efb67b0fd4e98fe5e99b6d323a4d8686bc6c06f7 Mon Sep 17 00:00:00 2001
From: Xiang Rong Lin <41164160+XiangRongLin@users.noreply.github.com>
Date: Tue, 3 Mar 2020 19:50:50 +0100
Subject: [PATCH 0457/1194] Change toast string resource to be useable with
different languages
---
.../newpipe/settings/VideoAudioSettingsFragment.java | 11 +++++------
app/src/main/res/values/strings.xml | 2 +-
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index f68fc5e23..27ae4d3aa 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -82,6 +82,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
//if this happens, the translation is missing, and the english string will be displayed instead
}
}
+
final ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key));
durations.setEntryValues(displayedDurationValues.toArray(new CharSequence[0]));
durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0]));
@@ -90,12 +91,10 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
final int newDuration = selectedDuration / (int) DateUtils.SECOND_IN_MILLIS + 5;
durations.setValue(Integer.toString(newDuration * (int) DateUtils.SECOND_IN_MILLIS));
- Toast toast = Toast.makeText(getContext(),
- getString(R.string.new_seek_duration_toast) + " " + String.format(
- res.getQuantityString(R.plurals.dynamic_seek_duration_description,
- newDuration),
- newDuration),
- Toast.LENGTH_LONG);
+ Toast toast = Toast
+ .makeText(getContext(),
+ getString(R.string.new_seek_duration_toast, newDuration),
+ Toast.LENGTH_LONG);
toast.show();
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6152221c0..e46bef4e8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -593,7 +593,7 @@
App language
System default
%s seconds
- Due to ExoPlayer contraints the seek duration was set to
+ Due to ExoPlayer contraints the seek duration was set to %d seconds
- %s seconds
From f7ef7a18ac764f53c7b2a748af43a34a252abe90 Mon Sep 17 00:00:00 2001
From: XiangRongLin <41164160+XiangRongLin@users.noreply.github.com>
Date: Tue, 3 Mar 2020 21:41:15 +0100
Subject: [PATCH 0458/1194] Update
app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
Co-Authored-By: Stypox
---
.../schabi/newpipe/settings/VideoAudioSettingsFragment.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
index 27ae4d3aa..d4897ecaa 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java
@@ -72,8 +72,9 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
if (inexactSeek && currentDurationValue % 10 == 5) {
continue;
}
+
+ displayedDurationValues.add(durationsValue);
try {
- displayedDurationValues.add(durationsValue);
displayedDescriptionValues.add(String.format(
res.getQuantityString(R.plurals.dynamic_seek_duration_description,
currentDurationValue),
From 4bb6a146e8212af975d9c1acd1bbd3cf51fa6af6 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Tue, 3 Mar 2020 21:51:46 +0100
Subject: [PATCH 0459/1194] Update app/src/main/res/values/strings.xml
---
app/src/main/res/values/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e46bef4e8..2e5b1d75c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -593,7 +593,7 @@
App language
System default
%s seconds
- Due to ExoPlayer contraints the seek duration was set to %d seconds
+ Due to ExoPlayer constraints the seek duration was set to %d seconds
- %s seconds
From 9b65b000dbd2bdcff3ad381e10088462b3e6d84a Mon Sep 17 00:00:00 2001
From: Dani Pragustia
Date: Mon, 2 Mar 2020 17:59:04 +0000
Subject: [PATCH 0460/1194] Translated using Weblate (Indonesian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-in/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 4712a91d1..2efe3e012 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -395,7 +395,7 @@
Nihil
Minimalkan ke pemutar latar belakang
Minimalkan ke pemutar popup
- Unsubscribe
+ Berhenti berlangganan
Tab Baru
Pilih Tab
Tema
From e421d47b231e0226a616607c4e946c1607ebd87c Mon Sep 17 00:00:00 2001
From: IQBAL AL FATAH
Date: Wed, 4 Mar 2020 08:55:04 +0000
Subject: [PATCH 0461/1194] Translated using Weblate (Indonesian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-in/strings.xml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 2efe3e012..050134c6a 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -5,13 +5,13 @@
Dipublikasikan tanggal %1$s
Pasang
Batal
- Buka di peramban
+ Buka di browser
Bagikan
Unduh
- Cari
- Pengaturan
+ Telusuri
+ Setelan
Bagikan dengan
- Pilih peramban
+ Pilih browser
Gunakan pemutar video eksternal
Gunakan pemutar audio eksternal
Folder unduhan video
@@ -46,7 +46,7 @@
Tampilkan video yang dibatasi usia. Bisa diubah nanti dari pengaturan.
Galat jaringan
Tidak bisa memuat semua thumbnail
- Maksud anda: %1$s\?
+ Apakah yang kamu maksud: %1$s\?
rotasi
Langsung
Unduhan
@@ -116,7 +116,7 @@
T
Ya
Nanti
- Buka di mode popup
+ Buka dalam mode popup
Izin ini dibutuhkan untuk
\nmembuka di mode popup
Mode popup
From e1fb8831deacfcf3287ecfc039aed71c6f997889 Mon Sep 17 00:00:00 2001
From: AioiLight
Date: Tue, 3 Mar 2020 08:26:56 +0000
Subject: [PATCH 0462/1194] Translated using Weblate (Japanese)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-ja/strings.xml | 32 +++++++++++++++-----------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index adaaa3828..f49c5b604 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -1,7 +1,7 @@
%1$s に公開
- 動画プレイヤーが見つかりません。VLC を入手しますか?
+ 動画プレイヤーが見つかりません。VLC をインストールしますか?
入手
キャンセル
ブラウザで開く
@@ -18,7 +18,7 @@
動画ファイルをダウンロードするフォルダーを選択して下さい
デフォルトの解像度
Kodi で再生
- Koreが見つかりません。Kore を入手しますか?
+ Kore をインストールしますか?
\"Kodi で再生\" オプションを表示
Kodi メディアセンター経由で動画を再生するための設定を表示します
音声
@@ -75,13 +75,13 @@
動画
音声
再試行
- ストレージへのアクセスが拒否されました
+ 初めにストレージへのアクセスを許可する
自動再生
NewPipe が他のアプリから呼び出された時、動画を再生します。
不具合を報告
利用者レポートを送る
生放送
- 開始するには検索をタップ
+ 開始するには \"検索\" をタップ
開始
一時停止
再生
@@ -120,13 +120,13 @@
ポップアップモードで開く
ポップアップモードで開くには
\n権限の許可が必要です
- NewPipe ポップアップモード
+ ポップアップモード
ポップアップモードで再生中
無効
デフォルトの動画形式
デフォルトのポップアップ解像度
高い解像度で表示
- 2K/4K ビデオの再生は一部のデバイスのみサポートしています
+ 2K/4K ビデオの再生は一部のデバイスのみ再生できます
バックグラウンド
ポップアップ
フィルター
@@ -170,10 +170,10 @@
検索した履歴を記憶します
視聴履歴
再生した履歴を記憶します
- オーディオフォーカス復帰で再開する
+ 再生の再開
電話などによる中断の後、再生を再開します
プレイヤー
- 動画の詳細ページで、背景またはポップアップボタンが押されたときにヒントを表示する
+ 動画の詳細ページで、\"バックグラウンド\" または \"ポップアップ\" ボタンが押されたときにヒントを表示する
動作
履歴とキャッシュ
プレイリスト
@@ -325,12 +325,12 @@
おおまかなシーク
おおまかなシークを使用すると、正確さが下がりますが高速なシークが可能になります
すべてのサムネイルの読み込みと保存を無効化します、このオプションを切り替えるとメモリおよびディスク上の画像キャッシュがクリアされます。
- 繰り返しではないキューの再生後、関連動画を自動的にキューに追加します
+ キューに関連動画を追加し続けて、再生を続ける(リピートしない場合)
すべての再生履歴を削除しますか?
すべての検索履歴を削除しますか?
このファイル/コンテンツはありません
- - %s を登録しています
+ - %s が登録しています
視聴なし
@@ -375,7 +375,7 @@
何もしない
バックグラウンドに変更
ポップアップに変更
- LeakCanary を有効にする
+ LeakCanary
メモリリークの監視は、ヒープダンピング時にアプリが無反応になる原因となります
ライフサイクルエラーの報告
破棄されたフラグメントまたはアクティビティの、ライフサイクル範囲外での配信不能なRx例外を強制的に報告します
@@ -453,7 +453,7 @@
ファイルを削除しました
アプリの更新通知
外部 SD カードにダウンロードできません。ダウンロードフォルダーの場所をリセットしますか\?
- デフォルトのタブを使用します。保存されたタブの読み込みエラーが発生しました
+ 保存されたタブを読み込めないため、デフォルトのタブを使用します
メインページに表示されるタブ
新しいバージョンが利用可能なときにアプリの更新を確認する通知を表示します
従量制課金ネットワークの割り込み
@@ -462,7 +462,7 @@
無効にするとコメントの表示を停止します
自動再生
- - コメント
+ - %s コメント
コメントはありません
コメントを読み込めませんでした
@@ -525,7 +525,7 @@
修復中
ダウンロードが修復できません
インスタンスを選択
- ロック画面の動画サムネイルを有効にする
+ ロック画面の動画サムネイル
バックグラウンドプレイヤーを使用中、ロック画面に動画のサムネイルが表示されるようになります
ダウンロード履歴を消去
ダウンロードしたファイルを消去
@@ -536,4 +536,8 @@
システムの既定
解けたら \"完了\" を押してください
完了
+ 動画
+
+ - %s 秒
+
\ No newline at end of file
From 6962882e75e839a58c12ef874d0e574f942fb205 Mon Sep 17 00:00:00 2001
From: Sylke Vicious
Date: Tue, 3 Mar 2020 14:55:44 +0000
Subject: [PATCH 0463/1194] Translated using Weblate (Italian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-it/strings.xml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 2607ab210..d36d03a61 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -218,13 +218,13 @@
Feed Iscrizioni
Canale Personalizzato
Seleziona Canale
- Nessuna Iscrizione
+ Ancora nessuna iscrizione ad un canale
Seleziona Contenuto
Locandina
Tendenze
Top 50
New & hot
- Mostra Suggerimento \"Tieni Premuto per Accocodare\"
+ Mostra suggerimento \"Tieni premuto per accodare\"
Nei \"Dettagli\" dei video, mostra suggerimento alla pressione dei pulsanti per la riproduzione Popup o in Sottofondo
Accoda in Sottofondo
Accodato in Popup
@@ -352,7 +352,7 @@
Tieni presente che questa operazione può consumare una grande quantità di traffico dati.
\n
\nVuoi continuare?
- Carica Copertine
+ Carica miniature
Disabilita per prevenire il caricamento delle anteprime, risparmiando dati e memoria. La modifica di questa opzione cancellerà la cache delle immagini in memoria e sul disco.
Cache immagini svuotata
Pulisci Cache Metadati
@@ -533,8 +533,8 @@
recupero
Impossibile recuperare questo download
Scegli un\'Istanza
- Copertina sulla Schermata di Blocco
- La copertina del video verrà mostrata nella schermata di blocco, durante la riproduzione in sottofondo.
+ Miniatura del video sulla schermata di blocco
+ La miniatura del video verrà mostrata nella schermata di blocco, durante la riproduzione in sottofondo
Svuota Cronologia Download
Elimina File Scaricati
%1$s download eliminati
@@ -546,6 +546,6 @@
Video
- %s secondi
-
+
\ No newline at end of file
From ebdf48899fd0a8a3555bd3415fdb3fd11bc9d121 Mon Sep 17 00:00:00 2001
From: "Mohd. A" <1mohd@pm.me>
Date: Tue, 3 Mar 2020 09:52:17 +0000
Subject: [PATCH 0464/1194] Translated using Weblate (Arabic)
Currently translated at 98.3% (524 of 533 strings)
---
app/src/main/res/values-ar/strings.xml | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 469c13177..0407e1836 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -94,7 +94,7 @@
تذكر حجم النافذة و وضعها
تذكر آخر مكان و حجم للنافذة المنبثقة
اعدادات إيماءة المشغل
- استخدم إيماءات التحكم في سطوع وصوت المشغل
+ استخدم الإيماءات للتحكم في سطوع وصوت المشغل
اقتراحات البحث
عرض الاقتراحات عند البحث
سجل البحث
@@ -111,7 +111,7 @@
تم وضعه على قائمة الانتظار في مشغل الخلفية
تم وضعه على قائمة الانتظار في مشغل النافذة المنبثقة
محتوى مقيد بحسب العمر
- "إظهار الفيديو المقيد بحسب العمر. يمكن السماح باستخدام هذه المواد من \"الإعدادات\"."
+ إظهار الفيديو المقيد بحسب العمر. التغييرات المستقبلية ممكنة من \"الإعدادات\".
بث مباشر
تقرير خطأ
قائمة التشغيل
@@ -205,7 +205,7 @@
إذا كانت لديك أفكار؛ أو ترجمة، أو تغييرات تخص التصميم، أو تنظيف و تحسين الشفرة البرمجية ، أو تعديلات عميقة عليها، فتذكر أنّ مساعدتك دائما موضع ترحيب. وكلما أتممنا شيئا كلما كان ذلك أفضل !
عرض على GitHub
تبرع
- يتم تطوير NewPipe من قبل متطوعين يقضون وقت فراغهم لتقديم أفضل تجربة لك. حان الوقت لرد المساعدة مع المطورين وجعل NewPipe أكثر و أفضل بينما تستمتع بفنجان من القهوة.
+ يتم تطوير NewPipe من قبل متطوعين يقضون وقت فراغهم لتقديم أفضل تجربة لك. حان الوقت لرد المساعدة مع المطورين وجعل NewPipe أكثر و أفضل بينما يستمتعون بفنجان من القهوة.
تبرع
موقع الويب
قم بزيارة موقع NewPipe لمزيد من المعلومات والمستجدات.
@@ -417,7 +417,7 @@
إلغاء الاشتراك
علامة تبويب جديدة
اختر علامة التبويب
- استخدم إيماءات التحكم في سطوع وصوت المشغل
+ استخدم إيماءات التحكم في صوت المشغل
التحكم بالإيماءات السطوع
استخدام الإيماءات للتحكم في سطوع المشغل
التحديثات
@@ -463,7 +463,7 @@
لا يمكن إنشاء الملف
لا يمكن إنشاء المجلد الوجهة
تم رفضها من قبل النظام
- فشل اتصال الأمن
+ فشل الاتصال الآمن
تعذر العثور على الخادم
لا يمكن الاتصال بالخادم
الخادم لايقوم بإرسال البيانات
@@ -556,8 +556,8 @@
لا يمكن استرداد هذا التنزيل
اختيار مثيل
ابحث عن مثيلات الخوادم التي تناسبك على %s
- تمكين قفل شاشة الصور المصغرة الفيديو
- عند استخدام مشغل الخلفية ، سيتم عرض صورة مصغرة للفيديو على شاشة القفل
+ تمكين صورة العرض للفيديو في شاشة القفل
+ عند استخدام مشغل الخلفية، سيتم عرض صورة العرض للفيديو على شاشة القفل
تنظيف تاريخ التحميل
حذف الملفات التي تم تنزيلها
التنزيلات %1$s المحذوفة
@@ -569,10 +569,10 @@
الفيديوهات
- %s ثوانٍ
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
From 371280ff766b0335b70acb12005ab27279c3f5eb Mon Sep 17 00:00:00 2001
From: IQBAL AL FATAH
Date: Wed, 4 Mar 2020 09:09:51 +0000
Subject: [PATCH 0465/1194] Translated using Weblate (Indonesian)
Currently translated at 100.0% (533 of 533 strings)
---
app/src/main/res/values-in/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 050134c6a..557451220 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -395,7 +395,7 @@
Nihil
Minimalkan ke pemutar latar belakang
Minimalkan ke pemutar popup
- Berhenti berlangganan
+ Berhenti Subscribe
Tab Baru
Pilih Tab
Tema
From 5c559e4cc6172d1a99f0d944cd759cf5da486593 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isak=20Holmstr=C3=B6m?=
Date: Wed, 4 Mar 2020 05:31:01 +0000
Subject: [PATCH 0466/1194] Translated using Weblate (Swedish)
Currently translated at 86.8% (463 of 533 strings)
---
app/src/main/res/values-sv/strings.xml | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 68aeca87c..5290517ab 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -18,7 +18,7 @@
Använd extern videospelare
Tar bort ljud vid VISSA upplösningar
Använd extern ljudspelare
- NewPipe popup-läge
+ Popup-läge
Bakgrund
Extrafönster
Mapp för nerladdning av video
@@ -112,7 +112,7 @@
Spara sökfrågor lokalt
Visningshistorik
Håll koll på videor som du tittat på
- Återuppta när fokus återfås
+ Återuppta spelning
Fortsätta spela efter avbrott (t.ex. telefonsamtal)
Visa \"Håll för att lägga till\" tips
Visa tips när bakgrunds- eller popup-knappen trycks på sidan för videodetaljer
@@ -458,7 +458,7 @@
- Kommentarer
- Inaktivera för att sluta visa kommentarer
+ Inaktivera för att inte visa kommentarer
Återuppta uppspelning
Återställ den senaste uppspelningspositionen
Positioner i listor
@@ -468,4 +468,15 @@
Snabb spola -framåt/-bakåt
Aktivera video på låsskärmen
När bakgrundsspelaren används så visas videon på låsskärmen
+ Visa positionindikationer i listor
+ Radera uppspelningspositioner
+ PeerTube-instanser
+ Välj din favorit PeerTube-instans
+ Hitta instanser du gillar på %s
+ Lägg till instans
+ Fyll i instans-URL
+ Kunde inte validera instans
+ Enbart HTTPS-URL stöds
+ Instansen finns redan
+ Videos
\ No newline at end of file
From 7da11206dabeed73509efa19f6258a6f5c679a1d Mon Sep 17 00:00:00 2001
From: opusforlife2 <53176348+opusforlife2@users.noreply.github.com>
Date: Wed, 4 Mar 2020 18:41:41 +0530
Subject: [PATCH 0467/1194] Relocate two settings from Appearance to Content
---
app/src/main/res/xml/appearance_settings.xml | 13 -------------
app/src/main/res/xml/content_settings.xml | 13 +++++++++++++
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/app/src/main/res/xml/appearance_settings.xml b/app/src/main/res/xml/appearance_settings.xml
index b5f222130..31be267af 100644
--- a/app/src/main/res/xml/appearance_settings.xml
+++ b/app/src/main/res/xml/appearance_settings.xml
@@ -13,12 +13,6 @@
android:summary="%s"
android:title="@string/theme_title"/>
-
-
-
-
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index 8fe8a66af..fd87de9ef 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -31,6 +31,13 @@
android:summary="%s"
android:title="@string/default_content_country_title"/>
+
+
+
+
Date: Wed, 4 Mar 2020 18:37:04 +0100
Subject: [PATCH 0468/1194] mute icon change in action bar
---
.../newpipe/player/ServicePlayerActivity.java | 12 ++-------
.../res/drawable/ic_volume_off_gray_24dp.xml | 13 ++++++---
.../activity_player_queue_control.xml | 27 +++++--------------
.../layout/activity_player_queue_control.xml | 18 +------------
4 files changed, 19 insertions(+), 51 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 75107a7e4..07cdd73da 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -88,7 +88,6 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
private TextView seekDisplay;
private ImageButton repeatButton;
- private ImageButton muteButton;
private ImageButton backwardButton;
private ImageButton playPauseButton;
private ImageButton forwardButton;
@@ -319,7 +318,6 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
private void buildControls() {
repeatButton = rootView.findViewById(R.id.control_repeat);
- muteButton = rootView.findViewById(R.id.control_mute);
backwardButton = rootView.findViewById(R.id.control_backward);
playPauseButton = rootView.findViewById(R.id.control_play_pause);
forwardButton = rootView.findViewById(R.id.control_forward);
@@ -329,7 +327,6 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
progressBar = rootView.findViewById(R.id.control_progress_bar);
repeatButton.setOnClickListener(this);
- muteButton.setOnClickListener(this);
backwardButton.setOnClickListener(this);
playPauseButton.setOnClickListener(this);
forwardButton.setOnClickListener(this);
@@ -462,10 +459,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
if (view.getId() == repeatButton.getId()) {
player.onRepeatClicked();
- } else if (view.getId() == muteButton.getId()) {
- player.onMuteUnmuteButtonClicked();
-
- } else if (view.getId() == backwardButton.getId()) {
+ } else if (view.getId() == backwardButton.getId()) {
player.onPlayPrevious();
} else if (view.getId() == playPauseButton.getId()) {
@@ -698,9 +692,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
}
private void onMaybeMuteChanged() {
- muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), player.isMuted() ? R.color.white : R.color.gray));
-
- if (menu != null) {
+ if (menu != null && player != null) {
MenuItem item = menu.findItem(R.id.action_mute);
TypedArray a = getTheme().obtainStyledAttributes(R.style.Theme_AppCompat, new int[]{R.attr.volume_off});
int attributeResourceId = a.getResourceId(0, 0);
diff --git a/app/src/main/res/drawable/ic_volume_off_gray_24dp.xml b/app/src/main/res/drawable/ic_volume_off_gray_24dp.xml
index 156ee53bb..ade6bfec2 100644
--- a/app/src/main/res/drawable/ic_volume_off_gray_24dp.xml
+++ b/app/src/main/res/drawable/ic_volume_off_gray_24dp.xml
@@ -1,5 +1,10 @@
-
-
+
+
diff --git a/app/src/main/res/layout-land/activity_player_queue_control.xml b/app/src/main/res/layout-land/activity_player_queue_control.xml
index 0277c28b5..6468c6784 100644
--- a/app/src/main/res/layout-land/activity_player_queue_control.xml
+++ b/app/src/main/res/layout-land/activity_player_queue_control.xml
@@ -192,7 +192,7 @@
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_centerVertical="true"
- android:layout_toLeftOf="@+id/control_mute"
+ android:layout_toLeftOf="@+id/control_repeat"
android:gravity="center"
android:minWidth="50dp"
android:text="1x"
@@ -201,30 +201,13 @@
android:background="?attr/selectableItemBackground"
tools:ignore="HardcodedText,RtlHardcoded"/>
-
-
+
-
-
Date: Wed, 4 Mar 2020 18:53:17 +0100
Subject: [PATCH 0469/1194] mute/unmute text change in action bar
---
.../org/schabi/newpipe/player/ServicePlayerActivity.java | 8 +++++++-
app/src/main/res/values/strings.xml | 1 +
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 07cdd73da..e7700351e 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -459,7 +459,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
if (view.getId() == repeatButton.getId()) {
player.onRepeatClicked();
- } else if (view.getId() == backwardButton.getId()) {
+ } else if (view.getId() == backwardButton.getId()) {
player.onPlayPrevious();
} else if (view.getId() == playPauseButton.getId()) {
@@ -694,6 +694,12 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
private void onMaybeMuteChanged() {
if (menu != null && player != null) {
MenuItem item = menu.findItem(R.id.action_mute);
+
+ //Change the mute-button item in ActionBar
+ //1) Text change:
+ item.setTitle(player.isMuted() ? R.string.unmute : R.string.mute);
+
+ //2) Icon change accordingly to current App Theme
TypedArray a = getTheme().obtainStyledAttributes(R.style.Theme_AppCompat, new int[]{R.attr.volume_off});
int attributeResourceId = a.getResourceId(0, 0);
Drawable drawableMuted = getResources().getDrawable(attributeResourceId);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2f0803e1a..773614263 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -449,6 +449,7 @@
Name
Add To Playlist
Mute
+ Unmute
Set as Playlist Thumbnail
Bookmark Playlist
Remove Bookmark
From 2ca580dc1639d9eb7e4c87600dbacc8bce22a16c Mon Sep 17 00:00:00 2001
From: Poolitzer <25934244+Poolitzer@users.noreply.github.com>
Date: Wed, 4 Mar 2020 20:21:44 -0800
Subject: [PATCH 0470/1194] minor improvements of sentences
Co-Authored-By: Stypox
---
.github/ISSUE_TEMPLATE/bug_report.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 19e8a9fbe..0137335e4 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -14,7 +14,7 @@ Use this template to notify us if you found a bug.
To make it easier for us to help you please enter detailed information below.
-Please note, we only support the latest version of NewPipe and the master branch. Please make sure to upgrade & recreate the issue on the latest version prior to opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start. Make sure its version is the same as in your app (to check your version, open the left drawer and click on "About").
+Please note, we only support the latest version of NewPipe and the master branch. Make sure to upgrade & reproduce the problem on the latest version before opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start. Make sure its version is the same as in your app (to check your version, open the left drawer and click on "About").
P.S.: Our [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) might be a nice document to read before you fill out the report :)
-->
@@ -24,7 +24,7 @@ P.S.: Our [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/
### Steps to reproduce the bug
-
+
Steps to reproduce the behavior:
1. Go to '...'
2. Press on '....'
From 4e37a762d2fa4336f804e1f0a57743751dffd0d3 Mon Sep 17 00:00:00 2001
From: poolitzer <25934244+Poolitzer@users.noreply.github.com>
Date: Wed, 4 Mar 2020 20:31:36 -0800
Subject: [PATCH 0471/1194] Further minor improvements
---
.github/ISSUE_TEMPLATE/bug_report.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 0137335e4..85a058344 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -14,7 +14,7 @@ Use this template to notify us if you found a bug.
To make it easier for us to help you please enter detailed information below.
-Please note, we only support the latest version of NewPipe and the master branch. Make sure to upgrade & reproduce the problem on the latest version before opening an issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is a good start. Make sure its version is the same as in your app (to check your version, open the left drawer and click on "About").
+Please note, we only support the latest version of NewPipe and the master branch. Make sure you have that version installed. If you don't, upgrade & reproduce the problem before opening the issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is the go-to place to get this version. In order to check your app version, open the left drawer and click on "About".
P.S.: Our [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) might be a nice document to read before you fill out the report :)
-->
From 55d7be0b2fb9e08402e28a560cdc63fe787d3afb Mon Sep 17 00:00:00 2001
From: karol
Date: Thu, 5 Mar 2020 19:07:46 +0100
Subject: [PATCH 0472/1194] null risk issue
---
app/src/main/java/org/schabi/newpipe/player/BasePlayer.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index a71671e7b..08fdb9258 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -277,7 +277,7 @@ public abstract class BasePlayer implements
final float playbackPitch = intent.getFloatExtra(PLAYBACK_PITCH, getPlaybackPitch());
final boolean playbackSkipSilence = intent.getBooleanExtra(PLAYBACK_SKIP_SILENCE,
getPlaybackSkipSilence());
- final boolean isMuted = intent.getBooleanExtra(IS_MUTED, isMuted());
+ final boolean isMuted = intent.getBooleanExtra(IS_MUTED, simpleExoPlayer == null ? false : isMuted());
// seek to timestamp if stream is already playing
if (simpleExoPlayer != null
From ecb1b45280951599c636d7600af95f5d89570172 Mon Sep 17 00:00:00 2001
From: Mauricio Colli
Date: Sat, 7 Mar 2020 15:55:55 -0300
Subject: [PATCH 0473/1194] Fix visual glitch when exiting the app
---
.../main/res/values-v21/styles_services.xml | 24 +++++++++----------
app/src/main/res/values/styles.xml | 17 -------------
app/src/main/res/values/styles_services.xml | 24 +++++++++----------
3 files changed, 24 insertions(+), 41 deletions(-)
diff --git a/app/src/main/res/values-v21/styles_services.xml b/app/src/main/res/values-v21/styles_services.xml
index 176bc1f51..1c725f887 100644
--- a/app/src/main/res/values-v21/styles_services.xml
+++ b/app/src/main/res/values-v21/styles_services.xml
@@ -1,69 +1,69 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/values/styles_services.xml b/app/src/main/res/values/styles_services.xml
index 28490d7c6..013690b44 100644
--- a/app/src/main/res/values/styles_services.xml
+++ b/app/src/main/res/values/styles_services.xml
@@ -1,31 +1,31 @@
-
-
-
-
-
-
-
-
-
-
-
-
@@ -127,15 +165,53 @@
- @drawable/ic_pause_white_24dp
- @drawable/ic_settings_update_white
- @drawable/ic_done_white_24dp
+ - @drawable/ic_refresh_white_24dp
+ - @drawable/ic_computer_white_24dp
+ - @drawable/ic_videogame_white_24dp
+ - @drawable/ic_music_note_white_24dp
+ - @drawable/ic_stars_white_24dp
+ - @drawable/ic_sports_white_24dp
+ - @drawable/ic_money_white_24dp
+ - @drawable/ic_person_white_24dp
+ - @drawable/ic_people_white_24dp
+ - @drawable/ic_heart_white_24dp
+ - @drawable/ic_kids_white_24dp
+ - @drawable/ic_fastfood_white_24dp
+ - @drawable/ic_car_white_24dp
+ - @drawable/ic_motorcycle_white_24dp
+ - @drawable/ic_trending_up_white_24dp
+ - @drawable/ic_school_white_24dp
+ - @drawable/ic_asterisk_white_24dp
+ - @drawable/ic_emoticon_white_24dp
+ - @drawable/ic_edit_white_24dp
+ - @drawable/ic_explore_white_24dp
+ - @drawable/ic_fitness_white_24dp
+ - @drawable/ic_restaurant_white_24dp
+ - @drawable/ic_mic_white_24dp
+ - @drawable/ic_radio_white_24dp
+ - @drawable/ic_shopping_cart_white_24dp
+ - @drawable/ic_watch_later_white_24dp
+ - @drawable/ic_work_white_24dp
+ - @drawable/ic_movie_white_24dp
+ - @drawable/ic_pets_white_24dp
+ - @drawable/ic_world_white_24dp
+ - @drawable/ic_sunny_white_24dp
+ - @drawable/ic_telescope_white_24dp
+ - @drawable/ic_megaphone_white_24dp
- @color/dark_separator_color
- @color/dark_contrast_background_color
- @drawable/dark_checked_selector
+ - @drawable/dark_focused_selector
- @color/dark_queue_background_color
- @drawable/toolbar_shadow_dark
- @drawable/dark_selector
- @color/dark_ripple_color
- @drawable/progress_youtube_horizontal_dark
+ - @color/dark_card_item_background_color
+ - @color/dark_card_item_contrast_color
+ - @color/dark_border_color
+ - @drawable/dashed_border_dark
- @style/PreferenceThemeOverlay.v14.Material
@@ -148,6 +224,11 @@
- @color/black_separator_color
- @color/black_contrast_background_color
+
+ - @color/black_card_item_background_color
+ - @color/black_card_item_contrast_color
+ - @color/black_border_color
+ - @drawable/dashed_border_black
@@ -167,6 +248,22 @@
- @color/dark_dialog_background_color
+
+
+
+
-
-
From 697f0659e23db7d26258e4d5820ba05ccefe4466 Mon Sep 17 00:00:00 2001
From: Mauricio Colli
Date: Wed, 25 Mar 2020 09:40:15 -0300
Subject: [PATCH 0611/1194] Distribute the service indicator views in the
drawer header layout
People have voted, and that was the chosen design.
---
app/src/main/res/layout/drawer_header.xml | 45 +++++++++++++----------
1 file changed, 26 insertions(+), 19 deletions(-)
diff --git a/app/src/main/res/layout/drawer_header.xml b/app/src/main/res/layout/drawer_header.xml
index 81d09c278..f2a776659 100644
--- a/app/src/main/res/layout/drawer_header.xml
+++ b/app/src/main/res/layout/drawer_header.xml
@@ -66,27 +66,34 @@
android:paddingLeft="6dp"
android:paddingRight="6dp">
-
+ android:layout_weight="1"
+ android:gravity="center"
+ android:orientation="horizontal">
-
+
+
+
+
Date: Fri, 27 Mar 2020 06:58:59 +0000
Subject: [PATCH 0612/1194] Translated using Weblate (Dutch)
Currently translated at 98.3% (551 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index d170a64c7..4a9ea9c3e 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -177,7 +177,7 @@
Kijkgeschiedenis
Kijkgeschiedenis bijhouden
Hervat afspelen
- Ga verder met afspelen na onderbrekingen (zoals telefoongesprekken)
+ Ga verder met afspelen na onderbrekingen (b.v. telefoongesprekken)
NewPipe-melding
Meldingen voor NewPipe-achtergrond- en pop-upspelers
Geschiedenis
@@ -212,7 +212,7 @@
Item verwijderd
Wil je dit item verwijderen uit je zoekgeschiedenis?
Toon tip \"Ingedrukt houden om toe te voegen\"
- Toon tip als achtergrond- of pop-upknop wordt ingedrukt op de videogegevenspagina
+ Toon tip als de achtergrond- of pop-upknop wordt ingedrukt op de videogegevenspagina
Toegevoegd aan wachtrij voor achtergrondspeler
Toegevoegd aan wachtrij voor pop-upspeler
Alles afspelen
From ca030dd5ed1729f7f558ce0acffcd44c8ee1c919 Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 07:01:30 +0000
Subject: [PATCH 0613/1194] Translated using Weblate (Dutch)
Currently translated at 98.3% (551 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 4a9ea9c3e..f6176f748 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -370,7 +370,7 @@
Bijschriftgrootte en -achtergrondstijlen wijzigen. Vereist een herstart van de app.
Er is geen app geïnstalleerd die dit bestand kan afspelen
Kijkgeschiedenis wissen
- Verwijdert de geschiedenis van afgespeelde streams
+ Verwijdert de geschiedenis van afgespeelde streams en afspeelpositie
De gehele kijkgeschiedenis wissen\?
Kijkgeschiedenis gewist.
Zoekgeschiedenis wissen
From 4cc154cbe156c16e0308f14cd12bbbbf0664b602 Mon Sep 17 00:00:00 2001
From: Daniele Lira Mereb
Date: Thu, 26 Mar 2020 19:10:29 +0000
Subject: [PATCH 0614/1194] Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-pt-rBR/strings.xml | 51 +++++++++++++++++++++-
1 file changed, 49 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index f0ea20065..49545eff6 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -537,7 +537,7 @@ abrir em modo popup
Local
Recentes
Em alta
- Gerado automaticamente (sem criador)
+ Gerado automaticamente (sem autor)
recuperando
Não foi possível recuperar o download
Escolha uma instância
@@ -556,8 +556,55 @@ abrir em modo popup
- %d segundo
- %d segundos
- Devido a restrições do ExoPlayer a duração da pesquisa foi definida como %d segundos
+ Devido às configurações do ExoPlayer a duração da pesquisa foi definida como %d segundos
Desativar som
Ativar som
\@string/app_name
+ Ajuda
+
+ - %d minuto
+ - %d minutos
+
+
+ - %d hora
+ - %d horas
+
+
+ - %d dia
+ - %d dias
+
+ Grupos de feed
+ Última atualização das inscrições: %s
+ Não carregado: %d
+ Carregando feed…
+ Processando feed…
+ Selecionar inscrições
+ Sem inscrições selecionadas
+
+ - %d selecionada
+ - %d selecionadas
+
+ Nome do grupo está vazio
+ Nome
+ Deseja excluir este grupo\?
+ Novo
+ Feed
+ Limiar de atualização do feed
+ Período para que uma inscrição seja considerada desatualizada — %s
+ Atualizar sempre
+ Carregar do feed dedicado, se disponível
+ Disponível em alguns serviços, é mais rápido porém pode apresentar informações limitadas ou incompletas (por exemplo, sem duração, status ao vivo e etc).
+ Ativar modo rápido
+ Desativar modo rápido
+ Achou o carregamento do feed lento\? Se sim, tente ativar o modo rápido (você pode mudar isso nas configurações ou tocando no botão abaixo).
+\n
+\nNewPipe oferece duas estratégias de carregamento do feed:
+\n• Carregando todo o canal que se foi inscrito, lento mas completo.
+\n• Usando ponto de servidor dedicado, rápido mas incompleto.
+\n
+\nA diferença entre os dois é que o mais rápido sofre perda de algumas informações como a duração do vídeo, o status ao vivo dele e etc.
+\n
+\nYouTube é um exemplo de serviço que oferece o modo rápido com seu feed RSS.
+\n
+\nEntão, a escolha é sua: Velocidade ou informações precisas.
\ No newline at end of file
From aacaf1b3fe6c2e6552073f065fd9cdc8e45c3dae Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:03:04 +0000
Subject: [PATCH 0615/1194] Translated using Weblate (Dutch)
Currently translated at 98.3% (551 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index f6176f748..ce0326dd7 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -370,7 +370,7 @@
Bijschriftgrootte en -achtergrondstijlen wijzigen. Vereist een herstart van de app.
Er is geen app geïnstalleerd die dit bestand kan afspelen
Kijkgeschiedenis wissen
- Verwijdert de geschiedenis van afgespeelde streams en afspeelpositie
+ Verwijdert de geschiedenis van afgespeelde streams en afspeelposities
De gehele kijkgeschiedenis wissen\?
Kijkgeschiedenis gewist.
Zoekgeschiedenis wissen
From 6766b2541448a5b1edeada3af37326d1598d1019 Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 07:06:12 +0000
Subject: [PATCH 0616/1194] Translated using Weblate (Dutch)
Currently translated at 99.1% (555 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index ce0326dd7..672cd24d0 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -33,7 +33,7 @@
Externe audiospeler gebruiken
Audio en video
Videovoorbeeldminiatuur
- Videovoorbeeldminiatuur
+ Speel video, tijd:
Gebruikersafbeelding van uploader
Vind-ik-niet-leuks
Downloadfolder voor audio
@@ -105,7 +105,7 @@
Druk voor meer informatie
Even geduld…
Gekopieerd naar klembord
- Kies een beschikbare downloadmap
+ Selecteer een downloadmap in de instellingen
Zwart
reCAPTCHA
reCAPTCHA-uitdaging
From 48c2f8b91b36dae771888edb849ad03cda5fb8c0 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:06:59 +0000
Subject: [PATCH 0617/1194] Translated using Weblate (Dutch)
Currently translated at 99.1% (555 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 672cd24d0..53f463a5d 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -595,4 +595,5 @@
\nYouTube is een voorbeeld van een service die deze snelle methode aanbiedt door zijn RSS-feed.
\n
\nDe keuze komt dus neer op wat je liever hebt: snelheid of precieze informatie.
+ Toggle service, momenteel geselecteerd:
\ No newline at end of file
From 2461173e262374d8a7f2163db8a05dd376ed5e8e Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:10:56 +0000
Subject: [PATCH 0618/1194] Translated using Weblate (Dutch)
Currently translated at 99.1% (555 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 53f463a5d..aaf283621 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -105,7 +105,7 @@
Druk voor meer informatie
Even geduld…
Gekopieerd naar klembord
- Selecteer een downloadmap in de instellingen
+ Selecteer een downloadmap in de Instellingen
Zwart
reCAPTCHA
reCAPTCHA-uitdaging
From 9082ab6ff7f8530297bf4ecf3d5d371a24220ef7 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:11:28 +0000
Subject: [PATCH 0619/1194] Translated using Weblate (Dutch)
Currently translated at 99.6% (558 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index aaf283621..e1e552489 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -596,4 +596,6 @@
\n
\nDe keuze komt dus neer op wat je liever hebt: snelheid of precieze informatie.
Toggle service, momenteel geselecteerd:
+ \@string/app_name
+ Meest leuk gevonden
\ No newline at end of file
From 932de969f01fcaeac4a203c2d394f7d08c6f9abc Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 07:14:28 +0000
Subject: [PATCH 0620/1194] Translated using Weblate (Dutch)
Currently translated at 99.6% (558 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index e1e552489..d68fdba07 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -598,4 +598,5 @@
Toggle service, momenteel geselecteerd:
\@string/app_name
Meest leuk gevonden
+ NewPipe was gesloten terwijl het bezig was met het bestand
\ No newline at end of file
From 76e2a2f032773416e3598cecebb66cc4ace28b50 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:14:42 +0000
Subject: [PATCH 0621/1194] Translated using Weblate (Dutch)
Currently translated at 99.6% (558 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index d68fdba07..538b28801 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -598,5 +598,5 @@
Toggle service, momenteel geselecteerd:
\@string/app_name
Meest leuk gevonden
- NewPipe was gesloten terwijl het bezig was met het bestand
+ NewPipe werd gesloten terwijl het bezig was met het bestand
\ No newline at end of file
From 3a0271cd4d56f61f932ea9c409c8f174a67d4c54 Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 07:17:16 +0000
Subject: [PATCH 0622/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 538b28801..fe3884fac 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -16,7 +16,7 @@
draaiing
Downloadlocatie voor video\'s
Locatie om gedownloade video\'s in op te slaan
- Kies de downloadlocatie voor video\'s
+ Voer de downloadlocatie in voor video\'s
Standaardresolutie
Afspelen met Kodi
Installeer ontbrekende Kore-app\?
@@ -38,7 +38,7 @@
Vind-ik-niet-leuks
Downloadfolder voor audio
Gedownloade muziek wordt hier opgeslagen
- Kies de downloadlocatie voor audiobestanden
+ Voer de downloadlocatie voor audiobestanden in
Thema
Donker
Licht
From 266017865852bb436d26d2e0d35d7b9b24531526 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:25:05 +0000
Subject: [PATCH 0623/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index fe3884fac..9165a3298 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -38,7 +38,7 @@
Vind-ik-niet-leuks
Downloadfolder voor audio
Gedownloade muziek wordt hier opgeslagen
- Voer de downloadlocatie voor audiobestanden in
+ Voer de downloadlocatie in voor audiobestanden
Thema
Donker
Licht
From 1b64900c1416c3fd891e6f971dfe579d260c1361 Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 07:25:23 +0000
Subject: [PATCH 0624/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 9165a3298..b3a51ec4f 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -19,7 +19,7 @@
Voer de downloadlocatie in voor video\'s
Standaardresolutie
Afspelen met Kodi
- Installeer ontbrekende Kore-app\?
+ Kore-app niet gevonden. Deze Installeren\?
\"Afspelen met Kodi\"-optie tonen
Toon een optie om een video af te spelen via Kodi media center
Audio
@@ -530,7 +530,7 @@
herstellen
Kan deze download niet herstellen
Kies een instantie
- Videominiatuur op vergrendelscherm
+ vergrendelscherm video thumbnail activeren
Een videominiatuur wordt getoond op het vergrendelscherm wanneer de achtergrondspeler wordt gebruikt
Downloadgeschiedenis wissen
Gedownloade bestanden verwijderen
From 63642a4d3e5feda610d6aaf77df800cea5d47e5a Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:26:38 +0000
Subject: [PATCH 0625/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index b3a51ec4f..40208f313 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -530,7 +530,7 @@
herstellen
Kan deze download niet herstellen
Kies een instantie
- vergrendelscherm video thumbnail activeren
+ Vergrendelscherm video thumbnail activeren
Een videominiatuur wordt getoond op het vergrendelscherm wanneer de achtergrondspeler wordt gebruikt
Downloadgeschiedenis wissen
Gedownloade bestanden verwijderen
From 91d30dbb83ac5405270742a007317a23f613d22b Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 07:27:03 +0000
Subject: [PATCH 0626/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 40208f313..9b5ac3d6a 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -318,7 +318,7 @@
Out-of-lifecycle-fouten melden
Forceer het melden van niet-bezorgbare Rx-uitzonderingen buiten fragment of activiteitscyclus
Snelle, minder exact spoelen gebruiken
- Onnauwkeurig zoeken laat de speler sneller posities zoeken met verminderde precisie. 5, 15 of 25 zoeken werkt dan niet.
+ Minder exact spoelen laat de speler sneller posities zoeken met verminderde precisie. 5, 15 en 25 seconde werken niet
Volgende stream automatisch in wachtrij plaatsen
Automatisch een gerelateerde stream toekennen bij het afspelen van de laatste stream in een niet-herhalende afspeelwachtlijst
Bestand
@@ -531,7 +531,7 @@
Kan deze download niet herstellen
Kies een instantie
Vergrendelscherm video thumbnail activeren
- Een videominiatuur wordt getoond op het vergrendelscherm wanneer de achtergrondspeler wordt gebruikt
+ Bij gebruik van de achtergrondspeler wordt een videothumbnail weergegeven op het vergrendelscherm
Downloadgeschiedenis wissen
Gedownloade bestanden verwijderen
%1$s downloads verwijderd
From 04574234989e81b5b8689864454acfc6b35eb45d Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:29:39 +0000
Subject: [PATCH 0627/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 9b5ac3d6a..8cbcd382e 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -318,7 +318,7 @@
Out-of-lifecycle-fouten melden
Forceer het melden van niet-bezorgbare Rx-uitzonderingen buiten fragment of activiteitscyclus
Snelle, minder exact spoelen gebruiken
- Minder exact spoelen laat de speler sneller posities zoeken met verminderde precisie. 5, 15 en 25 seconde werken niet
+ Minder exact spoelen laat de speler sneller posities zoeken met verminderde precisie. 5, 15 en 25 seconden werken niet.
Volgende stream automatisch in wachtrij plaatsen
Automatisch een gerelateerde stream toekennen bij het afspelen van de laatste stream in een niet-herhalende afspeelwachtlijst
Bestand
From e394b16335da1bc97717b12725d791beb7d2bb9a Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 07:37:11 +0000
Subject: [PATCH 0628/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 8cbcd382e..f6e361141 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -19,7 +19,7 @@
Voer de downloadlocatie in voor video\'s
Standaardresolutie
Afspelen met Kodi
- Kore-app niet gevonden. Deze Installeren\?
+ Kore-app niet gevonden. Deze installeren\?
\"Afspelen met Kodi\"-optie tonen
Toon een optie om een video af te spelen via Kodi media center
Audio
@@ -466,7 +466,7 @@
Conferenties
Time-out van verbinding
Reacties tonen
- Schakel uit om reacties niet te tonen
+ Schakel dit uit om reacties niet meer te tonen
Automatisch afspelen
- %s reactie
@@ -530,8 +530,8 @@
herstellen
Kan deze download niet herstellen
Kies een instantie
- Vergrendelscherm video thumbnail activeren
- Bij gebruik van de achtergrondspeler wordt een videothumbnail weergegeven op het vergrendelscherm
+ Video afbeelding laten zien op vergrendelingsscherm
+ Een video afbeelding wordt weergegeven op het vergrendelscherm wanneer de achtergrond speler wordt gebruikt
Downloadgeschiedenis wissen
Gedownloade bestanden verwijderen
%1$s downloads verwijderd
From b605bc086c8238e03714c63c30167053d98d4177 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:43:34 +0000
Subject: [PATCH 0629/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index f6e361141..d7be01133 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -466,7 +466,7 @@
Conferenties
Time-out van verbinding
Reacties tonen
- Schakel dit uit om reacties niet meer te tonen
+ Schakel dit uit om reacties te verbergen
Automatisch afspelen
- %s reactie
From bfaf938543e0df0997f8b73c07501c954e7375c5 Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 07:44:17 +0000
Subject: [PATCH 0630/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index d7be01133..0aae51aa5 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -479,8 +479,8 @@
\n Niet alle toestellen zijn compatibel
Wis data
Verander de downloadmappen om effect te bekomen
- Afspelen hervatten
- Laatste afspeelpositie herstellen
+ Hervat afspelen
+ Herstel laatste afspeelpositie
Posities in lijsten
Afspeelpositie-indicatoren in lijsten tonen
Afspeelposities verwijderd.
From 8714664e00838774d58b2f5d433a0b8784ece47f Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 07:56:22 +0000
Subject: [PATCH 0631/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 0aae51aa5..468ca19b6 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -480,7 +480,7 @@
Wis data
Verander de downloadmappen om effect te bekomen
Hervat afspelen
- Herstel laatste afspeelpositie
+ Herstel de vorige afspeelpositie
Posities in lijsten
Afspeelpositie-indicatoren in lijsten tonen
Afspeelposities verwijderd.
From 0f075137c93199cd93f4433762aeaf3ad65965cd Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 07:58:30 +0000
Subject: [PATCH 0632/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 30 +++++++++++++-------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 468ca19b6..25dc7e664 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -85,7 +85,7 @@
Kan afbeelding niet laden
App/UI gecrasht
Wat:\\nVerzoek:\\nTaal van inhoud:\\nDienst:\\nTijd in GMT:\\nPakket:\\nVersie:\\nVersie van besturingssysteem:
- Probleem melden
+ Meld een probleem
Gebruikersrapport
Geef eerst toegang tot de opslag
Begin
@@ -500,15 +500,15 @@
Je zal gevraagd worden waar elke download op te slaan.
\nKies SAF als je wilt downloaden naar een externe SD-kaart
SAF gebruiken
- Afspeelposities verwijderen
- Alle afspeelposities verwijderen
+ Verwijder afspeelposities
+ Verwijder alle afspeelposities
Alle afspeelposities verwijderen\?
- Niemand kijkt
+ Niemand is aan het kijken
- - %s kijkt
- - %s kijken
+ - %s kijker
+ - %s kijkers
- Niemand luistert
+ Niemand is aan het luisteren
- %s luisteraar
- %s luisteraars
@@ -516,16 +516,16 @@
De taal zal veranderen zodra de app opnieuw is opgestart.
Standaardkiosk
Duur van snel voor-/achteruit zoeken
- PeerTube-instanties
- Selecteer je favoriete PeerTube-instanties
- Zoek de instanties die je leuk vindt op %s
- Instantie toevoegen
- Instantie-URL invoeren
+ PeerTube instanties
+ Favoriete PeerTube instanties instellen
+ Vind het kanaal dat je leuk vind op %s
+ Kanaal toevoegen
+ Kanaal URL invoeren
Kon instantie niet valideren
- Alleen HTTPS-URL\'s worden ondersteund
- Instantie bestaat al
+ Alleen HTTPS links worden ondersteund
+ Kanaal bestaat al
Lokaal
- Onlangs toegevoegd
+ "Recentelijk toegevoegd "
Automatisch gegenereerd (geen uploader gevonden)
herstellen
Kan deze download niet herstellen
From be504212d0b35c455e54ddc11da37162664450f2 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 08:17:06 +0000
Subject: [PATCH 0633/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 25dc7e664..cdbe1656b 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -521,7 +521,7 @@
Vind het kanaal dat je leuk vind op %s
Kanaal toevoegen
Kanaal URL invoeren
- Kon instantie niet valideren
+ Kon kanaal niet valideren
Alleen HTTPS links worden ondersteund
Kanaal bestaat al
Lokaal
From f48f6ae5dfb8a1e9271717dc395ddb0c8f64c2d9 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 08:32:51 +0000
Subject: [PATCH 0634/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index cdbe1656b..54b4874fa 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -525,7 +525,7 @@
Alleen HTTPS links worden ondersteund
Kanaal bestaat al
Lokaal
- "Recentelijk toegevoegd "
+ Recentelijk toegevoegd
Automatisch gegenereerd (geen uploader gevonden)
herstellen
Kan deze download niet herstellen
From 5009fa461c3c8b4623cfed52816d4198e84f957b Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 08:33:00 +0000
Subject: [PATCH 0635/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 54b4874fa..33b7974aa 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -237,7 +237,7 @@
Verwijderen
Details
Audio-instellingen
- Ingedrukt houden om toe te voegen aan wachtrij
+ Houd ingedrukt om toe te voegen aan de wachtrij
[Onbekend]
Toevoegen aan wachtrij in de achtergrond
Toevoegen aan wachtrij in nieuwe pop-up
@@ -485,9 +485,9 @@
Afspeelpositie-indicatoren in lijsten tonen
Afspeelposities verwijderd.
Bestand verplaatst of verwijderd
- Een bestand met deze naam bestaat al
- kan het bestand niet overschrijven
- Er is een download in behandeling met deze naam
+ Een bestand met dezelfde naam bestaat al
+ het is niet mogelijk het bestand te overschrijven
+ Er is een download met deze naam bezig
Geen ruimte meer op het apparaat
Voortgang verloren, omdat het bestand is verwijderd
Wil je je downloadgeschiedenis wissen of alle gedownloade bestanden verwijderen\?
@@ -542,8 +542,8 @@
Klaar
Video\'s
Door beperkingen van ExoPlayer is de zoekduur ingesteld op %d seconden
- Dempen
- Dempen opheffen
+ Geluid dempen
+ Geluid aanzetten
Hulp
- %d seconde
@@ -597,6 +597,6 @@
\nDe keuze komt dus neer op wat je liever hebt: snelheid of precieze informatie.
Toggle service, momenteel geselecteerd:
\@string/app_name
- Meest leuk gevonden
+ Meest geliked
NewPipe werd gesloten terwijl het bezig was met het bestand
\ No newline at end of file
From 101a8adbc2b079948314408d8f63c76adcbdb0ea Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 08:34:53 +0000
Subject: [PATCH 0636/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 33b7974aa..a57054397 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -487,7 +487,7 @@
Bestand verplaatst of verwijderd
Een bestand met dezelfde naam bestaat al
het is niet mogelijk het bestand te overschrijven
- Er is een download met deze naam bezig
+ Er is al een download met deze naam bezig
Geen ruimte meer op het apparaat
Voortgang verloren, omdat het bestand is verwijderd
Wil je je downloadgeschiedenis wissen of alle gedownloade bestanden verwijderen\?
From 2c0ad89a07a88be37f64fa4515d2e6b9d60e7257 Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 08:35:50 +0000
Subject: [PATCH 0637/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index a57054397..043d783a8 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -460,8 +460,8 @@
Stop
Maximum aantal keer proberen
Maximum aantal pogingen voordat de download wordt geannuleerd
- Onderbreken op netwerken met datalimiet
- Handig bij het overschakelen naar mobiele gegevens, hoewel sommige downloads niet onderbroken kunnen worden
+ Pauzeren bij overschakelen naar mobiele data
+ Handig voor wanneer u tot mobiel internet overschakelt, hoewel sommige downloads niet gepauzeerd kunnen worden.
Gebeurtenissen
Conferenties
Time-out van verbinding
@@ -489,7 +489,7 @@
het is niet mogelijk het bestand te overschrijven
Er is al een download met deze naam bezig
Geen ruimte meer op het apparaat
- Voortgang verloren, omdat het bestand is verwijderd
+ Voortgang verloren, omdat bestand was verwijderd
Wil je je downloadgeschiedenis wissen of alle gedownloade bestanden verwijderen\?
Downloadwachtrij beperken
Een download zal tegelijkertijd worden uitgevoerd
@@ -532,8 +532,8 @@
Kies een instantie
Video afbeelding laten zien op vergrendelingsscherm
Een video afbeelding wordt weergegeven op het vergrendelscherm wanneer de achtergrond speler wordt gebruikt
- Downloadgeschiedenis wissen
- Gedownloade bestanden verwijderen
+ Download geschiedenis verwijderen
+ Verwijder gedownloade bestanden
%1$s downloads verwijderd
Geef toestemming voor weergave over andere apps
App-taal
From 377d02ab1ac3b702d5f351a46bbf02e2cdd81b93 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 09:46:42 +0000
Subject: [PATCH 0638/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 043d783a8..08709e265 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -461,7 +461,7 @@
Maximum aantal keer proberen
Maximum aantal pogingen voordat de download wordt geannuleerd
Pauzeren bij overschakelen naar mobiele data
- Handig voor wanneer u tot mobiel internet overschakelt, hoewel sommige downloads niet gepauzeerd kunnen worden.
+ Handig voor wanneer u naar mobiel internet overschakelt, hoewel sommige downloads niet gepauzeerd kunnen worden.
Gebeurtenissen
Conferenties
Time-out van verbinding
From d958c0c68a115671e89e643582978a85d1d68a72 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 09:46:59 +0000
Subject: [PATCH 0639/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 08709e265..49f5fa52f 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -461,7 +461,7 @@
Maximum aantal keer proberen
Maximum aantal pogingen voordat de download wordt geannuleerd
Pauzeren bij overschakelen naar mobiele data
- Handig voor wanneer u naar mobiel internet overschakelt, hoewel sommige downloads niet gepauzeerd kunnen worden.
+ Handig voor wanneer u naar mobiel internet overschakelt, hoewel sommige downloads niet gepauzeerd kunnen worden
Gebeurtenissen
Conferenties
Time-out van verbinding
From 90c8a714fcdb56ce4784d453ee683c697e109385 Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 09:47:15 +0000
Subject: [PATCH 0640/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 49f5fa52f..b4463f147 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -491,8 +491,8 @@
Geen ruimte meer op het apparaat
Voortgang verloren, omdat bestand was verwijderd
Wil je je downloadgeschiedenis wissen of alle gedownloade bestanden verwijderen\?
- Downloadwachtrij beperken
- Een download zal tegelijkertijd worden uitgevoerd
+ Limiteer de download wachtrij
+ Er zal maximaal 1 bestand tegelijk downloaden
Downloads starten
Downloads pauzeren
Vraag waar te downloaden
From e9db964a705901af461647915b9b04d8dfcb1d79 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 09:48:06 +0000
Subject: [PATCH 0641/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index b4463f147..da506f48f 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -492,7 +492,7 @@
Voortgang verloren, omdat bestand was verwijderd
Wil je je downloadgeschiedenis wissen of alle gedownloade bestanden verwijderen\?
Limiteer de download wachtrij
- Er zal maximaal 1 bestand tegelijk downloaden
+ Er zal maximaal 1 bestand tegelijk worden gedownload
Downloads starten
Downloads pauzeren
Vraag waar te downloaden
From d4db7b3fc16059c87fbe176e4dfa3708a9314621 Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 09:48:28 +0000
Subject: [PATCH 0642/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index da506f48f..dd9938e95 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -493,9 +493,9 @@
Wil je je downloadgeschiedenis wissen of alle gedownloade bestanden verwijderen\?
Limiteer de download wachtrij
Er zal maximaal 1 bestand tegelijk worden gedownload
- Downloads starten
+ Download starten
Downloads pauzeren
- Vraag waar te downloaden
+ Vragen waar de download geplaatst moet worden
Je zal gevraagd worden waar elke download op te slaan
Je zal gevraagd worden waar elke download op te slaan.
\nKies SAF als je wilt downloaden naar een externe SD-kaart
From c57b4ee965596929a797908cea12bedcaf0ffd7b Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 09:50:30 +0000
Subject: [PATCH 0643/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index dd9938e95..f4b74c52e 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -495,7 +495,7 @@
Er zal maximaal 1 bestand tegelijk worden gedownload
Download starten
Downloads pauzeren
- Vragen waar de download geplaatst moet worden
+ Vraag waar bestanden geplaatst moeten worden
Je zal gevraagd worden waar elke download op te slaan
Je zal gevraagd worden waar elke download op te slaan.
\nKies SAF als je wilt downloaden naar een externe SD-kaart
From 0a67ecbc3aa84c1e6db92287cf3c817cd6ca1307 Mon Sep 17 00:00:00 2001
From: anonymous
Date: Fri, 27 Mar 2020 09:50:45 +0000
Subject: [PATCH 0644/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index f4b74c52e..68727f0ab 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -496,7 +496,7 @@
Download starten
Downloads pauzeren
Vraag waar bestanden geplaatst moeten worden
- Je zal gevraagd worden waar elke download op te slaan
+ U zal worden gevraagd waar u bestanden wilt plaatsen
Je zal gevraagd worden waar elke download op te slaan.
\nKies SAF als je wilt downloaden naar een externe SD-kaart
SAF gebruiken
From 0be78b120469e51446dd39901658b7c5030611e6 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 09:50:56 +0000
Subject: [PATCH 0645/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 68727f0ab..681a0a3aa 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -496,7 +496,7 @@
Download starten
Downloads pauzeren
Vraag waar bestanden geplaatst moeten worden
- U zal worden gevraagd waar u bestanden wilt plaatsen
+ U zal worden gevraagd waar u bestanden wilt opslaan
Je zal gevraagd worden waar elke download op te slaan.
\nKies SAF als je wilt downloaden naar een externe SD-kaart
SAF gebruiken
From d8e83dabc60b4cf511da700128c7569f67764c77 Mon Sep 17 00:00:00 2001
From: Mauricio Colli
Date: Fri, 27 Mar 2020 11:30:38 -0300
Subject: [PATCH 0646/1194] Temporary: Fix menu visibility when restoring state
in the pager adapter
When restoring the state of the adapter, all the fragments' menu
visibility were set to false, effectively disabling the menu from the
user until he switched pages or another event that triggered the menu to
be visible again happened.
FragmentStatePagerAdapter is deprecated and should be replaced with its
ViewPager2 counterpart, until then, this should do it.
---
...agmentStatePagerAdapterMenuWorkaround.java | 318 ++++++++++++++++++
.../newpipe/fragments/MainFragment.java | 4 +-
2 files changed, 320 insertions(+), 2 deletions(-)
create mode 100644 app/src/main/java/androidx/fragment/app/FragmentStatePagerAdapterMenuWorkaround.java
diff --git a/app/src/main/java/androidx/fragment/app/FragmentStatePagerAdapterMenuWorkaround.java b/app/src/main/java/androidx/fragment/app/FragmentStatePagerAdapterMenuWorkaround.java
new file mode 100644
index 000000000..9fd32b735
--- /dev/null
+++ b/app/src/main/java/androidx/fragment/app/FragmentStatePagerAdapterMenuWorkaround.java
@@ -0,0 +1,318 @@
+/*
+ * Copyright 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 androidx.fragment.app;
+
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.lifecycle.Lifecycle;
+import androidx.viewpager.widget.PagerAdapter;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+
+// TODO: Replace this deprecated class with its ViewPager2 counterpart
+
+/**
+ * This is a copy from {@link androidx.fragment.app.FragmentStatePagerAdapter}.
+ *
+ * It includes a workaround to fix the menu visibility when the adapter is restored.
+ *
+ * When restoring the state of this adapter, all the fragments' menu visibility were set to false,
+ * effectively disabling the menu from the user until he switched pages or another event that triggered the
+ * menu to be visible again happened.
+ *
+ * Check out the changes in:
+ *
+ * {@link #saveState()}
+ * {@link #restoreState(Parcelable, ClassLoader)}
+ *
+ */
+@SuppressWarnings("deprecation")
+public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapter {
+ private static final String TAG = "FragmentStatePagerAdapt";
+ private static final boolean DEBUG = false;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({BEHAVIOR_SET_USER_VISIBLE_HINT, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT})
+ private @interface Behavior { }
+
+ /**
+ * Indicates that {@link Fragment#setUserVisibleHint(boolean)} will be called when the current
+ * fragment changes.
+ *
+ * @deprecated This behavior relies on the deprecated
+ * {@link Fragment#setUserVisibleHint(boolean)} API. Use
+ * {@link #BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT} to switch to its replacement,
+ * {@link FragmentTransaction#setMaxLifecycle}.
+ * @see #FragmentStatePagerAdapterMenuWorkaround(FragmentManager, int)
+ */
+ @Deprecated
+ public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0;
+
+ /**
+ * Indicates that only the current fragment will be in the {@link Lifecycle.State#RESUMED}
+ * state. All other Fragments are capped at {@link Lifecycle.State#STARTED}.
+ *
+ * @see #FragmentStatePagerAdapterMenuWorkaround(FragmentManager, int)
+ */
+ public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1;
+
+ private final FragmentManager mFragmentManager;
+ private final int mBehavior;
+ private FragmentTransaction mCurTransaction = null;
+
+ private ArrayList mSavedState = new ArrayList();
+ private ArrayList mFragments = new ArrayList();
+ private Fragment mCurrentPrimaryItem = null;
+
+ /**
+ * Constructor for {@link FragmentStatePagerAdapterMenuWorkaround} that sets the fragment manager for the
+ * adapter. This is the equivalent of calling
+ * {@link #FragmentStatePagerAdapterMenuWorkaround(FragmentManager, int)} and passing in
+ * {@link #BEHAVIOR_SET_USER_VISIBLE_HINT}.
+ *
+ * Fragments will have {@link Fragment#setUserVisibleHint(boolean)} called whenever the
+ * current Fragment changes.
+ *
+ * @param fm fragment manager that will interact with this adapter
+ * @deprecated use {@link #FragmentStatePagerAdapterMenuWorkaround(FragmentManager, int)} with
+ * {@link #BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT}
+ */
+ @Deprecated
+ public FragmentStatePagerAdapterMenuWorkaround(@NonNull FragmentManager fm) {
+ this(fm, BEHAVIOR_SET_USER_VISIBLE_HINT);
+ }
+
+ /**
+ * Constructor for {@link FragmentStatePagerAdapterMenuWorkaround}.
+ *
+ * If {@link #BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT} is passed in, then only the current
+ * Fragment is in the {@link Lifecycle.State#RESUMED} state, while all other fragments are
+ * capped at {@link Lifecycle.State#STARTED}. If {@link #BEHAVIOR_SET_USER_VISIBLE_HINT} is
+ * passed, all fragments are in the {@link Lifecycle.State#RESUMED} state and there will be
+ * callbacks to {@link Fragment#setUserVisibleHint(boolean)}.
+ *
+ * @param fm fragment manager that will interact with this adapter
+ * @param behavior determines if only current fragments are in a resumed state
+ */
+ public FragmentStatePagerAdapterMenuWorkaround(@NonNull FragmentManager fm,
+ @Behavior int behavior) {
+ mFragmentManager = fm;
+ mBehavior = behavior;
+ }
+
+ /**
+ * Return the Fragment associated with a specified position.
+ */
+ @NonNull
+ public abstract Fragment getItem(int position);
+
+ @Override
+ public void startUpdate(@NonNull ViewGroup container) {
+ if (container.getId() == View.NO_ID) {
+ throw new IllegalStateException("ViewPager with adapter " + this
+ + " requires a view id");
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ @NonNull
+ @Override
+ public Object instantiateItem(@NonNull ViewGroup container, int position) {
+ // If we already have this item instantiated, there is nothing
+ // to do. This can happen when we are restoring the entire pager
+ // from its saved state, where the fragment manager has already
+ // taken care of restoring the fragments we previously had instantiated.
+ if (mFragments.size() > position) {
+ Fragment f = mFragments.get(position);
+ if (f != null) {
+ return f;
+ }
+ }
+
+ if (mCurTransaction == null) {
+ mCurTransaction = mFragmentManager.beginTransaction();
+ }
+
+ Fragment fragment = getItem(position);
+ if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
+ if (mSavedState.size() > position) {
+ Fragment.SavedState fss = mSavedState.get(position);
+ if (fss != null) {
+ fragment.setInitialSavedState(fss);
+ }
+ }
+ while (mFragments.size() <= position) {
+ mFragments.add(null);
+ }
+ fragment.setMenuVisibility(false);
+ if (mBehavior == BEHAVIOR_SET_USER_VISIBLE_HINT) {
+ fragment.setUserVisibleHint(false);
+ }
+
+ mFragments.set(position, fragment);
+ mCurTransaction.add(container.getId(), fragment);
+
+ if (mBehavior == BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+ mCurTransaction.setMaxLifecycle(fragment, Lifecycle.State.STARTED);
+ }
+
+ return fragment;
+ }
+
+ @Override
+ public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
+ Fragment fragment = (Fragment) object;
+
+ if (mCurTransaction == null) {
+ mCurTransaction = mFragmentManager.beginTransaction();
+ }
+ if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object
+ + " v=" + ((Fragment)object).getView());
+ while (mSavedState.size() <= position) {
+ mSavedState.add(null);
+ }
+ mSavedState.set(position, fragment.isAdded()
+ ? mFragmentManager.saveFragmentInstanceState(fragment) : null);
+ mFragments.set(position, null);
+
+ mCurTransaction.remove(fragment);
+ if (fragment == mCurrentPrimaryItem) {
+ mCurrentPrimaryItem = null;
+ }
+ }
+
+ @Override
+ @SuppressWarnings({"ReferenceEquality", "deprecation"})
+ public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
+ Fragment fragment = (Fragment)object;
+ if (fragment != mCurrentPrimaryItem) {
+ if (mCurrentPrimaryItem != null) {
+ mCurrentPrimaryItem.setMenuVisibility(false);
+ if (mBehavior == BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+ if (mCurTransaction == null) {
+ mCurTransaction = mFragmentManager.beginTransaction();
+ }
+ mCurTransaction.setMaxLifecycle(mCurrentPrimaryItem, Lifecycle.State.STARTED);
+ } else {
+ mCurrentPrimaryItem.setUserVisibleHint(false);
+ }
+ }
+ fragment.setMenuVisibility(true);
+ if (mBehavior == BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+ if (mCurTransaction == null) {
+ mCurTransaction = mFragmentManager.beginTransaction();
+ }
+ mCurTransaction.setMaxLifecycle(fragment, Lifecycle.State.RESUMED);
+ } else {
+ fragment.setUserVisibleHint(true);
+ }
+
+ mCurrentPrimaryItem = fragment;
+ }
+ }
+
+ @Override
+ public void finishUpdate(@NonNull ViewGroup container) {
+ if (mCurTransaction != null) {
+ mCurTransaction.commitNowAllowingStateLoss();
+ mCurTransaction = null;
+ }
+ }
+
+ @Override
+ public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
+ return ((Fragment)object).getView() == view;
+ }
+
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ private final String SELECTED_FRAGMENT = "selected_fragment";
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ @Override
+ @Nullable
+ public Parcelable saveState() {
+ Bundle state = null;
+ if (mSavedState.size() > 0) {
+ state = new Bundle();
+ Fragment.SavedState[] fss = new Fragment.SavedState[mSavedState.size()];
+ mSavedState.toArray(fss);
+ state.putParcelableArray("states", fss);
+ }
+ for (int i=0; i keys = bundle.keySet();
+ for (String key: keys) {
+ if (key.startsWith("f")) {
+ int index = Integer.parseInt(key.substring(1));
+ Fragment f = mFragmentManager.getFragment(bundle, key);
+ if (f != null) {
+ while (mFragments.size() <= index) {
+ mFragments.add(null);
+ }
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ final boolean wasSelected = bundle.getString(SELECTED_FRAGMENT, "").equals(key);
+ f.setMenuVisibility(wasSelected);
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ mFragments.set(index, f);
+ } else {
+ Log.w(TAG, "Bad fragment at key " + key);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index e3dfb8982..a157f34bf 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -16,7 +16,7 @@ import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentStatePagerAdapter;
+import androidx.fragment.app.FragmentStatePagerAdapterMenuWorkaround;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
@@ -185,7 +185,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
updateTitleForTab(tab.getPosition());
}
- private static class SelectedTabsPagerAdapter extends FragmentStatePagerAdapter {
+ private static class SelectedTabsPagerAdapter extends FragmentStatePagerAdapterMenuWorkaround {
private final Context context;
private final List internalTabsList;
From 8fed3df681bdd3b817c08a953a5e2e43566ef88c Mon Sep 17 00:00:00 2001
From: opusforlife2 <53176348+opusforlife2@users.noreply.github.com>
Date: Sat, 28 Mar 2020 09:58:43 +0000
Subject: [PATCH 0647/1194] Update PULL_REQUEST_TEMPLATE.md
Minor modifications
---
.github/PULL_REQUEST_TEMPLATE.md | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 9a1193767..f12eb2fe8 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,10 +1,12 @@
#### What is it?
-- [ ] Bug fix
-- [ ] Feature
+- [ ] Bug fix (user facing)
+- [ ] Feature (user facing)
+- [ ] Code base improvement (dev facing)
+- [ ] Meta improvement to the project (dev facing)
-#### Long description of the changes in your PR
+#### Description of the changes in your PR
- record videos
- create clones
From a7af21958f0ba2445cdc42219f824b5cb33daaef Mon Sep 17 00:00:00 2001
From: opusforlife2 <53176348+opusforlife2@users.noreply.github.com>
Date: Sat, 28 Mar 2020 10:54:20 +0000
Subject: [PATCH 0648/1194] Make feature request template easier to fill out
---
.github/ISSUE_TEMPLATE/feature_request.md | 33 +++++++++++++++--------
1 file changed, 22 insertions(+), 11 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 89fe58658..e9d49fe5d 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -7,22 +7,33 @@ assignees: ''
---
-#### Is your feature request related to a problem? Please describe it
-A clear and concise description of what the problem is.
-Example: *I want to do X, but there is no way to do it.*
-#### Describe the solution you'd like
-A clear and concise description of what you want to happen.
+
+
+#### Describe the feature you want
+
+
+
+
+#### Is your feature request related to a problem? Please describe it
+
+
+
#### Additional context
-Add any other context or screenshots about the feature request here.
-Example: *Here's a photo of my cat!*
+
+
+
#### How will you/everyone benefit from this feature?
-Convince us! How does it change your NewPipe experience and/or your life?
+
+
+
From 713bf58c444f9401ee97cec1e3bd60a655ae40ad Mon Sep 17 00:00:00 2001
From: opusforlife2 <53176348+opusforlife2@users.noreply.github.com>
Date: Sat, 28 Mar 2020 11:49:46 +0000
Subject: [PATCH 0649/1194] Add reminder to link Issues/PRs
---
.github/ISSUE_TEMPLATE/feature_request.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index e9d49fe5d..90134a204 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -20,7 +20,7 @@ Example: *Z is also a good alternative. Not as good as Y, but at least...* or *I
#### Is your feature request related to a problem? Please describe it
-
From b995f39206298f23e510435cc76b873780c09189 Mon Sep 17 00:00:00 2001
From: bopol
Date: Sat, 28 Mar 2020 14:19:42 +0100
Subject: [PATCH 0650/1194] add upload date on stream grid items
fixes #3175
---
.../info_list/holder/StreamGridInfoItemHolder.java | 2 +-
.../info_list/holder/StreamInfoItemHolder.java | 6 +++++-
app/src/main/res/layout/list_stream_grid_item.xml | 13 +++++++++++++
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamGridInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamGridInfoItemHolder.java
index a2e585857..78bdfeaac 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamGridInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamGridInfoItemHolder.java
@@ -5,7 +5,7 @@ import android.view.ViewGroup;
import org.schabi.newpipe.R;
import org.schabi.newpipe.info_list.InfoItemBuilder;
-public class StreamGridInfoItemHolder extends StreamMiniInfoItemHolder {
+public class StreamGridInfoItemHolder extends StreamInfoItemHolder {
public StreamGridInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_stream_grid_item, parent);
diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java
index 1dfbbca3f..8f715c6c0 100644
--- a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java
@@ -40,7 +40,11 @@ public class StreamInfoItemHolder extends StreamMiniInfoItemHolder {
public final TextView itemAdditionalDetails;
public StreamInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) {
- super(infoItemBuilder, R.layout.list_stream_item, parent);
+ this(infoItemBuilder, R.layout.list_stream_item, parent);
+ }
+
+ public StreamInfoItemHolder(InfoItemBuilder infoItemBuilder, int layoutId, ViewGroup parent) {
+ super(infoItemBuilder, layoutId, parent);
itemAdditionalDetails = itemView.findViewById(R.id.itemAdditionalDetails);
}
diff --git a/app/src/main/res/layout/list_stream_grid_item.xml b/app/src/main/res/layout/list_stream_grid_item.xml
index fc9235e8d..2850c6125 100644
--- a/app/src/main/res/layout/list_stream_grid_item.xml
+++ b/app/src/main/res/layout/list_stream_grid_item.xml
@@ -67,6 +67,19 @@
android:textSize="@dimen/video_item_search_uploader_text_size"
tools:text="Uploader"/>
+
+
Date: Fri, 27 Mar 2020 08:51:10 +0000
Subject: [PATCH 0651/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 681a0a3aa..0c358f7ae 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -499,7 +499,7 @@
U zal worden gevraagd waar u bestanden wilt opslaan
Je zal gevraagd worden waar elke download op te slaan.
\nKies SAF als je wilt downloaden naar een externe SD-kaart
- SAF gebruiken
+ Gebruik SAF
Verwijder afspeelposities
Verwijder alle afspeelposities
Alle afspeelposities verwijderen\?
@@ -537,7 +537,7 @@
%1$s downloads verwijderd
Geef toestemming voor weergave over andere apps
App-taal
- Systeemstandaard
+ Systeem taal gebruiken
Druk op \"Klaar\" zodra opgelost
Klaar
Video\'s
@@ -566,7 +566,7 @@
Niet geladen: %d
Feed aan het laden…
Feed aan het verwerken…
- Abonnementen selecteren
+ Selecteer abonnementen
Geen abonnement geselecteerd
- %d geselecteerd
@@ -574,7 +574,7 @@
Lege groepsnaam
Naam
- Wil je deze groep verwijderen\?
+ Wilt u deze groep verwijderen\?
Nieuw
Feed
Drempel voor feedupdate
From e1042e326d4d950bca81d89b35e0b91b1b3f7ed4 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Fri, 27 Mar 2020 08:52:19 +0000
Subject: [PATCH 0652/1194] Translated using Weblate (Dutch)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-nl/strings.xml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 0c358f7ae..f2fd8fa24 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -475,8 +475,8 @@
Geen reacties
Kan reacties niet laden
Sluiten
- Het \'Storage Access Framework\' laat downloads naar een externe SD kaart toe.
-\n Niet alle toestellen zijn compatibel
+ Het \'Storage Access Framework\' laat downloads naar een externe SD kaart toe.
+\nNiet alle toestellen zijn compatibel
Wis data
Verander de downloadmappen om effect te bekomen
Hervat afspelen
@@ -536,7 +536,7 @@
Verwijder gedownloade bestanden
%1$s downloads verwijderd
Geef toestemming voor weergave over andere apps
- App-taal
+ Applicatie taal
Systeem taal gebruiken
Druk op \"Klaar\" zodra opgelost
Klaar
@@ -547,7 +547,7 @@
Hulp
- %d seconde
- - %d secondes
+ - %d seconden
- %d minuut
@@ -562,7 +562,7 @@
- %d dagen
Feedgroepen
- Oudste abonnementsupdate: %s
+ Oudste abonnements-update: %s
Niet geladen: %d
Feed aan het laden…
Feed aan het verwerken…
From 0d020d3a5427458df54d8c31dd6be4587cd63dc7 Mon Sep 17 00:00:00 2001
From: ssantos
Date: Fri, 27 Mar 2020 15:53:48 +0000
Subject: [PATCH 0653/1194] Translated using Weblate (Portuguese)
Currently translated at 90.7% (508 of 560 strings)
---
app/src/main/res/values-pt/strings.xml | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 504b98642..907a60259 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -2,7 +2,7 @@
%1$s visualizações
Publicado em %1$s
- Reprodutor não disponível. Deseja instalar o VLC?
+ Nenhum reprodutor de vídeo encontrado. Instalar o VLC\?
Instalar
Cancelar
Abrir no navegador
@@ -21,7 +21,7 @@
Escolha a pasta de descarregamento para ficheiros de vídeo
Resolução predefinida
Reproduzir no Kodi
- Aplicação Kore não encontrada. Instalar?
+ Instalar a app Kore\?
Mostrar opção \"Reproduzir no Kodi\"
Exibir uma opção para reproduzir o vídeo via Kodi media center
Áudio
@@ -76,7 +76,7 @@
Áudio
Tentar novamente
Negada a permissão para aceder ao armazenamento
- Toque para iniciar a pesquisa
+ Toque em \"Pesquisar\" para iniciar
Reprodução automática
Reproduzir vídeo se o NewPipe for invocado por outra aplicação
Direto
@@ -120,13 +120,13 @@
reCAPTCHA
Desafio reCAPTCHA
Desafio reCAPTCHA solicitado
- Modo de janela autónoma do NewPipe
+ Modo popup
Reproduzir no modo de janela autónoma
Formato de vídeo predefinido
Desativado
Resolução da janela autónoma predefinida
Mostrar resoluções mais altas
- Apenas alguns dispositivos suportam a reprodução de vídeos em 2K/4K
+ Apenas alguns aparelhos suportam a reprodução de vídeos em 2K/4K
Janela
Lembrar tamanho e posição da janela
Janela
@@ -262,7 +262,7 @@
Transferir ficheiro de emissão
Adicionar a
Utilizar pesquisa rápida
- Esta opção permite que a pesquisa seja mais rápida mas diminui a qualidade da precisão
+ A busca inexata permite que a busca seja mais rápida diminuindo a precisão. Procurar por 5, 15 ou 25 segundos não funciona com isto.
Carregar miniaturas
Desative para parar o carregamento das miniaturas, poupar dados e utilização da memória. As alterações limpam a cache de imagem do disco e da memória.
Cache de imagens limpa
@@ -335,7 +335,7 @@
\n3. A transferência deveria iniciar (esse é o ficheiro de exportação)
Importe o seu perfil do SoundCloud digitando o URL ou a sua Id.:
\n
-\n1. Ative o modo de PC no navegador da Web (o site não está disponível para dispositivos móveis)
+\n1. Ative o modo de PC no navegador da Web (o site não está disponível para aparelhos móveis)
\n2. Aceda a este URL: %1$s
\n3. Inicie a sessão
\n4. Copie o URL do perfil em que foi redirecionado.
@@ -343,7 +343,7 @@
Controlos para velocidade de reprodução
Ritmo
Limpar histórico de visualizações
- Auto-aplicar uma emissão relacionada ao reproduzir a último emissão numa fila não repetitiva
+ Continuar terminando (sem repetição) a fila de reprodução anexando um fluxo relacionado
Mostrar dica \"Toque longo para colocar na fila\"
Mostrar dica quando o botão de fundo ou da janela for premido na página de detalhes do vídeo
Canais
@@ -464,7 +464,7 @@
Conferências
Pendente
Mostrar comentários
- Desativar para parar de mostrar os comentários
+ Desativar para ocultar comentários
Reprodução automática
- Comentário
@@ -497,8 +497,8 @@
Será-lhe solicitado para onde guardar cada transferência.
\nEscolha SAF se pretender transferir para um cartão SD externo
Usar SAF
- A estrutura de acesso ao armazenamento permite transferências para um cartão SD externo.
-\nNota: alguns dispositivos não são compatíveis
+ O \'Storage Access Framework\' permite transferências para um cartão SD externo.
+\nAlguns aparelhos não são compatíveis
Eliminar as posições de reprodução
Elimina todas as posições de reprodução
Eliminar todas as posições de reprodução\?
@@ -532,8 +532,8 @@
recuperando
Não é possível recuperar este descarregamento
Escolha uma instância
- Ativar miniatura do vídeo no ecrã de bloqueio
- Ao usar o reprodutor de fundo, uma miniatura de vídeo será exibida no ecrã de bloqueio
+ Miniatura do vídeo no ecrã de bloqueio
+ Uma miniatura de vídeo é mostrada no ecrã de bloqueio quando utilizando o leitor de fundo
Limpar histórico de descarregamentos
Apagar ficheiros descarregados
%1$s descarregamentos apagados
From eb144af0b9af0747b5de4e4c9126dc5a32842969 Mon Sep 17 00:00:00 2001
From: WaldiS
Date: Fri, 27 Mar 2020 15:23:32 +0000
Subject: [PATCH 0654/1194] Translated using Weblate (Polish)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-pl/strings.xml | 56 +++++++++++++++++++++++++-
1 file changed, 54 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index df908ebe2..579596d3c 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -551,11 +551,63 @@
Gotowe
Filmy
- - %d sekund
- - %d sekund
+ - %d sekunda
+ - %d sekundy
- %d sekund
Ze względu na ograniczenia ExoPlayer, czas trwania wyszukiwania został ustawiony na %d sekund
Wycisz
Wyłącz wyciszenie
+ Czy uważasz, że ładowanie kanałów jest zbyt powolne\? Jeśli tak, spróbuj włączyć szybkie ładowanie (możesz go zmienić w ustawieniach lub naciskając przycisk poniżej).
+\n
+\nNewPipe oferuje dwie strategie ładowania kanału:
+\n• Pobieranie całego kanału subskrypcji, który jest powolny, ale kompletny.
+\n• Korzystanie z dedykowanego punktu końcowego usługi, który jest szybki, ale zwykle nie jest kompletny.
+\n
+\nRóżnica między nimi polega na tym, że w szybkim zwykle brakuje pewnych informacji, takich jak czas trwania lub typ pozycji (nie można odróżnić filmów na żywo od zwykłych) i może zwrócić mniej pozycji.
+\n
+\nYouTube jest przykładem usługi, która oferuje tę szybką metodę z kanałem RSS.
+\n
+\nTak więc wybór sprowadza się do tego, co wolisz: prędkości lub precyzyjne informacje.
+ Wyłącz tryb szybki
+ Włącz tryb szybki
+ Dostępne w niektórych usługach jest zwykle znacznie szybsze, ale może zwrócić ograniczoną liczbę pozycji i często niekompletne informacje (np. Brak czasu trwania, typ pozycji, brak statusu na żywo).
+ Pobierz z dedykowanego kanału, jeśli jest dostępny
+ Zawsze aktualizuj
+ Czas po ostatniej aktualizacji, zanim subskrypcja zostanie uznana za nieaktualną — %s
+ Próg aktualizacji kanału
+ Kanał
+ Nowy
+ Czy chcesz usunąć tę grupę\?
+ Nazwa
+ Pusta nazwa grupy
+
+ - wybrany %d
+ - wybrano %d
+ - wybrano %d
+
+ Nie wybrano żadnej subskrypcji
+ Wybierz subskrypcje
+ Przetwarzam plik danych…
+ Ładowanie kanału…
+ Nie uruchamia się: %d
+ Najstarsza aktualizacja subskrypcji: %s
+ Grupy kanałów
+
+ - %d dzień
+ - %d dni
+ - %d dni
+
+
+ - %d godzina
+ - %d godziny
+ - %d godzin
+
+
+ - %d minuta
+ - %d minuty
+ - %d minut
+
+ Pomoc
+ \@string/app_name
\ No newline at end of file
From f133bbf499afd15629be62a887ec3f2ad1ad01d6 Mon Sep 17 00:00:00 2001
From: Mauricio Colli
Date: Thu, 26 Mar 2020 23:16:56 -0300
Subject: [PATCH 0655/1194] Introduce a proper way to find urls in a string
input
---
.../util/urlfinder/PatternsCompat.java | 360 ++++++++++++++++++
.../newpipe/util/urlfinder/UrlFinder.kt | 27 ++
.../newpipe/util/urlfinder/UrlFinderTest.kt | 99 +++++
3 files changed, 486 insertions(+)
create mode 100644 app/src/main/java/org/schabi/newpipe/util/urlfinder/PatternsCompat.java
create mode 100644 app/src/main/java/org/schabi/newpipe/util/urlfinder/UrlFinder.kt
create mode 100644 app/src/test/java/org/schabi/newpipe/util/urlfinder/UrlFinderTest.kt
diff --git a/app/src/main/java/org/schabi/newpipe/util/urlfinder/PatternsCompat.java b/app/src/main/java/org/schabi/newpipe/util/urlfinder/PatternsCompat.java
new file mode 100644
index 000000000..bbad56c37
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/util/urlfinder/PatternsCompat.java
@@ -0,0 +1,360 @@
+/* THIS FILE WAS MODIFIED, CHANGES ARE DOCUMENTED. */
+
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.schabi.newpipe.util.urlfinder;
+
+import androidx.annotation.RestrictTo;
+
+import java.util.regex.Pattern;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+
+/**
+ * Commonly used regular expression patterns.
+ */
+public final class PatternsCompat {
+ /**
+ * Regular expression to match all IANA top-level domains.
+ *
+ * List accurate as of 2015/11/24. List taken from:
+ * http://data.iana.org/TLD/tlds-alpha-by-domain.txt
+ * This pattern is auto-generated by frameworks/ex/common/tools/make-iana-tld-pattern.py
+ */
+ static final String IANA_TOP_LEVEL_DOMAINS =
+ "(?:"
+ + "(?:aaa|aarp|abb|abbott|abogado|academy|accenture|accountant|accountants|aco|active"
+ + "|actor|ads|adult|aeg|aero|afl|agency|aig|airforce|airtel|allfinanz|alsace|amica|amsterdam"
+ + "|android|apartments|app|apple|aquarelle|aramco|archi|army|arpa|arte|asia|associates"
+ + "|attorney|auction|audio|auto|autos|axa|azure|a[cdefgilmoqrstuwxz])"
+ + "|(?:band|bank|bar|barcelona|barclaycard|barclays|bargains|bauhaus|bayern|bbc|bbva"
+ + "|bcn|beats|beer|bentley|berlin|best|bet|bharti|bible|bid|bike|bing|bingo|bio|biz|black"
+ + "|blackfriday|bloomberg|blue|bms|bmw|bnl|bnpparibas|boats|bom|bond|boo|boots|boutique"
+ + "|bradesco|bridgestone|broadway|broker|brother|brussels|budapest|build|builders|business"
+ + "|buzz|bzh|b[abdefghijmnorstvwyz])"
+ + "|(?:cab|cafe|cal|camera|camp|cancerresearch|canon|capetown|capital|car|caravan|cards"
+ + "|care|career|careers|cars|cartier|casa|cash|casino|cat|catering|cba|cbn|ceb|center|ceo"
+ + "|cern|cfa|cfd|chanel|channel|chat|cheap|chloe|christmas|chrome|church|cipriani|cisco"
+ + "|citic|city|cityeats|claims|cleaning|click|clinic|clothing|cloud|club|clubmed|coach"
+ + "|codes|coffee|college|cologne|com|commbank|community|company|computer|comsec|condos"
+ + "|construction|consulting|contractors|cooking|cool|coop|corsica|country|coupons|courses"
+ + "|credit|creditcard|creditunion|cricket|crown|crs|cruises|csc|cuisinella|cymru|cyou|c[acdfghiklmnoruvwxyz])"
+ + "|(?:dabur|dad|dance|date|dating|datsun|day|dclk|deals|degree|delivery|dell|delta"
+ + "|democrat|dental|dentist|desi|design|dev|diamonds|diet|digital|direct|directory|discount"
+ + "|dnp|docs|dog|doha|domains|doosan|download|drive|durban|dvag|d[ejkmoz])"
+ + "|(?:earth|eat|edu|education|email|emerck|energy|engineer|engineering|enterprises"
+ + "|epson|equipment|erni|esq|estate|eurovision|eus|events|everbank|exchange|expert|exposed"
+ + "|express|e[cegrstu])"
+ + "|(?:fage|fail|fairwinds|faith|family|fan|fans|farm|fashion|feedback|ferrero|film"
+ + "|final|finance|financial|firmdale|fish|fishing|fit|fitness|flights|florist|flowers|flsmidth"
+ + "|fly|foo|football|forex|forsale|forum|foundation|frl|frogans|fund|furniture|futbol|fyi"
+ + "|f[ijkmor])"
+ + "|(?:gal|gallery|game|garden|gbiz|gdn|gea|gent|genting|ggee|gift|gifts|gives|giving"
+ + "|glass|gle|global|globo|gmail|gmo|gmx|gold|goldpoint|golf|goo|goog|google|gop|gov|grainger"
+ + "|graphics|gratis|green|gripe|group|gucci|guge|guide|guitars|guru|g[abdefghilmnpqrstuwy])"
+ + "|(?:hamburg|hangout|haus|healthcare|help|here|hermes|hiphop|hitachi|hiv|hockey|holdings"
+ + "|holiday|homedepot|homes|honda|horse|host|hosting|hoteles|hotmail|house|how|hsbc|hyundai"
+ + "|h[kmnrtu])"
+ + "|(?:ibm|icbc|ice|icu|ifm|iinet|immo|immobilien|industries|infiniti|info|ing|ink|institute"
+ + "|insure|int|international|investments|ipiranga|irish|ist|istanbul|itau|iwc|i[delmnoqrst])"
+ + "|(?:jaguar|java|jcb|jetzt|jewelry|jlc|jll|jobs|joburg|jprs|juegos|j[emop])"
+ + "|(?:kaufen|kddi|kia|kim|kinder|kitchen|kiwi|koeln|komatsu|krd|kred|kyoto|k[eghimnprwyz])"
+ + "|(?:lacaixa|lancaster|land|landrover|lasalle|lat|latrobe|law|lawyer|lds|lease|leclerc"
+ + "|legal|lexus|lgbt|liaison|lidl|life|lifestyle|lighting|limited|limo|linde|link|live"
+ + "|lixil|loan|loans|lol|london|lotte|lotto|love|ltd|ltda|lupin|luxe|luxury|l[abcikrstuvy])"
+ + "|(?:madrid|maif|maison|man|management|mango|market|marketing|markets|marriott|mba"
+ + "|media|meet|melbourne|meme|memorial|men|menu|meo|miami|microsoft|mil|mini|mma|mobi|moda"
+ + "|moe|moi|mom|monash|money|montblanc|mormon|mortgage|moscow|motorcycles|mov|movie|movistar"
+ + "|mtn|mtpc|mtr|museum|mutuelle|m[acdeghklmnopqrstuvwxyz])"
+ + "|(?:nadex|nagoya|name|navy|nec|net|netbank|network|neustar|new|news|nexus|ngo|nhk"
+ + "|nico|ninja|nissan|nokia|nra|nrw|ntt|nyc|n[acefgilopruz])"
+ + "|(?:obi|office|okinawa|omega|one|ong|onl|online|ooo|oracle|orange|org|organic|osaka"
+ + "|otsuka|ovh|om)"
+ + "|(?:page|panerai|paris|partners|parts|party|pet|pharmacy|philips|photo|photography"
+ + "|photos|physio|piaget|pics|pictet|pictures|ping|pink|pizza|place|play|playstation|plumbing"
+ + "|plus|pohl|poker|porn|post|praxi|press|pro|prod|productions|prof|properties|property"
+ + "|protection|pub|p[aefghklmnrstwy])"
+ + "|(?:qpon|quebec|qa)"
+ + "|(?:racing|realtor|realty|recipes|red|redstone|rehab|reise|reisen|reit|ren|rent|rentals"
+ + "|repair|report|republican|rest|restaurant|review|reviews|rich|ricoh|rio|rip|rocher|rocks"
+ + "|rodeo|rsvp|ruhr|run|rwe|ryukyu|r[eosuw])"
+ + "|(?:saarland|sakura|sale|samsung|sandvik|sandvikcoromant|sanofi|sap|sapo|sarl|saxo"
+ + "|sbs|sca|scb|schmidt|scholarships|school|schule|schwarz|science|scor|scot|seat|security"
+ + "|seek|sener|services|seven|sew|sex|sexy|shiksha|shoes|show|shriram|singles|site|ski"
+ + "|sky|skype|sncf|soccer|social|software|sohu|solar|solutions|sony|soy|space|spiegel|spreadbetting"
+ + "|srl|stada|starhub|statoil|stc|stcgroup|stockholm|studio|study|style|sucks|supplies"
+ + "|supply|support|surf|surgery|suzuki|swatch|swiss|sydney|systems|s[abcdeghijklmnortuvxyz])"
+ + "|(?:tab|taipei|tatamotors|tatar|tattoo|tax|taxi|team|tech|technology|tel|telefonica"
+ + "|temasek|tennis|thd|theater|theatre|tickets|tienda|tips|tires|tirol|today|tokyo|tools"
+ + "|top|toray|toshiba|tours|town|toyota|toys|trade|trading|training|travel|trust|tui|t[cdfghjklmnortvwz])"
+ + "|(?:ubs|university|uno|uol|u[agksyz])"
+ + "|(?:vacations|vana|vegas|ventures|versicherung|vet|viajes|video|villas|vin|virgin"
+ + "|vision|vista|vistaprint|viva|vlaanderen|vodka|vote|voting|voto|voyage|v[aceginu])"
+ + "|(?:wales|walter|wang|watch|webcam|website|wed|wedding|weir|whoswho|wien|wiki|williamhill"
+ + "|win|windows|wine|wme|work|works|world|wtc|wtf|w[fs])"
+ + "|(?:\u03b5\u03bb|\u0431\u0435\u043b|\u0434\u0435\u0442\u0438|\u043a\u043e\u043c|\u043c\u043a\u0434"
+ + "|\u043c\u043e\u043d|\u043c\u043e\u0441\u043a\u0432\u0430|\u043e\u043d\u043b\u0430\u0439\u043d"
+ + "|\u043e\u0440\u0433|\u0440\u0443\u0441|\u0440\u0444|\u0441\u0430\u0439\u0442|\u0441\u0440\u0431"
+ + "|\u0443\u043a\u0440|\u049b\u0430\u0437|\u0570\u0561\u0575|\u05e7\u05d5\u05dd|\u0627\u0631\u0627\u0645\u0643\u0648"
+ + "|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629"
+ + "|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0627\u06cc\u0631\u0627\u0646"
+ + "|\u0628\u0627\u0632\u0627\u0631|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633"
+ + "|\u0633\u0648\u062f\u0627\u0646|\u0633\u0648\u0631\u064a\u0629|\u0634\u0628\u0643\u0629"
+ + "|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0641\u0644\u0633\u0637\u064a\u0646"
+ + "|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0645\u0644\u064a\u0633\u064a\u0627"
+ + "|\u0645\u0648\u0642\u0639|\u0915\u0949\u092e|\u0928\u0947\u091f|\u092d\u093e\u0930\u0924"
+ + "|\u0938\u0902\u0917\u0920\u0928|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4"
+ + "|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd"
+ + "|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e04\u0e2d\u0e21|\u0e44\u0e17\u0e22"
+ + "|\u10d2\u10d4|\u307f\u3093\u306a|\u30b0\u30fc\u30b0\u30eb|\u30b3\u30e0|\u4e16\u754c"
+ + "|\u4e2d\u4fe1|\u4e2d\u56fd|\u4e2d\u570b|\u4e2d\u6587\u7f51|\u4f01\u4e1a|\u4f5b\u5c71"
+ + "|\u4fe1\u606f|\u5065\u5eb7|\u516b\u5366|\u516c\u53f8|\u516c\u76ca|\u53f0\u6e7e|\u53f0\u7063"
+ + "|\u5546\u57ce|\u5546\u5e97|\u5546\u6807|\u5728\u7ebf|\u5927\u62ff|\u5a31\u4e50|\u5de5\u884c"
+ + "|\u5e7f\u4e1c|\u6148\u5584|\u6211\u7231\u4f60|\u624b\u673a|\u653f\u52a1|\u653f\u5e9c"
+ + "|\u65b0\u52a0\u5761|\u65b0\u95fb|\u65f6\u5c1a|\u673a\u6784|\u6de1\u9a6c\u9521|\u6e38\u620f"
+ + "|\u70b9\u770b|\u79fb\u52a8|\u7ec4\u7ec7\u673a\u6784|\u7f51\u5740|\u7f51\u5e97|\u7f51\u7edc"
+ + "|\u8c37\u6b4c|\u96c6\u56e2|\u98de\u5229\u6d66|\u9910\u5385|\u9999\u6e2f|\ub2f7\ub137"
+ + "|\ub2f7\ucef4|\uc0bc\uc131|\ud55c\uad6d|xbox"
+ + "|xerox|xin|xn\\-\\-11b4c3d|xn\\-\\-1qqw23a|xn\\-\\-30rr7y|xn\\-\\-3bst00m|xn\\-\\-3ds443g"
+ + "|xn\\-\\-3e0b707e|xn\\-\\-3pxu8k|xn\\-\\-42c2d9a|xn\\-\\-45brj9c|xn\\-\\-45q11c|xn\\-\\-4gbrim"
+ + "|xn\\-\\-55qw42g|xn\\-\\-55qx5d|xn\\-\\-6frz82g|xn\\-\\-6qq986b3xl|xn\\-\\-80adxhks"
+ + "|xn\\-\\-80ao21a|xn\\-\\-80asehdb|xn\\-\\-80aswg|xn\\-\\-90a3ac|xn\\-\\-90ais|xn\\-\\-9dbq2a"
+ + "|xn\\-\\-9et52u|xn\\-\\-b4w605ferd|xn\\-\\-c1avg|xn\\-\\-c2br7g|xn\\-\\-cg4bki|xn\\-\\-clchc0ea0b2g2a9gcd"
+ + "|xn\\-\\-czr694b|xn\\-\\-czrs0t|xn\\-\\-czru2d|xn\\-\\-d1acj3b|xn\\-\\-d1alf|xn\\-\\-efvy88h"
+ + "|xn\\-\\-estv75g|xn\\-\\-fhbei|xn\\-\\-fiq228c5hs|xn\\-\\-fiq64b|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s"
+ + "|xn\\-\\-fjq720a|xn\\-\\-flw351e|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-gecrj9c"
+ + "|xn\\-\\-h2brj9c|xn\\-\\-hxt814e|xn\\-\\-i1b6b1a6a2e|xn\\-\\-imr513n|xn\\-\\-io0a7i"
+ + "|xn\\-\\-j1aef|xn\\-\\-j1amh|xn\\-\\-j6w193g|xn\\-\\-kcrx77d1x4a|xn\\-\\-kprw13d|xn\\-\\-kpry57d"
+ + "|xn\\-\\-kput3i|xn\\-\\-l1acc|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgb9awbf|xn\\-\\-mgba3a3ejt"
+ + "|xn\\-\\-mgba3a4f16a|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbab2bd|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e"
+ + "|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-mgbpl2fh|xn\\-\\-mgbtx2b|xn\\-\\-mgbx4cd0ab"
+ + "|xn\\-\\-mk1bu44c|xn\\-\\-mxtq1m|xn\\-\\-ngbc5azd|xn\\-\\-node|xn\\-\\-nqv7f|xn\\-\\-nqv7fs00ema"
+ + "|xn\\-\\-nyqy26a|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1acf|xn\\-\\-p1ai|xn\\-\\-pgbs0dh"
+ + "|xn\\-\\-pssy2u|xn\\-\\-q9jyb4c|xn\\-\\-qcka1pmc|xn\\-\\-qxam|xn\\-\\-rhqv96g|xn\\-\\-s9brj9c"
+ + "|xn\\-\\-ses554g|xn\\-\\-t60b56a|xn\\-\\-tckwe|xn\\-\\-unup4y|xn\\-\\-vermgensberater\\-ctb"
+ + "|xn\\-\\-vermgensberatung\\-pwb|xn\\-\\-vhquv|xn\\-\\-vuq861b|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a"
+ + "|xn\\-\\-xhq521b|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-y9a3aq|xn\\-\\-yfro4i67o"
+ + "|xn\\-\\-ygbi2ammx|xn\\-\\-zfr164b|xperia|xxx|xyz)"
+ + "|(?:yachts|yamaxun|yandex|yodobashi|yoga|yokohama|youtube|y[et])"
+ + "|(?:zara|zip|zone|zuerich|z[amw]))";
+
+ public static final Pattern IP_ADDRESS
+ = Pattern.compile(
+ "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]"
+ + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]"
+ + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
+ + "|[1-9][0-9]|[0-9]))");
+
+ /**
+ * Valid UCS characters defined in RFC 3987. Excludes space characters.
+ */
+ private static final String UCS_CHAR = "[" +
+ "\u00A0-\uD7FF" +
+ "\uF900-\uFDCF" +
+ "\uFDF0-\uFFEF" +
+ "\uD800\uDC00-\uD83F\uDFFD" +
+ "\uD840\uDC00-\uD87F\uDFFD" +
+ "\uD880\uDC00-\uD8BF\uDFFD" +
+ "\uD8C0\uDC00-\uD8FF\uDFFD" +
+ "\uD900\uDC00-\uD93F\uDFFD" +
+ "\uD940\uDC00-\uD97F\uDFFD" +
+ "\uD980\uDC00-\uD9BF\uDFFD" +
+ "\uD9C0\uDC00-\uD9FF\uDFFD" +
+ "\uDA00\uDC00-\uDA3F\uDFFD" +
+ "\uDA40\uDC00-\uDA7F\uDFFD" +
+ "\uDA80\uDC00-\uDABF\uDFFD" +
+ "\uDAC0\uDC00-\uDAFF\uDFFD" +
+ "\uDB00\uDC00-\uDB3F\uDFFD" +
+ "\uDB44\uDC00-\uDB7F\uDFFD" +
+ "&&[^\u00A0[\u2000-\u200A]\u2028\u2029\u202F\u3000]]";
+
+ /**
+ * Valid characters for IRI label defined in RFC 3987.
+ */
+ private static final String LABEL_CHAR = "a-zA-Z0-9" + UCS_CHAR;
+
+ /**
+ * Valid characters for IRI TLD defined in RFC 3987.
+ */
+ private static final String TLD_CHAR = "a-zA-Z" + UCS_CHAR;
+
+ /**
+ * RFC 1035 Section 2.3.4 limits the labels to a maximum 63 octets.
+ */
+ private static final String IRI_LABEL =
+ "[" + LABEL_CHAR + "](?:[" + LABEL_CHAR + "_\\-]{0,61}[" + LABEL_CHAR + "]){0,1}";
+
+ /**
+ * RFC 3492 references RFC 1034 and limits Punycode algorithm output to 63 characters.
+ */
+ private static final String PUNYCODE_TLD = "xn\\-\\-[\\w\\-]{0,58}\\w";
+
+ private static final String TLD = "(" + PUNYCODE_TLD + "|" + "[" + TLD_CHAR + "]{2,63}" +")";
+
+ private static final String HOST_NAME = "(" + IRI_LABEL + "\\.)+" + TLD;
+
+ public static final Pattern DOMAIN_NAME
+ = Pattern.compile("(" + HOST_NAME + "|" + IP_ADDRESS + ")");
+
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // CHANGED: Removed rtsp from supported protocols //
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ private static final String PROTOCOL = "(?i:http|https)://";
+
+ /* A word boundary or end of input. This is to stop foo.sure from matching as foo.su */
+ private static final String WORD_BOUNDARY = "(?:\\b|$|^)";
+
+ private static final String USER_INFO = "(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)"
+ + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_"
+ + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@";
+
+ private static final String PORT_NUMBER = "\\:\\d{1,5}";
+
+ private static final String PATH_AND_QUERY = "[/\\?](?:(?:[" + LABEL_CHAR
+ + ";/\\?:@&=#~" // plus optional query params
+ + "\\-\\.\\+!\\*'\\(\\),_\\$])|(?:%[a-fA-F0-9]{2}))*";
+
+ /**
+ * Regular expression pattern to match most part of RFC 3987
+ * Internationalized URLs, aka IRIs.
+ */
+ public static final Pattern WEB_URL = Pattern.compile("("
+ + "("
+ + "(?:" + PROTOCOL + "(?:" + USER_INFO + ")?" + ")?"
+ + "(?:" + DOMAIN_NAME + ")"
+ + "(?:" + PORT_NUMBER + ")?"
+ + ")"
+ + "(" + PATH_AND_QUERY + ")?"
+ + WORD_BOUNDARY
+ + ")");
+
+ /**
+ * Regular expression that matches known TLDs and punycode TLDs
+ */
+ private static final String STRICT_TLD = "(?:" +
+ IANA_TOP_LEVEL_DOMAINS + "|" + PUNYCODE_TLD + ")";
+
+ /**
+ * Regular expression that matches host names using {@link #STRICT_TLD}
+ */
+ private static final String STRICT_HOST_NAME = "(?:(?:" + IRI_LABEL + "\\.)+"
+ + STRICT_TLD + ")";
+
+ /**
+ * Regular expression that matches domain names using either {@link #STRICT_HOST_NAME} or
+ * {@link #IP_ADDRESS}
+ */
+ private static final Pattern STRICT_DOMAIN_NAME
+ = Pattern.compile("(?:" + STRICT_HOST_NAME + "|" + IP_ADDRESS + ")");
+
+ /**
+ * Regular expression that matches domain names without a TLD
+ */
+ private static final String RELAXED_DOMAIN_NAME =
+ "(?:" + "(?:" + IRI_LABEL + "(?:\\.(?=\\S))" +"?)+" + "|" + IP_ADDRESS + ")";
+
+ /**
+ * Regular expression to match strings that do not start with a supported protocol. The TLDs
+ * are expected to be one of the known TLDs.
+ */
+ private static final String WEB_URL_WITHOUT_PROTOCOL = "("
+ + WORD_BOUNDARY
+ + "(?
Date: Thu, 26 Mar 2020 23:18:14 -0300
Subject: [PATCH 0656/1194] Fix bug when searching for urls from shared content
---
.../org/schabi/newpipe/RouterActivity.java | 91 +++----------------
1 file changed, 15 insertions(+), 76 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
index 1be6e096a..1ed659e47 100644
--- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
@@ -9,12 +9,6 @@ import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.PreferenceManager;
-import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.app.NotificationCompat;
-import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
@@ -26,6 +20,12 @@ import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.NotificationCompat;
import androidx.fragment.app.FragmentManager;
import org.schabi.newpipe.download.DownloadDialog;
@@ -49,12 +49,11 @@ import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.ThemeHelper;
+import org.schabi.newpipe.util.urlfinder.UrlFinder;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
import java.util.List;
import icepick.Icepick;
@@ -625,78 +624,18 @@ public class RouterActivity extends AppCompatActivity {
// Utils
//////////////////////////////////////////////////////////////////////////*/
- /**
- * Removes invisible separators (\p{Z}) and punctuation characters including
- * brackets (\p{P}). See http://www.regular-expressions.info/unicode.html for
- * more details.
- */
- private final static String REGEX_REMOVE_FROM_URL = "[\\p{Z}\\p{P}]";
-
+ @Nullable
private String getUrl(Intent intent) {
- // first gather data and find service
- String videoUrl = null;
+ String foundUrl = null;
if (intent.getData() != null) {
- // this means the video was called though another app
- videoUrl = intent.getData().toString();
+ // Called from another app
+ foundUrl = intent.getData().toString();
} else if (intent.getStringExtra(Intent.EXTRA_TEXT) != null) {
- //this means that vidoe was called through share menu
- String extraText = intent.getStringExtra(Intent.EXTRA_TEXT);
- final String[] uris = getUris(extraText);
- videoUrl = uris.length > 0 ? uris[0] : null;
+ // Called from the share menu
+ final String extraText = intent.getStringExtra(Intent.EXTRA_TEXT);
+ foundUrl = UrlFinder.firstUrlFromInput(extraText);
}
- return videoUrl;
- }
-
- private String removeHeadingGibberish(final String input) {
- int start = 0;
- for (int i = input.indexOf("://") - 1; i >= 0; i--) {
- if (!input.substring(i, i + 1).matches("\\p{L}")) {
- start = i + 1;
- break;
- }
- }
- return input.substring(start, input.length());
- }
-
- private String trim(final String input) {
- if (input == null || input.length() < 1) {
- return input;
- } else {
- String output = input;
- while (output.length() > 0 && output.substring(0, 1).matches(REGEX_REMOVE_FROM_URL)) {
- output = output.substring(1);
- }
- while (output.length() > 0
- && output.substring(output.length() - 1, output.length()).matches(REGEX_REMOVE_FROM_URL)) {
- output = output.substring(0, output.length() - 1);
- }
- return output;
- }
- }
-
- /**
- * Retrieves all Strings which look remotely like URLs from a text.
- * Used if NewPipe was called through share menu.
- *
- * @param sharedText text to scan for URLs.
- * @return potential URLs
- */
- protected String[] getUris(final String sharedText) {
- final Collection result = new HashSet<>();
- if (sharedText != null) {
- final String[] array = sharedText.split("\\p{Space}");
- for (String s : array) {
- s = trim(s);
- if (s.length() != 0) {
- if (s.matches(".+://.+")) {
- result.add(removeHeadingGibberish(s));
- } else if (s.matches(".+\\..+")) {
- result.add("http://" + s);
- }
- }
- }
- }
- return result.toArray(new String[result.size()]);
+ return foundUrl;
}
}
From f9b718f1eb0c026b40f736eab21de59c86c319bb Mon Sep 17 00:00:00 2001
From: Mauricio Colli
Date: Sat, 28 Mar 2020 14:30:47 -0300
Subject: [PATCH 0657/1194] Use correct class for getting a vector drawable in
older APIs
---
.../main/java/org/schabi/newpipe/player/MainVideoPlayer.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
index b5e614bec..42759a5ed 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java
@@ -403,7 +403,8 @@ public final class MainVideoPlayer extends AppCompatActivity
}
protected void setMuteButton(final ImageButton muteButton, final boolean isMuted) {
- muteButton.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), isMuted ? R.drawable.ic_volume_off_white_72dp : R.drawable.ic_volume_up_white_72dp));
+ muteButton.setImageDrawable(AppCompatResources.getDrawable(getApplicationContext(),
+ isMuted ? R.drawable.ic_volume_off_white_72dp : R.drawable.ic_volume_up_white_72dp));
}
From b4cabe23e3f6cadf0e2cee6887319b3959c8ea28 Mon Sep 17 00:00:00 2001
From: Mauricio Colli
Date: Thu, 26 Mar 2020 23:58:01 -0300
Subject: [PATCH 0658/1194] Handle content not available exception more
comprehensively
---
.../newpipe/fragments/BaseStateFragment.java | 4 ++++
.../fragments/detail/VideoDetailFragment.java | 21 ++++++-------------
.../list/channel/ChannelFragment.java | 16 ++++++--------
3 files changed, 16 insertions(+), 25 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java
index 8e328266e..f9852b7b0 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java
@@ -17,6 +17,7 @@ import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R;
import org.schabi.newpipe.ReCaptchaActivity;
+import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction;
@@ -181,6 +182,9 @@ public abstract class BaseStateFragment extends BaseFragment implements ViewC
if (exception instanceof ReCaptchaException) {
onReCaptchaException((ReCaptchaException) exception);
return true;
+ } else if (exception instanceof ContentNotAvailableException) {
+ showError(getString(R.string.content_not_available), false);
+ return true;
} else if (exception instanceof IOException) {
showError(getString(R.string.network_error), true);
return true;
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index 86198650c..ebec8db0a 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -51,7 +51,6 @@ import org.schabi.newpipe.download.DownloadDialog;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.ServiceList;
-import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor;
@@ -1220,20 +1219,12 @@ public class VideoDetailFragment
protected boolean onError(Throwable exception) {
if (super.onError(exception)) return true;
- else if (exception instanceof ContentNotAvailableException) {
- showError(getString(R.string.content_not_available), false);
- } else {
- int errorId = exception instanceof YoutubeStreamExtractor.DecryptException
- ? R.string.youtube_signature_decryption_error
- : exception instanceof ParsingException
- ? R.string.parsing_error
- : R.string.general_error;
- onUnrecoverableError(exception,
- UserAction.REQUESTED_STREAM,
- NewPipe.getNameOfService(serviceId),
- url,
- errorId);
- }
+ int errorId = exception instanceof YoutubeStreamExtractor.DecryptException ? R.string.youtube_signature_decryption_error
+ : exception instanceof ExtractionException ? R.string.parsing_error
+ : R.string.general_error;
+
+ onUnrecoverableError(exception, UserAction.REQUESTED_STREAM,
+ NewPipe.getNameOfService(serviceId), url, errorId);
return true;
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java
index 3615b0922..40df990f9 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java
@@ -440,16 +440,12 @@ public class ChannelFragment extends BaseListInfoFragment {
protected boolean onError(Throwable exception) {
if (super.onError(exception)) return true;
- if (exception instanceof ContentNotAvailableException) {
- showError(getString(R.string.content_not_available), false);
- } else {
- int errorId = exception instanceof ExtractionException ? R.string.parsing_error : R.string.general_error;
- onUnrecoverableError(exception,
- UserAction.REQUESTED_CHANNEL,
- NewPipe.getNameOfService(serviceId),
- url,
- errorId);
- }
+ int errorId = exception instanceof ExtractionException
+ ? R.string.parsing_error : R.string.general_error;
+
+ onUnrecoverableError(exception, UserAction.REQUESTED_CHANNEL,
+ NewPipe.getNameOfService(serviceId), url, errorId);
+
return true;
}
From 949150f9ff81ad3f8e183bfc7a600b811e7d85b2 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sat, 28 Mar 2020 19:18:37 +0100
Subject: [PATCH 0659/1194] Update extractor version
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 49ac0ccfe..89911387b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -92,7 +92,7 @@ dependencies {
exclude module: 'support-annotations'
})
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:647e7cd45'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:69e0624e3'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'
From 3c3848d4f80f7d33dd53126c833452513a635399 Mon Sep 17 00:00:00 2001
From: vlt23
Date: Sat, 28 Mar 2020 20:12:17 +0100
Subject: [PATCH 0660/1194] Fix UI crash in Settings, Content (chinese
language)
---
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index edddc8588..1fb28f4de 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -546,10 +546,10 @@
- %d分钟
- - %小时
+ - %d小时
- - %天
+ - %d天
Feed组
最早订阅更新:%s
From bcd77031f3ff5fa2adcc17aa95ecf5ff62c8d2f6 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 25 Mar 2020 12:15:29 +0100
Subject: [PATCH 0661/1194] Add changelog
---
fastlane/metadata/android/en-US/changelogs/900.txt | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 fastlane/metadata/android/en-US/changelogs/900.txt
diff --git a/fastlane/metadata/android/en-US/changelogs/900.txt b/fastlane/metadata/android/en-US/changelogs/900.txt
new file mode 100644
index 000000000..b3086b13a
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/900.txt
@@ -0,0 +1,14 @@
+New
+• Subscription groups and sorted feeds
+• Mute button in players
+
+Improved
+• Allow opening music.youtube.com and media.ccc.de links in NewPipe
+• Relocate two settings from Appearance to Content
+• Hide 5, 15, 25 second seek options if inexact seek is enabled
+
+Fixed
+• some WebM videos are not seekable
+• database backup on Android P
+• crash when sharing a downloaded file
+• tons of YouTube extraction issue and more ...
\ No newline at end of file
From 7f21975971cbcf282ff0181d43351bfd3542e502 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 25 Mar 2020 12:16:18 +0100
Subject: [PATCH 0662/1194] release version 0.19.0 (900)
---
app/build.gradle | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 89911387b..37b03e4ae 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -12,8 +12,8 @@ android {
resValue "string", "app_name", "NewPipe"
minSdkVersion 19
targetSdkVersion 28
- versionCode 870
- versionName "0.18.7"
+ versionCode 900
+ versionName "0.19.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
From a01f1e64fe354f7d9d793a75818da091381abf6c Mon Sep 17 00:00:00 2001
From: ssantos
Date: Sun, 29 Mar 2020 18:52:34 +0000
Subject: [PATCH 0663/1194] Translated using Weblate (German)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-de/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 96be803f5..080b8f0e3 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -599,4 +599,5 @@
\nYouTube ist ein Beispiel für einen Service, der mit seinem RSS-Feed diese schnelle Methode anbietet.
\n
\nDie Entscheidung läuft also darauf hinaus, was dir lieber ist: Tempo oder genaue Informationen.
+ \@string/app_name
\ No newline at end of file
From 12bf409e10cfacdee396de06923f5e4ac2337a62 Mon Sep 17 00:00:00 2001
From: chr56
Date: Sun, 29 Mar 2020 22:24:33 +0000
Subject: [PATCH 0664/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index ba6f00ac7..4d45629a2 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -457,7 +457,7 @@
清除已完成的下载
停止
最大重试次数
- 取消下载前的最多重试着次数
+ 取消下载前的最多重试次数
在切换到移动流量网络时中断播放
切换至移动数据时可能有用,尽管一些下载无法被暂停
事件
@@ -546,15 +546,15 @@
帮助
- %d分钟
-
+
- %小时
-
+
- %天
-
+
Feed组
最早订阅更新:%s
@@ -565,13 +565,13 @@
未选中订阅
- 已选中%d
-
+
组名为空
名称
您要删除该组吗?
新建
- Feed
+ 订阅
Feed更新阈值
上次更新后,订阅被视为过时的时间-%s
始终更新
From 099d5570f4b0f14787a89ae83214590231a3c88a Mon Sep 17 00:00:00 2001
From: ssantos
Date: Mon, 30 Mar 2020 14:36:17 +0000
Subject: [PATCH 0665/1194] Translated using Weblate (Portuguese)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-pt/strings.xml | 84 +++++++++++++++++++++-----
1 file changed, 70 insertions(+), 14 deletions(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 907a60259..bb580098a 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -59,7 +59,7 @@
Conteúdo indisponível
Conteúdo
Conteúdo com restrição de idade
- Mostrar vídeo com restrição de idade. É possível permitir tal material nas Definições.
+ Mostrar vídeo com restrição de idade. Alterações serão possíveis nas configurações.
Não foi possível processar totalmente o site da Web
Não foi possível configurar o menu de transferências
As emissões em direto ainda não são suportadas
@@ -75,11 +75,11 @@
Vídeo
Áudio
Tentar novamente
- Negada a permissão para aceder ao armazenamento
+ Conceder acesso ao armazenamento primeiro
Toque em \"Pesquisar\" para iniciar
Reprodução automática
Reproduzir vídeo se o NewPipe for invocado por outra aplicação
- Direto
+ Ao vivo
Reportar um erro
Relatório
Transferências
@@ -170,7 +170,7 @@
Guardar termos de pesquisa localmente
Ver histórico
Manter histórico dos vídeos vistos
- Retomar ao ganhar foco
+ Retomar reprodução
Continuar reprodução após interrupções (ex. chamadas)
Reprodutor
Comportamento
@@ -345,7 +345,7 @@
Limpar histórico de visualizações
Continuar terminando (sem repetição) a fila de reprodução anexando um fluxo relacionado
Mostrar dica \"Toque longo para colocar na fila\"
- Mostrar dica quando o botão de fundo ou da janela for premido na página de detalhes do vídeo
+ Mostrar dica ao pressionar o botão \"Detalhes:\" no fundo ou no popup do vídeo.
Canais
Listas de reprodução
Faixas
@@ -359,7 +359,7 @@
Histórico de pesquisa eliminado.
1 elemento eliminado.
Não existe uma aplicação para reproduzir este ficheiro
- NewPipe é desenvolvido por voluntários que utilizam o tempo livre para lhe proporcionar uma melhor experiência. Retribua para ajudar os programadores a tornarem o NewPipe ainda melhor enquanto desfruta de um café.
+ NewPipe é desenvolvido por voluntários que utilizam o tempo livre deles para proporcionar-lhe a melhor experiência. Retribua para ajudar os programadores a tornarem o NewPipe ainda melhor enquanto desfruta de um café.
Retribuir
Política de privacidade do NewPipe
O projeto NewPipe leva a sua privacidade muito a sério. Sendo assim, o aplicativo não coleta nenhum dado sem seu consentimento.
@@ -378,7 +378,7 @@
Ajustar
Preencher
Modificar escala das legendas e o estilo de fundo. Tem que reiniciar a aplicação para aplicar as alterações.
- Ativar LeakCanary
+ LeakCanary
A monitorização de memória pode tornar a aplicação instável
Reportar os erros fora do ciclo de vida
Forçar relatórios de exceções de Rx não entregues fora do ciclo de vida de fragmento ou atividade após a eliminação
@@ -386,7 +386,7 @@
\n
\nDeseja continuar\?
Velocidade
- Dissociar (pode causar distorção)
+ Desenganchar (pode causar distorção)
Avanço rápido durante silêncio
Passo
Repor
@@ -414,10 +414,10 @@
Notificações para uma nova versão do NewPipe
Armazenamento externo indisponível
Não é possível transferir para o cartão SD. Repor a localização da pasta de transferências\?
- Erro ao ler os separadores guardados e serão usados os separadores predefinidos
+ Não foi possível ler as guias gravadas, portanto usando as guias predefinidas
Restaurar predefinições
Deseja restaurar as predefinições\?
- Número de subscritores não disponível
+ Contagem de assinantes indisponível
Quais os separadores que são mostrados na página principal
Seleção
Atualizações
@@ -447,7 +447,7 @@
O ficheiro não pode ser criado
A pasta de destino não pode ser criada
Permissão negada pelo sistema
- Ligação segura falhou
+ Não foi possível estabelecer uma ligação segura
Não foi possível encontrar o servidor
Não é possível ligar ao servidor
O servidor não envia dados
@@ -467,8 +467,8 @@
Desativar para ocultar comentários
Reprodução automática
- - Comentário
- - Comentários
+ - %s comentário
+ - %s comentários
Sem comentários
Não foi possível carregar os comentários
@@ -519,7 +519,7 @@
Duração da busca de avanço/retrocesso rápido
Instâncias do PeerTube
Defina as suas instâncias favoritas de PeerTube
- Encontre as instâncias que lhe melhor convêm em %s
+ Encontre as instâncias que gosta em %s
Adicionar instância
Digite o URL da instância
Falha ao validar a instância
@@ -542,4 +542,60 @@
Predefinição do sistema
Pressionar \"Aceitar\" quando terminar
Aceitar
+ \@string/app_name
+ Acha que o carregamento do feed é muito lento\? Se sim, tente ativar o carregamento rápido (pode alterá-lo nas configurações ou pressionando no botão abaixo).
+\n
+\nNewPipe oferece duas estratégias de carregamento de alimentação:
+\n- Obter todo o canal de subscrição, que é lento, mas completo.
+\n- Usando um endpoint de serviço dedicado, que é rápido, mas normalmente não completo.
+\n
+\nA diferença entre os dois é que o rápido geralmente carece de alguma informação, como a duração ou tipo do item (não consegue distinguir entre vídeos ao vivo e vídeos normais) e pode devolver menos itens.
+\n
+\nO YouTube é um exemplo de um serviço que oferece este método rápido com o seu feed RSS.
+\n
+\nAssim, a escolha resume-se ao que prefere: velocidade ou informação precisa.
+ Desativar modo rápido
+ Ativar o modo rápido
+ Disponível em alguns serviços, é geralmente muito mais rápido, mas pode devolver uma quantidade limitada de itens e muitas vezes informações incompletas (por exemplo, sem duração, tipo de item, sem estado ativo).
+ Buscar do feed dedicado quando disponível
+ Sempre atualizar
+ Tempo após a última atualização antes de uma assinatura ser considerada desatualizada - %s
+ Limite de atualização do feed
+ Feed
+ Novo
+ Quer apagar este grupo\?
+ Nome
+ O nome do grupo está vazio
+
+ - %d selecionada
+ - %d selecionadas
+
+ Nenhuma assinatura selecionada
+ Selecione assinaturas
+ Processando feed…
+ Carregando feed…
+ Não carregado: %d
+ Atualização da assinatura mais antiga: %s
+ Grupos de feed
+
+ - %d dia
+ - %d dias
+
+
+ - %d hora
+ - %d horas
+
+
+ - %d minuto
+ - %d minutos
+
+
+ - %d segundo
+ - %d segundos
+
+ Devido às restrições do ExoPlayer, a duração da procura foi definida para %d segundos
+ Ativar som
+ Silenciar
+ Ajuda
+ Vídeos
\ No newline at end of file
From 249e9c0b5292584199c92289b392ff0b2d7d5456 Mon Sep 17 00:00:00 2001
From: CaptainCrumble
Date: Mon, 30 Mar 2020 15:33:54 +0000
Subject: [PATCH 0666/1194] Translated using Weblate (Portuguese)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-pt/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index bb580098a..21be8d6d5 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -345,7 +345,7 @@
Limpar histórico de visualizações
Continuar terminando (sem repetição) a fila de reprodução anexando um fluxo relacionado
Mostrar dica \"Toque longo para colocar na fila\"
- Mostrar dica ao pressionar o botão \"Detalhes:\" no fundo ou no popup do vídeo.
+ Mostrar sugestão quando o botão popup ou ambiente de trabalho é pressionado na página de detalhes do vídeo
Canais
Listas de reprodução
Faixas
From 053440c4a8211e326b6a934d87779c97b4e1d4f4 Mon Sep 17 00:00:00 2001
From: Mauricio Colli
Date: Mon, 30 Mar 2020 15:43:22 -0300
Subject: [PATCH 0667/1194] Fix handling of null values in database migration
to version 3
Some values prior to this version could be null, this wasn't handled
properly before.
---
.../java/org/schabi/newpipe/database/Migrations.java | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/database/Migrations.java b/app/src/main/java/org/schabi/newpipe/database/Migrations.java
index ccb097a7b..c208853ce 100644
--- a/app/src/main/java/org/schabi/newpipe/database/Migrations.java
+++ b/app/src/main/java/org/schabi/newpipe/database/Migrations.java
@@ -81,8 +81,16 @@ public class Migrations {
" duration INTEGER NOT NULL, uploader TEXT NOT NULL, thumbnail_url TEXT, view_count INTEGER, textual_upload_date TEXT, upload_date INTEGER," +
" is_upload_date_approximation INTEGER)");
- database.execSQL("INSERT INTO streams_new (uid, service_id, url, title, stream_type, duration, uploader, thumbnail_url, view_count, textual_upload_date, upload_date, is_upload_date_approximation)"+
- " SELECT uid, service_id, url, title, stream_type, duration, uploader, thumbnail_url, NULL, NULL, NULL, NULL FROM streams");
+ database.execSQL("INSERT INTO streams_new (uid, service_id, url, title, stream_type," +
+ "duration, uploader, thumbnail_url, view_count," +
+ "textual_upload_date, upload_date, is_upload_date_approximation) " +
+
+ "SELECT uid, service_id, url, IFNULL(title, \"\"), IFNULL(stream_type, \"VIDEO_STREAM\")," +
+ "IFNULL(duration, 0), IFNULL(uploader, \"\"), IFNULL(thumbnail_url, \"\"), NULL," +
+ "NULL, NULL, NULL " +
+
+ "FROM streams " +
+ "WHERE url IS NOT NULL");
database.execSQL("DROP TABLE streams");
database.execSQL("ALTER TABLE streams_new RENAME TO streams");
From e6b31079978f0a6b17105a8ef3923f2045e81fab Mon Sep 17 00:00:00 2001
From: Mauricio Colli
Date: Mon, 30 Mar 2020 15:47:01 -0300
Subject: [PATCH 0668/1194] Add tests for database migration to version 3
handling null values
---
.../newpipe/database/AppDatabaseTest.kt | 43 ++++++++++++++++++-
1 file changed, 41 insertions(+), 2 deletions(-)
diff --git a/app/src/androidTest/java/org/schabi/newpipe/database/AppDatabaseTest.kt b/app/src/androidTest/java/org/schabi/newpipe/database/AppDatabaseTest.kt
index 9ecea9f86..2b7dcdf7c 100644
--- a/app/src/androidTest/java/org/schabi/newpipe/database/AppDatabaseTest.kt
+++ b/app/src/androidTest/java/org/schabi/newpipe/database/AppDatabaseTest.kt
@@ -25,6 +25,9 @@ class AppDatabaseTest {
private const val DEFAULT_DURATION = 480L
private const val DEFAULT_UPLOADER_NAME = "Uploader Test"
private const val DEFAULT_THUMBNAIL = "https://example.com/example.jpg"
+
+ private const val DEFAULT_SECOND_SERVICE_ID = 0
+ private const val DEFAULT_SECOND_URL = "https://www.youtube.com/watch?v=ncQU6iBn5Fc"
}
@get:Rule val testHelper = MigrationTestHelper(InstrumentationRegistry.getInstrumentation(),
@@ -45,6 +48,26 @@ class AppDatabaseTest {
put("uploader", DEFAULT_UPLOADER_NAME)
put("thumbnail_url", DEFAULT_THUMBNAIL)
})
+ insert("streams", SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply {
+ // put("uid", null)
+ put("service_id", DEFAULT_SECOND_SERVICE_ID)
+ put("url", DEFAULT_SECOND_URL)
+ // put("title", null)
+ // put("stream_type", null)
+ // put("duration", null)
+ // put("uploader", null)
+ // put("thumbnail_url", null)
+ })
+ insert("streams", SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply {
+ // put("uid", null)
+ put("service_id", DEFAULT_SERVICE_ID)
+ // put("url", null)
+ // put("title", null)
+ // put("stream_type", null)
+ // put("duration", null)
+ // put("uploader", null)
+ // put("thumbnail_url", null)
+ })
close()
}
@@ -53,9 +76,11 @@ class AppDatabaseTest {
val migratedDatabaseV3 = getMigratedDatabase()
val listFromDB = migratedDatabaseV3.streamDAO().all.blockingFirst()
- assertEquals(1, listFromDB.size)
- val streamFromMigratedDatabase = listFromDB.first()
+ // Only expect 2, the one with the null url will be ignored
+ assertEquals(2, listFromDB.size)
+
+ val streamFromMigratedDatabase = listFromDB[0]
assertEquals(DEFAULT_SERVICE_ID, streamFromMigratedDatabase.serviceId)
assertEquals(DEFAULT_URL, streamFromMigratedDatabase.url)
assertEquals(DEFAULT_TITLE, streamFromMigratedDatabase.title)
@@ -67,6 +92,20 @@ class AppDatabaseTest {
assertNull(streamFromMigratedDatabase.textualUploadDate)
assertNull(streamFromMigratedDatabase.uploadDate)
assertNull(streamFromMigratedDatabase.isUploadDateApproximation)
+
+ val secondStreamFromMigratedDatabase = listFromDB[1]
+ assertEquals(DEFAULT_SECOND_SERVICE_ID, secondStreamFromMigratedDatabase.serviceId)
+ assertEquals(DEFAULT_SECOND_URL, secondStreamFromMigratedDatabase.url)
+ assertEquals("", secondStreamFromMigratedDatabase.title)
+ // Should fallback to VIDEO_STREAM
+ assertEquals(StreamType.VIDEO_STREAM, secondStreamFromMigratedDatabase.streamType)
+ assertEquals(0, secondStreamFromMigratedDatabase.duration)
+ assertEquals("", secondStreamFromMigratedDatabase.uploader)
+ assertEquals("", secondStreamFromMigratedDatabase.thumbnailUrl)
+ assertNull(secondStreamFromMigratedDatabase.viewCount)
+ assertNull(secondStreamFromMigratedDatabase.textualUploadDate)
+ assertNull(secondStreamFromMigratedDatabase.uploadDate)
+ assertNull(secondStreamFromMigratedDatabase.isUploadDateApproximation)
}
private fun getMigratedDatabase(): AppDatabase {
From a5153f53752999aecd19911d270f17a5ef649776 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Tue, 31 Mar 2020 00:20:13 +0200
Subject: [PATCH 0669/1194] Improve database migration SQL statement
---
app/src/main/java/org/schabi/newpipe/database/Migrations.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/database/Migrations.java b/app/src/main/java/org/schabi/newpipe/database/Migrations.java
index c208853ce..afefb2fd1 100644
--- a/app/src/main/java/org/schabi/newpipe/database/Migrations.java
+++ b/app/src/main/java/org/schabi/newpipe/database/Migrations.java
@@ -85,8 +85,8 @@ public class Migrations {
"duration, uploader, thumbnail_url, view_count," +
"textual_upload_date, upload_date, is_upload_date_approximation) " +
- "SELECT uid, service_id, url, IFNULL(title, \"\"), IFNULL(stream_type, \"VIDEO_STREAM\")," +
- "IFNULL(duration, 0), IFNULL(uploader, \"\"), IFNULL(thumbnail_url, \"\"), NULL," +
+ "SELECT uid, service_id, url, ifnull(title, ''), ifnull(stream_type, 'VIDEO_STREAM')," +
+ "ifnull(duration, 0), ifnull(uploader, ''), ifnull(thumbnail_url, ''), NULL," +
"NULL, NULL, NULL " +
"FROM streams " +
From ba151a8b839ba14c4c0148cc90c506ed97e72fa0 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Tue, 31 Mar 2020 00:24:13 +0200
Subject: [PATCH 0670/1194] Release 0.19.1
---
app/build.gradle | 4 ++--
fastlane/metadata/android/en-US/changelogs/910.txt | 1 +
2 files changed, 3 insertions(+), 2 deletions(-)
create mode 100644 fastlane/metadata/android/en-US/changelogs/910.txt
diff --git a/app/build.gradle b/app/build.gradle
index 37b03e4ae..92c00c372 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -12,8 +12,8 @@ android {
resValue "string", "app_name", "NewPipe"
minSdkVersion 19
targetSdkVersion 28
- versionCode 900
- versionName "0.19.0"
+ versionCode 910
+ versionName "0.19.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
diff --git a/fastlane/metadata/android/en-US/changelogs/910.txt b/fastlane/metadata/android/en-US/changelogs/910.txt
new file mode 100644
index 000000000..f3e6891dd
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/910.txt
@@ -0,0 +1 @@
+Fixed database migration which prevented NewPipe from starting in some rare cases.
\ No newline at end of file
From 1585ca7c8509d3cb0a2a1a565434e10c099c4bf7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Gajdo=C5=A1?=
Date: Tue, 31 Mar 2020 10:55:52 +0000
Subject: [PATCH 0671/1194] Translated using Weblate (Slovak)
Currently translated at 94.2% (528 of 560 strings)
---
app/src/main/res/values-sk/strings.xml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 5dfb266e5..5127faa6b 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -20,11 +20,11 @@
Tu sú uložené stiahnuté video súbory
Vyberte adresár pre ukladanie video súborov
Adresár pre stiahnuté audio
- Vložte cestu kam sa budú ukladať zvukové súbory
+ Vyberte adresár pre ukladanie audio súborov
Tu sú uložené stiahnuté audio súbory
Štandardné rozlíšenie
Prehrať cez Kodi
- Aplikácia Kore nie je nainštalovaná. Chcete ju nainštalovať?
+ Nainštalovať chýbajúcu aplikáciu Kore\?
Zobraziť možnosť \"Prehrať cez Kodi\"
Zobrazovať možnosť prehrať video cez multimediálne centrum Kodi
Zvuk
@@ -57,7 +57,7 @@
(Experimentálne) Vyžadovať preberanie cez Tor pre väčšie súkromie (streamovanie videa momentálne nie je podporované).
Nemožno vytvoriť adresár na preberanie \'%1$s\'
Adresár na preberanie bol vytvorený \'%1$s\'
- Začnite vyhľadaním obsahu
+ Ťuknite na \"Vyhľadávanie\" pre začatie
Automatické prehrávanie
Prehrá video pri zavolaní NewPipe inou aplikáciou
Obsah
@@ -120,7 +120,7 @@
Spustiť v okne
Tieto práva sú potrebné pre
\nprehrávanie v mini okne
- NewPipe v okne
+ Popup mód
Preferovaný formát videa
Prehrávanie v mini okne
Vypnuté
@@ -132,7 +132,7 @@
Filter
Obnoviť
Vyčistiť
- Odoberie audio pri NIEKTORÝCH rozlíšeniach
+ Odoberie audio pri niektorých rozlíšeniach
Zapamätať si veľkosť a pozíciu mini okna
Zapamätať si posledné nastavenie veľkosti a pozície mini okna
Ovládanie prehrávača gestami
@@ -542,7 +542,7 @@
Sťahovanie nemožno obnoviť
Vyberte inštanciu
Náhľad videa na uzamknutej obrazovke
- Pri videu na pozadí sa na zamknutej obrazovke zobrazí náhľad
+ Pri prehrávaní videa na pozadí sa na zamknutej obrazovke zobrazí náhľad
Vymazať históriu sťahovania
Vymazať stiahnuté súbory
%1$s odstránených
From e976b3e43eb9e1dbfad808b439d26bd81e8e3ca1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vojt=C4=9Bch=20=C5=A0amla?=
Date: Tue, 31 Mar 2020 05:30:10 +0000
Subject: [PATCH 0672/1194] Translated using Weblate (Czech)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-cs/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 977d38c02..8fabdba67 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -559,8 +559,8 @@ otevření ve vyskakovacím okně
- %d vteřin
Kvůli omezením ExoPlayer bylo prohledávání nastaveno na %d vteřin
- Umlčet
- Odumlčet
+ Ztišit
+ Obnovit hlasitost
\@string/app_name
Nápověda
From 8b73d2d39fb771c6a5f39424d097d74414fd4805 Mon Sep 17 00:00:00 2001
From: opusforlife2
Date: Tue, 31 Mar 2020 16:11:44 +0000
Subject: [PATCH 0673/1194] Translated using Weblate (English)
Currently translated at 99.8% (559 of 560 strings)
---
app/src/main/res/values/strings.xml | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ea1cb31c8..ef09be9f4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -599,25 +599,21 @@
- %d second
- %d seconds
-
- %d minute
- %d minutes
-
- %d hour
- %d hours
-
- %d day
- %d days
-
What\'s New
- Feed groups
+ Channel groups
Oldest subscription update: %s
Not loaded: %d
Loading feed…
@@ -632,7 +628,6 @@
Name
Do you want to delete this group?
New
-
Feed
Feed update threshold
Time after last update before a subscription is considered outdated — %s
From 00a89061288d31d4335e71c92c3eef93d2eb1c3f Mon Sep 17 00:00:00 2001
From: Stypox
Date: Wed, 1 Apr 2020 09:08:03 +0200
Subject: [PATCH 0674/1194] Fix mute button causing crashes on API 19
Using rootView.getContext() because getApplicationContext() didn't work (it was probably missing information about theme)
---
.../newpipe/player/ServicePlayerActivity.java | 25 ++++++++-----------
1 file changed, 10 insertions(+), 15 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
index 113592b47..aff3586c8 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -3,17 +3,9 @@ package org.schabi.newpipe.player;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
-import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
-
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.appcompat.widget.Toolbar;
-import androidx.recyclerview.widget.ItemTouchHelper;
-
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@@ -26,6 +18,12 @@ import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+import androidx.recyclerview.widget.ItemTouchHelper;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
@@ -698,13 +696,10 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
item.setTitle(player.isMuted() ? R.string.unmute : R.string.mute);
//2) Icon change accordingly to current App Theme
- item.setIcon(player.isMuted() ? getThemedDrawable(R.attr.volume_off) : getThemedDrawable(R.attr.volume_on));
+ // using rootView.getContext() because getApplicationContext() didn't work
+ item.setIcon(player.isMuted()
+ ? ThemeHelper.resolveResourceIdFromAttr(rootView.getContext(), R.attr.volume_off)
+ : ThemeHelper.resolveResourceIdFromAttr(rootView.getContext(), R.attr.volume_on));
}
}
-
- private Drawable getThemedDrawable(int attribute) {
- return getResources().getDrawable(
- getTheme().obtainStyledAttributes(R.style.Theme_AppCompat, new int[]{attribute})
- .getResourceId(0, 0));
- }
}
From ff4b13245cdaed5b9766ab3da31374b44e514750 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Wed, 1 Apr 2020 06:21:16 +0000
Subject: [PATCH 0675/1194] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index a177f29db..5f867a3fd 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -547,17 +547,17 @@
說明
- %d 分鐘
-
+
- %d 小時
-
+
- %d 天
-
+
- Feed 群組
+ 頻道群組
最舊訂閱更新:%s
未載入:%d
正在載入 feed……
@@ -566,7 +566,7 @@
未選取訂閱
- 已選取 %d
-
+
清空群組名稱
名稱
From 96086b7733fac4bc982c4ad77a7c0c1b823b637a Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Wed, 1 Apr 2020 15:09:54 -0300
Subject: [PATCH 0676/1194] code cleanup
---
.../org/schabi/newpipe/streams/DataReader.java | 5 +++++
.../org/schabi/newpipe/streams/Mp4DashReader.java | 14 +++++---------
.../schabi/newpipe/streams/Mp4FromDashWriter.java | 2 +-
3 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java
index 75b55cd73..8c57d8978 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java
@@ -69,6 +69,11 @@ public class DataReader {
return primitive[0] << 24 | primitive[1] << 16 | primitive[2] << 8 | primitive[3];
}
+ public long readUnsignedInt() throws IOException {
+ long value = readInt();
+ return value & 0xffffffffL;
+ }
+
public short readShort() throws IOException {
primitiveRead(SHORT_SIZE);
return (short) (primitive[0] << 8 | primitive[1]);
diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4DashReader.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4DashReader.java
index 0cfd856e1..b7efa038e 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/Mp4DashReader.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4DashReader.java
@@ -294,10 +294,6 @@ public class Mp4DashReader {
- private long readUint() throws IOException {
- return stream.readInt() & 0xffffffffL;
- }
-
public static boolean hasFlag(int flags, int mask) {
return (flags & mask) == mask;
}
@@ -317,7 +313,7 @@ public class Mp4DashReader {
private Box readBox() throws IOException {
Box b = new Box();
b.offset = stream.position();
- b.size = stream.readInt();
+ b.size = stream.readUnsignedInt();
b.type = stream.readInt();
if (b.size == 1) {
@@ -478,7 +474,7 @@ public class Mp4DashReader {
private long parse_tfdt() throws IOException {
int version = stream.read();
stream.skipBytes(3);// flags
- return version == 0 ? readUint() : stream.readLong();
+ return version == 0 ? stream.readUnsignedInt() : stream.readLong();
}
private Trun parse_trun() throws IOException {
@@ -551,7 +547,7 @@ public class Mp4DashReader {
stream.skipBytes(2 * (version == 0 ? 4 : 8));
Mvhd obj = new Mvhd();
- obj.timeScale = readUint();
+ obj.timeScale = stream.readUnsignedInt();
// chunkDuration
stream.skipBytes(version == 0 ? 4 : 8);
@@ -563,7 +559,7 @@ public class Mp4DashReader {
// predefined
stream.skipBytes(76);
- obj.nextTrackId = readUint();
+ obj.nextTrackId = stream.readUnsignedInt();
return obj;
}
@@ -582,7 +578,7 @@ public class Mp4DashReader {
stream.skipBytes(4);// reserved
- obj.duration = version == 0 ? readUint() : stream.readLong();
+ obj.duration = version == 0 ? stream.readUnsignedInt() : stream.readLong();
stream.skipBytes(2 * 4);// reserved
diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
index 64e4534cb..67f68d3a7 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
@@ -46,7 +46,7 @@ public class Mp4FromDashWriter {
private int overrideMainBrand = 0x00;
- private ArrayList compatibleBrands = new ArrayList<>(5);
+ private final ArrayList compatibleBrands = new ArrayList<>(5);
public Mp4FromDashWriter(SharpStream... sources) throws IOException {
for (SharpStream src : sources) {
From 62d934dd8e89cc751c90e0c6a9ec36ea606cfbee Mon Sep 17 00:00:00 2001
From: kapodamy
Date: Wed, 1 Apr 2020 15:11:57 -0300
Subject: [PATCH 0677/1194] fix integer overflows
* available() method in ChunkFileInputStream.java
* free "ahead space" calculation in CircularFileWriter.java
---
app/src/main/java/us/shandian/giga/io/ChunkFileInputStream.java | 2 +-
app/src/main/java/us/shandian/giga/io/CircularFileWriter.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/us/shandian/giga/io/ChunkFileInputStream.java b/app/src/main/java/us/shandian/giga/io/ChunkFileInputStream.java
index 98015e37e..f7edf3975 100644
--- a/app/src/main/java/us/shandian/giga/io/ChunkFileInputStream.java
+++ b/app/src/main/java/us/shandian/giga/io/ChunkFileInputStream.java
@@ -104,7 +104,7 @@ public class ChunkFileInputStream extends SharpStream {
@Override
public long available() {
- return (int) (length - position);
+ return length - position;
}
@SuppressWarnings("EmptyCatchBlock")
diff --git a/app/src/main/java/us/shandian/giga/io/CircularFileWriter.java b/app/src/main/java/us/shandian/giga/io/CircularFileWriter.java
index 102580570..d3dde7835 100644
--- a/app/src/main/java/us/shandian/giga/io/CircularFileWriter.java
+++ b/app/src/main/java/us/shandian/giga/io/CircularFileWriter.java
@@ -221,7 +221,7 @@ public class CircularFileWriter extends SharpStream {
available = out.length - offsetOut;
}
- int length = Math.min(len, (int) available);
+ int length = Math.min(len, (int) Math.min(Integer.MAX_VALUE, available));
out.write(b, off, length);
len -= length;
From 08d37a4befb5366b743d879c756639db38460150 Mon Sep 17 00:00:00 2001
From: CE4
Date: Thu, 2 Apr 2020 06:00:22 +0000
Subject: [PATCH 0678/1194] Translated using Weblate (German)
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-de/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 080b8f0e3..e18a53c51 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -574,7 +574,7 @@
Möchtest du diese Gruppe löschen\?
Neu
Immer aktualisieren
- Feed-Gruppen
+ Channel-Gruppen
Nicht geladen: %d
Feed laden…
Feed verarbeiten…
From 65d5303765433b27d5f141de5c7e5243e67c9c0c Mon Sep 17 00:00:00 2001
From: Xiang Xu
Date: Thu, 2 Apr 2020 00:45:35 +0000
Subject: [PATCH 0679/1194] Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (560 of 560 strings)
---
app/src/main/res/values-b+zh+HANS+CN/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index 4d45629a2..79b275ec4 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -556,7 +556,7 @@
- %天
- Feed组
+ 频道组
最早订阅更新:%s
未加载: %d
正在加载feed…
From ea917c82b63ae906a8a3f086fdd03b0bf356dc2f Mon Sep 17 00:00:00 2001
From: Kik Ki
Date: Thu, 2 Apr 2020 02:47:24 +0000
Subject: [PATCH 0680/1194] Translated using Weblate (Thai)
Currently translated at 49.6% (278 of 560 strings)
---
app/src/main/res/values-th/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index b4f506158..5ac5f670d 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -18,7 +18,7 @@
แชร์ด้วย
เลือกบราวเซอร์
หมุน
- ใช้แอปเล่นวีดีโอภายนอก
+ Use external video player
ใช้แอปเล่นเสียงภายนอก
NewPipe โหมดป๊อปอัพ
ติดตาม
@@ -434,7 +434,7 @@
หยุดชั่วคราวเมื่อเปลี่ยนเป็นข้อมูลมือถือ
การดาวน์โหลดที่ไม่สามารถหยุดพักได้จะเริ่มต้นใหม่
ปิด
- บางความละเอียดอาจไม่มีเสียง
+ Removes audio at some resolutions
แคช metadate ถูกลบแล้ว
เล่นต่อหลังจากการขัดจังหวะ
เล่นต่อ
From 819e52cab3823c4a8e900f0f5ece87fcb8a34d4c Mon Sep 17 00:00:00 2001
From: wb9688
Date: Fri, 27 Mar 2020 20:45:26 +0100
Subject: [PATCH 0681/1194] Check code style with Checkstyle
---
app/build.gradle | 46 +++++++++++-
checkstyle.xml | 184 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 229 insertions(+), 1 deletion(-)
create mode 100644 checkstyle.xml
diff --git a/app/build.gradle b/app/build.gradle
index 92c00c372..893885c6d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,6 +2,7 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
+apply plugin: 'checkstyle'
android {
compileSdkVersion 28
@@ -81,11 +82,54 @@ ext {
icepickLibVersion = '3.2.0'
stethoLibVersion = '1.5.0'
markwonVersion = '4.2.1'
+ checkstyleVersion = '8.31'
}
+checkstyle {
+ configFile rootProject.file('checkstyle.xml')
+ ignoreFailures false
+ showViolations true
+ toolVersion = "${checkstyleVersion}"
+}
+
+task runCheckstyle(type: Checkstyle) {
+ source 'src'
+ include '**/*.java'
+ exclude '**/gen/**'
+ exclude '**/R.java'
+ exclude '**/BuildConfig.java'
+ exclude 'main/java/us/shandian/giga/**'
+ exclude 'main/java/org/schabi/newpipe/streams/**'
+
+ // empty classpath
+ classpath = files()
+
+ showViolations true
+
+ reports {
+ xml.enabled true
+ html.enabled true
+ }
+}
+
+tasks.withType(Checkstyle).each {
+ checkstyleTask -> checkstyleTask.doLast {
+ reports.all { report ->
+ def outputFile = report.destination
+ if (outputFile.exists() && outputFile.text.contains("severity=\"error\"")) {
+ throw new GradleException("There were checkstyle errors! For more info check $outputFile")
+ }
+ }
+ }
+}
+
+preBuild.dependsOn runCheckstyle
+
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation "com.puppycrawl.tools:checkstyle:${checkstyleVersion}"
+
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation "android.arch.persistence.room:testing:1.1.1"
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
@@ -164,4 +208,4 @@ static String getGitWorkingBranch() {
// git was not found
return ""
}
-}
\ No newline at end of file
+}
diff --git a/checkstyle.xml b/checkstyle.xml
new file mode 100644
index 000000000..8968d57c6
--- /dev/null
+++ b/checkstyle.xml
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From fda5405e48f7cb1f4f4b9df89052d55c90e8b167 Mon Sep 17 00:00:00 2001
From: wb9688
Date: Tue, 31 Mar 2020 19:20:15 +0200
Subject: [PATCH 0682/1194] Improve code style to be more consistent
---
.../newpipe/database/AppDatabaseTest.kt | 7 +-
.../schabi/newpipe/report/ErrorInfoTest.java | 12 +-
.../java/org/schabi/newpipe/DebugApp.java | 3 +-
...agmentStatePagerAdapterMenuWorkaround.java | 67 +-
.../material/appbar/FlingBehavior.java | 26 +-
.../schabi/newpipe/ActivityCommunicator.java | 14 +-
app/src/main/java/org/schabi/newpipe/App.java | 71 +-
.../java/org/schabi/newpipe/BaseFragment.java | 65 +-
.../newpipe/CheckForNewAppVersionTask.java | 242 +++---
.../org/schabi/newpipe/DownloaderImpl.java | 127 +--
.../java/org/schabi/newpipe/ExitActivity.java | 25 +-
.../org/schabi/newpipe/ImageDownloader.java | 7 +-
.../java/org/schabi/newpipe/MainActivity.java | 235 +++---
.../org/schabi/newpipe/NewPipeDatabase.java | 8 +-
.../newpipe/PanicResponderActivity.java | 10 +-
.../org/schabi/newpipe/ReCaptchaActivity.java | 43 +-
.../org/schabi/newpipe/RouterActivity.java | 282 +++++--
.../schabi/newpipe/about/AboutActivity.java | 109 +--
.../org/schabi/newpipe/about/License.java | 27 +-
.../schabi/newpipe/about/LicenseFragment.java | 47 +-
.../newpipe/about/LicenseFragmentHelper.java | 159 ++--
.../newpipe/about/SoftwareComponent.java | 58 +-
.../newpipe/about/StandardLicenses.java | 19 +-
.../schabi/newpipe/database/AppDatabase.java | 6 +
.../org/schabi/newpipe/database/BasicDAO.java | 14 +-
.../schabi/newpipe/database/Converters.java | 25 +-
.../schabi/newpipe/database/LocalItem.java | 4 +-
.../schabi/newpipe/database/Migrations.java | 166 ++--
.../history/dao/SearchHistoryDAO.java | 16 +-
.../history/dao/StreamHistoryDAO.java | 49 +-
.../history/model/SearchHistoryEntry.java | 17 +-
.../history/model/StreamHistoryEntity.java | 23 +-
.../playlist/PlaylistMetadataEntry.java | 13 +-
.../database/playlist/dao/PlaylistDAO.java | 6 +-
.../playlist/dao/PlaylistRemoteDAO.java | 23 +-
.../playlist/dao/PlaylistStreamDAO.java | 56 +-
.../playlist/model/PlaylistEntity.java | 16 +-
.../playlist/model/PlaylistRemoteEntity.java | 38 +-
.../playlist/model/PlaylistStreamEntity.java | 27 +-
.../database/stream/dao/StreamStateDAO.java | 10 +-
.../database/stream/model/StreamEntity.kt | 3 +-
.../stream/model/StreamStateEntity.java | 32 +-
.../database/subscription/SubscriptionDAO.kt | 2 +-
.../subscription/SubscriptionEntity.java | 65 +-
.../newpipe/download/DownloadActivity.java | 17 +-
.../newpipe/download/DownloadDialog.java | 357 ++++----
.../newpipe/fragments/BackPressable.java | 4 +-
.../newpipe/fragments/BaseStateFragment.java | 151 ++--
.../newpipe/fragments/BlankFragment.java | 8 +-
.../newpipe/fragments/EmptyFragment.java | 6 +-
.../newpipe/fragments/MainFragment.java | 65 +-
.../fragments/OnScrollBelowItemsListener.java | 17 +-
.../newpipe/fragments/ViewContract.java | 3 +
.../newpipe/fragments/detail/StackItem.java | 12 +-
.../newpipe/fragments/detail/TabAdaptor.java | 35 +-
.../fragments/detail/VideoDetailFragment.java | 570 +++++++------
.../fragments/list/BaseListFragment.java | 130 +--
.../fragments/list/BaseListInfoFragment.java | 52 +-
.../list/channel/ChannelFragment.java | 234 +++---
.../list/comments/CommentsFragment.java | 65 +-
.../list/kiosk/DefaultKioskFragment.java | 10 +-
.../fragments/list/kiosk/KioskFragment.java | 67 +-
.../list/playlist/PlaylistFragment.java | 173 ++--
.../fragments/list/search/SearchFragment.java | 433 ++++++----
.../fragments/list/search/SuggestionItem.java | 4 +-
.../list/search/SuggestionListAdapter.java | 70 +-
.../list/videos/RelatedVideosFragment.java | 141 ++--
.../newpipe/info_list/InfoItemBuilder.java | 45 +-
.../newpipe/info_list/InfoItemDialog.java | 5 +-
.../newpipe/info_list/InfoListAdapter.java | 178 ++--
.../holder/ChannelGridInfoItemHolder.java | 8 +-
.../holder/ChannelInfoItemHolder.java | 14 +-
.../holder/ChannelMiniInfoItemHolder.java | 15 +-
.../holder/CommentsInfoItemHolder.java | 11 +-
.../holder/CommentsMiniInfoItemHolder.java | 72 +-
.../info_list/holder/InfoItemHolder.java | 13 +-
.../holder/PlaylistGridInfoItemHolder.java | 10 +-
.../holder/PlaylistInfoItemHolder.java | 3 +-
.../holder/PlaylistMiniInfoItemHolder.java | 17 +-
.../holder/StreamGridInfoItemHolder.java | 7 +-
.../holder/StreamInfoItemHolder.java | 34 +-
.../holder/StreamMiniInfoItemHolder.java | 38 +-
.../newpipe/local/BaseLocalListFragment.java | 114 ++-
.../newpipe/local/HeaderFooterHolder.java | 7 +-
.../newpipe/local/LocalItemBuilder.java | 6 +-
.../newpipe/local/LocalItemListAdapter.java | 153 ++--
.../local/bookmark/BookmarkFragment.java | 208 ++---
.../local/dialog/PlaylistAppendDialog.java | 28 +-
.../local/dialog/PlaylistCreationDialog.java | 13 +-
.../newpipe/local/dialog/PlaylistDialog.java | 14 +-
.../schabi/newpipe/local/feed/FeedFragment.kt | 13 +-
.../local/history/HistoryEntryAdapter.java | 27 +-
.../local/history/HistoryListener.java | 34 -
.../local/history/HistoryRecordManager.java | 28 +-
.../history/StatisticsPlaylistFragment.java | 212 ++---
.../newpipe/local/holder/LocalItemHolder.java | 16 +-
.../holder/LocalPlaylistGridItemHolder.java | 8 +-
.../local/holder/LocalPlaylistItemHolder.java | 14 +-
.../LocalPlaylistStreamGridItemHolder.java | 8 +-
.../holder/LocalPlaylistStreamItemHolder.java | 62 +-
.../LocalStatisticStreamGridItemHolder.java | 8 +-
.../LocalStatisticStreamItemHolder.java | 55 +-
.../local/holder/PlaylistItemHolder.java | 12 +-
.../holder/RemotePlaylistGridItemHolder.java | 8 +-
.../holder/RemotePlaylistItemHolder.java | 19 +-
.../local/playlist/LocalPlaylistFragment.java | 270 +++---
.../local/playlist/LocalPlaylistManager.java | 13 +-
.../ImportConfirmationDialog.java | 26 +-
.../subscription/SubscriptionFragment.kt | 12 +-
.../SubscriptionsImportFragment.java | 84 +-
.../subscription/dialog/FeedGroupDialog.kt | 20 +-
.../dialog/FeedGroupReorderDialog.kt | 7 +-
.../local/subscription/item/ChannelItem.kt | 2 +-
.../subscription/item/EmptyPlaceholderItem.kt | 2 +-
.../subscription/item/FeedGroupAddItem.kt | 2 +-
.../subscription/item/FeedGroupCardItem.kt | 2 +-
.../item/FeedGroupCarouselItem.kt | 2 +-
.../local/subscription/item/HeaderItem.kt | 2 +-
.../local/subscription/item/PickerIconItem.kt | 5 +-
.../item/PickerSubscriptionItem.kt | 2 +-
.../services/BaseImportExportService.java | 118 +--
.../services/ImportExportEventListener.java | 2 +-
.../services/ImportExportJsonHelper.java | 42 +-
.../services/SubscriptionsExportService.java | 51 +-
.../services/SubscriptionsImportService.java | 95 ++-
.../newpipe/player/AudioServiceLeakFix.java | 29 +-
.../newpipe/player/BackgroundPlayer.java | 265 +++---
.../player/BackgroundPlayerActivity.java | 6 +-
.../org/schabi/newpipe/player/BasePlayer.java | 787 +++++++++++-------
.../newpipe/player/MainVideoPlayer.java | 478 ++++++-----
.../newpipe/player/PlayerServiceBinder.java | 1 +
.../schabi/newpipe/player/PlayerState.java | 6 +-
.../newpipe/player/PopupVideoPlayer.java | 520 ++++++++----
.../player/PopupVideoPlayerActivity.java | 6 +-
.../newpipe/player/ServicePlayerActivity.java | 185 ++--
.../schabi/newpipe/player/VideoPlayer.java | 479 ++++++-----
.../player/event/PlayerEventListener.java | 6 +-
.../newpipe/player/helper/AudioReactor.java | 28 +-
.../newpipe/player/helper/CacheFactory.java | 30 +-
.../newpipe/player/helper/LoadController.java | 29 +-
.../newpipe/player/helper/LockManager.java | 26 +-
.../player/helper/MediaSessionManager.java | 7 +-
.../helper/PlaybackParameterDialog.java | 268 +++---
.../player/helper/PlayerDataSource.java | 21 +-
.../newpipe/player/helper/PlayerHelper.java | 241 +++---
.../mediasession/MediaSessionCallback.java | 9 +-
.../mediasession/PlayQueueNavigator.java | 19 +-
.../PlayQueuePlaybackController.java | 2 +-
.../player/mediasource/FailedMediaSource.java | 66 +-
.../player/mediasource/LoadedMediaSource.java | 26 +-
.../mediasource/ManagedMediaSource.java | 19 +-
.../ManagedMediaSourcePlaylist.java | 69 +-
.../mediasource/PlaceholderMediaSource.java | 26 +-
.../playback/BasePlayerMediaSession.java | 26 +-
.../player/playback/CustomTrackSelector.java | 41 +-
.../player/playback/MediaSourceManager.java | 326 +++++---
.../player/playback/PlaybackListener.java | 49 +-
.../playqueue/AbstractInfoPlayQueue.java | 176 ++--
.../newpipe/player/playqueue/PlayQueue.java | 260 +++---
.../player/playqueue/PlayQueueAdapter.java | 73 +-
.../player/playqueue/PlayQueueItem.java | 39 +-
.../playqueue/PlayQueueItemBuilder.java | 25 +-
.../player/playqueue/PlayQueueItemHolder.java | 19 +-
.../playqueue/PlayQueueItemTouchCallback.java | 16 +-
.../player/playqueue/SinglePlayQueue.java | 5 +-
.../player/playqueue/events/AppendEvent.java | 11 +-
.../player/playqueue/events/ErrorEvent.java | 17 +-
.../player/playqueue/events/MoveEvent.java | 14 +-
.../playqueue/events/RecoveryEvent.java | 15 +-
.../player/playqueue/events/RemoveEvent.java | 15 +-
.../player/playqueue/events/ReorderEvent.java | 10 +-
.../player/playqueue/events/SelectEvent.java | 15 +-
.../resolver/AudioPlaybackResolver.java | 18 +-
.../player/resolver/MediaSourceTag.java | 12 +-
.../player/resolver/PlaybackResolver.java | 7 +-
.../newpipe/player/resolver/Resolver.java | 3 +-
.../resolver/VideoPlaybackResolver.java | 52 +-
.../newpipe/report/AcraReportSender.java | 5 +-
.../report/AcraReportSenderFactory.java | 6 +-
.../schabi/newpipe/report/ErrorActivity.java | 152 ++--
.../org/schabi/newpipe/report/UserAction.java | 2 +-
.../settings/AppearanceSettingsFragment.java | 73 +-
.../settings/BasePreferenceFragment.java | 13 +-
.../settings/ContentSettingsFragment.java | 112 +--
.../settings/DebugSettingsFragment.java | 2 +-
.../settings/DownloadSettingsFragment.java | 123 +--
.../settings/HistorySettingsFragment.java | 18 +-
.../settings/MainSettingsFragment.java | 3 +-
.../newpipe/settings/NewPipeSettings.java | 71 +-
.../PeertubeInstanceListFragment.java | 237 +++---
.../settings/SelectChannelFragment.java | 171 ++--
.../newpipe/settings/SelectKioskFragment.java | 168 ++--
.../newpipe/settings/SettingsActivity.java | 37 +-
.../settings/UpdateSettingsFragment.java | 20 +-
.../settings/VideoAudioSettingsFragment.java | 62 +-
.../newpipe/settings/tabs/AddTabDialog.java | 36 +-
.../settings/tabs/ChooseTabsFragment.java | 240 +++---
.../org/schabi/newpipe/settings/tabs/Tab.java | 203 ++---
.../newpipe/settings/tabs/TabsJsonHelper.java | 66 +-
.../newpipe/settings/tabs/TabsManager.java | 43 +-
.../schabi/newpipe/util/AnimationUtils.java | 327 +++++---
.../org/schabi/newpipe/util/BitmapUtils.java | 6 +-
.../util/CommentTextOnTouchListener.java | 32 +-
.../org/schabi/newpipe/util/Constants.java | 4 +-
.../schabi/newpipe/util/ExtractorHelper.java | 187 +++--
.../newpipe/util/FallbackViewHolder.java | 5 +-
.../util/FilePickerActivityHelper.java | 110 ++-
.../schabi/newpipe/util/FilenameUtils.java | 45 +-
.../org/schabi/newpipe/util/FireTvUtils.java | 9 +-
.../newpipe/util/ImageDisplayConstants.java | 6 +-
.../org/schabi/newpipe/util/InfoCache.java | 144 ++--
.../schabi/newpipe/util/KioskTranslator.java | 24 +-
.../org/schabi/newpipe/util/KoreUtil.java | 12 +-
.../util/LayoutManagerSmoothScroller.java | 19 +-
.../org/schabi/newpipe/util/ListHelper.java | 256 ++++--
.../org/schabi/newpipe/util/Localization.java | 152 ++--
.../schabi/newpipe/util/NavigationHelper.java | 272 +++---
.../schabi/newpipe/util/OnClickGesture.java | 4 +-
.../schabi/newpipe/util/PeertubeHelper.java | 16 +-
.../schabi/newpipe/util/PermissionHelper.java | 58 +-
.../newpipe/util/RelatedStreamInfo.java | 15 +-
.../newpipe/util/SecondaryStreamHelper.java | 31 +-
.../schabi/newpipe/util/SerializedCache.java | 64 +-
.../schabi/newpipe/util/ServiceHelper.java | 79 +-
.../org/schabi/newpipe/util/ShareUtils.java | 14 +-
.../schabi/newpipe/util/SliderStrategy.java | 44 +-
.../schabi/newpipe/util/SparseArrayUtils.java | 30 -
.../org/schabi/newpipe/util/StateSaver.java | 252 +++---
.../newpipe/util/StreamDialogEntry.java | 80 +-
.../newpipe/util/StreamItemAdapter.java | 84 +-
.../newpipe/util/TLSSocketFactoryCompat.java | 50 +-
.../org/schabi/newpipe/util/ThemeHelper.java | 92 +-
.../org/schabi/newpipe/util/ZipHelper.java | 38 +-
.../util/urlfinder/PatternsCompat.java | 339 ++++----
.../newpipe/views/AnimatedProgressBar.java | 90 +-
.../schabi/newpipe/views/CollapsibleView.java | 148 ++--
.../newpipe/views/ScrollableTabLayout.java | 44 +-
.../services/ImportExportJsonHelperTest.java | 39 +-
.../newpipe/report/ErrorActivityTest.java | 7 +-
.../schabi/newpipe/settings/tabs/TabTest.java | 2 +-
.../settings/tabs/TabsJsonHelperTest.java | 38 +-
.../schabi/newpipe/util/ListHelperTest.java | 97 ++-
.../util/QuadraticSliderStrategyTest.java | 6 +-
checkstyle-suppressions.xml | 12 +
244 files changed, 10116 insertions(+), 7222 deletions(-)
delete mode 100644 app/src/main/java/org/schabi/newpipe/local/history/HistoryListener.java
delete mode 100644 app/src/main/java/org/schabi/newpipe/util/SparseArrayUtils.java
create mode 100644 checkstyle-suppressions.xml
diff --git a/app/src/androidTest/java/org/schabi/newpipe/database/AppDatabaseTest.kt b/app/src/androidTest/java/org/schabi/newpipe/database/AppDatabaseTest.kt
index 2b7dcdf7c..917a83bf2 100644
--- a/app/src/androidTest/java/org/schabi/newpipe/database/AppDatabaseTest.kt
+++ b/app/src/androidTest/java/org/schabi/newpipe/database/AppDatabaseTest.kt
@@ -30,8 +30,9 @@ class AppDatabaseTest {
private const val DEFAULT_SECOND_URL = "https://www.youtube.com/watch?v=ncQU6iBn5Fc"
}
- @get:Rule val testHelper = MigrationTestHelper(InstrumentationRegistry.getInstrumentation(),
- AppDatabase::class.java.canonicalName, FrameworkSQLiteOpenHelperFactory());
+ @get:Rule
+ val testHelper = MigrationTestHelper(InstrumentationRegistry.getInstrumentation(),
+ AppDatabase::class.java.canonicalName, FrameworkSQLiteOpenHelperFactory())
@Test
fun migrateDatabaseFrom2to3() {
@@ -72,7 +73,7 @@ class AppDatabaseTest {
}
testHelper.runMigrationsAndValidate(AppDatabase.DATABASE_NAME, Migrations.DB_VER_3,
- true, Migrations.MIGRATION_2_3);
+ true, Migrations.MIGRATION_2_3)
val migratedDatabaseV3 = getMigratedDatabase()
val listFromDB = migratedDatabaseV3.streamDAO().all.blockingFirst()
diff --git a/app/src/androidTest/java/org/schabi/newpipe/report/ErrorInfoTest.java b/app/src/androidTest/java/org/schabi/newpipe/report/ErrorInfoTest.java
index 6e51136c0..ab20d2ff3 100644
--- a/app/src/androidTest/java/org/schabi/newpipe/report/ErrorInfoTest.java
+++ b/app/src/androidTest/java/org/schabi/newpipe/report/ErrorInfoTest.java
@@ -1,8 +1,9 @@
package org.schabi.newpipe.report;
import android.os.Parcel;
-import androidx.test.filters.LargeTest;
+
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.LargeTest;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -12,15 +13,16 @@ import org.schabi.newpipe.report.ErrorActivity.ErrorInfo;
import static org.junit.Assert.assertEquals;
/**
- * Instrumented tests for {@link ErrorInfo}
+ * Instrumented tests for {@link ErrorInfo}.
*/
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ErrorInfoTest {
@Test
- public void errorInfo_testParcelable() {
- ErrorInfo info = ErrorInfo.make(UserAction.USER_REPORT, "youtube", "request", R.string.general_error);
+ public void errorInfoTestParcelable() {
+ ErrorInfo info = ErrorInfo.make(UserAction.USER_REPORT, "youtube", "request",
+ R.string.general_error);
// Obtain a Parcel object and write the parcelable object to it:
Parcel parcel = Parcel.obtain();
info.writeToParcel(parcel, 0);
@@ -34,4 +36,4 @@ public class ErrorInfoTest {
parcel.recycle();
}
-}
\ No newline at end of file
+}
diff --git a/app/src/debug/java/org/schabi/newpipe/DebugApp.java b/app/src/debug/java/org/schabi/newpipe/DebugApp.java
index 66f73d1e9..4d763aeb1 100644
--- a/app/src/debug/java/org/schabi/newpipe/DebugApp.java
+++ b/app/src/debug/java/org/schabi/newpipe/DebugApp.java
@@ -3,6 +3,7 @@ package org.schabi.newpipe;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
+
import androidx.annotation.NonNull;
import androidx.multidex.MultiDex;
@@ -26,7 +27,7 @@ public class DebugApp extends App {
private static final String TAG = DebugApp.class.toString();
@Override
- protected void attachBaseContext(Context base) {
+ protected void attachBaseContext(final Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
diff --git a/app/src/main/java/androidx/fragment/app/FragmentStatePagerAdapterMenuWorkaround.java b/app/src/main/java/androidx/fragment/app/FragmentStatePagerAdapterMenuWorkaround.java
index 9fd32b735..11f457b6c 100644
--- a/app/src/main/java/androidx/fragment/app/FragmentStatePagerAdapterMenuWorkaround.java
+++ b/app/src/main/java/androidx/fragment/app/FragmentStatePagerAdapterMenuWorkaround.java
@@ -38,12 +38,15 @@ import java.util.ArrayList;
* This is a copy from {@link androidx.fragment.app.FragmentStatePagerAdapter}.
*
* It includes a workaround to fix the menu visibility when the adapter is restored.
+ *
*
* When restoring the state of this adapter, all the fragments' menu visibility were set to false,
- * effectively disabling the menu from the user until he switched pages or another event that triggered the
- * menu to be visible again happened.
+ * effectively disabling the menu from the user until he switched pages or another event
+ * that triggered the menu to be visible again happened.
+ *
*
- * Check out the changes in:
+ * Check out the changes in:
+ *
*
* {@link #saveState()}
* {@link #restoreState(Parcelable, ClassLoader)}
@@ -88,8 +91,8 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
private Fragment mCurrentPrimaryItem = null;
/**
- * Constructor for {@link FragmentStatePagerAdapterMenuWorkaround} that sets the fragment manager for the
- * adapter. This is the equivalent of calling
+ * Constructor for {@link FragmentStatePagerAdapterMenuWorkaround}
+ * that sets the fragment manager for the adapter. This is the equivalent of calling
* {@link #FragmentStatePagerAdapterMenuWorkaround(FragmentManager, int)} and passing in
* {@link #BEHAVIOR_SET_USER_VISIBLE_HINT}.
*
@@ -101,7 +104,7 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
* {@link #BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT}
*/
@Deprecated
- public FragmentStatePagerAdapterMenuWorkaround(@NonNull FragmentManager fm) {
+ public FragmentStatePagerAdapterMenuWorkaround(@NonNull final FragmentManager fm) {
this(fm, BEHAVIOR_SET_USER_VISIBLE_HINT);
}
@@ -117,20 +120,21 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
* @param fm fragment manager that will interact with this adapter
* @param behavior determines if only current fragments are in a resumed state
*/
- public FragmentStatePagerAdapterMenuWorkaround(@NonNull FragmentManager fm,
- @Behavior int behavior) {
+ public FragmentStatePagerAdapterMenuWorkaround(@NonNull final FragmentManager fm,
+ @Behavior final int behavior) {
mFragmentManager = fm;
mBehavior = behavior;
}
/**
- * Return the Fragment associated with a specified position.
+ * @param position the position of the item you want
+ * @return the {@link Fragment} associated with a specified position
*/
@NonNull
public abstract Fragment getItem(int position);
@Override
- public void startUpdate(@NonNull ViewGroup container) {
+ public void startUpdate(@NonNull final ViewGroup container) {
if (container.getId() == View.NO_ID) {
throw new IllegalStateException("ViewPager with adapter " + this
+ " requires a view id");
@@ -140,7 +144,7 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
@SuppressWarnings("deprecation")
@NonNull
@Override
- public Object instantiateItem(@NonNull ViewGroup container, int position) {
+ public Object instantiateItem(@NonNull final ViewGroup container, final int position) {
// If we already have this item instantiated, there is nothing
// to do. This can happen when we are restoring the entire pager
// from its saved state, where the fragment manager has already
@@ -157,7 +161,9 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
}
Fragment fragment = getItem(position);
- if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
+ if (DEBUG) {
+ Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
+ }
if (mSavedState.size() > position) {
Fragment.SavedState fss = mSavedState.get(position);
if (fss != null) {
@@ -183,14 +189,17 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
}
@Override
- public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
+ public void destroyItem(@NonNull final ViewGroup container, final int position,
+ @NonNull final Object object) {
Fragment fragment = (Fragment) object;
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
- if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object
- + " v=" + ((Fragment)object).getView());
+ if (DEBUG) {
+ Log.v(TAG, "Removing item #" + position + ": f=" + object
+ + " v=" + ((Fragment) object).getView());
+ }
while (mSavedState.size() <= position) {
mSavedState.add(null);
}
@@ -206,8 +215,9 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
@Override
@SuppressWarnings({"ReferenceEquality", "deprecation"})
- public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
- Fragment fragment = (Fragment)object;
+ public void setPrimaryItem(@NonNull final ViewGroup container, final int position,
+ @NonNull final Object object) {
+ Fragment fragment = (Fragment) object;
if (fragment != mCurrentPrimaryItem) {
if (mCurrentPrimaryItem != null) {
mCurrentPrimaryItem.setMenuVisibility(false);
@@ -235,7 +245,7 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
}
@Override
- public void finishUpdate(@NonNull ViewGroup container) {
+ public void finishUpdate(@NonNull final ViewGroup container) {
if (mCurTransaction != null) {
mCurTransaction.commitNowAllowingStateLoss();
mCurTransaction = null;
@@ -243,12 +253,12 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
}
@Override
- public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
- return ((Fragment)object).getView() == view;
+ public boolean isViewFromObject(@NonNull final View view, @NonNull final Object object) {
+ return ((Fragment) object).getView() == view;
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- private final String SELECTED_FRAGMENT = "selected_fragment";
+ private final String selectedFragment = "selected_fragment";
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@Override
@@ -261,7 +271,7 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
mSavedState.toArray(fss);
state.putParcelableArray("states", fss);
}
- for (int i=0; i keys = bundle.keySet();
@@ -304,7 +314,8 @@ public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapt
mFragments.add(null);
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- final boolean wasSelected = bundle.getString(SELECTED_FRAGMENT, "").equals(key);
+ final boolean wasSelected = bundle.getString(selectedFragment, "")
+ .equals(key);
f.setMenuVisibility(wasSelected);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mFragments.set(index, f);
diff --git a/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java b/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java
index 4a2662f53..78da9678b 100644
--- a/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java
+++ b/app/src/main/java/com/google/android/material/appbar/FlingBehavior.java
@@ -10,15 +10,15 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout;
import java.lang.reflect.Field;
-// check this https://stackoverflow.com/questions/56849221/recyclerview-fling-causes-laggy-while-appbarlayout-is-scrolling/57997489#57997489
+// See https://stackoverflow.com/questions/56849221#57997489
public final class FlingBehavior extends AppBarLayout.Behavior {
-
- public FlingBehavior(Context context, AttributeSet attrs) {
+ public FlingBehavior(final Context context, final AttributeSet attrs) {
super(context, attrs);
}
@Override
- public boolean onInterceptTouchEvent(CoordinatorLayout parent, AppBarLayout child, MotionEvent ev) {
+ public boolean onInterceptTouchEvent(final CoordinatorLayout parent, final AppBarLayout child,
+ final MotionEvent ev) {
switch (ev.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
// remove reference to old nested scrolling child
@@ -35,7 +35,8 @@ public final class FlingBehavior extends AppBarLayout.Behavior {
@Nullable
private OverScroller getScrollerField() {
try {
- Class> headerBehaviorType = this.getClass().getSuperclass().getSuperclass().getSuperclass();
+ Class> headerBehaviorType = this.getClass()
+ .getSuperclass().getSuperclass().getSuperclass();
if (headerBehaviorType != null) {
Field field = headerBehaviorType.getDeclaredField("scroller");
field.setAccessible(true);
@@ -62,12 +63,14 @@ public final class FlingBehavior extends AppBarLayout.Behavior {
return null;
}
- private void resetNestedScrollingChild(){
+ private void resetNestedScrollingChild() {
Field field = getLastNestedScrollingChildRefField();
- if(field != null){
+ if (field != null) {
try {
Object value = field.get(this);
- if(value != null) field.set(this, null);
+ if (value != null) {
+ field.set(this, null);
+ }
} catch (IllegalAccessException e) {
// ?
}
@@ -76,7 +79,8 @@ public final class FlingBehavior extends AppBarLayout.Behavior {
private void stopAppBarLayoutFling() {
OverScroller scroller = getScrollerField();
- if (scroller != null) scroller.forceFinished(true);
+ if (scroller != null) {
+ scroller.forceFinished(true);
+ }
}
-
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/schabi/newpipe/ActivityCommunicator.java b/app/src/main/java/org/schabi/newpipe/ActivityCommunicator.java
index da601a42f..9321b3071 100644
--- a/app/src/main/java/org/schabi/newpipe/ActivityCommunicator.java
+++ b/app/src/main/java/org/schabi/newpipe/ActivityCommunicator.java
@@ -23,17 +23,25 @@ package org.schabi.newpipe;
/**
* Singleton:
* Used to send data between certain Activity/Services within the same process.
- * This can be considered as an ugly hack inside the Android universe. **/
+ * This can be considered as an ugly hack inside the Android universe.
+ **/
public class ActivityCommunicator {
private static ActivityCommunicator activityCommunicator;
+ private volatile Class returnActivity;
public static ActivityCommunicator getCommunicator() {
- if(activityCommunicator == null) {
+ if (activityCommunicator == null) {
activityCommunicator = new ActivityCommunicator();
}
return activityCommunicator;
}
- public volatile Class returnActivity;
+ public Class getReturnActivity() {
+ return returnActivity;
+ }
+
+ public void setReturnActivity(final Class returnActivity) {
+ this.returnActivity = returnActivity;
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java
index dae143b6c..f9b3abfb1 100644
--- a/app/src/main/java/org/schabi/newpipe/App.java
+++ b/app/src/main/java/org/schabi/newpipe/App.java
@@ -66,15 +66,24 @@ import io.reactivex.plugins.RxJavaPlugins;
public class App extends Application {
protected static final String TAG = App.class.toString();
- private RefWatcher refWatcher;
- private static App app;
-
@SuppressWarnings("unchecked")
private static final Class extends ReportSenderFactory>[]
- reportSenderFactoryClasses = new Class[]{AcraReportSenderFactory.class};
+ REPORT_SENDER_FACTORY_CLASSES = new Class[]{AcraReportSenderFactory.class};
+ private static App app;
+ private RefWatcher refWatcher;
+
+ @Nullable
+ public static RefWatcher getRefWatcher(final Context context) {
+ final App application = (App) context.getApplicationContext();
+ return application.refWatcher;
+ }
+
+ public static App getApp() {
+ return app;
+ }
@Override
- protected void attachBaseContext(Context base) {
+ protected void attachBaseContext(final Context base) {
super.attachBaseContext(base);
initACRA();
@@ -123,24 +132,30 @@ public class App extends Application {
// https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling
RxJavaPlugins.setErrorHandler(new Consumer() {
@Override
- public void accept(@NonNull Throwable throwable) {
- Log.e(TAG, "RxJavaPlugins.ErrorHandler called with -> : " +
- "throwable = [" + throwable.getClass().getName() + "]");
+ public void accept(@NonNull final Throwable throwable) {
+ Log.e(TAG, "RxJavaPlugins.ErrorHandler called with -> : "
+ + "throwable = [" + throwable.getClass().getName() + "]");
+ final Throwable actualThrowable;
if (throwable instanceof UndeliverableException) {
- // As UndeliverableException is a wrapper, get the cause of it to get the "real" exception
- throwable = throwable.getCause();
+ // As UndeliverableException is a wrapper,
+ // get the cause of it to get the "real" exception
+ actualThrowable = throwable.getCause();
+ } else {
+ actualThrowable = throwable;
}
final List errors;
- if (throwable instanceof CompositeException) {
- errors = ((CompositeException) throwable).getExceptions();
+ if (actualThrowable instanceof CompositeException) {
+ errors = ((CompositeException) actualThrowable).getExceptions();
} else {
- errors = Collections.singletonList(throwable);
+ errors = Collections.singletonList(actualThrowable);
}
for (final Throwable error : errors) {
- if (isThrowableIgnored(error)) return;
+ if (isThrowableIgnored(error)) {
+ return;
+ }
if (isThrowableCritical(error)) {
reportException(error);
return;
@@ -150,17 +165,19 @@ public class App extends Application {
// Out-of-lifecycle exceptions should only be reported if a debug user wishes so,
// When exception is not reported, log it
if (isDisposedRxExceptionsReported()) {
- reportException(throwable);
+ reportException(actualThrowable);
} else {
- Log.e(TAG, "RxJavaPlugin: Undeliverable Exception received: ", throwable);
+ Log.e(TAG, "RxJavaPlugin: Undeliverable Exception received: ", actualThrowable);
}
}
private boolean isThrowableIgnored(@NonNull final Throwable throwable) {
// Don't crash the application over a simple network problem
return ExtractorHelper.hasAssignableCauseThrowable(throwable,
- IOException.class, SocketException.class, // network api cancellation
- InterruptedException.class, InterruptedIOException.class); // blocking code disposed
+ // network api cancellation
+ IOException.class, SocketException.class,
+ // blocking code disposed
+ InterruptedException.class, InterruptedIOException.class);
}
private boolean isThrowableCritical(@NonNull final Throwable throwable) {
@@ -191,7 +208,7 @@ public class App extends Application {
private void initACRA() {
try {
final ACRAConfiguration acraConfig = new ConfigurationBuilder(this)
- .setReportSenderFactoryClasses(reportSenderFactoryClasses)
+ .setReportSenderFactoryClasses(REPORT_SENDER_FACTORY_CLASSES)
.setBuildConfigClass(BuildConfig.class)
.build();
ACRA.init(this, acraConfig);
@@ -202,7 +219,7 @@ public class App extends Application {
null,
null,
ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
- "Could not initialize ACRA crash report", R.string.app_ui_crash));
+ "Could not initialize ACRA crash report", R.string.app_ui_crash));
}
}
@@ -230,11 +247,11 @@ public class App extends Application {
/**
* Set up notification channel for app update.
+ *
* @param importance
*/
@TargetApi(Build.VERSION_CODES.O)
- private void setUpUpdateNotificationChannel(int importance) {
-
+ private void setUpUpdateNotificationChannel(final int importance) {
final String appUpdateId
= getString(R.string.app_update_notification_channel_id);
final CharSequence appUpdateName
@@ -251,12 +268,6 @@ public class App extends Application {
appUpdateNotificationManager.createNotificationChannel(appUpdateChannel);
}
- @Nullable
- public static RefWatcher getRefWatcher(Context context) {
- final App application = (App) context.getApplicationContext();
- return application.refWatcher;
- }
-
protected RefWatcher installLeakCanary() {
return RefWatcher.DISABLED;
}
@@ -264,8 +275,4 @@ public class App extends Application {
protected boolean isDisposedRxExceptionsReported() {
return false;
}
-
- public static App getApp() {
- return app;
- }
}
diff --git a/app/src/main/java/org/schabi/newpipe/BaseFragment.java b/app/src/main/java/org/schabi/newpipe/BaseFragment.java
index d4795cde2..9a86fd5ad 100644
--- a/app/src/main/java/org/schabi/newpipe/BaseFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/BaseFragment.java
@@ -2,13 +2,14 @@ package org.schabi.newpipe;
import android.content.Context;
import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+
import com.nostra13.universalimageloader.core.ImageLoader;
import com.squareup.leakcanary.RefWatcher;
@@ -16,18 +17,16 @@ import icepick.Icepick;
import icepick.State;
public abstract class BaseFragment extends Fragment {
+ public static final ImageLoader IMAGE_LOADER = ImageLoader.getInstance();
protected final String TAG = getClass().getSimpleName() + "@" + Integer.toHexString(hashCode());
protected final boolean DEBUG = MainActivity.DEBUG;
-
protected AppCompatActivity activity;
- public static final ImageLoader imageLoader = ImageLoader.getInstance();
-
- //These values are used for controlling framgents when they are part of the frontpage
+ //These values are used for controlling fragments when they are part of the frontpage
@State
protected boolean useAsFrontPage = false;
- protected boolean mIsVisibleToUser = false;
+ private boolean mIsVisibleToUser = false;
- public void useAsFrontPage(boolean value) {
+ public void useAsFrontPage(final boolean value) {
useAsFrontPage = value;
}
@@ -36,7 +35,7 @@ public abstract class BaseFragment extends Fragment {
//////////////////////////////////////////////////////////////////////////*/
@Override
- public void onAttach(Context context) {
+ public void onAttach(final Context context) {
super.onAttach(context);
activity = (AppCompatActivity) context;
}
@@ -48,43 +47,51 @@ public abstract class BaseFragment extends Fragment {
}
@Override
- public void onCreate(Bundle savedInstanceState) {
- if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
+ public void onCreate(final Bundle savedInstanceState) {
+ if (DEBUG) {
+ Log.d(TAG, "onCreate() called with: "
+ + "savedInstanceState = [" + savedInstanceState + "]");
+ }
super.onCreate(savedInstanceState);
Icepick.restoreInstanceState(this, savedInstanceState);
- if (savedInstanceState != null) onRestoreInstanceState(savedInstanceState);
+ if (savedInstanceState != null) {
+ onRestoreInstanceState(savedInstanceState);
+ }
}
@Override
- public void onViewCreated(View rootView, Bundle savedInstanceState) {
+ public void onViewCreated(final View rootView, final Bundle savedInstanceState) {
super.onViewCreated(rootView, savedInstanceState);
if (DEBUG) {
- Log.d(TAG, "onViewCreated() called with: rootView = [" + rootView + "], savedInstanceState = [" + savedInstanceState + "]");
+ Log.d(TAG, "onViewCreated() called with: "
+ + "rootView = [" + rootView + "], "
+ + "savedInstanceState = [" + savedInstanceState + "]");
}
initViews(rootView, savedInstanceState);
initListeners();
}
@Override
- public void onSaveInstanceState(Bundle outState) {
+ public void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}
- protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
- }
+ protected void onRestoreInstanceState(@NonNull final Bundle savedInstanceState) { }
@Override
public void onDestroy() {
super.onDestroy();
RefWatcher refWatcher = App.getRefWatcher(getActivity());
- if (refWatcher != null) refWatcher.watch(this);
+ if (refWatcher != null) {
+ refWatcher.watch(this);
+ }
}
@Override
- public void setUserVisibleHint(boolean isVisibleToUser) {
+ public void setUserVisibleHint(final boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
mIsVisibleToUser = isVisibleToUser;
}
@@ -93,20 +100,20 @@ public abstract class BaseFragment extends Fragment {
// Init
//////////////////////////////////////////////////////////////////////////*/
- protected void initViews(View rootView, Bundle savedInstanceState) {
- }
+ protected void initViews(final View rootView, final Bundle savedInstanceState) { }
- protected void initListeners() {
- }
+ protected void initListeners() { }
/*//////////////////////////////////////////////////////////////////////////
// Utils
//////////////////////////////////////////////////////////////////////////*/
- public void setTitle(String title) {
- if (DEBUG) Log.d(TAG, "setTitle() called with: title = [" + title + "]");
- if((!useAsFrontPage || mIsVisibleToUser)
- && (activity != null && activity.getSupportActionBar() != null)) {
+ public void setTitle(final String title) {
+ if (DEBUG) {
+ Log.d(TAG, "setTitle() called with: title = [" + title + "]");
+ }
+ if ((!useAsFrontPage || mIsVisibleToUser)
+ && (activity != null && activity.getSupportActionBar() != null)) {
activity.getSupportActionBar().setDisplayShowTitleEnabled(true);
activity.getSupportActionBar().setTitle(title);
}
diff --git a/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersionTask.java b/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersionTask.java
index 22f7bc558..12797bd8e 100644
--- a/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersionTask.java
+++ b/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersionTask.java
@@ -12,9 +12,10 @@ import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
+import android.util.Log;
+
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
-import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
@@ -42,62 +43,137 @@ import okhttp3.Response;
* the notification, the user will be directed to the download link.
*/
public class CheckForNewAppVersionTask extends AsyncTask {
-
private static final boolean DEBUG = MainActivity.DEBUG;
private static final String TAG = CheckForNewAppVersionTask.class.getSimpleName();
- private static final Application app = App.getApp();
- private static final String GITHUB_APK_SHA1 = "B0:2E:90:7C:1C:D6:FC:57:C3:35:F0:88:D0:8F:50:5F:94:E4:D2:15";
- private static final String newPipeApiUrl = "https://newpipe.schabi.org/api/data.json";
- private static final int timeoutPeriod = 30;
+ private static final Application APP = App.getApp();
+ private static final String GITHUB_APK_SHA1
+ = "B0:2E:90:7C:1C:D6:FC:57:C3:35:F0:88:D0:8F:50:5F:94:E4:D2:15";
+ private static final String NEWPIPE_API_URL = "https://newpipe.schabi.org/api/data.json";
+ private static final int TIMEOUT_PERIOD = 30;
private SharedPreferences mPrefs;
private OkHttpClient client;
+ /**
+ * Method to get the apk's SHA1 key. See https://stackoverflow.com/questions/9293019/#22506133.
+ *
+ * @return String with the apk's SHA1 fingeprint in hexadecimal
+ */
+ private static String getCertificateSHA1Fingerprint() {
+ PackageManager pm = APP.getPackageManager();
+ String packageName = APP.getPackageName();
+ int flags = PackageManager.GET_SIGNATURES;
+ PackageInfo packageInfo = null;
+
+ try {
+ packageInfo = pm.getPackageInfo(packageName, flags);
+ } catch (PackageManager.NameNotFoundException ex) {
+ ErrorActivity.reportError(APP, ex, null, null,
+ ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
+ "Could not find package info", R.string.app_ui_crash));
+ }
+
+ Signature[] signatures = packageInfo.signatures;
+ byte[] cert = signatures[0].toByteArray();
+ InputStream input = new ByteArrayInputStream(cert);
+
+ CertificateFactory cf = null;
+ X509Certificate c = null;
+
+ try {
+ cf = CertificateFactory.getInstance("X509");
+ c = (X509Certificate) cf.generateCertificate(input);
+ } catch (CertificateException ex) {
+ ErrorActivity.reportError(APP, ex, null, null,
+ ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
+ "Certificate error", R.string.app_ui_crash));
+ }
+
+ String hexString = null;
+
+ try {
+ MessageDigest md = MessageDigest.getInstance("SHA1");
+ byte[] publicKey = md.digest(c.getEncoded());
+ hexString = byte2HexFormatted(publicKey);
+ } catch (NoSuchAlgorithmException ex1) {
+ ErrorActivity.reportError(APP, ex1, null, null,
+ ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
+ "Could not retrieve SHA1 key", R.string.app_ui_crash));
+ } catch (CertificateEncodingException ex2) {
+ ErrorActivity.reportError(APP, ex2, null, null,
+ ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
+ "Could not retrieve SHA1 key", R.string.app_ui_crash));
+ }
+
+ return hexString;
+ }
+
+ private static String byte2HexFormatted(final byte[] arr) {
+ StringBuilder str = new StringBuilder(arr.length * 2);
+
+ for (int i = 0; i < arr.length; i++) {
+ String h = Integer.toHexString(arr[i]);
+ int l = h.length();
+ if (l == 1) {
+ h = "0" + h;
+ }
+ if (l > 2) {
+ h = h.substring(l - 2, l);
+ }
+ str.append(h.toUpperCase());
+ if (i < (arr.length - 1)) {
+ str.append(':');
+ }
+ }
+ return str.toString();
+ }
+
+ public static boolean isGithubApk() {
+ return getCertificateSHA1Fingerprint().equals(GITHUB_APK_SHA1);
+ }
+
@Override
protected void onPreExecute() {
-
- mPrefs = PreferenceManager.getDefaultSharedPreferences(app);
+ mPrefs = PreferenceManager.getDefaultSharedPreferences(APP);
// Check if user has enabled/ disabled update checking
// and if the current apk is a github one or not.
- if (!mPrefs.getBoolean(app.getString(R.string.update_app_key), true)
- || !isGithubApk()) {
+ if (!mPrefs.getBoolean(APP.getString(R.string.update_app_key), true) || !isGithubApk()) {
this.cancel(true);
}
}
@Override
- protected String doInBackground(Void... voids) {
-
- if(isCancelled() || !isConnected()) return null;
-
- // Make a network request to get latest NewPipe data.
- if (client == null) {
-
- client = new OkHttpClient
- .Builder()
- .readTimeout(timeoutPeriod, TimeUnit.SECONDS)
- .build();
+ protected String doInBackground(final Void... voids) {
+ if (isCancelled() || !isConnected()) {
+ return null;
}
- Request request = new Request.Builder()
- .url(newPipeApiUrl)
- .build();
+ // Make a network request to get latest NewPipe data.
+ // FIXME: Use DownloaderImp
+ if (client == null) {
+
+ client = new OkHttpClient.Builder()
+ .readTimeout(TIMEOUT_PERIOD, TimeUnit.SECONDS).build();
+ }
+
+ Request request = new Request.Builder().url(NEWPIPE_API_URL).build();
try {
Response response = client.newCall(request).execute();
return response.body().string();
} catch (IOException ex) {
// connectivity problems, do not alarm user and fail silently
- if (DEBUG) Log.w(TAG, Log.getStackTraceString(ex));
+ if (DEBUG) {
+ Log.w(TAG, Log.getStackTraceString(ex));
+ }
}
return null;
}
@Override
- protected void onPostExecute(String response) {
-
+ protected void onPostExecute(final String response) {
// Parse the json from the response.
if (response != null) {
@@ -115,7 +191,9 @@ public class CheckForNewAppVersionTask extends AsyncTask {
} catch (JSONException ex) {
// connectivity problems, do not alarm user and fail silently
- if (DEBUG) Log.w(TAG, Log.getStackTraceString(ex));
+ if (DEBUG) {
+ Log.w(TAG, Log.getStackTraceString(ex));
+ }
}
}
}
@@ -123,116 +201,42 @@ public class CheckForNewAppVersionTask extends AsyncTask {
/**
* Method to compare the current and latest available app version.
* If a newer version is available, we show the update notification.
- * @param versionName
- * @param apkLocationUrl
+ *
+ * @param versionName Name of new version
+ * @param apkLocationUrl Url with the new apk
+ * @param versionCode V
*/
- private void compareAppVersionAndShowNotification(String versionName,
- String apkLocationUrl,
- String versionCode) {
-
- int NOTIFICATION_ID = 2000;
+ private void compareAppVersionAndShowNotification(final String versionName,
+ final String apkLocationUrl,
+ final String versionCode) {
+ int notificationId = 2000;
if (BuildConfig.VERSION_CODE < Integer.valueOf(versionCode)) {
// A pending intent to open the apk location url in the browser.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(apkLocationUrl));
PendingIntent pendingIntent
- = PendingIntent.getActivity(app, 0, intent, 0);
+ = PendingIntent.getActivity(APP, 0, intent, 0);
NotificationCompat.Builder notificationBuilder = new NotificationCompat
- .Builder(app, app.getString(R.string.app_update_notification_channel_id))
+ .Builder(APP, APP.getString(R.string.app_update_notification_channel_id))
.setSmallIcon(R.drawable.ic_newpipe_update)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
- .setContentTitle(app.getString(R.string.app_update_notification_content_title))
- .setContentText(app.getString(R.string.app_update_notification_content_text)
+ .setContentTitle(APP.getString(R.string.app_update_notification_content_title))
+ .setContentText(APP.getString(R.string.app_update_notification_content_text)
+ " " + versionName);
- NotificationManagerCompat notificationManager = NotificationManagerCompat.from(app);
- notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
+ NotificationManagerCompat notificationManager = NotificationManagerCompat.from(APP);
+ notificationManager.notify(notificationId, notificationBuilder.build());
}
}
- /**
- * Method to get the apk's SHA1 key.
- * https://stackoverflow.com/questions/9293019/get-certificate-fingerprint-from-android-app#22506133
- */
- private static String getCertificateSHA1Fingerprint() {
-
- PackageManager pm = app.getPackageManager();
- String packageName = app.getPackageName();
- int flags = PackageManager.GET_SIGNATURES;
- PackageInfo packageInfo = null;
-
- try {
- packageInfo = pm.getPackageInfo(packageName, flags);
- } catch (PackageManager.NameNotFoundException ex) {
- ErrorActivity.reportError(app, ex, null, null,
- ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
- "Could not find package info", R.string.app_ui_crash));
- }
-
- Signature[] signatures = packageInfo.signatures;
- byte[] cert = signatures[0].toByteArray();
- InputStream input = new ByteArrayInputStream(cert);
-
- CertificateFactory cf = null;
- X509Certificate c = null;
-
- try {
- cf = CertificateFactory.getInstance("X509");
- c = (X509Certificate) cf.generateCertificate(input);
- } catch (CertificateException ex) {
- ErrorActivity.reportError(app, ex, null, null,
- ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
- "Certificate error", R.string.app_ui_crash));
- }
-
- String hexString = null;
-
- try {
- MessageDigest md = MessageDigest.getInstance("SHA1");
- byte[] publicKey = md.digest(c.getEncoded());
- hexString = byte2HexFormatted(publicKey);
- } catch (NoSuchAlgorithmException ex1) {
- ErrorActivity.reportError(app, ex1, null, null,
- ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
- "Could not retrieve SHA1 key", R.string.app_ui_crash));
- } catch (CertificateEncodingException ex2) {
- ErrorActivity.reportError(app, ex2, null, null,
- ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none",
- "Could not retrieve SHA1 key", R.string.app_ui_crash));
- }
-
- return hexString;
- }
-
- private static String byte2HexFormatted(byte[] arr) {
-
- StringBuilder str = new StringBuilder(arr.length * 2);
-
- for (int i = 0; i < arr.length; i++) {
- String h = Integer.toHexString(arr[i]);
- int l = h.length();
- if (l == 1) h = "0" + h;
- if (l > 2) h = h.substring(l - 2, l);
- str.append(h.toUpperCase());
- if (i < (arr.length - 1)) str.append(':');
- }
- return str.toString();
- }
-
- public static boolean isGithubApk() {
-
- return getCertificateSHA1Fingerprint().equals(GITHUB_APK_SHA1);
- }
-
private boolean isConnected() {
-
- ConnectivityManager cm =
- (ConnectivityManager) app.getSystemService(Context.CONNECTIVITY_SERVICE);
+ ConnectivityManager cm =
+ (ConnectivityManager) APP.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null
- && cm.getActiveNetworkInfo().isConnected();
+ && cm.getActiveNetworkInfo().isConnected();
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
index 8c551d2a7..ed517f160 100644
--- a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
+++ b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java
@@ -3,6 +3,9 @@ package org.schabi.newpipe;
import android.os.Build;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import org.schabi.newpipe.extractor.downloader.Downloader;
import org.schabi.newpipe.extractor.downloader.Request;
import org.schabi.newpipe.extractor.downloader.Response;
@@ -26,9 +29,6 @@ import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
import okhttp3.CipherSuite;
import okhttp3.ConnectionSpec;
import okhttp3.OkHttpClient;
@@ -37,20 +37,22 @@ import okhttp3.ResponseBody;
import static org.schabi.newpipe.MainActivity.DEBUG;
-public class DownloaderImpl extends Downloader {
- public static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0";
+public final class DownloaderImpl extends Downloader {
+ public static final String USER_AGENT
+ = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0";
private static DownloaderImpl instance;
private String mCookies;
private OkHttpClient client;
- private DownloaderImpl(OkHttpClient.Builder builder) {
+ private DownloaderImpl(final OkHttpClient.Builder builder) {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
enableModernTLS(builder);
}
this.client = builder
.readTimeout(30, TimeUnit.SECONDS)
- //.cache(new Cache(new File(context.getExternalCacheDir(), "okhttp"), 16 * 1024 * 1024))
+// .cache(new Cache(new File(context.getExternalCacheDir(), "okhttp"),
+// 16 * 1024 * 1024))
.build();
}
@@ -58,20 +60,72 @@ public class DownloaderImpl extends Downloader {
* It's recommended to call exactly once in the entire lifetime of the application.
*
* @param builder if null, default builder will be used
+ * @return a new instance of {@link DownloaderImpl}
*/
- public static DownloaderImpl init(@Nullable OkHttpClient.Builder builder) {
- return instance = new DownloaderImpl(builder != null ? builder : new OkHttpClient.Builder());
+ public static DownloaderImpl init(@Nullable final OkHttpClient.Builder builder) {
+ instance = new DownloaderImpl(
+ builder != null ? builder : new OkHttpClient.Builder());
+ return instance;
}
public static DownloaderImpl getInstance() {
return instance;
}
+ /**
+ * Enable TLS 1.2 and 1.1 on Android Kitkat. This function is mostly taken
+ * from the documentation of OkHttpClient.Builder.sslSocketFactory(_,_).
+ *
+ * If there is an error, the function will safely fall back to doing nothing
+ * and printing the error to the console.
+ *
+ *
+ * @param builder The HTTPClient Builder on which TLS is enabled on (will be modified in-place)
+ */
+ private static void enableModernTLS(final OkHttpClient.Builder builder) {
+ try {
+ // get the default TrustManager
+ TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
+ TrustManagerFactory.getDefaultAlgorithm());
+ trustManagerFactory.init((KeyStore) null);
+ TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
+ if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
+ throw new IllegalStateException("Unexpected default trust managers:"
+ + Arrays.toString(trustManagers));
+ }
+ X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
+
+ // insert our own TLSSocketFactory
+ SSLSocketFactory sslSocketFactory = TLSSocketFactoryCompat.getInstance();
+
+ builder.sslSocketFactory(sslSocketFactory, trustManager);
+
+ // This will try to enable all modern CipherSuites(+2 more)
+ // that are supported on the device.
+ // Necessary because some servers (e.g. Framatube.org)
+ // don't support the old cipher suites.
+ // https://github.com/square/okhttp/issues/4053#issuecomment-402579554
+ List cipherSuites = new ArrayList<>();
+ cipherSuites.addAll(ConnectionSpec.MODERN_TLS.cipherSuites());
+ cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA);
+ cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA);
+ ConnectionSpec legacyTLS = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
+ .cipherSuites(cipherSuites.toArray(new CipherSuite[0]))
+ .build();
+
+ builder.connectionSpecs(Arrays.asList(legacyTLS, ConnectionSpec.CLEARTEXT));
+ } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
+ if (DEBUG) {
+ e.printStackTrace();
+ }
+ }
+ }
+
public String getCookies() {
return mCookies;
}
- public void setCookies(String cookies) {
+ public void setCookies(final String cookies) {
mCookies = cookies;
}
@@ -81,7 +135,7 @@ public class DownloaderImpl extends Downloader {
* @param url an url pointing to the content
* @return the size of the content, in bytes
*/
- public long getContentLength(String url) throws IOException {
+ public long getContentLength(final String url) throws IOException {
try {
final Response response = head(url);
return Long.parseLong(response.getHeader("Content-Length"));
@@ -92,7 +146,7 @@ public class DownloaderImpl extends Downloader {
}
}
- public InputStream stream(String siteUrl) throws IOException {
+ public InputStream stream(final String siteUrl) throws IOException {
try {
final okhttp3.Request.Builder requestBuilder = new okhttp3.Request.Builder()
.method("GET", null).url(siteUrl)
@@ -122,7 +176,8 @@ public class DownloaderImpl extends Downloader {
}
@Override
- public Response execute(@NonNull Request request) throws IOException, ReCaptchaException {
+ public Response execute(@NonNull final Request request)
+ throws IOException, ReCaptchaException {
final String httpMethod = request.httpMethod();
final String url = request.url();
final Map> headers = request.headers();
@@ -172,49 +227,7 @@ public class DownloaderImpl extends Downloader {
}
final String latestUrl = response.request().url().toString();
- return new Response(response.code(), response.message(), response.headers().toMultimap(), responseBodyToReturn, latestUrl);
- }
-
- /**
- * Enable TLS 1.2 and 1.1 on Android Kitkat. This function is mostly taken from the documentation of
- * OkHttpClient.Builder.sslSocketFactory(_,_)
- *
- * If there is an error, the function will safely fall back to doing nothing and printing the error to the console.
- *
- * @param builder The HTTPClient Builder on which TLS is enabled on (will be modified in-place)
- */
- private static void enableModernTLS(OkHttpClient.Builder builder) {
- try {
- // get the default TrustManager
- TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
- TrustManagerFactory.getDefaultAlgorithm());
- trustManagerFactory.init((KeyStore) null);
- TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
- if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
- throw new IllegalStateException("Unexpected default trust managers:"
- + Arrays.toString(trustManagers));
- }
- X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
-
- // insert our own TLSSocketFactory
- SSLSocketFactory sslSocketFactory = TLSSocketFactoryCompat.getInstance();
-
- builder.sslSocketFactory(sslSocketFactory, trustManager);
-
- // This will try to enable all modern CipherSuites(+2 more) that are supported on the device.
- // Necessary because some servers (e.g. Framatube.org) don't support the old cipher suites.
- // https://github.com/square/okhttp/issues/4053#issuecomment-402579554
- List cipherSuites = new ArrayList<>();
- cipherSuites.addAll(ConnectionSpec.MODERN_TLS.cipherSuites());
- cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA);
- cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA);
- ConnectionSpec legacyTLS = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
- .cipherSuites(cipherSuites.toArray(new CipherSuite[0]))
- .build();
-
- builder.connectionSpecs(Arrays.asList(legacyTLS, ConnectionSpec.CLEARTEXT));
- } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
- if (DEBUG) e.printStackTrace();
- }
+ return new Response(response.code(), response.message(), response.headers().toMultimap(),
+ responseBodyToReturn, latestUrl);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/ExitActivity.java b/app/src/main/java/org/schabi/newpipe/ExitActivity.java
index 1ea3abe34..94eff9560 100644
--- a/app/src/main/java/org/schabi/newpipe/ExitActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ExitActivity.java
@@ -1,4 +1,3 @@
-
package org.schabi.newpipe;
import android.annotation.SuppressLint;
@@ -27,9 +26,20 @@ import android.os.Bundle;
public class ExitActivity extends Activity {
+ public static void exitAndRemoveFromRecentApps(final Activity activity) {
+ Intent intent = new Intent(activity, ExitActivity.class);
+
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+ | Intent.FLAG_ACTIVITY_CLEAR_TASK
+ | Intent.FLAG_ACTIVITY_NO_ANIMATION);
+
+ activity.startActivity(intent);
+ }
+
@SuppressLint("NewApi")
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21) {
@@ -40,15 +50,4 @@ public class ExitActivity extends Activity {
System.exit(0);
}
-
- public static void exitAndRemoveFromRecentApps(Activity activity) {
- Intent intent = new Intent(activity, ExitActivity.class);
-
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- | Intent.FLAG_ACTIVITY_CLEAR_TASK
- | Intent.FLAG_ACTIVITY_NO_ANIMATION);
-
- activity.startActivity(intent);
- }
}
diff --git a/app/src/main/java/org/schabi/newpipe/ImageDownloader.java b/app/src/main/java/org/schabi/newpipe/ImageDownloader.java
index dfb7d3276..ca61c9655 100644
--- a/app/src/main/java/org/schabi/newpipe/ImageDownloader.java
+++ b/app/src/main/java/org/schabi/newpipe/ImageDownloader.java
@@ -18,7 +18,7 @@ public class ImageDownloader extends BaseImageDownloader {
private final SharedPreferences preferences;
private final String downloadThumbnailKey;
- public ImageDownloader(Context context) {
+ public ImageDownloader(final Context context) {
super(context);
this.resources = context.getResources();
this.preferences = PreferenceManager.getDefaultSharedPreferences(context);
@@ -31,7 +31,7 @@ public class ImageDownloader extends BaseImageDownloader {
@SuppressLint("ResourceType")
@Override
- public InputStream getStream(String imageUri, Object extra) throws IOException {
+ public InputStream getStream(final String imageUri, final Object extra) throws IOException {
if (isDownloadingThumbnail()) {
return super.getStream(imageUri, extra);
} else {
@@ -39,7 +39,8 @@ public class ImageDownloader extends BaseImageDownloader {
}
}
- protected InputStream getStreamFromNetwork(String imageUri, Object extra) throws IOException {
+ protected InputStream getStreamFromNetwork(final String imageUri, final Object extra)
+ throws IOException {
final DownloaderImpl downloader = (DownloaderImpl) NewPipe.getDownloader();
return downloader.stream(imageUri);
}
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 4ca16082a..c004eae4a 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -93,11 +93,11 @@ public class MainActivity extends AppCompatActivity {
private boolean servicesShown = false;
private ImageView serviceArrow;
- private static final int ITEM_ID_SUBSCRIPTIONS = - 1;
- private static final int ITEM_ID_FEED = - 2;
- private static final int ITEM_ID_BOOKMARKS = - 3;
- private static final int ITEM_ID_DOWNLOADS = - 4;
- private static final int ITEM_ID_HISTORY = - 5;
+ private static final int ITEM_ID_SUBSCRIPTIONS = -1;
+ private static final int ITEM_ID_FEED = -2;
+ private static final int ITEM_ID_BOOKMARKS = -3;
+ private static final int ITEM_ID_DOWNLOADS = -4;
+ private static final int ITEM_ID_HISTORY = -5;
private static final int ITEM_ID_SETTINGS = 0;
private static final int ITEM_ID_ABOUT = 1;
@@ -108,8 +108,11 @@ public class MainActivity extends AppCompatActivity {
//////////////////////////////////////////////////////////////////////////*/
@Override
- protected void onCreate(Bundle savedInstanceState) {
- if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
+ protected void onCreate(final Bundle savedInstanceState) {
+ if (DEBUG) {
+ Log.d(TAG, "onCreate() called with: "
+ + "savedInstanceState = [" + savedInstanceState + "]");
+ }
// enable TLS1.1/1.2 for kitkat devices, to fix download and play for mediaCCC sources
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
@@ -123,10 +126,12 @@ public class MainActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window w = getWindow();
- w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
+ WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
- if (getSupportFragmentManager() != null && getSupportFragmentManager().getBackStackEntryCount() == 0) {
+ if (getSupportFragmentManager() != null
+ && getSupportFragmentManager().getBackStackEntryCount() == 0) {
initFragments();
}
@@ -151,13 +156,15 @@ public class MainActivity extends AppCompatActivity {
for (final String ks : service.getKioskList().getAvailableKiosks()) {
drawerItems.getMenu()
- .add(R.id.menu_tabs_group, kioskId, 0, KioskTranslator.getTranslatedKioskName(ks, this))
+ .add(R.id.menu_tabs_group, kioskId, 0, KioskTranslator
+ .getTranslatedKioskName(ks, this))
.setIcon(KioskTranslator.getKioskIcons(ks, this));
- kioskId ++;
+ kioskId++;
}
drawerItems.getMenu()
- .add(R.id.menu_tabs_group, ITEM_ID_SUBSCRIPTIONS, ORDER, R.string.tab_subscriptions)
+ .add(R.id.menu_tabs_group, ITEM_ID_SUBSCRIPTIONS, ORDER,
+ R.string.tab_subscriptions)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_channel));
drawerItems.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_FEED, ORDER, R.string.fragment_feed_title)
@@ -180,20 +187,21 @@ public class MainActivity extends AppCompatActivity {
.add(R.id.menu_options_about_group, ITEM_ID_ABOUT, ORDER, R.string.tab_about)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.info));
- toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close);
+ toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open,
+ R.string.drawer_close);
toggle.syncState();
drawer.addDrawerListener(toggle);
drawer.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
private int lastService;
@Override
- public void onDrawerOpened(View drawerView) {
+ public void onDrawerOpened(final View drawerView) {
lastService = ServiceHelper.getSelectedServiceId(MainActivity.this);
}
@Override
- public void onDrawerClosed(View drawerView) {
- if(servicesShown) {
+ public void onDrawerClosed(final View drawerView) {
+ if (servicesShown) {
toggleServices();
}
if (lastService != ServiceHelper.getSelectedServiceId(MainActivity.this)) {
@@ -206,7 +214,7 @@ public class MainActivity extends AppCompatActivity {
setupDrawerHeader();
}
- private boolean drawerItemSelected(MenuItem item) {
+ private boolean drawerItemSelected(final MenuItem item) {
switch (item.getGroupId()) {
case R.id.menu_services_group:
changeService(item);
@@ -229,14 +237,16 @@ public class MainActivity extends AppCompatActivity {
return true;
}
- private void changeService(MenuItem item) {
- drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this)).setChecked(false);
+ private void changeService(final MenuItem item) {
+ drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this))
+ .setChecked(false);
ServiceHelper.setSelectedServiceId(this, item.getItemId());
- drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this)).setChecked(true);
+ drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this))
+ .setChecked(true);
}
- private void tabSelected(MenuItem item) throws ExtractionException {
- switch(item.getItemId()) {
+ private void tabSelected(final MenuItem item) throws ExtractionException {
+ switch (item.getItemId()) {
case ITEM_ID_SUBSCRIPTIONS:
NavigationHelper.openSubscriptionFragment(getSupportFragmentManager());
break;
@@ -259,19 +269,20 @@ public class MainActivity extends AppCompatActivity {
int kioskId = 0;
for (final String ks : service.getKioskList().getAvailableKiosks()) {
- if(kioskId == item.getItemId()) {
+ if (kioskId == item.getItemId()) {
serviceName = ks;
}
- kioskId ++;
+ kioskId++;
}
- NavigationHelper.openKioskFragment(getSupportFragmentManager(), currentServiceId, serviceName);
+ NavigationHelper.openKioskFragment(getSupportFragmentManager(), currentServiceId,
+ serviceName);
break;
}
}
- private void optionsAboutSelected(MenuItem item) {
- switch(item.getItemId()) {
+ private void optionsAboutSelected(final MenuItem item) {
+ switch (item.getItemId()) {
case ITEM_ID_SETTINGS:
NavigationHelper.openSettings(this);
break;
@@ -283,7 +294,7 @@ public class MainActivity extends AppCompatActivity {
private void setupDrawerHeader() {
NavigationView navigationView = findViewById(R.id.navigation);
- View hView = navigationView.getHeaderView(0);
+ View hView = navigationView.getHeaderView(0);
serviceArrow = hView.findViewById(R.id.drawer_arrow);
headerServiceIcon = hView.findViewById(R.id.drawer_header_service_icon);
@@ -299,7 +310,7 @@ public class MainActivity extends AppCompatActivity {
drawerItems.getMenu().removeGroup(R.id.menu_tabs_group);
drawerItems.getMenu().removeGroup(R.id.menu_options_about_group);
- if(servicesShown) {
+ if (servicesShown) {
showServices();
} else {
try {
@@ -313,55 +324,62 @@ public class MainActivity extends AppCompatActivity {
private void showServices() {
serviceArrow.setImageResource(R.drawable.ic_arrow_drop_up_white_24dp);
- for(StreamingService s : NewPipe.getServices()) {
- final String title = s.getServiceInfo().getName() +
- (ServiceHelper.isBeta(s) ? " (beta)" : "");
+ for (StreamingService s : NewPipe.getServices()) {
+ final String title = s.getServiceInfo().getName()
+ + (ServiceHelper.isBeta(s) ? " (beta)" : "");
MenuItem menuItem = drawerItems.getMenu()
.add(R.id.menu_services_group, s.getServiceId(), ORDER, title)
.setIcon(ServiceHelper.getIcon(s.getServiceId()));
// peertube specifics
- if(s.getServiceId() == 3){
+ if (s.getServiceId() == 3) {
enhancePeertubeMenu(s, menuItem);
}
}
- drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this)).setChecked(true);
+ drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this))
+ .setChecked(true);
}
- private void enhancePeertubeMenu(StreamingService s, MenuItem menuItem) {
+ private void enhancePeertubeMenu(final StreamingService s, final MenuItem menuItem) {
PeertubeInstance currentInstace = PeertubeHelper.getCurrentInstance();
menuItem.setTitle(currentInstace.getName() + (ServiceHelper.isBeta(s) ? " (beta)" : ""));
- Spinner spinner = (Spinner) LayoutInflater.from(this).inflate(R.layout.instance_spinner_layout, null);
+ Spinner spinner = (Spinner) LayoutInflater.from(this)
+ .inflate(R.layout.instance_spinner_layout, null);
List instances = PeertubeHelper.getInstanceList(this);
List items = new ArrayList<>();
int defaultSelect = 0;
- for(PeertubeInstance instance: instances){
+ for (PeertubeInstance instance : instances) {
items.add(instance.getName());
- if(instance.getUrl().equals(currentInstace.getUrl())){
- defaultSelect = items.size()-1;
+ if (instance.getUrl().equals(currentInstace.getUrl())) {
+ defaultSelect = items.size() - 1;
}
}
- ArrayAdapter adapter = new ArrayAdapter<>(this, R.layout.instance_spinner_item, items);
+ ArrayAdapter adapter = new ArrayAdapter<>(this,
+ R.layout.instance_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(defaultSelect, false);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
- public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ public void onItemSelected(final AdapterView> parent, final View view,
+ final int position, final long id) {
PeertubeInstance newInstance = instances.get(position);
- if(newInstance.getUrl().equals(PeertubeHelper.getCurrentInstance().getUrl())) return;
+ if (newInstance.getUrl().equals(PeertubeHelper.getCurrentInstance().getUrl())) {
+ return;
+ }
PeertubeHelper.selectInstance(newInstance, getApplicationContext());
changeService(menuItem);
drawer.closeDrawers();
new Handler(Looper.getMainLooper()).postDelayed(() -> {
- getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+ getSupportFragmentManager().popBackStack(null,
+ FragmentManager.POP_BACK_STACK_INCLUSIVE);
recreate();
}, 300);
}
@Override
- public void onNothingSelected(AdapterView> parent) {
+ public void onNothingSelected(final AdapterView> parent) {
}
});
@@ -379,9 +397,10 @@ public class MainActivity extends AppCompatActivity {
for (final String ks : service.getKioskList().getAvailableKiosks()) {
drawerItems.getMenu()
- .add(R.id.menu_tabs_group, kioskId, ORDER, KioskTranslator.getTranslatedKioskName(ks, this))
+ .add(R.id.menu_tabs_group, kioskId, ORDER,
+ KioskTranslator.getTranslatedKioskName(ks, this))
.setIcon(KioskTranslator.getKioskIcons(ks, this));
- kioskId ++;
+ kioskId++;
}
drawerItems.getMenu()
@@ -420,15 +439,17 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onResume() {
assureCorrectAppLanguage(this);
- Localization.init(getApplicationContext()); //change the date format to match the selected language on resume
+ // Change the date format to match the selected language on resume
+ Localization.init(getApplicationContext());
super.onResume();
- // close drawer on return, and don't show animation, so its looks like the drawer isn't open
- // when the user returns to MainActivity
+ // Close drawer on return, and don't show animation,
+ // so it looks like the drawer isn't open when the user returns to MainActivity
drawer.closeDrawer(GravityCompat.START, false);
try {
final int selectedServiceId = ServiceHelper.getSelectedServiceId(this);
- final String selectedServiceName = NewPipe.getService(selectedServiceId).getServiceInfo().getName();
+ final String selectedServiceName = NewPipe.getService(selectedServiceId)
+ .getServiceInfo().getName();
headerServiceView.setText(selectedServiceName);
headerServiceIcon.setImageResource(ServiceHelper.getIcon(selectedServiceId));
@@ -441,15 +462,20 @@ public class MainActivity extends AppCompatActivity {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
if (sharedPreferences.getBoolean(Constants.KEY_THEME_CHANGE, false)) {
- if (DEBUG) Log.d(TAG, "Theme has changed, recreating activity...");
+ if (DEBUG) {
+ Log.d(TAG, "Theme has changed, recreating activity...");
+ }
sharedPreferences.edit().putBoolean(Constants.KEY_THEME_CHANGE, false).apply();
- // https://stackoverflow.com/questions/10844112/runtimeexception-performing-pause-of-activity-that-is-not-resumed
- // Briefly, let the activity resume properly posting the recreate call to end of the message queue
+ // https://stackoverflow.com/questions/10844112/
+ // Briefly, let the activity resume
+ // properly posting the recreate call to end of the message queue
new Handler(Looper.getMainLooper()).post(MainActivity.this::recreate);
}
if (sharedPreferences.getBoolean(Constants.KEY_MAIN_PAGE_CHANGE, false)) {
- if (DEBUG) Log.d(TAG, "main page has changed, recreating main fragment...");
+ if (DEBUG) {
+ Log.d(TAG, "main page has changed, recreating main fragment...");
+ }
sharedPreferences.edit().putBoolean(Constants.KEY_MAIN_PAGE_CHANGE, false).apply();
NavigationHelper.openMainActivity(this);
}
@@ -460,13 +486,18 @@ public class MainActivity extends AppCompatActivity {
}
@Override
- protected void onNewIntent(Intent intent) {
- if (DEBUG) Log.d(TAG, "onNewIntent() called with: intent = [" + intent + "]");
+ protected void onNewIntent(final Intent intent) {
+ if (DEBUG) {
+ Log.d(TAG, "onNewIntent() called with: intent = [" + intent + "]");
+ }
if (intent != null) {
// Return if launched from a launcher (e.g. Nova Launcher, Pixel Launcher ...)
// to not destroy the already created backstack
String action = intent.getAction();
- if ((action != null && action.equals(Intent.ACTION_MAIN)) && intent.hasCategory(Intent.CATEGORY_LAUNCHER)) return;
+ if ((action != null && action.equals(Intent.ACTION_MAIN))
+ && intent.hasCategory(Intent.CATEGORY_LAUNCHER)) {
+ return;
+ }
}
super.onNewIntent(intent);
@@ -476,24 +507,32 @@ public class MainActivity extends AppCompatActivity {
@Override
public void onBackPressed() {
- if (DEBUG) Log.d(TAG, "onBackPressed() called");
-
- Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_holder);
- // If current fragment implements BackPressable (i.e. can/wanna handle back press) delegate the back press to it
- if (fragment instanceof BackPressable) {
- if (((BackPressable) fragment).onBackPressed()) return;
+ if (DEBUG) {
+ Log.d(TAG, "onBackPressed() called");
}
+ Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_holder);
+ // If current fragment implements BackPressable (i.e. can/wanna handle back press)
+ // delegate the back press to it
+ if (fragment instanceof BackPressable) {
+ if (((BackPressable) fragment).onBackPressed()) {
+ return;
+ }
+ }
if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
finish();
- } else super.onBackPressed();
+ } else {
+ super.onBackPressed();
+ }
}
@Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- for (int i: grantResults){
- if (i == PackageManager.PERMISSION_DENIED){
+ public void onRequestPermissionsResult(final int requestCode,
+ @NonNull final String[] permissions,
+ @NonNull final int[] grantResults) {
+ for (int i : grantResults) {
+ if (i == PackageManager.PERMISSION_DENIED) {
return;
}
}
@@ -502,7 +541,8 @@ public class MainActivity extends AppCompatActivity {
NavigationHelper.openDownloads(this);
break;
case PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE:
- Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_holder);
+ Fragment fragment = getSupportFragmentManager()
+ .findFragmentById(R.id.fragment_holder);
if (fragment instanceof VideoDetailFragment) {
((VideoDetailFragment) fragment).openDownloadDialog();
}
@@ -547,8 +587,10 @@ public class MainActivity extends AppCompatActivity {
//////////////////////////////////////////////////////////////////////////*/
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
- if (DEBUG) Log.d(TAG, "onCreateOptionsMenu() called with: menu = [" + menu + "]");
+ public boolean onCreateOptionsMenu(final Menu menu) {
+ if (DEBUG) {
+ Log.d(TAG, "onCreateOptionsMenu() called with: menu = [" + menu + "]");
+ }
super.onCreateOptionsMenu(menu);
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_holder);
@@ -557,8 +599,8 @@ public class MainActivity extends AppCompatActivity {
}
if (!(fragment instanceof SearchFragment)) {
- findViewById(R.id.toolbar).findViewById(R.id.toolbar_search_container).setVisibility(View.GONE);
-
+ findViewById(R.id.toolbar).findViewById(R.id.toolbar_search_container)
+ .setVisibility(View.GONE);
}
ActionBar actionBar = getSupportActionBar();
@@ -572,8 +614,10 @@ public class MainActivity extends AppCompatActivity {
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (DEBUG) Log.d(TAG, "onOptionsItemSelected() called with: item = [" + item + "]");
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ if (DEBUG) {
+ Log.d(TAG, "onOptionsItemSelected() called with: item = [" + item + "]");
+ }
int id = item.getItemId();
switch (id) {
@@ -590,11 +634,15 @@ public class MainActivity extends AppCompatActivity {
//////////////////////////////////////////////////////////////////////////*/
private void initFragments() {
- if (DEBUG) Log.d(TAG, "initFragments() called");
+ if (DEBUG) {
+ Log.d(TAG, "initFragments() called");
+ }
StateSaver.clearStateFiles();
if (getIntent() != null && getIntent().hasExtra(Constants.KEY_LINK_TYPE)) {
handleIntent(getIntent());
- } else NavigationHelper.gotoMainFragment(getSupportFragmentManager());
+ } else {
+ NavigationHelper.gotoMainFragment(getSupportFragmentManager());
+ }
}
/*//////////////////////////////////////////////////////////////////////////
@@ -602,12 +650,14 @@ public class MainActivity extends AppCompatActivity {
//////////////////////////////////////////////////////////////////////////*/
private void updateDrawerNavigation() {
- if (getSupportActionBar() == null) return;
+ if (getSupportActionBar() == null) {
+ return;
+ }
final Toolbar toolbar = findViewById(R.id.toolbar);
- final DrawerLayout drawer = findViewById(R.id.drawer_layout);
- final Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_holder);
+ final Fragment fragment = getSupportFragmentManager()
+ .findFragmentById(R.id.fragment_holder);
if (fragment instanceof MainFragment) {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
if (toggle != null) {
@@ -622,26 +672,23 @@ public class MainActivity extends AppCompatActivity {
}
}
- private void updateDrawerHeaderString(String content) {
- NavigationView navigationView = findViewById(R.id.navigation);
- View hView = navigationView.getHeaderView(0);
- Button action = hView.findViewById(R.id.drawer_header_action_button);
-
- action.setContentDescription(content);
- }
-
- private void handleIntent(Intent intent) {
+ private void handleIntent(final Intent intent) {
try {
- if (DEBUG) Log.d(TAG, "handleIntent() called with: intent = [" + intent + "]");
+ if (DEBUG) {
+ Log.d(TAG, "handleIntent() called with: intent = [" + intent + "]");
+ }
if (intent.hasExtra(Constants.KEY_LINK_TYPE)) {
String url = intent.getStringExtra(Constants.KEY_URL);
int serviceId = intent.getIntExtra(Constants.KEY_SERVICE_ID, 0);
String title = intent.getStringExtra(Constants.KEY_TITLE);
- switch (((StreamingService.LinkType) intent.getSerializableExtra(Constants.KEY_LINK_TYPE))) {
+ switch (((StreamingService.LinkType) intent
+ .getSerializableExtra(Constants.KEY_LINK_TYPE))) {
case STREAM:
- boolean autoPlay = intent.getBooleanExtra(VideoDetailFragment.AUTO_PLAY, false);
- NavigationHelper.openVideoDetailFragment(getSupportFragmentManager(), serviceId, url, title, autoPlay);
+ boolean autoPlay = intent
+ .getBooleanExtra(VideoDetailFragment.AUTO_PLAY, false);
+ NavigationHelper.openVideoDetailFragment(getSupportFragmentManager(),
+ serviceId, url, title, autoPlay);
break;
case CHANNEL:
NavigationHelper.openChannelFragment(getSupportFragmentManager(),
@@ -658,7 +705,9 @@ public class MainActivity extends AppCompatActivity {
}
} else if (intent.hasExtra(Constants.KEY_OPEN_SEARCH)) {
String searchString = intent.getStringExtra(Constants.KEY_SEARCH_STRING);
- if (searchString == null) searchString = "";
+ if (searchString == null) {
+ searchString = "";
+ }
int serviceId = intent.getIntExtra(Constants.KEY_SERVICE_ID, 0);
NavigationHelper.openSearchFragment(
getSupportFragmentManager(),
diff --git a/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java b/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java
index 81b5dd72f..c59c48367 100644
--- a/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java
+++ b/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java
@@ -13,14 +13,13 @@ import static org.schabi.newpipe.database.Migrations.MIGRATION_1_2;
import static org.schabi.newpipe.database.Migrations.MIGRATION_2_3;
public final class NewPipeDatabase {
-
private static volatile AppDatabase databaseInstance;
private NewPipeDatabase() {
//no instance
}
- private static AppDatabase getDatabase(Context context) {
+ private static AppDatabase getDatabase(final Context context) {
return Room
.databaseBuilder(context.getApplicationContext(), AppDatabase.class, DATABASE_NAME)
.addMigrations(MIGRATION_1_2, MIGRATION_2_3)
@@ -28,13 +27,14 @@ public final class NewPipeDatabase {
}
@NonNull
- public static AppDatabase getInstance(@NonNull Context context) {
+ public static AppDatabase getInstance(@NonNull final Context context) {
AppDatabase result = databaseInstance;
if (result == null) {
synchronized (NewPipeDatabase.class) {
result = databaseInstance;
if (result == null) {
- databaseInstance = (result = getDatabase(context));
+ databaseInstance = getDatabase(context);
+ result = databaseInstance;
}
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/PanicResponderActivity.java b/app/src/main/java/org/schabi/newpipe/PanicResponderActivity.java
index 4118070d5..2e1abd598 100644
--- a/app/src/main/java/org/schabi/newpipe/PanicResponderActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/PanicResponderActivity.java
@@ -1,4 +1,3 @@
-
package org.schabi.newpipe;
import android.annotation.SuppressLint;
@@ -26,17 +25,18 @@ import android.os.Bundle;
*/
public class PanicResponderActivity extends Activity {
-
public static final String PANIC_TRIGGER_ACTION = "info.guardianproject.panic.action.TRIGGER";
@SuppressLint("NewApi")
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (intent != null && PANIC_TRIGGER_ACTION.equals(intent.getAction())) {
- // TODO explicitly clear the search results once they are restored when the app restarts
- // or if the app reloads the current video after being killed, that should be cleared also
+ // TODO: Explicitly clear the search results
+ // once they are restored when the app restarts
+ // or if the app reloads the current video after being killed,
+ // that should be cleared also
ExitActivity.exitAndRemoveFromRecentApps(this);
}
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index 4219638d6..a8a83e13e 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -3,11 +3,6 @@ package org.schabi.newpipe;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
-import androidx.core.app.NavUtils;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
-
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@@ -16,9 +11,13 @@ import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
-import org.schabi.newpipe.util.ThemeHelper;
-
import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+import androidx.core.app.NavUtils;
+
+import org.schabi.newpipe.util.ThemeHelper;
/*
* Created by beneth on 06.12.16.
@@ -49,7 +48,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
private String foundCookies = "";
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(final Bundle savedInstanceState) {
ThemeHelper.setTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recaptcha);
@@ -73,7 +72,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
webView.setWebViewClient(new WebViewClient() {
@Override
- public void onPageFinished(WebView view, String url) {
+ public void onPageFinished(final WebView view, final String url) {
super.onPageFinished(view, url);
handleCookies(url);
}
@@ -84,7 +83,8 @@ public class ReCaptchaActivity extends AppCompatActivity {
webView.clearHistory();
android.webkit.CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- cookieManager.removeAllCookies(aBoolean -> {});
+ cookieManager.removeAllCookies(aBoolean -> {
+ });
} else {
cookieManager.removeAllCookie();
}
@@ -93,7 +93,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
+ public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu_recaptcha, menu);
ActionBar actionBar = getSupportActionBar();
@@ -112,7 +112,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onOptionsItemSelected(final MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.menu_item_done:
@@ -137,24 +137,29 @@ public class ReCaptchaActivity extends AppCompatActivity {
}
-
- private void handleCookies(String url) {
+ private void handleCookies(final String url) {
String cookies = CookieManager.getInstance().getCookie(url);
- if (MainActivity.DEBUG) Log.d(TAG, "handleCookies: url=" + url + "; cookies=" + (cookies == null ? "null" : cookies));
- if (cookies == null) return;
+ if (MainActivity.DEBUG) {
+ Log.d(TAG, "handleCookies: "
+ + "url=" + url + "; cookies=" + (cookies == null ? "null" : cookies));
+ }
+ if (cookies == null) {
+ return;
+ }
addYoutubeCookies(cookies);
// add other methods to extract cookies here
}
- private void addYoutubeCookies(@NonNull String cookies) {
- if (cookies.contains("s_gl=") || cookies.contains("goojf=") || cookies.contains("VISITOR_INFO1_LIVE=")) {
+ private void addYoutubeCookies(@NonNull final String cookies) {
+ if (cookies.contains("s_gl=") || cookies.contains("goojf=")
+ || cookies.contains("VISITOR_INFO1_LIVE=")) {
// youtube seems to also need the other cookies:
addCookie(cookies);
}
}
- private void addCookie(String cookie) {
+ private void addCookie(final String cookie) {
if (foundCookies.contains(cookie)) {
return;
}
diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
index 1ed659e47..bb24c9681 100644
--- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
@@ -54,6 +54,8 @@ import org.schabi.newpipe.util.urlfinder.UrlFinder;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
import icepick.Icepick;
@@ -71,29 +73,31 @@ import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCap
import static org.schabi.newpipe.util.ThemeHelper.resolveResourceIdFromAttr;
/**
- * Get the url from the intent and open it in the chosen preferred player
+ * Get the url from the intent and open it in the chosen preferred player.
*/
public class RouterActivity extends AppCompatActivity {
-
+ public static final String INTERNAL_ROUTE_KEY = "internalRoute";
+ /**
+ * Removes invisible separators (\p{Z}) and punctuation characters including
+ * brackets (\p{P}). See http://www.regular-expressions.info/unicode.html for
+ * more details.
+ */
+ private static final String REGEX_REMOVE_FROM_URL = "[\\p{Z}\\p{P}]";
+ protected final CompositeDisposable disposables = new CompositeDisposable();
@State
protected int currentServiceId = -1;
- private StreamingService currentService;
@State
protected LinkType currentLinkType;
@State
protected int selectedRadioPosition = -1;
protected int selectedPreviously = -1;
-
protected String currentUrl;
protected boolean internalRoute = false;
- protected final CompositeDisposable disposables = new CompositeDisposable();
-
+ private StreamingService currentService;
private boolean selectionIsDownload = false;
- public static final String internalRouteKey = "internalRoute";
-
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Icepick.restoreInstanceState(this, savedInstanceState);
@@ -106,14 +110,14 @@ public class RouterActivity extends AppCompatActivity {
}
}
- internalRoute = getIntent().getBooleanExtra(internalRouteKey, false);
+ internalRoute = getIntent().getBooleanExtra(INTERNAL_ROUTE_KEY, false);
setTheme(ThemeHelper.isLightThemeSelected(this)
? R.style.RouterActivityThemeLight : R.style.RouterActivityThemeDark);
}
@Override
- protected void onSaveInstanceState(Bundle outState) {
+ protected void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}
@@ -132,7 +136,7 @@ public class RouterActivity extends AppCompatActivity {
disposables.clear();
}
- private void handleUrl(String url) {
+ private void handleUrl(final String url) {
disposables.add(Observable
.fromCallable(() -> {
if (currentServiceId == -1) {
@@ -157,13 +161,14 @@ public class RouterActivity extends AppCompatActivity {
}, this::handleError));
}
- private void handleError(Throwable error) {
+ private void handleError(final Throwable error) {
error.printStackTrace();
if (error instanceof ExtractionException) {
Toast.makeText(this, R.string.url_not_supported_toast, Toast.LENGTH_LONG).show();
} else {
- ExtractorHelper.handleGeneralException(this, -1, null, error, UserAction.SOMETHING_ELSE, null);
+ ExtractorHelper.handleGeneralException(this, -1, null, error,
+ UserAction.SOMETHING_ELSE, null);
}
finish();
@@ -175,8 +180,11 @@ public class RouterActivity extends AppCompatActivity {
}
protected void onSuccess() {
- final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
- final String selectedChoiceKey = preferences.getString(getString(R.string.preferred_open_action_key), getString(R.string.preferred_open_action_default));
+ final SharedPreferences preferences = PreferenceManager
+ .getDefaultSharedPreferences(this);
+ final String selectedChoiceKey = preferences
+ .getString(getString(R.string.preferred_open_action_key),
+ getString(R.string.preferred_open_action_default));
final String showInfoKey = getString(R.string.show_info_key);
final String videoPlayerKey = getString(R.string.video_player_key);
@@ -186,7 +194,8 @@ public class RouterActivity extends AppCompatActivity {
final String alwaysAskKey = getString(R.string.always_ask_open_action_key);
if (selectedChoiceKey.equals(alwaysAskKey)) {
- final List choices = getChoicesForService(currentService, currentLinkType);
+ final List choices
+ = getChoicesForService(currentService, currentLinkType);
switch (choices.size()) {
case 1:
@@ -204,20 +213,26 @@ public class RouterActivity extends AppCompatActivity {
} else if (selectedChoiceKey.equals(downloadKey)) {
handleChoice(downloadKey);
} else {
- final boolean isExtVideoEnabled = preferences.getBoolean(getString(R.string.use_external_video_player_key), false);
- final boolean isExtAudioEnabled = preferences.getBoolean(getString(R.string.use_external_audio_player_key), false);
- final boolean isVideoPlayerSelected = selectedChoiceKey.equals(videoPlayerKey) || selectedChoiceKey.equals(popupPlayerKey);
+ final boolean isExtVideoEnabled = preferences.getBoolean(
+ getString(R.string.use_external_video_player_key), false);
+ final boolean isExtAudioEnabled = preferences.getBoolean(
+ getString(R.string.use_external_audio_player_key), false);
+ final boolean isVideoPlayerSelected = selectedChoiceKey.equals(videoPlayerKey)
+ || selectedChoiceKey.equals(popupPlayerKey);
final boolean isAudioPlayerSelected = selectedChoiceKey.equals(backgroundPlayerKey);
if (currentLinkType != LinkType.STREAM) {
- if (isExtAudioEnabled && isAudioPlayerSelected || isExtVideoEnabled && isVideoPlayerSelected) {
- Toast.makeText(this, R.string.external_player_unsupported_link_type, Toast.LENGTH_LONG).show();
+ if (isExtAudioEnabled && isAudioPlayerSelected
+ || isExtVideoEnabled && isVideoPlayerSelected) {
+ Toast.makeText(this, R.string.external_player_unsupported_link_type,
+ Toast.LENGTH_LONG).show();
handleChoice(showInfoKey);
return;
}
}
- final List capabilities = currentService.getServiceInfo().getMediaCapabilities();
+ final List capabilities
+ = currentService.getServiceInfo().getMediaCapabilities();
boolean serviceSupportsChoice = false;
if (isVideoPlayerSelected) {
@@ -239,7 +254,8 @@ public class RouterActivity extends AppCompatActivity {
final Context themeWrapperContext = getThemeWrapperContext();
final LayoutInflater inflater = LayoutInflater.from(themeWrapperContext);
- final LinearLayout rootLayout = (LinearLayout) inflater.inflate(R.layout.preferred_player_dialog_view, null, false);
+ final LinearLayout rootLayout = (LinearLayout) inflater.inflate(
+ R.layout.preferred_player_dialog_view, null, false);
final RadioGroup radioGroup = rootLayout.findViewById(android.R.id.list);
final DialogInterface.OnClickListener dialogButtonsClickListener = (dialog, which) -> {
@@ -250,7 +266,9 @@ public class RouterActivity extends AppCompatActivity {
handleChoice(choice.key);
if (which == DialogInterface.BUTTON_POSITIVE) {
- preferences.edit().putString(getString(R.string.preferred_open_action_key), choice.key).apply();
+ preferences.edit()
+ .putString(getString(R.string.preferred_open_action_key), choice.key)
+ .apply();
}
};
@@ -261,7 +279,9 @@ public class RouterActivity extends AppCompatActivity {
.setNegativeButton(R.string.just_once, dialogButtonsClickListener)
.setPositiveButton(R.string.always, dialogButtonsClickListener)
.setOnDismissListener((dialog) -> {
- if (!selectionIsDownload) finish();
+ if (!selectionIsDownload) {
+ finish();
+ }
})
.create();
@@ -270,10 +290,13 @@ public class RouterActivity extends AppCompatActivity {
setDialogButtonsState(alertDialog, radioGroup.getCheckedRadioButtonId() != -1);
});
- radioGroup.setOnCheckedChangeListener((group, checkedId) -> setDialogButtonsState(alertDialog, true));
+ radioGroup.setOnCheckedChangeListener((group, checkedId) ->
+ setDialogButtonsState(alertDialog, true));
final View.OnClickListener radioButtonsClickListener = v -> {
final int indexOfChild = radioGroup.indexOfChild(v);
- if (indexOfChild == -1) return;
+ if (indexOfChild == -1) {
+ return;
+ }
selectedPreviously = selectedRadioPosition;
selectedRadioPosition = indexOfChild;
@@ -285,18 +308,21 @@ public class RouterActivity extends AppCompatActivity {
int id = 12345;
for (AdapterChoiceItem item : choices) {
- final RadioButton radioButton = (RadioButton) inflater.inflate(R.layout.list_radio_icon_item, null);
+ final RadioButton radioButton
+ = (RadioButton) inflater.inflate(R.layout.list_radio_icon_item, null);
radioButton.setText(item.description);
radioButton.setCompoundDrawablesWithIntrinsicBounds(item.icon, 0, 0, 0);
radioButton.setChecked(false);
radioButton.setId(id++);
- radioButton.setLayoutParams(new RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+ radioButton.setLayoutParams(new RadioGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
radioButton.setOnClickListener(radioButtonsClickListener);
radioGroup.addView(radioButton);
}
if (selectedRadioPosition == -1) {
- final String lastSelectedPlayer = preferences.getString(getString(R.string.preferred_open_action_last_selected_key), null);
+ final String lastSelectedPlayer = preferences.getString(
+ getString(R.string.preferred_open_action_last_selected_key), null);
if (!TextUtils.isEmpty(lastSelectedPlayer)) {
for (int i = 0; i < choices.size(); i++) {
AdapterChoiceItem c = choices.get(i);
@@ -317,46 +343,58 @@ public class RouterActivity extends AppCompatActivity {
alertDialog.show();
}
- private List getChoicesForService(StreamingService service, LinkType linkType) {
+ private List getChoicesForService(final StreamingService service,
+ final LinkType linkType) {
final Context context = getThemeWrapperContext();
final List returnList = new ArrayList<>();
- final List capabilities = service.getServiceInfo().getMediaCapabilities();
+ final List capabilities
+ = service.getServiceInfo().getMediaCapabilities();
- final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
- boolean isExtVideoEnabled = preferences.getBoolean(getString(R.string.use_external_video_player_key), false);
- boolean isExtAudioEnabled = preferences.getBoolean(getString(R.string.use_external_audio_player_key), false);
+ final SharedPreferences preferences = PreferenceManager
+ .getDefaultSharedPreferences(this);
+ boolean isExtVideoEnabled = preferences.getBoolean(
+ getString(R.string.use_external_video_player_key), false);
+ boolean isExtAudioEnabled = preferences.getBoolean(
+ getString(R.string.use_external_audio_player_key), false);
- returnList.add(new AdapterChoiceItem(getString(R.string.show_info_key), getString(R.string.show_info),
+ returnList.add(new AdapterChoiceItem(getString(R.string.show_info_key),
+ getString(R.string.show_info),
resolveResourceIdFromAttr(context, R.attr.info)));
if (capabilities.contains(VIDEO) && !(isExtVideoEnabled && linkType != LinkType.STREAM)) {
- returnList.add(new AdapterChoiceItem(getString(R.string.video_player_key), getString(R.string.video_player),
+ returnList.add(new AdapterChoiceItem(getString(R.string.video_player_key),
+ getString(R.string.video_player),
resolveResourceIdFromAttr(context, R.attr.play)));
- returnList.add(new AdapterChoiceItem(getString(R.string.popup_player_key), getString(R.string.popup_player),
+ returnList.add(new AdapterChoiceItem(getString(R.string.popup_player_key),
+ getString(R.string.popup_player),
resolveResourceIdFromAttr(context, R.attr.popup)));
}
if (capabilities.contains(AUDIO) && !(isExtAudioEnabled && linkType != LinkType.STREAM)) {
- returnList.add(new AdapterChoiceItem(getString(R.string.background_player_key), getString(R.string.background_player),
+ returnList.add(new AdapterChoiceItem(getString(R.string.background_player_key),
+ getString(R.string.background_player),
resolveResourceIdFromAttr(context, R.attr.audio)));
}
- returnList.add(new AdapterChoiceItem(getString(R.string.download_key), getString(R.string.download),
+ returnList.add(new AdapterChoiceItem(getString(R.string.download_key),
+ getString(R.string.download),
resolveResourceIdFromAttr(context, R.attr.download)));
return returnList;
}
private Context getThemeWrapperContext() {
- return new ContextThemeWrapper(this,
- ThemeHelper.isLightThemeSelected(this) ? R.style.LightTheme : R.style.DarkTheme);
+ return new ContextThemeWrapper(this, ThemeHelper.isLightThemeSelected(this)
+ ? R.style.LightTheme : R.style.DarkTheme);
}
- private void setDialogButtonsState(AlertDialog dialog, boolean state) {
+ private void setDialogButtonsState(final AlertDialog dialog, final boolean state) {
final Button negativeButton = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
final Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
- if (negativeButton == null || positiveButton == null) return;
+ if (negativeButton == null || positiveButton == null) {
+ return;
+ }
negativeButton.setEnabled(state);
positiveButton.setEnabled(state);
@@ -372,21 +410,25 @@ public class RouterActivity extends AppCompatActivity {
}
private void handleChoice(final String selectedChoiceKey) {
- final List validChoicesList = Arrays.asList(getResources().getStringArray(R.array.preferred_open_action_values_list));
+ final List validChoicesList = Arrays.asList(getResources()
+ .getStringArray(R.array.preferred_open_action_values_list));
if (validChoicesList.contains(selectedChoiceKey)) {
PreferenceManager.getDefaultSharedPreferences(this).edit()
- .putString(getString(R.string.preferred_open_action_last_selected_key), selectedChoiceKey)
+ .putString(getString(
+ R.string.preferred_open_action_last_selected_key), selectedChoiceKey)
.apply();
}
- if (selectedChoiceKey.equals(getString(R.string.popup_player_key)) && !PermissionHelper.isPopupEnabled(this)) {
+ if (selectedChoiceKey.equals(getString(R.string.popup_player_key))
+ && !PermissionHelper.isPopupEnabled(this)) {
PermissionHelper.showPopupEnablementToast(this);
finish();
return;
}
if (selectedChoiceKey.equals(getString(R.string.download_key))) {
- if (PermissionHelper.checkStoragePermissions(this, PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) {
+ if (PermissionHelper.checkStoragePermissions(this,
+ PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) {
selectionIsDownload = true;
openDownloadDialog();
}
@@ -414,7 +456,8 @@ public class RouterActivity extends AppCompatActivity {
}
final Intent intent = new Intent(this, FetcherService.class);
- final Choice choice = new Choice(currentService.getServiceId(), currentLinkType, currentUrl, selectedChoiceKey);
+ final Choice choice = new Choice(currentService.getServiceId(), currentLinkType,
+ currentUrl, selectedChoiceKey);
intent.putExtra(FetcherService.KEY_CHOICE, choice);
startService(intent);
@@ -427,12 +470,11 @@ public class RouterActivity extends AppCompatActivity {
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((@NonNull StreamInfo result) -> {
- List sortedVideoStreams = ListHelper.getSortedStreamVideosList(this,
- result.getVideoStreams(),
- result.getVideoOnlyStreams(),
- false);
- int selectedVideoStreamIndex = ListHelper.getDefaultResolutionIndex(this,
- sortedVideoStreams);
+ List sortedVideoStreams = ListHelper
+ .getSortedStreamVideosList(this, result.getVideoStreams(),
+ result.getVideoOnlyStreams(), false);
+ int selectedVideoStreamIndex = ListHelper
+ .getDefaultResolutionIndex(this, sortedVideoStreams);
FragmentManager fm = getSupportFragmentManager();
DownloadDialog downloadDialog = DownloadDialog.newInstance(result);
@@ -450,7 +492,9 @@ public class RouterActivity extends AppCompatActivity {
}
@Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ public void onRequestPermissionsResult(final int requestCode,
+ @NonNull final String[] permissions,
+ @NonNull final int[] grantResults) {
for (int i : grantResults) {
if (i == PackageManager.PERMISSION_DENIED) {
finish();
@@ -462,12 +506,73 @@ public class RouterActivity extends AppCompatActivity {
}
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Service Fetcher
+ //////////////////////////////////////////////////////////////////////////*/
+
+ private String removeHeadingGibberish(final String input) {
+ int start = 0;
+ for (int i = input.indexOf("://") - 1; i >= 0; i--) {
+ if (!input.substring(i, i + 1).matches("\\p{L}")) {
+ start = i + 1;
+ break;
+ }
+ }
+ return input.substring(start);
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Utils
+ //////////////////////////////////////////////////////////////////////////*/
+
+ private String trim(final String input) {
+ if (input == null || input.length() < 1) {
+ return input;
+ } else {
+ String output = input;
+ while (output.length() > 0 && output.substring(0, 1).matches(REGEX_REMOVE_FROM_URL)) {
+ output = output.substring(1);
+ }
+ while (output.length() > 0
+ && output.substring(output.length() - 1).matches(REGEX_REMOVE_FROM_URL)) {
+ output = output.substring(0, output.length() - 1);
+ }
+ return output;
+ }
+ }
+
+ /**
+ * Retrieves all Strings which look remotely like URLs from a text.
+ * Used if NewPipe was called through share menu.
+ *
+ * @param sharedText text to scan for URLs.
+ * @return potential URLs
+ */
+ protected String[] getUris(final String sharedText) {
+ final Collection result = new HashSet<>();
+ if (sharedText != null) {
+ final String[] array = sharedText.split("\\p{Space}");
+ for (String s : array) {
+ s = trim(s);
+ if (s.length() != 0) {
+ if (s.matches(".+://.+")) {
+ result.add(removeHeadingGibberish(s));
+ } else if (s.matches(".+\\..+")) {
+ result.add("http://" + s);
+ }
+ }
+ }
+ }
+ return result.toArray(new String[result.size()]);
+ }
+
private static class AdapterChoiceItem {
- final String description, key;
+ final String description;
+ final String key;
@DrawableRes
final int icon;
- AdapterChoiceItem(String key, String description, int icon) {
+ AdapterChoiceItem(final String key, final String description, final int icon) {
this.description = description;
this.key = key;
this.icon = icon;
@@ -476,10 +581,12 @@ public class RouterActivity extends AppCompatActivity {
private static class Choice implements Serializable {
final int serviceId;
- final String url, playerChoice;
+ final String url;
+ final String playerChoice;
final LinkType linkType;
- Choice(int serviceId, LinkType linkType, String url, String playerChoice) {
+ Choice(final int serviceId, final LinkType linkType,
+ final String url, final String playerChoice) {
this.serviceId = serviceId;
this.linkType = linkType;
this.url = url;
@@ -492,14 +599,10 @@ public class RouterActivity extends AppCompatActivity {
}
}
- /*//////////////////////////////////////////////////////////////////////////
- // Service Fetcher
- //////////////////////////////////////////////////////////////////////////*/
-
public static class FetcherService extends IntentService {
- private static final int ID = 456;
public static final String KEY_CHOICE = "key_choice";
+ private static final int ID = 456;
private Disposable fetcher;
public FetcherService() {
@@ -513,16 +616,20 @@ public class RouterActivity extends AppCompatActivity {
}
@Override
- protected void onHandleIntent(@Nullable Intent intent) {
- if (intent == null) return;
+ protected void onHandleIntent(@Nullable final Intent intent) {
+ if (intent == null) {
+ return;
+ }
final Serializable serializable = intent.getSerializableExtra(KEY_CHOICE);
- if (!(serializable instanceof Choice)) return;
+ if (!(serializable instanceof Choice)) {
+ return;
+ }
Choice playerChoice = (Choice) serializable;
handleChoice(playerChoice);
}
- public void handleChoice(Choice choice) {
+ public void handleChoice(final Choice choice) {
Single extends Info> single = null;
UserAction userAction = UserAction.SOMETHING_ELSE;
@@ -549,22 +656,27 @@ public class RouterActivity extends AppCompatActivity {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(info -> {
resultHandler.accept(info);
- if (fetcher != null) fetcher.dispose();
+ if (fetcher != null) {
+ fetcher.dispose();
+ }
}, throwable -> ExtractorHelper.handleGeneralException(this,
- choice.serviceId, choice.url, throwable, finalUserAction, ", opened with " + choice.playerChoice));
+ choice.serviceId, choice.url, throwable, finalUserAction,
+ ", opened with " + choice.playerChoice));
}
}
- public Consumer getResultHandler(Choice choice) {
+ public Consumer getResultHandler(final Choice choice) {
return info -> {
final String videoPlayerKey = getString(R.string.video_player_key);
final String backgroundPlayerKey = getString(R.string.background_player_key);
final String popupPlayerKey = getString(R.string.popup_player_key);
- final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
- boolean isExtVideoEnabled = preferences.getBoolean(getString(R.string.use_external_video_player_key), false);
- boolean isExtAudioEnabled = preferences.getBoolean(getString(R.string.use_external_audio_player_key), false);
- ;
+ final SharedPreferences preferences = PreferenceManager
+ .getDefaultSharedPreferences(this);
+ boolean isExtVideoEnabled = preferences.getBoolean(
+ getString(R.string.use_external_video_player_key), false);
+ boolean isExtAudioEnabled = preferences.getBoolean(
+ getString(R.string.use_external_audio_player_key), false);
PlayQueue playQueue;
String playerChoice = choice.playerChoice;
@@ -590,7 +702,9 @@ public class RouterActivity extends AppCompatActivity {
}
if (info instanceof ChannelInfo || info instanceof PlaylistInfo) {
- playQueue = info instanceof ChannelInfo ? new ChannelPlayQueue((ChannelInfo) info) : new PlaylistPlayQueue((PlaylistInfo) info);
+ playQueue = info instanceof ChannelInfo
+ ? new ChannelPlayQueue((ChannelInfo) info)
+ : new PlaylistPlayQueue((PlaylistInfo) info);
if (playerChoice.equals(videoPlayerKey)) {
NavigationHelper.playOnMainPlayer(this, playQueue, true);
@@ -607,7 +721,9 @@ public class RouterActivity extends AppCompatActivity {
public void onDestroy() {
super.onDestroy();
stopForeground(true);
- if (fetcher != null) fetcher.dispose();
+ if (fetcher != null) {
+ fetcher.dispose();
+ }
}
private NotificationCompat.Builder createNotification() {
@@ -615,8 +731,10 @@ public class RouterActivity extends AppCompatActivity {
.setOngoing(true)
.setSmallIcon(R.drawable.ic_newpipe_triangle_white)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
- .setContentTitle(getString(R.string.preferred_player_fetcher_notification_title))
- .setContentText(getString(R.string.preferred_player_fetcher_notification_message));
+ .setContentTitle(
+ getString(R.string.preferred_player_fetcher_notification_title))
+ .setContentText(
+ getString(R.string.preferred_player_fetcher_notification_message));
}
}
@@ -625,7 +743,7 @@ public class RouterActivity extends AppCompatActivity {
//////////////////////////////////////////////////////////////////////////*/
@Nullable
- private String getUrl(Intent intent) {
+ private String getUrl(final Intent intent) {
String foundUrl = null;
if (intent.getData() != null) {
// Called from another app
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index 0a4e9e865..2fb8ac7f7 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -4,21 +4,22 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
-import com.google.android.material.tabs.TabLayout;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
+
+import com.google.android.material.tabs.TabLayout;
import org.schabi.newpipe.BuildConfig;
import org.schabi.newpipe.R;
@@ -27,26 +28,41 @@ import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
public class AboutActivity extends AppCompatActivity {
-
/**
- * List of all software components
+ * List of all software components.
*/
private static final SoftwareComponent[] SOFTWARE_COMPONENTS = new SoftwareComponent[]{
- new SoftwareComponent("Giga Get", "2014 - 2015", "Peter Cai", "https://github.com/PaperAirplane-Dev-Team/GigaGet", StandardLicenses.GPL2),
- new SoftwareComponent("NewPipe Extractor", "2017 - 2020", "Christian Schabesberger", "https://github.com/TeamNewPipe/NewPipeExtractor", StandardLicenses.GPL3),
- new SoftwareComponent("Jsoup", "2017", "Jonathan Hedley", "https://github.com/jhy/jsoup", StandardLicenses.MIT),
- new SoftwareComponent("Rhino", "2015", "Mozilla", "https://www.mozilla.org/rhino/", StandardLicenses.MPL2),
- new SoftwareComponent("ACRA", "2013", "Kevin Gaudin", "http://www.acra.ch", StandardLicenses.APACHE2),
- new SoftwareComponent("Universal Image Loader", "2011 - 2015", "Sergey Tarasevich", "https://github.com/nostra13/Android-Universal-Image-Loader", StandardLicenses.APACHE2),
- new SoftwareComponent("CircleImageView", "2014 - 2020", "Henning Dodenhof", "https://github.com/hdodenhof/CircleImageView", StandardLicenses.APACHE2),
- new SoftwareComponent("NoNonsense-FilePicker", "2016", "Jonas Kalderstam", "https://github.com/spacecowboy/NoNonsense-FilePicker", StandardLicenses.MPL2),
- new SoftwareComponent("ExoPlayer", "2014 - 2020", "Google Inc", "https://github.com/google/ExoPlayer", StandardLicenses.APACHE2),
- new SoftwareComponent("RxAndroid", "2015 - 2018", "The RxAndroid authors", "https://github.com/ReactiveX/RxAndroid", StandardLicenses.APACHE2),
- new SoftwareComponent("RxJava", "2016 - 2020", "RxJava Contributors", "https://github.com/ReactiveX/RxJava", StandardLicenses.APACHE2),
- new SoftwareComponent("RxBinding", "2015 - 2018", "Jake Wharton", "https://github.com/JakeWharton/RxBinding", StandardLicenses.APACHE2),
- new SoftwareComponent("PrettyTime", "2012 - 2020", "Lincoln Baxter, III", "https://github.com/ocpsoft/prettytime", StandardLicenses.APACHE2),
- new SoftwareComponent("Markwon", "2017 - 2020", "Noties", "https://github.com/noties/Markwon", StandardLicenses.APACHE2),
- new SoftwareComponent("Groupie", "2016", "Lisa Wray", "https://github.com/lisawray/groupie", StandardLicenses.MIT)
+ new SoftwareComponent("Giga Get", "2014 - 2015", "Peter Cai",
+ "https://github.com/PaperAirplane-Dev-Team/GigaGet", StandardLicenses.GPL2),
+ new SoftwareComponent("NewPipe Extractor", "2017 - 2020", "Christian Schabesberger",
+ "https://github.com/TeamNewPipe/NewPipeExtractor", StandardLicenses.GPL3),
+ new SoftwareComponent("Jsoup", "2017", "Jonathan Hedley",
+ "https://github.com/jhy/jsoup", StandardLicenses.MIT),
+ new SoftwareComponent("Rhino", "2015", "Mozilla",
+ "https://www.mozilla.org/rhino/", StandardLicenses.MPL2),
+ new SoftwareComponent("ACRA", "2013", "Kevin Gaudin",
+ "http://www.acra.ch", StandardLicenses.APACHE2),
+ new SoftwareComponent("Universal Image Loader", "2011 - 2015", "Sergey Tarasevich",
+ "https://github.com/nostra13/Android-Universal-Image-Loader",
+ StandardLicenses.APACHE2),
+ new SoftwareComponent("CircleImageView", "2014 - 2020", "Henning Dodenhof",
+ "https://github.com/hdodenhof/CircleImageView", StandardLicenses.APACHE2),
+ new SoftwareComponent("NoNonsense-FilePicker", "2016", "Jonas Kalderstam",
+ "https://github.com/spacecowboy/NoNonsense-FilePicker", StandardLicenses.MPL2),
+ new SoftwareComponent("ExoPlayer", "2014 - 2020", "Google Inc",
+ "https://github.com/google/ExoPlayer", StandardLicenses.APACHE2),
+ new SoftwareComponent("RxAndroid", "2015 - 2018", "The RxAndroid authors",
+ "https://github.com/ReactiveX/RxAndroid", StandardLicenses.APACHE2),
+ new SoftwareComponent("RxJava", "2016 - 2020", "RxJava Contributors",
+ "https://github.com/ReactiveX/RxJava", StandardLicenses.APACHE2),
+ new SoftwareComponent("RxBinding", "2015 - 2018", "Jake Wharton",
+ "https://github.com/JakeWharton/RxBinding", StandardLicenses.APACHE2),
+ new SoftwareComponent("PrettyTime", "2012 - 2020", "Lincoln Baxter, III",
+ "https://github.com/ocpsoft/prettytime", StandardLicenses.APACHE2),
+ new SoftwareComponent("Markwon", "2017 - 2020", "Noties",
+ "https://github.com/noties/Markwon", StandardLicenses.APACHE2),
+ new SoftwareComponent("Groupie", "2016", "Lisa Wray",
+ "https://github.com/lisawray/groupie", StandardLicenses.MIT)
};
/**
@@ -65,7 +81,7 @@ public class AboutActivity extends AppCompatActivity {
private ViewPager mViewPager;
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(final Bundle savedInstanceState) {
assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
@@ -88,10 +104,8 @@ public class AboutActivity extends AppCompatActivity {
tabLayout.setupWithViewPager(mViewPager);
}
-
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
+ public boolean onOptionsItemSelected(final MenuItem item) {
int id = item.getItemId();
switch (id) {
@@ -107,21 +121,20 @@ public class AboutActivity extends AppCompatActivity {
* A placeholder fragment containing a simple view.
*/
public static class AboutFragment extends Fragment {
-
- public AboutFragment() {
- }
+ public AboutFragment() { }
/**
- * Returns a new instance of this fragment for the given section
- * number.
+ * Created a new instance of this fragment for the given section number.
+ *
+ * @return New instance of {@link AboutFragment}
*/
public static AboutFragment newInstance() {
return new AboutFragment();
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
+ final Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_about, container, false);
Context context = this.getContext();
@@ -129,40 +142,42 @@ public class AboutActivity extends AppCompatActivity {
version.setText(BuildConfig.VERSION_NAME);
View githubLink = rootView.findViewById(R.id.github_link);
- githubLink.setOnClickListener(nv -> openWebsite(context.getString(R.string.github_url), context));
+ githubLink.setOnClickListener(nv ->
+ openWebsite(context.getString(R.string.github_url), context));
View donationLink = rootView.findViewById(R.id.donation_link);
- donationLink.setOnClickListener(v -> openWebsite(context.getString(R.string.donation_url), context));
+ donationLink.setOnClickListener(v ->
+ openWebsite(context.getString(R.string.donation_url), context));
View websiteLink = rootView.findViewById(R.id.website_link);
- websiteLink.setOnClickListener(nv -> openWebsite(context.getString(R.string.website_url), context));
+ websiteLink.setOnClickListener(nv ->
+ openWebsite(context.getString(R.string.website_url), context));
View privacyPolicyLink = rootView.findViewById(R.id.privacy_policy_link);
- privacyPolicyLink.setOnClickListener(v -> openWebsite(context.getString(R.string.privacy_policy_url), context));
+ privacyPolicyLink.setOnClickListener(v ->
+ openWebsite(context.getString(R.string.privacy_policy_url), context));
return rootView;
}
- private void openWebsite(String url, Context context) {
+ private void openWebsite(final String url, final Context context) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
context.startActivity(intent);
}
}
-
/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
-
- public SectionsPagerAdapter(FragmentManager fm) {
+ public SectionsPagerAdapter(final FragmentManager fm) {
super(fm);
}
@Override
- public Fragment getItem(int position) {
+ public Fragment getItem(final int position) {
switch (position) {
case 0:
return AboutFragment.newInstance();
@@ -179,7 +194,7 @@ public class AboutActivity extends AppCompatActivity {
}
@Override
- public CharSequence getPageTitle(int position) {
+ public CharSequence getPageTitle(final int position) {
switch (position) {
case 0:
return getString(R.string.tab_about);
diff --git a/app/src/main/java/org/schabi/newpipe/about/License.java b/app/src/main/java/org/schabi/newpipe/about/License.java
index e51e1d0f1..370009860 100644
--- a/app/src/main/java/org/schabi/newpipe/about/License.java
+++ b/app/src/main/java/org/schabi/newpipe/about/License.java
@@ -5,18 +5,17 @@ import android.os.Parcel;
import android.os.Parcelable;
/**
- * A software license
+ * Class for storing information about a software license.
*/
public class License implements Parcelable {
-
public static final Creator CREATOR = new Creator() {
@Override
- public License createFromParcel(Parcel source) {
+ public License createFromParcel(final Parcel source) {
return new License(source);
}
@Override
- public License[] newArray(int size) {
+ public License[] newArray(final int size) {
return new License[size];
}
};
@@ -24,16 +23,22 @@ public class License implements Parcelable {
private final String name;
private String filename;
- public License(String name, String abbreviation, String filename) {
- if(name == null) throw new NullPointerException("name is null");
- if(abbreviation == null) throw new NullPointerException("abbreviation is null");
- if(filename == null) throw new NullPointerException("filename is null");
+ public License(final String name, final String abbreviation, final String filename) {
+ if (name == null) {
+ throw new NullPointerException("name is null");
+ }
+ if (abbreviation == null) {
+ throw new NullPointerException("abbreviation is null");
+ }
+ if (filename == null) {
+ throw new NullPointerException("filename is null");
+ }
this.name = name;
this.filename = filename;
this.abbreviation = abbreviation;
}
- protected License(Parcel in) {
+ protected License(final Parcel in) {
this.filename = in.readString();
this.abbreviation = in.readString();
this.name = in.readString();
@@ -50,7 +55,7 @@ public class License implements Parcelable {
public String getAbbreviation() {
return abbreviation;
}
-
+
public String getFilename() {
return filename;
}
@@ -61,7 +66,7 @@ public class License implements Parcelable {
}
@Override
- public void writeToParcel(Parcel dest, int flags) {
+ public void writeToParcel(final Parcel dest, final int flags) {
dest.writeString(this.filename);
dest.writeString(this.abbreviation);
dest.writeString(this.name);
diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java
index fe78ff9f1..0bda79fee 100644
--- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java
@@ -5,26 +5,32 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.view.ContextMenu;
+import android.view.LayoutInflater;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
-import android.view.*;
-import android.widget.TextView;
+
import org.schabi.newpipe.R;
import java.util.Arrays;
import java.util.Comparator;
/**
- * Fragment containing the software licenses
+ * Fragment containing the software licenses.
*/
public class LicenseFragment extends Fragment {
-
private static final String ARG_COMPONENTS = "components";
private SoftwareComponent[] softwareComponents;
private SoftwareComponent mComponentForContextMenu;
- public static LicenseFragment newInstance(SoftwareComponent[] softwareComponents) {
- if(softwareComponents == null) {
+ public static LicenseFragment newInstance(final SoftwareComponent[] softwareComponents) {
+ if (softwareComponents == null) {
throw new NullPointerException("softwareComponents is null");
}
LicenseFragment fragment = new LicenseFragment();
@@ -35,23 +41,25 @@ public class LicenseFragment extends Fragment {
}
/**
- * Shows a popup containing the license
+ * Shows a popup containing the license.
+ *
* @param context the context to use
* @param license the license to show
*/
- public static void showLicense(Context context, License license) {
+ public static void showLicense(final Context context, final License license) {
new LicenseFragmentHelper((Activity) context).execute(license);
}
@Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
+ public void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- softwareComponents = (SoftwareComponent[]) getArguments().getParcelableArray(ARG_COMPONENTS);
+ softwareComponents = (SoftwareComponent[]) getArguments()
+ .getParcelableArray(ARG_COMPONENTS);
// Sort components by name
Arrays.sort(softwareComponents, new Comparator() {
@Override
- public int compare(SoftwareComponent o1, SoftwareComponent o2) {
+ public int compare(final SoftwareComponent o1, final SoftwareComponent o2) {
return o1.getName().compareTo(o2.getName());
}
});
@@ -59,7 +67,8 @@ public class LicenseFragment extends Fragment {
@Nullable
@Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container,
+ @Nullable final Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_licenses, container, false);
ViewGroup softwareComponentsView = rootView.findViewById(R.id.software_components);
@@ -67,7 +76,8 @@ public class LicenseFragment extends Fragment {
licenseLink.setOnClickListener(new OnReadFullLicenseClickListener());
for (final SoftwareComponent component : softwareComponents) {
- View componentView = inflater.inflate(R.layout.item_software_component, container, false);
+ View componentView = inflater
+ .inflate(R.layout.item_software_component, container, false);
TextView softwareName = componentView.findViewById(R.id.name);
TextView copyright = componentView.findViewById(R.id.copyright);
softwareName.setText(component.getName());
@@ -79,7 +89,7 @@ public class LicenseFragment extends Fragment {
componentView.setTag(component);
componentView.setOnClickListener(new View.OnClickListener() {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
Context context = v.getContext();
if (context != null) {
showLicense(context, component.getLicense());
@@ -93,7 +103,8 @@ public class LicenseFragment extends Fragment {
}
@Override
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+ public void onCreateContextMenu(final ContextMenu menu, final View v,
+ final ContextMenu.ContextMenuInfo menuInfo) {
MenuInflater inflater = getActivity().getMenuInflater();
SoftwareComponent component = (SoftwareComponent) v.getTag();
menu.setHeaderTitle(component.getName());
@@ -103,7 +114,7 @@ public class LicenseFragment extends Fragment {
}
@Override
- public boolean onContextItemSelected(MenuItem item) {
+ public boolean onContextItemSelected(final MenuItem item) {
// item.getMenuInfo() is null so we use the tag of the view
final SoftwareComponent component = mComponentForContextMenu;
if (component == null) {
@@ -119,14 +130,14 @@ public class LicenseFragment extends Fragment {
return false;
}
- private void openWebsite(String componentLink) {
+ private void openWebsite(final String componentLink) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(componentLink));
startActivity(browserIntent);
}
private static class OnReadFullLicenseClickListener implements View.OnClickListener {
@Override
- public void onClick(View v) {
+ public void onClick(final View v) {
LicenseFragment.showLicense(v.getContext(), StandardLicenses.GPL3);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java
index 9a11b19cc..94a1532f5 100644
--- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java
@@ -2,30 +2,103 @@ package org.schabi.newpipe.about;
import android.app.Activity;
import android.content.Context;
-import android.content.DialogInterface;
-import android.content.res.Resources;
import android.os.AsyncTask;
+import android.webkit.WebView;
+
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
-import android.webkit.WebView;
+
import org.schabi.newpipe.R;
import org.schabi.newpipe.util.ThemeHelper;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.ref.WeakReference;
+import java.nio.charset.StandardCharsets;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
public class LicenseFragmentHelper extends AsyncTask {
-
- final WeakReference weakReference;
+ private final WeakReference weakReference;
private License license;
- public LicenseFragmentHelper(@Nullable Activity activity) {
+ public LicenseFragmentHelper(@Nullable final Activity activity) {
weakReference = new WeakReference<>(activity);
}
+ private static String getFinishString(final Activity activity) {
+ return activity.getApplicationContext().getResources().getString(R.string.finish);
+ }
+
+ /**
+ * @param context the context to use
+ * @param license the license
+ * @return String which contains a HTML formatted license page
+ * styled according to the context's theme
+ */
+ public static String getFormattedLicense(final Context context, final License license) {
+ if (context == null) {
+ throw new NullPointerException("context is null");
+ }
+ if (license == null) {
+ throw new NullPointerException("license is null");
+ }
+
+ StringBuilder licenseContent = new StringBuilder();
+ String webViewData;
+ try {
+ BufferedReader in = new BufferedReader(new InputStreamReader(
+ context.getAssets().open(license.getFilename()), StandardCharsets.UTF_8));
+ String str;
+ while ((str = in.readLine()) != null) {
+ licenseContent.append(str);
+ }
+ in.close();
+
+ // split the HTML file and insert the stylesheet into the HEAD of the file
+ String[] insert = licenseContent.toString().split("");
+ webViewData = insert[0] + ""
+ + insert[1];
+ } catch (Exception e) {
+ throw new NullPointerException("could not get license file:"
+ + getLicenseStylesheet(context));
+ }
+ return webViewData;
+ }
+
+ /**
+ * @param context
+ * @return String which is a CSS stylesheet according to the context's theme
+ */
+ public static String getLicenseStylesheet(final Context context) {
+ boolean isLightTheme = ThemeHelper.isLightThemeSelected(context);
+ return "body{padding:12px 15px;margin:0;background:#"
+ + getHexRGBColor(context, isLightTheme
+ ? R.color.light_license_background_color
+ : R.color.dark_license_background_color)
+ + ";color:#"
+ + getHexRGBColor(context, isLightTheme
+ ? R.color.light_license_text_color
+ : R.color.dark_license_text_color) + ";}"
+ + "a[href]{color:#"
+ + getHexRGBColor(context, isLightTheme
+ ? R.color.light_youtube_primary_color
+ : R.color.dark_youtube_primary_color) + ";}"
+ + "pre{white-space: pre-wrap;}";
+ }
+
+ /**
+ * Cast R.color to a hexadecimal color value.
+ *
+ * @param context the context to use
+ * @param color the color number from R.color
+ * @return a six characters long String with hexadecimal RGB values
+ */
+ public static String getHexRGBColor(final Context context, final int color) {
+ return context.getResources().getString(color).substring(3);
+ }
+
@Nullable
private Activity getActivity() {
Activity activity = weakReference.get();
@@ -38,13 +111,13 @@ public class LicenseFragmentHelper extends AsyncTask {
}
@Override
- protected Integer doInBackground(Object... objects) {
+ protected Integer doInBackground(final Object... objects) {
license = (License) objects[0];
return 1;
}
@Override
- protected void onPostExecute(Integer result) {
+ protected void onPostExecute(final Integer result) {
Activity activity = getActivity();
if (activity == null) {
return;
@@ -63,74 +136,4 @@ public class LicenseFragmentHelper extends AsyncTask {
alert.show();
}
- private static String getFinishString(Activity activity) {
- return activity.getApplicationContext().getResources().getString(R.string.finish);
- }
-
- /**
- * @param context the context to use
- * @param license the license
- * @return String which contains a HTML formatted license page styled according to the context's theme
- */
- public static String getFormattedLicense(Context context, License license) {
- if(context == null) {
- throw new NullPointerException("context is null");
- }
- if(license == null) {
- throw new NullPointerException("license is null");
- }
-
- StringBuilder licenseContent = new StringBuilder();
- String webViewData;
- try {
- BufferedReader in = new BufferedReader(new InputStreamReader(context.getAssets().open(license.getFilename()), "UTF-8"));
- String str;
- while ((str = in.readLine()) != null) {
- licenseContent.append(str);
- }
- in.close();
-
- // split the HTML file and insert the stylesheet into the HEAD of the file
- String[] insert = licenseContent.toString().split("");
- webViewData = insert[0] + ""
- + insert[1];
- } catch (Exception e) {
- throw new NullPointerException("could not get license file:" + getLicenseStylesheet(context));
- }
- return webViewData;
- }
-
- /**
- *
- * @param context
- * @return String which is a CSS stylesheet according to the context's theme
- */
- public static String getLicenseStylesheet(Context context) {
- boolean isLightTheme = ThemeHelper.isLightThemeSelected(context);
- return "body{padding:12px 15px;margin:0;background:#"
- + getHexRGBColor(context, isLightTheme
- ? R.color.light_license_background_color
- : R.color.dark_license_background_color)
- + ";color:#"
- + getHexRGBColor(context, isLightTheme
- ? R.color.light_license_text_color
- : R.color.dark_license_text_color) + ";}"
- + "a[href]{color:#"
- + getHexRGBColor(context, isLightTheme
- ? R.color.light_youtube_primary_color
- : R.color.dark_youtube_primary_color) + ";}"
- + "pre{white-space: pre-wrap;}";
- }
-
- /**
- * Cast R.color to a hexadecimal color value
- * @param context the context to use
- * @param color the color number from R.color
- * @return a six characters long String with hexadecimal RGB values
- */
- public static String getHexRGBColor(Context context, int color) {
- return context.getResources().getString(color).substring(3);
- }
-
}
diff --git a/app/src/main/java/org/schabi/newpipe/about/SoftwareComponent.java b/app/src/main/java/org/schabi/newpipe/about/SoftwareComponent.java
index edab3e174..946945142 100644
--- a/app/src/main/java/org/schabi/newpipe/about/SoftwareComponent.java
+++ b/app/src/main/java/org/schabi/newpipe/about/SoftwareComponent.java
@@ -4,19 +4,44 @@ import android.os.Parcel;
import android.os.Parcelable;
public class SoftwareComponent implements Parcelable {
-
public static final Creator CREATOR = new Creator() {
@Override
- public SoftwareComponent createFromParcel(Parcel source) {
+ public SoftwareComponent createFromParcel(final Parcel source) {
return new SoftwareComponent(source);
}
@Override
- public SoftwareComponent[] newArray(int size) {
+ public SoftwareComponent[] newArray(final int size) {
return new SoftwareComponent[size];
}
};
+ private final License license;
+ private final String name;
+ private final String years;
+ private final String copyrightOwner;
+ private final String link;
+ private final String version;
+
+ public SoftwareComponent(final String name, final String years, final String copyrightOwner,
+ final String link, final License license) {
+ this.name = name;
+ this.years = years;
+ this.copyrightOwner = copyrightOwner;
+ this.link = link;
+ this.license = license;
+ this.version = null;
+ }
+
+ protected SoftwareComponent(final Parcel in) {
+ this.name = in.readString();
+ this.license = in.readParcelable(License.class.getClassLoader());
+ this.copyrightOwner = in.readString();
+ this.link = in.readString();
+ this.years = in.readString();
+ this.version = in.readString();
+ }
+
public String getName() {
return name;
}
@@ -37,31 +62,6 @@ public class SoftwareComponent implements Parcelable {
return version;
}
- private final License license;
- private final String name;
- private final String years;
- private final String copyrightOwner;
- private final String link;
- private final String version;
-
- public SoftwareComponent(String name, String years, String copyrightOwner, String link, License license) {
- this.name = name;
- this.years = years;
- this.copyrightOwner = copyrightOwner;
- this.link = link;
- this.license = license;
- this.version = null;
- }
-
- protected SoftwareComponent(Parcel in) {
- this.name = in.readString();
- this.license = in.readParcelable(License.class.getClassLoader());
- this.copyrightOwner = in.readString();
- this.link = in.readString();
- this.years = in.readString();
- this.version = in.readString();
- }
-
public License getLicense() {
return license;
}
@@ -72,7 +72,7 @@ public class SoftwareComponent implements Parcelable {
}
@Override
- public void writeToParcel(Parcel dest, int flags) {
+ public void writeToParcel(final Parcel dest, final int flags) {
dest.writeString(name);
dest.writeParcelable(license, flags);
dest.writeString(copyrightOwner);
diff --git a/app/src/main/java/org/schabi/newpipe/about/StandardLicenses.java b/app/src/main/java/org/schabi/newpipe/about/StandardLicenses.java
index 00a479336..75a7a8613 100644
--- a/app/src/main/java/org/schabi/newpipe/about/StandardLicenses.java
+++ b/app/src/main/java/org/schabi/newpipe/about/StandardLicenses.java
@@ -1,12 +1,19 @@
package org.schabi.newpipe.about;
/**
- * Standard software licenses
+ * Class containing information about standard software licenses.
*/
public final class StandardLicenses {
- public static final License GPL2 = new License("GNU General Public License, Version 2.0", "GPLv2", "gpl_2.html");
- public static final License GPL3 = new License("GNU General Public License, Version 3.0", "GPLv3", "gpl_3.html");
- public static final License APACHE2 = new License("Apache License, Version 2.0", "ALv2", "apache2.html");
- public static final License MPL2 = new License("Mozilla Public License, Version 2.0", "MPL 2.0", "mpl2.html");
- public static final License MIT = new License("MIT License", "MIT", "mit.html");
+ public static final License GPL2
+ = new License("GNU General Public License, Version 2.0", "GPLv2", "gpl_2.html");
+ public static final License GPL3
+ = new License("GNU General Public License, Version 3.0", "GPLv3", "gpl_3.html");
+ public static final License APACHE2
+ = new License("Apache License, Version 2.0", "ALv2", "apache2.html");
+ public static final License MPL2
+ = new License("Mozilla Public License, Version 2.0", "MPL 2.0", "mpl2.html");
+ public static final License MIT
+ = new License("MIT License", "MIT", "mit.html");
+
+ private StandardLicenses() { }
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/AppDatabase.java b/app/src/main/java/org/schabi/newpipe/database/AppDatabase.java
index d3cd6eb80..3b5bda155 100644
--- a/app/src/main/java/org/schabi/newpipe/database/AppDatabase.java
+++ b/app/src/main/java/org/schabi/newpipe/database/AppDatabase.java
@@ -46,14 +46,20 @@ public abstract class AppDatabase extends RoomDatabase {
public abstract SearchHistoryDAO searchHistoryDAO();
public abstract StreamDAO streamDAO();
+
public abstract StreamHistoryDAO streamHistoryDAO();
+
public abstract StreamStateDAO streamStateDAO();
public abstract PlaylistDAO playlistDAO();
+
public abstract PlaylistStreamDAO playlistStreamDAO();
+
public abstract PlaylistRemoteDAO playlistRemoteDAO();
public abstract FeedDAO feedDAO();
+
public abstract FeedGroupDAO feedGroupDAO();
+
public abstract SubscriptionDAO subscriptionDAO();
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/BasicDAO.java b/app/src/main/java/org/schabi/newpipe/database/BasicDAO.java
index b7381b9f1..bcb9ece10 100644
--- a/app/src/main/java/org/schabi/newpipe/database/BasicDAO.java
+++ b/app/src/main/java/org/schabi/newpipe/database/BasicDAO.java
@@ -15,13 +15,13 @@ import io.reactivex.Flowable;
public interface BasicDAO {
/* Inserts */
@Insert(onConflict = OnConflictStrategy.FAIL)
- long insert(final Entity entity);
+ long insert(Entity entity);
@Insert(onConflict = OnConflictStrategy.FAIL)
- List insertAll(final Entity... entities);
+ List insertAll(Entity... entities);
@Insert(onConflict = OnConflictStrategy.FAIL)
- List insertAll(final Collection entities);
+ List insertAll(Collection entities);
/* Searches */
Flowable> getAll();
@@ -30,17 +30,17 @@ public interface BasicDAO {
/* Deletes */
@Delete
- void delete(final Entity entity);
+ void delete(Entity entity);
@Delete
- int delete(final Collection entities);
+ int delete(Collection entities);
int deleteAll();
/* Updates */
@Update
- int update(final Entity entity);
+ int update(Entity entity);
@Update
- void update(final Collection entities);
+ void update(Collection entities);
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/Converters.java b/app/src/main/java/org/schabi/newpipe/database/Converters.java
index 2f510c8ec..e1a2fe2f3 100644
--- a/app/src/main/java/org/schabi/newpipe/database/Converters.java
+++ b/app/src/main/java/org/schabi/newpipe/database/Converters.java
@@ -7,47 +7,52 @@ import org.schabi.newpipe.local.subscription.FeedGroupIcon;
import java.util.Date;
-public class Converters {
+public final class Converters {
+ private Converters() { }
/**
- * Convert a long value to a date
+ * Convert a long value to a date.
+ *
* @param value the long value
* @return the date
*/
@TypeConverter
- public static Date fromTimestamp(Long value) {
+ public static Date fromTimestamp(final Long value) {
return value == null ? null : new Date(value);
}
/**
- * Convert a date to a long value
+ * Convert a date to a long value.
+ *
* @param date the date
* @return the long value
*/
@TypeConverter
- public static Long dateToTimestamp(Date date) {
+ public static Long dateToTimestamp(final Date date) {
return date == null ? null : date.getTime();
}
@TypeConverter
- public static StreamType streamTypeOf(String value) {
+ public static StreamType streamTypeOf(final String value) {
return StreamType.valueOf(value);
}
@TypeConverter
- public static String stringOf(StreamType streamType) {
+ public static String stringOf(final StreamType streamType) {
return streamType.name();
}
@TypeConverter
- public static Integer integerOf(FeedGroupIcon feedGroupIcon) {
+ public static Integer integerOf(final FeedGroupIcon feedGroupIcon) {
return feedGroupIcon.getId();
}
@TypeConverter
- public static FeedGroupIcon feedGroupIconOf(Integer id) {
+ public static FeedGroupIcon feedGroupIconOf(final Integer id) {
for (FeedGroupIcon icon : FeedGroupIcon.values()) {
- if (icon.getId() == id) return icon;
+ if (icon.getId() == id) {
+ return icon;
+ }
}
throw new IllegalArgumentException("There's no feed group icon with the id \"" + id + "\"");
diff --git a/app/src/main/java/org/schabi/newpipe/database/LocalItem.java b/app/src/main/java/org/schabi/newpipe/database/LocalItem.java
index e121739ab..54b856b06 100644
--- a/app/src/main/java/org/schabi/newpipe/database/LocalItem.java
+++ b/app/src/main/java/org/schabi/newpipe/database/LocalItem.java
@@ -1,6 +1,8 @@
package org.schabi.newpipe.database;
public interface LocalItem {
+ LocalItemType getLocalItemType();
+
enum LocalItemType {
PLAYLIST_LOCAL_ITEM,
PLAYLIST_REMOTE_ITEM,
@@ -8,6 +10,4 @@ public interface LocalItem {
PLAYLIST_STREAM_ITEM,
STATISTIC_STREAM_ITEM,
}
-
- LocalItemType getLocalItemType();
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/Migrations.java b/app/src/main/java/org/schabi/newpipe/database/Migrations.java
index afefb2fd1..088b9ed19 100644
--- a/app/src/main/java/org/schabi/newpipe/database/Migrations.java
+++ b/app/src/main/java/org/schabi/newpipe/database/Migrations.java
@@ -1,72 +1,103 @@
package org.schabi.newpipe.database;
-import androidx.sqlite.db.SupportSQLiteDatabase;
-import androidx.room.migration.Migration;
-import androidx.annotation.NonNull;
import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.room.migration.Migration;
+import androidx.sqlite.db.SupportSQLiteDatabase;
+
import org.schabi.newpipe.BuildConfig;
-public class Migrations {
+public final class Migrations {
public static final int DB_VER_1 = 1;
public static final int DB_VER_2 = 2;
public static final int DB_VER_3 = 3;
- public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");
private static final String TAG = Migrations.class.getName();
+ public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");
public static final Migration MIGRATION_1_2 = new Migration(DB_VER_1, DB_VER_2) {
@Override
- public void migrate(@NonNull SupportSQLiteDatabase database) {
- if(DEBUG) {
+ public void migrate(@NonNull final SupportSQLiteDatabase database) {
+ if (DEBUG) {
Log.d(TAG, "Start migrating database");
}
/*
- * Unfortunately these queries must be hardcoded due to the possibility of
- * schema and names changing at a later date, thus invalidating the older migration
- * scripts if they are not hardcoded.
- * */
+ * Unfortunately these queries must be hardcoded due to the possibility of
+ * schema and names changing at a later date, thus invalidating the older migration
+ * scripts if they are not hardcoded.
+ * */
// Not much we can do about this, since room doesn't create tables before migration.
// It's either this or blasting the entire database anew.
- database.execSQL("CREATE INDEX `index_search_history_search` ON `search_history` (`search`)");
- database.execSQL("CREATE TABLE IF NOT EXISTS `streams` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `url` TEXT, `title` TEXT, `stream_type` TEXT, `duration` INTEGER, `uploader` TEXT, `thumbnail_url` TEXT)");
- database.execSQL("CREATE UNIQUE INDEX `index_streams_service_id_url` ON `streams` (`service_id`, `url`)");
- database.execSQL("CREATE TABLE IF NOT EXISTS `stream_history` (`stream_id` INTEGER NOT NULL, `access_date` INTEGER NOT NULL, `repeat_count` INTEGER NOT NULL, PRIMARY KEY(`stream_id`, `access_date`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )");
- database.execSQL("CREATE INDEX `index_stream_history_stream_id` ON `stream_history` (`stream_id`)");
- database.execSQL("CREATE TABLE IF NOT EXISTS `stream_state` (`stream_id` INTEGER NOT NULL, `progress_time` INTEGER NOT NULL, PRIMARY KEY(`stream_id`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )");
- database.execSQL("CREATE TABLE IF NOT EXISTS `playlists` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `thumbnail_url` TEXT)");
+ database.execSQL("CREATE INDEX `index_search_history_search` "
+ + "ON `search_history` (`search`)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS `streams` "
+ + "(`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ + "`service_id` INTEGER NOT NULL, `url` TEXT, `title` TEXT, "
+ + "`stream_type` TEXT, `duration` INTEGER, `uploader` TEXT, "
+ + "`thumbnail_url` TEXT)");
+ database.execSQL("CREATE UNIQUE INDEX `index_streams_service_id_url` "
+ + "ON `streams` (`service_id`, `url`)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS `stream_history` "
+ + "(`stream_id` INTEGER NOT NULL, `access_date` INTEGER NOT NULL, "
+ + "`repeat_count` INTEGER NOT NULL, PRIMARY KEY(`stream_id`, `access_date`), "
+ + "FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) "
+ + "ON UPDATE CASCADE ON DELETE CASCADE )");
+ database.execSQL("CREATE INDEX `index_stream_history_stream_id` "
+ + "ON `stream_history` (`stream_id`)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS `stream_state` "
+ + "(`stream_id` INTEGER NOT NULL, `progress_time` INTEGER NOT NULL, "
+ + "PRIMARY KEY(`stream_id`), FOREIGN KEY(`stream_id`) "
+ + "REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )");
+ database.execSQL("CREATE TABLE IF NOT EXISTS `playlists` "
+ + "(`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ + "`name` TEXT, `thumbnail_url` TEXT)");
database.execSQL("CREATE INDEX `index_playlists_name` ON `playlists` (`name`)");
- database.execSQL("CREATE TABLE IF NOT EXISTS `playlist_stream_join` (`playlist_id` INTEGER NOT NULL, `stream_id` INTEGER NOT NULL, `join_index` INTEGER NOT NULL, PRIMARY KEY(`playlist_id`, `join_index`), FOREIGN KEY(`playlist_id`) REFERENCES `playlists`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)");
- database.execSQL("CREATE UNIQUE INDEX `index_playlist_stream_join_playlist_id_join_index` ON `playlist_stream_join` (`playlist_id`, `join_index`)");
- database.execSQL("CREATE INDEX `index_playlist_stream_join_stream_id` ON `playlist_stream_join` (`stream_id`)");
- database.execSQL("CREATE TABLE IF NOT EXISTS `remote_playlists` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `name` TEXT, `url` TEXT, `thumbnail_url` TEXT, `uploader` TEXT, `stream_count` INTEGER)");
- database.execSQL("CREATE INDEX `index_remote_playlists_name` ON `remote_playlists` (`name`)");
- database.execSQL("CREATE UNIQUE INDEX `index_remote_playlists_service_id_url` ON `remote_playlists` (`service_id`, `url`)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS `playlist_stream_join` "
+ + "(`playlist_id` INTEGER NOT NULL, `stream_id` INTEGER NOT NULL, "
+ + "`join_index` INTEGER NOT NULL, PRIMARY KEY(`playlist_id`, `join_index`), "
+ + "FOREIGN KEY(`playlist_id`) REFERENCES `playlists`(`uid`) "
+ + "ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, "
+ + "FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) "
+ + "ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)");
+ database.execSQL("CREATE UNIQUE INDEX "
+ + "`index_playlist_stream_join_playlist_id_join_index` "
+ + "ON `playlist_stream_join` (`playlist_id`, `join_index`)");
+ database.execSQL("CREATE INDEX `index_playlist_stream_join_stream_id` "
+ + "ON `playlist_stream_join` (`stream_id`)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS `remote_playlists` "
+ + "(`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ + "`service_id` INTEGER NOT NULL, `name` TEXT, `url` TEXT, "
+ + "`thumbnail_url` TEXT, `uploader` TEXT, `stream_count` INTEGER)");
+ database.execSQL("CREATE INDEX `index_remote_playlists_name` "
+ + "ON `remote_playlists` (`name`)");
+ database.execSQL("CREATE UNIQUE INDEX `index_remote_playlists_service_id_url` "
+ + "ON `remote_playlists` (`service_id`, `url`)");
// Populate streams table with existing entries in watch history
// Latest data first, thus ignoring older entries with the same indices
- database.execSQL("INSERT OR IGNORE INTO streams (service_id, url, title, " +
- "stream_type, duration, uploader, thumbnail_url) " +
+ database.execSQL("INSERT OR IGNORE INTO streams (service_id, url, title, "
+ + "stream_type, duration, uploader, thumbnail_url) "
- "SELECT service_id, url, title, 'VIDEO_STREAM', duration, " +
- "uploader, thumbnail_url " +
+ + "SELECT service_id, url, title, 'VIDEO_STREAM', duration, "
+ + "uploader, thumbnail_url "
- "FROM watch_history " +
- "ORDER BY creation_date DESC");
+ + "FROM watch_history "
+ + "ORDER BY creation_date DESC");
// Once the streams have PKs, join them with the normalized history table
// and populate it with the remaining data from watch history
- database.execSQL("INSERT INTO stream_history (stream_id, access_date, repeat_count)" +
- "SELECT uid, creation_date, 1 " +
- "FROM watch_history INNER JOIN streams " +
- "ON watch_history.service_id == streams.service_id " +
- "AND watch_history.url == streams.url " +
- "ORDER BY creation_date DESC");
+ database.execSQL("INSERT INTO stream_history (stream_id, access_date, repeat_count)"
+ + "SELECT uid, creation_date, 1 "
+ + "FROM watch_history INNER JOIN streams "
+ + "ON watch_history.service_id == streams.service_id "
+ + "AND watch_history.url == streams.url "
+ + "ORDER BY creation_date DESC");
database.execSQL("DROP TABLE IF EXISTS watch_history");
- if(DEBUG) {
+ if (DEBUG) {
Log.d(TAG, "Stop migrating database");
}
}
@@ -74,37 +105,60 @@ public class Migrations {
public static final Migration MIGRATION_2_3 = new Migration(DB_VER_2, DB_VER_3) {
@Override
- public void migrate(@NonNull SupportSQLiteDatabase database) {
+ public void migrate(@NonNull final SupportSQLiteDatabase database) {
// Add NOT NULLs and new fields
- database.execSQL("CREATE TABLE IF NOT EXISTS streams_new " +
- "(uid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, service_id INTEGER NOT NULL, url TEXT NOT NULL, title TEXT NOT NULL, stream_type TEXT NOT NULL," +
- " duration INTEGER NOT NULL, uploader TEXT NOT NULL, thumbnail_url TEXT, view_count INTEGER, textual_upload_date TEXT, upload_date INTEGER," +
- " is_upload_date_approximation INTEGER)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS streams_new "
+ + "(uid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ + "service_id INTEGER NOT NULL, url TEXT NOT NULL, title TEXT NOT NULL, "
+ + "stream_type TEXT NOT NULL, duration INTEGER NOT NULL, "
+ + "uploader TEXT NOT NULL, thumbnail_url TEXT, view_count INTEGER, "
+ + "textual_upload_date TEXT, upload_date INTEGER, "
+ + "is_upload_date_approximation INTEGER)");
- database.execSQL("INSERT INTO streams_new (uid, service_id, url, title, stream_type," +
- "duration, uploader, thumbnail_url, view_count," +
- "textual_upload_date, upload_date, is_upload_date_approximation) " +
+ database.execSQL("INSERT INTO streams_new (uid, service_id, url, title, stream_type, "
+ + "duration, uploader, thumbnail_url, view_count, textual_upload_date, "
+ + "upload_date, is_upload_date_approximation) "
- "SELECT uid, service_id, url, ifnull(title, ''), ifnull(stream_type, 'VIDEO_STREAM')," +
- "ifnull(duration, 0), ifnull(uploader, ''), ifnull(thumbnail_url, ''), NULL," +
- "NULL, NULL, NULL " +
+ + "SELECT uid, service_id, url, ifnull(title, ''), "
+ + "ifnull(stream_type, 'VIDEO_STREAM'), ifnull(duration, 0), "
+ + "ifnull(uploader, ''), ifnull(thumbnail_url, ''), NULL, NULL, NULL, NULL "
- "FROM streams " +
- "WHERE url IS NOT NULL");
+ + "FROM streams WHERE url IS NOT NULL");
database.execSQL("DROP TABLE streams");
database.execSQL("ALTER TABLE streams_new RENAME TO streams");
- database.execSQL("CREATE UNIQUE INDEX index_streams_service_id_url ON streams (service_id, url)");
+ database.execSQL("CREATE UNIQUE INDEX index_streams_service_id_url "
+ + "ON streams (service_id, url)");
// Tables for feed feature
- database.execSQL("CREATE TABLE IF NOT EXISTS feed (stream_id INTEGER NOT NULL, subscription_id INTEGER NOT NULL, PRIMARY KEY(stream_id, subscription_id), FOREIGN KEY(stream_id) REFERENCES streams(uid) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(subscription_id) REFERENCES subscriptions(uid) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS feed "
+ + "(stream_id INTEGER NOT NULL, subscription_id INTEGER NOT NULL, "
+ + "PRIMARY KEY(stream_id, subscription_id), "
+ + "FOREIGN KEY(stream_id) REFERENCES streams(uid) "
+ + "ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, "
+ + "FOREIGN KEY(subscription_id) REFERENCES subscriptions(uid) "
+ + "ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)");
database.execSQL("CREATE INDEX index_feed_subscription_id ON feed (subscription_id)");
- database.execSQL("CREATE TABLE IF NOT EXISTS feed_group (uid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name TEXT NOT NULL, icon_id INTEGER NOT NULL, sort_order INTEGER NOT NULL)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS feed_group "
+ + "(uid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name TEXT NOT NULL, "
+ + "icon_id INTEGER NOT NULL, sort_order INTEGER NOT NULL)");
database.execSQL("CREATE INDEX index_feed_group_sort_order ON feed_group (sort_order)");
- database.execSQL("CREATE TABLE IF NOT EXISTS feed_group_subscription_join (group_id INTEGER NOT NULL, subscription_id INTEGER NOT NULL, PRIMARY KEY(group_id, subscription_id), FOREIGN KEY(group_id) REFERENCES feed_group(uid) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(subscription_id) REFERENCES subscriptions(uid) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)");
- database.execSQL("CREATE INDEX index_feed_group_subscription_join_subscription_id ON feed_group_subscription_join (subscription_id)");
- database.execSQL("CREATE TABLE IF NOT EXISTS feed_last_updated (subscription_id INTEGER NOT NULL, last_updated INTEGER, PRIMARY KEY(subscription_id), FOREIGN KEY(subscription_id) REFERENCES subscriptions(uid) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS feed_group_subscription_join "
+ + "(group_id INTEGER NOT NULL, subscription_id INTEGER NOT NULL, "
+ + "PRIMARY KEY(group_id, subscription_id), "
+ + "FOREIGN KEY(group_id) REFERENCES feed_group(uid) "
+ + "ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, "
+ + "FOREIGN KEY(subscription_id) REFERENCES subscriptions(uid) "
+ + "ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)");
+ database.execSQL("CREATE INDEX index_feed_group_subscription_join_subscription_id "
+ + "ON feed_group_subscription_join (subscription_id)");
+ database.execSQL("CREATE TABLE IF NOT EXISTS feed_last_updated "
+ + "(subscription_id INTEGER NOT NULL, last_updated INTEGER, "
+ + "PRIMARY KEY(subscription_id), "
+ + "FOREIGN KEY(subscription_id) REFERENCES subscriptions(uid) "
+ + "ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)");
}
};
+ private Migrations() { }
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.java b/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.java
index df8094830..972435859 100644
--- a/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.java
+++ b/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.java
@@ -1,8 +1,8 @@
package org.schabi.newpipe.database.history.dao;
+import androidx.annotation.Nullable;
import androidx.room.Dao;
import androidx.room.Query;
-import androidx.annotation.Nullable;
import org.schabi.newpipe.database.history.model.SearchHistoryEntry;
@@ -18,11 +18,10 @@ import static org.schabi.newpipe.database.history.model.SearchHistoryEntry.TABLE
@Dao
public interface SearchHistoryDAO extends HistoryDAO {
-
String ORDER_BY_CREATION_DATE = " ORDER BY " + CREATION_DATE + " DESC";
- @Query("SELECT * FROM " + TABLE_NAME +
- " WHERE " + ID + " = (SELECT MAX(" + ID + ") FROM " + TABLE_NAME + ")")
+ @Query("SELECT * FROM " + TABLE_NAME
+ + " WHERE " + ID + " = (SELECT MAX(" + ID + ") FROM " + TABLE_NAME + ")")
@Nullable
SearchHistoryEntry getLatestEntry();
@@ -37,13 +36,16 @@ public interface SearchHistoryDAO extends HistoryDAO {
@Override
Flowable> getAll();
- @Query("SELECT * FROM " + TABLE_NAME + " GROUP BY " + SEARCH + ORDER_BY_CREATION_DATE + " LIMIT :limit")
+ @Query("SELECT * FROM " + TABLE_NAME + " GROUP BY " + SEARCH + ORDER_BY_CREATION_DATE
+ + " LIMIT :limit")
Flowable> getUniqueEntries(int limit);
- @Query("SELECT * FROM " + TABLE_NAME + " WHERE " + SERVICE_ID + " = :serviceId" + ORDER_BY_CREATION_DATE)
+ @Query("SELECT * FROM " + TABLE_NAME
+ + " WHERE " + SERVICE_ID + " = :serviceId" + ORDER_BY_CREATION_DATE)
@Override
Flowable> listByService(int serviceId);
- @Query("SELECT * FROM " + TABLE_NAME + " WHERE " + SEARCH + " LIKE :query || '%' GROUP BY " + SEARCH + " LIMIT :limit")
+ @Query("SELECT * FROM " + TABLE_NAME + " WHERE " + SEARCH + " LIKE :query || '%'"
+ + " GROUP BY " + SEARCH + " LIMIT :limit")
Flowable> getSimilarEntries(String query, int limit);
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/history/dao/StreamHistoryDAO.java b/app/src/main/java/org/schabi/newpipe/database/history/dao/StreamHistoryDAO.java
index 2703b9783..7daf21e6e 100644
--- a/app/src/main/java/org/schabi/newpipe/database/history/dao/StreamHistoryDAO.java
+++ b/app/src/main/java/org/schabi/newpipe/database/history/dao/StreamHistoryDAO.java
@@ -1,32 +1,31 @@
package org.schabi.newpipe.database.history.dao;
-
+import androidx.annotation.Nullable;
import androidx.room.Dao;
import androidx.room.Query;
-import androidx.annotation.Nullable;
+import org.schabi.newpipe.database.history.model.StreamHistoryEntity;
import org.schabi.newpipe.database.history.model.StreamHistoryEntry;
import org.schabi.newpipe.database.stream.StreamStatisticsEntry;
-import org.schabi.newpipe.database.history.model.StreamHistoryEntity;
import java.util.List;
import io.reactivex.Flowable;
+import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.JOIN_STREAM_ID;
+import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_ACCESS_DATE;
+import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_HISTORY_TABLE;
import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_REPEAT_COUNT;
import static org.schabi.newpipe.database.stream.StreamStatisticsEntry.STREAM_LATEST_DATE;
import static org.schabi.newpipe.database.stream.StreamStatisticsEntry.STREAM_WATCH_COUNT;
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_ID;
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_TABLE;
-import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.JOIN_STREAM_ID;
-import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_ACCESS_DATE;
-import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_HISTORY_TABLE;
@Dao
public abstract class StreamHistoryDAO implements HistoryDAO {
- @Query("SELECT * FROM " + STREAM_HISTORY_TABLE +
- " WHERE " + STREAM_ACCESS_DATE + " = " +
- "(SELECT MAX(" + STREAM_ACCESS_DATE + ") FROM " + STREAM_HISTORY_TABLE + ")")
+ @Query("SELECT * FROM " + STREAM_HISTORY_TABLE
+ + " WHERE " + STREAM_ACCESS_DATE + " = "
+ + "(SELECT MAX(" + STREAM_ACCESS_DATE + ") FROM " + STREAM_HISTORY_TABLE + ")")
@Override
@Nullable
public abstract StreamHistoryEntity getLatestEntry();
@@ -40,33 +39,33 @@ public abstract class StreamHistoryDAO implements HistoryDAO> listByService(int serviceId) {
+ public Flowable> listByService(final int serviceId) {
throw new UnsupportedOperationException();
}
- @Query("SELECT * FROM " + STREAM_TABLE +
- " INNER JOIN " + STREAM_HISTORY_TABLE +
- " ON " + STREAM_ID + " = " + JOIN_STREAM_ID +
- " ORDER BY " + STREAM_ACCESS_DATE + " DESC")
+ @Query("SELECT * FROM " + STREAM_TABLE
+ + " INNER JOIN " + STREAM_HISTORY_TABLE
+ + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID
+ + " ORDER BY " + STREAM_ACCESS_DATE + " DESC")
public abstract Flowable> getHistory();
- @Query("SELECT * FROM " + STREAM_HISTORY_TABLE + " WHERE " + JOIN_STREAM_ID +
- " = :streamId ORDER BY " + STREAM_ACCESS_DATE + " DESC LIMIT 1")
+ @Query("SELECT * FROM " + STREAM_HISTORY_TABLE + " WHERE " + JOIN_STREAM_ID
+ + " = :streamId ORDER BY " + STREAM_ACCESS_DATE + " DESC LIMIT 1")
@Nullable
- public abstract StreamHistoryEntity getLatestEntry(final long streamId);
+ public abstract StreamHistoryEntity getLatestEntry(long streamId);
@Query("DELETE FROM " + STREAM_HISTORY_TABLE + " WHERE " + JOIN_STREAM_ID + " = :streamId")
- public abstract int deleteStreamHistory(final long streamId);
+ public abstract int deleteStreamHistory(long streamId);
- @Query("SELECT * FROM " + STREAM_TABLE +
+ @Query("SELECT * FROM " + STREAM_TABLE
// Select the latest entry and watch count for each stream id on history table
- " INNER JOIN " +
- "(SELECT " + JOIN_STREAM_ID + ", " +
- " MAX(" + STREAM_ACCESS_DATE + ") AS " + STREAM_LATEST_DATE + ", " +
- " SUM(" + STREAM_REPEAT_COUNT + ") AS " + STREAM_WATCH_COUNT +
- " FROM " + STREAM_HISTORY_TABLE + " GROUP BY " + JOIN_STREAM_ID + ")" +
+ + " INNER JOIN "
+ + "(SELECT " + JOIN_STREAM_ID + ", "
+ + " MAX(" + STREAM_ACCESS_DATE + ") AS " + STREAM_LATEST_DATE + ", "
+ + " SUM(" + STREAM_REPEAT_COUNT + ") AS " + STREAM_WATCH_COUNT
+ + " FROM " + STREAM_HISTORY_TABLE + " GROUP BY " + JOIN_STREAM_ID + ")"
- " ON " + STREAM_ID + " = " + JOIN_STREAM_ID)
+ + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID)
public abstract Flowable> getStatistics();
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.java b/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.java
index 222ef0a59..752835182 100644
--- a/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.java
+++ b/app/src/main/java/org/schabi/newpipe/database/history/model/SearchHistoryEntry.java
@@ -13,7 +13,6 @@ import static org.schabi.newpipe.database.history.model.SearchHistoryEntry.SEARC
@Entity(tableName = SearchHistoryEntry.TABLE_NAME,
indices = {@Index(value = SEARCH)})
public class SearchHistoryEntry {
-
public static final String ID = "id";
public static final String TABLE_NAME = "search_history";
public static final String SERVICE_ID = "service_id";
@@ -33,7 +32,7 @@ public class SearchHistoryEntry {
@ColumnInfo(name = SEARCH)
private String search;
- public SearchHistoryEntry(Date creationDate, int serviceId, String search) {
+ public SearchHistoryEntry(final Date creationDate, final int serviceId, final String search) {
this.serviceId = serviceId;
this.creationDate = creationDate;
this.search = search;
@@ -43,7 +42,7 @@ public class SearchHistoryEntry {
return id;
}
- public void setId(long id) {
+ public void setId(final long id) {
this.id = id;
}
@@ -51,7 +50,7 @@ public class SearchHistoryEntry {
return creationDate;
}
- public void setCreationDate(Date creationDate) {
+ public void setCreationDate(final Date creationDate) {
this.creationDate = creationDate;
}
@@ -59,7 +58,7 @@ public class SearchHistoryEntry {
return serviceId;
}
- public void setServiceId(int serviceId) {
+ public void setServiceId(final int serviceId) {
this.serviceId = serviceId;
}
@@ -67,13 +66,13 @@ public class SearchHistoryEntry {
return search;
}
- public void setSearch(String search) {
+ public void setSearch(final String search) {
this.search = search;
}
@Ignore
- public boolean hasEqualValues(SearchHistoryEntry otherEntry) {
- return getServiceId() == otherEntry.getServiceId() &&
- getSearch().equals(otherEntry.getSearch());
+ public boolean hasEqualValues(final SearchHistoryEntry otherEntry) {
+ return getServiceId() == otherEntry.getServiceId()
+ && getSearch().equals(otherEntry.getSearch());
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/history/model/StreamHistoryEntity.java b/app/src/main/java/org/schabi/newpipe/database/history/model/StreamHistoryEntity.java
index 64bdf34de..bf1f7a9dd 100644
--- a/app/src/main/java/org/schabi/newpipe/database/history/model/StreamHistoryEntity.java
+++ b/app/src/main/java/org/schabi/newpipe/database/history/model/StreamHistoryEntity.java
@@ -1,20 +1,20 @@
package org.schabi.newpipe.database.history.model;
+import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.ForeignKey;
import androidx.room.Ignore;
import androidx.room.Index;
-import androidx.annotation.NonNull;
import org.schabi.newpipe.database.stream.model.StreamEntity;
import java.util.Date;
import static androidx.room.ForeignKey.CASCADE;
-import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_HISTORY_TABLE;
import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.JOIN_STREAM_ID;
import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_ACCESS_DATE;
+import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_HISTORY_TABLE;
@Entity(tableName = STREAM_HISTORY_TABLE,
primaryKeys = {JOIN_STREAM_ID, STREAM_ACCESS_DATE},
@@ -27,10 +27,10 @@ import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STRE
onDelete = CASCADE, onUpdate = CASCADE)
})
public class StreamHistoryEntity {
- final public static String STREAM_HISTORY_TABLE = "stream_history";
- final public static String JOIN_STREAM_ID = "stream_id";
- final public static String STREAM_ACCESS_DATE = "access_date";
- final public static String STREAM_REPEAT_COUNT = "repeat_count";
+ public static final String STREAM_HISTORY_TABLE = "stream_history";
+ public static final String JOIN_STREAM_ID = "stream_id";
+ public static final String STREAM_ACCESS_DATE = "access_date";
+ public static final String STREAM_REPEAT_COUNT = "repeat_count";
@ColumnInfo(name = JOIN_STREAM_ID)
private long streamUid;
@@ -42,14 +42,15 @@ public class StreamHistoryEntity {
@ColumnInfo(name = STREAM_REPEAT_COUNT)
private long repeatCount;
- public StreamHistoryEntity(long streamUid, @NonNull Date accessDate, long repeatCount) {
+ public StreamHistoryEntity(final long streamUid, @NonNull final Date accessDate,
+ final long repeatCount) {
this.streamUid = streamUid;
this.accessDate = accessDate;
this.repeatCount = repeatCount;
}
@Ignore
- public StreamHistoryEntity(long streamUid, @NonNull Date accessDate) {
+ public StreamHistoryEntity(final long streamUid, @NonNull final Date accessDate) {
this(streamUid, accessDate, 1);
}
@@ -57,7 +58,7 @@ public class StreamHistoryEntity {
return streamUid;
}
- public void setStreamUid(long streamUid) {
+ public void setStreamUid(final long streamUid) {
this.streamUid = streamUid;
}
@@ -65,7 +66,7 @@ public class StreamHistoryEntity {
return accessDate;
}
- public void setAccessDate(@NonNull Date accessDate) {
+ public void setAccessDate(@NonNull final Date accessDate) {
this.accessDate = accessDate;
}
@@ -73,7 +74,7 @@ public class StreamHistoryEntity {
return repeatCount;
}
- public void setRepeatCount(long repeatCount) {
+ public void setRepeatCount(final long repeatCount) {
this.repeatCount = repeatCount;
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistMetadataEntry.java b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistMetadataEntry.java
index 252ca07f0..a13894030 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistMetadataEntry.java
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistMetadataEntry.java
@@ -7,18 +7,19 @@ import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST
import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_THUMBNAIL_URL;
public class PlaylistMetadataEntry implements PlaylistLocalItem {
- final public static String PLAYLIST_STREAM_COUNT = "streamCount";
+ public static final String PLAYLIST_STREAM_COUNT = "streamCount";
@ColumnInfo(name = PLAYLIST_ID)
- final public long uid;
+ public final long uid;
@ColumnInfo(name = PLAYLIST_NAME)
- final public String name;
+ public final String name;
@ColumnInfo(name = PLAYLIST_THUMBNAIL_URL)
- final public String thumbnailUrl;
+ public final String thumbnailUrl;
@ColumnInfo(name = PLAYLIST_STREAM_COUNT)
- final public long streamCount;
+ public final long streamCount;
- public PlaylistMetadataEntry(long uid, String name, String thumbnailUrl, long streamCount) {
+ public PlaylistMetadataEntry(final long uid, final String name, final String thumbnailUrl,
+ final long streamCount) {
this.uid = uid;
this.name = name;
this.thumbnailUrl = thumbnailUrl;
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistDAO.java b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistDAO.java
index f5a685a7c..2cfe5440c 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistDAO.java
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistDAO.java
@@ -24,13 +24,13 @@ public abstract class PlaylistDAO implements BasicDAO {
public abstract int deleteAll();
@Override
- public Flowable> listByService(int serviceId) {
+ public Flowable> listByService(final int serviceId) {
throw new UnsupportedOperationException();
}
@Query("SELECT * FROM " + PLAYLIST_TABLE + " WHERE " + PLAYLIST_ID + " = :playlistId")
- public abstract Flowable> getPlaylist(final long playlistId);
+ public abstract Flowable> getPlaylist(long playlistId);
@Query("DELETE FROM " + PLAYLIST_TABLE + " WHERE " + PLAYLIST_ID + " = :playlistId")
- public abstract int deletePlaylist(final long playlistId);
+ public abstract int deletePlaylist(long playlistId);
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistRemoteDAO.java b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistRemoteDAO.java
index b7ccf42f7..23442ceff 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistRemoteDAO.java
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistRemoteDAO.java
@@ -27,22 +27,21 @@ public abstract class PlaylistRemoteDAO implements BasicDAO> listByService(int serviceId);
- @Query("SELECT * FROM " + REMOTE_PLAYLIST_TABLE + " WHERE " +
- REMOTE_PLAYLIST_URL + " = :url AND " +
- REMOTE_PLAYLIST_SERVICE_ID + " = :serviceId")
+ @Query("SELECT * FROM " + REMOTE_PLAYLIST_TABLE + " WHERE "
+ + REMOTE_PLAYLIST_URL + " = :url AND " + REMOTE_PLAYLIST_SERVICE_ID + " = :serviceId")
public abstract Flowable> getPlaylist(long serviceId, String url);
- @Query("SELECT " + REMOTE_PLAYLIST_ID + " FROM " + REMOTE_PLAYLIST_TABLE +
- " WHERE " +
- REMOTE_PLAYLIST_URL + " = :url AND " + REMOTE_PLAYLIST_SERVICE_ID + " = :serviceId")
+ @Query("SELECT " + REMOTE_PLAYLIST_ID + " FROM " + REMOTE_PLAYLIST_TABLE
+ + " WHERE " + REMOTE_PLAYLIST_URL + " = :url "
+ + "AND " + REMOTE_PLAYLIST_SERVICE_ID + " = :serviceId")
abstract Long getPlaylistIdInternal(long serviceId, String url);
@Transaction
- public long upsert(PlaylistRemoteEntity playlist) {
+ public long upsert(final PlaylistRemoteEntity playlist) {
final Long playlistId = getPlaylistIdInternal(playlist.getServiceId(), playlist.getUrl());
if (playlistId == null) {
@@ -54,7 +53,7 @@ public abstract class PlaylistRemoteDAO implements BasicDAO {
@@ -29,40 +36,39 @@ public abstract class PlaylistStreamDAO implements BasicDAO> listByService(int serviceId) {
+ public Flowable> listByService(final int serviceId) {
throw new UnsupportedOperationException();
}
- @Query("DELETE FROM " + PLAYLIST_STREAM_JOIN_TABLE +
- " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId")
- public abstract void deleteBatch(final long playlistId);
+ @Query("DELETE FROM " + PLAYLIST_STREAM_JOIN_TABLE
+ + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId")
+ public abstract void deleteBatch(long playlistId);
- @Query("SELECT COALESCE(MAX(" + JOIN_INDEX + "), -1)" +
- " FROM " + PLAYLIST_STREAM_JOIN_TABLE +
- " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId")
- public abstract Flowable getMaximumIndexOf(final long playlistId);
+ @Query("SELECT COALESCE(MAX(" + JOIN_INDEX + "), -1)"
+ + " FROM " + PLAYLIST_STREAM_JOIN_TABLE
+ + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId")
+ public abstract Flowable getMaximumIndexOf(long playlistId);
@Transaction
- @Query("SELECT * FROM " + STREAM_TABLE + " INNER JOIN " +
+ @Query("SELECT * FROM " + STREAM_TABLE + " INNER JOIN "
// get ids of streams of the given playlist
- "(SELECT " + JOIN_STREAM_ID + "," + JOIN_INDEX +
- " FROM " + PLAYLIST_STREAM_JOIN_TABLE +
- " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId)" +
+ + "(SELECT " + JOIN_STREAM_ID + "," + JOIN_INDEX
+ + " FROM " + PLAYLIST_STREAM_JOIN_TABLE
+ + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId)"
// then merge with the stream metadata
- " ON " + STREAM_ID + " = " + JOIN_STREAM_ID +
- " ORDER BY " + JOIN_INDEX + " ASC")
+ + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID
+ + " ORDER BY " + JOIN_INDEX + " ASC")
public abstract Flowable> getOrderedStreamsOf(long playlistId);
@Transaction
- @Query("SELECT " + PLAYLIST_ID + ", " + PLAYLIST_NAME + ", " +
- PLAYLIST_THUMBNAIL_URL + ", " +
- "COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT +
+ @Query("SELECT " + PLAYLIST_ID + ", " + PLAYLIST_NAME + ", " + PLAYLIST_THUMBNAIL_URL + ", "
+ + "COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT
- " FROM " + PLAYLIST_TABLE +
- " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE +
- " ON " + PLAYLIST_ID + " = " + JOIN_PLAYLIST_ID +
- " GROUP BY " + JOIN_PLAYLIST_ID +
- " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC")
+ + " FROM " + PLAYLIST_TABLE
+ + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE
+ + " ON " + PLAYLIST_ID + " = " + JOIN_PLAYLIST_ID
+ + " GROUP BY " + JOIN_PLAYLIST_ID
+ + " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC")
public abstract Flowable> getPlaylistMetadata();
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistEntity.java b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistEntity.java
index 9d7989b21..71abf2732 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistEntity.java
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistEntity.java
@@ -11,10 +11,10 @@ import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST
@Entity(tableName = PLAYLIST_TABLE,
indices = {@Index(value = {PLAYLIST_NAME})})
public class PlaylistEntity {
- final public static String PLAYLIST_TABLE = "playlists";
- final public static String PLAYLIST_ID = "uid";
- final public static String PLAYLIST_NAME = "name";
- final public static String PLAYLIST_THUMBNAIL_URL = "thumbnail_url";
+ public static final String PLAYLIST_TABLE = "playlists";
+ public static final String PLAYLIST_ID = "uid";
+ public static final String PLAYLIST_NAME = "name";
+ public static final String PLAYLIST_THUMBNAIL_URL = "thumbnail_url";
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = PLAYLIST_ID)
@@ -26,7 +26,7 @@ public class PlaylistEntity {
@ColumnInfo(name = PLAYLIST_THUMBNAIL_URL)
private String thumbnailUrl;
- public PlaylistEntity(String name, String thumbnailUrl) {
+ public PlaylistEntity(final String name, final String thumbnailUrl) {
this.name = name;
this.thumbnailUrl = thumbnailUrl;
}
@@ -35,7 +35,7 @@ public class PlaylistEntity {
return uid;
}
- public void setUid(long uid) {
+ public void setUid(final long uid) {
this.uid = uid;
}
@@ -43,7 +43,7 @@ public class PlaylistEntity {
return name;
}
- public void setName(String name) {
+ public void setName(final String name) {
this.name = name;
}
@@ -51,7 +51,7 @@ public class PlaylistEntity {
return thumbnailUrl;
}
- public void setThumbnailUrl(String thumbnailUrl) {
+ public void setThumbnailUrl(final String thumbnailUrl) {
this.thumbnailUrl = thumbnailUrl;
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.java b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.java
index fa257cfed..2e9a15d7d 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.java
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.java
@@ -24,14 +24,14 @@ import static org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity.RE
@Index(value = {REMOTE_PLAYLIST_SERVICE_ID, REMOTE_PLAYLIST_URL}, unique = true)
})
public class PlaylistRemoteEntity implements PlaylistLocalItem {
- final public static String REMOTE_PLAYLIST_TABLE = "remote_playlists";
- final public static String REMOTE_PLAYLIST_ID = "uid";
- final public static String REMOTE_PLAYLIST_SERVICE_ID = "service_id";
- final public static String REMOTE_PLAYLIST_NAME = "name";
- final public static String REMOTE_PLAYLIST_URL = "url";
- final public static String REMOTE_PLAYLIST_THUMBNAIL_URL = "thumbnail_url";
- final public static String REMOTE_PLAYLIST_UPLOADER_NAME = "uploader";
- final public static String REMOTE_PLAYLIST_STREAM_COUNT = "stream_count";
+ public static final String REMOTE_PLAYLIST_TABLE = "remote_playlists";
+ public static final String REMOTE_PLAYLIST_ID = "uid";
+ public static final String REMOTE_PLAYLIST_SERVICE_ID = "service_id";
+ public static final String REMOTE_PLAYLIST_NAME = "name";
+ public static final String REMOTE_PLAYLIST_URL = "url";
+ public static final String REMOTE_PLAYLIST_THUMBNAIL_URL = "thumbnail_url";
+ public static final String REMOTE_PLAYLIST_UPLOADER_NAME = "uploader";
+ public static final String REMOTE_PLAYLIST_STREAM_COUNT = "stream_count";
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = REMOTE_PLAYLIST_ID)
@@ -55,8 +55,9 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
@ColumnInfo(name = REMOTE_PLAYLIST_STREAM_COUNT)
private Long streamCount;
- public PlaylistRemoteEntity(int serviceId, String name, String url, String thumbnailUrl,
- String uploader, Long streamCount) {
+ public PlaylistRemoteEntity(final int serviceId, final String name, final String url,
+ final String thumbnailUrl, final String uploader,
+ final Long streamCount) {
this.serviceId = serviceId;
this.name = name;
this.url = url;
@@ -68,7 +69,8 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
@Ignore
public PlaylistRemoteEntity(final PlaylistInfo info) {
this(info.getServiceId(), info.getName(), info.getUrl(),
- info.getThumbnailUrl() == null ? info.getUploaderAvatarUrl() : info.getThumbnailUrl(),
+ info.getThumbnailUrl() == null
+ ? info.getUploaderAvatarUrl() : info.getThumbnailUrl(),
info.getUploaderName(), info.getStreamCount());
}
@@ -90,7 +92,7 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
return uid;
}
- public void setUid(long uid) {
+ public void setUid(final long uid) {
this.uid = uid;
}
@@ -98,7 +100,7 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
return serviceId;
}
- public void setServiceId(int serviceId) {
+ public void setServiceId(final int serviceId) {
this.serviceId = serviceId;
}
@@ -106,7 +108,7 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
return name;
}
- public void setName(String name) {
+ public void setName(final String name) {
this.name = name;
}
@@ -114,7 +116,7 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
return thumbnailUrl;
}
- public void setThumbnailUrl(String thumbnailUrl) {
+ public void setThumbnailUrl(final String thumbnailUrl) {
this.thumbnailUrl = thumbnailUrl;
}
@@ -122,7 +124,7 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
return url;
}
- public void setUrl(String url) {
+ public void setUrl(final String url) {
this.url = url;
}
@@ -130,7 +132,7 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
return uploader;
}
- public void setUploader(String uploader) {
+ public void setUploader(final String uploader) {
this.uploader = uploader;
}
@@ -138,7 +140,7 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
return streamCount;
}
- public void setStreamCount(Long streamCount) {
+ public void setStreamCount(final Long streamCount) {
this.streamCount = streamCount;
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistStreamEntity.java b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistStreamEntity.java
index 87afdb4f9..f3208b6d5 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistStreamEntity.java
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistStreamEntity.java
@@ -30,11 +30,10 @@ import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.PL
onDelete = CASCADE, onUpdate = CASCADE, deferred = true)
})
public class PlaylistStreamEntity {
-
- final public static String PLAYLIST_STREAM_JOIN_TABLE = "playlist_stream_join";
- final public static String JOIN_PLAYLIST_ID = "playlist_id";
- final public static String JOIN_STREAM_ID = "stream_id";
- final public static String JOIN_INDEX = "join_index";
+ public static final String PLAYLIST_STREAM_JOIN_TABLE = "playlist_stream_join";
+ public static final String JOIN_PLAYLIST_ID = "playlist_id";
+ public static final String JOIN_STREAM_ID = "stream_id";
+ public static final String JOIN_INDEX = "join_index";
@ColumnInfo(name = JOIN_PLAYLIST_ID)
private long playlistUid;
@@ -55,23 +54,23 @@ public class PlaylistStreamEntity {
return playlistUid;
}
+ public void setPlaylistUid(final long playlistUid) {
+ this.playlistUid = playlistUid;
+ }
+
public long getStreamUid() {
return streamUid;
}
+ public void setStreamUid(final long streamUid) {
+ this.streamUid = streamUid;
+ }
+
public int getIndex() {
return index;
}
- public void setPlaylistUid(long playlistUid) {
- this.playlistUid = playlistUid;
- }
-
- public void setStreamUid(long streamUid) {
- this.streamUid = streamUid;
- }
-
- public void setIndex(int index) {
+ public void setIndex(final int index) {
this.index = index;
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/stream/dao/StreamStateDAO.java b/app/src/main/java/org/schabi/newpipe/database/stream/dao/StreamStateDAO.java
index c85810984..eb0f77f66 100644
--- a/app/src/main/java/org/schabi/newpipe/database/stream/dao/StreamStateDAO.java
+++ b/app/src/main/java/org/schabi/newpipe/database/stream/dao/StreamStateDAO.java
@@ -27,21 +27,21 @@ public abstract class StreamStateDAO implements BasicDAO {
public abstract int deleteAll();
@Override
- public Flowable> listByService(int serviceId) {
+ public Flowable> listByService(final int serviceId) {
throw new UnsupportedOperationException();
}
@Query("SELECT * FROM " + STREAM_STATE_TABLE + " WHERE " + JOIN_STREAM_ID + " = :streamId")
- public abstract Flowable> getState(final long streamId);
+ public abstract Flowable> getState(long streamId);
@Query("DELETE FROM " + STREAM_STATE_TABLE + " WHERE " + JOIN_STREAM_ID + " = :streamId")
- public abstract int deleteState(final long streamId);
+ public abstract int deleteState(long streamId);
@Insert(onConflict = OnConflictStrategy.IGNORE)
- abstract void silentInsertInternal(final StreamStateEntity streamState);
+ abstract void silentInsertInternal(StreamStateEntity streamState);
@Transaction
- public long upsert(StreamStateEntity stream) {
+ public long upsert(final StreamStateEntity stream) {
silentInsertInternal(stream);
return update(stream);
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamEntity.kt b/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamEntity.kt
index ed9dc6b42..5ec2999f4 100644
--- a/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamEntity.kt
+++ b/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamEntity.kt
@@ -90,7 +90,8 @@ data class StreamEntity(
if (viewCount != null) item.viewCount = viewCount as Long
item.textualUploadDate = textualUploadDate
item.uploadDate = uploadDate?.let {
- DateWrapper(Calendar.getInstance().apply { time = it }, isUploadDateApproximation ?: false)
+ DateWrapper(Calendar.getInstance().apply { time = it }, isUploadDateApproximation
+ ?: false)
}
return item
diff --git a/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamStateEntity.java b/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamStateEntity.java
index 8630bfa53..d275d9a71 100644
--- a/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamStateEntity.java
+++ b/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamStateEntity.java
@@ -1,10 +1,9 @@
package org.schabi.newpipe.database.stream.model;
-
+import androidx.annotation.Nullable;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.ForeignKey;
-import androidx.annotation.Nullable;
import java.util.concurrent.TimeUnit;
@@ -21,14 +20,17 @@ import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_
onDelete = CASCADE, onUpdate = CASCADE)
})
public class StreamStateEntity {
- final public static String STREAM_STATE_TABLE = "stream_state";
- final public static String JOIN_STREAM_ID = "stream_id";
- final public static String STREAM_PROGRESS_TIME = "progress_time";
+ public static final String STREAM_STATE_TABLE = "stream_state";
+ public static final String JOIN_STREAM_ID = "stream_id";
+ public static final String STREAM_PROGRESS_TIME = "progress_time";
-
- /** Playback state will not be saved, if playback time less than this threshold */
+ /**
+ * Playback state will not be saved, if playback time is less than this threshold.
+ */
private static final int PLAYBACK_SAVE_THRESHOLD_START_SECONDS = 5;
- /** Playback state will not be saved, if time left less than this threshold */
+ /**
+ * Playback state will not be saved, if time left is less than this threshold.
+ */
private static final int PLAYBACK_SAVE_THRESHOLD_END_SECONDS = 10;
@ColumnInfo(name = JOIN_STREAM_ID)
@@ -37,7 +39,7 @@ public class StreamStateEntity {
@ColumnInfo(name = STREAM_PROGRESS_TIME)
private long progressTime;
- public StreamStateEntity(long streamUid, long progressTime) {
+ public StreamStateEntity(final long streamUid, final long progressTime) {
this.streamUid = streamUid;
this.progressTime = progressTime;
}
@@ -46,7 +48,7 @@ public class StreamStateEntity {
return streamUid;
}
- public void setStreamUid(long streamUid) {
+ public void setStreamUid(final long streamUid) {
this.streamUid = streamUid;
}
@@ -54,21 +56,23 @@ public class StreamStateEntity {
return progressTime;
}
- public void setProgressTime(long progressTime) {
+ public void setProgressTime(final long progressTime) {
this.progressTime = progressTime;
}
- public boolean isValid(int durationInSeconds) {
+ public boolean isValid(final int durationInSeconds) {
final int seconds = (int) TimeUnit.MILLISECONDS.toSeconds(progressTime);
return seconds > PLAYBACK_SAVE_THRESHOLD_START_SECONDS
&& seconds < durationInSeconds - PLAYBACK_SAVE_THRESHOLD_END_SECONDS;
}
@Override
- public boolean equals(@Nullable Object obj) {
+ public boolean equals(@Nullable final Object obj) {
if (obj instanceof StreamStateEntity) {
return ((StreamStateEntity) obj).streamUid == streamUid
&& ((StreamStateEntity) obj).progressTime == progressTime;
- } else return false;
+ } else {
+ return false;
+ }
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt
index bd13d9088..0269b5b17 100644
--- a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt
+++ b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt
@@ -48,7 +48,7 @@ abstract class SubscriptionDAO : BasicDAO {
entity.uid = uidFromInsert
} else {
val subscriptionIdFromDb = getSubscriptionIdInternal(entity.serviceId, entity.url)
- ?: throw IllegalStateException("Subscription cannot be null just after insertion.")
+ ?: throw IllegalStateException("Subscription cannot be null just after insertion.")
entity.uid = subscriptionIdFromDb
update(entity)
diff --git a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java
index ec98c583a..cc7219543 100644
--- a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java
+++ b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java
@@ -1,11 +1,11 @@
package org.schabi.newpipe.database.subscription;
+import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.Index;
import androidx.room.PrimaryKey;
-import androidx.annotation.NonNull;
import org.schabi.newpipe.extractor.channel.ChannelInfo;
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
@@ -18,15 +18,14 @@ import static org.schabi.newpipe.database.subscription.SubscriptionEntity.SUBSCR
@Entity(tableName = SUBSCRIPTION_TABLE,
indices = {@Index(value = {SUBSCRIPTION_SERVICE_ID, SUBSCRIPTION_URL}, unique = true)})
public class SubscriptionEntity {
-
- public static final String SUBSCRIPTION_UID = "uid";
- public static final String SUBSCRIPTION_TABLE = "subscriptions";
- public static final String SUBSCRIPTION_SERVICE_ID = "service_id";
- public static final String SUBSCRIPTION_URL = "url";
- public static final String SUBSCRIPTION_NAME = "name";
- public static final String SUBSCRIPTION_AVATAR_URL = "avatar_url";
- public static final String SUBSCRIPTION_SUBSCRIBER_COUNT = "subscriber_count";
- public static final String SUBSCRIPTION_DESCRIPTION = "description";
+ public static final String SUBSCRIPTION_UID = "uid";
+ public static final String SUBSCRIPTION_TABLE = "subscriptions";
+ public static final String SUBSCRIPTION_SERVICE_ID = "service_id";
+ public static final String SUBSCRIPTION_URL = "url";
+ public static final String SUBSCRIPTION_NAME = "name";
+ public static final String SUBSCRIPTION_AVATAR_URL = "avatar_url";
+ public static final String SUBSCRIPTION_SUBSCRIBER_COUNT = "subscriber_count";
+ public static final String SUBSCRIPTION_DESCRIPTION = "description";
@PrimaryKey(autoGenerate = true)
private long uid = 0;
@@ -49,11 +48,21 @@ public class SubscriptionEntity {
@ColumnInfo(name = SUBSCRIPTION_DESCRIPTION)
private String description;
+ @Ignore
+ public static SubscriptionEntity from(@NonNull final ChannelInfo info) {
+ SubscriptionEntity result = new SubscriptionEntity();
+ result.setServiceId(info.getServiceId());
+ result.setUrl(info.getUrl());
+ result.setData(info.getName(), info.getAvatarUrl(), info.getDescription(),
+ info.getSubscriberCount());
+ return result;
+ }
+
public long getUid() {
return uid;
}
- public void setUid(long uid) {
+ public void setUid(final long uid) {
this.uid = uid;
}
@@ -61,7 +70,7 @@ public class SubscriptionEntity {
return serviceId;
}
- public void setServiceId(int serviceId) {
+ public void setServiceId(final int serviceId) {
this.serviceId = serviceId;
}
@@ -69,7 +78,7 @@ public class SubscriptionEntity {
return url;
}
- public void setUrl(String url) {
+ public void setUrl(final String url) {
this.url = url;
}
@@ -77,7 +86,7 @@ public class SubscriptionEntity {
return name;
}
- public void setName(String name) {
+ public void setName(final String name) {
this.name = name;
}
@@ -85,7 +94,7 @@ public class SubscriptionEntity {
return avatarUrl;
}
- public void setAvatarUrl(String avatarUrl) {
+ public void setAvatarUrl(final String avatarUrl) {
this.avatarUrl = avatarUrl;
}
@@ -93,7 +102,7 @@ public class SubscriptionEntity {
return subscriberCount;
}
- public void setSubscriberCount(Long subscriberCount) {
+ public void setSubscriberCount(final Long subscriberCount) {
this.subscriberCount = subscriberCount;
}
@@ -101,19 +110,16 @@ public class SubscriptionEntity {
return description;
}
- public void setDescription(String description) {
+ public void setDescription(final String description) {
this.description = description;
}
@Ignore
- public void setData(final String name,
- final String avatarUrl,
- final String description,
- final Long subscriberCount) {
- this.setName(name);
- this.setAvatarUrl(avatarUrl);
- this.setDescription(description);
- this.setSubscriberCount(subscriberCount);
+ public void setData(final String n, final String au, final String d, final Long sc) {
+ this.setName(n);
+ this.setAvatarUrl(au);
+ this.setDescription(d);
+ this.setSubscriberCount(sc);
}
@Ignore
@@ -124,13 +130,4 @@ public class SubscriptionEntity {
item.setDescription(getDescription());
return item;
}
-
- @Ignore
- public static SubscriptionEntity from(@NonNull ChannelInfo info) {
- SubscriptionEntity result = new SubscriptionEntity();
- result.setServiceId(info.getServiceId());
- result.setUrl(info.getUrl());
- result.setData(info.getName(), info.getAvatarUrl(), info.getDescription(), info.getSubscriberCount());
- return result;
- }
}
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
index de3df3527..912d63e5a 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -3,16 +3,16 @@ package org.schabi.newpipe.download;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.ViewTreeObserver;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+
import org.schabi.newpipe.R;
-import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ThemeHelper;
import us.shandian.giga.service.DownloadManagerService;
@@ -25,7 +25,7 @@ public class DownloadActivity extends AppCompatActivity {
private static final String MISSIONS_FRAGMENT_TAG = "fragment_tag";
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(final Bundle savedInstanceState) {
// Service
Intent i = new Intent();
i.setClass(this, DownloadManagerService.class);
@@ -46,7 +46,8 @@ public class DownloadActivity extends AppCompatActivity {
actionBar.setDisplayShowTitleEnabled(true);
}
- getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ getWindow().getDecorView().getViewTreeObserver()
+ .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
updateFragments();
@@ -65,7 +66,7 @@ public class DownloadActivity extends AppCompatActivity {
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
+ public boolean onCreateOptionsMenu(final Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
@@ -75,7 +76,7 @@ public class DownloadActivity extends AppCompatActivity {
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
index c78e68597..bdd358eaf 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
@@ -81,11 +81,12 @@ import us.shandian.giga.service.MissionState;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
-public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheckedChangeListener, AdapterView.OnItemSelectedListener {
+public class DownloadDialog extends DialogFragment
+ implements RadioGroup.OnCheckedChangeListener, AdapterView.OnItemSelectedListener {
private static final String TAG = "DialogFragment";
private static final boolean DEBUG = MainActivity.DEBUG;
private static final int REQUEST_DOWNLOAD_SAVE_AS = 0x1230;
-
+ private final CompositeDisposable disposables = new CompositeDisposable();
@State
protected StreamInfo currentInfo;
@State
@@ -100,30 +101,32 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
protected int selectedAudioIndex = 0;
@State
protected int selectedSubtitleIndex = 0;
-
+ private StoredDirectoryHelper mainStorageAudio = null;
+ private StoredDirectoryHelper mainStorageVideo = null;
+ private DownloadManager downloadManager = null;
+ private ActionMenuItemView okButton = null;
+ private Context context;
+ private boolean askForSavePath;
private StreamItemAdapter audioStreamsAdapter;
private StreamItemAdapter videoStreamsAdapter;
private StreamItemAdapter subtitleStreamsAdapter;
-
- private final CompositeDisposable disposables = new CompositeDisposable();
-
private EditText nameEditText;
private Spinner streamsSpinner;
private RadioGroup radioStreamsGroup;
private TextView threadsCountTextView;
private SeekBar threadsSeekBar;
-
private SharedPreferences prefs;
- public static DownloadDialog newInstance(StreamInfo info) {
+ public static DownloadDialog newInstance(final StreamInfo info) {
DownloadDialog dialog = new DownloadDialog();
dialog.setInfo(info);
return dialog;
}
- public static DownloadDialog newInstance(Context context, StreamInfo info) {
- final ArrayList streamsList = new ArrayList<>(ListHelper.getSortedStreamVideosList(context,
- info.getVideoStreams(), info.getVideoOnlyStreams(), false));
+ public static DownloadDialog newInstance(final Context context, final StreamInfo info) {
+ final ArrayList streamsList = new ArrayList<>(ListHelper
+ .getSortedStreamVideosList(context, info.getVideoStreams(),
+ info.getVideoOnlyStreams(), false));
final int selectedStreamIndex = ListHelper.getDefaultResolutionIndex(context, streamsList);
final DownloadDialog instance = newInstance(info);
@@ -135,57 +138,61 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
return instance;
}
- private void setInfo(StreamInfo info) {
+ private void setInfo(final StreamInfo info) {
this.currentInfo = info;
}
- public void setAudioStreams(List audioStreams) {
+ public void setAudioStreams(final List audioStreams) {
setAudioStreams(new StreamSizeWrapper<>(audioStreams, getContext()));
}
- public void setAudioStreams(StreamSizeWrapper wrappedAudioStreams) {
- this.wrappedAudioStreams = wrappedAudioStreams;
+ public void setAudioStreams(final StreamSizeWrapper was) {
+ this.wrappedAudioStreams = was;
}
- public void setVideoStreams(List videoStreams) {
+ public void setVideoStreams(final List videoStreams) {
setVideoStreams(new StreamSizeWrapper<>(videoStreams, getContext()));
}
- public void setVideoStreams(StreamSizeWrapper wrappedVideoStreams) {
- this.wrappedVideoStreams = wrappedVideoStreams;
- }
-
- public void setSubtitleStreams(List subtitleStreams) {
- setSubtitleStreams(new StreamSizeWrapper<>(subtitleStreams, getContext()));
- }
-
- public void setSubtitleStreams(StreamSizeWrapper wrappedSubtitleStreams) {
- this.wrappedSubtitleStreams = wrappedSubtitleStreams;
- }
-
- public void setSelectedVideoStream(int selectedVideoIndex) {
- this.selectedVideoIndex = selectedVideoIndex;
- }
-
- public void setSelectedAudioStream(int selectedAudioIndex) {
- this.selectedAudioIndex = selectedAudioIndex;
- }
-
- public void setSelectedSubtitleStream(int selectedSubtitleIndex) {
- this.selectedSubtitleIndex = selectedSubtitleIndex;
- }
-
/*//////////////////////////////////////////////////////////////////////////
// LifeCycle
//////////////////////////////////////////////////////////////////////////*/
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (DEBUG)
- Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
+ public void setVideoStreams(final StreamSizeWrapper wvs) {
+ this.wrappedVideoStreams = wvs;
+ }
- if (!PermissionHelper.checkStoragePermissions(getActivity(), PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) {
+ public void setSubtitleStreams(final List subtitleStreams) {
+ setSubtitleStreams(new StreamSizeWrapper<>(subtitleStreams, getContext()));
+ }
+
+ public void setSubtitleStreams(
+ final StreamSizeWrapper wss) {
+ this.wrappedSubtitleStreams = wss;
+ }
+
+ public void setSelectedVideoStream(final int svi) {
+ this.selectedVideoIndex = svi;
+ }
+
+ public void setSelectedAudioStream(final int sai) {
+ this.selectedAudioIndex = sai;
+ }
+
+ public void setSelectedSubtitleStream(final int ssi) {
+ this.selectedSubtitleIndex = ssi;
+ }
+
+ @Override
+ public void onCreate(@Nullable final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (DEBUG) {
+ Log.d(TAG, "onCreate() called with: "
+ + "savedInstanceState = [" + savedInstanceState + "]");
+ }
+
+ if (!PermissionHelper.checkStoragePermissions(getActivity(),
+ PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) {
getDialog().dismiss();
return;
}
@@ -199,17 +206,23 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
List videoStreams = wrappedVideoStreams.getStreamsList();
for (int i = 0; i < videoStreams.size(); i++) {
- if (!videoStreams.get(i).isVideoOnly()) continue;
- AudioStream audioStream = SecondaryStreamHelper.getAudioStreamFor(wrappedAudioStreams.getStreamsList(), videoStreams.get(i));
+ if (!videoStreams.get(i).isVideoOnly()) {
+ continue;
+ }
+ AudioStream audioStream = SecondaryStreamHelper
+ .getAudioStreamFor(wrappedAudioStreams.getStreamsList(), videoStreams.get(i));
if (audioStream != null) {
- secondaryStreams.append(i, new SecondaryStreamHelper<>(wrappedAudioStreams, audioStream));
+ secondaryStreams
+ .append(i, new SecondaryStreamHelper<>(wrappedAudioStreams, audioStream));
} else if (DEBUG) {
- Log.w(TAG, "No audio stream candidates for video format " + videoStreams.get(i).getFormat().name());
+ Log.w(TAG, "No audio stream candidates for video format "
+ + videoStreams.get(i).getFormat().name());
}
}
- this.videoStreamsAdapter = new StreamItemAdapter<>(context, wrappedVideoStreams, secondaryStreams);
+ this.videoStreamsAdapter = new StreamItemAdapter<>(context, wrappedVideoStreams,
+ secondaryStreams);
this.audioStreamsAdapter = new StreamItemAdapter<>(context, wrappedAudioStreams);
this.subtitleStreamsAdapter = new StreamItemAdapter<>(context, wrappedSubtitleStreams);
@@ -218,7 +231,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
context.bindService(intent, new ServiceConnection() {
@Override
- public void onServiceConnected(ComponentName cname, IBinder service) {
+ public void onServiceConnected(final ComponentName cname, final IBinder service) {
DownloadManagerBinder mgr = (DownloadManagerBinder) service;
mainStorageAudio = mgr.getMainStorageAudio();
@@ -232,25 +245,34 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
}
@Override
- public void onServiceDisconnected(ComponentName name) {
+ public void onServiceDisconnected(final ComponentName name) {
// nothing to do
}
}, Context.BIND_AUTO_CREATE);
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Inits
+ //////////////////////////////////////////////////////////////////////////*/
+
@Override
- public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- if (DEBUG)
- Log.d(TAG, "onCreateView() called with: inflater = [" + inflater + "], container = [" + container + "], savedInstanceState = [" + savedInstanceState + "]");
+ public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container,
+ final Bundle savedInstanceState) {
+ if (DEBUG) {
+ Log.d(TAG, "onCreateView() called with: "
+ + "inflater = [" + inflater + "], container = [" + container + "], "
+ + "savedInstanceState = [" + savedInstanceState + "]");
+ }
return inflater.inflate(R.layout.download_dialog, container);
}
@Override
- public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
nameEditText = view.findViewById(R.id.file_name);
nameEditText.setText(FilenameUtils.createFilename(getContext(), currentInfo.getName()));
- selectedAudioIndex = ListHelper.getDefaultAudioFormat(getContext(), currentInfo.getAudioStreams());
+ selectedAudioIndex = ListHelper
+ .getDefaultAudioFormat(getContext(), currentInfo.getAudioStreams());
selectedSubtitleIndex = getSubtitleIndexBy(subtitleStreamsAdapter.getAll());
@@ -272,21 +294,20 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
threadsCountTextView.setText(String.valueOf(threads));
threadsSeekBar.setProgress(threads - 1);
threadsSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
-
@Override
- public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
- progress++;
- prefs.edit().putInt(getString(R.string.default_download_threads), progress).apply();
- threadsCountTextView.setText(String.valueOf(progress));
+ public void onProgressChanged(final SeekBar seekbar, final int progress,
+ final boolean fromUser) {
+ final int newProgress = progress + 1;
+ prefs.edit().putInt(getString(R.string.default_download_threads), newProgress)
+ .apply();
+ threadsCountTextView.setText(String.valueOf(newProgress));
}
@Override
- public void onStartTrackingTouch(SeekBar p1) {
- }
+ public void onStartTrackingTouch(final SeekBar p1) { }
@Override
- public void onStopTrackingTouch(SeekBar p1) {
- }
+ public void onStopTrackingTouch(final SeekBar p1) { }
});
fetchStreamsSize();
@@ -295,17 +316,20 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
private void fetchStreamsSize() {
disposables.clear();
- disposables.add(StreamSizeWrapper.fetchSizeForWrapper(wrappedVideoStreams).subscribe(result -> {
+ disposables.add(StreamSizeWrapper.fetchSizeForWrapper(wrappedVideoStreams)
+ .subscribe(result -> {
if (radioStreamsGroup.getCheckedRadioButtonId() == R.id.video_button) {
setupVideoSpinner();
}
}));
- disposables.add(StreamSizeWrapper.fetchSizeForWrapper(wrappedAudioStreams).subscribe(result -> {
+ disposables.add(StreamSizeWrapper.fetchSizeForWrapper(wrappedAudioStreams)
+ .subscribe(result -> {
if (radioStreamsGroup.getCheckedRadioButtonId() == R.id.audio_button) {
setupAudioSpinner();
}
}));
- disposables.add(StreamSizeWrapper.fetchSizeForWrapper(wrappedSubtitleStreams).subscribe(result -> {
+ disposables.add(StreamSizeWrapper.fetchSizeForWrapper(wrappedSubtitleStreams)
+ .subscribe(result -> {
if (radioStreamsGroup.getCheckedRadioButtonId() == R.id.subtitle_button) {
setupSubtitleSpinner();
}
@@ -318,14 +342,22 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
disposables.clear();
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Radio group Video&Audio options - Listener
+ //////////////////////////////////////////////////////////////////////////*/
+
@Override
- public void onSaveInstanceState(@NonNull Bundle outState) {
+ public void onSaveInstanceState(@NonNull final Bundle outState) {
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Streams Spinner Listener
+ //////////////////////////////////////////////////////////////////////////*/
+
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_DOWNLOAD_SAVE_AS && resultCode == Activity.RESULT_OK) {
@@ -336,7 +368,8 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
if (FilePickerActivityHelper.isOwnFileUri(context, data.getData())) {
File file = Utils.getFileForUri(data.getData());
- checkSelectedDownload(null, Uri.fromFile(file), file.getName(), StoredFileHelper.DEFAULT_MIME);
+ checkSelectedDownload(null, Uri.fromFile(file), file.getName(),
+ StoredFileHelper.DEFAULT_MIME);
return;
}
@@ -347,27 +380,27 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
}
// check if the selected file was previously used
- checkSelectedDownload(null, data.getData(), docFile.getName(), docFile.getType());
+ checkSelectedDownload(null, data.getData(), docFile.getName(),
+ docFile.getType());
}
}
- /*//////////////////////////////////////////////////////////////////////////
- // Inits
- //////////////////////////////////////////////////////////////////////////*/
-
- private void initToolbar(Toolbar toolbar) {
- if (DEBUG) Log.d(TAG, "initToolbar() called with: toolbar = [" + toolbar + "]");
+ private void initToolbar(final Toolbar toolbar) {
+ if (DEBUG) {
+ Log.d(TAG, "initToolbar() called with: toolbar = [" + toolbar + "]");
+ }
boolean isLight = ThemeHelper.isLightThemeSelected(getActivity());
toolbar.setTitle(R.string.download_dialog_title);
- toolbar.setNavigationIcon(isLight ? R.drawable.ic_arrow_back_black_24dp : R.drawable.ic_arrow_back_white_24dp);
+ toolbar.setNavigationIcon(isLight ? R.drawable.ic_arrow_back_black_24dp
+ : R.drawable.ic_arrow_back_white_24dp);
toolbar.inflateMenu(R.menu.dialog_url);
toolbar.setNavigationOnClickListener(v -> getDialog().dismiss());
toolbar.setNavigationContentDescription(R.string.cancel);
okButton = toolbar.findViewById(R.id.okay);
- okButton.setEnabled(false);// disable until the download service connection is done
+ okButton.setEnabled(false); // disable until the download service connection is done
toolbar.setOnMenuItemClickListener(item -> {
if (item.getItemId() == R.id.okay) {
@@ -381,8 +414,14 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
});
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Utils
+ //////////////////////////////////////////////////////////////////////////*/
+
private void setupAudioSpinner() {
- if (getContext() == null) return;
+ if (getContext() == null) {
+ return;
+ }
streamsSpinner.setAdapter(audioStreamsAdapter);
streamsSpinner.setSelection(selectedAudioIndex);
@@ -390,7 +429,9 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
}
private void setupVideoSpinner() {
- if (getContext() == null) return;
+ if (getContext() == null) {
+ return;
+ }
streamsSpinner.setAdapter(videoStreamsAdapter);
streamsSpinner.setSelection(selectedVideoIndex);
@@ -398,21 +439,21 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
}
private void setupSubtitleSpinner() {
- if (getContext() == null) return;
+ if (getContext() == null) {
+ return;
+ }
streamsSpinner.setAdapter(subtitleStreamsAdapter);
streamsSpinner.setSelection(selectedSubtitleIndex);
setRadioButtonsState(true);
}
- /*//////////////////////////////////////////////////////////////////////////
- // Radio group Video&Audio options - Listener
- //////////////////////////////////////////////////////////////////////////*/
-
@Override
- public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
- if (DEBUG)
- Log.d(TAG, "onCheckedChanged() called with: group = [" + group + "], checkedId = [" + checkedId + "]");
+ public void onCheckedChanged(final RadioGroup group, @IdRes final int checkedId) {
+ if (DEBUG) {
+ Log.d(TAG, "onCheckedChanged() called with: "
+ + "group = [" + group + "], checkedId = [" + checkedId + "]");
+ }
boolean flag = true;
switch (checkedId) {
@@ -431,14 +472,14 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
threadsSeekBar.setEnabled(flag);
}
- /*//////////////////////////////////////////////////////////////////////////
- // Streams Spinner Listener
- //////////////////////////////////////////////////////////////////////////*/
-
@Override
- public void onItemSelected(AdapterView> parent, View view, int position, long id) {
- if (DEBUG)
- Log.d(TAG, "onItemSelected() called with: parent = [" + parent + "], view = [" + view + "], position = [" + position + "], id = [" + id + "]");
+ public void onItemSelected(final AdapterView> parent, final View view,
+ final int position, final long id) {
+ if (DEBUG) {
+ Log.d(TAG, "onItemSelected() called with: "
+ + "parent = [" + parent + "], view = [" + view + "], "
+ + "position = [" + position + "], id = [" + id + "]");
+ }
switch (radioStreamsGroup.getCheckedRadioButtonId()) {
case R.id.audio_button:
selectedAudioIndex = position;
@@ -453,13 +494,9 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
}
@Override
- public void onNothingSelected(AdapterView> parent) {
+ public void onNothingSelected(final AdapterView> parent) {
}
- /*//////////////////////////////////////////////////////////////////////////
- // Utils
- //////////////////////////////////////////////////////////////////////////*/
-
protected void setupDownloadOptions() {
setRadioButtonsState(false);
@@ -484,30 +521,36 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
subtitleButton.setChecked(true);
setupSubtitleSpinner();
} else {
- Toast.makeText(getContext(), R.string.no_streams_available_download, Toast.LENGTH_SHORT).show();
+ Toast.makeText(getContext(), R.string.no_streams_available_download,
+ Toast.LENGTH_SHORT).show();
getDialog().dismiss();
}
}
- private void setRadioButtonsState(boolean enabled) {
+ private void setRadioButtonsState(final boolean enabled) {
radioStreamsGroup.findViewById(R.id.audio_button).setEnabled(enabled);
radioStreamsGroup.findViewById(R.id.video_button).setEnabled(enabled);
radioStreamsGroup.findViewById(R.id.subtitle_button).setEnabled(enabled);
}
- private int getSubtitleIndexBy(List streams) {
+ private int getSubtitleIndexBy(final List streams) {
final Localization preferredLocalization = NewPipe.getPreferredLocalization();
int candidate = 0;
for (int i = 0; i < streams.size(); i++) {
final Locale streamLocale = streams.get(i).getLocale();
- final boolean languageEquals = streamLocale.getLanguage() != null && preferredLocalization.getLanguageCode() != null &&
- streamLocale.getLanguage().equals(new Locale(preferredLocalization.getLanguageCode()).getLanguage());
- final boolean countryEquals = streamLocale.getCountry() != null && streamLocale.getCountry().equals(preferredLocalization.getCountryCode());
+ final boolean languageEquals = streamLocale.getLanguage() != null
+ && preferredLocalization.getLanguageCode() != null
+ && streamLocale.getLanguage()
+ .equals(new Locale(preferredLocalization.getLanguageCode()).getLanguage());
+ final boolean countryEquals = streamLocale.getCountry() != null
+ && streamLocale.getCountry().equals(preferredLocalization.getCountryCode());
if (languageEquals) {
- if (countryEquals) return i;
+ if (countryEquals) {
+ return i;
+ }
candidate = i;
}
@@ -516,20 +559,13 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
return candidate;
}
- StoredDirectoryHelper mainStorageAudio = null;
- StoredDirectoryHelper mainStorageVideo = null;
- DownloadManager downloadManager = null;
- ActionMenuItemView okButton = null;
- Context context;
- boolean askForSavePath;
-
private String getNameEditText() {
String str = nameEditText.getText().toString().trim();
return FilenameUtils.createFilename(context, str.isEmpty() ? currentInfo.getName() : str);
}
- private void showFailedDialog(@StringRes int msg) {
+ private void showFailedDialog(@StringRes final int msg) {
assureCorrectAppLanguage(getContext());
new AlertDialog.Builder(context)
.setTitle(R.string.general_error)
@@ -539,13 +575,14 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
.show();
}
- private void showErrorActivity(Exception e) {
+ private void showErrorActivity(final Exception e) {
ErrorActivity.reportError(
context,
Collections.singletonList(e),
null,
null,
- ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "-", "-", R.string.general_error)
+ ErrorActivity.ErrorInfo
+ .make(UserAction.SOMETHING_ELSE, "-", "-", R.string.general_error)
);
}
@@ -563,7 +600,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
case R.id.audio_button:
mainStorage = mainStorageAudio;
format = audioStreamsAdapter.getItem(selectedAudioIndex).getFormat();
- switch(format) {
+ switch (format) {
case WEBMA_OPUS:
mime = "audio/ogg";
filename += "opus";
@@ -581,7 +618,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
filename += format.suffix;
break;
case R.id.subtitle_button:
- mainStorage = mainStorageVideo;// subtitle & video files go together
+ mainStorage = mainStorageVideo; // subtitle & video files go together
format = subtitleStreamsAdapter.getItem(selectedSubtitleIndex).getFormat();
mime = format.mimeType;
filename += format == MediaFormat.TTML ? MediaFormat.SRT.suffix : format.suffix;
@@ -596,23 +633,25 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
// * save path not defined (via download settings)
// * the user checked the "ask where to download" option
- if (!askForSavePath)
- Toast.makeText(context, getString(R.string.no_available_dir), Toast.LENGTH_LONG).show();
+ if (!askForSavePath) {
+ Toast.makeText(context, getString(R.string.no_available_dir),
+ Toast.LENGTH_LONG).show();
+ }
if (NewPipeSettings.useStorageAccessFramework(context)) {
- StoredFileHelper.requestSafWithFileCreation(this, REQUEST_DOWNLOAD_SAVE_AS, filename, mime);
+ StoredFileHelper.requestSafWithFileCreation(this, REQUEST_DOWNLOAD_SAVE_AS,
+ filename, mime);
} else {
File initialSavePath;
- if (radioStreamsGroup.getCheckedRadioButtonId() == R.id.audio_button)
+ if (radioStreamsGroup.getCheckedRadioButtonId() == R.id.audio_button) {
initialSavePath = NewPipeSettings.getDir(Environment.DIRECTORY_MUSIC);
- else
+ } else {
initialSavePath = NewPipeSettings.getDir(Environment.DIRECTORY_MOVIES);
+ }
initialSavePath = new File(initialSavePath, filename);
- startActivityForResult(
- FilePickerActivityHelper.chooseFileToSave(context, initialSavePath.getAbsolutePath()),
- REQUEST_DOWNLOAD_SAVE_AS
- );
+ startActivityForResult(FilePickerActivityHelper.chooseFileToSave(context,
+ initialSavePath.getAbsolutePath()), REQUEST_DOWNLOAD_SAVE_AS);
}
return;
@@ -622,7 +661,9 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
checkSelectedDownload(mainStorage, mainStorage.findFile(filename), filename, mime);
}
- private void checkSelectedDownload(StoredDirectoryHelper mainStorage, Uri targetFile, String filename, String mime) {
+ private void checkSelectedDownload(final StoredDirectoryHelper mainStorage,
+ final Uri targetFile, final String filename,
+ final String mime) {
StoredFileHelper storage;
try {
@@ -631,10 +672,12 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
storage = new StoredFileHelper(context, null, targetFile, "");
} else if (targetFile == null) {
// the file does not exist, but it is probably used in a pending download
- storage = new StoredFileHelper(mainStorage.getUri(), filename, mime, mainStorage.getTag());
+ storage = new StoredFileHelper(mainStorage.getUri(), filename, mime,
+ mainStorage.getTag());
} else {
// the target filename is already use, attempt to use it
- storage = new StoredFileHelper(context, mainStorage.getUri(), targetFile, mainStorage.getTag());
+ storage = new StoredFileHelper(context, mainStorage.getUri(), targetFile,
+ mainStorage.getTag());
}
} catch (Exception e) {
showErrorActivity(e);
@@ -738,24 +781,28 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
} else {
try {
// try take (or steal) the file
- storageNew = new StoredFileHelper(context, mainStorage.getUri(), targetFile, mainStorage.getTag());
+ storageNew = new StoredFileHelper(context, mainStorage.getUri(),
+ targetFile, mainStorage.getTag());
} catch (IOException e) {
- Log.e(TAG, "Failed to take (or steal) the file in " + targetFile.toString());
+ Log.e(TAG, "Failed to take (or steal) the file in "
+ + targetFile.toString());
storageNew = null;
}
}
- if (storageNew != null && storageNew.canWrite())
+ if (storageNew != null && storageNew.canWrite()) {
continueSelectedDownload(storageNew);
- else
+ } else {
showFailedDialog(R.string.error_file_creation);
+ }
break;
case PendingRunning:
storageNew = mainStorage.createUniqueFile(filename, mime);
- if (storageNew == null)
+ if (storageNew == null) {
showFailedDialog(R.string.error_file_creation);
- else
+ } else {
continueSelectedDownload(storageNew);
+ }
break;
}
});
@@ -763,7 +810,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
askDialog.create().show();
}
- private void continueSelectedDownload(@NonNull StoredFileHelper storage) {
+ private void continueSelectedDownload(@NonNull final StoredFileHelper storage) {
if (!storage.canWrite()) {
showFailedDialog(R.string.permission_denied);
return;
@@ -771,7 +818,9 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
// check if the selected file has to be overwritten, by simply checking its length
try {
- if (storage.length() > 0) storage.truncate();
+ if (storage.length() > 0) {
+ storage.truncate();
+ }
} catch (IOException e) {
Log.e(TAG, "failed to truncate the file: " + storage.getUri().toString(), e);
showFailedDialog(R.string.overwrite_failed);
@@ -811,13 +860,15 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
if (secondary != null) {
secondaryStream = secondary.getStream();
- if (selectedStream.getFormat() == MediaFormat.MPEG_4)
+ if (selectedStream.getFormat() == MediaFormat.MPEG_4) {
psName = Postprocessing.ALGORITHM_MP4_FROM_DASH_MUXER;
- else
+ } else {
psName = Postprocessing.ALGORITHM_WEBM_MUXER;
+ }
psArgs = null;
- long videoSize = wrappedVideoStreams.getSizeInBytes((VideoStream) selectedStream);
+ long videoSize = wrappedVideoStreams
+ .getSizeInBytes((VideoStream) selectedStream);
// set nearLength, only, if both sizes are fetched or known. This probably
// does not work on slow networks but is later updated in the downloader
@@ -827,7 +878,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
}
break;
case R.id.subtitle_button:
- threads = 1;// use unique thread for subtitles due small file size
+ threads = 1; // use unique thread for subtitles due small file size
kind = 's';
selectedStream = subtitleStreamsAdapter.getItem(selectedSubtitleIndex);
@@ -835,7 +886,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
psName = Postprocessing.ALGORITHM_TTML_CONVERTER;
psArgs = new String[]{
selectedStream.getFormat().getSuffix(),
- "false",// ignore empty frames
+ "false" // ignore empty frames
};
}
break;
@@ -854,14 +905,12 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
urls = new String[]{
selectedStream.getUrl(), secondaryStream.getUrl()
};
- recoveryInfo = new MissionRecoveryInfo[]{
- new MissionRecoveryInfo(selectedStream), new MissionRecoveryInfo(secondaryStream)
- };
+ recoveryInfo = new MissionRecoveryInfo[]{new MissionRecoveryInfo(selectedStream),
+ new MissionRecoveryInfo(secondaryStream)};
}
- DownloadManagerService.startMission(
- context, urls, storage, kind, threads, currentInfo.getUrl(), psName, psArgs, nearLength, recoveryInfo
- );
+ DownloadManagerService.startMission(context, urls, storage, kind, threads,
+ currentInfo.getUrl(), psName, psArgs, nearLength, recoveryInfo);
dismiss();
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/BackPressable.java b/app/src/main/java/org/schabi/newpipe/fragments/BackPressable.java
index 737db784b..6add5eb09 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/BackPressable.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/BackPressable.java
@@ -1,11 +1,11 @@
package org.schabi.newpipe.fragments;
/**
- * Indicates that the current fragment can handle back presses
+ * Indicates that the current fragment can handle back presses.
*/
public interface BackPressable {
/**
- * A back press was delegated to this fragment
+ * A back press was delegated to this fragment.
*
* @return if the back press was handled
*/
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java
index f9852b7b0..861dc2c60 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java
@@ -1,9 +1,8 @@
package org.schabi.newpipe.fragments;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
-import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
import android.util.Log;
import android.view.View;
import android.widget.Button;
@@ -11,6 +10,9 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+
import com.jakewharton.rxbinding2.view.RxView;
import org.schabi.newpipe.BaseFragment;
@@ -36,22 +38,21 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
public abstract class BaseStateFragment extends BaseFragment implements ViewContract {
-
@State
protected AtomicBoolean wasLoading = new AtomicBoolean();
protected AtomicBoolean isLoading = new AtomicBoolean();
@Nullable
- protected View emptyStateView;
+ private View emptyStateView;
@Nullable
- protected ProgressBar loadingProgressBar;
+ private ProgressBar loadingProgressBar;
protected View errorPanelRoot;
- protected Button errorButtonRetry;
- protected TextView errorTextView;
+ private Button errorButtonRetry;
+ private TextView errorTextView;
@Override
- public void onViewCreated(View rootView, Bundle savedInstanceState) {
+ public void onViewCreated(final View rootView, final Bundle savedInstanceState) {
super.onViewCreated(rootView, savedInstanceState);
doInitialLoadLogic();
}
@@ -62,14 +63,12 @@ public abstract class BaseStateFragment extends BaseFragment implements ViewC
wasLoading.set(isLoading.get());
}
-
/*//////////////////////////////////////////////////////////////////////////
// Init
//////////////////////////////////////////////////////////////////////////*/
-
@Override
- protected void initViews(View rootView, Bundle savedInstanceState) {
+ protected void initViews(final View rootView, final Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
emptyStateView = rootView.findViewById(R.id.empty_state_view);
@@ -105,8 +104,10 @@ public abstract class BaseStateFragment extends BaseFragment implements ViewC
startLoading(true);
}
- protected void startLoading(boolean forceLoad) {
- if (DEBUG) Log.d(TAG, "startLoading() called with: forceLoad = [" + forceLoad + "]");
+ protected void startLoading(final boolean forceLoad) {
+ if (DEBUG) {
+ Log.d(TAG, "startLoading() called with: forceLoad = [" + forceLoad + "]");
+ }
showLoading();
isLoading.set(true);
}
@@ -117,42 +118,62 @@ public abstract class BaseStateFragment extends BaseFragment implements ViewC
@Override
public void showLoading() {
- if (emptyStateView != null) animateView(emptyStateView, false, 150);
- if (loadingProgressBar != null) animateView(loadingProgressBar, true, 400);
+ if (emptyStateView != null) {
+ animateView(emptyStateView, false, 150);
+ }
+ if (loadingProgressBar != null) {
+ animateView(loadingProgressBar, true, 400);
+ }
animateView(errorPanelRoot, false, 150);
}
@Override
public void hideLoading() {
- if (emptyStateView != null) animateView(emptyStateView, false, 150);
- if (loadingProgressBar != null) animateView(loadingProgressBar, false, 0);
+ if (emptyStateView != null) {
+ animateView(emptyStateView, false, 150);
+ }
+ if (loadingProgressBar != null) {
+ animateView(loadingProgressBar, false, 0);
+ }
animateView(errorPanelRoot, false, 150);
}
@Override
public void showEmptyState() {
isLoading.set(false);
- if (emptyStateView != null) animateView(emptyStateView, true, 200);
- if (loadingProgressBar != null) animateView(loadingProgressBar, false, 0);
+ if (emptyStateView != null) {
+ animateView(emptyStateView, true, 200);
+ }
+ if (loadingProgressBar != null) {
+ animateView(loadingProgressBar, false, 0);
+ }
animateView(errorPanelRoot, false, 150);
}
@Override
- public void showError(String message, boolean showRetryButton) {
- if (DEBUG) Log.d(TAG, "showError() called with: message = [" + message + "], showRetryButton = [" + showRetryButton + "]");
+ public void showError(final String message, final boolean showRetryButton) {
+ if (DEBUG) {
+ Log.d(TAG, "showError() called with: "
+ + "message = [" + message + "], showRetryButton = [" + showRetryButton + "]");
+ }
isLoading.set(false);
InfoCache.getInstance().clearCache();
hideLoading();
errorTextView.setText(message);
- if (showRetryButton) animateView(errorButtonRetry, true, 600);
- else animateView(errorButtonRetry, false, 0);
+ if (showRetryButton) {
+ animateView(errorButtonRetry, true, 600);
+ } else {
+ animateView(errorButtonRetry, false, 0);
+ }
animateView(errorPanelRoot, true, 300);
}
@Override
- public void handleResult(I result) {
- if (DEBUG) Log.d(TAG, "handleResult() called with: result = [" + result + "]");
+ public void handleResult(final I result) {
+ if (DEBUG) {
+ Log.d(TAG, "handleResult() called with: result = [" + result + "]");
+ }
hideLoading();
}
@@ -161,21 +182,28 @@ public abstract class BaseStateFragment extends BaseFragment implements ViewC
//////////////////////////////////////////////////////////////////////////*/
/**
- * Default implementation handles some general exceptions
+ * Default implementation handles some general exceptions.
*
- * @return if the exception was handled
+ * @param exception The exception that should be handled
+ * @return If the exception was handled
*/
- protected boolean onError(Throwable exception) {
- if (DEBUG) Log.d(TAG, "onError() called with: exception = [" + exception + "]");
+ protected boolean onError(final Throwable exception) {
+ if (DEBUG) {
+ Log.d(TAG, "onError() called with: exception = [" + exception + "]");
+ }
isLoading.set(false);
if (isDetached() || isRemoving()) {
- if (DEBUG) Log.w(TAG, "onError() is detached or removing = [" + exception + "]");
+ if (DEBUG) {
+ Log.w(TAG, "onError() is detached or removing = [" + exception + "]");
+ }
return true;
}
if (ExtractorHelper.isInterruptedCaused(exception)) {
- if (DEBUG) Log.w(TAG, "onError() isInterruptedCaused! = [" + exception + "]");
+ if (DEBUG) {
+ Log.w(TAG, "onError() isInterruptedCaused! = [" + exception + "]");
+ }
return true;
}
@@ -193,8 +221,10 @@ public abstract class BaseStateFragment extends BaseFragment implements ViewC
return false;
}
- public void onReCaptchaException(ReCaptchaException exception) {
- if (DEBUG) Log.d(TAG, "onReCaptchaException() called");
+ public void onReCaptchaException(final ReCaptchaException exception) {
+ if (DEBUG) {
+ Log.d(TAG, "onReCaptchaException() called");
+ }
Toast.makeText(activity, R.string.recaptcha_request_toast, Toast.LENGTH_LONG).show();
// Starting ReCaptcha Challenge Activity
Intent intent = new Intent(activity, ReCaptchaActivity.class);
@@ -204,33 +234,58 @@ public abstract class BaseStateFragment extends BaseFragment implements ViewC
showError(getString(R.string.recaptcha_request_toast), false);
}
- public void onUnrecoverableError(Throwable exception, UserAction userAction, String serviceName, String request, @StringRes int errorId) {
- onUnrecoverableError(Collections.singletonList(exception), userAction, serviceName, request, errorId);
+ public void onUnrecoverableError(final Throwable exception, final UserAction userAction,
+ final String serviceName, final String request,
+ @StringRes final int errorId) {
+ onUnrecoverableError(Collections.singletonList(exception), userAction, serviceName,
+ request, errorId);
}
- public void onUnrecoverableError(List exception, UserAction userAction, String serviceName, String request, @StringRes int errorId) {
- if (DEBUG) Log.d(TAG, "onUnrecoverableError() called with: exception = [" + exception + "]");
+ public void onUnrecoverableError(final List exception, final UserAction userAction,
+ final String serviceName, final String request,
+ @StringRes final int errorId) {
+ if (DEBUG) {
+ Log.d(TAG, "onUnrecoverableError() called with: exception = [" + exception + "]");
+ }
- if (serviceName == null) serviceName = "none";
- if (request == null) request = "none";
-
- ErrorActivity.reportError(getContext(), exception, MainActivity.class, null, ErrorActivity.ErrorInfo.make(userAction, serviceName, request, errorId));
+ ErrorActivity.reportError(getContext(), exception, MainActivity.class, null,
+ ErrorActivity.ErrorInfo.make(userAction, serviceName == null ? "none" : serviceName,
+ request == null ? "none" : request, errorId));
}
- public void showSnackBarError(Throwable exception, UserAction userAction, String serviceName, String request, @StringRes int errorId) {
- showSnackBarError(Collections.singletonList(exception), userAction, serviceName, request, errorId);
+ public void showSnackBarError(final Throwable exception, final UserAction userAction,
+ final String serviceName, final String request,
+ @StringRes final int errorId) {
+ showSnackBarError(Collections.singletonList(exception), userAction, serviceName, request,
+ errorId);
}
/**
- * Show a SnackBar and only call ErrorActivity#reportError IF we a find a valid view (otherwise the error screen appears)
+ * Show a SnackBar and only call
+ * {@link ErrorActivity#reportError(Context, List, Class, View, ErrorActivity.ErrorInfo)}
+ * IF we a find a valid view (otherwise the error screen appears).
+ *
+ * @param exception List of the exceptions to show
+ * @param userAction The user action that caused the exception
+ * @param serviceName The service where the exception happened
+ * @param request The page that was requested
+ * @param errorId The ID of the error
*/
- public void showSnackBarError(List exception, UserAction userAction, String serviceName, String request, @StringRes int errorId) {
+ public void showSnackBarError(final List exception, final UserAction userAction,
+ final String serviceName, final String request,
+ @StringRes final int errorId) {
if (DEBUG) {
- Log.d(TAG, "showSnackBarError() called with: exception = [" + exception + "], userAction = [" + userAction + "], request = [" + request + "], errorId = [" + errorId + "]");
+ Log.d(TAG, "showSnackBarError() called with: "
+ + "exception = [" + exception + "], userAction = [" + userAction + "], "
+ + "request = [" + request + "], errorId = [" + errorId + "]");
}
View rootView = activity != null ? activity.findViewById(android.R.id.content) : null;
- if (rootView == null && getView() != null) rootView = getView();
- if (rootView == null) return;
+ if (rootView == null && getView() != null) {
+ rootView = getView();
+ }
+ if (rootView == null) {
+ return;
+ }
ErrorActivity.reportError(getContext(), exception, MainActivity.class, rootView,
ErrorActivity.ErrorInfo.make(userAction, serviceName, request, errorId));
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java
index 1e284c711..0cccfa4fe 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/BlankFragment.java
@@ -1,24 +1,26 @@
package org.schabi.newpipe.fragments;
import android.os.Bundle;
-import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.Nullable;
+
import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.R;
public class BlankFragment extends BaseFragment {
@Nullable
@Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
+ public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container,
+ final Bundle savedInstanceState) {
setTitle("NewPipe");
return inflater.inflate(R.layout.fragment_blank, container, false);
}
@Override
- public void setUserVisibleHint(boolean isVisibleToUser) {
+ public void setUserVisibleHint(final boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
setTitle("NewPipe");
// leave this inline. Will make it harder for copy cats.
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java
index de9716f28..62f823c73 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java
@@ -1,17 +1,19 @@
package org.schabi.newpipe.fragments;
import android.os.Bundle;
-import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.Nullable;
+
import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.R;
public class EmptyFragment extends BaseFragment {
@Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
+ public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container,
+ final Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_empty, container, false);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index a157f34bf..52c1afb93 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -50,14 +50,15 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
//////////////////////////////////////////////////////////////////////////*/
@Override
- public void onCreate(Bundle savedInstanceState) {
+ public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
tabsManager = TabsManager.getManager(activity);
tabsManager.setSavedTabsListener(() -> {
if (DEBUG) {
- Log.d(TAG, "TabsManager.SavedTabsChangeListener: onTabsChanged called, isResumed = " + isResumed());
+ Log.d(TAG, "TabsManager.SavedTabsChangeListener: "
+ + "onTabsChanged called, isResumed = " + isResumed());
}
if (isResumed()) {
setupTabs();
@@ -68,12 +69,14 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
}
@Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ public View onCreateView(@NonNull final LayoutInflater inflater,
+ @Nullable final ViewGroup container,
+ @Nullable final Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main, container, false);
}
@Override
- protected void initViews(View rootView, Bundle savedInstanceState) {
+ protected void initViews(final View rootView, final Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
tabLayout = rootView.findViewById(R.id.main_tab_layout);
@@ -89,14 +92,18 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
public void onResume() {
super.onResume();
- if (hasTabsChanged) setupTabs();
+ if (hasTabsChanged) {
+ setupTabs();
+ }
}
@Override
public void onDestroy() {
super.onDestroy();
tabsManager.unsetSavedTabsListener();
- if (viewPager != null) viewPager.setAdapter(null);
+ if (viewPager != null) {
+ viewPager.setAdapter(null);
+ }
}
/*//////////////////////////////////////////////////////////////////////////
@@ -104,9 +111,12 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
//////////////////////////////////////////////////////////////////////////*/
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (DEBUG) Log.d(TAG, "onCreateOptionsMenu() called with: menu = [" + menu + "], inflater = [" + inflater + "]");
+ if (DEBUG) {
+ Log.d(TAG, "onCreateOptionsMenu() called with: "
+ + "menu = [" + menu + "], inflater = [" + inflater + "]");
+ }
inflater.inflate(R.menu.main_fragment_menu, menu);
ActionBar supportActionBar = activity.getSupportActionBar();
@@ -116,7 +126,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
try {
@@ -141,7 +151,8 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
tabsList.addAll(tabsManager.getTabs());
if (pagerAdapter == null || !pagerAdapter.sameTabs(tabsList)) {
- pagerAdapter = new SelectedTabsPagerAdapter(requireContext(), getChildFragmentManager(), tabsList);
+ pagerAdapter = new SelectedTabsPagerAdapter(requireContext(),
+ getChildFragmentManager(), tabsList);
}
viewPager.setAdapter(null);
@@ -165,31 +176,37 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
}
}
- private void updateTitleForTab(int tabPosition) {
+ private void updateTitleForTab(final int tabPosition) {
setTitle(tabsList.get(tabPosition).getTabName(requireContext()));
}
@Override
- public void onTabSelected(TabLayout.Tab selectedTab) {
- if (DEBUG) Log.d(TAG, "onTabSelected() called with: selectedTab = [" + selectedTab + "]");
+ public void onTabSelected(final TabLayout.Tab selectedTab) {
+ if (DEBUG) {
+ Log.d(TAG, "onTabSelected() called with: selectedTab = [" + selectedTab + "]");
+ }
updateTitleForTab(selectedTab.getPosition());
}
@Override
- public void onTabUnselected(TabLayout.Tab tab) {
- }
+ public void onTabUnselected(final TabLayout.Tab tab) { }
@Override
- public void onTabReselected(TabLayout.Tab tab) {
- if (DEBUG) Log.d(TAG, "onTabReselected() called with: tab = [" + tab + "]");
+ public void onTabReselected(final TabLayout.Tab tab) {
+ if (DEBUG) {
+ Log.d(TAG, "onTabReselected() called with: tab = [" + tab + "]");
+ }
updateTitleForTab(tab.getPosition());
}
- private static class SelectedTabsPagerAdapter extends FragmentStatePagerAdapterMenuWorkaround {
+ private static final class SelectedTabsPagerAdapter
+ extends FragmentStatePagerAdapterMenuWorkaround {
private final Context context;
private final List internalTabsList;
- private SelectedTabsPagerAdapter(Context context, FragmentManager fragmentManager, List tabsList) {
+ private SelectedTabsPagerAdapter(final Context context,
+ final FragmentManager fragmentManager,
+ final List tabsList) {
super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
this.context = context;
this.internalTabsList = new ArrayList<>(tabsList);
@@ -197,7 +214,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
@NonNull
@Override
- public Fragment getItem(int position) {
+ public Fragment getItem(final int position) {
final Tab tab = internalTabsList.get(position);
Throwable throwable = null;
@@ -209,8 +226,8 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
}
if (throwable != null) {
- ErrorActivity.reportError(context, throwable, null, null,
- ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash));
+ ErrorActivity.reportError(context, throwable, null, null, ErrorActivity.ErrorInfo
+ .make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash));
return new BlankFragment();
}
@@ -222,7 +239,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
}
@Override
- public int getItemPosition(Object object) {
+ public int getItemPosition(final Object object) {
// Causes adapter to reload all Fragments when
// notifyDataSetChanged is called
return POSITION_NONE;
@@ -233,7 +250,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
return internalTabsList.size();
}
- public boolean sameTabs(List tabsToCompare) {
+ public boolean sameTabs(final List tabsToCompare) {
return internalTabsList.equals(tabsToCompare);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/OnScrollBelowItemsListener.java b/app/src/main/java/org/schabi/newpipe/fragments/OnScrollBelowItemsListener.java
index 887097679..28ce91f55 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/OnScrollBelowItemsListener.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/OnScrollBelowItemsListener.java
@@ -9,12 +9,13 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager;
* if the view is scrolled below the last item.
*/
public abstract class OnScrollBelowItemsListener extends RecyclerView.OnScrollListener {
-
@Override
- public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 0) {
- int pastVisibleItems = 0, visibleItemCount, totalItemCount;
+ int pastVisibleItems = 0;
+ int visibleItemCount;
+ int totalItemCount;
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
visibleItemCount = layoutManager.getChildCount();
@@ -22,10 +23,14 @@ public abstract class OnScrollBelowItemsListener extends RecyclerView.OnScrollLi
// Already covers the GridLayoutManager case
if (layoutManager instanceof LinearLayoutManager) {
- pastVisibleItems = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
+ pastVisibleItems = ((LinearLayoutManager) layoutManager)
+ .findFirstVisibleItemPosition();
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
- int[] positions = ((StaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions(null);
- if (positions != null && positions.length > 0) pastVisibleItems = positions[0];
+ int[] positions = ((StaggeredGridLayoutManager) layoutManager)
+ .findFirstVisibleItemPositions(null);
+ if (positions != null && positions.length > 0) {
+ pastVisibleItems = positions[0];
+ }
}
if ((visibleItemCount + pastVisibleItems) >= totalItemCount) {
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/ViewContract.java b/app/src/main/java/org/schabi/newpipe/fragments/ViewContract.java
index 4ce09b000..bb980ac64 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/ViewContract.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/ViewContract.java
@@ -2,8 +2,11 @@ package org.schabi.newpipe.fragments;
public interface ViewContract {
void showLoading();
+
void hideLoading();
+
void showEmptyState();
+
void showError(String message, boolean showRetryButton);
void handleResult(I result);
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/StackItem.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/StackItem.java
index f7f8ad702..f966880b1 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/StackItem.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/StackItem.java
@@ -4,19 +4,15 @@ import java.io.Serializable;
class StackItem implements Serializable {
private final int serviceId;
- private String title;
private final String url;
+ private String title;
- StackItem(int serviceId, String url, String title) {
+ StackItem(final int serviceId, final String url, final String title) {
this.serviceId = serviceId;
this.url = url;
this.title = title;
}
- public void setTitle(String title) {
- this.title = title;
- }
-
public int getServiceId() {
return serviceId;
}
@@ -25,6 +21,10 @@ class StackItem implements Serializable {
return title;
}
+ public void setTitle(final String title) {
+ this.title = title;
+ }
+
public String getUrl() {
return url;
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/TabAdaptor.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/TabAdaptor.java
index d86226e92..38f013200 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/TabAdaptor.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/TabAdaptor.java
@@ -1,27 +1,27 @@
package org.schabi.newpipe.fragments.detail;
+import android.view.ViewGroup;
+
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
-import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
public class TabAdaptor extends FragmentPagerAdapter {
-
private final List mFragmentList = new ArrayList<>();
private final List mFragmentTitleList = new ArrayList<>();
private final FragmentManager fragmentManager;
- public TabAdaptor(FragmentManager fm) {
+ public TabAdaptor(final FragmentManager fm) {
super(fm);
this.fragmentManager = fm;
}
@Override
- public Fragment getItem(int position) {
+ public Fragment getItem(final int position) {
return mFragmentList.get(position);
}
@@ -30,7 +30,7 @@ public class TabAdaptor extends FragmentPagerAdapter {
return mFragmentList.size();
}
- public void addFragment(Fragment fragment, String title) {
+ public void addFragment(final Fragment fragment, final String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@@ -40,46 +40,49 @@ public class TabAdaptor extends FragmentPagerAdapter {
mFragmentTitleList.clear();
}
- public void removeItem(int position){
+ public void removeItem(final int position) {
mFragmentList.remove(position == 0 ? 0 : position - 1);
mFragmentTitleList.remove(position == 0 ? 0 : position - 1);
}
- public void updateItem(int position, Fragment fragment){
+ public void updateItem(final int position, final Fragment fragment) {
mFragmentList.set(position, fragment);
}
- public void updateItem(String title, Fragment fragment){
+ public void updateItem(final String title, final Fragment fragment) {
int index = mFragmentTitleList.indexOf(title);
- if(index != -1){
+ if (index != -1) {
updateItem(index, fragment);
}
}
@Override
- public int getItemPosition(Object object) {
- if (mFragmentList.contains(object)) return mFragmentList.indexOf(object);
- else return POSITION_NONE;
+ public int getItemPosition(final Object object) {
+ if (mFragmentList.contains(object)) {
+ return mFragmentList.indexOf(object);
+ } else {
+ return POSITION_NONE;
+ }
}
- public int getItemPositionByTitle(String title) {
+ public int getItemPositionByTitle(final String title) {
return mFragmentTitleList.indexOf(title);
}
@Nullable
- public String getItemTitle(int position) {
+ public String getItemTitle(final int position) {
if (position < 0 || position >= mFragmentTitleList.size()) {
return null;
}
return mFragmentTitleList.get(position);
}
- public void notifyDataSetUpdate(){
+ public void notifyDataSetUpdate() {
notifyDataSetChanged();
}
@Override
- public void destroyItem(ViewGroup container, int position, Object object) {
+ public void destroyItem(final ViewGroup container, final int position, final Object object) {
fragmentManager.beginTransaction().remove((Fragment) object).commitNowAllowingStateLoss();
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index ebec8db0a..43e22d597 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -8,16 +8,6 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
-import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import com.google.android.material.appbar.AppBarLayout;
-import com.google.android.material.tabs.TabLayout;
-import androidx.fragment.app.Fragment;
-import androidx.core.content.ContextCompat;
-import androidx.viewpager.widget.ViewPager;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
import android.text.Html;
import android.text.Spanned;
import android.text.TextUtils;
@@ -41,6 +31,17 @@ import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.ContextCompat;
+import androidx.fragment.app.Fragment;
+import androidx.viewpager.widget.ViewPager;
+
+import com.google.android.material.appbar.AppBarLayout;
+import com.google.android.material.tabs.TabLayout;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
@@ -52,7 +53,6 @@ import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.ServiceList;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
-import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor;
import org.schabi.newpipe.extractor.stream.AudioStream;
import org.schabi.newpipe.extractor.stream.Description;
@@ -105,62 +105,58 @@ import io.reactivex.schedulers.Schedulers;
import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.COMMENTS;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
-public class VideoDetailFragment
- extends BaseStateFragment
- implements BackPressable,
- SharedPreferences.OnSharedPreferenceChangeListener,
- View.OnClickListener,
- View.OnLongClickListener {
+public class VideoDetailFragment extends BaseStateFragment
+ implements BackPressable, SharedPreferences.OnSharedPreferenceChangeListener,
+ View.OnClickListener, View.OnLongClickListener {
public static final String AUTO_PLAY = "auto_play";
-
- private int updateFlags = 0;
private static final int RELATED_STREAMS_UPDATE_FLAG = 0x1;
private static final int RESOLUTIONS_MENU_UPDATE_FLAG = 0x2;
private static final int TOOLBAR_ITEMS_UPDATE_FLAG = 0x4;
private static final int COMMENTS_UPDATE_FLAG = 0x8;
-
- private boolean autoPlayEnabled;
- private boolean showRelatedStreams;
- private boolean showComments;
- private String selectedTabTag;
-
+ private static final String COMMENTS_TAB_TAG = "COMMENTS";
+ private static final String RELATED_TAB_TAG = "NEXT VIDEO";
+ private static final String EMPTY_TAB_TAG = "EMPTY TAB";
+ private static final String INFO_KEY = "info_key";
+ private static final String STACK_KEY = "stack_key";
+ /**
+ * Stack that contains the "navigation history".
+ * The peek is the current video.
+ */
+ private final LinkedList stack = new LinkedList<>();
@State
protected int serviceId = Constants.NO_SERVICE_ID;
@State
protected String name;
@State
protected String url;
+ private int updateFlags = 0;
+ private boolean autoPlayEnabled;
+ private boolean showRelatedStreams;
+ private boolean showComments;
+ private String selectedTabTag;
+ /*//////////////////////////////////////////////////////////////////////////
+ // Views
+ //////////////////////////////////////////////////////////////////////////*/
private StreamInfo currentInfo;
private Disposable currentWorker;
@NonNull
private CompositeDisposable disposables = new CompositeDisposable();
@Nullable
private Disposable positionSubscriber = null;
-
private List sortedVideoStreams;
private int selectedVideoStreamIndex = -1;
-
- /*//////////////////////////////////////////////////////////////////////////
- // Views
- //////////////////////////////////////////////////////////////////////////*/
-
private Menu menu;
-
private Spinner spinnerToolbar;
-
private LinearLayout contentRootLayoutHiding;
-
private View thumbnailBackgroundButton;
private ImageView thumbnailImageView;
private ImageView thumbnailPlayButton;
private AnimatedProgressBar positionView;
-
private View videoTitleRoot;
private TextView videoTitleTextView;
private ImageView videoTitleToggleArrow;
private TextView videoCountView;
-
private TextView detailControlsBackground;
private TextView detailControlsPopup;
private TextView detailControlsAddToPlaylist;
@@ -168,47 +164,39 @@ public class VideoDetailFragment
private TextView appendControlsDetail;
private TextView detailDurationView;
private TextView detailPositionView;
-
private LinearLayout videoDescriptionRootLayout;
private TextView videoUploadDateView;
private TextView videoDescriptionView;
-
private View uploaderRootLayout;
private TextView uploaderTextView;
private ImageView uploaderThumb;
-
private TextView thumbsUpTextView;
private ImageView thumbsUpImageView;
private TextView thumbsDownTextView;
private ImageView thumbsDownImageView;
private TextView thumbsDisabledTextView;
-
- private static final String COMMENTS_TAB_TAG = "COMMENTS";
- private static final String RELATED_TAB_TAG = "NEXT VIDEO";
- private static final String EMPTY_TAB_TAG = "EMPTY TAB";
-
private AppBarLayout appBarLayout;
- private ViewPager viewPager;
- private TabAdaptor pageAdapter;
- private TabLayout tabLayout;
- private FrameLayout relatedStreamsLayout;
+ private ViewPager viewPager;
/*////////////////////////////////////////////////////////////////////////*/
+ private TabAdaptor pageAdapter;
- public static VideoDetailFragment getInstance(int serviceId, String videoUrl, String name) {
+ /*//////////////////////////////////////////////////////////////////////////
+ // Fragment's Lifecycle
+ //////////////////////////////////////////////////////////////////////////*/
+ private TabLayout tabLayout;
+ private FrameLayout relatedStreamsLayout;
+
+ public static VideoDetailFragment getInstance(final int serviceId, final String videoUrl,
+ final String name) {
VideoDetailFragment instance = new VideoDetailFragment();
instance.setInitialData(serviceId, videoUrl, name);
return instance;
}
- /*//////////////////////////////////////////////////////////////////////////
- // Fragment's Lifecycle
- //////////////////////////////////////////////////////////////////////////*/
-
@Override
- public void
- onCreate(Bundle savedInstanceState) {
+ public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
@@ -226,17 +214,21 @@ public class VideoDetailFragment
}
@Override
- public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container,
+ final Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_video_detail, container, false);
}
@Override
public void onPause() {
super.onPause();
- if (currentWorker != null) currentWorker.dispose();
+ if (currentWorker != null) {
+ currentWorker.dispose();
+ }
PreferenceManager.getDefaultSharedPreferences(getContext())
.edit()
- .putString(getString(R.string.stream_info_selected_tab_key), pageAdapter.getItemTitle(viewPager.getCurrentItem()))
+ .putString(getString(R.string.stream_info_selected_tab_key),
+ pageAdapter.getItemTitle(viewPager.getCurrentItem()))
.apply();
}
@@ -246,9 +238,15 @@ public class VideoDetailFragment
if (updateFlags != 0) {
if (!isLoading.get() && currentInfo != null) {
- if ((updateFlags & RELATED_STREAMS_UPDATE_FLAG) != 0) startLoading(false);
- if ((updateFlags & RESOLUTIONS_MENU_UPDATE_FLAG) != 0) setupActionBar(currentInfo);
- if ((updateFlags & COMMENTS_UPDATE_FLAG) != 0) startLoading(false);
+ if ((updateFlags & RELATED_STREAMS_UPDATE_FLAG) != 0) {
+ startLoading(false);
+ }
+ if ((updateFlags & RESOLUTIONS_MENU_UPDATE_FLAG) != 0) {
+ setupActionBar(currentInfo);
+ }
+ if ((updateFlags & COMMENTS_UPDATE_FLAG) != 0) {
+ startLoading(false);
+ }
}
if ((updateFlags & TOOLBAR_ITEMS_UPDATE_FLAG) != 0
@@ -273,30 +271,45 @@ public class VideoDetailFragment
PreferenceManager.getDefaultSharedPreferences(activity)
.unregisterOnSharedPreferenceChangeListener(this);
- if (positionSubscriber != null) positionSubscriber.dispose();
- if (currentWorker != null) currentWorker.dispose();
- if (disposables != null) disposables.clear();
+ if (positionSubscriber != null) {
+ positionSubscriber.dispose();
+ }
+ if (currentWorker != null) {
+ currentWorker.dispose();
+ }
+ if (disposables != null) {
+ disposables.clear();
+ }
positionSubscriber = null;
currentWorker = null;
disposables = null;
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // State Saving
+ //////////////////////////////////////////////////////////////////////////*/
+
@Override
public void onDestroyView() {
- if (DEBUG) Log.d(TAG, "onDestroyView() called");
+ if (DEBUG) {
+ Log.d(TAG, "onDestroyView() called");
+ }
spinnerToolbar.setOnItemSelectedListener(null);
spinnerToolbar.setAdapter(null);
super.onDestroyView();
}
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case ReCaptchaActivity.RECAPTCHA_REQUEST:
if (resultCode == Activity.RESULT_OK) {
- NavigationHelper.openVideoDetailFragment(getFragmentManager(), serviceId, url, name);
- } else Log.e(TAG, "ReCaptcha failed");
+ NavigationHelper
+ .openVideoDetailFragment(getFragmentManager(), serviceId, url, name);
+ } else {
+ Log.e(TAG, "ReCaptcha failed");
+ }
break;
default:
Log.e(TAG, "Request code from activity not supported [" + requestCode + "]");
@@ -305,7 +318,8 @@ public class VideoDetailFragment
}
@Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences,
+ final String key) {
if (key.equals(getString(R.string.show_next_video_key))) {
showRelatedStreams = sharedPreferences.getBoolean(key, true);
updateFlags |= RELATED_STREAMS_UPDATE_FLAG;
@@ -322,15 +336,8 @@ public class VideoDetailFragment
}
}
- /*//////////////////////////////////////////////////////////////////////////
- // State Saving
- //////////////////////////////////////////////////////////////////////////*/
-
- private static final String INFO_KEY = "info_key";
- private static final String STACK_KEY = "stack_key";
-
@Override
- public void onSaveInstanceState(Bundle outState) {
+ public void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
// Check if the next video label and video is visible,
@@ -344,8 +351,12 @@ public class VideoDetailFragment
outState.putSerializable(STACK_KEY, stack);
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // OnClick
+ //////////////////////////////////////////////////////////////////////////*/
+
@Override
- protected void onRestoreInstanceState(@NonNull Bundle savedState) {
+ protected void onRestoreInstanceState(@NonNull final Bundle savedState) {
super.onRestoreInstanceState(savedState);
Serializable serializable = savedState.getSerializable(INFO_KEY);
@@ -363,13 +374,11 @@ public class VideoDetailFragment
}
- /*//////////////////////////////////////////////////////////////////////////
- // OnClick
- //////////////////////////////////////////////////////////////////////////*/
-
@Override
- public void onClick(View v) {
- if (isLoading.get() || currentInfo == null) return;
+ public void onClick(final View v) {
+ if (isLoading.get() || currentInfo == null) {
+ return;
+ }
switch (v.getId()) {
case R.id.detail_controls_background:
@@ -395,14 +404,14 @@ public class VideoDetailFragment
Log.w(TAG, "Can't open channel because we got no channel URL");
} else {
try {
- NavigationHelper.openChannelFragment(
- getFragmentManager(),
- currentInfo.getServiceId(),
- currentInfo.getUploaderUrl(),
- currentInfo.getUploaderName());
+ NavigationHelper.openChannelFragment(
+ getFragmentManager(),
+ currentInfo.getServiceId(),
+ currentInfo.getUploaderUrl(),
+ currentInfo.getUploaderName());
} catch (Exception e) {
ErrorActivity.reportUiError((AppCompatActivity) getActivity(), e);
- }
+ }
}
break;
case R.id.detail_thumbnail_root_layout:
@@ -420,8 +429,10 @@ public class VideoDetailFragment
}
@Override
- public boolean onLongClick(View v) {
- if (isLoading.get() || currentInfo == null) return false;
+ public boolean onLongClick(final View v) {
+ if (isLoading.get() || currentInfo == null) {
+ return false;
+ }
switch (v.getId()) {
case R.id.detail_controls_background:
@@ -438,6 +449,10 @@ public class VideoDetailFragment
return true;
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Init
+ //////////////////////////////////////////////////////////////////////////*/
+
private void toggleTitleAndDescription() {
if (videoDescriptionRootLayout.getVisibility() == View.VISIBLE) {
videoTitleTextView.setMaxLines(1);
@@ -450,12 +465,8 @@ public class VideoDetailFragment
}
}
- /*//////////////////////////////////////////////////////////////////////////
- // Init
- //////////////////////////////////////////////////////////////////////////*/
-
@Override
- protected void initViews(View rootView, Bundle savedInstanceState) {
+ protected void initViews(final View rootView, final Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
spinnerToolbar = activity.findViewById(R.id.toolbar).findViewById(R.id.toolbar_spinner);
@@ -504,8 +515,6 @@ public class VideoDetailFragment
relatedStreamsLayout = rootView.findViewById(R.id.relatedStreamsLayout);
setHeightThumbnail();
-
-
}
@Override
@@ -544,41 +553,42 @@ public class VideoDetailFragment
};
}
- private void initThumbnailViews(@NonNull StreamInfo info) {
- thumbnailImageView.setImageResource(R.drawable.dummy_thumbnail_dark);
- if (!TextUtils.isEmpty(info.getThumbnailUrl())) {
- final String infoServiceName = NewPipe.getNameOfService(info.getServiceId());
- final ImageLoadingListener onFailListener = new SimpleImageLoadingListener() {
- @Override
- public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
- showSnackBarError(failReason.getCause(), UserAction.LOAD_IMAGE,
- infoServiceName, imageUri, R.string.could_not_load_thumbnails);
- }
- };
-
- imageLoader.displayImage(info.getThumbnailUrl(), thumbnailImageView,
- ImageDisplayConstants.DISPLAY_THUMBNAIL_OPTIONS, onFailListener);
- }
-
- if (!TextUtils.isEmpty(info.getUploaderAvatarUrl())) {
- imageLoader.displayImage(info.getUploaderAvatarUrl(), uploaderThumb,
- ImageDisplayConstants.DISPLAY_AVATAR_OPTIONS);
- }
- }
-
/*//////////////////////////////////////////////////////////////////////////
// Menu
//////////////////////////////////////////////////////////////////////////*/
+ private void initThumbnailViews(@NonNull final StreamInfo info) {
+ thumbnailImageView.setImageResource(R.drawable.dummy_thumbnail_dark);
+ if (!TextUtils.isEmpty(info.getThumbnailUrl())) {
+ final String infoServiceName = NewPipe.getNameOfService(info.getServiceId());
+ final ImageLoadingListener onFailListener = new SimpleImageLoadingListener() {
+ @Override
+ public void onLoadingFailed(final String imageUri, final View view,
+ final FailReason failReason) {
+ showSnackBarError(failReason.getCause(), UserAction.LOAD_IMAGE,
+ infoServiceName, imageUri, R.string.could_not_load_thumbnails);
+ }
+ };
+
+ IMAGE_LOADER.displayImage(info.getThumbnailUrl(), thumbnailImageView,
+ ImageDisplayConstants.DISPLAY_THUMBNAIL_OPTIONS, onFailListener);
+ }
+
+ if (!TextUtils.isEmpty(info.getUploaderAvatarUrl())) {
+ IMAGE_LOADER.displayImage(info.getUploaderAvatarUrl(), uploaderThumb,
+ ImageDisplayConstants.DISPLAY_AVATAR_OPTIONS);
+ }
+ }
+
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- this.menu = menu;
+ public void onCreateOptionsMenu(final Menu m, final MenuInflater inflater) {
+ this.menu = m;
// CAUTION set item properties programmatically otherwise it would not be accepted by
// appcompat itemsinflater.inflate(R.menu.videoitem_detail, menu);
- inflater.inflate(R.menu.video_detail_menu, menu);
+ inflater.inflate(R.menu.video_detail_menu, m);
updateMenuItemVisibility();
@@ -590,7 +600,6 @@ public class VideoDetailFragment
}
private void updateMenuItemVisibility() {
-
// show kodi if set in settings
menu.findItem(R.id.action_play_with_kodi).setVisible(
PreferenceManager.getDefaultSharedPreferences(activity).getBoolean(
@@ -598,7 +607,7 @@ public class VideoDetailFragment
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onOptionsItemSelected(final MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
NavigationHelper.openSettings(requireContext());
@@ -611,24 +620,25 @@ public class VideoDetailFragment
}
switch (id) {
- case R.id.menu_item_share: {
+ case R.id.menu_item_share:
if (currentInfo != null) {
- ShareUtils.shareUrl(requireContext(), currentInfo.getName(), currentInfo.getOriginalUrl());
+ ShareUtils.shareUrl(requireContext(), currentInfo.getName(),
+ currentInfo.getOriginalUrl());
}
return true;
- }
- case R.id.menu_item_openInBrowser: {
+ case R.id.menu_item_openInBrowser:
if (currentInfo != null) {
ShareUtils.openUrlInBrowser(requireContext(), currentInfo.getOriginalUrl());
}
return true;
- }
case R.id.action_play_with_kodi:
try {
NavigationHelper.playWithKore(activity, Uri.parse(
url.replace("https", "http")));
} catch (Exception e) {
- if (DEBUG) Log.i(TAG, "Failed to start kore", e);
+ if (DEBUG) {
+ Log.i(TAG, "Failed to start kore", e);
+ }
KoreUtil.showInstallKoreDialog(activity);
}
return true;
@@ -637,75 +647,71 @@ public class VideoDetailFragment
}
}
- private void setupActionBarOnError(final String url) {
- if (DEBUG) Log.d(TAG, "setupActionBarHandlerOnError() called with: url = [" + url + "]");
+ private void setupActionBarOnError(final String u) {
+ if (DEBUG) {
+ Log.d(TAG, "setupActionBarHandlerOnError() called with: url = [" + u + "]");
+ }
Log.e("-----", "missing code");
}
- private void setupActionBar(final StreamInfo info) {
- if (DEBUG) Log.d(TAG, "setupActionBarHandler() called with: info = [" + info + "]");
- boolean isExternalPlayerEnabled = PreferenceManager.getDefaultSharedPreferences(activity)
- .getBoolean(activity.getString(R.string.use_external_video_player_key), false);
-
- sortedVideoStreams = ListHelper.getSortedStreamVideosList(
- activity,
- info.getVideoStreams(),
- info.getVideoOnlyStreams(),
- false);
- selectedVideoStreamIndex = ListHelper.getDefaultResolutionIndex(activity, sortedVideoStreams);
-
- final StreamItemAdapter streamsAdapter =
- new StreamItemAdapter<>(activity,
- new StreamSizeWrapper<>(sortedVideoStreams, activity), isExternalPlayerEnabled);
- spinnerToolbar.setAdapter(streamsAdapter);
- spinnerToolbar.setSelection(selectedVideoStreamIndex);
- spinnerToolbar.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView> parent, View view, int position, long id) {
- selectedVideoStreamIndex = position;
- }
-
- @Override
- public void onNothingSelected(AdapterView> parent) {
- }
- });
- }
-
/*//////////////////////////////////////////////////////////////////////////
// OwnStack
//////////////////////////////////////////////////////////////////////////*/
- /**
- * Stack that contains the "navigation history".
- * The peek is the current video.
- */
- protected final LinkedList stack = new LinkedList<>();
+ private void setupActionBar(final StreamInfo info) {
+ if (DEBUG) {
+ Log.d(TAG, "setupActionBarHandler() called with: info = [" + info + "]");
+ }
+ boolean isExternalPlayerEnabled = PreferenceManager.getDefaultSharedPreferences(activity)
+ .getBoolean(activity.getString(R.string.use_external_video_player_key), false);
- public void pushToStack(int serviceId, String videoUrl, String name) {
+ sortedVideoStreams = ListHelper.getSortedStreamVideosList(activity, info.getVideoStreams(),
+ info.getVideoOnlyStreams(), false);
+ selectedVideoStreamIndex = ListHelper
+ .getDefaultResolutionIndex(activity, sortedVideoStreams);
+
+ final StreamItemAdapter streamsAdapter = new StreamItemAdapter<>(
+ activity, new StreamSizeWrapper<>(sortedVideoStreams, activity),
+ isExternalPlayerEnabled);
+ spinnerToolbar.setAdapter(streamsAdapter);
+ spinnerToolbar.setSelection(selectedVideoStreamIndex);
+ spinnerToolbar.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(final AdapterView> parent, final View view,
+ final int position, final long id) {
+ selectedVideoStreamIndex = position;
+ }
+
+ @Override
+ public void onNothingSelected(final AdapterView> parent) { }
+ });
+ }
+
+ public void pushToStack(final int sid, final String videoUrl, final String title) {
if (DEBUG) {
Log.d(TAG, "pushToStack() called with: serviceId = ["
- + serviceId + "], videoUrl = [" + videoUrl + "], name = [" + name + "]");
+ + sid + "], videoUrl = [" + videoUrl + "], title = [" + title + "]");
}
if (stack.size() > 0
- && stack.peek().getServiceId() == serviceId
+ && stack.peek().getServiceId() == sid
&& stack.peek().getUrl().equals(videoUrl)) {
Log.d(TAG, "pushToStack() called with: serviceId == peek.serviceId = ["
- + serviceId + "], videoUrl == peek.getUrl = [" + videoUrl + "]");
+ + sid + "], videoUrl == peek.getUrl = [" + videoUrl + "]");
return;
} else {
Log.d(TAG, "pushToStack() wasn't equal");
}
- stack.push(new StackItem(serviceId, videoUrl, name));
+ stack.push(new StackItem(sid, videoUrl, title));
}
- public void setTitleToUrl(int serviceId, String videoUrl, String name) {
- if (name != null && !name.isEmpty()) {
+ public void setTitleToUrl(final int sid, final String videoUrl, final String title) {
+ if (title != null && !title.isEmpty()) {
for (StackItem stackItem : stack) {
- if (stack.peek().getServiceId() == serviceId
+ if (stack.peek().getServiceId() == sid
&& stackItem.getUrl().equals(videoUrl)) {
- stackItem.setTitle(name);
+ stackItem.setTitle(title);
}
}
}
@@ -713,20 +719,21 @@ public class VideoDetailFragment
@Override
public boolean onBackPressed() {
- if (DEBUG) Log.d(TAG, "onBackPressed() called");
+ if (DEBUG) {
+ Log.d(TAG, "onBackPressed() called");
+ }
// That means that we are on the start of the stack,
// return false to let the MainActivity handle the onBack
- if (stack.size() <= 1) return false;
+ if (stack.size() <= 1) {
+ return false;
+ }
// Remove top
stack.pop();
// Get stack item from the new top
StackItem peek = stack.peek();
- selectAndLoadVideo(peek.getServiceId(),
- peek.getUrl(),
- !TextUtils.isEmpty(peek.getTitle())
- ? peek.getTitle()
- : "");
+ selectAndLoadVideo(peek.getServiceId(), peek.getUrl(),
+ !TextUtils.isEmpty(peek.getTitle()) ? peek.getTitle() : "");
return true;
}
@@ -736,25 +743,32 @@ public class VideoDetailFragment
@Override
protected void doInitialLoadLogic() {
- if (currentInfo == null) prepareAndLoadInfo();
- else prepareAndHandleInfo(currentInfo, false);
+ if (currentInfo == null) {
+ prepareAndLoadInfo();
+ } else {
+ prepareAndHandleInfo(currentInfo, false);
+ }
}
- public void selectAndLoadVideo(int serviceId, String videoUrl, String name) {
- setInitialData(serviceId, videoUrl, name);
+ public void selectAndLoadVideo(final int sid, final String videoUrl, final String title) {
+ setInitialData(sid, videoUrl, title);
prepareAndLoadInfo();
}
- public void prepareAndHandleInfo(final StreamInfo info, boolean scrollToTop) {
- if (DEBUG) Log.d(TAG, "prepareAndHandleInfo() called with: info = ["
- + info + "], scrollToTop = [" + scrollToTop + "]");
+ public void prepareAndHandleInfo(final StreamInfo info, final boolean scrollToTop) {
+ if (DEBUG) {
+ Log.d(TAG, "prepareAndHandleInfo() called with: "
+ + "info = [" + info + "], scrollToTop = [" + scrollToTop + "]");
+ }
setInitialData(info.getServiceId(), info.getUrl(), info.getName());
pushToStack(serviceId, url, name);
showLoading();
initTabs();
- if (scrollToTop) appBarLayout.setExpanded(true, true);
+ if (scrollToTop) {
+ appBarLayout.setExpanded(true, true);
+ }
handleResult(info);
showContent();
@@ -767,12 +781,14 @@ public class VideoDetailFragment
}
@Override
- public void startLoading(boolean forceLoad) {
+ public void startLoading(final boolean forceLoad) {
super.startLoading(forceLoad);
initTabs();
currentInfo = null;
- if (currentWorker != null) currentWorker.dispose();
+ if (currentWorker != null) {
+ currentWorker.dispose();
+ }
currentWorker = ExtractorHelper.getStreamInfo(serviceId, url, forceLoad)
.subscribeOn(Schedulers.io())
@@ -795,26 +811,29 @@ public class VideoDetailFragment
}
pageAdapter.clearAllItems();
- if(shouldShowComments()){
- pageAdapter.addFragment(CommentsFragment.getInstance(serviceId, url, name), COMMENTS_TAB_TAG);
+ if (shouldShowComments()) {
+ pageAdapter.addFragment(CommentsFragment.getInstance(serviceId, url, name),
+ COMMENTS_TAB_TAG);
}
- if(showRelatedStreams && null == relatedStreamsLayout){
+ if (showRelatedStreams && null == relatedStreamsLayout) {
//temp empty fragment. will be updated in handleResult
pageAdapter.addFragment(new Fragment(), RELATED_TAB_TAG);
}
- if(pageAdapter.getCount() == 0){
+ if (pageAdapter.getCount() == 0) {
pageAdapter.addFragment(new EmptyFragment(), EMPTY_TAB_TAG);
}
pageAdapter.notifyDataSetUpdate();
- if(pageAdapter.getCount() < 2){
+ if (pageAdapter.getCount() < 2) {
tabLayout.setVisibility(View.GONE);
- }else{
+ } else {
int position = pageAdapter.getItemPositionByTitle(selectedTabTag);
- if(position != -1) viewPager.setCurrentItem(position);
+ if (position != -1) {
+ viewPager.setCurrentItem(position);
+ }
tabLayout.setVisibility(View.VISIBLE);
}
}
@@ -859,9 +878,8 @@ public class VideoDetailFragment
NavigationHelper.enqueueOnPopupPlayer(activity, itemQueue, false);
} else {
Toast.makeText(activity, R.string.popup_playing_toast, Toast.LENGTH_SHORT).show();
- final Intent intent = NavigationHelper.getPlayerIntent(
- activity, PopupVideoPlayer.class, itemQueue, getSelectedVideoStream().resolution, true
- );
+ final Intent intent = NavigationHelper.getPlayerIntent(activity,
+ PopupVideoPlayer.class, itemQueue, getSelectedVideoStream().resolution, true);
activity.startService(intent);
}
}
@@ -900,7 +918,7 @@ public class VideoDetailFragment
// Utils
//////////////////////////////////////////////////////////////////////////*/
- public void setAutoplay(boolean autoplay) {
+ public void setAutoplay(final boolean autoplay) {
this.autoPlayEnabled = autoplay;
}
@@ -913,7 +931,7 @@ public class VideoDetailFragment
final HistoryRecordManager recordManager = new HistoryRecordManager(requireContext());
disposables.add(recordManager.onViewed(info).onErrorComplete()
.subscribe(
- ignored -> {/* successful */},
+ ignored -> { /* successful */ },
error -> Log.e(TAG, "Register view failure: ", error)
));
}
@@ -923,8 +941,9 @@ public class VideoDetailFragment
return sortedVideoStreams != null ? sortedVideoStreams.get(selectedVideoStreamIndex) : null;
}
- private void prepareDescription(Description description) {
- if (TextUtils.isEmpty(description.getContent()) || description == Description.emptyDescription) {
+ private void prepareDescription(final Description description) {
+ if (TextUtils.isEmpty(description.getContent())
+ || description == Description.emptyDescription) {
return;
}
@@ -975,14 +994,16 @@ public class VideoDetailFragment
contentRootLayoutHiding.setVisibility(View.VISIBLE);
}
- protected void setInitialData(int serviceId, String url, String name) {
- this.serviceId = serviceId;
- this.url = url;
- this.name = !TextUtils.isEmpty(name) ? name : "";
+ protected void setInitialData(final int sid, final String u, final String title) {
+ this.serviceId = sid;
+ this.url = u;
+ this.name = !TextUtils.isEmpty(title) ? title : "";
}
private void setErrorImage(final int imageResource) {
- if (thumbnailImageView == null || activity == null) return;
+ if (thumbnailImageView == null || activity == null) {
+ return;
+ }
thumbnailImageView.setImageDrawable(ContextCompat.getDrawable(activity, imageResource));
animateView(thumbnailImageView, false, 0, 0,
@@ -990,11 +1011,12 @@ public class VideoDetailFragment
}
@Override
- public void showError(String message, boolean showRetryButton) {
+ public void showError(final String message, final boolean showRetryButton) {
showError(message, showRetryButton, R.drawable.not_available_monkey);
}
- protected void showError(String message, boolean showRetryButton, @DrawableRes int imageError) {
+ protected void showError(final String message, final boolean showRetryButton,
+ @DrawableRes final int imageError) {
super.showError(message, showRetryButton);
setErrorImage(imageError);
}
@@ -1009,7 +1031,7 @@ public class VideoDetailFragment
super.showLoading();
//if data is already cached, transition from VISIBLE -> INVISIBLE -> VISIBLE is not required
- if(!ExtractorHelper.isCached(serviceId, url, InfoItem.InfoType.STREAM)){
+ if (!ExtractorHelper.isCached(serviceId, url, InfoItem.InfoType.STREAM)) {
contentRootLayoutHiding.setVisibility(View.INVISIBLE);
}
@@ -1028,33 +1050,35 @@ public class VideoDetailFragment
videoTitleToggleArrow.setVisibility(View.GONE);
videoTitleRoot.setClickable(false);
- if(relatedStreamsLayout != null){
- if(showRelatedStreams){
+ if (relatedStreamsLayout != null) {
+ if (showRelatedStreams) {
relatedStreamsLayout.setVisibility(View.INVISIBLE);
- }else{
+ } else {
relatedStreamsLayout.setVisibility(View.GONE);
}
}
- imageLoader.cancelDisplayTask(thumbnailImageView);
- imageLoader.cancelDisplayTask(uploaderThumb);
+ IMAGE_LOADER.cancelDisplayTask(thumbnailImageView);
+ IMAGE_LOADER.cancelDisplayTask(uploaderThumb);
thumbnailImageView.setImageBitmap(null);
uploaderThumb.setImageBitmap(null);
}
@Override
- public void handleResult(@NonNull StreamInfo info) {
+ public void handleResult(@NonNull final StreamInfo info) {
super.handleResult(info);
setInitialData(info.getServiceId(), info.getOriginalUrl(), info.getName());
- if(showRelatedStreams){
- if(null == relatedStreamsLayout){ //phone
- pageAdapter.updateItem(RELATED_TAB_TAG, RelatedVideosFragment.getInstance(currentInfo));
+ if (showRelatedStreams) {
+ if (null == relatedStreamsLayout) { //phone
+ pageAdapter.updateItem(RELATED_TAB_TAG,
+ RelatedVideosFragment.getInstance(currentInfo));
pageAdapter.notifyDataSetUpdate();
- }else{ //tablet
+ } else { //tablet
getChildFragmentManager().beginTransaction()
- .replace(R.id.relatedStreamsLayout, RelatedVideosFragment.getInstance(currentInfo))
+ .replace(R.id.relatedStreamsLayout,
+ RelatedVideosFragment.getInstance(currentInfo))
.commitNow();
relatedStreamsLayout.setVisibility(View.VISIBLE);
}
@@ -1078,9 +1102,11 @@ public class VideoDetailFragment
if (info.getStreamType().equals(StreamType.AUDIO_LIVE_STREAM)) {
videoCountView.setText(Localization.listeningCount(activity, info.getViewCount()));
} else if (info.getStreamType().equals(StreamType.LIVE_STREAM)) {
- videoCountView.setText(Localization.localizeWatchingCount(activity, info.getViewCount()));
+ videoCountView.setText(Localization
+ .localizeWatchingCount(activity, info.getViewCount()));
} else {
- videoCountView.setText(Localization.localizeViewCount(activity, info.getViewCount()));
+ videoCountView.setText(Localization
+ .localizeViewCount(activity, info.getViewCount()));
}
videoCountView.setVisibility(View.VISIBLE);
} else {
@@ -1096,7 +1122,8 @@ public class VideoDetailFragment
thumbsDisabledTextView.setVisibility(View.VISIBLE);
} else {
if (info.getDislikeCount() >= 0) {
- thumbsDownTextView.setText(Localization.shortCount(activity, info.getDislikeCount()));
+ thumbsDownTextView.setText(Localization
+ .shortCount(activity, info.getDislikeCount()));
thumbsDownTextView.setVisibility(View.VISIBLE);
thumbsDownImageView.setVisibility(View.VISIBLE);
} else {
@@ -1136,7 +1163,8 @@ public class VideoDetailFragment
videoDescriptionRootLayout.setVisibility(View.GONE);
if (info.getUploadDate() != null) {
- videoUploadDateView.setText(Localization.localizeUploadDate(activity, info.getUploadDate().date().getTime()));
+ videoUploadDateView.setText(Localization
+ .localizeUploadDate(activity, info.getUploadDate().date().getTime()));
videoUploadDateView.setVisibility(View.VISIBLE);
} else {
videoUploadDateView.setText(null);
@@ -1168,9 +1196,12 @@ public class VideoDetailFragment
spinnerToolbar.setVisibility(View.GONE);
break;
default:
- if(info.getAudioStreams().isEmpty()) detailControlsBackground.setVisibility(View.GONE);
- if (!info.getVideoStreams().isEmpty()
- || !info.getVideoOnlyStreams().isEmpty()) break;
+ if (info.getAudioStreams().isEmpty()) {
+ detailControlsBackground.setVisibility(View.GONE);
+ }
+ if (!info.getVideoStreams().isEmpty() || !info.getVideoOnlyStreams().isEmpty()) {
+ break;
+ }
detailControlsPopup.setVisibility(View.GONE);
spinnerToolbar.setVisibility(View.GONE);
@@ -1187,28 +1218,28 @@ public class VideoDetailFragment
public void openDownloadDialog() {
- try {
- DownloadDialog downloadDialog = DownloadDialog.newInstance(currentInfo);
- downloadDialog.setVideoStreams(sortedVideoStreams);
- downloadDialog.setAudioStreams(currentInfo.getAudioStreams());
- downloadDialog.setSelectedVideoStream(selectedVideoStreamIndex);
- downloadDialog.setSubtitleStreams(currentInfo.getSubtitles());
+ try {
+ DownloadDialog downloadDialog = DownloadDialog.newInstance(currentInfo);
+ downloadDialog.setVideoStreams(sortedVideoStreams);
+ downloadDialog.setAudioStreams(currentInfo.getAudioStreams());
+ downloadDialog.setSelectedVideoStream(selectedVideoStreamIndex);
+ downloadDialog.setSubtitleStreams(currentInfo.getSubtitles());
- downloadDialog.show(getActivity().getSupportFragmentManager(), "downloadDialog");
- } catch (Exception e) {
- ErrorActivity.ErrorInfo info = ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
- ServiceList.all()
- .get(currentInfo
- .getServiceId())
- .getServiceInfo()
- .getName(), "",
- R.string.could_not_setup_download_menu);
+ downloadDialog.show(getActivity().getSupportFragmentManager(), "downloadDialog");
+ } catch (Exception e) {
+ ErrorActivity.ErrorInfo info = ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
+ ServiceList.all()
+ .get(currentInfo
+ .getServiceId())
+ .getServiceInfo()
+ .getName(), "",
+ R.string.could_not_setup_download_menu);
- ErrorActivity.reportError(getActivity(),
- e,
- getActivity().getClass(),
- getActivity().findViewById(android.R.id.content), info);
- }
+ ErrorActivity.reportError(getActivity(),
+ e,
+ getActivity().getClass(),
+ getActivity().findViewById(android.R.id.content), info);
+ }
}
/*//////////////////////////////////////////////////////////////////////////
@@ -1216,12 +1247,16 @@ public class VideoDetailFragment
//////////////////////////////////////////////////////////////////////////*/
@Override
- protected boolean onError(Throwable exception) {
- if (super.onError(exception)) return true;
+ protected boolean onError(final Throwable exception) {
+ if (super.onError(exception)) {
+ return true;
+ }
- int errorId = exception instanceof YoutubeStreamExtractor.DecryptException ? R.string.youtube_signature_decryption_error
- : exception instanceof ExtractionException ? R.string.parsing_error
- : R.string.general_error;
+ int errorId = exception instanceof YoutubeStreamExtractor.DecryptException
+ ? R.string.youtube_signature_decryption_error
+ : exception instanceof ExtractionException
+ ? R.string.parsing_error
+ : R.string.general_error;
onUnrecoverableError(exception, UserAction.REQUESTED_STREAM,
NewPipe.getNameOfService(serviceId), url, errorId);
@@ -1234,9 +1269,9 @@ public class VideoDetailFragment
positionSubscriber.dispose();
}
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
- final boolean playbackResumeEnabled =
- prefs.getBoolean(activity.getString(R.string.enable_watch_history_key), true)
- && prefs.getBoolean(activity.getString(R.string.enable_playback_resume_key), true);
+ final boolean playbackResumeEnabled = prefs
+ .getBoolean(activity.getString(R.string.enable_watch_history_key), true)
+ && prefs.getBoolean(activity.getString(R.string.enable_playback_resume_key), true);
if (!playbackResumeEnabled || info.getDuration() <= 0) {
positionView.setVisibility(View.INVISIBLE);
@@ -1244,8 +1279,8 @@ public class VideoDetailFragment
// TODO: Remove this check when separation of concerns is done.
// (live streams weren't getting updated because they are mixed)
- if (!info.getStreamType().equals(StreamType.LIVE_STREAM) &&
- !info.getStreamType().equals(StreamType.AUDIO_LIVE_STREAM)) {
+ if (!info.getStreamType().equals(StreamType.LIVE_STREAM)
+ && !info.getStreamType().equals(StreamType.AUDIO_LIVE_STREAM)) {
return;
}
}
@@ -1258,14 +1293,17 @@ public class VideoDetailFragment
.onErrorComplete()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(state -> {
- final int seconds = (int) TimeUnit.MILLISECONDS.toSeconds(state.getProgressTime());
+ final int seconds
+ = (int) TimeUnit.MILLISECONDS.toSeconds(state.getProgressTime());
positionView.setMax((int) info.getDuration());
positionView.setProgressAnimated(seconds);
detailPositionView.setText(Localization.getDurationString(seconds));
animateView(positionView, true, 500);
animateView(detailPositionView, true, 500);
}, e -> {
- if (DEBUG) e.printStackTrace();
+ if (DEBUG) {
+ e.printStackTrace();
+ }
}, () -> {
animateView(positionView, false, 500);
animateView(detailPositionView, false, 500);
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
index d55bf3f40..68937f078 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
@@ -7,16 +7,17 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.View;
+
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.View;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.InfoItem;
@@ -40,24 +41,26 @@ import java.util.Queue;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
-public abstract class BaseListFragment extends BaseStateFragment implements ListViewContract, StateSaver.WriteRead, SharedPreferences.OnSharedPreferenceChangeListener {
-
+public abstract class BaseListFragment extends BaseStateFragment
+ implements ListViewContract, StateSaver.WriteRead,
+ SharedPreferences.OnSharedPreferenceChangeListener {
/*//////////////////////////////////////////////////////////////////////////
// Views
//////////////////////////////////////////////////////////////////////////*/
+ private static final int LIST_MODE_UPDATE_FLAG = 0x32;
protected InfoListAdapter infoListAdapter;
protected RecyclerView itemsList;
- private int updateFlags = 0;
-
- private static final int LIST_MODE_UPDATE_FLAG = 0x32;
+ protected StateSaver.SavedState savedState;
/*//////////////////////////////////////////////////////////////////////////
// LifeCycle
//////////////////////////////////////////////////////////////////////////*/
+ private boolean useDefaultStateSaving = true;
+ private int updateFlags = 0;
@Override
- public void onAttach(Context context) {
+ public void onAttach(final Context context) {
super.onAttach(context);
if (infoListAdapter == null) {
@@ -71,17 +74,23 @@ public abstract class BaseListFragment extends BaseStateFragment implem
}
@Override
- public void onCreate(Bundle savedInstanceState) {
+ public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
PreferenceManager.getDefaultSharedPreferences(activity)
.registerOnSharedPreferenceChangeListener(this);
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // State Saving
+ //////////////////////////////////////////////////////////////////////////*/
+
@Override
public void onDestroy() {
super.onDestroy();
- if (useDefaultStateSaving) StateSaver.onDestroy(savedState);
+ if (useDefaultStateSaving) {
+ StateSaver.onDestroy(savedState);
+ }
PreferenceManager.getDefaultSharedPreferences(activity)
.unregisterOnSharedPreferenceChangeListener(this);
}
@@ -93,28 +102,23 @@ public abstract class BaseListFragment extends BaseStateFragment implem
if (updateFlags != 0) {
if ((updateFlags & LIST_MODE_UPDATE_FLAG) != 0) {
final boolean useGrid = isGridLayout();
- itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
- infoListAdapter.setGridItemVariants(useGrid);
+ itemsList.setLayoutManager(useGrid
+ ? getGridLayoutManager() : getListLayoutManager());
+ infoListAdapter.setUseGridVariant(useGrid);
infoListAdapter.notifyDataSetChanged();
}
updateFlags = 0;
}
}
- /*//////////////////////////////////////////////////////////////////////////
- // State Saving
- //////////////////////////////////////////////////////////////////////////*/
-
- protected StateSaver.SavedState savedState;
- protected boolean useDefaultStateSaving = true;
-
/**
* If the default implementation of {@link StateSaver.WriteRead} should be used.
*
* @see StateSaver
+ * @param useDefaultStateSaving Whether the default implementation should be used
*/
- public void useDefaultStateSaving(boolean useDefault) {
- this.useDefaultStateSaving = useDefault;
+ public void setUseDefaultStateSaving(final boolean useDefaultStateSaving) {
+ this.useDefaultStateSaving = useDefaultStateSaving;
}
@Override
@@ -124,13 +128,15 @@ public abstract class BaseListFragment extends BaseStateFragment implem
}
@Override
- public void writeTo(Queue objectsToSave) {
- if (useDefaultStateSaving) objectsToSave.add(infoListAdapter.getItemsList());
+ public void writeTo(final Queue objectsToSave) {
+ if (useDefaultStateSaving) {
+ objectsToSave.add(infoListAdapter.getItemsList());
+ }
}
@Override
@SuppressWarnings("unchecked")
- public void readFrom(@NonNull Queue savedObjects) throws Exception {
+ public void readFrom(@NonNull final Queue savedObjects) throws Exception {
if (useDefaultStateSaving) {
infoListAdapter.getItemsList().clear();
infoListAdapter.getItemsList().addAll((List) savedObjects.poll());
@@ -138,15 +144,20 @@ public abstract class BaseListFragment extends BaseStateFragment implem
}
@Override
- public void onSaveInstanceState(Bundle bundle) {
+ public void onSaveInstanceState(final Bundle bundle) {
super.onSaveInstanceState(bundle);
- if (useDefaultStateSaving) savedState = StateSaver.tryToSave(activity.isChangingConfigurations(), savedState, bundle, this);
+ if (useDefaultStateSaving) {
+ savedState = StateSaver
+ .tryToSave(activity.isChangingConfigurations(), savedState, bundle, this);
+ }
}
@Override
- protected void onRestoreInstanceState(@NonNull Bundle bundle) {
+ protected void onRestoreInstanceState(@NonNull final Bundle bundle) {
super.onRestoreInstanceState(bundle);
- if (useDefaultStateSaving) savedState = StateSaver.tryToRestore(bundle, this);
+ if (useDefaultStateSaving) {
+ savedState = StateSaver.tryToRestore(bundle, this);
+ }
}
/*//////////////////////////////////////////////////////////////////////////
@@ -169,29 +180,32 @@ public abstract class BaseListFragment extends BaseStateFragment implem
final Resources resources = activity.getResources();
int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width);
width += (24 * resources.getDisplayMetrics().density);
- final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels / (double)width);
+ final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels
+ / (double) width);
final GridLayoutManager lm = new GridLayoutManager(activity, spanCount);
lm.setSpanSizeLookup(infoListAdapter.getSpanSizeLookup(spanCount));
return lm;
}
@Override
- protected void initViews(View rootView, Bundle savedInstanceState) {
+ protected void initViews(final View rootView, final Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
final boolean useGrid = isGridLayout();
itemsList = rootView.findViewById(R.id.items_list);
itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager());
- infoListAdapter.setGridItemVariants(useGrid);
+ infoListAdapter.setUseGridVariant(useGrid);
infoListAdapter.setFooter(getListFooter());
infoListAdapter.setHeader(getListHeader());
itemsList.setAdapter(infoListAdapter);
}
- protected void onItemSelected(InfoItem selectedItem) {
- if (DEBUG) Log.d(TAG, "onItemSelected() called with: selectedItem = [" + selectedItem + "]");
+ protected void onItemSelected(final InfoItem selectedItem) {
+ if (DEBUG) {
+ Log.d(TAG, "onItemSelected() called with: selectedItem = [" + selectedItem + "]");
+ }
}
@Override
@@ -199,19 +213,19 @@ public abstract class BaseListFragment extends BaseStateFragment implem
super.initListeners();
infoListAdapter.setOnStreamSelectedListener(new OnClickGesture() {
@Override
- public void selected(StreamInfoItem selectedItem) {
+ public void selected(final StreamInfoItem selectedItem) {
onStreamSelected(selectedItem);
}
@Override
- public void held(StreamInfoItem selectedItem) {
+ public void held(final StreamInfoItem selectedItem) {
showStreamDialog(selectedItem);
}
});
infoListAdapter.setOnChannelSelectedListener(new OnClickGesture() {
@Override
- public void selected(ChannelInfoItem selectedItem) {
+ public void selected(final ChannelInfoItem selectedItem) {
try {
onItemSelected(selectedItem);
NavigationHelper.openChannelFragment(getFM(),
@@ -226,7 +240,7 @@ public abstract class BaseListFragment extends BaseStateFragment implem
infoListAdapter.setOnPlaylistSelectedListener(new OnClickGesture() {
@Override
- public void selected(PlaylistInfoItem selectedItem) {
+ public void selected(final PlaylistInfoItem selectedItem) {
try {
onItemSelected(selectedItem);
NavigationHelper.openPlaylistFragment(getFM(),
@@ -241,7 +255,7 @@ public abstract class BaseListFragment extends BaseStateFragment implem
infoListAdapter.setOnCommentsSelectedListener(new OnClickGesture() {
@Override
- public void selected(CommentsInfoItem selectedItem) {
+ public void selected(final CommentsInfoItem selectedItem) {
onItemSelected(selectedItem);
}
});
@@ -249,13 +263,13 @@ public abstract class BaseListFragment extends BaseStateFragment implem
itemsList.clearOnScrollListeners();
itemsList.addOnScrollListener(new OnScrollBelowItemsListener() {
@Override
- public void onScrolledDown(RecyclerView recyclerView) {
+ public void onScrolledDown(final RecyclerView recyclerView) {
onScrollToBottom();
}
});
}
- private void onStreamSelected(StreamInfoItem selectedItem) {
+ private void onStreamSelected(final StreamInfoItem selectedItem) {
onItemSelected(selectedItem);
NavigationHelper.openVideoDetailFragment(getFM(),
selectedItem.getServiceId(), selectedItem.getUrl(), selectedItem.getName());
@@ -268,12 +282,12 @@ public abstract class BaseListFragment extends BaseStateFragment implem
}
-
-
protected void showStreamDialog(final StreamInfoItem item) {
final Context context = getContext();
final Activity activity = getActivity();
- if (context == null || context.getResources() == null || activity == null) return;
+ if (context == null || context.getResources() == null || activity == null) {
+ return;
+ }
if (item.getStreamType() == StreamType.AUDIO_STREAM) {
StreamDialogEntry.setEnabledEntries(
@@ -291,8 +305,8 @@ public abstract class BaseListFragment extends BaseStateFragment implem
StreamDialogEntry.share);
}
- new InfoItemDialog(activity, item, StreamDialogEntry.getCommands(context), (dialog, which) ->
- StreamDialogEntry.clickOn(which, this, item)).show();
+ new InfoItemDialog(activity, item, StreamDialogEntry.getCommands(context),
+ (dialog, which) -> StreamDialogEntry.clickOn(which, this, item)).show();
}
/*//////////////////////////////////////////////////////////////////////////
@@ -300,8 +314,11 @@ public abstract class BaseListFragment extends BaseStateFragment implem
//////////////////////////////////////////////////////////////////////////*/
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- if (DEBUG) Log.d(TAG, "onCreateOptionsMenu() called with: menu = [" + menu + "], inflater = [" + inflater + "]");
+ public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
+ if (DEBUG) {
+ Log.d(TAG, "onCreateOptionsMenu() called with: "
+ + "menu = [" + menu + "], inflater = [" + inflater + "]");
+ }
super.onCreateOptionsMenu(menu, inflater);
ActionBar supportActionBar = activity.getSupportActionBar();
if (supportActionBar != null) {
@@ -339,7 +356,7 @@ public abstract class BaseListFragment extends BaseStateFragment implem
}
@Override
- public void showError(String message, boolean showRetryButton) {
+ public void showError(final String message, final boolean showRetryButton) {
super.showError(message, showRetryButton);
showListFooter(false);
animateView(itemsList, false, 200);
@@ -361,25 +378,28 @@ public abstract class BaseListFragment extends BaseStateFragment implem
}
@Override
- public void handleNextItems(N result) {
+ public void handleNextItems(final N result) {
isLoading.set(false);
}
@Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences,
+ final String key) {
if (key.equals(getString(R.string.list_view_mode_key))) {
updateFlags |= LIST_MODE_UPDATE_FLAG;
}
}
protected boolean isGridLayout() {
- final String list_mode = PreferenceManager.getDefaultSharedPreferences(activity).getString(getString(R.string.list_view_mode_key), getString(R.string.list_view_mode_value));
- if ("auto".equals(list_mode)) {
+ final String listMode = PreferenceManager.getDefaultSharedPreferences(activity)
+ .getString(getString(R.string.list_view_mode_key),
+ getString(R.string.list_view_mode_value));
+ if ("auto".equals(listMode)) {
final Configuration configuration = getResources().getConfiguration();
return configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
&& configuration.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);
} else {
- return "grid".equals(list_mode);
+ return "grid".equals(listMode);
}
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java
index 9a8e1fd17..ce379124d 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java
@@ -21,7 +21,6 @@ import io.reactivex.schedulers.Schedulers;
public abstract class BaseListInfoFragment
extends BaseListFragment {
-
@State
protected int serviceId = Constants.NO_SERVICE_ID;
@State
@@ -34,7 +33,7 @@ public abstract class BaseListInfoFragment
protected Disposable currentWorker;
@Override
- protected void initViews(View rootView, Bundle savedInstanceState) {
+ protected void initViews(final View rootView, final Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
setTitle(name);
showListFooter(hasMoreItems());
@@ -43,7 +42,9 @@ public abstract class BaseListInfoFragment
@Override
public void onPause() {
super.onPause();
- if (currentWorker != null) currentWorker.dispose();
+ if (currentWorker != null) {
+ currentWorker.dispose();
+ }
}
@Override
@@ -73,7 +74,7 @@ public abstract class BaseListInfoFragment
//////////////////////////////////////////////////////////////////////////*/
@Override
- public void writeTo(Queue objectsToSave) {
+ public void writeTo(final Queue objectsToSave) {
super.writeTo(objectsToSave);
objectsToSave.add(currentInfo);
objectsToSave.add(currentNextPageUrl);
@@ -81,7 +82,7 @@ public abstract class BaseListInfoFragment