From ac43d23767ccdde8847884e4e98e32dce34a3f50 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 36419e04309e11dcd06b2ac43395da13fc59a1b4 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 3807ab26ab93bd3dde09faec8420835ce2da6d43 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 beca712a956f3dfeba343f2d249d544c04b88b6c 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 9429fbfa65b6d05fbf2bee85f3e43165234c6162 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 b1aa3b018b0f9010b709cd19c232a2a7d2143ba9 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 2b8bd2c8901b1e09032fed8d21e3b5a66358a5d3 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 bf21a7a1a35b0385bd35f13fb37508c39ea6a729 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 02c945bddd2c10a8618aeef78724bea30fd96804 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 9329c2f7f1b5b4f58e26a09b37b687dbab1ced9e 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 ddc609e8d8d5257b89d81db4454eefae737fe953 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 924fb49eb0f24b22a708867c84f59d5f44357ab9 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 d2935d616c548605a3390b92e8996a50aac63f1b 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 2f30802d292ac2209ef9a06b810065440ca082d0 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 f831c84c420aa15f7fcd4748acc118caa90e1316 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 10e38f7ea496a1aa5b3e65f3d338703d697efd3c 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 ac28cc73640f9b71125d5dde8c5ce7654d6d2661 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 8018f6d37f5b2affc197ca1e8afdbb870987d08a 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 86fc9c078533dab7d26f92e5c02e63d9ff0814e5 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 31bd60f3b1304d4f3b11a25843962d0d0bf8d496 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 330eb896d85ed673e3c4d71800ae171d9b674eae 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 8d98f9a96746f6c7ede65bd057b702b3b1840dbc 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 72d23158c3426f3d503592e35f3a30b2a003d622 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 430381df4ead587a6febc8a0c65346f3a0b5bdff 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 37cf665aa85ecfffdd497352cd032dff57678344 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 bc4ee8b7ff874c78bf0735ef78f9cc8a689da060 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 68f4b5c8e5739657e27dbf5e54da12c1e65fc3c7 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 9c306afec6ff7c07e457fbd4ebe392bf2b17a047 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 28c53b7387a84c17a26f8f25ab2d00a493612a8f 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 b83581e03df7916d37d976343a40d7825e2d0846 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 eadfd82f1601a733052aa980287fc0f767fb1549 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 d1bc686af8652855ab4d6503a2854eeba5715919 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 6ad79defba95a34059e42c16c070bfa6d142a394 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 90cf8a0504e9404d2ca765067678e04b5c516c7c 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 e382ba9086504548c566e93ee001b037d1465218 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 20ee36e5700aec45d96b0565dae183e2821e9052 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 7393f2e10b020bf22cb2aa28aceca3378b1255fd 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 94c16600e3537bc62dbd47e0b578c6ecc68dfbca 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 5af0e7bfea745e3de30c64791d0549fbd5e80357 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 8dd062ed2181b22e9a5bc1462c4fa3d56dc14eda 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 6bf6ce3ab8cead3f2a362f7554db797fe6d69883 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 a3075dce2ebfe888c75d5ef47c217f63f7bfc7c2 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 e9196eb8520f183d7bbe809a18e9515922fa9537 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 f386947fbd5905c40083d0ec013c0efda7302489 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 495a6031daf3c176ec9f810130918577209bd1b7 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 15e8bd77865878d7ef8a0578467468f23e57833e 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 e7d3873d065d04927ffe8fedf38212a50f2ce816 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 b03bbdaddec821b3ff4d749fdee259ca7618dcde 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 38ee316118d194e4168cff9c2dc314baefb6a6fd 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 a5f4b3ef027f7fc102cfda528ef4c7719ffe44ec 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 221d4382c70123dd5c1a1b3e2afa0d53046f7f07 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 d31218b932f4f46589e573bd4f35cb162a5292a8 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 d0f3794bf8b2bea091ea5e7a95417c7a04e86b4a 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 0029ecd90928ce70a23d1306b091b10be926c8a6 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 9843d685406f3b1df076775653923cf36b316436 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 60168dc3069e3acc858d46476c74a284095112d8 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 84ccf17bcff93ab56bb87f3f62cf27e7e8ed3721 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 f486711ceb6a4d66b4a8faf5fc87a0bddd1371c5 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 295d14de3d8ebf1d30c32665bb98941347c494c6 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 7ee981e3f728335aaff57fb884dacfc40ac11eb0 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 84601a3af38b9934a30c2034dd68891d640c746d 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 f0d20a211320cd0a12c81ff210a506dcbffca8e9 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 daec0248df0b2c2959ad2429bd739f46f8df4a30 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 fae26b94b84bb569e1345bdaaca2961fa9bf64eb 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 3111b390d5a8248ddbd4e7f2dc2ceac3accf7317 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 f6965f7277f6935b00674fc82f90f76c99ba05fe 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 5b3481d3d3aeb20a9eee3f47d4c1400f22bca62d 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 3f173c984d3736921c3fbc7480bcf3c577a43544 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 96976f591dca1bd187eb61f4ec0244c75c606a97 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 aa10bbcedeb3f8a1fe10778c66de12d34af6e163 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 db39ff1b78fbb351722213d279513b6d445216eb 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 e973adef8fa0b608be4bd058bd3da64c36d38ca1 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 458d59e570778920ac3df48c9266448672353ede 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 732bd75d28639503edaa53486bec9cbcb4a5d1a0 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 62766a02c08d15dbe4e803f127ed057164611494 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 b5a27e0b949a41630b0a36e8119b084507d40454 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 d93fcb63c76e167d5f476802d468e9f481245bd0 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 e2e170b713432da479903cbc592f898692fa08f6 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 5ff5773230984ebdc44ed9c5198248d8d46ccecf 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 cf16f05ee9233d0a7237773fa80aae17329e4b8f 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 b80c105388198887d231688ff42cd82d261a8157 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 1dff21ca9013940bebff512b16179db5cd23e68d 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 fbb61790a56c49cc705c3e549bf0d5b23f9892e1 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 c9c6a867f2c83b717c60022f64546ce8d032706c 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 bb51a9d16fd38a4919490edb98598bb8b5950b49 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 f9fe44ff427067e426a1fff60c897654c8a69f39 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 4abb1cd2fbfa8150755a5719d512624b7683cd38 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 3cc4c1b0330a86adb7f9db8c7e094732a76b9e00 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 074fa0c45dd3ca06ccf4823d9f981851c6c85274 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 8e64aaab9233d73a409dd6c411bc9d027255a98b 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 7c2d43ea44df5b15bc1dfab8be9a7ccf2cf5847b 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/3641f572944b68787e88eb865755ffb16eb87c42)
* [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 2cac84520bd652439172725d7ba595a5a3c8082a 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 953de0b921aa07360763a82ecb2b4ee2650ef50d 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 20721bdcd4ab40229052b68052ab5a306293f391 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 d74979db9a284cee0977ce0d1feb57c9623e3fc0 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 2c9bcb963d71cc8c5c4c9017265a450635775a71 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 9c194a9900035391bd4701890d72e22ac3260359 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 d75b6130f4e52a25395620381731334b48615773 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 238005ef00ab0c24c237b52e516fae440f705e61 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 af690618d431f1cfa6394ae984d991007076ec96 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 3dd492e82bb3a4808851e189b556846204e6ceea 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 9c4eaa3bff011a43bd88574b37efec72625e8fd8 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 679ddf4481a155d7883f12405e563363c52a3511 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 b8bb03538b50a48bcf13e3c5d7e3a98dda69e4bc 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 7bd3f1bec427da585f0c69ec3feab23e1b56f3c9 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 578395a3511999b12a2af51a7d8a5f7bc5bd7caf 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 328339f3a43ca94091d3f449864183ac221f5541 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 2bff989a6804d391ed6c89bf2284dcef9bdddd39 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 ac10e09acb805e58c6b2e5f6ea456fee8a5e690b 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 0a95c7cec3bc6b29ee29ca105847fa032cae4d4e 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 4b8d5fbc26eaea139ca98977df36ff5a4f9bb08c 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 836f62809748ccc8134a5c3a9023b737a630ce0e 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 b4570a951383083e2b5c3895172291ea20dd3b60 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 a0bfe06332ebe8df1b3cda4e8c4e1bad69eeb0ea 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 ed10cf631a0ca74ae36d32a8753664ee92ae1542 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 0df77f955bedbab050456e596e8884082641a98d 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 c8a5548f145800aeb41f0a7496cfd375d7c54e73 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 7e250af507db55d05a2605ce1725c7993f141d80 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 3b5b4d3fc68c5121b720d8f0563b788df5ef1507 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 8049e40e1822af306d0fac318663d710e4852013 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 d33793c31d3975695554309d6a9113006fe544a2 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 faacd033ea0fcdd2668249c6cc044d4e18d31a45 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 19871076764f9be6240050cc18bdb977a331b0be 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 ccbd49a11a25791dad43a8de5abd73ebf154cf8b 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 7893ac92c48c157ab83f263a53a9d09094e1648f 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 c66b63c8e45134b654a67341a2da7fbc6123c36a 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 1a3ddc411372edcd34746e304945db5750032bed 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 82015a09b109526b729a6128f5453eb0f9195c82 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 d461b0cbe44f96ae6b017bbde91116e760cf34a0 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 30c9d97d1a2733da64481b7a9a84edd2828de239 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 a1b46341716e4520e48f6fba2f38e9657a747a04 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 3877cec0ff19aa462abaaf7ddd56b06dc4f0a5ff 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 e21e174fc069680bad54cfe857497e0936648de6 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 3ed183a7a689a6ee381c4abe96fdb90e31e8c78b 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 21fbe869fc15732ad45dd2b0177c9256d505075a 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 aa61aa97378b25002ed402b9db97e95758d383ac 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 a1ede6b97dbe042bf96e81655de888fa46d39cb3 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 10bf24aebc3080cc46d079ff647920b2eda08429 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 31930fa0a7df1dab5ba066a37d33513bec521e58 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 7218081f538bc560f33e9ab5fb2fed23403c4020 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 1f05c6e1419e379caa984435931f0a3800021f04 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 aafac65997250036926d1362feb82abdc5ddee95 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 0b7588f816099772bbb27b3203dca979c8e68a8b 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 d30450b39689fee9d86c385b6e11ca557c769a55 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 09e2fb3648fc67985c5edc7744887c0e9cb0794a 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 b8625025e2e59004b5de8178f404a3654cc3c24c 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 4ebbb151f3ddf31f4108a862d7fe35c43c2dea56 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 38374c47f5300f2c543b42525475bf7d08a6240c 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 288ec0ba7b5e99cf15d75f782e4e24f8cf0a5c88 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 234f4056d7660bb60b1c50a3e54068c6d6c57426 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 d54b0a845eebb7d42ae88cb3f93f9260c0298203 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 145e4255b69aca96fcefa8c8ec72bf9feffd01f5 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 cc96a8cde92f023988bd131116869154096cbd4c 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 19343fee2790a77e54193908d7f35431f101204f 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 921c3e71a0ffd8249fd46a81e078ad143212c51d 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 5e4e4b9835cb498f4fc5e133418e371b0c72b4ae 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 094a0682265813609a0dc2aa9a67880a11eb3edd 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 b8147d854b2104f53bf99a012973d6302eddb77a 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 b6ce2d79a163e8023cd752a8892d45f3658a6cc2 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 decf049198c852481f52e9eac8d1771c32f7ddf1 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 b3092b349bd9cedda1223db3a0df2f0f3f57392b 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 ebab29c9f9b778c3516b5556599040b0eca6f602 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 9dbc7c0076a70f8838303f351f6cf07f6c4aaab3 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 b686e129fb2b8122575e21b68ead16cee51cf44e 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 c1446a59d37082af4521e79e39565d6d18fad0fb 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 0dde1f85e835176e0aff947d68635b3a6e21cf37 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 cac9b6d78efe54df35f14351111384247e408c70 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 0f5ce152807bbb09e56153b9e3fd198c1cfb92e1 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 27aa1abfdc65b63b598651c302ab762510487895 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 299f4e6d0efe40c545b6f884a6802b4bc48c5644 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 39b0359712d9f9a2fdf7ab533e9276981a570128 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 53d483403fb9767d2f655f6a9e31eb4b21228d52 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 a7914b432b7eb71f79f3140b8862b0d960000ebf 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 680c2884a9098b3535255a887233201fbc2ff492 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 99c8d31d818f2607e772a1465e990415b3e70f31 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 88fb86344dd03b04d15c3a83de0f7001a6bc05e5 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 e2edf0d96521569a0ad150c88eb2ed8907f6bb92 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 456c866d30fdb3732c695e417002f33c495628ce 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 d8a64ffc635e2197a313923cee031306c9847f17 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 9e07e539e20526a0dd9caae655cc130acffdf4af 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 a06bc8de203f98270f95b022b8944500b9f5b6a9 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 d4dc780149061b5325efc7466adfc552e4e92862 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 53db802a5e3f71952ab44f0f77e9d7a0ff5ea417 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 ac26277f557879bc44bd6eb138d0ef21766a7ad0 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 08afc8d9aa1e66bd30d2b0db0712ef6b3ee42b95 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 e02a918abfd0bbbf91901c07297000b086b5eeed 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 7a6cc90f05a6b4ac20e377f9fd46b25c67529513 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 faca5dda2f3966aaf63a3b2beff28b914ed68a87 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 3551e39d3226a28a86520f0b745bddbf8ac540e2 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 798753145e8017354e88afc6a1640e59a0a31cdf 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 01d6b758745c96298c11fa046975b7c7d4b46694 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 b5b2bc48e476ac65de73808c03f7e218cbc76a5e 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 f8d18b245cc6a6e7cf13237995f490d847a68ede 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 5c67531ff83de14930283480c258ea8e8d49c65e 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 7973360a58c8a2ca50871edbf9724bcc7efa3ac0 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 7d0520517fce9f02e4ecd8ac11a1686b87112416 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 1c1885c2569140f606bfae85e17dda58e9c6ec99 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 bf82400d7ae2e3d3f661a74c3e8694edbbd5ed47 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 74c9ddf9c779ec03fff00bd92770a7ed08d3c58e 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 ad1ec9a4c531fbfcd1c563646cd1f836ea621965 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 a07a6e069d0d881bc27d4948c7d2c73d2919d97c 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 a13d616b20b992acf2215516a29ebee51b76fead 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 a8d4964be9534cddfe2ae7866b36ed4b150d4d82 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 5213bead8780343c4e34c6d0afc660925d857c73 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 f83593e7c7c29ab343691dc8f2d7fc9569ba3512 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 b6a83c8dcf2dd710db84fc8d44e68098698deb3e 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 37d8cddf1fc200545e54b543355fabf2a829ca99 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 a45dedee08cdda70535f356e028b7f4cdfe5f54d 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 f552892fe64f7435a7c7eb31d95491ff93ffdf74 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 e933bb1a5f4765a8b52f025edfe65ee8e74b3bc6 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 4e70d4f86846f17029f4f8b454c6491781b2fbe0 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 a92027536e5a3f9a840ab7fdae1fb420b379a6c4 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 c4c50d25cd080474bf0e95285800b31ab6a099a3 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 f99ac44a99f019cbea6f04ffe50fa1e95bd3b703 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 909d1bbccca4afa7972f7cf6db3e19d7e7008014 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 6e24bc10806e0e758d6ec84fc15491212925b3f4 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 b6108a45bddb95b031cb0964dcb9b3aceac9a9b8 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 035bb657cd15e78ffdaa02e5051f62d60fc44200 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 10d6eab342be333316122d00f5c92cfbab08d2d6 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 eaed951dbd6b4647626e28be6f171d4de9bacb39 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 bef9e416ae6e311503da725a83ba1a103d9ef7a1 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 590bdb3e216a3c1a380d5f79eed8feca66618b86 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 684628defbb711d2ab11de35c825717df264d093 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 a74f0873a319b809628e1df67e4b9ff89a3a673f 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 8a417a127f561d156496dbbcc07d73c4c7b16f6d 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 953fd580f76901e19a1ad0103bc333c72aba7979 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 13b747263a8eca5199b85addabb2cb1fb0ea56c0 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 3abe2423c091277078ba66eae5364d57d8f81b03 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 1c873141fe76bc945ea8635aa9b7068dd87be55e 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 fe181dfd5192ff2c060a647b3e918925280f3458 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 0d461064178a4f08df087b71a8315274bf11aec9 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 87d563b0db28ddee3cc40cc7e42f6acb79da3fe9 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 827f0498a1af7c2ab175b32a15a3073ca02c901b 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 100dd99c1912bd846b238ac94f8f51c7bba8d5c2 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 3b648428b43b7e7f48f021ddc12ef83acd64bc89 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 45aaf0c2304999a2985151ac9ce738d01cb6f456 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 f41d13e5593e7f00599bee61dc243c3c718864ce 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 55d7a645f87a729a54eed491e98a4229e1f10b92 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 afcbe6c01676a0aed3b278c3e2e3e4f3e3249d27 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 fcca0f47749cde0e6b068e42d417ccf61027a92e 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 f58b1a860f00d05e7867d2f1ffab88655b54a8a2 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 71b0311bb172c9e1d82f9a1ee2d6fa9ec98c65f5 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 2064f5372e4c6458507f45163f60f59b1e95b327 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 2db214f259654ffacc6b72d22ec59e1cbc4357d8 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 29080683d0b06d74f53226b3dd32bf402f7cde12 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 9208d6cf8ad512accf4235b2e8c15a41719f49bd 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 e276a743f55adf6e0757e9a6504fa02c4743b345 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 eec0ae3bb89e39fe74322069b4b10f673e1a073f 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 02bb6494dce91b75e01353d1a519d12423bff530 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 33f83a1067349c8d1a5f9a421c383f6b2593ec92 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 032cea494e16b8dd8f3ec24929af98abc5bf6589 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 7b0148705ed4f082f4fba133ad5023eecc85c66b 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 b1ca2eea3e563a4b4ab83fd7c93211af2e0ffc28 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 60c9f8e7bb42916cb7f009b8743b89245be084bc 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 211720cf22f67e0b54d410b9422a2803f48adcd9 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 6f32942f6f00927d92a5ddcf2aeec824faf010aa 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 a05e0614d26d3bc79f3f62cbe018848a6b7f5746 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 d03deeed2f9398d6a06e00d4b5e1af4920d79268 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 32a22bb79191cfa74efe36f171a4e2f5ee6456c9 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 a6e3ed6368537f14c95ff585890bc16be233311d 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 bb8bcaec20637f034355c4e2d6401b25e47f87dc 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 00f19e63801d7e7a00ddc88a661f12c8f2ded5c6 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 435e7ea891029b4170d135e2a4980d03c4260372 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 07e1340939cd0674d52c31304fe5274efe79e2e0 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 c19d3494b1793fd999e92251a52002d425451ad6 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 6da847737a8119036259e7cfb48184c6ec06b966 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 b52b76ff7e43612244543ae7896922708deb2f3f 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 9e2206ae25b25a1789dda2593f66bbc6e0269e8a 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 2221e8971e5110c1a002841cb4606d08fc13655e 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 7951cd0b679eacb65a6cc185419b069e4d335952 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 a087f1710d928cf2d3c7a31417a8d8fe90ecd968 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 f08f2aa884c6617e69f3790f6a169d5026148c09 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 2e3e692a1e38da9aac4cb70c704ed8a212c55db6 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 2d5e57e39f031d4a424acc395615aaf9affeec7f 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 3132a58e9f635581ffd733dba26571a4b9d52e4e 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 78c10c90715d4775349cf5e95ef56866971a981f 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 2914a325cd6d9eb6387965f7920e24b5dff222dd 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 c359d0a7ecf866130e01bb6a98cee2f76652ee50 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 c1702795b8b34972ae5b4b924ef5eca3ede0846c 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 62e43698db20fde950adef93ce56f682e8e27eee 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 b7af2c4dcc17cb2bcabb1208c9f48d3a023f3471 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 9444540ea588452d10b01680a0e90344700cf522 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 4d9787785c33c86fc5bf43986e577fc93085cfea 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 851b0c45e000bd9acc32ea4f51a0476961dd3965 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 3a13e3ce5f801927660ce3427a47f66160236a50 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 fd51a1f5acbda856a924eb141f62f62f34eef35c 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 3438fc1313efbfa64b8984fe5f50e8053bef2102 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 49bdc1b3504edf921feaa16fc3cc68ce22be059d 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 7dc8df8b45ff2bac47ca91126b0adb0c05721fb6 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 93af1bd9b7a245be47b57ef2d500b5278fcafd18 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 9080c9b0c7de094011b2c2cb60a1f00e6c3d6ca3 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 3de20a7fc5660a6bb38cc8b7333bbad7f014bd39 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 89eb83f3195db9685324362aea25ba119443e413 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 5b34c9929d3c0ecdead6008ce36d150056bd1ee0 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 e317910d6be4fc85fd951fa6ca21dd4669da40f3 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 fb642baf849f78120f2f0ac67c7ba88868e4bfe8 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 639887fb1fc6166afd9ec857e16c1d5b9ee56d2e 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 07daa33e396d058ed8d92661d7642047032c28ec 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 1c8dc64fdd6a6b03d141356acccd4427daa0482c 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 e09b2a4af69dd9215f76453d0ee8b6129789d31b 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 462fde42db54759c9e68ed9bed787f637b8fb213 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 5ba784fc2c4f4bedb7c9753c489201dbcaff7ee2 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 4f0117ffbb8d2b8d22e574c305cdf71af0a5a824 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 f91054f6d3c9e60c5a18278b371b47e5acb146f0 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 07c1a7d9e01b6549e04dbc6f7ccd6295b11b2dbd 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 0e72a5ef6f2e9e97be3d46ac992f3f155ad12afc 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 367bffcdae60605e121eb85ea6698e3957092dfb 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 aa657b7f0c449916c4e4356f56d7bf77f564ee3f 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 9020ba6280fb2bbeec4f55d2724e82f8bc8c2d21 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 55fbeb7e280751ab4614722d9bb4941e3e82a308 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 8b6af45e2b8309e02bc6fe55b43103b3d5718b5a 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 8dc4b38fd179424b174a69dc54d249cc87ce1ed9 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 6077085cd54e0e07bbeb2e738ec9bf4b7233ff6d 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 b13c03a99f58f4810c1b8517cec8ec294c6382d6 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 2ce828ece722b68dc680fd984e70f395e164e816 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 ce38410f54151744a7eff5bc6b7d2f96049aad93 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 b976320c26d0665676b4c613637cda8d91677856 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 bc5f5927fa7e693ffcf97d6c57e531c79ddcafc6 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 defb693615ad01f098fe0d6f9e86a07510e71686 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 37ae893c9e8dca838394916a406284e9fda69275 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 20d138f7da3abe7d97be0c49ceb959f5f40ff486 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 0d808abb18d9fa54e8dd26fbc323a3f2be341ba8 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 25bed07c07e486ed80409a05a1d0f9290237b289 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 2ff75f7faebccbcd055955c17b88d5528e7d1129 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 40475904d23c239711261bc586f8447509e1683e 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 6290800f1a08d0143800e04bb9b5069c2582762a 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 961bcce95b39a6b9e2e995e5757eae6ca4a92746 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 abd222cedbe8517ef24e5bc627867e90a1bc6398 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 fa3a866abd4cc563f6e7a5c288e3a0b4eb3fc630 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 eb57549db54e3e9ddd0ab781752d916ce3da2968 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 7f16f51f3c6107d5073cfcd65981edb4e9a5e5e8 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 e5c6803d7b033e6950ee1f68d4f09edfa237c762 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 6722d97dbc14dd86122a811944037a97e3f47c66 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 39b53fa993ae1d51c41908b7a05b0604d0ea5109 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 29cf8cd73b7687a7cd1e6b8cf9c9dddad7270557 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 05e307f84d0e94411c7078fc68d3ee75c06528ac 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 c79058e942a825deb2c6e46e91c81f2b13430feb 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 d457138e97ea81aa796a60d5eb1e9acd27f0925f 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 70f060e9909060763002d5a75e21a46bed9a1462 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 e7f80b26aea3141beaf1314fa5915fe538e286ef 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 d25dd96ad0a41bdea48b792aed7d5c99d8f550d0 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 431be4003d2d6e41b213e4b05e457d3f0fca9365 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 d575a3877340b6670a619abd471e65e9322fbdef 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 662d9769cbfe93d5f600ab0218c799476b742148 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 857f7bbc9a2ebb22cf7c934e15da5b8561287c11 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 2308c0e03319a157055d5f24c1c1cc893617132e 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 aede4959bf14201a391307fccfa05baf3bb6d454 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 1c289cd500ec5fea9a76813e6a6fd8255781d0bd 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 62bbe0167b981687cc5e8013a561599a93f038b1 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 ad1b4c5465eba9a2c09fe3f4b260c93c674fff5a 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 ebab29c9f9b778c3516b5556599040b0eca6f602 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 b57a19a1dc322f1616b9f4321634e6134c4509aa 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 88cc9bff3b8d6a74eeebba28dfa0c27fa02a30d4 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 78a45d8165dd9cc670d510413fa558a1c26e40a9 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 06a8091b7cdf4da220e58e423ce6682acbe7e390 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 7ce3227b79aa6e1154a425dae9abf4827c2ada66 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 a8ce853ae186f0ef5ac73cbf4057280169884a1b 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 70df55527a771e475748caad1ea095b7afffc863 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 859c323537b2218307b64029e7ce657b74afe56f 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 782088941e1d8c5c0a4e35b1e594a075ac16d06e 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 89919f94dba39bd5cf8e041d7f6c77fdeb0dec48 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 7b4fc5c86c4eea9c3eecdb3a9786e55f53b6019a 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 9f30733265fffc7fb737af05c77c96c6adcf0c41 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 165b5521629abfd44d3c8d04c1986001ae77a60a 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 8bd20c86639c2327f60b14b2cfdd4ff719b60a11 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 a980415acee1d010d085f33462c8764616c29385 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 7ebeb6fa0a7196ca9c7fb100586ff8969d19c43d 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 95e806ba3872fb4648f9244b8bae9b1290060501 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 0b3d60a5db45c301a0913f55b0992895f817bf4b 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 c793bc34c7d17827a18c1d6f3d3824ccde24f758 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 4ed056ad74f4d489796bd09e72627c808dac2e20 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 7294965c9d643c8cb1b6d806082055c732dc0857 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 15e446d9ccec01fa99829a0757f7e0657262ffa9 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 8012926e8838f7c14652ba787fa7650036943b5d 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 700ad835c4ee656b420d474b6f6b4869605be15a 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 8678a7e5dbcc47d0aa37f82a9a66f6d0ffd40c53 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 5559898332267b5a11e5549ba54e095845a7ce8d 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 949c13632c70c6246755409a57212022a9642e9b 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 de86b19dc3cb5b1f2969862c423340323666953e 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 ae8c842406dc79518d720fe1fcf2ae15c14af7b9 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 553271b143ab730bd9b8c7e8e859f68a0eca5880 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 1162f7b09e2d11fd7ece975bc89f61c91fffc42d 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 0fcc0f0c40d309dff85e48478942addf16e39a05 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 eeb6d288868a0a0582e49597709124e883ae4b60 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 1f7a702a64c737c58320e251ebda323e4a67eb34 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 319ff60ce84947dfbca06c65b1c06f32fe1269a5 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 0aef69e7568d99d35ae141e38153ea67f5f3a271 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 e90cf7b9f0cf7d687d12056fb317de80e5d88955 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 942d807fee8eaac1274ab6bb0acbd4170c291b88 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 586fdda96534fc4978ff580710dfdbf854a6ade9 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 bb60d50bbf99df539c625033daa476d63a83c558 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 713044963de0eaf4e8e097de62ebaa7c373ffd7c 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 a8ed2c702250d1646cc5bc18aa6ad8b5b35e2a61 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 914415948d84e43aa502942038f5e76ccace8007 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 42d1edda774e510baa0f06578bb3b5257a363e54 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 c7495b08a6caf7bbb8007814476b11ee7f07f095 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 5709b0299303132748257a1a1acaf2ac6ba3dee4 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 a6c551f6bb0be0b4c2dfa70d59423a3d0f514032 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 0a35992f289f5988975c27ec9a2a5ba447aacbed 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 0630733d53a1d653216e0f03f4772da387993da7 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 825604e3d7d7122efb9bc281346188209d6ebae1 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 6b032cdb2dc0e9420543dfb0cec268c469c9621f 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 b5f638165b356532fcd2b0aaece231cf5cb502cb 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 59d2dcaf65a36da004325d30ffb69640ae0ff78a 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 2ed9f70eeddae76e3e06ee2b64b64fa73c677f22 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 60bccae38a8aec77656a8897c2932deeb29e052f 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 3b2f5e1e8cbfc2778796c0900b8c86b9d22d9c5c 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 e5ddc3171d04fb66e55e9b65927a2a9cf0cdecfb 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 f1116764efcf2211c5e671d1a77bdfb5d1f5b020 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 ea99d8f502e1308d3fd45c08d82891637d74960c 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 38d749e14eabee38497a03037a87140b093823f3 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 938969e81b97032dc06f531f7e0d9738b7623386 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 c9bd9298f14941fa8f84a21e56fc83bed9f84ba1 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 038a9d74d3c46d1d6d6c18667eaffb53552d3b20 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 ab5281ce54647b1e7767699f49b50f8d86c7842f 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 f81f7528d8847a65d06796c1ef834702bb1d334b 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 9d65d539cb6a0288dd67a2b8542c22e5aca48116 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 6d736c4e281c5006aeefe1b859a57238ee5f7239 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 24ee7603cc482a77345f3a8b0971769354849a25 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 c306ed423c6b3d273f79944bb12aface10eba2e4 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 1c82eaec323583605d1bfd6315dc3729edfa8491 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 89a6e4304ea7c8a54124a1e64e7303b04129af08 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 e45c15ed5beeb56a753bbd3f81eebefce8061a3d 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 abb2dfad7dbd785e0a46c119957ec4f5605abe37 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 5aea971cb277f48381de5b2d99bd14f397e7d3f6 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 3bdb8cb7172745eba223a06bef99d7e4098c5ce9 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 1f4efd5f5d3d3a611481fb482c9a7bfb70e5c86b 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 2f4b8d9aa62bf78ca6e2eb16d024c1c3899b9751 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 6d95a5f3d21b06824e5865bd8a96794b9901760b 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 7d941f2c2770285c0f8a2c1b55ab92f21a57aa55 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 4c2efaac2ad952ce2e50232539127453ef5935c7 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 51eff0574e17c80403f1b3e21f5995d3922ffa8a 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 f2242697a424b9b99cd263154923cf50135a2899 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 79adddfb592557fed155a97d491cfad77b33200f 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 3b66af62394225f0fd2e7d8a4e11cfa89c6c4c92 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 9bfba6cd3d09d9aa9920658d7e111697b5fd8277 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 9b3ddddaa060b489cbd75d90d5be93bf0214a6dc 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 c45bb013917686abf5667f66702f6aa472490790 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 64431e689ac60eda4d88639bbd4e1dfcb30bbf18 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 a00c3422215ba813a8e21f5dff8328a339a73bee 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 ffac5a6cfa2057c4d8dae0b7ea06edb701095e1d 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 a42d7fcba72ccfb179f56aedee3bfa9894d9f080 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 622d9533b9962e679d70ec2fe4ead095754cb503 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 c6bd30e44d3e87f8255e1ee858af633e45682c33 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 970ee443a071153529607b15f595b2a68ce807b6 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 d78a2ead4ffcc1192dac9fa107fa7baff19f7c81 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 61ae7121b7ec8adb75c34daae85a7d74030c46db 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 25f219fb1bbdd64895b3ffb468dbefc84b1abacf 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 7b231ba4d04727ab1b0f4363b703b6a213c80820 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 0026fe4ce742314a289f3a36b9ba8184a6951ccd 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 e599b00be48bdba0ee2e10c92e7bde5eb8ecd9a5 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 894d17ca75152960042137710eef330d8ca7172a 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 4f7ed609ed2f22222ef68b56acaae931f1d40513 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 6fbe5f2541c03877ee750bbc25b3ddc1097120c5 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 f2a56930c841ff96ccc37f2190fc611b4006aa5c 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 477f650bbb878e693794696141da44f2a7a24a62 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 08a7bec988ddbd7ca4df34da03671eab4a8e1e3f 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 b68b8e9fbad054488b716a9003a06a43ae289ceb 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 4d95daf8290a9d8821ea85b83f039ea8c9def1b7 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 8ab065ff296e1aeae4347eeefcdb118a4092817a 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 6515202d39d65a02816e3a8e499a8decb4488ca4 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 e12e05eb4a24b3ad9f5562c8c7518e49dd429e2e 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 ede321962d99b21e4df45fc447a3291ef9dd3815 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 a7ee9e03ddf987d99dfc15868dca88c7020d1f41 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 bbdc767ee5ef197b59b54629a81be452739b074a 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 f617cbbd510e58c4bf490f0bfc4da5367915ea82 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 85c2b241730d8582ced8761764f3c358dcb444de 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 87e219ec01da0d588674ee0e904756a82c200c2d 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 4acd8781d6148318e6b51e7840a3713ccea1de51 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 fca68fc0551f0f5d22cdc8eaa11501303cb25c6f 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 433284a386c29c45d0f2c1927244ec7eabf2eb6d 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 fc5f2413bca1018737fe82aab5e97d1e3c9be327 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 d3adb8d90f3e3f0b0753b351c67f5247a04bede4 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 9bbe0e219f9083d7eb66b2e44d168122fe0534e5 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 792f851aa2c8591dd6c0761acebe40afdda879c8 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 909a039cf7bec4c6a12eb3e84bbcf1cd95f72abc 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 a41f9d35025bf6e37c283b3b0f96257d5f465cb3 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 f7dc9c5fbbc78a3e66b28d1dd0d1beec632effc4 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 a58bb047f1ca24a24d64d24dd1fd68b1f8a8c98c 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 2243d216052d67c8514ec9dc9792f4f1a60f4bcd 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 634f18d48ae051574b6404d2fcf6087a112c4d8f 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 0ebfe5566f615438c305d52c18603d456a7cee59 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 e0db71ff7669db3ce3219c4fcbfe5c91cfb18515 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 49259455f998c0ca75f5186deec67a9142fcbe31 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 3e54b53a951469a577e3f2ba4600bebeb2631220 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 849905a830e403e06b30494336c32112a1897316 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 7f5f4b5b9005aab9a49da7ec7d1c3d2755aef9ab 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 561a2c58a2107e2a7a9ca1faaa7c429db394a3b6 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 143656ecf423296a3fd0658f161ad7ed0431d266 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 5b8eef2ff128d7e2f198172445affe2744427fd3 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 ae558b1daf0e3c50a50d1d278d5a31cc7da541e4 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 f0eafe81603b4ead53bcc66a95d39bf4a60aa69c 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 ade2e9ebdf2c7b92c4188c71864ededcde165b46 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 c9ec5552bf3564acc9e49142db13b195cc36879b 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 d4a9026d218c6c51c663b2ccc0b09625de4c6a64 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 b589b3eea1b37eac8b3056c0f0f5a579c13e7978 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 73f84aa2afb1e2cb3adf03131b94da6eeb4bf378 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 40f87770ceec3f738be2062b42f2a4eaf718adfb 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 a9a64634a93bf004dd42397030401288773afe69 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 9dab5aaa28b3d6b5f69702a4891c0238f2e142b0 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 3e37be8543f3824c7866e132915d7e69ee0d26e7 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 ced8d7efedf100f80811635e422834400c22307c 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 785a5fb3bfc261465e0d0715c67b7f485cd1820e 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 7a1d70b71ef75d034b76f932ac8a1f6cb0623b1f 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 0f7985b83e104e7b1792ecd2368b8ecaa8fc8adb 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 459a68210eb860d626f65845c93cc78961545c88 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 99e316e239977a4e6983975379434a07c9cd5d28 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 4c806c8ab9bee836bc1c65e18101361cfc0065b8 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 43a95447f8a051acaff42517dd5e25d1f2e0c7c8 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 559c8f36b7078b0d41bd1c843cb13c423295f6fb 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 35bd79446b0860674b8d65f4846deae7064ba0a0 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 e88aa3e917c109a31814fca3fc031630e52fee7f 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 7ba5cbdbe6f9b4bc6e70c91c633f2dc17016c7e2 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 ac264464ef7c245b70496d27d5d6aff0cf707f82 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