result = new ArrayList<>();
- for (final InfoItem stream : infos) {
+ for (final InfoItem stream : infoItems) {
if (stream instanceof StreamInfoItem) {
result.add(new PlayQueueItem((StreamInfoItem) stream));
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java b/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java
index b676a1a88..ccd4d13fc 100644
--- a/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java
+++ b/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java
@@ -5,7 +5,7 @@ import android.content.Context;
import org.schabi.newpipe.R;
/**
- * Created by Chrsitian Schabesberger on 28.09.17.
+ * Created by Christian Schabesberger on 28.09.17.
* KioskTranslator.java is part of NewPipe.
*
* NewPipe is free software: you can redistribute it and/or modify
diff --git a/app/src/main/java/org/schabi/newpipe/util/ListHelper.java b/app/src/main/java/org/schabi/newpipe/util/ListHelper.java
index 0c840f8c3..5f8fb5898 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ListHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ListHelper.java
@@ -141,7 +141,7 @@ public final class ListHelper {
final SharedPreferences preferences
= PreferenceManager.getDefaultSharedPreferences(context);
- // Load the prefered resolution otherwise the best available
+ // Load the preferred resolution otherwise the best available
String resolution = preferences != null
? preferences.getString(context.getString(key), context.getString(value))
: context.getString(R.string.best_resolution_key);
@@ -161,7 +161,7 @@ public final class ListHelper {
*
* @param defaultResolution the default resolution to look for
* @param bestResolutionKey key of the best resolution
- * @param defaultFormat the default fomat to look for
+ * @param defaultFormat the default format to look for
* @param videoStreams list of the video streams to check
* @return index of the default resolution&format
*/
@@ -351,7 +351,7 @@ public final class ListHelper {
* @param targetResolution the resolution to look for
* @param targetFormat the format to look for
* @param videoStreams the available video streams
- * @return the index of the prefered video stream
+ * @return the index of the preferred video stream
*/
static int getVideoStreamIndex(final String targetResolution, final MediaFormat targetFormat,
final List videoStreams) {
@@ -413,7 +413,7 @@ public final class ListHelper {
* @param context Android app context
* @param defaultResolution the default resolution
* @param videoStreams the list of video streams to check
- * @return the index of the prefered video stream
+ * @return the index of the preferred video stream
*/
private static int getDefaultResolutionWithDefaultFormat(final Context context,
final String defaultResolution,
diff --git a/app/src/main/java/us/shandian/giga/get/DownloadRunnableFallback.java b/app/src/main/java/us/shandian/giga/get/DownloadRunnableFallback.java
index 9cb40cb32..eed5db463 100644
--- a/app/src/main/java/us/shandian/giga/get/DownloadRunnableFallback.java
+++ b/app/src/main/java/us/shandian/giga/get/DownloadRunnableFallback.java
@@ -21,7 +21,7 @@ import static us.shandian.giga.get.DownloadMission.ERROR_HTTP_FORBIDDEN;
* Single-threaded fallback mode
*/
public class DownloadRunnableFallback extends Thread {
- private static final String TAG = "DownloadRunnableFallbac";
+ private static final String TAG = "DownloadRunnableFallback";
private final DownloadMission mMission;
diff --git a/app/src/test/java/org/schabi/newpipe/util/ListHelperTest.java b/app/src/test/java/org/schabi/newpipe/util/ListHelperTest.java
index 8cd99cc04..d126f8473 100644
--- a/app/src/test/java/org/schabi/newpipe/util/ListHelperTest.java
+++ b/app/src/test/java/org/schabi/newpipe/util/ListHelperTest.java
@@ -205,7 +205,7 @@ public class ListHelperTest {
assertEquals(MediaFormat.M4A, stream.getFormat());
// Adding a new format and bitrate. Adding another stream will have no impact since
- // it's not a prefered format.
+ // it's not a preferred format.
testList.add(new AudioStream("", MediaFormat.WEBMA, /**/ 192));
stream = testList.get(ListHelper.getHighestQualityAudioIndex(MediaFormat.MP3, testList));
assertEquals(192, stream.average_bitrate);
From 2aed04a8c244e9186e2a152bb52b72d68262a520 Mon Sep 17 00:00:00 2001
From: minsk21
Date: Tue, 1 Dec 2020 12:33:54 +0000
Subject: [PATCH 005/182] Translated using Weblate (Belarusian)
Currently translated at 83.7% (510 of 609 strings)
---
app/src/main/res/values-be/strings.xml | 66 +++++++++++++++++++++++---
1 file changed, 60 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 7c8b37d5d..812a1a815 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -255,7 +255,7 @@
Прыкладанне для прайгравання гэтага файла не ўстаноўлена
Аб NewPipe
Налады
- Аб дадатку
+ А прыладзе
Іншыя ліцэнзіі
© %1$s %2$s пад ліцэнзіяй %3$s
Не атрымалася загрузіць ліцэнзію
@@ -314,7 +314,7 @@
Выдаліць
Падрабязнасці
Налады аўдыё
- Зацісніце, каб дадаць у чаргу
+ Утрымлівайце, каб дадаць у чаргу
Пачаць адсюль у плэеры
Пачаць адсюль у фоне
Пачаць адсюль у акне
@@ -402,7 +402,7 @@
Мяняць гучнасць плэера жэстам
Жэст яркасці
Мяняць яркасць плэера жэстам
- Абнаўлення
+ Абнаўленні
Файл выдалены
Апавяшчэнне аб абнаўленні
Апавяшчэння аб новай версіі NewPipe
@@ -476,7 +476,7 @@
Скончылася вольнае месца на прыладзе
Прагрэс страчаны, так як файл быў выдалены
Час злучэння выйшла
- Вы ўпэўненыя\?
+ Вы ўпэўнены\?
Абмежаваць чаргу загрузкі
Толькі адна адначасовая загрузка
Пачаць загрузку
@@ -492,8 +492,8 @@
Выдаліць ўсе пазіцыі прайгравання
Абмежаваны рэжым YouTube
Падтрымліваюцца толькі адрасы URL HTTPS
- Дадаць інстанцыю
- Інстанцыі PeerTube
+ Дадаць экзэмпляр
+ Экзэмпляры PeerTube
Змяніце папкі загрузкі, каб змены ўступілі ў сілу
Вынікі для: %s
Мініяцюра відэа ў 1:1
@@ -502,4 +502,58 @@
Кнопка трэцяга дзеяння
Кнопка другога дзеяння
Кнопка першага дзеяння
+ Групы каналаў
+ Як у сістэме
+ Мова прылады
+ Выберыце экзэмпляр
+ Выдалена %1$d загрузак
+ Выдаліць загружаныя файлы
+ Арыгінальныя тэксты з сэрвісаў будуць бачны ў ленце элементаў
+ Ачысціце cookie, якія NewPipe захоўвае пры рашэнні reCAPTCHA
+ Экзэмпляр ужо існуе
+ Немагчыма праверыць экзэмпляр
+ Увесці URL экзэмпляра
+ Абярыце любімыя экзэмпляры PeerTube
+ Актыўны плэер быў зменены
+ Змена плэера можа замяніць вашу чаргу
+ Запытаць, перш чым ачысціць чаргу
+ Ніколі
+ Толькі па Wi-Fi
+ Паказаць арыгінальны час на элементах
+ Уключыць гук
+ Цішына
+ Дадаць у чаргу
+ Даданае у чаргу
+ Чарга прайгравання
+ Найбольш папулярнае
+ Лакальнае
+ Нядаўна дададзенае
+ Няма закладак у плейлісце
+ Абярыце плэйліст
+ Кіёск па змаўчанні
+ Так
+ Націсніце \"Так\" калі вырашана
+ ∞ відэа
+ 100+ відэа
+ Багрэпарт на GitHub
+ Скапіруйце адфарматаваны багрэпарт
+ Дайце дазвол на адлюстраванне паверх іншых праграм
+ Дапамога
+ Выдаліць усе пазіцыі прайгравання\?
+ Выдаліць пазіцыі прайгравання
+ Ачысціць reCAPTCHA cookies
+ reCAPTCHA cookies былі ачышчаны
+ Выканаўцы
+ Альбомы
+ Песні
+ Відэа
+ Аўтаматычная чарга
+ Працягласць перамоткі ўперад/назад
+ Каляровыя апавяшчэнні
+ Нічога
+ Буферызацыя
+ Ператасаваць
+ Паўтор
+ Кнопка пятага дзеяння
+ Паведамленні
\ No newline at end of file
From ba857b5ef7b9043b17405382d2516e75cac56544 Mon Sep 17 00:00:00 2001
From: Gontzal Manuel Pujana Onaindia
Date: Tue, 1 Dec 2020 19:45:03 +0000
Subject: [PATCH 006/182] Translated using Weblate (Basque)
Currently translated at 25.0% (10 of 40 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/eu/
---
fastlane/metadata/android/eu/changelogs/959.txt | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 fastlane/metadata/android/eu/changelogs/959.txt
diff --git a/fastlane/metadata/android/eu/changelogs/959.txt b/fastlane/metadata/android/eu/changelogs/959.txt
new file mode 100644
index 000000000..97bf7c9b7
--- /dev/null
+++ b/fastlane/metadata/android/eu/changelogs/959.txt
@@ -0,0 +1,3 @@
+Akatsen txostena ireki ostean zeuden hutsegite amaigabeak konpondu dira.
+NewPipekin automatikoki ireki daitezkeen PeerTube instantziak eguneratu dira.
+Itzulpenak eguneratuta.
From 794a14e76ccb152da36f5740d5f38f6e6d517581 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=93scar=20Fern=C3=A1ndez=20D=C3=ADaz?=
Date: Tue, 1 Dec 2020 09:24:50 +0000
Subject: [PATCH 007/182] Translated using Weblate (Spanish)
Currently translated at 27.5% (11 of 40 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/es/
---
fastlane/metadata/android/es/changelogs/952.txt | 4 ++--
fastlane/metadata/android/es/changelogs/959.txt | 3 +++
2 files changed, 5 insertions(+), 2 deletions(-)
create mode 100644 fastlane/metadata/android/es/changelogs/959.txt
diff --git a/fastlane/metadata/android/es/changelogs/952.txt b/fastlane/metadata/android/es/changelogs/952.txt
index 4b976c298..940121285 100644
--- a/fastlane/metadata/android/es/changelogs/952.txt
+++ b/fastlane/metadata/android/es/changelogs/952.txt
@@ -1,7 +1,7 @@
Mejorado
• Reproducción automática disponible para todos los servicios (no sólo para YouTube)
-Reparado
+Arreglado
• Streams relacionados, gracias al soporte de las nuevas continuaciones de YouTube
• Videos con restricción de edad en YouTube
-• [Android TV] Foco retenido
+• [Android TV] Superposición de los destacados de foco persistente
diff --git a/fastlane/metadata/android/es/changelogs/959.txt b/fastlane/metadata/android/es/changelogs/959.txt
new file mode 100644
index 000000000..4ffc757ef
--- /dev/null
+++ b/fastlane/metadata/android/es/changelogs/959.txt
@@ -0,0 +1,3 @@
+Arreglado un bucle interminable de caídas después de abrir el reportador de errores.
+Lista actualizada de instancias de PeerTube que pueden ser abiertas automáticamente por NewPipe.
+Traducciones actualizadas.
From adff0d199d9e644cb44eb4d3d4c5d56961df7582 Mon Sep 17 00:00:00 2001
From: Ldm Public
Date: Tue, 1 Dec 2020 22:28:43 +0000
Subject: [PATCH 008/182] Translated using Weblate (French)
Currently translated at 100.0% (609 of 609 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 997b58305..4b04865bd 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -263,8 +263,8 @@
Chargement du contenu demandé
Importer la base de données
Exporter la base de données
- Remplace votre historique et vos abonnements actuels
- Exporte l’historique, les abonnements et les listes de lecture
+ Remplace votre historique, vos abonnements, vos listes de lecture et (en option) vos paramètres
+ Exporte l’historique, les abonnements, les listes de lecture et les paramètres
Exporté
Importé
Fichier ZIP non valide
From 55bdb1f47ac3bae8627df1039a369a020665d709 Mon Sep 17 00:00:00 2001
From: x
Date: Tue, 1 Dec 2020 21:02:32 +0000
Subject: [PATCH 009/182] Translated using Weblate (Italian)
Currently translated at 100.0% (609 of 609 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 e95fcc258..36be8652a 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -264,8 +264,8 @@
Caricamento del contenuto richiesto
Importa database
Esporta database
- Sovrascrive la cronologia e le iscrizioni attuali
- Esporta la cronologia, le iscrizioni e le playlist
+ Sovrascrive la cronologia, gli abbonamenti, le playlist e (facoltativamente) le impostazioni correnti
+ Esporta cronologia, iscrizioni, playlist e impostazioni
Esportazione completa
Importazione completa
Nessun file ZIP valido
From 734af457f318bacc70dc0f3e94db8977388ed33c Mon Sep 17 00:00:00 2001
From: Marian Hanzel
Date: Tue, 1 Dec 2020 20:32:13 +0000
Subject: [PATCH 010/182] Translated using Weblate (Slovak)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-sk/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index e40fc0606..e08ab1b7b 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -231,8 +231,8 @@
Prepnúť na Video
Importovať databázu
Exportovať databázu
- Prepíše aktuálnu históriu pozretí a odberov
- Exportovať históriu, odbery a zoznamy skladieb
+ Prepíše aktuálnu históriu, odbery, zoznamy skladieb a (voliteľne aj) nastavenia
+ Exportovať históriu, odbery, zoznamy skladieb a nastavenia
Nepodarilo sa prehrať tento stream
Pri prehrávaní došlo k chybe a nemožno pokračovať
Zotavovanie po chybe v prehrávaní
From 3e4a7a19cc34f0c8f50c13aac381d2e84e5865aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Tue, 1 Dec 2020 20:23:43 +0000
Subject: [PATCH 011/182] Translated using Weblate (Turkish)
Currently translated at 100.0% (609 of 609 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 451d16a67..bc2b4ba5d 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -260,8 +260,8 @@
İstenen içerik yükleniyor
Veri tabanını içe aktar
Veri tabanını dışa aktar
- Geçerli geçmişinizi ve aboneliklerinizi geçersiz kılar
- Geçmişi, abonelikleri ve oynatma listelerini dışa aktar
+ Geçerli geçmişinizi, aboneliklerinizi, oynatma listelerinizi ve (isteğe bağlı olarak) ayarlarınızı geçersiz kılar
+ Geçmişi, abonelikleri, oynatma listelerini ve ayarları dışa aktar
Dışa aktarıldı
İçe aktarıldı
Geçerli ZIP dosyası yok
From 275a75ebaab665f69f9e1587db9a2827fd3faeed Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Tue, 1 Dec 2020 21:09:29 +0000
Subject: [PATCH 012/182] Translated using Weblate (Hebrew)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-he/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index b080e9c9c..8da1918d3 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -268,7 +268,7 @@
תמונות מטמון נמחקו
ניקוי מטמון נתוני העל
מטמון נתוני העל התרוקן
- ייצוא היסטוריה, מינויים ורשימות נגינה
+ ייצוא היסטוריה, מינויים, רשימות נגינה והגדרות
מחיקת היסטוריית הצפייה
היסטוריית הצפייה נמחקה.
מחיקת היסטוריית החיפוש
@@ -336,7 +336,7 @@
להמשיך תור נגינה סופית (בלתי מחזורית) על ידי הוספת תזרים קשור
החלפת כיווניות
העברה לראשי
- משכתב את ההיסטוריה והמינויים הנוכחיים שלך
+ משכתב את ההיסטוריה, המינויים ו(אולי גם) את ההגדרות הנוכחיים שלך
מחיקת היסטוריית התזרימים שהתנגנו ומיקומי הנגינה
ערוצים
רשימות נגינה
From 93393f5dff035e98fa2d63be12fe555e296f8ba2 Mon Sep 17 00:00:00 2001
From: Ajeje Brazorf
Date: Tue, 1 Dec 2020 20:49:33 +0000
Subject: [PATCH 013/182] Translated using Weblate (Sardinian)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-sc/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml
index ea08b799b..2127434b6 100644
--- a/app/src/main/res/values-sc/strings.xml
+++ b/app/src/main/res/values-sc/strings.xml
@@ -443,8 +443,8 @@
Cheres iscantzellare totu sa cronologia de sos pompiados\?
Iscantzellat sa cronologia de sos cuntenutos riproduidos e sas positziones de riprodutzione
Isbòida sa cronologia de sos pompiados
- Esporta sa cronologia, sos abbonamentos e sas iscalitas
- Subraiscriet sa cronologia e sos abbonamentos atuales tuos
+ Esporta sa cronologia, sos abbonamentos, sas iscalitas e sas impostatziones
+ Subraiscriet sa cronologia, sos abbonamentos, sas iscalita e (optzionalmente) sas impostatziones tuas atuales
Esporta sa base de datos
Importa sa base de datos
Cola a sa modalidade printzipale
From b52924048c1c6a99b87dfc25695797b8e1b4c5be Mon Sep 17 00:00:00 2001
From: x
Date: Tue, 1 Dec 2020 20:54:34 +0000
Subject: [PATCH 014/182] Translated using Weblate (Italian)
Currently translated at 42.5% (17 of 40 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
---
fastlane/metadata/android/it/changelogs/770.txt | 4 ++++
fastlane/metadata/android/it/changelogs/830.txt | 1 +
fastlane/metadata/android/it/changelogs/850.txt | 1 +
fastlane/metadata/android/it/changelogs/860.txt | 7 +++++++
fastlane/metadata/android/it/changelogs/870.txt | 2 ++
fastlane/metadata/android/it/changelogs/910.txt | 1 +
fastlane/metadata/android/it/changelogs/956.txt | 1 +
7 files changed, 17 insertions(+)
create mode 100644 fastlane/metadata/android/it/changelogs/770.txt
create mode 100644 fastlane/metadata/android/it/changelogs/830.txt
create mode 100644 fastlane/metadata/android/it/changelogs/850.txt
create mode 100644 fastlane/metadata/android/it/changelogs/860.txt
create mode 100644 fastlane/metadata/android/it/changelogs/870.txt
create mode 100644 fastlane/metadata/android/it/changelogs/910.txt
create mode 100644 fastlane/metadata/android/it/changelogs/956.txt
diff --git a/fastlane/metadata/android/it/changelogs/770.txt b/fastlane/metadata/android/it/changelogs/770.txt
new file mode 100644
index 000000000..5c06fb4e0
--- /dev/null
+++ b/fastlane/metadata/android/it/changelogs/770.txt
@@ -0,0 +1,4 @@
+Modifiche su 0.17.2
+
+Correzionw
+• Risolto il problema con nessun video disponibile
diff --git a/fastlane/metadata/android/it/changelogs/830.txt b/fastlane/metadata/android/it/changelogs/830.txt
new file mode 100644
index 000000000..b623a5554
--- /dev/null
+++ b/fastlane/metadata/android/it/changelogs/830.txt
@@ -0,0 +1 @@
+Aggiornato SoundCloud client_id per risolvere i problemi di SoundCloud.
diff --git a/fastlane/metadata/android/it/changelogs/850.txt b/fastlane/metadata/android/it/changelogs/850.txt
new file mode 100644
index 000000000..0bbe00f36
--- /dev/null
+++ b/fastlane/metadata/android/it/changelogs/850.txt
@@ -0,0 +1 @@
+In questa versione è stata aggiornata la versione del sito web di YouTube. La vecchia versione del sito web verrà interrotta a Marzo e quindi è necessario aggiornare NewPipe.
diff --git a/fastlane/metadata/android/it/changelogs/860.txt b/fastlane/metadata/android/it/changelogs/860.txt
new file mode 100644
index 000000000..6a0973a27
--- /dev/null
+++ b/fastlane/metadata/android/it/changelogs/860.txt
@@ -0,0 +1,7 @@
+Migliorato
+• Salvare e ripristinare se intonazione e tempo sono sganciati o meno
+• Supporta il ritaglio del display nel lettore
+• Visualizzazione rotonda e numero di iscritti
+• YouTube ottimizzato per utilizzare meno dati
+
+In questa versione sono stati corretti più di 15 errori relativi a YouTube.
diff --git a/fastlane/metadata/android/it/changelogs/870.txt b/fastlane/metadata/android/it/changelogs/870.txt
new file mode 100644
index 000000000..2a291f726
--- /dev/null
+++ b/fastlane/metadata/android/it/changelogs/870.txt
@@ -0,0 +1,2 @@
+Questa è una versione hotfix che aggiorna NewPipe per consentire nuovamente l'utilizzo di SoundCloud senza grossi problemi.
+L'API v2 di SoundCloud viene ora utilizzata nell'estrattore e il rilevamento di ID client non validi è stato migliorato.
diff --git a/fastlane/metadata/android/it/changelogs/910.txt b/fastlane/metadata/android/it/changelogs/910.txt
new file mode 100644
index 000000000..4fbccfdf0
--- /dev/null
+++ b/fastlane/metadata/android/it/changelogs/910.txt
@@ -0,0 +1 @@
+Corretta la migrazione del database che in alcuni rari casi impediva l'avvio di NewPipe.
diff --git a/fastlane/metadata/android/it/changelogs/956.txt b/fastlane/metadata/android/it/changelogs/956.txt
new file mode 100644
index 000000000..7c698fe33
--- /dev/null
+++ b/fastlane/metadata/android/it/changelogs/956.txt
@@ -0,0 +1 @@
+[YouTube] Risolto un arresto anomalo durante il caricamento di qualsiasi video
From 124b7eefb5e748315de17f22512724eaff0c74ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9rgio=20Marques?=
Date: Thu, 3 Dec 2020 10:00:57 +0000
Subject: [PATCH 015/182] Translated using Weblate (Portuguese)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-pt/strings.xml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 8a94cc436..6f9e19ab7 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -16,8 +16,8 @@
rotação
Utilizar reprodutor de vídeo externo
Utilizar reprodutor de áudio externo
- Pasta para os vídeos
- Os ficheiros de vídeo descarregados serão armazenados aqui
+ Pasta para os ficheiros de vídeo
+ Os ficheiros de vídeo descarregados serão guardados aqui
Escolha a pasta para colocar os ficheiros de vídeo
Resolução padrão
Reproduzir no Kodi
@@ -46,7 +46,7 @@
Utilizar Tor
(Experimental) Forçar tráfego via Tor para aumentar a privacidade (ainda não é suportada a emissão de vídeos).
Pasta para ficheiros de áudio
- Os ficheiros de áudio descarregados serão armazenados aqui
+ Os ficheiros de áudio descarregados serão guardados aqui
Escolha a pasta para colocar os ficheiros de áudio
Não foi possível criar a pasta \'%1$s\'
Pasta \'%1$s\' criada com sucesso
@@ -165,8 +165,8 @@
Novidades
Histórico de pesquisa
Guardar termos de pesquisa localmente
- Ver histórico
- Manter histórico dos vídeos vistos
+ Histórico de visualizações
+ Manter histórico dos vídeos visualizados
Continuar reprodução
Continuar reprodução após interrupções (ex. chamadas)
Reprodutor
From 3d38add4b47ee00ed2ca1adb8135655f46ec0a0f Mon Sep 17 00:00:00 2001
From: ssantos
Date: Wed, 2 Dec 2020 16:18:17 +0000
Subject: [PATCH 016/182] Translated using Weblate (Portuguese)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-pt/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 6f9e19ab7..503163999 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -237,8 +237,8 @@
Alternar orientação
Importar base de dados
Exportar base de dados
- Substitui o histórico e as subscrições atuais
- Exportar histórico, subscrições e listas de reprodução
+ Substitui o seu histórico actual, subscrições, listas de reprodução e (opcionalmente) definições
+ Exportar histórico, assinaturas, listas de reprodução e configurações
Na fila do reprodutor em segundo plano
Na fila do reprodutor popup
Mudar para segundo plano
From 1f4a4ea09f6333aca3020d1ab7783d960e666fae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9rgio=20Marques?=
Date: Thu, 3 Dec 2020 10:03:45 +0000
Subject: [PATCH 017/182] Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-pt-rPT/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 3419c97e7..3295266ea 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -50,7 +50,7 @@
Devido às restrições de ExoPlayer, a duração da pesquisa foi definida para %d segundos
Sobrescrever
Sem som
- Ver histórico
+ Histórico de visualizações
- %s visualização
- %s visualizações
From 3653afbcc47271fdf1f09d0da5a05e2e0f0528e1 Mon Sep 17 00:00:00 2001
From: ssantos
Date: Wed, 2 Dec 2020 16:17:07 +0000
Subject: [PATCH 018/182] Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-pt-rPT/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 3295266ea..cbd1c4551 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -398,7 +398,7 @@
Colocar vídeo seguinte na fila
Defina as suas instâncias favoritas PeerTube
Importar/exportar
- Exportar histórico, subscrições e listas de reprodução
+ Exportar histórico, assinaturas, listas de reprodução e configurações
Melhor resolução
Selecione um canal
Escolher navegador
@@ -471,7 +471,7 @@
Pendente
Importado
Automático
- Substitui o histórico e as subscrições atuais
+ Substitui o seu histórico actual, subscrições, listas de reprodução e (opcionalmente) definições
Popup
k
Não foi possível criar a pasta \'%1$s\'
From 4bb67c634fccf81771e7f3f8acebd5776faa99d3 Mon Sep 17 00:00:00 2001
From: hdringanioooboo
Date: Fri, 4 Dec 2020 02:24:17 +0000
Subject: [PATCH 019/182] Translated using Weblate (Japanese)
Currently translated at 99.8% (608 of 609 strings)
---
app/src/main/res/values-ja/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 675d299a4..0603a6dbd 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -228,8 +228,8 @@
一度だけ
データベースをインポート
データベースをエクスポート
- 既存の履歴と登録リストは上書きされます
- 履歴や登録リスト、プレイリストをエクスポートします
+ 既存の履歴、登録リスト、プレイリストおよび(任意の)設定は上書きされます
+ 履歴、登録リスト、プレイリストおよび設定をエクスポートします
再生エラーからの回復中
外部プレイヤーは、これらのタイプのリンクをサポートしていません
無効なURL
From 7bce58876775e5347d66af16e921e5eb149e0621 Mon Sep 17 00:00:00 2001
From: Kaede
Date: Fri, 4 Dec 2020 02:20:09 +0000
Subject: [PATCH 020/182] Translated using Weblate (Japanese)
Currently translated at 99.8% (608 of 609 strings)
---
app/src/main/res/values-ja/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 0603a6dbd..570ed91f5 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -93,7 +93,7 @@
このサーバーには対応していません
ファイルが既に存在します
URL の形式が正しくないか、通信が利用できません
- NewPipeで保存中
+ NewPipe ダウンロード中
タップして詳細を表示
お待ちください…
クリップボードにコピーしました
@@ -324,11 +324,11 @@
すべての検索履歴を削除しますか?
このファイル/コンテンツはありません
- - %s人が登録しています
+ - チャンネル登録者数 %s人
再生なし
- - 再生回数 %s再生
+ - 再生回数 %s回
1 つのアイテムが削除されました。
支援する
From f7f00293cc5a7b37c10c29bb80e483a8091bc766 Mon Sep 17 00:00:00 2001
From: XiangRongLin <41164160+XiangRongLin@users.noreply.github.com>
Date: Tue, 1 Dec 2020 20:12:42 +0100
Subject: [PATCH 021/182] Extract export database logic into own class
- Separate it from the UI.
- Add happy path unit test.
---
.../settings/ContentSettingsFragment.java | 33 +++------
.../settings/ContentSettingsManager.kt | 45 ++++++++++++
.../settings/ContentSettingsManagerTest.kt | 72 +++++++++++++++++++
app/src/test/resources/settings/newpipe.db | 1 +
.../test/resources/settings/newpipe.settings | 0
checkstyle-suppressions.xml | 2 +-
6 files changed, 127 insertions(+), 26 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/settings/ContentSettingsManager.kt
create mode 100644 app/src/test/java/org/schabi/newpipe/settings/ContentSettingsManagerTest.kt
create mode 100644 app/src/test/resources/settings/newpipe.db
create mode 100644 app/src/test/resources/settings/newpipe.settings
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 b0425ebfa..6ef2f732e 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
@@ -30,19 +30,15 @@ import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.FilePickerActivityHelper;
import org.schabi.newpipe.util.ZipHelper;
-import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
import java.util.zip.ZipFile;
-import java.util.zip.ZipOutputStream;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
@@ -50,6 +46,8 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
private static final int REQUEST_IMPORT_PATH = 8945;
private static final int REQUEST_EXPORT_PATH = 30945;
+ private ContentSettingsManager manager;
+
private File databasesDir;
private File newpipeDb;
private File newpipeDbJournal;
@@ -131,6 +129,8 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
newpipeSettings = new File(homeDir + "/databases/newpipe.settings");
newpipeSettings.delete();
+ manager = new ContentSettingsManager(homeDir);
+
addPreferencesFromResource(R.xml.content_settings);
final Preference importDataPreference = findPreference(getString(R.string.import_data));
@@ -212,33 +212,16 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
//checkpoint before export
NewPipeDatabase.checkpoint();
- try (ZipOutputStream outZip = new ZipOutputStream(new BufferedOutputStream(
- new FileOutputStream(path)))) {
- ZipHelper.addFileToZip(outZip, newpipeDb.getPath(), "newpipe.db");
+ final SharedPreferences preferences = PreferenceManager
+ .getDefaultSharedPreferences(requireContext());
+ manager.exportDatabase(preferences, path);
- saveSharedPreferencesToFile(newpipeSettings);
- ZipHelper.addFileToZip(outZip, newpipeSettings.getPath(),
- "newpipe.settings");
- }
-
- Toast.makeText(getContext(), R.string.export_complete_toast, Toast.LENGTH_SHORT)
- .show();
+ Toast.makeText(getContext(), R.string.export_complete_toast, Toast.LENGTH_SHORT).show();
} catch (final Exception e) {
onError(e);
}
}
- private void saveSharedPreferencesToFile(final File dst) {
- try (ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(dst))) {
- final SharedPreferences pref
- = PreferenceManager.getDefaultSharedPreferences(requireContext());
- output.writeObject(pref.getAll());
- output.flush();
- } catch (final IOException e) {
- e.printStackTrace();
- }
- }
-
private void importDatabase(final String filePath) {
// check if file is supported
try (ZipFile zipFile = new ZipFile(filePath)) {
diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsManager.kt b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsManager.kt
new file mode 100644
index 000000000..b0ea89993
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsManager.kt
@@ -0,0 +1,45 @@
+package org.schabi.newpipe.settings
+
+import android.content.SharedPreferences
+import org.schabi.newpipe.util.ZipHelper
+import java.io.BufferedOutputStream
+import java.io.File
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.ObjectOutputStream
+import java.lang.Exception
+import java.util.zip.ZipOutputStream
+
+class ContentSettingsManager(
+ private val newpipeDb: File,
+ private val newpipeSettings: File
+) {
+
+ constructor(homeDir: String) : this(
+ File("$homeDir/databases/newpipe.db"),
+ File("$homeDir/databases/newpipe.settings")
+ )
+
+ /**
+ * Exports given [SharedPreferences] to the file in given outputPath.
+ * It also creates the file.
+ */
+ @Throws(Exception::class)
+ fun exportDatabase(preferences: SharedPreferences, outputPath: String) {
+ ZipOutputStream(BufferedOutputStream(FileOutputStream(outputPath)))
+ .use { outZip ->
+ ZipHelper.addFileToZip(outZip, newpipeDb.path, "newpipe.db")
+
+ try {
+ ObjectOutputStream(FileOutputStream(newpipeSettings)).use { output ->
+ output.writeObject(preferences.all)
+ output.flush()
+ }
+ } catch (e: IOException) {
+ e.printStackTrace()
+ }
+
+ ZipHelper.addFileToZip(outZip, newpipeSettings.path, "newpipe.settings")
+ }
+ }
+}
diff --git a/app/src/test/java/org/schabi/newpipe/settings/ContentSettingsManagerTest.kt b/app/src/test/java/org/schabi/newpipe/settings/ContentSettingsManagerTest.kt
new file mode 100644
index 000000000..9809fd5fc
--- /dev/null
+++ b/app/src/test/java/org/schabi/newpipe/settings/ContentSettingsManagerTest.kt
@@ -0,0 +1,72 @@
+package org.schabi.newpipe.settings
+
+import android.content.SharedPreferences
+import org.junit.Assert
+import org.junit.Assume
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Suite
+import org.mockito.Mockito
+import org.mockito.Mockito.`when`
+import org.mockito.junit.MockitoJUnitRunner
+import org.schabi.newpipe.settings.ContentSettingsManagerTest.ExportTest
+import java.io.File
+import java.io.ObjectInputStream
+import java.util.zip.ZipFile
+
+@RunWith(Suite::class)
+@Suite.SuiteClasses(ExportTest::class)
+class ContentSettingsManagerTest {
+
+ @RunWith(MockitoJUnitRunner::class)
+ class ExportTest {
+
+ private lateinit var preferences: SharedPreferences
+ private lateinit var newpipeDb: File
+ private lateinit var newpipeSettings: File
+
+ @Before
+ fun beforeClass() {
+
+ val dbPath = javaClass.classLoader?.getResource("settings/newpipe.db")?.file
+ val settingsPath = javaClass.classLoader?.getResource("settings/newpipe.settings")?.path
+ Assume.assumeNotNull(dbPath)
+ Assume.assumeNotNull(settingsPath)
+
+ newpipeDb = File(dbPath!!)
+ newpipeSettings = File(settingsPath!!)
+ }
+
+ @Before
+ fun before() {
+ preferences = Mockito.mock(SharedPreferences::class.java, Mockito.withSettings().stubOnly())
+ }
+
+ @Test
+ fun `The settings must be exported successfully in the correct format`() {
+ val expectedPreferences = mapOf("such pref" to "much wow")
+ `when`(preferences.all).thenReturn(expectedPreferences)
+
+ val manager = ContentSettingsManager(newpipeDb, newpipeSettings)
+
+ val output = File.createTempFile("newpipe_", "")
+ manager.exportDatabase(preferences, output.absolutePath)
+
+ val zipFile = ZipFile(output.absoluteFile)
+ val entries = zipFile.entries().toList()
+ Assert.assertEquals(2, entries.size)
+
+ zipFile.getInputStream(entries.first { it.name == "newpipe.db" }).use { actual ->
+ newpipeDb.inputStream().use { expected ->
+ Assert.assertEquals(expected.reader().readText(), actual.reader().readText())
+ }
+ }
+
+ zipFile.getInputStream(entries.first { it.name == "newpipe.settings" }).use { actual ->
+ val actualPreferences = ObjectInputStream(actual).readObject()
+ Assert.assertEquals(expectedPreferences, actualPreferences)
+ }
+ }
+ }
+}
diff --git a/app/src/test/resources/settings/newpipe.db b/app/src/test/resources/settings/newpipe.db
new file mode 100644
index 000000000..cd3fc4717
--- /dev/null
+++ b/app/src/test/resources/settings/newpipe.db
@@ -0,0 +1 @@
+such db much wow
\ No newline at end of file
diff --git a/app/src/test/resources/settings/newpipe.settings b/app/src/test/resources/settings/newpipe.settings
new file mode 100644
index 000000000..e69de29bb
diff --git a/checkstyle-suppressions.xml b/checkstyle-suppressions.xml
index add17d42d..0a5190b29 100644
--- a/checkstyle-suppressions.xml
+++ b/checkstyle-suppressions.xml
@@ -17,7 +17,7 @@
+ lines="227,245"/>
Date: Thu, 3 Dec 2020 22:34:48 +0000
Subject: [PATCH 022/182] Translated using Weblate (Spanish)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-es/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index d5d633a29..fe16a89bc 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -265,8 +265,8 @@
Cargando contenido solicitado
Importar base de datos
Exportar base de datos
- Anula su historial actual y suscripciones
- Exportar historial, suscripciones y listas de reproducción
+ Anula su historial actual, suscripciones, listas de reproducción y (opcionalmente) ajustes
+ Exportar historial, suscripciones, listas de reproducción y ajustes
Exportado
Importado
Archivo ZIP no válido
From a2490a573054d8453fbec02cbd029e9978d693c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81cs=20Zolt=C3=A1n?=
Date: Fri, 4 Dec 2020 08:12:28 +0000
Subject: [PATCH 023/182] Translated using Weblate (Hungarian)
Currently translated at 68.6% (418 of 609 strings)
---
app/src/main/res/values-hu/strings.xml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index ee11cd5c2..01f7e8d83 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -459,4 +459,8 @@
Lejátszási pozíciók törlése
Találatok a következőre: %s
Bélyegkép méretezése 1:1 arányra
+ Értesítés színezése
+ Semmi
+ Keverés
+ Ismétlés
\ No newline at end of file
From c0377c7ebfd3ecbff06339d457cc5a44d4f22136 Mon Sep 17 00:00:00 2001
From: xxkfqz
Date: Thu, 3 Dec 2020 12:50:27 +0000
Subject: [PATCH 024/182] Translated using Weblate (Russian)
Currently translated at 100.0% (609 of 609 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 65dfa46c0..2cad538f5 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -282,8 +282,8 @@
Файл
Импорт данных
Экспорт данных
- Текущие подписки, плейлисты и история будут заменены
- Экспорт подписок, плейлистов и истории
+ Текущие подписки, плейлисты, история и (опционально) настройки будут заменены
+ Экспорт подписок, плейлистов, истории и настроек
Папка не существует
Папка или источник контента не существуют
Файл не существует или нет разрешения на его чтение или запись
From d1b117d07cd68893336e6ffe3c81a105772a6464 Mon Sep 17 00:00:00 2001
From: Kaede
Date: Fri, 4 Dec 2020 02:28:04 +0000
Subject: [PATCH 025/182] Translated using Weblate (Japanese)
Currently translated at 99.8% (608 of 609 strings)
---
app/src/main/res/values-ja/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 570ed91f5..e9253598d 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -176,7 +176,7 @@
プレイリスト
元に戻す
すべて再生
- NewPipeの通知
+ NewPipe の通知
[不明]
動画の再生ができませんでした
回復不能な再生エラーが発生しました
@@ -228,8 +228,8 @@
一度だけ
データベースをインポート
データベースをエクスポート
- 既存の履歴、登録リスト、プレイリストおよび(任意の)設定は上書きされます
- 履歴、登録リスト、プレイリストおよび設定をエクスポートします
+ 既存の再生履歴、登録チャンネル一覧、プレイリストおよび(任意の)設定は上書きされます
+ 再生履歴、登録チャンネル一覧、プレイリストおよび設定をエクスポートします
再生エラーからの回復中
外部プレイヤーは、これらのタイプのリンクをサポートしていません
無効なURL
@@ -341,7 +341,7 @@
プレイリスト
「長押しして追加」のヒントを表示
トラック
- NewPipeのバックグラウンドおよびポップアッププレイヤーの通知
+ NewPipe のバックグラウンドおよびポップアッププレイヤーの通知
新着と人気
長押ししてキューに追加
ポップアップで連続再生を開始
From 2ce8facc05f1ecb8c88d3ec0abebe757009acb37 Mon Sep 17 00:00:00 2001
From: 2-Seol <2Seol.0117@gmail.com>
Date: Sat, 5 Dec 2020 06:09:09 +0000
Subject: [PATCH 026/182] Translated using Weblate (Korean)
Currently translated at 85.2% (519 of 609 strings)
---
app/src/main/res/values-ko/strings.xml | 27 ++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index e0fa9becc..27868ccda 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -550,4 +550,31 @@
%s에 대한 검색 결과
셔플
연속 재생
+ 재생목록 페이지
+ 썸네일 보기
+ 그룹 이름이 없음
+
+ - %d 일
+
+
+ - %d 시간
+
+
+ - %d 분
+
+
+ - %d 초
+
+ 시청 기록을 지우겠습니까\?
+ 시청 기록 지우기
+ 재생목록 실행
+ 알림
+ URL을 인식할 수 없습니다. 다른 앱으로 여시겠습니까\?
+ 스트림을 비우기 전 확인을 요청합니다.
+ 안드로이드에서 썸네일의 색상에 따라 알림 색상을 조절합니다. (지원되지 않는 기기가 있을 수 있습니다.)
+ 버퍼링
+ 다섯번째 버튼
+ 네번째 버튼
+ 세번째 버튼
+ 두번째 버튼
\ No newline at end of file
From cf98500b7f85f8f08b775842431d0a1e4d4fd046 Mon Sep 17 00:00:00 2001
From: pitachips
Date: Sat, 5 Dec 2020 05:58:04 +0000
Subject: [PATCH 027/182] Translated using Weblate (Korean)
Currently translated at 85.2% (519 of 609 strings)
---
app/src/main/res/values-ko/strings.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 27868ccda..61dd01a92 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -577,4 +577,5 @@
네번째 버튼
세번째 버튼
두번째 버튼
+ 다른 앱 위에 표시되는 권한 부여
\ No newline at end of file
From dd9bd4da8b068c05b6a33f1cfd3cb6bf935f8e6a Mon Sep 17 00:00:00 2001
From: Francesco Saltori
Date: Thu, 3 Dec 2020 20:11:08 +0000
Subject: [PATCH 028/182] Translated using Weblate (Italian)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-it/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 36be8652a..321265ac9 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -264,7 +264,7 @@
Caricamento del contenuto richiesto
Importa database
Esporta database
- Sovrascrive la cronologia, gli abbonamenti, le playlist e (facoltativamente) le impostazioni correnti
+ Sovrascrive la cronologia, le iscrizioni, le playlist e (facoltativamente) le impostazioni correnti
Esporta cronologia, iscrizioni, playlist e impostazioni
Esportazione completa
Importazione completa
From d9a821837280ba2184ab613c9da664f2e52ebae2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9rgio=20Marques?=
Date: Thu, 3 Dec 2020 10:06:01 +0000
Subject: [PATCH 029/182] Translated using Weblate (Portuguese)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-pt/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 503163999..9c4000230 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -237,8 +237,8 @@
Alternar orientação
Importar base de dados
Exportar base de dados
- Substitui o seu histórico actual, subscrições, listas de reprodução e (opcionalmente) definições
- Exportar histórico, assinaturas, listas de reprodução e configurações
+ Substitui o seu histórico, subscrições, listas de reprodução e (opcionalmente) definições
+ Exportar histórico, subscrições, listas de reprodução e definições
Na fila do reprodutor em segundo plano
Na fila do reprodutor popup
Mudar para segundo plano
@@ -417,7 +417,7 @@
Seleção
Atualizações
Mostrar uma notificação para pedir a atualização da aplicação se existir uma nova versão
- Modo de vista em lista
+ Modo de exibição
Lista
Grelha
Automático
From 41c4f515cf96451887f6989076ff3be57ac81228 Mon Sep 17 00:00:00 2001
From: simo
Date: Thu, 3 Dec 2020 07:34:00 +0000
Subject: [PATCH 030/182] Translated using Weblate (Arabic)
Currently translated at 99.8% (608 of 609 strings)
---
app/src/main/res/values-ar/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index fccf8cf1b..5d71677e9 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -268,7 +268,7 @@
لم يتم العثور على مشغل بث (يمكنك تثبيت VLC لتشغيله).
استيراد قاعدة البيانات
تصدير قاعدة البيانات
- يتجاوز السجل والاشتراكات الحالية
+ يلغي السجل الحالي والاشتراكات وقوائم التشغيل والإعدادات (اختياريًا)
تصدير السجل، الإشتراكات وقوائم التشغيل
عرض المعلومات
إضافة إلى
From d7e0167fed611c6365bcfb318c63fdd93d62d4c1 Mon Sep 17 00:00:00 2001
From: zmni
Date: Wed, 2 Dec 2020 08:42:31 +0000
Subject: [PATCH 031/182] Translated using Weblate (Indonesian)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-in/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 74147f3f5..4e23cce03 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -206,8 +206,8 @@
Alihkan ke Utama
Impor basis data
Ekspor basis data
- Timpa riwayat dan langganan anda saat ini
- Ekspor riwayat, langganan dan daftar putar
+ Timpa riwayat, langganan, daftar putar dan (opsional) pengaturan anda saat ini
+ Ekspor riwayat, langganan, daftar putar dan pengaturan
Tidak bisa memutar stream ini
Telah terjadi galat pemutar yang tidak bisa dipulihkan
Memulihkan dari galat pemutar
From 16a968f3bb981550c25b44df7b5ee825931bc2ff Mon Sep 17 00:00:00 2001
From: Michal L
Date: Wed, 2 Dec 2020 10:15:55 +0000
Subject: [PATCH 032/182] Translated using Weblate (Polish)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-pl/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 820e88847..d4ee389f2 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -269,8 +269,8 @@
Odtwarzaj na pierwszym planie
Importuj dane
Eksportuj dane
- Zastępuje Twoją bieżącą historię i subskrypcje
- Eksportuje bieżącą historię, subskrypcje i playlisty
+ Zastępuje Twoją bieżącą historię, subskrypcje, playlisty i (opcjonalnie) ustawienia
+ Eksportuje bieżącą historię, subskrypcje, playlisty i ustawienia
Przeciągnij, aby zmienić kolejność
Utwórz
Usuń bieżący
From 6f7c337e00fa597eedc4c92f0037db9d711a076f Mon Sep 17 00:00:00 2001
From: Eric
Date: Wed, 2 Dec 2020 04:34:43 +0000
Subject: [PATCH 033/182] Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (609 of 609 strings)
---
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 051677972..8076d279f 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
@@ -303,8 +303,8 @@
正在加载请求的内容
导入数据库
导出数据库
- 覆盖当前历史记录和订阅
- 导出历史记录、订阅和播放列表
+ 覆盖您的当前播放历史、订阅、播放列表和(可选)设置
+ 导出历史记录、订阅、播放列表和设置
导出成功
导入成功
没有有效的ZIP文件
From 085f63b8c51c89822830d1174f05344e1a0f9381 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Wed, 2 Dec 2020 02:40:51 +0000
Subject: [PATCH 034/182] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-zh-rTW/strings.xml | 4 ++--
1 file changed, 2 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 460d137e9..cd66e7a78 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -228,8 +228,8 @@
網站
匯入資料庫
匯出資料庫
- 覆蓋您目前的歷史記錄和訂閱
- 匯出歷史記錄、訂閱和播放清單
+ 覆蓋您目前的歷史記錄、訂閱與(可選的)設定
+ 匯出歷史記錄、訂閱、播放清單與設定
回饋
如欲了解更多有關 NewPipe 的資訊和新聞,請造訪我們的網站。
首頁內容
From 027768d97da56abe7c0be8cccf43dbf93f5c3895 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Wed, 2 Dec 2020 07:21:22 +0000
Subject: [PATCH 035/182] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
=?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 93.5% (570 of 609 strings)
---
app/src/main/res/values-nb-rNO/strings.xml | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 0b65eeab9..a9ed08379 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -55,7 +55,7 @@
Automatisk avspilling
Spiller en video når NewPipe blir forespurt av et annet program
Innhold
- Aldersbegrenset innhold
+ Vis aldersbegrenset innhold
Feil
Kunne ikke laste inn alle miniatyrbilder
Kunne ikke dekryptere signaturen til videoens nettadresse
@@ -225,7 +225,7 @@
Lydinnstillinger
Hold for å legge i kø
Vis \"Hold for å legge til\" -tips
- Vis tips når bakgrunnen eller oppsprettsknappen i videoens «Detaljer:» trykkes
+ Vis tips når det trykkes på bakgrunnen eller oppsprettsknappen i videoens «Detaljer:»
Lagt i kø for bakgrunnsavspiller
Lagt i kø for oppsprettsspiller
[Ukjent]
@@ -265,7 +265,7 @@
Importer database
Eksporter database
Overstyrer din nåværende historikk og abonnementsliste
- Eksporter historikk, abonnementer og spillelister
+ Eksporter historikk, abonnementer, spillelister og innstillinger
Eksportert
Importert
Ingen gyldig ZIP-fil
@@ -357,7 +357,10 @@
\n
\n1. Gå til denne nettadressen: %1$s
\n2. Logg inn når forespurt
-\n3. En nedlasting av eksportfilen bør starte
+\n3. En nedlasting av eksportfilen bør starte
+\n4. Klikk på «Neste steg» og så på «Opprett eksport»
+\n5. Klikk på «Last ned»-knappen etter den vises, og
+\n6. Fra nedlastet takeout.zip, pakk ut .json-filen (vanligvis under «YouTube og YouTube Music/subscriptions/subscriptions.json» og importer den her.
Importer en SoundCloud-profil ved å skrive enten nettadressen eller din ID:
\n
\n1. Skru på \"skrivebordsmodus\" i en nettleser ( siden er ikke tilgjengelig for mobile enheter)
@@ -644,4 +647,6 @@
Vis innhold som muligens er upassende for barn, siden det har aldersgrense (som 18+).
Få Android til å tilpasse merknadens farge i henhold til hovedfargen på miniatyrbildet (merk at dette ikke støttes på alle enheter)
Fargelegg merknad
+ Vis miniatyrbilde på låseskjerm som bakgrunn og i merknader
+ Vis miniatyrbilde
\ No newline at end of file
From 2f8dccf7f60dfb1faba3717ca3eb1703374953a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9rgio=20Marques?=
Date: Thu, 3 Dec 2020 10:05:18 +0000
Subject: [PATCH 036/182] Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-pt-rPT/strings.xml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index cbd1c4551..893abf31a 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -108,7 +108,7 @@
Artistas
Não foi possível ligar ao servidor
Mostrar uma opção para reproduzir o vídeo no Kodi
- Modo de vista em lista
+ Modo de exibição
A pesquisa inexata permite que esta seja mais rápida mas reduz a precisão. Procurar por 5, 15 ou 25 segundos não funciona corretamente.
Permitir sobreposição a outras aplicações
Reprodução automática
@@ -121,7 +121,7 @@
Reportar no GitHub
Gosto
O histórico está desativado
- Pasta para os vídeos
+ Pasta para os ficheiros de vídeo
Prima \"Feito\" ao resolver
A carregar…
Áudio
@@ -398,7 +398,7 @@
Colocar vídeo seguinte na fila
Defina as suas instâncias favoritas PeerTube
Importar/exportar
- Exportar histórico, assinaturas, listas de reprodução e configurações
+ Exportar histórico, subscrições, listas de reprodução e definições
Melhor resolução
Selecione um canal
Escolher navegador
@@ -453,7 +453,7 @@
Limpar histórico de pesquisas
Erro
Lembrar propriedades de popup
- Os ficheiros de vídeo descarregados serão armazenados aqui
+ Os ficheiros de vídeo descarregados serão guardados aqui
Mudar para principal
Esta permissão é necessária
\npara o modo popup
@@ -471,7 +471,7 @@
Pendente
Importado
Automático
- Substitui o seu histórico actual, subscrições, listas de reprodução e (opcionalmente) definições
+ Substitui o seu histórico, subscrições, listas de reprodução e (opcionalmente) definições
Popup
k
Não foi possível criar a pasta \'%1$s\'
@@ -538,7 +538,7 @@
Carácter de substituição
Vídeo
Não existem vídeos para descarregar
- Os ficheiros de áudio descarregados serão armazenados aqui
+ Os ficheiros de áudio descarregados serão guardados aqui
Vídeos
Meta-dados em cache limpos
Mostrar dica ao premir em segundo plano ou no botão \"Detalhes:\" da janela popup
From 6bf22e7ad0c352719275aba29566fda4f80ee89f Mon Sep 17 00:00:00 2001
From: Michal L
Date: Wed, 2 Dec 2020 10:16:59 +0000
Subject: [PATCH 037/182] Translated using Weblate (Polish)
Currently translated at 47.5% (19 of 40 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/
---
fastlane/metadata/android/pl/changelogs/959.txt | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 fastlane/metadata/android/pl/changelogs/959.txt
diff --git a/fastlane/metadata/android/pl/changelogs/959.txt b/fastlane/metadata/android/pl/changelogs/959.txt
new file mode 100644
index 000000000..b3eb9b932
--- /dev/null
+++ b/fastlane/metadata/android/pl/changelogs/959.txt
@@ -0,0 +1,3 @@
+Naprawiono niekończącą się pętlę awarii po otwarciu raportu o błędach.
+Zaktualizowana lista instancji PeerTube, które mogą być otwierane automatycznie przez NewPipe.
+Zaktualizowano tłumaczenia.
From c5859825579dca26888f662c6f1adf7f1649098d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Wed, 2 Dec 2020 07:27:42 +0000
Subject: [PATCH 038/182] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
=?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 12.5% (5 of 40 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nb_NO/
---
fastlane/metadata/android/nb-NO/changelogs/959.txt | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 fastlane/metadata/android/nb-NO/changelogs/959.txt
diff --git a/fastlane/metadata/android/nb-NO/changelogs/959.txt b/fastlane/metadata/android/nb-NO/changelogs/959.txt
new file mode 100644
index 000000000..51a17c99c
--- /dev/null
+++ b/fastlane/metadata/android/nb-NO/changelogs/959.txt
@@ -0,0 +1,3 @@
+Fikset uendelig kræsjløkke ved åpning av feilrapportering.
+Oppdatert liste over PeerTube-isntanser som kan åpnes automatisk av NewPipe.
+Oppdaterte oversettelser.
From 4b92f78cc8e29020b5d71d941ee7b18fa4770fa2 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sat, 5 Dec 2020 10:43:22 +0000
Subject: [PATCH 039/182] Translated using Weblate (Russian)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-ru/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 2cad538f5..dcd9cde92 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -26,7 +26,7 @@
Формат аудио по умолчанию
Скачать
URL не поддерживается
- \"Следующее\" и похожие видео
+ Показать похожие видео
Язык контента по умолчанию
Видео и аудио
Внешний вид
@@ -153,7 +153,7 @@
Свободное и легковесное потоковое воспроизведение для Android.
Открыть на GitHub
Приветствуется всё — идеи, перевод, изменения дизайна, чистка кода или огромные изменения в коде. Чем больше сделано, тем лучше!
- © %1$s %2$s под лицензией %3$s
+ © %1$s %2$s 🞄 %3$s
Помощь проекту
Подписаться
Не удалось изменить подписку
@@ -162,7 +162,7 @@
Подписки
Что нового
История поиска
- Хранить запросы поиска локально
+ Хранить запросы поиска (локально)
История просмотров
Продолжать воспроизведение
Восстанавливать последнюю позицию
@@ -640,7 +640,7 @@
Перемешать
Повтор
В компактном уведомлении доступно не более трёх действий!
- Действия можно отредактировать, нажав на них. Отметьте не более трёх для отображения в компактном уведомлении
+ Действия можно изменить, нажав на них. Отметьте не более трёх для отображения в компактном уведомлении
Пятое действие
Четвёртое действие
Третье действие
From 9a671851df7f258993b23a8f7fe03993cbf433d2 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sat, 5 Dec 2020 11:06:42 +0000
Subject: [PATCH 040/182] Translated using Weblate (Russian)
Currently translated at 100.0% (609 of 609 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 dcd9cde92..92a1eb928 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -153,7 +153,7 @@
Свободное и легковесное потоковое воспроизведение для Android.
Открыть на GitHub
Приветствуется всё — идеи, перевод, изменения дизайна, чистка кода или огромные изменения в коде. Чем больше сделано, тем лучше!
- © %1$s %2$s 🞄 %3$s
+ © %1$s • %2$s • %3$s
Помощь проекту
Подписаться
Не удалось изменить подписку
From e867bfbc82da9491bb33c4b61eb267f1a0bea603 Mon Sep 17 00:00:00 2001
From: domifi
Date: Sun, 6 Dec 2020 18:07:46 +0000
Subject: [PATCH 041/182] Translated using Weblate (German)
Currently translated at 100.0% (609 of 609 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 3176781ff..e2201a8b1 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -643,7 +643,7 @@
Lösche Cookies, die NewPipe speichert, wenn du ein reCAPTCHA löst
reCAPTCHA-Cookies wurden gelöscht
reCAPTCHA-Cookies löschen
- Zeige Inhalt, der möglicherweise unpassend für Kinder ist, da er eine Altersbeschränkung (wie z.B. 18+) hat
+ Zeige altersbeschränkte Inhalte (bspw. 18+), welche möglicherweise unpassend für Kinder sein könnten
Wiedergabe einreihen
Android kann die Farbe der Benachrichtigung entsprechend der Hauptfarbe in der Miniaturansicht anpassen (beachte, dass dies nicht auf allen Geräten verfügbar ist)
Benachrichtigung farblich anpassen
From cf67b592da8e4427ad7aea4441d018d561dbe69a Mon Sep 17 00:00:00 2001
From: nautilusx
Date: Sun, 6 Dec 2020 18:06:37 +0000
Subject: [PATCH 042/182] Translated using Weblate (German)
Currently translated at 100.0% (609 of 609 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 e2201a8b1..4ec029ac3 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -266,8 +266,8 @@
Gewünschten Inhalt laden
Datenbank importieren
Datenbank exportieren
- Überschreibt deinen aktuellen Verlauf und deine Abonnements
- Verlauf, Abonnements und Wiedergabelisten exportieren
+ Überschreibt deinen aktuellen Verlauf, Abonnements, Wiedergabelisten und (optionale) Einstellungen
+ Export von Verlauf, Abonnements, Wiedergabelisten und Einstellungen
Keine gültige ZIP-Datei
Warnung: Nicht alle Dateien konnten importiert werden.
Dies wird deine aktuellen Einstellungen überschreiben.
From 9a223532c5becc142afdbc97fedcf44c5d69ca5b Mon Sep 17 00:00:00 2001
From: hlloreda
Date: Sun, 6 Dec 2020 23:40:38 +0100
Subject: [PATCH 043/182] [FIX] - Crash while deleting a video from a playlist
while refreshing
---
.../database/playlist/PlaylistStreamEntry.kt | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt
index d9c892099..28ce176f0 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt
@@ -7,7 +7,6 @@ import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity
import org.schabi.newpipe.database.stream.model.StreamEntity
import org.schabi.newpipe.database.stream.model.StreamStateEntity
import org.schabi.newpipe.extractor.stream.StreamInfoItem
-import kotlin.jvm.Throws
class PlaylistStreamEntry(
@Embedded
@@ -36,4 +35,20 @@ class PlaylistStreamEntry(
override fun getLocalItemType(): LocalItem.LocalItemType {
return LocalItem.LocalItemType.PLAYLIST_STREAM_ITEM
}
+
+ override fun equals(other: Any?): Boolean {
+ if (other == null || other !is PlaylistStreamEntry || streamEntity != other.streamEntity ||
+ progressTime != other.progressTime || streamId != other.streamId || joinIndex != other.joinIndex
+ ) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = streamEntity.hashCode()
+ result = 31 * result + progressTime.hashCode()
+ result = 31 * result + streamId.hashCode()
+ result = 31 * result + joinIndex
+ return result
+ }
}
From 5f3eb4871a69aeb6d5502fc48a66d6b2d45a56d5 Mon Sep 17 00:00:00 2001
From: hlloreda
Date: Mon, 7 Dec 2020 00:06:56 +0100
Subject: [PATCH 044/182] [IMPORT] - import got deleted
---
.../org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt
index 28ce176f0..af741fdc8 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt
@@ -7,6 +7,7 @@ import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity
import org.schabi.newpipe.database.stream.model.StreamEntity
import org.schabi.newpipe.database.stream.model.StreamStateEntity
import org.schabi.newpipe.extractor.stream.StreamInfoItem
+import kotlin.jvm.Throws
class PlaylistStreamEntry(
@Embedded
From b30e025bdac1167466d497a112d3510a2f575120 Mon Sep 17 00:00:00 2001
From: hlloreda
Date: Mon, 7 Dec 2020 10:53:33 +0100
Subject: [PATCH 045/182] [FIX] - Use of a Data class instead of overriding
equals method
---
.../database/playlist/PlaylistStreamEntry.kt | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt
index af741fdc8..aff6205f2 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistStreamEntry.kt
@@ -9,7 +9,7 @@ import org.schabi.newpipe.database.stream.model.StreamStateEntity
import org.schabi.newpipe.extractor.stream.StreamInfoItem
import kotlin.jvm.Throws
-class PlaylistStreamEntry(
+data class PlaylistStreamEntry(
@Embedded
val streamEntity: StreamEntity,
@@ -36,20 +36,4 @@ class PlaylistStreamEntry(
override fun getLocalItemType(): LocalItem.LocalItemType {
return LocalItem.LocalItemType.PLAYLIST_STREAM_ITEM
}
-
- override fun equals(other: Any?): Boolean {
- if (other == null || other !is PlaylistStreamEntry || streamEntity != other.streamEntity ||
- progressTime != other.progressTime || streamId != other.streamId || joinIndex != other.joinIndex
- ) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = streamEntity.hashCode()
- result = 31 * result + progressTime.hashCode()
- result = 31 * result + streamId.hashCode()
- result = 31 * result + joinIndex
- return result
- }
}
From ac86fe80c85bae126d956484d9e27e9d8c2919ee Mon Sep 17 00:00:00 2001
From: mhmdanas <32234660+mhmdanas@users.noreply.github.com>
Date: Sun, 6 Dec 2020 18:28:46 +0300
Subject: [PATCH 046/182] Fix typos
---
app/src/main/java/org/schabi/newpipe/MainActivity.java | 6 +++---
.../java/org/schabi/newpipe/streams/Mp4FromDashWriter.java | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index f51ecf2d3..4a8582df2 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -369,8 +369,8 @@ public class MainActivity extends AppCompatActivity {
}
private void enhancePeertubeMenu(final StreamingService s, final MenuItem menuItem) {
- final PeertubeInstance currentInstace = PeertubeHelper.getCurrentInstance();
- menuItem.setTitle(currentInstace.getName() + (ServiceHelper.isBeta(s) ? " (beta)" : ""));
+ final PeertubeInstance currentInstance = PeertubeHelper.getCurrentInstance();
+ menuItem.setTitle(currentInstance.getName() + (ServiceHelper.isBeta(s) ? " (beta)" : ""));
final Spinner spinner = (Spinner) LayoutInflater.from(this)
.inflate(R.layout.instance_spinner_layout, null);
final List instances = PeertubeHelper.getInstanceList(this);
@@ -378,7 +378,7 @@ public class MainActivity extends AppCompatActivity {
int defaultSelect = 0;
for (final PeertubeInstance instance : instances) {
items.add(instance.getName());
- if (instance.getUrl().equals(currentInstace.getUrl())) {
+ if (instance.getUrl().equals(currentInstance.getUrl())) {
defaultSelect = items.size() - 1;
}
}
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 5efffe118..ca3da9d24 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
@@ -483,7 +483,7 @@ public class Mp4FromDashWriter {
// stsc_table_entry = [first_chunk, samples_per_chunk, sample_description_index]
tables.stscBEntries = new int[tables.stsc * 3];
- tables.stco = remainChunkOffset + 1; // total entrys in chunk offset box
+ tables.stco = remainChunkOffset + 1; // total entries in chunk offset box
tables.stscBEntries[index++] = 1;
tables.stscBEntries[index++] = firstCount;
From 42b1bbe414ee44fd7da075787d0cf27967f897e9 Mon Sep 17 00:00:00 2001
From: nautilusx
Date: Sun, 6 Dec 2020 18:15:14 +0000
Subject: [PATCH 047/182] Translated using Weblate (German)
Currently translated at 100.0% (609 of 609 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 4ec029ac3..6effa7615 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -132,7 +132,7 @@
Entfernt Tonspur bei manchen Auflösungen
Letzte Größe und Position des Pop-ups merken
Gestensteuerung
- Helligkeit und Lautstärke mittels Gesten einstellen
+ Gesten verwenden, um die Helligkeit und Lautstärke einzustellen
Suchvorschläge
Beim Suchen Vorschläge anzeigen
Pop-up
@@ -402,9 +402,9 @@
Neuer Tab
Tab wählen
Gestensteuerung für Lautstärke
- Verwende Gesten um die Abspielerlautstärke einzustellen
+ Gesten verwenden, um die Lautstärke einzustellen
Gestensteuerung für Helligkeit
- Player-Helligkeit über Gesten steuern
+ Gesten verwenden, um die Helligkeit einzustellen
Aktualisierungen
Datei gelöscht
App-Update-Benachrichtigung
From 5b1a6831d5e9ce56165447b08dc6c871446769ae Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Mon, 7 Dec 2020 00:03:38 +0000
Subject: [PATCH 048/182] Translated using Weblate (Russian)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-ru/strings.xml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 92a1eb928..c672c648f 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -383,7 +383,7 @@
При открытии ссылки
Хотите импортировать настройки?
Конфиденциальность
- Проект NewPipe очень серьёзно относится к вашей конфиденциальности. Поэтому приложение не собирает никаких данных без вашего согласия.
+ Проект NewPipe очень серьёзно относится к вашей конфиденциальности. Приложение не собирает никаких данных без вашего согласия.
\nПолитика конфиденциальности NewPipe подробно объясняет, какие данные отправляются и хранятся при отправке отчёта о сбоях.
Прочитать политику
В соответствии с Общим регламентом по защите данных ЕС (GDPR), обращаем ваше внимание на политику конфиденциальности NewPipe. Пожалуйста, внимательно ознакомьтесь с ней.
@@ -580,19 +580,19 @@
Обновлять всегда
Подписки не выбраны
Группы каналов
- Если обновление подписок кажется вам слишком медленным, попробуйте быстрый режим (включите в настройках или кнопкой внизу).
+ Если подписки обновляются слишком медленно, попробуйте быстрый режим (включите в настройках или кнопкой внизу).
\n
-\nNewPipe позволяет обновлять подписки двумя способами:
-\n• получение канала целиком, медленное, но с полными сведениями;
-\n• обновление по RSS, быстрое, но с потерей сведений.
+\nNewPipe может обновлять подписки двумя способами:
+\n• получение канала целиком, медленное, с полными сведениями;
+\n• обновление по RSS, быстрое, с потерей сведений.
\n
-\nПри быстром обновлении теряются длительность элемента и его тип (нельзя определить, трансляция это или обычное видео), могут быть получены не все элементы канала.
+\nПри быстром обновлении теряются длительность элемента и его тип (трансляция или обычное видео), могут быть получены не все элементы канала.
\n
-\nYouTube является примером такого сервиса, допуская быстрое обновление по RSS.
+\nКак пример, YouTube поддерживает быстрое обновление.
\n
\nВыбор за вами: скорость или точность.
Обновление по RSS, если доступно
- Доступно для некоторых сервисов, быстрое, но может возвращать не всё содержимое канала и не содержать часть сведений (длительность, тип элемента, статус трансляции)
+ Доступно для некоторых сервисов, быстрое, но может возвращать не всё содержимое канала и не содержать часть сведений (длительность, статус трансляции)
Период актуальности подписок после обновления — %s
Это видео имеет возрастное ограничение.
\n
From f7b41227d2b1faab5a0465d6102b86984e57349f Mon Sep 17 00:00:00 2001
From: Francesco Saltori
Date: Mon, 7 Dec 2020 13:31:08 +0000
Subject: [PATCH 049/182] Translated using Weblate (Italian)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-it/strings.xml | 54 +++++++++++++-------------
1 file changed, 27 insertions(+), 27 deletions(-)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 321265ac9..c4980d062 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -5,25 +5,25 @@
Nessun lettore multimediale trovato. Installare VLC\?
Installa
Annulla
- Apri nel Browser
+ Apri nel browser
Condividi
Scarica
Cerca
Impostazioni
Forse cercavi \"%1$s\"\?
Condividi con
- Scegli Browser
+ Scegli browser
rotazione
- Cartella 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
Installare l\'app Kore\?
Mostra \"Riproduci con Kodi\"
Mostra l\'opzione per riprodurre video tramite Kodi
Audio
- Formato Audio Predefinito
+ Formato audio predefinito
Scarica
Mostra video \"Prossimo\" e \"Simili\"
URL non supportato
@@ -36,9 +36,9 @@
Mi piace
Impossibile creare la cartella di download \'%1$s\'
Creata la cartella per i download \'%1$s\'
- Usa Lettore Video Esterno
- Usa Lettore Audio Esterno
- Cartella Audio Scaricati
+ Usa lettore video esterno
+ Usa lettore audio esterno
+ Cartella audio scaricati
Gli audio scaricati saranno salvati qui
Scegli la cartella per gli audio scaricati
Tema
@@ -61,7 +61,7 @@
Mostra contenuti con restrizioni di età
Tocca \"Cerca\" per iniziare
\n
- Riproduzione Automatica
+ Riproduzione automatica
Riproduci i video quando NewPipe viene aperto da un\'altra app
In diretta
Impossibile analizzare completamente il sito web
@@ -114,22 +114,22 @@
È richiesta la risoluzione del reCAPTCHA
Sì
Più tardi
- Apri in Modalità Popup
- Modalità Popup
+ Apri in modalità popup
+ Modalità popup
Riproduzione in modalità popup
Disattivato
Audio non disponibile per alcune risoluzioni
- In Sottofondo
+ In sottofondo
Popup
- Risoluzione Predefinita Lettore Popup
- Mostra Altre Risoluzioni
+ Risoluzione predefinita lettore popup
+ Mostra altre risoluzioni
Solo alcuni dispositivi possono riprodurre video 2K/4K
- Formato Video Predefinito
+ Formato video predefinito
Ricorda proprietà lettore popup
Ricorda dimensione e posizione della finestra Popup
- Controllo Gesti Lettore Multimediale
+ Controllo gesti lettore multimediale
Usa i gesti per controllare luminosità e volume del lettore multimediale
- Suggerimenti di Ricerca
+ Suggerimenti di ricerca
Mostra suggerimenti durante la ricerca
Popup
Filtra i risultati
@@ -272,8 +272,8 @@
Attenzione: Impossibile importare tutti i file.
Questa operazione sostituirà le tue impostazioni attuali.
Scarica il video
- Mostra Informazioni
- Playlist Salvate
+ Mostra informazioni
+ Playlist salvate
Aggiungi a
Trascina per riordinare
Crea
@@ -309,7 +309,7 @@
Il monitoraggio di memory leak potrebbe causare la mancata risposta dell\'applicazione durante il dumping dell\'heap
Segnala errori «fuori del ciclo di vita»
Forza la segnalazione di eccezioni Rx non consegnabili al di fuori del ciclo di vita dell\'attività dopo la chiusura
- Usa Ricerca Rapida (Imprecisa)
+ Usa ricerca rapida (imprecisa)
Consente al lettore multimediale di spostarsi più velocemente, ma con precisione ridotta. Spostamenti di 5, 15 o 25 secondi non funzionano con questo.
Accoda automaticamente l\'elemento successivo
Accoda un contenuto consigliato al termine della riproduzione, in una coda non ripetitiva
@@ -347,7 +347,7 @@
Tieni presente che questa operazione può consumare una grande quantità di traffico dati.
\n
\nVuoi continuare?
- Carica Copertine
+ Carica copertine
Disabilita per prevenire il caricamento delle copertine, 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
@@ -401,7 +401,7 @@
Scegli scheda
Gesti Controllo Volume
Utilizza i gesti per controllare il volume del lettore multimediale
- Gesti Controllo Luminosità
+ Gesti controllo luminosità
Utilizza i gesti per controllare la luminosità del lettore multimediale
Aggiornamenti
File eliminato
@@ -458,7 +458,7 @@
Eventi
Conferenze
Tempo per la connessione esaurito
- Mostra Commenti
+ Mostra commenti
Disattiva per nascondere i commenti
Riproduzione automatica
Nessun commento
@@ -506,7 +506,7 @@
La lingua verrà cambiata al riavvio dell\'applicazione.
Contenuti in evidenza predefiniti
- Durata Avanzamento e Riavvolgimento Rapidi
+ Durata avanzamento e riavvolgimento rapidi
Istanze PeerTube
Seleziona le istanze PeerTube preferite
Trova altre istanze su %s
@@ -619,7 +619,7 @@
Solo Wi-Fi
Avvia la riproduzione automaticamente — %s
URL non riconosciuto. Vuoi aprirlo con un\'altra app\?
- Accoda Automaticamente
+ Accoda automaticamente
La coda del lettore attivo sarà sostituita
Chiedi prima di svuotare la coda
Cambiare tipo di riproduzione potrebbe sostituire gli elementi in coda
@@ -635,7 +635,7 @@
Notifica
Niente
Ripeti
- Ridimensiona Copertina alla Proporzione 1:1
+ Ridimensiona copertina alla proporzione 1:1
Modifica la proporzione della copertina del video mostrata nella notifica da 16:9 a 1:1 (può introdurre distorsioni)
Mostra memory leak
Aggiunto alla coda
@@ -646,7 +646,7 @@
Consente di usufruire della «Modalità con restrizioni» di YouTube, che esclude contenuti potenzialmente inappropriati per i minori
Mostra contenuti che hanno un limite di età (es. 18+). Potrebbero essere inadatti ai bambini
Lascia che Android modifichi il colore della notifica, secondo il colore principale della copertina (funzione non disponibile per tutti i dispositivi)
- Colora Notifica
+ Colora notifica
Mostra le copertine come sfondo della schermata di blocco e all\'interno delle notifiche
Mostra copertina
\ No newline at end of file
From a2bb58a99163e5b70f9be25513095094b24b3303 Mon Sep 17 00:00:00 2001
From: pjammo
Date: Sun, 6 Dec 2020 10:29:00 +0000
Subject: [PATCH 050/182] Translated using Weblate (Italian)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-it/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index c4980d062..9a3f6ef4e 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -126,7 +126,7 @@
Solo alcuni dispositivi possono riprodurre video 2K/4K
Formato video predefinito
Ricorda proprietà lettore popup
- Ricorda dimensione e posizione della finestra Popup
+ Ricorda dimensione e posizione del lettore popup
Controllo gesti lettore multimediale
Usa i gesti per controllare luminosità e volume del lettore multimediale
Suggerimenti di ricerca
From a4858bc7029dd091356927055a5721a7d4d9ae60 Mon Sep 17 00:00:00 2001
From: zeritti
Date: Sat, 5 Dec 2020 11:57:25 +0000
Subject: [PATCH 051/182] Translated using Weblate (Czech)
Currently translated at 100.0% (609 of 609 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 2d79893ec..fbfe8eeda 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -258,8 +258,8 @@
Pouze jednou
Importovat databázi
Exportovat databázi
- Přepíše vaši dosavadní historii a odběry
- Exportuje historii, odběry a playlisty
+ Přepíše Vaši dosavadní historii, odběry, playlisty a (volitelně) nastavení
+ Exportuje historii, odběry, playlisty a nastavení
Externí přehrávače nepodporují tyto druhy odkazů
Neplatná URL
Nenalezeny žádné video streamy
From ce59c05d5b30f36d85d98257adfad5e38e4488db Mon Sep 17 00:00:00 2001
From: simo
Date: Sun, 6 Dec 2020 05:05:04 +0000
Subject: [PATCH 052/182] Translated using Weblate (Arabic)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-ar/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 5d71677e9..14bbb79a9 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -269,7 +269,7 @@
استيراد قاعدة البيانات
تصدير قاعدة البيانات
يلغي السجل الحالي والاشتراكات وقوائم التشغيل والإعدادات (اختياريًا)
- تصدير السجل، الإشتراكات وقوائم التشغيل
+ تصدير قوائم تشغيل, الاشتراكات, والإعدادات
عرض المعلومات
إضافة إلى
تحليل
From fe2fc605811d69868f48d663b49000779b15236d Mon Sep 17 00:00:00 2001
From: David Braz
Date: Sat, 5 Dec 2020 14:06:42 +0000
Subject: [PATCH 053/182] Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-pt-rBR/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index ff6805747..c0e61b392 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -262,8 +262,8 @@
Carregando conteúdo solicitado
Importar base de dados
Exportar base de dados
- Substitui seu histórico e inscrições atuai
- Exporte histórico, inscrições e playlists
+ Substitui seu histórico atual, inscrições, playlists e (opcionalmente) configurações
+ Exporte histórico, inscrições, playlists e configurações
Exportado
Importado
Não há nenhum arquivo ZIP válido
@@ -596,7 +596,7 @@
\n
\nAtive \"%1$s\" nas configurações se quiser vê-lo.
Sim, e vídeos parcialmente vistos
- Vídeos vistos antes e depois de adicionar à lista de reprodução serão removidos.
+ Vídeos vistos antes e depois de adicionar à playlists serão removidos.
\nTem certeza\? Isto não pode ser desfeito!
Remover vídeos vistos\?
Remover vistos
From a7bd2666f044eb7d4146d2a332e224285f6dbcbb Mon Sep 17 00:00:00 2001
From: Deleted User
Date: Mon, 7 Dec 2020 11:37:29 +0000
Subject: [PATCH 054/182] Translated using Weblate (Malay)
Currently translated at 67.3% (410 of 609 strings)
---
app/src/main/res/values-ms/strings.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml
index 3457fda56..fe9f56402 100644
--- a/app/src/main/res/values-ms/strings.xml
+++ b/app/src/main/res/values-ms/strings.xml
@@ -1,6 +1,7 @@
- Tekan carian untuk bermula
+ Tekan \"Cari\" untuk bermula
+\n
%1$s tontonan
Diterbitkan pada %1$s
Tiada pemain strim ditemui. Adakah anda mahu memasang VLC\?
From b553aa2159ee2e06ea4c625f4d16d481a8de9734 Mon Sep 17 00:00:00 2001
From: David Braz
Date: Sat, 5 Dec 2020 14:03:13 +0000
Subject: [PATCH 055/182] Translated using Weblate (Portuguese (Brazil))
Currently translated at 25.0% (10 of 40 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_BR/
---
fastlane/metadata/android/pt_BR/changelogs/959.txt | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 fastlane/metadata/android/pt_BR/changelogs/959.txt
diff --git a/fastlane/metadata/android/pt_BR/changelogs/959.txt b/fastlane/metadata/android/pt_BR/changelogs/959.txt
new file mode 100644
index 000000000..d3210dfd2
--- /dev/null
+++ b/fastlane/metadata/android/pt_BR/changelogs/959.txt
@@ -0,0 +1,3 @@
+Corrigimos um loop interminável de crash depois de abrir o reportar erro.
+Atualizado lista de instâncias do PeerTube que podem ser abertas automaticamente pelo NewPipe.
+Traduções atualizadas.
From c94f0ded27c5091cc106b00015a0ad8d6cf79738 Mon Sep 17 00:00:00 2001
From: Igor Nedoboy
Date: Sat, 5 Dec 2020 10:54:53 +0000
Subject: [PATCH 056/182] Translated using Weblate (Russian)
Currently translated at 7.5% (3 of 40 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ru/
---
fastlane/metadata/android/ru/full_description.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fastlane/metadata/android/ru/full_description.txt b/fastlane/metadata/android/ru/full_description.txt
index 216e41ab4..d25f04b00 100644
--- a/fastlane/metadata/android/ru/full_description.txt
+++ b/fastlane/metadata/android/ru/full_description.txt
@@ -1 +1 @@
-NewPipe не использует библиотеки фреймворка Google или API YouTube, взаимодействуя только с сайтом сервиса для получения необходимых сведений. NewPipe может работать на устройствах без установленных Сервисов Google и не требует учётной записи YouTube. Это свободное программное обеспечение.
+NewPipe не использует библиотеки фреймворка Google или API YouTube, взаимодействуя только с сайтом сервиса для получения необходимых сведений. NewPipe может работать на устройствах без установленных Сервисов Google и не требует учётной записи YouTube, это свободное программное обеспечение.
From a00ac6b9ca53d69180ce419728cd3e7864f5c76a Mon Sep 17 00:00:00 2001
From: FireMasterK <20838718+FireMasterK@users.noreply.github.com>
Date: Wed, 9 Dec 2020 12:25:57 +0530
Subject: [PATCH 057/182] Migrate to GitHub actions from Travis.
---
.github/workflows/ci.yml | 30 ++++++++++++++++++++++++++++++
.travis.yml | 18 ------------------
2 files changed, 30 insertions(+), 18 deletions(-)
create mode 100644 .github/workflows/ci.yml
delete mode 100644 .travis.yml
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 000000000..6419c65dd
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,30 @@
+name: CI
+
+on: [push, pull_request]
+
+jobs:
+ build-and-test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: set up JDK 1.8
+ uses: actions/setup-java@v1.4.3
+ with:
+ java-version: 1.8
+
+ - name: Cache Gradle dependencies
+ uses: actions/cache@v2
+ with:
+ path: ~/.gradle/caches
+ key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
+ restore-keys: ${{ runner.os }}-gradle
+
+ - name: Build debug APK and run Tests
+ run: ./gradlew assembleDebug lintDebug testDebugUnitTest --stacktrace
+
+ - name: Upload APK
+ uses: actions/upload-artifact@v2
+ with:
+ name: app
+ path: app/build/outputs/apk/debug/*.apk
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 1714c70d5..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-language: android
-jdk:
- - oraclejdk8
-android:
- components:
- # The BuildTools version used by NewPipe
- - tools
- - build-tools-29.0.3
-
- # The SDK version used to compile NewPipe
- - android-29
-
-before_install:
- - yes | sdkmanager "platforms;android-29"
-script: ./gradlew -Dorg.gradle.jvmargs=-Xmx1536m assembleDebug lintDebug testDebugUnitTest
-
-licenses:
- - '.+'
From dc88f8b1723db09b8a10db99034a0c4c76c2435b Mon Sep 17 00:00:00 2001
From: Enol P
Date: Wed, 9 Dec 2020 02:49:25 +0000
Subject: [PATCH 058/182] Translated using Weblate (Asturian)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-b+ast/strings.xml | 544 ++++++++++++++++++----
1 file changed, 444 insertions(+), 100 deletions(-)
diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml
index faafa7538..e9a8c8fd7 100644
--- a/app/src/main/res/values-b+ast/strings.xml
+++ b/app/src/main/res/values-b+ast/strings.xml
@@ -1,20 +1,20 @@
- %1$s visualizaciones
+ %1$s vistes
Espublizóse\'l %1$s
Encaboxar
- Abrir nun restolador web
+ Abrir nun restolador
Compartir
Axustes
- ¿Quixesti dicir «%1$s»\?
+ ¿Quxesti dicir «%1$s»\?
Usar un reproductor esternu de videu
Usar un reproductor esternu d\'audiu
Resolución predeterminada
Reproducir en Kodi
Amosar la opción «Reproducir en Kodi»
- Amuesa una opción pa reproducir un videu pel centru multimedia Kodi
+ Amuesa una opción pa reproducir vídeos pel centru multimedia Kodi
Audiu
- Formatu predetermináu d\'audiu
+ Formatu d\'audiu predetermináu
Estilu
Escuridá
Claridá
@@ -26,16 +26,16 @@
En direuto
Fallu
Nun pudieron cargase toles miniatures
- Nun pudo descifrase la robla de la URL del videu
+ Nun pudo sabese la robla de la URL del videu
Nun pudo analizase\'l sitiu web
- Entá nun se sofiten los fluxos en direuto
- Nun pudo consiguise dengún fluxu
- Perdona pero eso nun debió asoceder.
+ Los fluxos en direuto entá nun se sofiten
+ Nun pudo consiguise nengún fluxu
+ Buff... Esto nun debió asoceder.
Perdona mas asocedió daqué malo.
Información:
Detalles:
Préstames
- Usar TOR
+ Usar Tor
Creóse\'l direutoriu de descarga «%1$s»
Videu
Audiu
@@ -48,73 +48,73 @@
Espera…
Copióse al cartafueyu
Tarrezmes
- Formatu predetermináu de videu
+ Formatu de videu predetermináu
Prietu
Canal
Sí
- Mil
- Mill.
- Mil mill.
- Precísase esti permisu
-\np\'abrir nel mou ventanu
+ mil
+ mill.
+ mil mill.
+ Precísase esti permisu p\'abrir
+\nnel mou ventanu
Retu de reCAPTCHA
- Solicitóse\'l retu de reCAPTCHA
+ Solicitóse un retu de reCAPTCHA
En segundu planu
Ventanu
Resolución predeterminada del ventanu
Amosar resoluciones más altes
- Namái dalgunos preseos puen reproducir vídeos en 2K/4K
+ Namás dalgunos preseos puen reproducir videos en 2K/4K
Llimpiar
Quita l\'audiu en dalgunes resoluciones
- Usa xestos pa controlar el brilléu y volume del reproductor
- Guetar suxerencies
- Amuesa suxerencies al guetar
+ Usa xestos pa controlar el volume y brillu del reproductor
+ Suxerencies de busca
+ Amosar suxerencies al buscar
Soscribise
Nun pudo anovase la soscripción
Soscripciones
Novedaes
- Historial de gueta
-
- Sigue cola reproducción dempués de les interrupciones (llamaes telefóniques, por exemplu)
+ Historial de busques
+ Siguir cola reproducción
+ Sigue cola reproducción dempués de les interrupciones (por exemplu, llamaes)
Reproductor
Comportamientu
Historial y caché
La meyor resolución
- Avisu de NewPipe
+ Avisu permanente de NewPipe
Nun hai resultaos
Equí nun hai más que grillos
- %s soscriptor
- %s soscriptores
- Nun hai visualizaciones
+ Nun hai vistes
- - %s visualización
- - %s visualizaciones
+ - %s vista
+ - %s vistes
Descarga
- Caráuteres almitíos nos nomes de ficheros
+ Caráuteres permitíos nos nomes de los ficheros
Lletres y díxitos
La mayoría de caráuteres especiales
Tocante a NewPipe
Axustes
Tocante a
Llicencies de terceros
- © %1$s por %2$s so %3$s
+ © %1$s por %2$s baxo %3$s
Nun pudo cargase la llicencia
Tocante a
Collaboradores
Llicencies
Ver en GitHub
Llicencia de NewPipe
- Si sabes traducir, quies encuriosar el códigu, amestar carauteríques o proponer cambeos nel diseñu, vamos agradecételo siempres. ¡Cuánto más, meyor!
- Lleer la llicencia
+ Si tienes idees, quies traducir, facer dalgún cambéu nel diseñu, acuriosar poco o muncho\'l códigu... Agradecemos l\'ayuda. ¡Cuanto más se faiga, meyor!
+ Lleer
Collaboración
Historial
Vióse
Historial
L\'historial ta baleru
- ¿Quies desaniciar esti elementu del historial de gueta\?
+ ¿Quies desaniciar esti elementu del historial de busques\?
Reproducir too
Nun pudo reproducise esti fluxu
Asocedió un fallu irrecuperable del reproductor
@@ -123,14 +123,14 @@
Esbilla d\'un quioscu
Quioscu
Tendencies
- Destácase
+ Los 50 destacaos
Detalles
- Novedaes
+ Novedaes destacaes
[Desconozse]
Reproducir en segundu planu
-
+ Reproducir nun ventanu
Donación
-
+ NewPipe ta desendolcáu por xente voluntario que pasa\'l tiempu llibre ufriéndote la meyor esperiencia d\'usuariu. Devolvi\'l favor p\'ayudar a los desendolcadores p\'ameyorar NewPipe tovía más mentanto esfruten d\'una taza de café.
Donar
Sitiu web
Visita\'l sitiu web de NewPipe pa más información y noticies.
@@ -138,43 +138,43 @@
Siempres
Importar una base de datos
Esportar la base de datos
- Anula l\'historial y les soscripciones actuales
- Esporta l\'historial, les soscripciones y llistes de reproducción.
- URL nun ye válida
+ Anula l\'historial, les soscripciones, les llistes de reproducción y (opcionalmente) los axustes actuales
+ Esporta l\'historial, les soscripciones, les llistes de reproducción y los axustes
+ La URL nun ye válida
Esto va anular la configuración actual.
Amosar la información
- Llistes de reproducción
+ Llistes en marcadores
Crear
Escartar
¿De xuru que quies desaniciar tolos elementos del historial\?
- Equí va apaecer dalgo ceo ;D
- Llista nueva de repoducción
+ Equí va apaecer daqué pronto ;D
+ Llista de reproducción nueva
Nome
- Amestar a una llista de repoducción
- ¿Desaniciar esta llista de reproducción\?
+ Amestar a una llista de reproducción
+ ¿Desanicair esta llista de reproducción\?
Nun pudo desaniciase la llista de reproducción.
Ensin sotítulos
Axustar
Rellenar
Zoom
- Ficheru
- El ficheru nun esiste o falta\'l permisu d\'escritura o llectura
+ FIcheru
+ El ficheru nun esiste o a l\'aplicación fálta-y el permisu de llectura/escritura
Asocedió un fallu: %1$s
Importación/Esportación
Importando…
Esportando…
Nun pudieron esportase les soscripciones
- Aición preferida d\'apertura
- ¿Quies importar los axustes tamién\?
- Lleer la política de privacidá
+ Aición d\'apertura preferida
+ ¿Quies tamién importar los axustes\?
+ Lleer
Canales
Llistes de reproducción
Pistes
Usuarios
Llingüeta nueva
Usa xestos pa controlar el volume del reproductor
- Usa xestos pa controlar el brilléu del reproductor
- Reafitar
+ Usa xestos pa controlar el brillu del reproductor
+ Reafitamientu de valores
El númberu de soscriptores nun ta disponible
Esbilla
Anovamientos
@@ -184,10 +184,10 @@
Finó
Falló la descarga
Hai una descarga en cursu con esti nome
- Nun pue crease la carpeta de destín
+ La carpeta de destín nun pue crease
Nun pudo afitase una conexón segura
- Nun pue coneutase col sirvidor
- Reintentos máximos
+ Nun pues coneutate al sirvidor
+ Intentos máximos
Eventos
Conferencies
Reproducción automática
@@ -195,50 +195,52 @@
El ficheru movióse o desanicióse
Yá esiste un ficheru con esti nome
Yá esiste un ficheru baxáu con esti nome
- nun pue sobrescribise\'l ficheru
+ nun pue sobrecribise\'l ficheru
Hai una descarga pendiente con esti nome
- Escosó l\'espaciu del preséu
+ Nun queda espaciu nel preséu
Escosó\'l tiempu d\'espera de la conexón
Nun pudieron importase les soscripciones
Sotítulos
Aceutar
¿Quies reafitar los valores\?
-
- El sirvidor nun aceuta descargues multifilu, volvi probar con @string/msg_threads = 1
+ Nun pudo atopase\'l sirvidor
+ El sirvidor nun aceuta descargues multifilu, volvi tentalo con @string/msg_threads = 1
Nun hai comentarios
Llimpieza de datos
- Amosar comentarios
+ Amosar los comentarios
Desactiva esta opción p\'anubrir los comentarios
- 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.
-\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
+ Pa cumplir cola Regulación Xeneral de Proteición de Datos (RGPD), pidímoste que mires la política de privacidá de NewPipe. Lleila con procuru.
+\nHas aceutala pa unvianos informes de fallos.
+ L\'aición al cambiar a otra aplicación dende\'l reproductor de videu princpial — %s
+ El númberu máximu d\'intentos pa encaboxar la descarga
¿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:
-\n
-\n1.- Vete a esta URL: %1$s
-\n2.- Anicia sesión cuando se te pida
-\n3.- Debería aniciase una descarga (que ye\'l ficheru d\'esportación)
- Importa un perfil de SoundCloud teclexando la URL o la ID de to:
-\n1.- Activa\'l mou escritoriu nun restolador web (el sitiu nun ta disponible pa móviles)
+ Importación d\'un ficheru
+ Importa les soscripciones de YouTube dende Google Takeout:
\n
-\n3.- Anicia sesión cuando se te pida
-\n2.- Vete a esta URL: %1$s
-\n4.- Copia la URL del perfil al que se te redirixa.
- LaToID, soundcloud.com/latoid
- Cargar miniatures
- Desactiva esta opción pa evitar la carga de miniatures y aforrar datos y usu de la memoria. Los cambeos van llimpiar la memoria y la caché d\'imáxenes.
- Minimizar al cambiar a otra aplicación
+\n1. Vete a esta URL: %1$s
+\n2. Anicia sesión cuando se te pida
+\n3. Calca en «Tolos datos incluyíos», darréu en «Deseleicionar too», dempués esbilla namás «soscripciones» y calca «Aceutar»
+\n4. Calca en «Pasu siguiente» y darréu en «Crear una esportación»
+\n5. Calca nel botón «Baxar» dempués de qu\'apaeza y
+\n6. A partir del ficheru baxáu, estrái\'l ficheru .json (polo xeneral baxo «YouTube and YouTube Music/subscriptions/subscriptions.json») ya impórtalu equí.
+ Importa un perfil de SoundCloud teclexando la URL o la to ID:
+\n
+\n1. Activa\'l «mou d\'escritoriu» nun restolador web (el sitiu nun ta disponible pa móviles)
+\n2. Vete a esta URL: %1$s
+\n3. Anicia sesión cuando se te pida
+\n4. Copia la URL del perfil al que te redirixeron.
+ soundcloud.com/LaToID
+ Cargar les miniatures
+ Desactiva esta opción pa eviar la carga de miniatures y aforrar datos y usu de memoria. Los cambeos llimpien la caché d\'imáxenes temporal y permanente.
+ Minimizar al cambiar d\'aplicación
Minimizar al reproductor en segundu planu
Minimizar al reproductor en ventanu
- Desoscribise
- Escoyeta d\'una llingüeta
+ Esborrase
+ Esbilla d\'una llingüeta
Siguir cola reproducción
Les llingüetes que s\'amuesen na páxina principal
- Entrugar ánde baxar
+ Entrugar ónde baxar
Descargues
Descargues
@@ -247,26 +249,26 @@
Control per xestos del reproductor
Cargando\'l conteníu solicitáu
- Política de Privacidá de NewPipe
+ Política de privacidá de NewPipe
Control per xestos del volume
- Control per xestos del brilléu
+ Control per xestos del brillu
El ficheru nun pue crease
El sirvidor nun unvia datos
- La llingua va camudar namái que se reanicie l\'aplicación.
- Guetar
+ La llingua va camudar namás que se reanicie l\'aplicación.
+ Buscar
Compartir con
- El ficheru yá esiste
+ Yá esiste\'l ficheru
Soscribiéstite
L\'historial ta desactiváu
Nun hai vídeos
- ¿Desaniciar tol historial de guetes\?
- ¡Hai un anovamientu disponible pa NewPipe!
- Toca pa baxar la versión
+ ¿Desaniciar tol historial de busques\?
+ ¡Hai un anovamientu pa NewPipe!
+ Toca pa baxalu
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
+ Lo predeterminao del sistema
Vídeos
- %d segundu
@@ -275,14 +277,14 @@
Tempu
Tonu
Refugar
- La URL nun se sofita
+ La URL nun ta sofitada
Reproduciendo en segundu planu
Reproduciendo nel mou ventanu
- Atroxa llocalmente les consultes de gueta
- Los reproductores esternos nun so
+ Atroxa llocalmente les consultes de busca
+ Los reproductores esternos nun sofiten esti tipu d\'enllaces
Esportóse
Importóse
- Alvertencia: Nun pudieron importase tolos ficheros.
+ Alvertencia: nun pudieron importase tolos ficheros.
Anovamientos
Finó la descarga
Nun pudo validase la instancia
@@ -299,10 +301,352 @@
- %d díes
¿Quies desaniciar esti grupu\?
- Llipióse la caché de metadatos
- Desanicia los datos de les páxines web na caché
+ Llimpióse la caché de metadatos
+ Desanicia tolos datos na caché de les páxines web
Llimpiar los metadatos de la caché
Llimpióse la caché d\'imáxenes
- ¿Instalar l\'aplicación Kore\?
- Reproduz un videu cuando s\'invoca a NewPipe dende otra aplicación
+ ¿Instalar Kore\?
+ Reproduz un videu al llamar a NewPipe dende otra aplicación
+ Qué asocedió:\\nSolicitú:\\nLlingua del conteníu:\\nPaís del conteníu:\\nLlingua de l\'aplicación:\\nServiciu:\\nHora en GMT:\\nPaquete:\\nVersión de l\'aplicación:\\nVersión del SO:
+ Nun s\'atopó nengún reproductor de fluxos (pues instalar VLC pa reproducilos).
+ Amuesa una miniatura nel fondu de la pantalla de bloquéu y dientro de los avisos
+ Amosar una miniatura
+ Páxina d\'una llista de reproducción
+ Por %s
+ Canal creada por %s
+ Avatar de la canal
+ Esti conteníu entá nun ta sofitáu por NewPipe.
+\n
+\nQuiciabes nel futuru sí.
+ ¿Cuides que la carga del feed ye perlenta\? Si ye asina, activa la carga rápida (pues camudalo nos axustes o primiendo\'l botón d\'embaxo).
+\n
+\nNewPipe ufre dos estratexes de descarga de feeds:
+\n• Dir en cata de tola canal de soscripciones, lo cual ye lento pero completo.
+\n• Usar un serviciu final dedicáu, lo cual ye rápido mas xeneralmente incompleto.
+\n
+\nLa diferencia ente los dos ye qu\'al más rápidu, polo xeneral, fálta-y dalguna información como\'l tipu (nun pue estremar ente vídeos en direuto o normales) o la duración de los elementos (que devuelve menos).
+\n
+\nYouTube ye l\'exemplu d\'un serviciu qu\'ufre esti métodu rápidu col so feed RSS.
+\n
+\nPolo que tu escueyes según lo que prefieras, si velocidá o información precisa.
+ Desactivar el mou rápidu
+ Activar el mou rápidu
+ Disponible en dalgunos preseos, suel ser muncho más rápido mas podría devolver un númberu llendáu d\'elementos y davezu información completa (por exemplu, falta de la duración, el tipu d\'elementu o l\'estáu de la tresmisión).
+ Dir en cata de feeds dedicaos cuando seya posible
+ Anovar siempres
+ Tiempu que tarda (dende l\'últimu anovamientu) en considerase una soscripción ensin anovar — %s
+ Llende del anovamientu del feed
+ Feed
+ Amosar namás les soscripciones ensin agrupar
+ Nuevu
+ El nome del grupu ta baleru
+
+ - %d na esbilla
+ - %d na esbilla
+
+ Nun s\'esbilló nenguna soscripción
+ Esbillar soscripciones
+ Procesando\'l feed…
+ Cargando\'l feed…
+ Númberu d\'elementos que nun cargaron: %d
+ Últimu anovamientu del feed: %s
+ Grupos de canales
+ Pola mor de les torgues d\'ExoPlayer la duración afitóse en %d segundos
+ Sí, y tamién los vistos parcialmente
+ Van desaniciase los vídeos que se vieren enantes y dempués d\'amestase a la llista de reproducción.
+\n¿De xuru\? ¡Esto nun pue desfacese!
+ ¿Desaniciar los vídeos vistos\?
+ Desaniciar lo visto
+ Escoyeta d\'una instancia
+ El «Storage Access Framework» permite les descargues nuna tarxeta SD esterna.
+\nDalgunos preseos son incompatibles
+ Usar SAF
+ Va pidísete l\'allugamientu onde guardar les descargues con cauna.
+\nEscueyi SAF si quies guardar les descargues na tarxeta SD esterna
+ Va pidísete l\'allugamientu onde guardar les descargues con cauna
+ Posar les descargues
+ Aniciar les descargues
+ Namás va executase una descarga al empar
+ Llendar la cola de descarga
+ Zarrar
+ Útil al cambiar a los datos móviles, magar que dalgunes descargues nun puedan suspendese
+ Torgar nes redes midíes
+ Parar
+ Desaniciáronse %1$d descargues
+ Desaniciar lo baxao
+ Llimpiar l\'historial de descargues
+ Esta descarga nun pue recuperase
+ NewPipe zarróse mentanto trabayaba nel ficheru
+ Falló\'l posprocesamientu
+ Nun s\'atopó
+ El sistema negó\'l permisu
+ Códigu
+ Amosar el fallu
+ Sobrescribir
+ Xenerar un nome únicu
+ Finaron %s descargues
+ El sistema negó l\'aición
+ Amestar a la cola
+ recuperando
+ posprocesando
+ na cola
+ posóse
+ Pendiente
+ Cambiar la vista
+ Auto
+ Mou de la vista de les llistes
+ Enxamás
+ Namás na Wi-Fi
+ Anicia automáticamente la reproducción — %s
+ Nada
+ Llendar la resolución al usar los datos móviles
+ Ensin llende
+ Reafitar
+ Pasu
+ Avance rápidu nos silencios
+ Separtar (pue causar distorsión)
+ Controles de la velocidá de reproducción
+ Ten en cuenta qu\'esta operación pue ser esixente cola rede.
+\n
+\n¿Quies siguir\?
+ Esportar a
+ Importar dende
+ Importar
+ Los testos orxinales de los servicios van amosase nos elementos de les tresmisiones
+ Amosar les marques de tiempu orixinales
+ Forcia l\'informe d\'esceiciones Rx que nun se puen entregar fuera del ciclu de vida d\'un fragmentu o actividá dempués de desanicialos
+ Informar de fallos fuera de ciclu
+ Amosar los escapes de memoria
+ La supervisión de los escapes de memoria pue facer que l\'aplicación nun respuenda al volquiar la pila
+ Modifica\'l testu de los sotítulos y el so fondu. Rique\'l reaniciu de l\'aplicación pa que faiga efeutu.
+ Xeneróse automáticamente
+ Xeneróse automáticamente (nun s\'atopó\'l xubidor)
+ Camudóse la miniatura de la llista de reproducción.
+ Metióse nuna llista de reproducción
+ Creóse la llista de reproducción
+ Desaniciar el marcador
+ Amestar la llista a marcadores
+ Afitar como la miniatura de la llista
+ Desactivar el soníu
+ Activar el soníu
+ Renomar
+ Desaniciar
+ Consiguiendo la información…
+ Entrugar siempres
+ Reproductor en ventanu
+ Reproductor en segundu planu
+ Reproductor de videu
+ L\'aición predeterminada al abrir conteníu — %s
+ Zarrar el caxón
+ Abrir el caxón
+ Reproducir equí
+ Amestóse a la cola
+ Amestar a la cola
+ Ten primío p\'amestar a la cola
+ Axustes del audiu
+ Desaniciar
+ Cola de reproducción
+ Lo que más prestó
+ Amestóse apocayá
+ Llocal
+ El ficheru ZIP nun ye válidu
+ Entá nun hai llistes en marcadores
+ Esbilla d\'una llista de reproducción
+ Entá nun hai soscripciones a canales
+ Esbilla d\'una canal
+ Páxina d\'una canal
+ Páxina del feed
+ Páxina de soscripciones
+ Quioscu predetermináu
+ Páxina de quioscu
+ Lo más reproducío
+ Lo último reproducío
+ ¿Quies desaniciar esti elementu del historial de vídeos vistos\?
+ Desanicióse l\'elementu
+ Llimpióse l\'historial
+ Buscóse
+ NewPipe ye software copyleft: pues usalu, estudialu, compartilu y ameyoralu como quieras. N\'especial, pues redistribuyilu y/o modificalu baxo los términos de la GNU General Public License según espublizó la Free Software Foundation, quier la versión 3 de la llicencia quier (na to opinión) cualesquier versión posterior.
+ El proyeutu de NewPipe toma mui en serio la privacidá. Poro, l\'aplicación nun recueye nengún datu ensin el to consentimientu.
+\nLa política de privacidá de NewPipe desplica en detalle los datos que s\'unvien y atroxen cuando unvies un informe de casque.
+ Un aplicación llibre pa ver/sentir plataformes de tresmisión n\'Android.
+ Abrir el sitiu web
+ Nun hai nenguna aplicación pa reproducir esti ficheru
+ Caráuteres de troquéu
+ Los caráuteres que nun son válidos van trocase por esti valor
+ Fecho
+ Primi «Fecho» al resolvelu
+ Desanicióse 1 elementu.
+ Defini una capeta de descargues dempués, nos axustes de l\'aplicación
+ Toca pa los detalles
+ Descarga de NewPipe
+ La URL ta mal formada o internet nun ta disponible
+ El sirvidor nun ta sofitáu
+ Nome del ficheru
+ Renomar
+ Desaniciar too
+ Desaniciar un elementu
+ Reproducir
+ Posar
+ Aniciar
+ Vídeos ∞
+ +100 vídeos
+
+ - %s oyente
+ - %s oyentes
+
+ Naide nun ta sintiendo
+
+ - %s espectador
+ - %s espectadores
+
+ Nun hai espectadores
+ Nun hai soscriptores
+ Alternar el serviciu, esbillóse:
+ Concedi l\'accesu al almacenamientu primero
+ Retentar
+ Nun pue crease\'l direutoriu de descarga «%1$s»
+ Arrastra pa reordenar
+ Informe d\'usuariu
+ Informar del fallu
+ (Esperimental) Forcia\'l tráficu de les descargues pente Tor pa más privacidá (la reproducción de vídeos entá nun se sofita).
+ Avatar del xubidor
+ Reproducción d\'un videu, duración:
+ Miniatura del videu
+ Un comentariu (n\'inglés):
+ Qué pasó:
+ Informar
+ Comprueba si yá esiste un problema qu\'alderique esti casque, por favor. Al crear informes duplicaos faes que perdamos el tiempu que podríemos dedicar a iguar el fallu.
+ Informar en GitHub
+ Copiar l\'informe con formatu
+ Informar d\'esti fallu per corréu
+ Da\'l permisu p\'amosar NewPipe penriba d\'otres aplicaciones
+ Nun pudieron lleese les llingüetes guardaes polo que van usase les predeterminaes
+ Nun hai fluxos disponibles pa baxar
+ El nome del ficheru nun pue tar baleru
+ El ficheru/orixe del conteníu nun esiste
+ La carpeta nun esiste
+ Nun s\'atoparon fluxos d\'audiu
+ Nun s\'atoparon fluxos de videu
+ L\'aplicación ta recuperándose d\'un fallu del reproductor
+ L\'aplicación/IU cascó
+ Nun pudo cargase la imaxe
+ Nun pudo configurase\'l menú de descarga
+ El conteníu nun ta disponible
+ Nun pudo analizase dafechu\'l sitiu web
+ Fallu de la rede
+ La descarga a la tarxeta SD nun ye posible. ¿Reafitar l\'allugamientu de la carpeta de descarga\?
+ L\'almacenamientu esternu nun ta disponible
+ Ayuda
+ Desanicióse l\'historial de busques.
+ Desanicia l\'historial de les pallabres clave de busca
+ Llimpiar l\'historial de busca
+ Desaniciáronse los puntos de reproducción.
+ ¿Desaniciar tolos puntos de reproducción\?
+ Desanicia tolos puntos de reproducción
+ Desaniciar los puntos de reproducción
+ Desanicióse l\'historial de vídeos vistos.
+ ¿Desaniciar tol historial de vídeos vistos\?
+ Desanicia l\'historial de fluxos reproducíos y el de puntos de reproducción
+ Llimpiar l\'historial de los vídeos vistos
+ Llimpia les cookies que NewPipe atrroxa cuando soluciones un reCAPTCHA
+ Llimpiáronse les cookies de reCAPTCHA
+ Llimpiar les cookies de reCAPTCHA
+ Cambiar al reproductor principal
+ Cambiar al reproductor en ventanu
+ Cambiar al reproductor en segundu planu
+ Alternar la orientación
+ Anovamientos pa NewPipe
+ Avisos d\'anovamientos
+ Avisos de los reproductores en segundu planu y en ventanu de NewPipe
+ Namás una vegada
+ Desanicióse\'l ficheru
+ Desfacer
+ Redimensionáu
+ Refrescar
+ Peñerar
+ Desactivóse
+ Dempués
+ Artistes
+ Álbumes
+ Canciones
+ Llista de reproducción
+ Too
+ Informe d\'un fallu
+ Tien una torga por edá.
+\n
+\nActiva «%1$s» nos axustes de l\'aplicación si quies velu.
+ YouTube forne\'l «Mou torgáu» qu\'anubre conteníu\'l que seya potencialmente p\'adultos
+ Activar el «Mou torgáu» de YouTube
+ Amuesa\'l conteníu que quiciabes nun seya afayadizu pa guaḥes porque tien una llende d\'edá (como +18)
+ Amestóse a la cola del reproductor en ventanu
+ Amestóse a la cola del reproductor en segundu planu
+ Avisu permanente
+ Depuración
+ Miscelánea
+ Ventanu
+ Namás se sofiten URLs HTTPS
+ Introduz la URL d\'una instancia
+ Amiestu d\'una instancia
+ Atopa les instancies que te presten en %s
+ Esbilla les instancies de PeerTube que prefieras
+ Serviciu
+ Nun pudo reconocese la URL. ¿Abrila con otra aplicación\?
+ Amuesa\'l mensaxe al primir el nel botón «En segundu planu» o «Ventanu» nel «Details:» de los vídeos
+ Amosar el mensaxe «Ten primío p\'amestar a la cola»
+ Amosar los vídeos siguientes y asemeyaos
+ Descarga
+ Rexistra los vídeos vistos
+ Amuesa los indicadores de los puntos de reprodución nes llistes
+ Puntos de reproducción nes llistes
+ Restaura l\'últimu puntu de reproducción
+ Historial de vídeos vistos
+ Cola automática
+ Amiesta un videu rellacionáu a la cola cuando se repoduz l\'últimu videu a una cola ensin repitición
+ Meter les tresmisiones siguientes a cola automática
+ Va trocase la cola del reproductor activu
+ Cambiar d\'un reproductor a otru pue trocar la cola
+ Confirmar la llimpieza de les coles
+ Duración de la gueta del avance/rebobináu rápidu
+ La gueta imprecisa permite al reproductor que guete les posiciones más rápido con menos precisión. La gueta de 5, 15 ó 25 segundos nun funciona con esti axuste.
+ Usar la gueta rápida imprecisa
+ Acuérdase del últimu tamañu y la última posición del ventanu
+ Acordase de les propiedaes del ventanu
+ Fai qu\'Android personalice\'l color del avisu permanente según el color principal de les miniatures (decátate qu\'esto nun ta disponible en tolos preseos)
+ Avisu con color
+ Nada
+ Atroxar nel búfer
+ Al debalu
+ Repitir
+ ¡Pues esbillar tres aiciones como máximu p\'amosar nel avisu permanente!
+ Edita cada aición d\'embaxo tocando nelles. Esbilla hasta tres p\'amosales nel avisu compautu col usu de los caxellos de la derercha.
+ Quintu botón d\'aición
+ Cuartu botón d\'aición
+ Tercer botón d\'aición
+ Segundu botón d\'aición
+ Primer botón d\'aición
+ Escala les miniatures de los vídeos que s\'amuesen nel avisu permanente de los 16:9 al 1:1 (podría distorsionar les imáxenes)
+ Afitar la escala 1:1 a les miniatures
+ Reproducción automática
+ Camuda les carpetes de descarga pa que faiga efeutu
+ Escueyi la carpeta de descarga pa los ficheros d\'audiu
+ Los ficheros d\'audiu baxaos atróxense equí
+ Carpeta de la descarga d\'audiu
+ Escueyi la carpeta de descarga pa los ficheros de videu
+ Los ficheros de videu baxaos atróxense equí
+ Carpeta de la descarga de vídeos
+ Meter nuna llista
+ Principal
+ Nun pudo camudar la soscripción
+ Esborriéstite de la canal
+ Mou ventanu
+ voltéu
+ Escoyer un restolador
+ Amosando los resultaos de: %s
+ Baxar el ficheru de fluxos
+ Baxar
+ Abrir nel mou ventanu
+ Instalar
+ Nun s\'atopó nengún reproductor de fluxos. ¿Instalar VLC\?
+ Toca «Buscar» pa entamar
+\n
\ No newline at end of file
From 7c8ac04e3552dee7c14d990a627b2b83a8f038a5 Mon Sep 17 00:00:00 2001
From: Milo Ivir
Date: Wed, 9 Dec 2020 18:37:37 +0000
Subject: [PATCH 059/182] Translated using Weblate (Croatian)
Currently translated at 99.6% (607 of 609 strings)
---
app/src/main/res/values-hr/strings.xml | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 90a65531e..063686d8f 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -290,15 +290,15 @@
Prijeđi na glavni
Uvoz baze podataka
Izvoz baze podataka
- Poništava vašu trenutnu povijest i pretplate
- Izvezi povijest, pretplate i playliste
- Očisti povijest gledanja
+ Poništava vašu trenutačnu povijest, pretplate, playliste i (opcionalno) postavke
+ Izvezi povijest, pretplate, playliste i postavke
+ Izbriši povijest gledanja
Briše povijest reproduciranih streamova i pozicije reprodukcije
- Obriši cijelu povijest gledanja\?
- Povijest gledanja izbrisana.
- Obriši povijest pretraživanja
- Obriši cijelu povijest pretraživanja\?
- Povijest pretraživanja obrisana.
+ Izbrisati cijelu povijest gledanja\?
+ Povijest gledanja je izbrisana.
+ Izbriši povijest pretraživanja
+ Izbrisati cijelu povijest pretraživanja\?
+ Povijest pretraživanja je izbrisana.
Neispravan URL
Nema takve mape
Naziv datoteke ne može biti prazan
@@ -477,9 +477,9 @@
Započni preuzimanja
Zaustavi preuzimanja
Pitaj gdje preuzeti
- Obriši poziciju reprodukcije
- Obriši sve pozicije reprodukcije
- Obriši sve pozicije reprodukcije\?
+ Izbriši poziciju reprodukcije
+ Izbriši sve pozicije reprodukcije
+ Izbrisati sve pozicije reprodukcije\?
Nitko ne gleda
Nitko ne sluša
Jezik će se promjeniti nakon ponovnog pokretanja aplikacije.
@@ -641,4 +641,8 @@
Prikaži minijaturu kao pozadinu pri zaključanom ekranu i unutar obavijesti
Prikaži minijaturu
Prikaži izvorno vrijeme elemenata
+ „Okvir za pristup spremištu” omogućuje preuzimanje na SD karticu.
+\nNeki uređaji nisu kompatibilni
+ Izvorni tekstovi usluga bit će vidljivi u elementima prijenosa
+ Dostupno je u nekim uslugama. Obično je puno brže, ali može vratiti ograničenu količinu predmeta i često nepotpune podatke (npr. bez trajanja, vrste predmeta, bez stanja uživo).
\ No newline at end of file
From 6cc308920456366733a97fba4fe1259d7b742f2e Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 9 Dec 2020 23:37:26 +0100
Subject: [PATCH 060/182] Add changelog for 0.20.6
---
fastlane/metadata/android/en-US/changelogs/970.txt | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 fastlane/metadata/android/en-US/changelogs/970.txt
diff --git a/fastlane/metadata/android/en-US/changelogs/970.txt b/fastlane/metadata/android/en-US/changelogs/970.txt
new file mode 100644
index 000000000..98c1865c7
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/970.txt
@@ -0,0 +1,4 @@
+• Improved description of export database option in settings.
+• Fixed YouTube comments parsing.
+• Fixed display name of media.ccc.de service.
+• Updated translations.
\ No newline at end of file
From 8a23de6b205abc3098655e6c47cee94cc4874a35 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 9 Dec 2020 23:40:54 +0100
Subject: [PATCH 061/182] Version code 960, not 970...
---
fastlane/metadata/android/en-US/changelogs/{970.txt => 960.txt} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename fastlane/metadata/android/en-US/changelogs/{970.txt => 960.txt} (100%)
diff --git a/fastlane/metadata/android/en-US/changelogs/970.txt b/fastlane/metadata/android/en-US/changelogs/960.txt
similarity index 100%
rename from fastlane/metadata/android/en-US/changelogs/970.txt
rename to fastlane/metadata/android/en-US/changelogs/960.txt
From 7ed0dbcf1ac52dc5459181c595fd778436a1e4ba Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 9 Dec 2020 23:43:02 +0100
Subject: [PATCH 062/182] Release 0.20.6 (960)
---
app/build.gradle | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 2ffb788d6..202d7e000 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -13,8 +13,8 @@ android {
resValue "string", "app_name", "NewPipe"
minSdkVersion 19
targetSdkVersion 29
- versionCode 959
- versionName "0.20.5"
+ versionCode 960
+ versionName "0.20.6"
multiDexEnabled true
From b27b49e4f3c2a2654cba7f9c73cb2ea1f29338db Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 9 Dec 2020 23:46:55 +0100
Subject: [PATCH 063/182] Update NewPipe Extractor to 0.20.6
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 202d7e000..87215b385 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -175,7 +175,7 @@ dependencies {
// NewPipe dependencies
// You can use a local version by uncommenting a few lines in settings.gradle
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:175df679e05b24b6094570d719cc11f8dfc17c68'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:b3835bd616ab28b861c83dcefd56e1754c6d20be'
implementation "com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751"
implementation "org.jsoup:jsoup:1.13.1"
From c0d6c8aeb37490d8a0274c33e5b1557842147342 Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Wed, 2 Dec 2020 09:39:40 +0530
Subject: [PATCH 064/182] Add a workaround for a possible null offset ID.
---
.../org/schabi/newpipe/ktx/OffsetDateTime.kt | 25 +++++++++++++--
.../org/schabi/newpipe/util/Localization.java | 4 +--
.../ktx/OffsetDateTimeToCalendarTest.kt | 31 +++++++++++++++++++
3 files changed, 55 insertions(+), 5 deletions(-)
create mode 100644 app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt
diff --git a/app/src/main/java/org/schabi/newpipe/ktx/OffsetDateTime.kt b/app/src/main/java/org/schabi/newpipe/ktx/OffsetDateTime.kt
index b3df83c25..0d1a534b9 100644
--- a/app/src/main/java/org/schabi/newpipe/ktx/OffsetDateTime.kt
+++ b/app/src/main/java/org/schabi/newpipe/ktx/OffsetDateTime.kt
@@ -1,10 +1,29 @@
package org.schabi.newpipe.ktx
import java.time.OffsetDateTime
-import java.time.ZoneId
+import java.time.ZoneOffset
+import java.time.temporal.ChronoField
import java.util.Calendar
+import java.util.Date
import java.util.GregorianCalendar
+import java.util.TimeZone
-fun OffsetDateTime.toCalendar(zoneId: ZoneId = ZoneId.systemDefault()): Calendar {
- return GregorianCalendar.from(if (zoneId != offset) atZoneSameInstant(zoneId) else toZonedDateTime())
+// This method is a modified version of GregorianCalendar.from(ZonedDateTime).
+// Math.addExact() and Math.multiplyExact() are desugared even though lint displays a warning.
+@SuppressWarnings("NewApi")
+fun OffsetDateTime.toCalendar(): Calendar {
+ val cal = GregorianCalendar(TimeZone.getTimeZone("UTC"))
+ val offsetDateTimeUTC = withOffsetSameInstant(ZoneOffset.UTC)
+ cal.gregorianChange = Date(Long.MIN_VALUE)
+ cal.firstDayOfWeek = Calendar.MONDAY
+ cal.minimalDaysInFirstWeek = 4
+ try {
+ cal.timeInMillis = Math.addExact(
+ Math.multiplyExact(offsetDateTimeUTC.toEpochSecond(), 1000),
+ offsetDateTimeUTC[ChronoField.MILLI_OF_SECOND].toLong()
+ )
+ } catch (ex: ArithmeticException) {
+ throw IllegalArgumentException(ex)
+ }
+ return cal
}
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 afe2c0467..710827864 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -20,6 +20,7 @@ import org.ocpsoft.prettytime.units.Decade;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.ListExtractor;
import org.schabi.newpipe.extractor.localization.ContentCountry;
+import org.schabi.newpipe.ktx.OffsetDateTimeKt;
import java.math.BigDecimal;
import java.math.RoundingMode;
@@ -30,7 +31,6 @@ import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Arrays;
import java.util.Calendar;
-import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
@@ -314,7 +314,7 @@ public final class Localization {
}
public static String relativeTime(final OffsetDateTime offsetDateTime) {
- return relativeTime(GregorianCalendar.from(offsetDateTime.toZonedDateTime()));
+ return relativeTime(OffsetDateTimeKt.toCalendar(offsetDateTime));
}
public static String relativeTime(final Calendar calendarTime) {
diff --git a/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt b/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt
new file mode 100644
index 000000000..c93d36eb5
--- /dev/null
+++ b/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt
@@ -0,0 +1,31 @@
+package org.schabi.newpipe.ktx
+
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import java.time.LocalDate
+import java.time.OffsetDateTime
+import java.time.ZoneId
+import java.time.ZoneOffset
+import java.util.Calendar
+import java.util.TimeZone
+
+class OffsetDateTimeToCalendarTest {
+ @Test
+ fun testRelativeTimeWithCurrentOffsetDateTime() {
+ val calendar = LocalDate.of(2020, 1, 1).atStartOfDay().atOffset(ZoneOffset.UTC)
+ .toCalendar()
+
+ assertEquals(2020, calendar[Calendar.YEAR])
+ assertEquals(0, calendar[Calendar.MONTH])
+ assertEquals(1, calendar[Calendar.DAY_OF_MONTH])
+ assertEquals(0, calendar[Calendar.HOUR])
+ assertEquals(0, calendar[Calendar.MINUTE])
+ assertEquals(0, calendar[Calendar.SECOND])
+ assertEquals(TimeZone.getTimeZone("UTC"), calendar.timeZone)
+ }
+
+ @Test(expected = IllegalArgumentException::class)
+ fun testRelativeTimeWithFarOffOffsetDateTime() {
+ OffsetDateTime.MAX.minusYears(1).toCalendar()
+ }
+}
From 567ffad41d1ce89d593ae9d313945e570f0908ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Thu, 10 Dec 2020 04:41:02 +0000
Subject: [PATCH 065/182] Translated using Weblate (Turkish)
Currently translated at 19.5% (8 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/
---
fastlane/metadata/android/tr/changelogs/960.txt | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 fastlane/metadata/android/tr/changelogs/960.txt
diff --git a/fastlane/metadata/android/tr/changelogs/960.txt b/fastlane/metadata/android/tr/changelogs/960.txt
new file mode 100644
index 000000000..70e1fb913
--- /dev/null
+++ b/fastlane/metadata/android/tr/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Ayarlarda veri tabanı dışa aktarma seçeneğinin açıklaması iyileştirildi.
+• YouTube yorumlarının ayrıştırılması düzeltildi.
+• media.ccc.de hizmetinin görünen adı düzeltildi.
+• Çeviriler güncellendi.
From 8e2fd9ccceb99ee9d85a1aec157868396d848cb5 Mon Sep 17 00:00:00 2001
From: David Braz
Date: Wed, 9 Dec 2020 22:50:18 +0000
Subject: [PATCH 066/182] Translated using Weblate (Portuguese (Brazil))
Currently translated at 26.8% (11 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_BR/
---
fastlane/metadata/android/pt_BR/changelogs/960.txt | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 fastlane/metadata/android/pt_BR/changelogs/960.txt
diff --git a/fastlane/metadata/android/pt_BR/changelogs/960.txt b/fastlane/metadata/android/pt_BR/changelogs/960.txt
new file mode 100644
index 000000000..6e0fa0924
--- /dev/null
+++ b/fastlane/metadata/android/pt_BR/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Melhorada a descrição da opção de banco de dados de exportação nas configurações.
+• Corrigido os comentários do YouTube.
+• Corrigido o nome de exibição do serviço media.ccc.de.
+• Traduções atualizadas.
From 90150c42ed190fdfefb2e1cc47d655f136a837c9 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Thu, 10 Dec 2020 04:36:44 +0000
Subject: [PATCH 067/182] Translated using Weblate (Hebrew)
Currently translated at 29.2% (12 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/
---
fastlane/metadata/android/he/changelogs/960.txt | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 fastlane/metadata/android/he/changelogs/960.txt
diff --git a/fastlane/metadata/android/he/changelogs/960.txt b/fastlane/metadata/android/he/changelogs/960.txt
new file mode 100644
index 000000000..211acf887
--- /dev/null
+++ b/fastlane/metadata/android/he/changelogs/960.txt
@@ -0,0 +1,4 @@
+• תיאור מסד הנתונים המיוצא בהגדרות השתפר.
+• תוקן פענוח התגובות ב־YouTube.
+• תוקן שם התצוגה של השירות media.ccc.de.
+• התרגומים עודכנו.
From b967d7c148514e50e05b7d8e3c92359e895e33ec Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Thu, 10 Dec 2020 06:38:14 +0000
Subject: [PATCH 068/182] Translated using Weblate (Dutch)
Currently translated at 17.0% (7 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nl/
---
fastlane/metadata/android/nl/changelogs/959.txt | 3 +++
fastlane/metadata/android/nl/changelogs/960.txt | 4 ++++
2 files changed, 7 insertions(+)
create mode 100644 fastlane/metadata/android/nl/changelogs/959.txt
create mode 100644 fastlane/metadata/android/nl/changelogs/960.txt
diff --git a/fastlane/metadata/android/nl/changelogs/959.txt b/fastlane/metadata/android/nl/changelogs/959.txt
new file mode 100644
index 000000000..d62971c4d
--- /dev/null
+++ b/fastlane/metadata/android/nl/changelogs/959.txt
@@ -0,0 +1,3 @@
+Probleem opgelost met oneindige reeks van crashes na het openen van de foutrapportage.
+Lijst met PeerTube instanties die automatisch kunnen worden geopend door NewPipe bijgewerkt.
+Vertalingen bijgewerkt.
diff --git a/fastlane/metadata/android/nl/changelogs/960.txt b/fastlane/metadata/android/nl/changelogs/960.txt
new file mode 100644
index 000000000..761028b71
--- /dev/null
+++ b/fastlane/metadata/android/nl/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Verbeterde beschrijving van de export database optie in de instellingen.
+• Probleem opgelost met parsen van YouTube-reacties.
+• Probleem opgelost met de weergavenaam van de media.ccc.de service.
+• Vertalingen bijgewerkt.
From 69ed531a5c804a929b2a802b5ed9e9efa34144c6 Mon Sep 17 00:00:00 2001
From: Stefan Br
Date: Thu, 10 Dec 2020 18:54:31 +0000
Subject: [PATCH 069/182] Translated using Weblate (German)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-de/strings.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 6effa7615..121f74ee1 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -105,7 +105,7 @@
Nicht unterstützter Server
Konnte Bild nicht laden
App/UI abgestürzt
- Threads
+ Themen
NewPipe lädt herunter
Für Details antippen
Ungültige URL oder Internet nicht verfügbar
@@ -317,7 +317,7 @@
\nMöchtest du fortfahren\?
Vorschaubilder laden
Bilder-Cache gelöscht
- Zwischengespeicherte Metadaten löschen
+ Zwischengespeicherte (Metadaten) löschen
Alle zwischengespeicherten Website-Daten entfernen
Metadatencache gelöscht
Debug
@@ -636,7 +636,7 @@
Automatische Warteschlange
Den Player zu wechseln könnte deine Warteschlange überschreiben
Bestätige das Leeren der Warteschlange
- Die aktive Wiedergabeliste wird ersetzt werden
+ Die aktive Player-Warteschlange wird ersetzt
Eingereiht
YouTube bietet einen „Eingeschränkten Modus“, der potenzielle Inhalte für Erwachsene ausblendet
Speicherlecks anzeigen
@@ -644,7 +644,7 @@
reCAPTCHA-Cookies wurden gelöscht
reCAPTCHA-Cookies löschen
Zeige altersbeschränkte Inhalte (bspw. 18+), welche möglicherweise unpassend für Kinder sein könnten
- Wiedergabe einreihen
+ In Wiedergabe einreihen
Android kann die Farbe der Benachrichtigung entsprechend der Hauptfarbe in der Miniaturansicht anpassen (beachte, dass dies nicht auf allen Geräten verfügbar ist)
Benachrichtigung farblich anpassen
Vorschaubild auf dem Sperrbildschirm als Hintergrund und innerhalb von Benachrichtigungen anzeigen
From e8bd9920fd4ee923eed080d4d13dd753984602b9 Mon Sep 17 00:00:00 2001
From: Ajeje Brazorf
Date: Thu, 10 Dec 2020 13:36:44 +0000
Subject: [PATCH 070/182] Translated using Weblate (Sardinian)
Currently translated at 14.6% (6 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sc/
---
fastlane/metadata/android/sc/changelogs/960.txt | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 fastlane/metadata/android/sc/changelogs/960.txt
diff --git a/fastlane/metadata/android/sc/changelogs/960.txt b/fastlane/metadata/android/sc/changelogs/960.txt
new file mode 100644
index 000000000..f94c77f45
--- /dev/null
+++ b/fastlane/metadata/android/sc/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Megioramentu de sa descritzione de s'optzione de esportatzione de sa base de datos in sas impostatziones.
+• Anàlisi de sos cummentos de YouTube acontzada.
+• Nùmene ammustradu in su servìtziu media.ccc.de acontzadu.
+• Tradutziones agiornadas.
From 5c2d4c4d9df672030fb2a56175463b256df8b720 Mon Sep 17 00:00:00 2001
From: Terry Louwers
Date: Thu, 10 Dec 2020 06:16:38 +0000
Subject: [PATCH 071/182] Translated using Weblate (Dutch)
Currently translated at 100.0% (609 of 609 strings)
---
app/src/main/res/values-nl/strings.xml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 0217368da..e120750fc 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -264,8 +264,8 @@
Bezig met laden van gevraagde inhoud
Databank importeren
Databank exporteren
- Dit overschrijft je huidige geschiedenis en abonnementen
- Exporteer geschiedenis, abonnementen en afspeellijsten
+ Dit overschrijft je huidige geschiedenis, abonnementen, afspeellijsten en (optionele) settings
+ Exporteer geschiedenis, abonnementen, afspeellijsten en settings
Geëxporteerd
Geïmporteerd
Geen geldig ZIP-bestand
@@ -647,4 +647,6 @@
Toon inhoud die mogelijk niet geschikt is voor kinderen omwille van een leeftijdslimiet (zoals 18+)
Laat Android de kleur van de notificatie aanpassen, op basis van de meest voorkomende kleur in de thumbnail (let op: niet beschikbaar op elk apparaat)
Notificatie kleur aanpassen
+ Toon miniatuurafbeelding op het vergrendelscherm als achtergrond en binnen meldingen
+ Toon miniatuurafbeelding
\ No newline at end of file
From efb417dba70d4ca9341b2561a9d70ebb4b3bddf8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Allan=20Nordh=C3=B8y?=
Date: Wed, 9 Dec 2020 22:52:51 +0000
Subject: [PATCH 072/182] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?=
=?UTF-8?q?an=20Bokm=C3=A5l)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 17.0% (7 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nb_NO/
---
.../metadata/android/nb-NO/changelogs/958.txt | 15 +++++++++++++++
.../metadata/android/nb-NO/changelogs/960.txt | 4 ++++
2 files changed, 19 insertions(+)
create mode 100644 fastlane/metadata/android/nb-NO/changelogs/958.txt
create mode 100644 fastlane/metadata/android/nb-NO/changelogs/960.txt
diff --git a/fastlane/metadata/android/nb-NO/changelogs/958.txt b/fastlane/metadata/android/nb-NO/changelogs/958.txt
new file mode 100644
index 000000000..a0b664480
--- /dev/null
+++ b/fastlane/metadata/android/nb-NO/changelogs/958.txt
@@ -0,0 +1,15 @@
+Nytt og forbedret:
+• Skjuling av miniatyrbilde på låseskjermen er tilbake
+• Trykk for å gjenoppfriske strøm
+• Forbedret ytelse ved innhenting av lokale lister
+
+Fikset:
+• Krasj ved oppstart av NewPipe etter at det ble fjernet fra minne
+• Krasj ved oppstart når det ikke finnes noen internett-tilkobling
+• Repsektering av lys- og lyd- og håndvendingsinnstillinger
+• [YouTube] Lange spillelister
+
+Annet:
+• Kodeopprydding og interne forbedringer
+• Avhengighetsoppdateringer
+• Oversettelser
diff --git a/fastlane/metadata/android/nb-NO/changelogs/960.txt b/fastlane/metadata/android/nb-NO/changelogs/960.txt
new file mode 100644
index 000000000..92cbb6ca1
--- /dev/null
+++ b/fastlane/metadata/android/nb-NO/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Forbedret beskrivelse av innstilling for eksport av database i innstillingene.
+• Fikset tolking av YouTube-kommentarer.
+• Fikset visningsnavn for media.ccc.de service.
+• Oppdaterte oversettelser.
From 917f4595690f2ccd67cc8395caa41ca02ff4ea4e Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Fri, 11 Dec 2020 07:29:24 +0530
Subject: [PATCH 073/182] Use a notification instead of a ProgressDialog in
MissionAdapter.
---
app/src/main/java/org/schabi/newpipe/App.java | 15 ++++++--
.../giga/ui/adapter/MissionAdapter.java | 37 ++++++++++---------
app/src/main/res/values/strings.xml | 4 ++
3 files changed, 36 insertions(+), 20 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java
index de401d4f5..e6dce4d67 100644
--- a/app/src/main/java/org/schabi/newpipe/App.java
+++ b/app/src/main/java/org/schabi/newpipe/App.java
@@ -242,8 +242,9 @@ public class App extends MultiDexApplication {
String name = getString(R.string.notification_channel_name);
String description = getString(R.string.notification_channel_description);
- // Keep this below DEFAULT to avoid making noise on every notification update
- final int importance = NotificationManager.IMPORTANCE_LOW;
+ // Keep this below DEFAULT to avoid making noise on every notification update for the main
+ // and update channels
+ int importance = NotificationManager.IMPORTANCE_LOW;
final NotificationChannel mainChannel = new NotificationChannel(id, name, importance);
mainChannel.setDescription(description);
@@ -255,9 +256,17 @@ public class App extends MultiDexApplication {
final NotificationChannel appUpdateChannel = new NotificationChannel(id, name, importance);
appUpdateChannel.setDescription(description);
+ id = getString(R.string.hash_channel_id);
+ name = getString(R.string.hash_channel_name);
+ description = getString(R.string.hash_channel_description);
+ importance = NotificationManager.IMPORTANCE_HIGH;
+
+ final NotificationChannel hashChannel = new NotificationChannel(id, name, importance);
+ hashChannel.setDescription(description);
+
final NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannels(Arrays.asList(mainChannel,
- appUpdateChannel));
+ appUpdateChannel, hashChannel));
}
protected boolean isDisposedRxExceptionsReported() {
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 be7d78299..f102206c1 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
@@ -1,7 +1,7 @@
package us.shandian.giga.ui.adapter;
import android.annotation.SuppressLint;
-import android.app.ProgressDialog;
+import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
@@ -26,6 +26,8 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
+import androidx.core.app.NotificationCompat;
+import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import androidx.core.view.ViewCompat;
import androidx.recyclerview.widget.DiffUtil;
@@ -91,6 +93,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb
private static final String DEFAULT_MIME_TYPE = "*/*";
private static final String UNDEFINED_ETA = "--:--";
+ private static final int HASH_NOTIFICATION_ID = 123790;
static {
ALGORITHMS.put(R.id.md5, "MD5");
@@ -678,28 +681,28 @@ public class MissionAdapter extends Adapter implements Handler.Callb
return true;
case R.id.md5:
case R.id.sha1:
- ProgressDialog progressDialog = null;
- if (mContext != null) {
- // Create dialog
- progressDialog = new ProgressDialog(mContext);
- progressDialog.setCancelable(false);
- progressDialog.setMessage(mContext.getString(R.string.msg_wait));
- progressDialog.show();
- }
- final ProgressDialog finalProgressDialog = progressDialog;
+ final NotificationManager notificationManager
+ = ContextCompat.getSystemService(mContext, NotificationManager.class);
+ final NotificationCompat.Builder progressNotificationBuilder
+ = new NotificationCompat.Builder(mContext,
+ mContext.getString(R.string.hash_channel_id))
+ .setPriority(NotificationCompat.PRIORITY_HIGH)
+ .setSmallIcon(R.drawable.ic_newpipe_triangle_white)
+ .setContentTitle(mContext.getString(R.string.msg_calculating_hash))
+ .setContentText(mContext.getString(R.string.msg_wait))
+ .setProgress(0, 0, true)
+ .setOngoing(true);
+
+ notificationManager.notify(HASH_NOTIFICATION_ID, progressNotificationBuilder
+ .build());
final StoredFileHelper storage = h.item.mission.storage;
compositeDisposable.add(
Observable.fromCallable(() -> Utility.checksum(storage, ALGORITHMS.get(id)))
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
- if (finalProgressDialog != null) {
- Utility.copyToClipboard(finalProgressDialog.getContext(),
- result);
- if (mContext != null) {
- finalProgressDialog.dismiss();
- }
- }
+ Utility.copyToClipboard(mContext, result);
+ notificationManager.cancel(HASH_NOTIFICATION_ID);
})
);
return true;
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f96518ccf..bc70e793b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -195,6 +195,9 @@
newpipeAppUpdate
App Update Notification
Notifications for new NewPipe version
+ newpipeHash
+ Video Hash Notification
+ Notifications for video hashing progress
[Unknown]
Toggle Orientation
Switch to Background
@@ -347,6 +350,7 @@
Malformed URL or Internet not available
NewPipe Downloading
Tap for details
+ Calculating hash
Please wait…
Copied to clipboard
Please define a download folder later in settings
From c2210330b6d70f08b194065accaef2a067b639fb Mon Sep 17 00:00:00 2001
From: Stypox
Date: Tue, 17 Mar 2020 18:41:39 +0100
Subject: [PATCH 074/182] Show radio instead of Youtube logo in mixes
YouTube mixes have YouTube as a creator, though YouTube's logo is not safe to use as it is a trademark (better safe than sorry)
---
app/build.gradle | 2 +-
.../list/playlist/PlaylistFragment.java | 29 +++++++++++++++----
.../ktx/OffsetDateTimeToCalendarTest.kt | 3 +-
3 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 87215b385..5a8689f70 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -175,7 +175,7 @@ dependencies {
// NewPipe dependencies
// You can use a local version by uncommenting a few lines in settings.gradle
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:b3835bd616ab28b861c83dcefd56e1754c6d20be'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:85fa006214b003f21eacb76c445a167732f19981'
implementation "com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751"
implementation "org.jsoup:jsoup:1.13.1"
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 d1a964fb2..6fa7eb700 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
@@ -11,12 +11,12 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.content.res.AppCompatResources;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
@@ -26,8 +26,10 @@ import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.ListExtractor;
import org.schabi.newpipe.extractor.NewPipe;
+import org.schabi.newpipe.extractor.ServiceList;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
+import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.stream.StreamType;
import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
@@ -44,13 +46,13 @@ import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ShareUtils;
import org.schabi.newpipe.util.StreamDialogEntry;
-import org.schabi.newpipe.util.ThemeHelper;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
+import de.hdodenhof.circleimageview.CircleImageView;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Flowable;
import io.reactivex.rxjava3.core.Single;
@@ -58,6 +60,7 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
+import static org.schabi.newpipe.util.ThemeHelper.resolveResourceIdFromAttr;
public class PlaylistFragment extends BaseListInfoFragment {
private CompositeDisposable disposables;
@@ -74,7 +77,7 @@ public class PlaylistFragment extends BaseListInfoFragment {
private TextView headerTitleView;
private View headerUploaderLayout;
private TextView headerUploaderName;
- private ImageView headerUploaderAvatar;
+ private CircleImageView headerUploaderAvatar;
private TextView headerStreamCount;
private View playlistCtrl;
@@ -301,8 +304,22 @@ public class PlaylistFragment extends BaseListInfoFragment {
playlistCtrl.setVisibility(View.VISIBLE);
- IMAGE_LOADER.displayImage(result.getUploaderAvatarUrl(), headerUploaderAvatar,
- ImageDisplayConstants.DISPLAY_AVATAR_OPTIONS);
+ final String avatarUrl = result.getUploaderAvatarUrl();
+ if (result.getServiceId() == ServiceList.YouTube.getServiceId()
+ && (YoutubeParsingHelper.isYoutubeMixId(result.getId())
+ || YoutubeParsingHelper.isYoutubeMusicMixId(result.getId()))) {
+ // this is an auto-generated playlist (e.g. Youtube mix), so a radio is shown
+ headerUploaderAvatar.setDisableCircularTransformation(true);
+ headerUploaderAvatar.setBorderColor(
+ getResources().getColor(R.color.transparent_background_color));
+ headerUploaderAvatar.setImageDrawable(AppCompatResources.getDrawable(requireContext(),
+ resolveResourceIdFromAttr(requireContext(), R.attr.ic_radio)));
+
+ } else {
+ IMAGE_LOADER.displayImage(avatarUrl, headerUploaderAvatar,
+ ImageDisplayConstants.DISPLAY_AVATAR_OPTIONS);
+ }
+
headerStreamCount.setText(Localization
.localizeStreamCount(getContext(), result.getStreamCount()));
@@ -476,7 +493,7 @@ public class PlaylistFragment extends BaseListInfoFragment {
final int titleRes = playlistEntity == null
? R.string.bookmark_playlist : R.string.unbookmark_playlist;
- playlistBookmarkButton.setIcon(ThemeHelper.resolveResourceIdFromAttr(activity, iconAttr));
+ playlistBookmarkButton.setIcon(resolveResourceIdFromAttr(activity, iconAttr));
playlistBookmarkButton.setTitle(titleRes);
}
}
diff --git a/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt b/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt
index c93d36eb5..74da07998 100644
--- a/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt
+++ b/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt
@@ -4,7 +4,6 @@ import org.junit.Assert.assertEquals
import org.junit.Test
import java.time.LocalDate
import java.time.OffsetDateTime
-import java.time.ZoneId
import java.time.ZoneOffset
import java.util.Calendar
import java.util.TimeZone
@@ -13,7 +12,7 @@ class OffsetDateTimeToCalendarTest {
@Test
fun testRelativeTimeWithCurrentOffsetDateTime() {
val calendar = LocalDate.of(2020, 1, 1).atStartOfDay().atOffset(ZoneOffset.UTC)
- .toCalendar()
+ .toCalendar()
assertEquals(2020, calendar[Calendar.YEAR])
assertEquals(0, calendar[Calendar.MONTH])
From 30613b7064d3988e181b6e601269dc1cfd9e827a Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Tue, 15 Dec 2020 08:02:25 +0530
Subject: [PATCH 075/182] Use ContextCompat.getDataDir().
---
.../settings/ContentSettingsFragment.java | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 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 b0425ebfa..1ef52cd82 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
@@ -11,6 +11,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
@@ -120,15 +121,14 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
@Override
public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
+ final File homeDir = ContextCompat.getDataDir(requireContext());
+ databasesDir = new File(homeDir, "/databases");
+ newpipeDb = new File(homeDir, "/databases/newpipe.db");
+ newpipeDbJournal = new File(homeDir, "/databases/newpipe.db-journal");
+ newpipeDbShm = new File(homeDir, "/databases/newpipe.db-shm");
+ newpipeDbWal = new File(homeDir, "/databases/newpipe.db-wal");
- final String homeDir = getActivity().getApplicationInfo().dataDir;
- databasesDir = new File(homeDir + "/databases");
- newpipeDb = new File(homeDir + "/databases/newpipe.db");
- newpipeDbJournal = new File(homeDir + "/databases/newpipe.db-journal");
- newpipeDbShm = new File(homeDir + "/databases/newpipe.db-shm");
- newpipeDbWal = new File(homeDir + "/databases/newpipe.db-wal");
-
- newpipeSettings = new File(homeDir + "/databases/newpipe.settings");
+ newpipeSettings = new File(homeDir, "/databases/newpipe.settings");
newpipeSettings.delete();
addPreferencesFromResource(R.xml.content_settings);
From 807e4d4af9122a30e5c83e37ce04452c3c88c23b Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Tue, 15 Dec 2020 11:51:26 +0530
Subject: [PATCH 076/182] Use ActivityCompat.recreate().
---
app/src/main/java/org/schabi/newpipe/MainActivity.java | 8 +++-----
.../org/schabi/newpipe/player/ServicePlayerActivity.java | 3 ++-
.../newpipe/settings/AppearanceSettingsFragment.java | 3 ++-
3 files changed, 7 insertions(+), 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 4a8582df2..a5c963ee6 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -50,6 +50,7 @@ import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
+import androidx.core.app.ActivityCompat;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
@@ -218,7 +219,7 @@ public class MainActivity extends AppCompatActivity {
toggleServices();
}
if (lastService != ServiceHelper.getSelectedServiceId(MainActivity.this)) {
- new Handler(Looper.getMainLooper()).post(MainActivity.this::recreate);
+ ActivityCompat.recreate(MainActivity.this);
}
}
});
@@ -497,10 +498,7 @@ public class MainActivity extends AppCompatActivity {
Log.d(TAG, "Theme has changed, recreating activity...");
}
sharedPreferences.edit().putBoolean(Constants.KEY_THEME_CHANGE, false).apply();
- // 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);
+ ActivityCompat.recreate(this);
}
if (sharedPreferences.getBoolean(Constants.KEY_MAIN_PAGE_CHANGE, 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 d1c2be014..4bf6ef9ae 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -20,6 +20,7 @@ import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
+import androidx.core.app.ActivityCompat;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -140,7 +141,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
protected void onResume() {
super.onResume();
if (redraw) {
- recreate();
+ ActivityCompat.recreate(this);
redraw = false;
}
}
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 ab875ed5d..8126bd2c5 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java
@@ -8,6 +8,7 @@ import android.provider.Settings;
import android.widget.Toast;
import androidx.annotation.Nullable;
+import androidx.core.app.ActivityCompat;
import androidx.preference.Preference;
import org.schabi.newpipe.R;
@@ -31,7 +32,7 @@ public class AppearanceSettingsFragment extends BasePreferenceFragment {
if (!newValue.equals(startThemeKey) && getActivity() != null) {
// If it's not the current theme
- getActivity().recreate();
+ ActivityCompat.recreate(requireActivity());
}
return false;
From 99b59f012676e85eff88338cbd7fbb4e4f2c70b9 Mon Sep 17 00:00:00 2001
From: TiA4f8R <74829229+TiA4f8R@users.noreply.github.com>
Date: Tue, 15 Dec 2020 18:57:36 +0100
Subject: [PATCH 077/182] Update NewPipe's API url for new app's version check
---
app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java b/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java
index 916630ae6..0fecc3f96 100644
--- a/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java
+++ b/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersion.java
@@ -48,7 +48,7 @@ public final class CheckForNewAppVersion {
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 String NEWPIPE_API_URL = "https://newpipe.net/api/data.json";
/**
* Method to get the APK's SHA1 key. See https://stackoverflow.com/questions/9293019/#22506133.
From 5397a4e410e340fc52a6ebf452338ab074bc3cd7 Mon Sep 17 00:00:00 2001
From: TiA4f8R <74829229+TiA4f8R@users.noreply.github.com>
Date: Tue, 15 Dec 2020 19:01:33 +0100
Subject: [PATCH 078/182] Update NewPipe website URL strings
---
app/src/main/res/values/strings.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bc70e793b..ecb690044 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -391,14 +391,14 @@
View on GitHub
Donate
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
+ https://newpipe.net/donate
Give back
Website
Visit the NewPipe Website for more info and news.
- https://newpipe.schabi.org/
+ https://newpipe.net/
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.
- https://newpipe.schabi.org/legal/privacy/
+ https://newpipe.net/legal/privacy/
Read privacy policy
NewPipe\'s License
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.
From a7723373a0fc846323e34556c40688055e9f9a02 Mon Sep 17 00:00:00 2001
From: XiangRongLin <41164160+XiangRongLin@users.noreply.github.com>
Date: Tue, 15 Dec 2020 20:18:25 +0100
Subject: [PATCH 079/182] Fix compile error caused by auto merging
#5176 changed `homeDir` from type `String` to `File`. #5059 was based on `homeDir` being a `String`. It was incorrectly auto-resolved by git.
---
.../org/schabi/newpipe/settings/ContentSettingsManager.kt | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsManager.kt b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsManager.kt
index b0ea89993..2682ac5e0 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsManager.kt
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsManager.kt
@@ -15,9 +15,9 @@ class ContentSettingsManager(
private val newpipeSettings: File
) {
- constructor(homeDir: String) : this(
- File("$homeDir/databases/newpipe.db"),
- File("$homeDir/databases/newpipe.settings")
+ constructor(homeDir: File) : this(
+ File(homeDir, "databases/newpipe.db"),
+ File(homeDir, "databases/newpipe.settings")
)
/**
From e0ee3dce40cb01567f2ebfb69dc1a134cd92d142 Mon Sep 17 00:00:00 2001
From: XiangRongLin <41164160+XiangRongLin@users.noreply.github.com>
Date: Thu, 17 Dec 2020 09:40:04 +0100
Subject: [PATCH 080/182] Use @BeforeClass for
ContentSettingsManagerTest.beforeClass
---
.../settings/ContentSettingsManagerTest.kt | 30 +++++++++++--------
1 file changed, 17 insertions(+), 13 deletions(-)
diff --git a/app/src/test/java/org/schabi/newpipe/settings/ContentSettingsManagerTest.kt b/app/src/test/java/org/schabi/newpipe/settings/ContentSettingsManagerTest.kt
index 9809fd5fc..5ac132f7f 100644
--- a/app/src/test/java/org/schabi/newpipe/settings/ContentSettingsManagerTest.kt
+++ b/app/src/test/java/org/schabi/newpipe/settings/ContentSettingsManagerTest.kt
@@ -4,6 +4,7 @@ import android.content.SharedPreferences
import org.junit.Assert
import org.junit.Assume
import org.junit.Before
+import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Suite
@@ -22,24 +23,27 @@ class ContentSettingsManagerTest {
@RunWith(MockitoJUnitRunner::class)
class ExportTest {
- private lateinit var preferences: SharedPreferences
- private lateinit var newpipeDb: File
- private lateinit var newpipeSettings: File
+ companion object {
+ private lateinit var newpipeDb: File
+ private lateinit var newpipeSettings: File
- @Before
- fun beforeClass() {
+ @JvmStatic
+ @BeforeClass
+ fun setupFiles() {
+ val dbPath = ExportTest::class.java.classLoader?.getResource("settings/newpipe.db")?.file
+ val settingsPath = ExportTest::class.java.classLoader?.getResource("settings/newpipe.settings")?.path
+ Assume.assumeNotNull(dbPath)
+ Assume.assumeNotNull(settingsPath)
- val dbPath = javaClass.classLoader?.getResource("settings/newpipe.db")?.file
- val settingsPath = javaClass.classLoader?.getResource("settings/newpipe.settings")?.path
- Assume.assumeNotNull(dbPath)
- Assume.assumeNotNull(settingsPath)
-
- newpipeDb = File(dbPath!!)
- newpipeSettings = File(settingsPath!!)
+ newpipeDb = File(dbPath!!)
+ newpipeSettings = File(settingsPath!!)
+ }
}
+ private lateinit var preferences: SharedPreferences
+
@Before
- fun before() {
+ fun setupMocks() {
preferences = Mockito.mock(SharedPreferences::class.java, Mockito.withSettings().stubOnly())
}
From 10f79e13070b6e858b92a0bcfd55b32240e13197 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Thu, 17 Dec 2020 16:32:03 +0100
Subject: [PATCH 081/182] Remove pbj=1 parameter from YouYube urls in recaptcha
activity
---
.../org/schabi/newpipe/ReCaptchaActivity.java | 17 +++++++-----
.../schabi/newpipe/ReCaptchaActivityTest.kt | 27 +++++++++++++++++++
.../ktx/OffsetDateTimeToCalendarTest.kt | 3 +--
3 files changed, 39 insertions(+), 8 deletions(-)
create mode 100644 app/src/test/java/org/schabi/newpipe/ReCaptchaActivityTest.kt
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index c962ed99d..03c9ae4af 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -53,6 +53,16 @@ public class ReCaptchaActivity extends AppCompatActivity {
public static final String YT_URL = "https://www.youtube.com";
public static final String RECAPTCHA_COOKIES_KEY = "recaptcha_cookies";
+ public static String sanitizeRecaptchaUrl(@Nullable final String url) {
+ if (url == null || url.trim().isEmpty()) {
+ return YT_URL; // YouTube is the most likely service to have thrown a recaptcha
+ } else {
+ // remove "pbj=1" parameter from YouYube urls, as it makes the page JSON and not HTML
+ return url.replace("&pbj=1", "").replace("pbj=1&", "").replace("?pbj=1", "");
+ }
+ }
+
+
private WebView webView;
private String foundCookies = "";
@@ -64,15 +74,10 @@ public class ReCaptchaActivity extends AppCompatActivity {
final Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
- String url = getIntent().getStringExtra(RECAPTCHA_URL_EXTRA);
- if (url == null || url.isEmpty()) {
- url = YT_URL;
- }
-
+ final String url = sanitizeRecaptchaUrl(getIntent().getStringExtra(RECAPTCHA_URL_EXTRA));
// set return to Cancel by default
setResult(RESULT_CANCELED);
-
webView = findViewById(R.id.reCaptchaWebView);
// enable Javascript
diff --git a/app/src/test/java/org/schabi/newpipe/ReCaptchaActivityTest.kt b/app/src/test/java/org/schabi/newpipe/ReCaptchaActivityTest.kt
new file mode 100644
index 000000000..b9f6887f9
--- /dev/null
+++ b/app/src/test/java/org/schabi/newpipe/ReCaptchaActivityTest.kt
@@ -0,0 +1,27 @@
+package org.schabi.newpipe
+
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.schabi.newpipe.ReCaptchaActivity.YT_URL
+
+class ReCaptchaActivityTest {
+ private fun assertSanitized(expected: String, actual: String?) {
+ assertEquals(expected, ReCaptchaActivity.sanitizeRecaptchaUrl(actual))
+ }
+
+ @Test fun `null, empty or blank url is sanitized correctly`() {
+ assertSanitized(YT_URL, null)
+ assertSanitized(YT_URL, "")
+ assertSanitized(YT_URL, " \n \t ")
+ }
+
+ @Test fun `YouTube url containing pbj=1 is sanitized correctly`() {
+ val sanitizedUrl = "https://m.youtube.com/results?search_query=test"
+ assertSanitized(sanitizedUrl, "https://m.youtube.com/results?search_query=test")
+ assertSanitized(sanitizedUrl, "https://m.youtube.com/results?search_query=test&pbj=1&pbj=1")
+ assertSanitized(sanitizedUrl, "https://m.youtube.com/results?pbj=1&search_query=test")
+ assertSanitized("pbj://pbj.pbj.pbj/pbj", "pbj://pbj.pbj.pbj/pbj?pbj=1")
+ assertSanitized("http://www.host.com/b?p1=7&p2=9", "http://www.host.com/b?p1=7&pbj=1&p2=9")
+ assertSanitized("http://www.host.com/a?pbj=0", "http://www.host.com/a?pbj=0")
+ }
+}
diff --git a/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt b/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt
index c93d36eb5..74da07998 100644
--- a/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt
+++ b/app/src/test/java/org/schabi/newpipe/ktx/OffsetDateTimeToCalendarTest.kt
@@ -4,7 +4,6 @@ import org.junit.Assert.assertEquals
import org.junit.Test
import java.time.LocalDate
import java.time.OffsetDateTime
-import java.time.ZoneId
import java.time.ZoneOffset
import java.util.Calendar
import java.util.TimeZone
@@ -13,7 +12,7 @@ class OffsetDateTimeToCalendarTest {
@Test
fun testRelativeTimeWithCurrentOffsetDateTime() {
val calendar = LocalDate.of(2020, 1, 1).atStartOfDay().atOffset(ZoneOffset.UTC)
- .toCalendar()
+ .toCalendar()
assertEquals(2020, calendar[Calendar.YEAR])
assertEquals(0, calendar[Calendar.MONTH])
From aacb1f46a80d9dce55ab4d216279f4dbc205cbc0 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Fri, 18 Dec 2020 18:36:40 +0100
Subject: [PATCH 082/182] Use user agent of DownloaderImpl also in
ReCapthaActivity
Does not contain device info and should also fix some issues about recaptchas not showing up
---
.../org/schabi/newpipe/ReCaptchaActivity.java | 15 ++++++---------
1 file changed, 6 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 03c9ae4af..b6f65c355 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -83,6 +83,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
// enable Javascript
final WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
+ webSettings.setUserAgentString(DownloaderImpl.USER_AGENT);
webView.setWebViewClient(new WebViewClient() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@@ -120,8 +121,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
webView.clearHistory();
final android.webkit.CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- cookieManager.removeAllCookies(aBoolean -> {
- });
+ cookieManager.removeAllCookies(value -> { });
} else {
cookieManager.removeAllCookie();
}
@@ -150,14 +150,11 @@ public class ReCaptchaActivity extends AppCompatActivity {
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
- final int id = item.getItemId();
- switch (id) {
- case R.id.menu_item_done:
- saveCookiesAndFinish();
- return true;
- default:
- return false;
+ if (item.getItemId() == R.id.menu_item_done) {
+ saveCookiesAndFinish();
+ return true;
}
+ return false;
}
private void saveCookiesAndFinish() {
From 31bb70e3334ecb05a8624283058bb054c05e7a34 Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 31 Oct 2020 10:07:18 +0530
Subject: [PATCH 083/182] Enable view binding.
---
app/build.gradle | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/build.gradle b/app/build.gradle
index 5a8689f70..4acff01bf 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -85,6 +85,10 @@ android {
sourceSets {
androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
}
+
+ buildFeatures {
+ viewBinding true
+ }
}
ext {
From 18d530021c04f63f5d153a3e527de58825485eb9 Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 31 Oct 2020 11:19:07 +0530
Subject: [PATCH 084/182] Fix view binding issue.
---
app/src/main/res/layout-large-land/fragment_video_detail.xml | 2 +-
1 file changed, 1 insertion(+), 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 13e3c1b5f..8aee89ab0 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
@@ -2,12 +2,12 @@
Date: Sat, 31 Oct 2020 11:23:28 +0530
Subject: [PATCH 085/182] Use view binding in MainActivity.
---
.../java/org/schabi/newpipe/MainActivity.java | 168 +++++++++---------
app/src/main/res/layout/activity_main.xml | 9 +-
2 files changed, 87 insertions(+), 90 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index a5c963ee6..ff078fa2c 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -39,17 +39,13 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
-import android.widget.Button;
import android.widget.FrameLayout;
-import android.widget.ImageView;
import android.widget.Spinner;
-import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
@@ -58,8 +54,12 @@ import androidx.fragment.app.FragmentManager;
import androidx.preference.PreferenceManager;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
-import com.google.android.material.navigation.NavigationView;
+import org.schabi.newpipe.databinding.ActivityMainBinding;
+import org.schabi.newpipe.databinding.DrawerHeaderBinding;
+import org.schabi.newpipe.databinding.DrawerLayoutBinding;
+import org.schabi.newpipe.databinding.InstanceSpinnerLayoutBinding;
+import org.schabi.newpipe.databinding.ToolbarLayoutBinding;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
@@ -97,15 +97,14 @@ public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");
+ private ActivityMainBinding mainBinding;
+ private DrawerHeaderBinding drawerHeaderBinding;
+ private DrawerLayoutBinding drawerLayoutBinding;
+ private ToolbarLayoutBinding toolbarLayoutBinding;
+
private ActionBarDrawerToggle toggle;
- private DrawerLayout drawer;
- private NavigationView drawerItems;
- private ImageView headerServiceIcon;
- private TextView headerServiceView;
- private Button toggleServiceButton;
private boolean servicesShown = false;
- private ImageView serviceArrow;
private BroadcastReceiver broadcastReceiver;
@@ -138,13 +137,19 @@ public class MainActivity extends AppCompatActivity {
assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
+
+ mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
+ drawerLayoutBinding = mainBinding.drawerLayout;
+ drawerHeaderBinding = DrawerHeaderBinding.bind(drawerLayoutBinding.navigation
+ .getHeaderView(0));
+ toolbarLayoutBinding = mainBinding.toolbarLayout;
+ setContentView(mainBinding.getRoot());
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
initFragments();
}
- setSupportActionBar(findViewById(R.id.toolbar));
+ setSupportActionBar(toolbarLayoutBinding.toolbar);
try {
setupDrawer();
} catch (final Exception e) {
@@ -158,10 +163,6 @@ public class MainActivity extends AppCompatActivity {
}
private void setupDrawer() throws Exception {
- final Toolbar toolbar = findViewById(R.id.toolbar);
- drawer = findViewById(R.id.drawer_layout);
- drawerItems = findViewById(R.id.navigation);
-
//Tabs
final int currentServiceId = ServiceHelper.getSelectedServiceId(this);
final StreamingService service = NewPipe.getService(currentServiceId);
@@ -169,43 +170,43 @@ public class MainActivity extends AppCompatActivity {
int kioskId = 0;
for (final String ks : service.getKioskList().getAvailableKiosks()) {
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, kioskId, 0, KioskTranslator
.getTranslatedKioskName(ks, this))
.setIcon(KioskTranslator.getKioskIcon(ks, this));
kioskId++;
}
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_SUBSCRIPTIONS, ORDER,
R.string.tab_subscriptions)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_channel));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_FEED, ORDER, R.string.fragment_feed_title)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_rss));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_BOOKMARKS, ORDER, R.string.tab_bookmarks)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_bookmark));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_DOWNLOADS, ORDER, R.string.downloads)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_file_download));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_HISTORY, ORDER, R.string.action_history)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_history));
//Settings and About
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_options_about_group, ITEM_ID_SETTINGS, ORDER, R.string.settings)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_settings));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_options_about_group, ITEM_ID_ABOUT, ORDER, R.string.tab_about)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_info_outline));
- toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open,
- R.string.drawer_close);
+ toggle = new ActionBarDrawerToggle(this, mainBinding.getRoot(),
+ toolbarLayoutBinding.toolbar, R.string.drawer_open, R.string.drawer_close);
toggle.syncState();
- drawer.addDrawerListener(toggle);
- drawer.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
+ mainBinding.getRoot().addDrawerListener(toggle);
+ mainBinding.getRoot().addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
private int lastService;
@Override
@@ -224,7 +225,7 @@ public class MainActivity extends AppCompatActivity {
}
});
- drawerItems.setNavigationItemSelectedListener(this::drawerItemSelected);
+ drawerLayoutBinding.navigation.setNavigationItemSelectedListener(this::drawerItemSelected);
setupDrawerHeader();
}
@@ -247,15 +248,17 @@ public class MainActivity extends AppCompatActivity {
return false;
}
- drawer.closeDrawers();
+ mainBinding.getRoot().closeDrawers();
return true;
}
private void changeService(final MenuItem item) {
- drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this))
+ drawerLayoutBinding.navigation.getMenu()
+ .getItem(ServiceHelper.getSelectedServiceId(this))
.setChecked(false);
ServiceHelper.setSelectedServiceId(this, item.getItemId());
- drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this))
+ drawerLayoutBinding.navigation.getMenu()
+ .getItem(ServiceHelper.getSelectedServiceId(this))
.setChecked(true);
}
@@ -307,26 +310,19 @@ public class MainActivity extends AppCompatActivity {
}
private void setupDrawerHeader() {
- final NavigationView navigationView = findViewById(R.id.navigation);
- final View hView = navigationView.getHeaderView(0);
-
- serviceArrow = hView.findViewById(R.id.drawer_arrow);
- headerServiceIcon = hView.findViewById(R.id.drawer_header_service_icon);
- headerServiceView = hView.findViewById(R.id.drawer_header_service_view);
- toggleServiceButton = hView.findViewById(R.id.drawer_header_action_button);
- toggleServiceButton.setOnClickListener(view -> toggleServices());
+ drawerHeaderBinding.drawerHeaderActionButton.setOnClickListener(view -> toggleServices());
// If the current app name is bigger than the default "NewPipe" (7 chars),
// let the text view grow a little more as well.
if (getString(R.string.app_name).length() > "NewPipe".length()) {
- final TextView headerTitle = hView.findViewById(R.id.drawer_header_newpipe_title);
- final ViewGroup.LayoutParams layoutParams = headerTitle.getLayoutParams();
+ final ViewGroup.LayoutParams layoutParams =
+ drawerHeaderBinding.drawerHeaderNewpipeTitle.getLayoutParams();
layoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
- headerTitle.setLayoutParams(layoutParams);
- headerTitle.setMaxLines(2);
- headerTitle.setMinWidth(getResources()
+ drawerHeaderBinding.drawerHeaderNewpipeTitle.setLayoutParams(layoutParams);
+ drawerHeaderBinding.drawerHeaderNewpipeTitle.setMaxLines(2);
+ drawerHeaderBinding.drawerHeaderNewpipeTitle.setMinWidth(getResources()
.getDimensionPixelSize(R.dimen.drawer_header_newpipe_title_default_width));
- headerTitle.setMaxWidth(getResources()
+ drawerHeaderBinding.drawerHeaderNewpipeTitle.setMaxWidth(getResources()
.getDimensionPixelSize(R.dimen.drawer_header_newpipe_title_max_width));
}
}
@@ -334,9 +330,9 @@ public class MainActivity extends AppCompatActivity {
private void toggleServices() {
servicesShown = !servicesShown;
- drawerItems.getMenu().removeGroup(R.id.menu_services_group);
- drawerItems.getMenu().removeGroup(R.id.menu_tabs_group);
- drawerItems.getMenu().removeGroup(R.id.menu_options_about_group);
+ drawerLayoutBinding.navigation.getMenu().removeGroup(R.id.menu_services_group);
+ drawerLayoutBinding.navigation.getMenu().removeGroup(R.id.menu_tabs_group);
+ drawerLayoutBinding.navigation.getMenu().removeGroup(R.id.menu_options_about_group);
if (servicesShown) {
showServices();
@@ -350,13 +346,13 @@ public class MainActivity extends AppCompatActivity {
}
private void showServices() {
- serviceArrow.setImageResource(R.drawable.ic_arrow_drop_up_white_24dp);
+ drawerHeaderBinding.drawerArrow.setImageResource(R.drawable.ic_arrow_drop_up_white_24dp);
for (final StreamingService s : NewPipe.getServices()) {
final String title = s.getServiceInfo().getName()
+ (ServiceHelper.isBeta(s) ? " (beta)" : "");
- final MenuItem menuItem = drawerItems.getMenu()
+ final MenuItem menuItem = drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_services_group, s.getServiceId(), ORDER, title)
.setIcon(ServiceHelper.getIcon(s.getServiceId()));
@@ -365,15 +361,16 @@ public class MainActivity extends AppCompatActivity {
enhancePeertubeMenu(s, menuItem);
}
}
- drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this))
+ drawerLayoutBinding.navigation.getMenu()
+ .getItem(ServiceHelper.getSelectedServiceId(this))
.setChecked(true);
}
private void enhancePeertubeMenu(final StreamingService s, final MenuItem menuItem) {
final PeertubeInstance currentInstance = PeertubeHelper.getCurrentInstance();
menuItem.setTitle(currentInstance.getName() + (ServiceHelper.isBeta(s) ? " (beta)" : ""));
- final Spinner spinner = (Spinner) LayoutInflater.from(this)
- .inflate(R.layout.instance_spinner_layout, null);
+ final Spinner spinner = InstanceSpinnerLayoutBinding.inflate(LayoutInflater.from(this))
+ .getRoot();
final List instances = PeertubeHelper.getInstanceList(this);
final List items = new ArrayList<>();
int defaultSelect = 0;
@@ -398,7 +395,7 @@ public class MainActivity extends AppCompatActivity {
}
PeertubeHelper.selectInstance(newInstance, getApplicationContext());
changeService(menuItem);
- drawer.closeDrawers();
+ mainBinding.getRoot().closeDrawers();
new Handler(Looper.getMainLooper()).postDelayed(() -> {
getSupportFragmentManager().popBackStack(null,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
@@ -415,7 +412,7 @@ public class MainActivity extends AppCompatActivity {
}
private void showTabs() throws ExtractionException {
- serviceArrow.setImageResource(R.drawable.ic_arrow_drop_down_white_24dp);
+ drawerHeaderBinding.drawerArrow.setImageResource(R.drawable.ic_arrow_drop_down_white_24dp);
//Tabs
final int currentServiceId = ServiceHelper.getSelectedServiceId(this);
@@ -424,34 +421,34 @@ public class MainActivity extends AppCompatActivity {
int kioskId = 0;
for (final String ks : service.getKioskList().getAvailableKiosks()) {
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, kioskId, ORDER,
KioskTranslator.getTranslatedKioskName(ks, this))
.setIcon(KioskTranslator.getKioskIcon(ks, this));
kioskId++;
}
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_SUBSCRIPTIONS, ORDER, R.string.tab_subscriptions)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_channel));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_FEED, ORDER, R.string.fragment_feed_title)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_rss));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_BOOKMARKS, ORDER, R.string.tab_bookmarks)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_bookmark));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_DOWNLOADS, ORDER, R.string.downloads)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_file_download));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_tabs_group, ITEM_ID_HISTORY, ORDER, R.string.action_history)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_history));
//Settings and About
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_options_about_group, ITEM_ID_SETTINGS, ORDER, R.string.settings)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_settings));
- drawerItems.getMenu()
+ drawerLayoutBinding.navigation.getMenu()
.add(R.id.menu_options_about_group, ITEM_ID_ABOUT, ORDER, R.string.tab_about)
.setIcon(ThemeHelper.resolveResourceIdFromAttr(this, R.attr.ic_info_outline));
}
@@ -476,16 +473,18 @@ public class MainActivity extends AppCompatActivity {
// 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);
+ mainBinding.getRoot().closeDrawer(GravityCompat.START, false);
try {
final int selectedServiceId = ServiceHelper.getSelectedServiceId(this);
final String selectedServiceName = NewPipe.getService(selectedServiceId)
.getServiceInfo().getName();
- headerServiceView.setText(selectedServiceName);
- headerServiceIcon.setImageResource(ServiceHelper.getIcon(selectedServiceId));
+ drawerHeaderBinding.drawerHeaderServiceView.setText(selectedServiceName);
+ drawerHeaderBinding.drawerHeaderServiceIcon.setImageResource(ServiceHelper
+ .getIcon(selectedServiceId));
- headerServiceView.post(() -> headerServiceView.setSelected(true));
- toggleServiceButton.setContentDescription(
+ drawerHeaderBinding.drawerHeaderServiceView.post(() -> drawerHeaderBinding
+ .drawerHeaderServiceView.setSelected(true));
+ drawerHeaderBinding.drawerHeaderActionButton.setContentDescription(
getString(R.string.drawer_header_description) + selectedServiceName);
} catch (final Exception e) {
ErrorActivity.reportUiError(this, e);
@@ -511,7 +510,8 @@ public class MainActivity extends AppCompatActivity {
final boolean isHistoryEnabled = sharedPreferences.getBoolean(
getString(R.string.enable_watch_history_key), true);
- drawerItems.getMenu().findItem(ITEM_ID_HISTORY).setVisible(isHistoryEnabled);
+ drawerLayoutBinding.navigation.getMenu().findItem(ITEM_ID_HISTORY)
+ .setVisible(isHistoryEnabled);
}
@Override
@@ -555,9 +555,8 @@ public class MainActivity extends AppCompatActivity {
}
if (DeviceUtils.isTv(this)) {
- final View drawerPanel = findViewById(R.id.navigation);
- if (drawer.isDrawerOpen(drawerPanel)) {
- drawer.closeDrawers();
+ if (mainBinding.getRoot().isDrawerOpen(drawerLayoutBinding.navigation)) {
+ mainBinding.getRoot().closeDrawers();
return;
}
}
@@ -583,9 +582,7 @@ public class MainActivity extends AppCompatActivity {
// delegate the back press to it
if (fragmentPlayer instanceof BackPressable) {
if (!((BackPressable) fragmentPlayer).onBackPressed()) {
- final FrameLayout bottomSheetLayout =
- findViewById(R.id.fragment_player_holder);
- BottomSheetBehavior.from(bottomSheetLayout)
+ BottomSheetBehavior.from(mainBinding.fragmentPlayerHolder)
.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
return;
@@ -668,8 +665,7 @@ public class MainActivity extends AppCompatActivity {
final Fragment fragment
= getSupportFragmentManager().findFragmentById(R.id.fragment_holder);
if (!(fragment instanceof SearchFragment)) {
- findViewById(R.id.toolbar).findViewById(R.id.toolbar_search_container)
- .setVisibility(View.GONE);
+ toolbarLayoutBinding.toolbarSearchContainer.getRoot().setVisibility(View.GONE);
}
final ActionBar actionBar = getSupportActionBar();
@@ -730,21 +726,20 @@ public class MainActivity extends AppCompatActivity {
return;
}
- final Toolbar toolbar = findViewById(R.id.toolbar);
-
final Fragment fragment = getSupportFragmentManager()
.findFragmentById(R.id.fragment_holder);
if (fragment instanceof MainFragment) {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
if (toggle != null) {
toggle.syncState();
- toolbar.setNavigationOnClickListener(v -> drawer.openDrawer(GravityCompat.START));
- drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
+ toolbarLayoutBinding.toolbar.setNavigationOnClickListener(v -> mainBinding.getRoot()
+ .openDrawer(GravityCompat.START));
+ mainBinding.getRoot().setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
}
} else {
- drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
+ mainBinding.getRoot().setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- toolbar.setNavigationOnClickListener(v -> onHomeButtonPressed());
+ toolbarLayoutBinding.toolbar.setNavigationOnClickListener(v -> onHomeButtonPressed());
}
}
@@ -852,9 +847,8 @@ public class MainActivity extends AppCompatActivity {
}
private boolean bottomSheetHiddenOrCollapsed() {
- final FrameLayout bottomSheetLayout = findViewById(R.id.fragment_player_holder);
final BottomSheetBehavior bottomSheetBehavior =
- BottomSheetBehavior.from(bottomSheetLayout);
+ BottomSheetBehavior.from(mainBinding.fragmentPlayerHolder);
final int sheetState = bottomSheetBehavior.getState();
return sheetState == BottomSheetBehavior.STATE_HIDDEN
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 4a8befa2c..6d25ed097 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,7 +1,6 @@
@@ -15,7 +14,9 @@
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize" />
-
+
-
+
From 4545b8e92d147354feae925377ec1f167b5f9cce Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 31 Oct 2020 11:34:48 +0530
Subject: [PATCH 086/182] Use view binding in AboutActivity.
---
.../schabi/newpipe/about/AboutActivity.java | 59 ++++++-------------
1 file changed, 19 insertions(+), 40 deletions(-)
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 e3e56816c..6ff691561 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -6,22 +6,19 @@ import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
-import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.adapter.FragmentStateAdapter;
-import androidx.viewpager2.widget.ViewPager2;
-import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import org.schabi.newpipe.BuildConfig;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.databinding.ActivityAboutBinding;
+import org.schabi.newpipe.databinding.FragmentAboutBinding;
import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
@@ -68,40 +65,27 @@ public class AboutActivity extends AppCompatActivity {
private static final int POS_ABOUT = 0;
private static final int POS_LICENSE = 1;
private static final int TOTAL_COUNT = 2;
- /**
- * The {@link RecyclerView.Adapter} that will provide
- * fragments for each of the sections. We use a
- * {@link FragmentStateAdapter} derivative, which will keep every
- * loaded fragment in memory.
- */
- private SectionsPagerAdapter mSectionsPagerAdapter;
- /**
- * The {@link ViewPager2} that will host the section contents.
- */
- private ViewPager2 mViewPager;
@Override
protected void onCreate(final Bundle savedInstanceState) {
assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
- this.setTitle(getString(R.string.title_activity_about));
+ setTitle(getString(R.string.title_activity_about));
- setContentView(R.layout.activity_about);
+ final ActivityAboutBinding aboutBinding = ActivityAboutBinding.inflate(getLayoutInflater());
+ setContentView(aboutBinding.getRoot());
- final Toolbar toolbar = findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
+ setSupportActionBar(aboutBinding.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
- mSectionsPagerAdapter = new SectionsPagerAdapter(this);
+ final SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(this);
// Set up the ViewPager with the sections adapter.
- mViewPager = findViewById(R.id.container);
- mViewPager.setAdapter(mSectionsPagerAdapter);
+ aboutBinding.container.setAdapter(mSectionsPagerAdapter);
- final TabLayout tabLayout = findViewById(R.id.tabs);
- new TabLayoutMediator(tabLayout, mViewPager, (tab, position) -> {
+ new TabLayoutMediator(aboutBinding.tabs, aboutBinding.container, (tab, position) -> {
switch (position) {
default:
case POS_ABOUT:
@@ -143,33 +127,28 @@ public class AboutActivity extends AppCompatActivity {
}
@Override
- public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
+ public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container,
final Bundle savedInstanceState) {
- final View rootView = inflater.inflate(R.layout.fragment_about, container, false);
- final Context context = this.getContext();
+ final FragmentAboutBinding aboutBinding =
+ FragmentAboutBinding.inflate(inflater, container, false);
+ final Context context = getContext();
- final TextView version = rootView.findViewById(R.id.app_version);
- version.setText(BuildConfig.VERSION_NAME);
+ aboutBinding.appVersion.setText(BuildConfig.VERSION_NAME);
- final View githubLink = rootView.findViewById(R.id.github_link);
- githubLink.setOnClickListener(nv ->
+ aboutBinding.githubLink.setOnClickListener(nv ->
openUrlInBrowser(context, context.getString(R.string.github_url)));
- final View donationLink = rootView.findViewById(R.id.donation_link);
- donationLink.setOnClickListener(v ->
+ aboutBinding.donationLink.setOnClickListener(v ->
openUrlInBrowser(context, context.getString(R.string.donation_url)));
- final View websiteLink = rootView.findViewById(R.id.website_link);
- websiteLink.setOnClickListener(nv ->
+ aboutBinding.websiteLink.setOnClickListener(nv ->
openUrlInBrowser(context, context.getString(R.string.website_url)));
- final View privacyPolicyLink = rootView.findViewById(R.id.privacy_policy_link);
- privacyPolicyLink.setOnClickListener(v ->
+ aboutBinding.privacyPolicyLink.setOnClickListener(v ->
openUrlInBrowser(context, context.getString(R.string.privacy_policy_url)));
- return rootView;
+ return aboutBinding.getRoot();
}
-
}
/**
From a65ed7e914bdc8c75bfecc9856a7a452598c64db Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 31 Oct 2020 13:41:01 +0530
Subject: [PATCH 087/182] Use view binding in DownloadActivity.
---
.../schabi/newpipe/download/DownloadActivity.java | 13 ++++++++-----
app/src/main/res/layout/activity_downloader.xml | 4 +++-
2 files changed, 11 insertions(+), 6 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 979f8be75..37eefed96 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java
@@ -9,10 +9,10 @@ import android.view.ViewTreeObserver;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.FragmentTransaction;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.databinding.ActivityDownloaderBinding;
import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.FocusOverlayView;
@@ -35,11 +35,14 @@ public class DownloadActivity extends AppCompatActivity {
assureCorrectAppLanguage(this);
ThemeHelper.setTheme(this);
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_downloader);
- final Toolbar toolbar = findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
+ super.onCreate(savedInstanceState);
+
+ final ActivityDownloaderBinding downloaderBinding =
+ ActivityDownloaderBinding.inflate(getLayoutInflater());
+ setContentView(downloaderBinding.getRoot());
+
+ setSupportActionBar(downloaderBinding.toolbarLayout.toolbar);
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
diff --git a/app/src/main/res/layout/activity_downloader.xml b/app/src/main/res/layout/activity_downloader.xml
index 272f6e76e..d91b943e7 100644
--- a/app/src/main/res/layout/activity_downloader.xml
+++ b/app/src/main/res/layout/activity_downloader.xml
@@ -3,7 +3,9 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
+
Date: Sat, 31 Oct 2020 14:10:00 +0530
Subject: [PATCH 088/182] Use view binding in ReCaptchaActivity.
---
.../org/schabi/newpipe/ReCaptchaActivity.java | 29 +++++++++----------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index b6f65c355..dfe062a16 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -18,10 +18,10 @@ import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import androidx.core.app.NavUtils;
import androidx.preference.PreferenceManager;
+import org.schabi.newpipe.databinding.ActivityRecaptchaBinding;
import org.schabi.newpipe.util.ThemeHelper;
import java.io.UnsupportedEncodingException;
@@ -62,30 +62,28 @@ public class ReCaptchaActivity extends AppCompatActivity {
}
}
-
- private WebView webView;
+ private ActivityRecaptchaBinding recaptchaBinding;
private String foundCookies = "";
@Override
protected void onCreate(final Bundle savedInstanceState) {
ThemeHelper.setTheme(this);
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_recaptcha);
- final Toolbar toolbar = findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
+
+ recaptchaBinding = ActivityRecaptchaBinding.inflate(getLayoutInflater());
+ setContentView(recaptchaBinding.getRoot());
+ setSupportActionBar(recaptchaBinding.toolbar);
final String url = sanitizeRecaptchaUrl(getIntent().getStringExtra(RECAPTCHA_URL_EXTRA));
// set return to Cancel by default
setResult(RESULT_CANCELED);
- webView = findViewById(R.id.reCaptchaWebView);
-
// enable Javascript
- final WebSettings webSettings = webView.getSettings();
+ final WebSettings webSettings = recaptchaBinding.reCaptchaWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUserAgentString(DownloaderImpl.USER_AGENT);
- webView.setWebViewClient(new WebViewClient() {
+ recaptchaBinding.reCaptchaWebView.setWebViewClient(new WebViewClient() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(final WebView view,
@@ -117,16 +115,16 @@ public class ReCaptchaActivity extends AppCompatActivity {
});
// cleaning cache, history and cookies from webView
- webView.clearCache(true);
- webView.clearHistory();
- final android.webkit.CookieManager cookieManager = CookieManager.getInstance();
+ recaptchaBinding.reCaptchaWebView.clearCache(true);
+ recaptchaBinding.reCaptchaWebView.clearHistory();
+ final CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.removeAllCookies(value -> { });
} else {
cookieManager.removeAllCookie();
}
- webView.loadUrl(url);
+ recaptchaBinding.reCaptchaWebView.loadUrl(url);
}
@Override
@@ -158,7 +156,8 @@ public class ReCaptchaActivity extends AppCompatActivity {
}
private void saveCookiesAndFinish() {
- handleCookiesFromUrl(webView.getUrl()); // try to get cookies of unclosed page
+ // try to get cookies of unclosed page
+ handleCookiesFromUrl(recaptchaBinding.reCaptchaWebView.getUrl());
if (MainActivity.DEBUG) {
Log.d(TAG, "saveCookiesAndFinish: foundCookies=" + foundCookies);
}
From 22ec70e94d16408d165cb38fba77e1da40d70a9e Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 31 Oct 2020 14:36:12 +0530
Subject: [PATCH 089/182] Use view binding in RouterActivity.
---
.../main/java/org/schabi/newpipe/RouterActivity.java | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
index 9ad993de1..e04970e86 100644
--- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
@@ -14,7 +14,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
-import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
@@ -30,6 +29,8 @@ import androidx.core.widget.TextViewCompat;
import androidx.fragment.app.FragmentManager;
import androidx.preference.PreferenceManager;
+import org.schabi.newpipe.databinding.ListRadioIconItemBinding;
+import org.schabi.newpipe.databinding.SingleChoiceDialogViewBinding;
import org.schabi.newpipe.download.DownloadDialog;
import org.schabi.newpipe.extractor.Info;
import org.schabi.newpipe.extractor.NewPipe;
@@ -267,9 +268,8 @@ public class RouterActivity extends AppCompatActivity {
final Context themeWrapperContext = getThemeWrapperContext();
final LayoutInflater inflater = LayoutInflater.from(themeWrapperContext);
- final LinearLayout rootLayout = (LinearLayout) inflater.inflate(
- R.layout.single_choice_dialog_view, null, false);
- final RadioGroup radioGroup = rootLayout.findViewById(android.R.id.list);
+ final RadioGroup radioGroup = SingleChoiceDialogViewBinding.inflate(getLayoutInflater())
+ .list;
final DialogInterface.OnClickListener dialogButtonsClickListener = (dialog, which) -> {
final int indexOfChild = radioGroup.indexOfChild(
@@ -322,8 +322,7 @@ public class RouterActivity extends AppCompatActivity {
int id = 12345;
for (final AdapterChoiceItem item : choices) {
- final RadioButton radioButton
- = (RadioButton) inflater.inflate(R.layout.list_radio_icon_item, null);
+ final RadioButton radioButton = ListRadioIconItemBinding.inflate(inflater).getRoot();
radioButton.setText(item.description);
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(radioButton,
AppCompatResources.getDrawable(getApplicationContext(), item.icon),
From e6021465f677d91afe68ef17bacaf5251f4e200a Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 31 Oct 2020 15:33:00 +0530
Subject: [PATCH 090/182] Use view binding in ServicePlayerActivity.
---
.../newpipe/player/ServicePlayerActivity.java | 214 ++++++++----------
1 file changed, 89 insertions(+), 125 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 4bf6ef9ae..41d66dc90 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -1,6 +1,7 @@
package org.schabi.newpipe.player;
import android.content.ComponentName;
+import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
@@ -11,15 +12,10 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
import android.widget.PopupMenu;
-import android.widget.ProgressBar;
import android.widget.SeekBar;
-import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -29,6 +25,7 @@ import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.databinding.ActivityPlayerQueueControlBinding;
import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.fragments.OnScrollBelowItemsListener;
import org.schabi.newpipe.local.dialog.PlaylistAppendDialog;
@@ -70,30 +67,10 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
// Views
////////////////////////////////////////////////////////////////////////////
- private View rootView;
+ private ActivityPlayerQueueControlBinding queueControlBinding;
- private RecyclerView itemsList;
private ItemTouchHelper itemTouchHelper;
- private LinearLayout metadata;
- private TextView metadataTitle;
- private TextView metadataArtist;
-
- private SeekBar progressSeekBar;
- private TextView progressCurrentTime;
- private TextView progressEndTime;
- private TextView progressLiveSync;
- private TextView seekDisplay;
-
- private ImageButton repeatButton;
- private ImageButton backwardButton;
- private ImageButton fastRewindButton;
- private ImageButton playPauseButton;
- private ImageButton fastForwardButton;
- private ImageButton forwardButton;
- private ImageButton shuffleButton;
- private ProgressBar progressBar;
-
private Menu menu;
////////////////////////////////////////////////////////////////////////////
@@ -123,11 +100,11 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
- setContentView(R.layout.activity_player_queue_control);
- rootView = findViewById(R.id.main_content);
- final Toolbar toolbar = rootView.findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
+ queueControlBinding = ActivityPlayerQueueControlBinding.inflate(getLayoutInflater());
+ setContentView(queueControlBinding.getRoot());
+
+ setSupportActionBar(queueControlBinding.toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(getSupportActionTitle());
@@ -230,14 +207,11 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
if (player != null && player.getPlayQueueAdapter() != null) {
player.getPlayQueueAdapter().unsetSelectedListener();
}
- if (itemsList != null) {
- itemsList.setAdapter(null);
- }
+ queueControlBinding.playQueue.setAdapter(null);
if (itemTouchHelper != null) {
itemTouchHelper.attachToRecyclerView(null);
}
- itemsList = null;
itemTouchHelper = null;
player = null;
}
@@ -284,58 +258,38 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
}
private void buildQueue() {
- itemsList = findViewById(R.id.play_queue);
- itemsList.setLayoutManager(new LinearLayoutManager(this));
- itemsList.setAdapter(player.getPlayQueueAdapter());
- itemsList.setClickable(true);
- itemsList.setLongClickable(true);
- itemsList.clearOnScrollListeners();
- itemsList.addOnScrollListener(getQueueScrollListener());
+ queueControlBinding.playQueue.setLayoutManager(new LinearLayoutManager(this));
+ queueControlBinding.playQueue.setAdapter(player.getPlayQueueAdapter());
+ queueControlBinding.playQueue.setClickable(true);
+ queueControlBinding.playQueue.setLongClickable(true);
+ queueControlBinding.playQueue.clearOnScrollListeners();
+ queueControlBinding.playQueue.addOnScrollListener(getQueueScrollListener());
itemTouchHelper = new ItemTouchHelper(getItemTouchCallback());
- itemTouchHelper.attachToRecyclerView(itemsList);
+ itemTouchHelper.attachToRecyclerView(queueControlBinding.playQueue);
player.getPlayQueueAdapter().setSelectedListener(getOnSelectedListener());
}
private void buildMetadata() {
- metadata = rootView.findViewById(R.id.metadata);
- metadataTitle = rootView.findViewById(R.id.song_name);
- metadataArtist = rootView.findViewById(R.id.artist_name);
-
- metadata.setOnClickListener(this);
- metadataTitle.setSelected(true);
- metadataArtist.setSelected(true);
+ queueControlBinding.metadata.setOnClickListener(this);
+ queueControlBinding.songName.setSelected(true);
+ queueControlBinding.artistName.setSelected(true);
}
private void buildSeekBar() {
- progressCurrentTime = rootView.findViewById(R.id.current_time);
- progressSeekBar = rootView.findViewById(R.id.seek_bar);
- progressEndTime = rootView.findViewById(R.id.end_time);
- progressLiveSync = rootView.findViewById(R.id.live_sync);
- seekDisplay = rootView.findViewById(R.id.seek_display);
-
- progressSeekBar.setOnSeekBarChangeListener(this);
- progressLiveSync.setOnClickListener(this);
+ queueControlBinding.seekBar.setOnSeekBarChangeListener(this);
+ queueControlBinding.liveSync.setOnClickListener(this);
}
private void buildControls() {
- repeatButton = rootView.findViewById(R.id.control_repeat);
- backwardButton = rootView.findViewById(R.id.control_backward);
- fastRewindButton = rootView.findViewById(R.id.control_fast_rewind);
- playPauseButton = rootView.findViewById(R.id.control_play_pause);
- fastForwardButton = rootView.findViewById(R.id.control_fast_forward);
- forwardButton = rootView.findViewById(R.id.control_forward);
- shuffleButton = rootView.findViewById(R.id.control_shuffle);
- progressBar = rootView.findViewById(R.id.control_progress_bar);
-
- repeatButton.setOnClickListener(this);
- backwardButton.setOnClickListener(this);
- fastRewindButton.setOnClickListener(this);
- playPauseButton.setOnClickListener(this);
- fastForwardButton.setOnClickListener(this);
- forwardButton.setOnClickListener(this);
- shuffleButton.setOnClickListener(this);
+ queueControlBinding.controlRepeat.setOnClickListener(this);
+ queueControlBinding.controlBackward.setOnClickListener(this);
+ queueControlBinding.controlFastRewind.setOnClickListener(this);
+ queueControlBinding.controlPlayPause.setOnClickListener(this);
+ queueControlBinding.controlFastForward.setOnClickListener(this);
+ queueControlBinding.controlForward.setOnClickListener(this);
+ queueControlBinding.controlShuffle.setOnClickListener(this);
}
private void buildItemPopupMenu(final PlayQueueItem item, final View view) {
@@ -391,8 +345,8 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
if (player != null && player.getPlayQueue() != null
&& !player.getPlayQueue().isComplete()) {
player.getPlayQueue().fetch();
- } else if (itemsList != null) {
- itemsList.clearOnScrollListeners();
+ } else {
+ queueControlBinding.playQueue.clearOnScrollListeners();
}
}
};
@@ -453,8 +407,9 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
final int currentPlayingIndex = player.getPlayQueue().getIndex();
final int currentVisibleIndex;
- if (itemsList.getLayoutManager() instanceof LinearLayoutManager) {
- final LinearLayoutManager layout = ((LinearLayoutManager) itemsList.getLayoutManager());
+ if (queueControlBinding.playQueue.getLayoutManager() instanceof LinearLayoutManager) {
+ final LinearLayoutManager layout =
+ (LinearLayoutManager) queueControlBinding.playQueue.getLayoutManager();
currentVisibleIndex = layout.findFirstVisibleItemPosition();
} else {
currentVisibleIndex = 0;
@@ -462,9 +417,9 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
final int distance = Math.abs(currentPlayingIndex - currentVisibleIndex);
if (distance < SMOOTH_SCROLL_MAXIMUM_DISTANCE) {
- itemsList.smoothScrollToPosition(currentPlayingIndex);
+ queueControlBinding.playQueue.smoothScrollToPosition(currentPlayingIndex);
} else {
- itemsList.scrollToPosition(currentPlayingIndex);
+ queueControlBinding.playQueue.scrollToPosition(currentPlayingIndex);
}
}
@@ -478,23 +433,23 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
return;
}
- if (view.getId() == repeatButton.getId()) {
+ if (view.getId() == queueControlBinding.controlRepeat.getId()) {
player.onRepeatClicked();
- } else if (view.getId() == backwardButton.getId()) {
+ } else if (view.getId() == queueControlBinding.controlBackward.getId()) {
player.onPlayPrevious();
- } else if (view.getId() == fastRewindButton.getId()) {
+ } else if (view.getId() == queueControlBinding.controlFastRewind.getId()) {
player.onFastRewind();
- } else if (view.getId() == playPauseButton.getId()) {
+ } else if (view.getId() == queueControlBinding.controlPlayPause.getId()) {
player.onPlayPause();
- } else if (view.getId() == fastForwardButton.getId()) {
+ } else if (view.getId() == queueControlBinding.controlFastForward.getId()) {
player.onFastForward();
- } else if (view.getId() == forwardButton.getId()) {
+ } else if (view.getId() == queueControlBinding.controlForward.getId()) {
player.onPlayNext();
- } else if (view.getId() == shuffleButton.getId()) {
+ } else if (view.getId() == queueControlBinding.controlShuffle.getId()) {
player.onShuffleClicked();
- } else if (view.getId() == metadata.getId()) {
+ } else if (view.getId() == queueControlBinding.metadata.getId()) {
scrollToSelected();
- } else if (view.getId() == progressLiveSync.getId()) {
+ } else if (view.getId() == queueControlBinding.liveSync.getId()) {
player.seekToDefault();
}
}
@@ -528,15 +483,15 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
final boolean fromUser) {
if (fromUser) {
final String seekTime = Localization.getDurationString(progress / 1000);
- progressCurrentTime.setText(seekTime);
- seekDisplay.setText(seekTime);
+ queueControlBinding.currentTime.setText(seekTime);
+ queueControlBinding.seekDisplay.setText(seekTime);
}
}
@Override
public void onStartTrackingTouch(final SeekBar seekBar) {
seeking = true;
- seekDisplay.setVisibility(View.VISIBLE);
+ queueControlBinding.seekDisplay.setVisibility(View.VISIBLE);
}
@Override
@@ -544,7 +499,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
if (player != null) {
player.seekTo(seekBar.getProgress());
}
- seekDisplay.setVisibility(View.GONE);
+ queueControlBinding.seekDisplay.setVisibility(View.GONE);
seeking = false;
}
@@ -602,45 +557,46 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
public void onProgressUpdate(final int currentProgress, final int duration,
final int bufferPercent) {
// Set buffer progress
- progressSeekBar.setSecondaryProgress((int) (progressSeekBar.getMax()
+ queueControlBinding.seekBar.setSecondaryProgress((int) (queueControlBinding.seekBar.getMax()
* ((float) bufferPercent / 100)));
// Set Duration
- progressSeekBar.setMax(duration);
- progressEndTime.setText(Localization.getDurationString(duration / 1000));
+ queueControlBinding.seekBar.setMax(duration);
+ queueControlBinding.endTime.setText(Localization.getDurationString(duration / 1000));
// Set current time if not seeking
if (!seeking) {
- progressSeekBar.setProgress(currentProgress);
- progressCurrentTime.setText(Localization.getDurationString(currentProgress / 1000));
+ queueControlBinding.seekBar.setProgress(currentProgress);
+ queueControlBinding.currentTime.setText(Localization
+ .getDurationString(currentProgress / 1000));
}
if (player != null) {
- progressLiveSync.setClickable(!player.isLiveEdge());
+ queueControlBinding.liveSync.setClickable(!player.isLiveEdge());
}
// this will make sure progressCurrentTime has the same width as progressEndTime
- final ViewGroup.LayoutParams endTimeParams = progressEndTime.getLayoutParams();
- final ViewGroup.LayoutParams currentTimeParams = progressCurrentTime.getLayoutParams();
- currentTimeParams.width = progressEndTime.getWidth();
- progressCurrentTime.setLayoutParams(currentTimeParams);
+ final ViewGroup.LayoutParams currentTimeParams =
+ queueControlBinding.currentTime.getLayoutParams();
+ currentTimeParams.width = queueControlBinding.endTime.getWidth();
+ queueControlBinding.currentTime.setLayoutParams(currentTimeParams);
}
@Override
public void onMetadataUpdate(final StreamInfo info, final PlayQueue queue) {
if (info != null) {
- metadataTitle.setText(info.getName());
- metadataArtist.setText(info.getUploaderName());
+ queueControlBinding.songName.setText(info.getName());
+ queueControlBinding.artistName.setText(info.getUploaderName());
- progressEndTime.setVisibility(View.GONE);
- progressLiveSync.setVisibility(View.GONE);
+ queueControlBinding.endTime.setVisibility(View.GONE);
+ queueControlBinding.liveSync.setVisibility(View.GONE);
switch (info.getStreamType()) {
case LIVE_STREAM:
case AUDIO_LIVE_STREAM:
- progressLiveSync.setVisibility(View.VISIBLE);
+ queueControlBinding.liveSync.setVisibility(View.VISIBLE);
break;
default:
- progressEndTime.setVisibility(View.VISIBLE);
+ queueControlBinding.endTime.setVisibility(View.VISIBLE);
break;
}
@@ -661,13 +617,16 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
private void onStateChanged(final int state) {
switch (state) {
case BasePlayer.STATE_PAUSED:
- playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_24dp);
+ queueControlBinding.controlPlayPause
+ .setImageResource(R.drawable.ic_play_arrow_white_24dp);
break;
case BasePlayer.STATE_PLAYING:
- playPauseButton.setImageResource(R.drawable.ic_pause_white_24dp);
+ queueControlBinding.controlPlayPause
+ .setImageResource(R.drawable.ic_pause_white_24dp);
break;
case BasePlayer.STATE_COMPLETED:
- playPauseButton.setImageResource(R.drawable.ic_replay_white_24dp);
+ queueControlBinding.controlPlayPause
+ .setImageResource(R.drawable.ic_replay_white_24dp);
break;
default:
break;
@@ -677,14 +636,14 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
case BasePlayer.STATE_PAUSED:
case BasePlayer.STATE_PLAYING:
case BasePlayer.STATE_COMPLETED:
- playPauseButton.setClickable(true);
- playPauseButton.setVisibility(View.VISIBLE);
- progressBar.setVisibility(View.GONE);
+ queueControlBinding.controlPlayPause.setClickable(true);
+ queueControlBinding.controlPlayPause.setVisibility(View.VISIBLE);
+ queueControlBinding.progressBar.setVisibility(View.GONE);
break;
default:
- playPauseButton.setClickable(false);
- playPauseButton.setVisibility(View.INVISIBLE);
- progressBar.setVisibility(View.VISIBLE);
+ queueControlBinding.controlPlayPause.setClickable(false);
+ queueControlBinding.controlPlayPause.setVisibility(View.INVISIBLE);
+ queueControlBinding.progressBar.setVisibility(View.VISIBLE);
break;
}
}
@@ -692,18 +651,21 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
private void onPlayModeChanged(final int repeatMode, final boolean shuffled) {
switch (repeatMode) {
case Player.REPEAT_MODE_OFF:
- repeatButton.setImageResource(R.drawable.exo_controls_repeat_off);
+ queueControlBinding.controlRepeat
+ .setImageResource(R.drawable.exo_controls_repeat_off);
break;
case Player.REPEAT_MODE_ONE:
- repeatButton.setImageResource(R.drawable.exo_controls_repeat_one);
+ queueControlBinding.controlRepeat
+ .setImageResource(R.drawable.exo_controls_repeat_one);
break;
case Player.REPEAT_MODE_ALL:
- repeatButton.setImageResource(R.drawable.exo_controls_repeat_all);
+ queueControlBinding.controlRepeat
+ .setImageResource(R.drawable.exo_controls_repeat_all);
break;
}
final int shuffleAlpha = shuffled ? 255 : 77;
- shuffleButton.setImageAlpha(shuffleAlpha);
+ queueControlBinding.controlShuffle.setImageAlpha(shuffleAlpha);
}
private void onPlaybackParameterChanged(final PlaybackParameters parameters) {
@@ -716,12 +678,13 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
}
private void onMaybePlaybackAdapterChanged() {
- if (itemsList == null || player == null) {
+ if (player == null) {
return;
}
final PlayQueueAdapter maybeNewAdapter = player.getPlayQueueAdapter();
- if (maybeNewAdapter != null && itemsList.getAdapter() != maybeNewAdapter) {
- itemsList.setAdapter(maybeNewAdapter);
+ if (maybeNewAdapter != null
+ && queueControlBinding.playQueue.getAdapter() != maybeNewAdapter) {
+ queueControlBinding.playQueue.setAdapter(maybeNewAdapter);
}
}
@@ -735,7 +698,8 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
//2) Icon change accordingly to current App Theme
// using rootView.getContext() because getApplicationContext() didn't work
- item.setIcon(ThemeHelper.resolveResourceIdFromAttr(rootView.getContext(),
+ final Context context = queueControlBinding.getRoot().getContext();
+ item.setIcon(ThemeHelper.resolveResourceIdFromAttr(context,
player.isMuted()
? R.attr.ic_volume_off
: R.attr.ic_volume_up));
From b4d77df1be3f06f8a44f153f3ab23d8c7b5c3788 Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 31 Oct 2020 15:44:11 +0530
Subject: [PATCH 091/182] Use view binding in ErrorActivity.
---
.../schabi/newpipe/report/ErrorActivity.java | 56 ++++++++-----------
app/src/main/res/layout/activity_error.xml | 4 +-
2 files changed, 25 insertions(+), 35 deletions(-)
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 3213821cd..a4b6af2ab 100644
--- a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java
@@ -14,15 +14,11 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import androidx.core.app.NavUtils;
import com.google.android.material.snackbar.Snackbar;
@@ -34,6 +30,7 @@ import org.schabi.newpipe.ActivityCommunicator;
import org.schabi.newpipe.BuildConfig;
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.databinding.ActivityErrorBinding;
import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.ShareUtils;
import org.schabi.newpipe.util.ThemeHelper;
@@ -87,7 +84,8 @@ public class ErrorActivity extends AppCompatActivity {
private ErrorInfo errorInfo;
private Class returnActivity;
private String currentTimeStamp;
- private EditText userCommentBox;
+
+ private ActivityErrorBinding activityErrorBinding;
public static void reportUiError(final AppCompatActivity activity, final Throwable el) {
reportError(activity, el, activity.getClass(), null, ErrorInfo.make(UserAction.UI_ERROR,
@@ -181,12 +179,13 @@ public class ErrorActivity extends AppCompatActivity {
assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
- setContentView(R.layout.activity_error);
+
+ activityErrorBinding = ActivityErrorBinding.inflate(getLayoutInflater());
+ setContentView(activityErrorBinding.getRoot());
final Intent intent = getIntent();
- final Toolbar toolbar = findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
+ setSupportActionBar(activityErrorBinding.toolbarLayout.toolbar);
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
@@ -195,15 +194,6 @@ public class ErrorActivity extends AppCompatActivity {
actionBar.setDisplayShowTitleEnabled(true);
}
- final Button reportEmailButton = findViewById(R.id.errorReportEmailButton);
- final Button copyButton = findViewById(R.id.errorReportCopyButton);
- final Button reportGithubButton = findViewById(R.id.errorReportGitHubButton);
-
- userCommentBox = findViewById(R.id.errorCommentBox);
- final TextView errorView = findViewById(R.id.errorView);
- final TextView infoView = findViewById(R.id.errorInfosView);
- final TextView errorMessageView = findViewById(R.id.errorMessageView);
-
final ActivityCommunicator ac = ActivityCommunicator.getCommunicator();
returnActivity = ac.getReturnActivity();
errorInfo = intent.getParcelableExtra(ERROR_INFO);
@@ -213,28 +203,27 @@ public class ErrorActivity extends AppCompatActivity {
addGuruMeditation();
currentTimeStamp = getCurrentTimeStamp();
- reportEmailButton.setOnClickListener(v ->
+ activityErrorBinding.errorReportEmailButton.setOnClickListener(v ->
openPrivacyPolicyDialog(this, "EMAIL"));
- copyButton.setOnClickListener(v -> {
+ activityErrorBinding.errorReportCopyButton.setOnClickListener(v -> {
ShareUtils.copyToClipboard(this, buildMarkdown());
Toast.makeText(this, R.string.msg_copied, Toast.LENGTH_SHORT).show();
});
- reportGithubButton.setOnClickListener(v ->
+ activityErrorBinding.errorReportGitHubButton.setOnClickListener(v ->
openPrivacyPolicyDialog(this, "GITHUB"));
-
// normal bugreport
buildInfo(errorInfo);
if (errorInfo.getMessage() != 0) {
- errorMessageView.setText(errorInfo.getMessage());
+ activityErrorBinding.errorMessageView.setText(errorInfo.getMessage());
} else {
- errorMessageView.setVisibility(View.GONE);
- findViewById(R.id.messageWhatHappenedView).setVisibility(View.GONE);
+ activityErrorBinding.errorMessageView.setVisibility(View.GONE);
+ activityErrorBinding.messageWhatHappenedView.setVisibility(View.GONE);
}
- errorView.setText(formErrorText(errorList));
+ activityErrorBinding.errorView.setText(formErrorText(errorList));
// print stack trace once again for debugging:
for (final String e : errorList) {
@@ -339,11 +328,10 @@ public class ErrorActivity extends AppCompatActivity {
}
private void buildInfo(final ErrorInfo info) {
- final TextView infoLabelView = findViewById(R.id.errorInfoLabelsView);
- final TextView infoView = findViewById(R.id.errorInfosView);
String text = "";
- infoLabelView.setText(getString(R.string.info_labels).replace("\\n", "\n"));
+ activityErrorBinding.errorInfoLabelsView.setText(getString(R.string.info_labels)
+ .replace("\\n", "\n"));
text += getUserActionString(info.getUserAction()) + "\n"
+ info.getRequest() + "\n"
@@ -356,7 +344,7 @@ public class ErrorActivity extends AppCompatActivity {
+ BuildConfig.VERSION_NAME + "\n"
+ getOsString();
- infoView.setText(text);
+ activityErrorBinding.errorInfosView.setText(text);
}
private String buildJson() {
@@ -374,7 +362,8 @@ public class ErrorActivity extends AppCompatActivity {
.value("os", getOsString())
.value("time", currentTimeStamp)
.array("exceptions", Arrays.asList(errorList))
- .value("user_comment", userCommentBox.getText().toString())
+ .value("user_comment", activityErrorBinding.errorCommentBox.getText()
+ .toString())
.end()
.done();
} catch (final Throwable e) {
@@ -389,7 +378,7 @@ public class ErrorActivity extends AppCompatActivity {
try {
final StringBuilder htmlErrorReport = new StringBuilder();
- final String userComment = userCommentBox.getText().toString();
+ final String userComment = activityErrorBinding.errorCommentBox.getText().toString();
if (!userComment.isEmpty()) {
htmlErrorReport.append(userComment).append("\n");
}
@@ -473,10 +462,9 @@ public class ErrorActivity extends AppCompatActivity {
private void addGuruMeditation() {
//just an easter egg
- final TextView sorryView = findViewById(R.id.errorSorryView);
- String text = sorryView.getText().toString();
+ String text = activityErrorBinding.errorSorryView.getText().toString();
text += "\n" + getString(R.string.guru_meditation);
- sorryView.setText(text);
+ activityErrorBinding.errorSorryView.setText(text);
}
@Override
diff --git a/app/src/main/res/layout/activity_error.xml b/app/src/main/res/layout/activity_error.xml
index f265c2658..4feea549c 100644
--- a/app/src/main/res/layout/activity_error.xml
+++ b/app/src/main/res/layout/activity_error.xml
@@ -5,7 +5,9 @@
android:layout_height="match_parent"
tools:context=".report.ErrorActivity">
-
+
Date: Sat, 31 Oct 2020 15:46:46 +0530
Subject: [PATCH 092/182] Use view binding in SettingsActivity.
---
.../org/schabi/newpipe/settings/SettingsActivity.java | 10 ++++++----
app/src/main/res/layout/settings_layout.xml | 4 +++-
2 files changed, 9 insertions(+), 5 deletions(-)
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 d2d4c2404..4de166a55 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java
@@ -7,12 +7,12 @@ import android.view.MenuItem;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.databinding.SettingsLayoutBinding;
import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.FocusOverlayView;
@@ -51,10 +51,12 @@ public class SettingsActivity extends AppCompatActivity
setTheme(ThemeHelper.getSettingsThemeStyle(this));
assureCorrectAppLanguage(this);
super.onCreate(savedInstanceBundle);
- setContentView(R.layout.settings_layout);
- final Toolbar toolbar = findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
+ final SettingsLayoutBinding settingsLayoutBinding =
+ SettingsLayoutBinding.inflate(getLayoutInflater());
+ setContentView(settingsLayoutBinding.getRoot());
+
+ setSupportActionBar(settingsLayoutBinding.toolbarLayout.toolbar);
if (savedInstanceBundle == null) {
getSupportFragmentManager().beginTransaction()
diff --git a/app/src/main/res/layout/settings_layout.xml b/app/src/main/res/layout/settings_layout.xml
index d50924c46..32c6c6b91 100644
--- a/app/src/main/res/layout/settings_layout.xml
+++ b/app/src/main/res/layout/settings_layout.xml
@@ -12,6 +12,8 @@
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize" />
-
+
From e4d94b1a4e4fbfdaeb1336f9a416e23dec60cb02 Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 19 Dec 2020 04:25:42 +0530
Subject: [PATCH 093/182] Add AndroidX Webkit.
---
app/build.gradle | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/build.gradle b/app/build.gradle
index 4acff01bf..15561b2d2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -203,6 +203,7 @@ dependencies {
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.documentfile:documentfile:1.0.1'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
+ implementation 'androidx.webkit:webkit:1.4.0'
implementation "androidx.lifecycle:lifecycle-livedata:${androidxLifecycleVersion}"
implementation "androidx.lifecycle:lifecycle-viewmodel:${androidxLifecycleVersion}"
From 173150591dcb91cb2e8e3f5c42c709087a9ec3bc Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 19 Dec 2020 04:41:01 +0530
Subject: [PATCH 094/182] Use WebViewClientCompat in ReCaptchaActivity.
---
.../org/schabi/newpipe/ReCaptchaActivity.java | 19 ++-----------------
1 file changed, 2 insertions(+), 17 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
index dfe062a16..463fc24ac 100644
--- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
@@ -8,18 +8,16 @@ import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.CookieManager;
-import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
-import android.webkit.WebViewClient;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NavUtils;
import androidx.preference.PreferenceManager;
+import androidx.webkit.WebViewClientCompat;
import org.schabi.newpipe.databinding.ActivityRecaptchaBinding;
import org.schabi.newpipe.util.ThemeHelper;
@@ -83,20 +81,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
webSettings.setJavaScriptEnabled(true);
webSettings.setUserAgentString(DownloaderImpl.USER_AGENT);
- recaptchaBinding.reCaptchaWebView.setWebViewClient(new WebViewClient() {
- @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
- @Override
- public boolean shouldOverrideUrlLoading(final WebView view,
- final WebResourceRequest request) {
- final String url = request.getUrl().toString();
- if (MainActivity.DEBUG) {
- Log.d(TAG, "shouldOverrideUrlLoading: request.url=" + url);
- }
-
- handleCookiesFromUrl(url);
- return false;
- }
-
+ recaptchaBinding.reCaptchaWebView.setWebViewClient(new WebViewClientCompat() {
@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
if (MainActivity.DEBUG) {
From 0fe3fe7594d5815c71e6b667570e9cd7523dc9ea Mon Sep 17 00:00:00 2001
From: Isira Seneviratne
Date: Sat, 19 Dec 2020 16:52:17 +0530
Subject: [PATCH 095/182] Use ServiceCompat.stopForeground().
---
app/src/main/java/org/schabi/newpipe/RouterActivity.java | 3 ++-
.../org/schabi/newpipe/local/feed/service/FeedLoadService.kt | 3 ++-
.../local/subscription/services/BaseImportExportService.java | 3 ++-
.../java/org/schabi/newpipe/player/NotificationUtil.java | 3 ++-
.../us/shandian/giga/service/DownloadManagerService.java | 5 +++--
5 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
index e04970e86..98a0921e4 100644
--- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
@@ -25,6 +25,7 @@ import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.app.NotificationCompat;
+import androidx.core.app.ServiceCompat;
import androidx.core.widget.TextViewCompat;
import androidx.fragment.app.FragmentManager;
import androidx.preference.PreferenceManager;
@@ -695,7 +696,7 @@ public class RouterActivity extends AppCompatActivity {
@Override
public void onDestroy() {
super.onDestroy();
- stopForeground(true);
+ ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE);
if (fetcher != null) {
fetcher.dispose();
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt b/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt
index ddbbea23d..2a0aa1c90 100644
--- a/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt
+++ b/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt
@@ -30,6 +30,7 @@ import android.os.IBinder
import android.util.Log
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
+import androidx.core.app.ServiceCompat
import androidx.preference.PreferenceManager
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Flowable
@@ -147,7 +148,7 @@ class FeedLoadService : Service() {
private fun stopService() {
disposeAll()
- stopForeground(true)
+ ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE)
notificationManager.cancel(NOTIFICATION_ID)
stopSelf()
}
diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/services/BaseImportExportService.java b/app/src/main/java/org/schabi/newpipe/local/subscription/services/BaseImportExportService.java
index 73c0d23a0..34543b565 100644
--- a/app/src/main/java/org/schabi/newpipe/local/subscription/services/BaseImportExportService.java
+++ b/app/src/main/java/org/schabi/newpipe/local/subscription/services/BaseImportExportService.java
@@ -31,6 +31,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
+import androidx.core.app.ServiceCompat;
import org.reactivestreams.Publisher;
import org.schabi.newpipe.R;
@@ -162,7 +163,7 @@ public abstract class BaseImportExportService extends Service {
protected void postErrorResult(final String title, final String text) {
disposeAll();
- stopForeground(true);
+ ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE);
stopSelf();
if (title == null) {
diff --git a/app/src/main/java/org/schabi/newpipe/player/NotificationUtil.java b/app/src/main/java/org/schabi/newpipe/player/NotificationUtil.java
index 860ace84c..c1c2e4eba 100644
--- a/app/src/main/java/org/schabi/newpipe/player/NotificationUtil.java
+++ b/app/src/main/java/org/schabi/newpipe/player/NotificationUtil.java
@@ -15,6 +15,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
+import androidx.core.app.ServiceCompat;
import androidx.core.content.ContextCompat;
import org.schabi.newpipe.MainActivity;
@@ -188,7 +189,7 @@ public final class NotificationUtil {
}
void cancelNotificationAndStopForeground(final Service service) {
- service.stopForeground(true);
+ ServiceCompat.stopForeground(service, ServiceCompat.STOP_FOREGROUND_REMOVE);
if (notificationManager != null) {
notificationManager.cancel(NOTIFICATION_ID);
diff --git a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java
index b43733a51..e77196445 100755
--- a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java
+++ b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java
@@ -25,6 +25,7 @@ import android.os.IBinder;
import android.os.Message;
import android.os.Parcelable;
+import androidx.core.app.ServiceCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;
import android.util.Log;
@@ -235,7 +236,7 @@ public class DownloadManagerService extends Service {
Log.d(TAG, "Destroying");
}
- stopForeground(true);
+ ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE);
if (mNotificationManager != null && downloadDoneNotification != null) {
downloadDoneNotification.setDeleteIntent(null);// prevent NewPipe running when is killed, cleared from recent, etc
@@ -363,7 +364,7 @@ public class DownloadManagerService extends Service {
if (state) {
startForeground(FOREGROUND_NOTIFICATION_ID, mNotification);
} else {
- stopForeground(true);
+ ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE);
}
manageLock(state);
From 908dff39319e01bc1e314f1ee89e285f538ff04e Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Sun, 20 Dec 2020 01:18:39 +0100
Subject: [PATCH 096/182] Fix security vulnerability in checkstyle / guava
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 15561b2d2..3ac8ff525 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -93,7 +93,7 @@ android {
ext {
icepickVersion = '3.2.0'
- checkstyleVersion = '8.37'
+ checkstyleVersion = '8.38'
stethoVersion = '1.5.1'
leakCanaryVersion = '2.5'
exoPlayerVersion = '2.11.8'
From 7a7a90bf79a613dad94fac4eea1af3747ccbb725 Mon Sep 17 00:00:00 2001
From: bopol
Date: Sun, 20 Dec 2020 00:03:19 +0100
Subject: [PATCH 097/182] remove timestamp from share url for all services
except youtube
It produces not found error for PeerTube, media.ccc.de, SoundCloud
---
.../org/schabi/newpipe/player/VideoPlayerImpl.java | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/player/VideoPlayerImpl.java b/app/src/main/java/org/schabi/newpipe/player/VideoPlayerImpl.java
index 3cbcb87a3..a304b4430 100644
--- a/app/src/main/java/org/schabi/newpipe/player/VideoPlayerImpl.java
+++ b/app/src/main/java/org/schabi/newpipe/player/VideoPlayerImpl.java
@@ -103,6 +103,7 @@ import org.schabi.newpipe.util.ShareUtils;
import java.util.List;
+import static org.schabi.newpipe.extractor.ServiceList.YouTube;
import static org.schabi.newpipe.player.MainPlayer.ACTION_CLOSE;
import static org.schabi.newpipe.player.MainPlayer.ACTION_FAST_FORWARD;
import static org.schabi.newpipe.player.MainPlayer.ACTION_FAST_REWIND;
@@ -889,10 +890,17 @@ public class VideoPlayerImpl extends VideoPlayer
private void onShareClicked() {
// share video at the current time (youtube.com/watch?v=ID&t=SECONDS)
// Timestamp doesn't make sense in a live stream so drop it
- final String ts = isLive() ? "" : ("&t=" + (getPlaybackSeekBar().getProgress() / 1000));
+
+ final int ts = getPlaybackSeekBar().getProgress() / 1000;
+ final MediaSourceTag metadata = getCurrentMetadata();
+ String videoUrl = getVideoUrl();
+ if (!isLive() && ts >= 0 && metadata != null
+ && metadata.getMetadata().getServiceId() == YouTube.getServiceId()) {
+ videoUrl += ("&t=" + ts);
+ }
ShareUtils.shareUrl(service,
getVideoTitle(),
- getVideoUrl() + ts);
+ videoUrl);
}
private void onPlayWithKodiClicked() {
From 0a831ec84e7a3c822ce1822d97bc9b934a510f33 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Tue, 15 Dec 2020 17:41:21 +0100
Subject: [PATCH 098/182] Display meta info about search query, stream creator
or topic
Closes #4614
---
app/build.gradle | 2 +-
.../newpipe/fragments/MainFragment.java | 2 +-
.../fragments/detail/VideoDetailFragment.java | 77 +++++++++++++++----
.../fragments/list/search/SearchFragment.java | 48 ++++++++++++
.../fragment_video_detail.xml | 32 ++++++++
app/src/main/res/layout/fragment_search.xml | 14 +++-
.../main/res/layout/fragment_video_detail.xml | 33 ++++++++
app/src/main/res/values/settings_keys.xml | 1 +
app/src/main/res/values/strings.xml | 2 +
app/src/main/res/xml/content_settings.xml | 7 ++
10 files changed, 200 insertions(+), 18 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 15561b2d2..fadfc3221 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -179,7 +179,7 @@ dependencies {
// NewPipe dependencies
// You can use a local version by uncommenting a few lines in settings.gradle
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:85fa006214b003f21eacb76c445a167732f19981'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:79b5aa9760da52020821b68e2af41a9238943304'
implementation "com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751"
implementation "org.jsoup:jsoup:1.13.1"
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 866b324ec..a77109f86 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -3,7 +3,6 @@ package org.schabi.newpipe.fragments;
import android.content.Context;
import android.content.res.ColorStateList;
import android.os.Bundle;
-import androidx.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -19,6 +18,7 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapterMenuWorkaround;
+import androidx.preference.PreferenceManager;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
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 427cff06e..b9cb4ab2b 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
@@ -16,7 +16,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
-import android.text.TextUtils;
+import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -63,6 +63,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.ReCaptchaActivity;
import org.schabi.newpipe.download.DownloadDialog;
import org.schabi.newpipe.extractor.InfoItem;
+import org.schabi.newpipe.extractor.MetaInfo;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.ServiceList;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
@@ -122,8 +123,10 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
+import static android.text.TextUtils.isEmpty;
import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.COMMENTS;
import static org.schabi.newpipe.extractor.stream.StreamExtractor.NO_AGE_LIMIT;
+import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import static org.schabi.newpipe.player.helper.PlayerHelper.globalScreenOrientationLocked;
import static org.schabi.newpipe.player.helper.PlayerHelper.isClearingQueueConfirmationRequired;
import static org.schabi.newpipe.player.playqueue.PlayQueueItem.RECOVERY_UNSET;
@@ -218,6 +221,10 @@ public final class VideoDetailFragment
private TextView detailDurationView;
private TextView detailPositionView;
+ private LinearLayout detailMetadataInfo;
+ private View detailMetadataInfoSeparator;
+ private TextView detailMetadataInfoText;
+
private LinearLayout videoDescriptionRootLayout;
private TextView videoUploadDateView;
private TextView videoDescriptionView;
@@ -508,8 +515,8 @@ public final class VideoDetailFragment
}
break;
case R.id.detail_uploader_root_layout:
- if (TextUtils.isEmpty(currentInfo.getSubChannelUrl())) {
- if (!TextUtils.isEmpty(currentInfo.getUploaderUrl())) {
+ if (isEmpty(currentInfo.getSubChannelUrl())) {
+ if (!isEmpty(currentInfo.getUploaderUrl())) {
openChannel(currentInfo.getUploaderUrl(), currentInfo.getUploaderName());
}
@@ -583,7 +590,7 @@ public final class VideoDetailFragment
}
break;
case R.id.detail_uploader_root_layout:
- if (TextUtils.isEmpty(currentInfo.getSubChannelUrl())) {
+ if (isEmpty(currentInfo.getSubChannelUrl())) {
Log.w(TAG,
"Can't open parent channel because we got no parent channel URL");
} else {
@@ -644,6 +651,10 @@ public final class VideoDetailFragment
detailDurationView = rootView.findViewById(R.id.detail_duration_view);
detailPositionView = rootView.findViewById(R.id.detail_position_view);
+ detailMetadataInfo = rootView.findViewById(R.id.detail_metadata_info);
+ detailMetadataInfoSeparator = rootView.findViewById(R.id.detail_metadata_info_separator);
+ detailMetadataInfoText = rootView.findViewById(R.id.detail_metadata_info_text);
+
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);
@@ -748,7 +759,7 @@ public final class VideoDetailFragment
private void initThumbnailViews(@NonNull final StreamInfo info) {
thumbnailImageView.setImageResource(R.drawable.dummy_thumbnail_dark);
- if (!TextUtils.isEmpty(info.getThumbnailUrl())) {
+ if (!isEmpty(info.getThumbnailUrl())) {
final String infoServiceName = NewPipe.getNameOfService(info.getServiceId());
final ImageLoadingListener onFailListener = new SimpleImageLoadingListener() {
@Override
@@ -763,12 +774,12 @@ public final class VideoDetailFragment
ImageDisplayConstants.DISPLAY_THUMBNAIL_OPTIONS, onFailListener);
}
- if (!TextUtils.isEmpty(info.getSubChannelAvatarUrl())) {
+ if (!isEmpty(info.getSubChannelAvatarUrl())) {
IMAGE_LOADER.displayImage(info.getSubChannelAvatarUrl(), subChannelThumb,
ImageDisplayConstants.DISPLAY_AVATAR_OPTIONS);
}
- if (!TextUtils.isEmpty(info.getUploaderAvatarUrl())) {
+ if (!isEmpty(info.getUploaderAvatarUrl())) {
IMAGE_LOADER.displayImage(info.getUploaderAvatarUrl(), uploaderThumb,
ImageDisplayConstants.DISPLAY_AVATAR_OPTIONS);
}
@@ -1217,7 +1228,7 @@ public final class VideoDetailFragment
}
private void prepareDescription(final Description description) {
- if (description == null || TextUtils.isEmpty(description.getContent())
+ if (description == null || isEmpty(description.getContent())
|| description == Description.emptyDescription) {
return;
}
@@ -1247,6 +1258,42 @@ public final class VideoDetailFragment
}
}
+ private void setMetaInfo(final StreamInfo info) {
+ final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(
+ requireContext());
+ final boolean showMetaInfo = sp.getBoolean(
+ requireContext().getString(R.string.show_meta_info_key), true);
+ if (info.getMetaInfo().isEmpty() || !showMetaInfo) {
+ detailMetadataInfo.setVisibility(View.GONE);
+ detailMetadataInfoSeparator.setVisibility(View.GONE);
+ } else {
+ final List metaIfs = info.getMetaInfo();
+ final StringBuilder stringBuilder = new StringBuilder();
+ for (final MetaInfo mi: metaIfs) {
+ if (!isNullOrEmpty(mi.getTitle())) {
+ stringBuilder.append("").append(mi.getTitle()).append(" ");
+ }
+ stringBuilder.append(mi.getContent().getContent());
+ for (int i = 0; i < mi.getUrls().size(); i++) {
+ stringBuilder
+ .append(" ")
+ .append(mi.getUrlTexts().get(i))
+ .append(" ");
+ if (i < mi.getUrls().size() - 1 && mi.getUrls().size() > 1) {
+ // append line break to all but the last URL if there are multiple URLs
+ stringBuilder.append(" ");
+ }
+ }
+ }
+
+ detailMetadataInfoSeparator.setVisibility(View.VISIBLE);
+ detailMetadataInfoText.setText(HtmlCompat.fromHtml(
+ stringBuilder.toString(), HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING));
+ detailMetadataInfoText.setMovementMethod(LinkMovementMethod.getInstance());
+ detailMetadataInfo.setVisibility(View.VISIBLE);
+ }
+ }
+
private final ViewTreeObserver.OnPreDrawListener preDrawListener =
new ViewTreeObserver.OnPreDrawListener() {
@Override
@@ -1462,9 +1509,9 @@ public final class VideoDetailFragment
animateView(thumbnailPlayButton, true, 200);
videoTitleTextView.setText(title);
- if (!TextUtils.isEmpty(info.getSubChannelName())) {
+ if (!isEmpty(info.getSubChannelName())) {
displayBothUploaderAndSubChannel(info);
- } else if (!TextUtils.isEmpty(info.getUploaderName())) {
+ } else if (!isEmpty(info.getUploaderName())) {
displayUploaderAsSubChannel(info);
} else {
uploaderTextView.setVisibility(View.GONE);
@@ -1559,6 +1606,8 @@ public final class VideoDetailFragment
prepareDescription(info.getDescription());
updateProgressInfo(info);
initThumbnailViews(info);
+ setMetaInfo(info);
+
if (player == null || player.isPlayerStopped()) {
updateOverlayData(info.getName(), info.getUploaderName(), info.getThumbnailUrl());
@@ -1610,7 +1659,7 @@ public final class VideoDetailFragment
subChannelThumb.setVisibility(View.VISIBLE);
- if (!TextUtils.isEmpty(info.getUploaderName())) {
+ if (!isEmpty(info.getUploaderName())) {
uploaderTextView.setText(
String.format(getString(R.string.video_detail_by), info.getUploaderName()));
uploaderTextView.setVisibility(View.VISIBLE);
@@ -2305,10 +2354,10 @@ public final class VideoDetailFragment
private void updateOverlayData(@Nullable final String overlayTitle,
@Nullable final String uploader,
@Nullable final String thumbnailUrl) {
- overlayTitleTextView.setText(TextUtils.isEmpty(overlayTitle) ? "" : overlayTitle);
- overlayChannelTextView.setText(TextUtils.isEmpty(uploader) ? "" : uploader);
+ overlayTitleTextView.setText(isEmpty(title) ? "" : title);
+ overlayChannelTextView.setText(isEmpty(uploader) ? "" : uploader);
overlayThumbnailImageView.setImageResource(R.drawable.dummy_thumbnail_dark);
- if (!TextUtils.isEmpty(thumbnailUrl)) {
+ if (!isEmpty(thumbnailUrl)) {
IMAGE_LOADER.displayImage(thumbnailUrl, overlayThumbnailImageView,
ImageDisplayConstants.DISPLAY_THUMBNAIL_OPTIONS, null);
}
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 02dbf176b..f44e5e330 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
@@ -9,6 +9,7 @@ import android.text.Editable;
import android.text.Html;
import android.text.TextUtils;
import android.text.TextWatcher;
+import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -39,6 +40,7 @@ import org.schabi.newpipe.ReCaptchaActivity;
import org.schabi.newpipe.database.history.model.SearchHistoryEntry;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.ListExtractor;
+import org.schabi.newpipe.extractor.MetaInfo;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.Page;
import org.schabi.newpipe.extractor.StreamingService;
@@ -78,6 +80,7 @@ import io.reactivex.rxjava3.subjects.PublishSubject;
import static androidx.recyclerview.widget.ItemTouchHelper.Callback.makeMovementFlags;
import static java.util.Arrays.asList;
+import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
public class SearchFragment extends BaseListFragment>
@@ -129,6 +132,9 @@ public class SearchFragment extends BaseListFragment cannot be bundled without creating some containers
+ metaInfo = new MetaInfo[result.getMetaInfo().size()];
+ metaInfo = result.getMetaInfo().toArray(metaInfo);
+
handleSearchSuggestion();
+ handleMetaInfo();
lastSearchedString = searchString;
nextPage = result.getNextPage();
@@ -1021,6 +1036,39 @@ public class SearchFragment extends BaseListFragment").append(mi.getTitle()).append("");
+ }
+ stringBuilder.append(mi.getContent().getContent());
+ for (int i = 0; i < mi.getUrls().size(); i++) {
+ stringBuilder
+ .append(" ")
+ .append(mi.getUrlTexts().get(i))
+ .append(" ");
+ if (i < mi.getUrls().size() - 1 && mi.getUrls().size() > 1) {
+ // append line break to all but the last URL if there are multiple URLs
+ stringBuilder.append(" ");
+ }
+ }
+ }
+
+ metaInfoTextView.setText(HtmlCompat.fromHtml(
+ stringBuilder.toString(), HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING));
+ metaInfoTextView.setMovementMethod(LinkMovementMethod.getInstance());
+ metaInfoTextView.setVisibility(View.VISIBLE);
+ }
+ }
+
@Override
public void handleNextItems(final ListExtractor.InfoItemsPage> result) {
showListFooter(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 8aee89ab0..d59d2db73 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
@@ -506,6 +506,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_video_detail.xml b/app/src/main/res/layout/fragment_video_detail.xml
index 0df85fe95..3bf2bb025 100644
--- a/app/src/main/res/layout/fragment_video_detail.xml
+++ b/app/src/main/res/layout/fragment_video_detail.xml
@@ -491,6 +491,39 @@
+
+
+
+
+
+
+
+
+
+
show_play_with_kodi
show_next_video
show_comments
+ show_meta_info
stream_info_selected_tab
show_hold_to_append
content_language
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ecb690044..d2dd8afd5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -93,6 +93,8 @@
Show 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.
+ Show meta info
+ Turn off to hide meta info boxes with additional information about the stream creator, stream content or a search request.
Image cache wiped
Wipe cached metadata
Remove all cached webpage data
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index c885366ec..914fb2e59 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -85,6 +85,13 @@
android:title="@string/show_comments_title"
app:iconSpaceReserved="false" />
+
+
Date: Sat, 19 Dec 2020 14:48:03 +0100
Subject: [PATCH 099/182] dynamically get package name
it fixes issues with forks or debug builds, e.g. when you open two newpipe apps (with debug or fork apps), close one notification, it closes all newpipe notifications
fixes https://github.com/TeamNewPipe/NewPipe/issues/4653
---
app/src/main/java/org/schabi/newpipe/App.java | 4 +++-
.../fragments/detail/VideoDetailFragment.java | 18 ++++++++--------
.../local/feed/service/FeedLoadService.kt | 3 ++-
.../services/SubscriptionsExportService.java | 3 ++-
.../services/SubscriptionsImportService.java | 3 ++-
.../org/schabi/newpipe/player/MainPlayer.java | 21 ++++++++++---------
6 files changed, 29 insertions(+), 23 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java
index e6dce4d67..7e3466f67 100644
--- a/app/src/main/java/org/schabi/newpipe/App.java
+++ b/app/src/main/java/org/schabi/newpipe/App.java
@@ -67,8 +67,10 @@ import io.reactivex.rxjava3.plugins.RxJavaPlugins;
public class App extends MultiDexApplication {
protected static final String TAG = App.class.toString();
private static App app;
+ public static final String PACKAGE_NAME = BuildConfig.APPLICATION_ID;
- @Nullable private Disposable disposable = null;
+ @Nullable
+ private Disposable disposable = null;
@NonNull
public static App getApp() {
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 427cff06e..d0a1584a9 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
@@ -145,15 +145,15 @@ public final class VideoDetailFragment
private static final float MAX_PLAYER_HEIGHT = 0.7f;
public static final String ACTION_SHOW_MAIN_PLAYER =
- "org.schabi.newpipe.VideoDetailFragment.ACTION_SHOW_MAIN_PLAYER";
+ App.PACKAGE_NAME + ".VideoDetailFragment.ACTION_SHOW_MAIN_PLAYER";
public static final String ACTION_HIDE_MAIN_PLAYER =
- "org.schabi.newpipe.VideoDetailFragment.ACTION_HIDE_MAIN_PLAYER";
+ App.PACKAGE_NAME + ".VideoDetailFragment.ACTION_HIDE_MAIN_PLAYER";
public static final String ACTION_PLAYER_STARTED =
- "org.schabi.newpipe.VideoDetailFragment.ACTION_PLAYER_STARTED";
+ App.PACKAGE_NAME + ".VideoDetailFragment.ACTION_PLAYER_STARTED";
public static final String ACTION_VIDEO_FRAGMENT_RESUMED =
- "org.schabi.newpipe.VideoDetailFragment.ACTION_VIDEO_FRAGMENT_RESUMED";
+ App.PACKAGE_NAME + ".VideoDetailFragment.ACTION_VIDEO_FRAGMENT_RESUMED";
public static final String ACTION_VIDEO_FRAGMENT_STOPPED =
- "org.schabi.newpipe.VideoDetailFragment.ACTION_VIDEO_FRAGMENT_STOPPED";
+ App.PACKAGE_NAME + ".VideoDetailFragment.ACTION_VIDEO_FRAGMENT_STOPPED";
private static final String COMMENTS_TAB_TAG = "COMMENTS";
private static final String RELATED_TAB_TAG = "NEXT VIDEO";
@@ -494,10 +494,10 @@ public final class VideoDetailFragment
final PlaylistAppendDialog d = PlaylistAppendDialog.fromStreamInfo(currentInfo);
disposables.add(
- PlaylistAppendDialog.onPlaylistFound(getContext(),
- () -> d.show(getFM(), TAG),
- () -> PlaylistCreationDialog.newInstance(d).show(getFM(), TAG)
- )
+ PlaylistAppendDialog.onPlaylistFound(getContext(),
+ () -> d.show(getFM(), TAG),
+ () -> PlaylistCreationDialog.newInstance(d).show(getFM(), TAG)
+ )
);
}
break;
diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt b/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt
index 2a0aa1c90..45e8855e7 100644
--- a/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt
+++ b/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt
@@ -43,6 +43,7 @@ import io.reactivex.rxjava3.processors.PublishProcessor
import io.reactivex.rxjava3.schedulers.Schedulers
import org.reactivestreams.Subscriber
import org.reactivestreams.Subscription
+import org.schabi.newpipe.App
import org.schabi.newpipe.MainActivity.DEBUG
import org.schabi.newpipe.R
import org.schabi.newpipe.database.feed.model.FeedGroupEntity
@@ -68,7 +69,7 @@ class FeedLoadService : Service() {
companion object {
private val TAG = FeedLoadService::class.java.simpleName
private const val NOTIFICATION_ID = 7293450
- private const val ACTION_CANCEL = "org.schabi.newpipe.local.feed.service.FeedLoadService.CANCEL"
+ private const val ACTION_CANCEL = App.PACKAGE_NAME + ".local.feed.service.FeedLoadService.CANCEL"
/**
* How often the notification will be updated.
diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsExportService.java b/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsExportService.java
index 982701d1f..5dfb1bfe5 100644
--- a/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsExportService.java
+++ b/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsExportService.java
@@ -27,6 +27,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
+import org.schabi.newpipe.App;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.subscription.SubscriptionEntity;
import org.schabi.newpipe.extractor.subscription.SubscriptionItem;
@@ -50,7 +51,7 @@ public class SubscriptionsExportService extends BaseImportExportService {
* A {@link LocalBroadcastManager local broadcast} will be made with this action
* when the export is successfully completed.
*/
- public static final String EXPORT_COMPLETE_ACTION = "org.schabi.newpipe.local.subscription"
+ public static final String EXPORT_COMPLETE_ACTION = App.PACKAGE_NAME + ".local.subscription"
+ ".services.SubscriptionsExportService.EXPORT_COMPLETE";
private Subscription subscription;
diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsImportService.java b/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsImportService.java
index b1c67719c..90d0afe37 100644
--- a/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsImportService.java
+++ b/app/src/main/java/org/schabi/newpipe/local/subscription/services/SubscriptionsImportService.java
@@ -29,6 +29,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
+import org.schabi.newpipe.App;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.subscription.SubscriptionEntity;
import org.schabi.newpipe.extractor.NewPipe;
@@ -66,7 +67,7 @@ public class SubscriptionsImportService extends BaseImportExportService {
* A {@link LocalBroadcastManager local broadcast} will be made with this action
* when the import is successfully completed.
*/
- public static final String IMPORT_COMPLETE_ACTION = "org.schabi.newpipe.local.subscription"
+ public static final String IMPORT_COMPLETE_ACTION = App.PACKAGE_NAME + ".local.subscription"
+ ".services.SubscriptionsImportService.IMPORT_COMPLETE";
/**
diff --git a/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java
index 63f6a400e..49c836346 100644
--- a/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/MainPlayer.java
@@ -33,6 +33,7 @@ import android.view.WindowManager;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
+import org.schabi.newpipe.App;
import org.schabi.newpipe.R;
import org.schabi.newpipe.util.ThemeHelper;
@@ -64,25 +65,25 @@ public final class MainPlayer extends Service {
//////////////////////////////////////////////////////////////////////////*/
static final String ACTION_CLOSE
- = "org.schabi.newpipe.player.MainPlayer.CLOSE";
+ = App.PACKAGE_NAME + ".player.MainPlayer.CLOSE";
static final String ACTION_PLAY_PAUSE
- = "org.schabi.newpipe.player.MainPlayer.PLAY_PAUSE";
+ = App.PACKAGE_NAME + ".player.MainPlayer.PLAY_PAUSE";
static final String ACTION_OPEN_CONTROLS
- = "org.schabi.newpipe.player.MainPlayer.OPEN_CONTROLS";
+ = App.PACKAGE_NAME + ".player.MainPlayer.OPEN_CONTROLS";
static final String ACTION_REPEAT
- = "org.schabi.newpipe.player.MainPlayer.REPEAT";
+ = App.PACKAGE_NAME + ".player.MainPlayer.REPEAT";
static final String ACTION_PLAY_NEXT
- = "org.schabi.newpipe.player.MainPlayer.ACTION_PLAY_NEXT";
+ = App.PACKAGE_NAME + ".player.MainPlayer.ACTION_PLAY_NEXT";
static final String ACTION_PLAY_PREVIOUS
- = "org.schabi.newpipe.player.MainPlayer.ACTION_PLAY_PREVIOUS";
+ = App.PACKAGE_NAME + ".player.MainPlayer.ACTION_PLAY_PREVIOUS";
static final String ACTION_FAST_REWIND
- = "org.schabi.newpipe.player.MainPlayer.ACTION_FAST_REWIND";
+ = App.PACKAGE_NAME + ".player.MainPlayer.ACTION_FAST_REWIND";
static final String ACTION_FAST_FORWARD
- = "org.schabi.newpipe.player.MainPlayer.ACTION_FAST_FORWARD";
+ = App.PACKAGE_NAME + ".player.MainPlayer.ACTION_FAST_FORWARD";
static final String ACTION_SHUFFLE
- = "org.schabi.newpipe.player.MainPlayer.ACTION_SHUFFLE";
+ = App.PACKAGE_NAME + ".player.MainPlayer.ACTION_SHUFFLE";
public static final String ACTION_RECREATE_NOTIFICATION
- = "org.schabi.newpipe.player.MainPlayer.ACTION_RECREATE_NOTIFICATION";
+ = App.PACKAGE_NAME + ".player.MainPlayer.ACTION_RECREATE_NOTIFICATION";
/*//////////////////////////////////////////////////////////////////////////
// Service's LifeCycle
From 19f9b4f502dea4b7bc5a14c3ee190c2096074219 Mon Sep 17 00:00:00 2001
From: Stypox
Date: Sun, 20 Dec 2020 15:05:37 +0100
Subject: [PATCH 100/182] Improve meta info layout and merge duplicate code
---
.../fragments/detail/VideoDetailFragment.java | 52 ++----------
.../fragments/list/search/SearchFragment.java | 46 ++---------
.../schabi/newpipe/util/ExtractorHelper.java | 79 +++++++++++++++++++
.../org/schabi/newpipe/util/Localization.java | 2 +-
.../fragment_video_detail.xml | 29 ++-----
app/src/main/res/layout/fragment_search.xml | 15 +++-
.../main/res/layout/fragment_video_detail.xml | 30 ++-----
7 files changed, 120 insertions(+), 133 deletions(-)
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 b9cb4ab2b..6560ab404 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
@@ -16,7 +16,6 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
-import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -63,7 +62,6 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.ReCaptchaActivity;
import org.schabi.newpipe.download.DownloadDialog;
import org.schabi.newpipe.extractor.InfoItem;
-import org.schabi.newpipe.extractor.MetaInfo;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.ServiceList;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
@@ -126,11 +124,11 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
import static android.text.TextUtils.isEmpty;
import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.COMMENTS;
import static org.schabi.newpipe.extractor.stream.StreamExtractor.NO_AGE_LIMIT;
-import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import static org.schabi.newpipe.player.helper.PlayerHelper.globalScreenOrientationLocked;
import static org.schabi.newpipe.player.helper.PlayerHelper.isClearingQueueConfirmationRequired;
import static org.schabi.newpipe.player.playqueue.PlayQueueItem.RECOVERY_UNSET;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
+import static org.schabi.newpipe.util.ExtractorHelper.showMetaInfoInTextView;
public final class VideoDetailFragment
extends BaseStateFragment
@@ -221,9 +219,8 @@ public final class VideoDetailFragment
private TextView detailDurationView;
private TextView detailPositionView;
- private LinearLayout detailMetadataInfo;
- private View detailMetadataInfoSeparator;
- private TextView detailMetadataInfoText;
+ private View detailMetaInfoSeparator;
+ private TextView detailMetaInfoTextView;
private LinearLayout videoDescriptionRootLayout;
private TextView videoUploadDateView;
@@ -651,9 +648,8 @@ public final class VideoDetailFragment
detailDurationView = rootView.findViewById(R.id.detail_duration_view);
detailPositionView = rootView.findViewById(R.id.detail_position_view);
- detailMetadataInfo = rootView.findViewById(R.id.detail_metadata_info);
- detailMetadataInfoSeparator = rootView.findViewById(R.id.detail_metadata_info_separator);
- detailMetadataInfoText = rootView.findViewById(R.id.detail_metadata_info_text);
+ detailMetaInfoSeparator = rootView.findViewById(R.id.detail_meta_info_separator);
+ detailMetaInfoTextView = rootView.findViewById(R.id.detail_meta_info_text_view);
videoDescriptionRootLayout = rootView.findViewById(R.id.detail_description_root_layout);
videoUploadDateView = rootView.findViewById(R.id.detail_upload_date_view);
@@ -1258,42 +1254,6 @@ public final class VideoDetailFragment
}
}
- private void setMetaInfo(final StreamInfo info) {
- final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(
- requireContext());
- final boolean showMetaInfo = sp.getBoolean(
- requireContext().getString(R.string.show_meta_info_key), true);
- if (info.getMetaInfo().isEmpty() || !showMetaInfo) {
- detailMetadataInfo.setVisibility(View.GONE);
- detailMetadataInfoSeparator.setVisibility(View.GONE);
- } else {
- final List metaIfs = info.getMetaInfo();
- final StringBuilder stringBuilder = new StringBuilder();
- for (final MetaInfo mi: metaIfs) {
- if (!isNullOrEmpty(mi.getTitle())) {
- stringBuilder.append("").append(mi.getTitle()).append(" ");
- }
- stringBuilder.append(mi.getContent().getContent());
- for (int i = 0; i < mi.getUrls().size(); i++) {
- stringBuilder
- .append(" ")
- .append(mi.getUrlTexts().get(i))
- .append(" ");
- if (i < mi.getUrls().size() - 1 && mi.getUrls().size() > 1) {
- // append line break to all but the last URL if there are multiple URLs
- stringBuilder.append(" ");
- }
- }
- }
-
- detailMetadataInfoSeparator.setVisibility(View.VISIBLE);
- detailMetadataInfoText.setText(HtmlCompat.fromHtml(
- stringBuilder.toString(), HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING));
- detailMetadataInfoText.setMovementMethod(LinkMovementMethod.getInstance());
- detailMetadataInfo.setVisibility(View.VISIBLE);
- }
- }
-
private final ViewTreeObserver.OnPreDrawListener preDrawListener =
new ViewTreeObserver.OnPreDrawListener() {
@Override
@@ -1606,7 +1566,7 @@ public final class VideoDetailFragment
prepareDescription(info.getDescription());
updateProgressInfo(info);
initThumbnailViews(info);
- setMetaInfo(info);
+ showMetaInfoInTextView(info.getMetaInfo(), detailMetaInfoTextView, detailMetaInfoSeparator);
if (player == null || player.isPlayerStopped()) {
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 f44e5e330..2dac6d11b 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
@@ -9,7 +9,6 @@ import android.text.Editable;
import android.text.Html;
import android.text.TextUtils;
import android.text.TextWatcher;
-import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -80,8 +79,8 @@ import io.reactivex.rxjava3.subjects.PublishSubject;
import static androidx.recyclerview.widget.ItemTouchHelper.Callback.makeMovementFlags;
import static java.util.Arrays.asList;
-import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import static org.schabi.newpipe.util.AnimationUtils.animateView;
+import static org.schabi.newpipe.util.ExtractorHelper.showMetaInfoInTextView;
public class SearchFragment extends BaseListFragment>
implements BackPressable {
@@ -160,6 +159,7 @@ public class SearchFragment extends BaseListFragment").append(mi.getTitle()).append("");
- }
- stringBuilder.append(mi.getContent().getContent());
- for (int i = 0; i < mi.getUrls().size(); i++) {
- stringBuilder
- .append(" ")
- .append(mi.getUrlTexts().get(i))
- .append(" ");
- if (i < mi.getUrls().size() - 1 && mi.getUrls().size() > 1) {
- // append line break to all but the last URL if there are multiple URLs
- stringBuilder.append(" ");
- }
- }
- }
-
- metaInfoTextView.setText(HtmlCompat.fromHtml(
- stringBuilder.toString(), HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING));
- metaInfoTextView.setMovementMethod(LinkMovementMethod.getInstance());
- metaInfoTextView.setVisibility(View.VISIBLE);
- }
- }
-
@Override
public void handleNextItems(final ListExtractor.InfoItemsPage> result) {
showListFooter(false);
diff --git a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
index 650c5ae11..1f1b94545 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
@@ -22,9 +22,16 @@ package org.schabi.newpipe.util;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
+import android.text.method.LinkMovementMethod;
import android.util.Log;
+import android.view.View;
+import android.widget.TextView;
import android.widget.Toast;
+import androidx.annotation.Nullable;
+import androidx.core.text.HtmlCompat;
+import androidx.preference.PreferenceManager;
+
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R;
import org.schabi.newpipe.ReCaptchaActivity;
@@ -32,6 +39,7 @@ import org.schabi.newpipe.extractor.Info;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
import org.schabi.newpipe.extractor.ListInfo;
+import org.schabi.newpipe.extractor.MetaInfo;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.Page;
import org.schabi.newpipe.extractor.StreamingService;
@@ -60,6 +68,8 @@ import java.util.List;
import io.reactivex.rxjava3.core.Maybe;
import io.reactivex.rxjava3.core.Single;
+import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
+
public final class ExtractorHelper {
private static final String TAG = ExtractorHelper.class.getSimpleName();
private static final InfoCache CACHE = InfoCache.getInstance();
@@ -306,4 +316,73 @@ public final class ExtractorHelper {
}
});
}
+
+ /**
+ * Formats the text contained in the meta info list as HTML and puts it into the text view,
+ * while also making the separator visible. If the list is null or empty, or the user chose not
+ * to see meta information, both the text view and the separator are hidden
+ * @param metaInfos a list of meta information, can be null or empty
+ * @param metaInfoTextView the text view in which to show the formatted HTML
+ * @param metaInfoSeparator another view to be shown or hidden accordingly to the text view
+ */
+ public static void showMetaInfoInTextView(@Nullable final List metaInfos,
+ final TextView metaInfoTextView,
+ final View metaInfoSeparator) {
+ final Context context = metaInfoTextView.getContext();
+ final boolean showMetaInfo = PreferenceManager.getDefaultSharedPreferences(context)
+ .getBoolean(context.getString(R.string.show_meta_info_key), true);
+
+ if (!showMetaInfo || metaInfos == null || metaInfos.isEmpty()) {
+ metaInfoTextView.setVisibility(View.GONE);
+ metaInfoSeparator.setVisibility(View.GONE);
+
+ } else {
+ final StringBuilder stringBuilder = new StringBuilder();
+ for (final MetaInfo metaInfo : metaInfos) {
+ if (!isNullOrEmpty(metaInfo.getTitle())) {
+ stringBuilder.append("").append(metaInfo.getTitle()).append(" ")
+ .append(Localization.DOT_SEPARATOR);
+ }
+
+ String content = metaInfo.getContent().getContent().trim();
+ if (content.endsWith(".")) {
+ content = content.substring(0, content.length() - 1); // remove . at end
+ }
+ stringBuilder.append(content);
+
+ for (int i = 0; i < metaInfo.getUrls().size(); i++) {
+ if (i == 0) {
+ stringBuilder.append(Localization.DOT_SEPARATOR);
+ } else {
+ stringBuilder.append(" ");
+ }
+
+ stringBuilder
+ .append("")
+ .append(capitalizeIfAllUppercase(metaInfo.getUrlTexts().get(i).trim()))
+ .append(" ");
+ }
+ }
+
+ metaInfoTextView.setText(HtmlCompat.fromHtml(stringBuilder.toString(),
+ HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING));
+ metaInfoTextView.setMovementMethod(LinkMovementMethod.getInstance());
+ metaInfoTextView.setVisibility(View.VISIBLE);
+ metaInfoSeparator.setVisibility(View.VISIBLE);
+ }
+ }
+
+ private static String capitalizeIfAllUppercase(final String text) {
+ for (int i = 0; i < text.length(); i++) {
+ if (Character.isLowerCase(text.charAt(i))) {
+ return text; // there is at least a lowercase letter -> not all uppercase
+ }
+ }
+
+ if (text.isEmpty()) {
+ return text;
+ } else {
+ return text.substring(0, 1).toUpperCase() + text.substring(1).toLowerCase();
+ }
+ }
}
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 710827864..978f558c4 100644
--- a/app/src/main/java/org/schabi/newpipe/util/Localization.java
+++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java
@@ -57,7 +57,7 @@ import java.util.Locale;
public final class Localization {
- private static final String DOT_SEPARATOR = " • ";
+ public static final String DOT_SEPARATOR = " • ";
private static PrettyTime prettyTime;
private Localization() { }
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 d59d2db73..d90c782ef 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
@@ -507,36 +507,21 @@
-
-
-
-
-
-
+ android:gravity="center"
+ android:padding="12dp"
+ android:textSize="@dimen/video_item_detail_description_text_size"
+ tools:text="Stream meta info with link" />
+
diff --git a/app/src/main/res/layout/fragment_video_detail.xml b/app/src/main/res/layout/fragment_video_detail.xml
index 3bf2bb025..758a88f19 100644
--- a/app/src/main/res/layout/fragment_video_detail.xml
+++ b/app/src/main/res/layout/fragment_video_detail.xml
@@ -492,37 +492,21 @@
-
-
-
-
-
-
-
+ android:gravity="center"
+ android:padding="12dp"
+ android:textSize="@dimen/video_item_detail_description_text_size"
+ tools:text="Stream meta info with link" />
Date: Sun, 20 Dec 2020 18:31:51 +0100
Subject: [PATCH 101/182] Change NewPipe's domain in original ReadMe
---
README.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 2568b7624..c66bcfa7f 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-
+
NewPipe
A libre lightweight streaming frontend for Android.
@@ -13,7 +13,7 @@
Screenshots • Description • Features • Updates • Contribution • Donate • License
-Website • Blog • FAQ • Press
+Website • Blog • FAQ • Press
*Read this in other languages: [English](README.md), [한국어](README.ko.md).*
@@ -83,7 +83,7 @@ NewPipe supports multiple services. Our [docs](https://teamnewpipe.github.io/doc
## Updates
When a change to the NewPipe code occurs (due to either adding features or bug fixing), eventually a release will occur. These are in the format x.xx.x . In order to get this new version, you can:
1. Build a debug APK yourself. This is the fastest way to get new features on your device, but is much more complicated, so we recommend using one of the other methods.
- 2. Add our custom repo to F-Droid and install it from there as soon as we publish a release. The instructions are here: https://newpipe.schabi.org/FAQ/tutorials/install-add-fdroid-repo/
+ 2. Add our custom repo to F-Droid and install it from there as soon as we publish a release. The instructions are here: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/
3. Download the APK from [Github Releases](https://github.com/TeamNewPipe/NewPipe/releases) and install it as soon as we publish a release.
4. Update via F-droid. This is the slowest method of getting updates, as F-Droid must recognize changes, build the APK itself, sign it, then push the update to users.
@@ -106,7 +106,7 @@ If you'd like to get involved, check our [contribution notes](.github/CONTRIBUTI
## Donate
-If you like NewPipe we'd be happy about a donation. You can either send bitcoin or donate via Bountysource or Liberapay. For further info on donating to NewPipe, please visit our [website](https://newpipe.schabi.org/donate).
+If you like NewPipe we'd be happy about a donation. You can either send bitcoin or donate via Bountysource or Liberapay. For further info on donating to NewPipe, please visit our [website](https://newpipe.net/donate).
@@ -129,7 +129,7 @@ If you like NewPipe we'd be happy about a donation. You can either send bitcoin
## Privacy Policy
The NewPipe project aims to provide a private, anonymous experience for using media web services.
-Therefore, the app does not collect any data without your consent. NewPipe's privacy policy explains in detail what data is sent and stored when you send a crash report, or comment in our blog. You can find the document [here](https://newpipe.schabi.org/legal/privacy/).
+Therefore, the app does not collect any data without your consent. NewPipe's privacy policy explains in detail what data is sent and stored when you send a crash report, or comment in our blog. You can find the document [here](https://newpipe.net/legal/privacy/).
## License
[![GNU GPLv3 Image](https://www.gnu.org/graphics/gplv3-127x51.png)](http://www.gnu.org/licenses/gpl-3.0.en.html)
From e4aa7a90c7351bd5479557ba09b82a89d7979e97 Mon Sep 17 00:00:00 2001
From: TiA4f8R <74829229+TiA4f8R@users.noreply.github.com>
Date: Sun, 20 Dec 2020 18:36:01 +0100
Subject: [PATCH 102/182] Change NewPipe's domain in Korean ReadMe
---
README.ko.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README.ko.md b/README.ko.md
index bb6bd653b..a86eae8d9 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -1,4 +1,4 @@
-
+
NewPipe
A libre lightweight streaming frontend for Android.
@@ -13,7 +13,7 @@
Screenshots • Description • Features • Updates • Contribution • Donate • License
-Website • Blog • FAQ • Press
+Website • Blog • FAQ • Press
*Read this in other languages: [English](README.md), [한국어](README.ko.md).*
@@ -86,7 +86,7 @@ NewPipe 코드의 변경이 있을 때(기능 추가 또는 버그 수정으로
1. 직접 디버그 APK를 생성할 수 있습니다. 이 방법은 당신의 기기에서 새로운 기능을 얻을 수 있는 가장 빠른 방법이지만, 꽤 많이 복잡합니다.
따라서 우리는 다른 방법들 중 하나를 사용하는 것을 추천합니다.
2. 우리의 커스텀 저장소를 F-Droid에 추가하고 우리가 릴리즈를 게시하는 대로 저곳에서 릴리즈를 설치할 수 있습니다.
- 이에 대한 설명서는 이곳에서 확인할 수 있습니다: https://newpipe.schabi.org/FAQ/tutorials/install-add-fdroid-repo/
+ 이에 대한 설명서는 이곳에서 확인할 수 있습니다: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/
3. 우리가 릴리즈를 게시하는 대로 [Github Releases](https://github.com/TeamNewPipe/NewPipe/releases)에서 APK를 다운받고 이것을 설치할 수 있습니다.
4. F-Droid를 통해 업데이트 할 수 있습니다. F-Droid는 변화를 인식하고, 스스로 APK를 생성하고, 이것에 서명하고, 사용자들에서 업데이트를 전달해야만 하기 때문에,
이것은 업데이트를 받는 가장 느린 방법입니다.
@@ -111,7 +111,7 @@ NewPipe 코드의 변경이 있을 때(기능 추가 또는 버그 수정으로
## Donate
-만약 NewPipe가 마음에 들었다면, 우리는 기부에 대해 기꺼이 환영합니다. bitcoin을 보내거나, Bountysource 또는 Liberapay를 통해 기부할 수 있습니다. NewPipe에 기부하는 것에 대한 자세한 정보를 원한다면, 우리의 [웹사이트](https://newpipe.schabi.org/donate)를 방문하여 주십시오.
+만약 NewPipe가 마음에 들었다면, 우리는 기부에 대해 기꺼이 환영합니다. bitcoin을 보내거나, Bountysource 또는 Liberapay를 통해 기부할 수 있습니다. NewPipe에 기부하는 것에 대한 자세한 정보를 원한다면, 우리의 [웹사이트](https://newpipe.net/donate)를 방문하여 주십시오.
@@ -134,7 +134,7 @@ NewPipe 코드의 변경이 있을 때(기능 추가 또는 버그 수정으로
## Privacy Policy
NewPipe 프로젝트는 미디어 웹 서비스를 사용하는 것에 대한 사적의, 익명의 경험을 제공하는 것을 목표로 하고 있습니다.
-그러므로, 앱은 당신의 동의 없이 어떤 데이터도 수집하지 않습니다. NewPipe의 개인정보보호정책은 당신이 충돌 리포트를 보내거나, 또는 우리의 블로그에 글을 남길 때 어떤 데이터가 보내지고 저장되는지에 대해 상세히 설명합니다. 이 문서는 [여기](https://newpipe.schabi.org/legal/privacy/)에서 확인할 수 있습니다.
+그러므로, 앱은 당신의 동의 없이 어떤 데이터도 수집하지 않습니다. NewPipe의 개인정보보호정책은 당신이 충돌 리포트를 보내거나, 또는 우리의 블로그에 글을 남길 때 어떤 데이터가 보내지고 저장되는지에 대해 상세히 설명합니다. 이 문서는 [여기](https://newpipe.net/legal/privacy/)에서 확인할 수 있습니다.
## License
[![GNU GPLv3 Image](https://www.gnu.org/graphics/gplv3-127x51.png)](http://www.gnu.org/licenses/gpl-3.0.en.html)
From b5bf0d7e1d2e47fbac39333e194671eafb3997f3 Mon Sep 17 00:00:00 2001
From: opusforlife2 <53176348+opusforlife2@users.noreply.github.com>
Date: Tue, 22 Dec 2020 16:58:29 +0000
Subject: [PATCH 103/182] Export -> Import
---
README.ko.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.ko.md b/README.ko.md
index a86eae8d9..460a90dc1 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -98,7 +98,7 @@ NewPipe 코드의 변경이 있을 때(기능 추가 또는 버그 수정으로
1. 당신의 기록, 구독, 그리고 재생목록을 유지할 수 있도록 Settings > Content > Export Database 를 통해 데이터를 백업하십시오.
2. NewPipe를 삭제하십시오.
3. 새로운 소스에서 APK를 다운로드하고 이것을 설치하십시오.
-4. Step 1의 Settings > Content > Export Database 을 통해 데이터를 불러오십시오.
+4. Step 1의 Settings > Content > Import Database 을 통해 데이터를 불러오십시오.
## Contribution
당신이 아이디어, 번역, 디자인 변경, 코드 정리, 또는 정말 큰 코드 수정에 대한 의견이 있다면, 도움은 항상 환영합니다.
From 531859ac607d55ecda0b67fcc9ce4932d27d9a82 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 23 Dec 2020 00:34:55 +0100
Subject: [PATCH 104/182] [Security] Update ktlint to 0.40.0
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 3ac8ff525..a0bc93a0d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -166,7 +166,7 @@ dependencies {
kapt "frankiesardo:icepick-processor:${icepickVersion}"
checkstyle "com.puppycrawl.tools:checkstyle:${checkstyleVersion}"
- ktlint "com.pinterest:ktlint:0.39.0"
+ ktlint "com.pinterest:ktlint:0.40.0"
debugImplementation "com.facebook.stetho:stetho:${stethoVersion}"
debugImplementation "com.facebook.stetho:stetho-okhttp3:${stethoVersion}"
From 2cb7bb84f70ee4f04a9dbebccb52dba335e8e366 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 23 Dec 2020 11:48:32 +0100
Subject: [PATCH 105/182] Update translation from Weblate
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Added translation using Weblate (Somali)
Translated using Weblate (Chinese (Traditional))
Currently translated at 99.8% (608 of 609 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Spanish)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (French)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Serbian)
Currently translated at 41.0% (250 of 609 strings)
Translated using Weblate (English)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Japanese)
Currently translated at 99.6% (607 of 609 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Basque)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Arabic)
Currently translated at 99.8% (608 of 609 strings)
Translated using Weblate (Arabic)
Currently translated at 99.8% (608 of 609 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Polish)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (608 of 609 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Finnish)
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Belarusian)
Currently translated at 85.2% (519 of 609 strings)
Translated using Weblate (Bengali)
Currently translated at 79.1% (482 of 609 strings)
Translated using Weblate (German)
Currently translated at 29.2% (12 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Basque)
Currently translated at 26.8% (11 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/eu/
Translated using Weblate (Chinese (Traditional))
Currently translated at 56.0% (23 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/
Translated using Weblate (Santali)
Currently translated at 10.6% (65 of 609 strings)
Translated using Weblate (Somali)
Currently translated at 15.9% (97 of 609 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (609 of 609 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.5% (610 of 613 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (German)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Russian)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Portuguese)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Basque)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Greek)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Slovak)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Arabic)
Currently translated at 97.0% (595 of 613 strings)
Translated using Weblate (Indonesian)
Currently translated at 99.6% (611 of 613 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Hebrew)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (613 of 613 strings)
Translated using Weblate (Finnish)
Currently translated at 99.6% (611 of 613 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 93.4% (573 of 613 strings)
Translated using Weblate (Sardinian)
Currently translated at 99.5% (610 of 613 strings)
Translated using Weblate (German)
Currently translated at 41.4% (17 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/
Translated using Weblate (Turkish)
Currently translated at 19.5% (8 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/
Translated using Weblate (Greek)
Currently translated at 34.1% (14 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/el/
Translated using Weblate (Portuguese)
Currently translated at 63.4% (26 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt/
Translated using Weblate (Italian)
Currently translated at 43.9% (18 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/
Translated using Weblate (Chinese (Traditional))
Currently translated at 80.4% (33 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/
Translated using Weblate (Chinese (Simplified))
Currently translated at 70.7% (29 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/
Translated using Weblate (Somali)
Currently translated at 81.4% (499 of 613 strings)
Translated using Weblate (Somali)
Currently translated at 4.8% (2 of 41 strings)
Translation: NewPipe/Metadata
Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/so/
Translated using Weblate (Bulgarian)
Currently translated at 62.1% (381 of 613 strings)
Translated using Weblate (Bulgarian)
Currently translated at 62.1% (381 of 613 strings)
---
app/src/main/res/values-ar/strings.xml | 66 +--
.../main/res/values-b+zh+HANS+CN/strings.xml | 403 +++++++-------
app/src/main/res/values-be/strings.xml | 16 +-
app/src/main/res/values-bg/strings.xml | 23 +-
app/src/main/res/values-bn/strings.xml | 15 +-
app/src/main/res/values-cs/strings.xml | 2 +-
app/src/main/res/values-de/strings.xml | 5 +-
app/src/main/res/values-el/strings.xml | 13 +-
app/src/main/res/values-es/strings.xml | 2 +-
app/src/main/res/values-eu/strings.xml | 9 +-
app/src/main/res/values-fi/strings.xml | 9 +-
app/src/main/res/values-fr/strings.xml | 2 +-
app/src/main/res/values-he/strings.xml | 5 +-
app/src/main/res/values-hr/strings.xml | 33 +-
app/src/main/res/values-in/strings.xml | 3 +-
app/src/main/res/values-it/strings.xml | 37 +-
app/src/main/res/values-ja/strings.xml | 2 +-
app/src/main/res/values-nb-rNO/strings.xml | 3 +
app/src/main/res/values-pl/strings.xml | 4 +-
app/src/main/res/values-pt-rBR/strings.xml | 5 +-
app/src/main/res/values-pt/strings.xml | 5 +-
app/src/main/res/values-ru/strings.xml | 9 +-
app/src/main/res/values-sat/strings.xml | 1 +
app/src/main/res/values-sc/strings.xml | 5 +-
app/src/main/res/values-sk/strings.xml | 5 +-
app/src/main/res/values-so/strings.xml | 496 ++++++++++++++++++
app/src/main/res/values-sr/strings.xml | 2 +-
app/src/main/res/values-tr/strings.xml | 5 +-
app/src/main/res/values-zh-rTW/strings.xml | 47 +-
app/src/main/res/values/strings.xml | 4 +-
.../metadata/android/de/changelogs/820.txt | 1 +
.../metadata/android/de/changelogs/830.txt | 1 +
.../metadata/android/de/changelogs/850.txt | 1 +
.../metadata/android/de/changelogs/870.txt | 2 +
.../metadata/android/de/changelogs/952.txt | 7 +
.../metadata/android/de/changelogs/960.txt | 4 +
.../metadata/android/el/short_description.txt | 2 +-
.../metadata/android/eu/changelogs/960.txt | 4 +
.../metadata/android/fi/changelogs/957.txt | 10 +
.../metadata/android/id/changelogs/960.txt | 4 +
.../metadata/android/it/changelogs/960.txt | 4 +
.../metadata/android/it/full_description.txt | 2 +-
.../metadata/android/ko/changelogs/953.txt | 1 +
.../metadata/android/ko/changelogs/955.txt | 3 +
.../metadata/android/ko/changelogs/956.txt | 1 +
.../metadata/android/pt/changelogs/959.txt | 4 +-
.../metadata/android/pt/changelogs/960.txt | 4 +
.../metadata/android/pt/full_description.txt | 2 +-
.../metadata/android/pt/short_description.txt | 2 +-
.../metadata/android/so/full_description.txt | 1 +
.../metadata/android/so/short_description.txt | 1 +
.../metadata/android/tr/full_description.txt | 2 +-
.../android/zh_Hans/changelogs/840.txt | 24 +
.../android/zh_Hans/changelogs/957.txt | 10 +
.../android/zh_Hans/changelogs/958.txt | 15 +
.../android/zh_Hans/changelogs/959.txt | 3 +
.../android/zh_Hans/changelogs/960.txt | 4 +
.../android/zh_Hant/changelogs/63.txt | 8 +
.../android/zh_Hant/changelogs/64.txt | 8 +
.../android/zh_Hant/changelogs/71.txt | 10 +
.../android/zh_Hant/changelogs/730.txt | 2 +
.../android/zh_Hant/changelogs/750.txt | 22 +
.../android/zh_Hant/changelogs/955.txt | 3 +
.../android/zh_Hant/changelogs/956.txt | 1 +
.../android/zh_Hant/changelogs/957.txt | 10 +
.../android/zh_Hant/changelogs/958.txt | 15 +
.../android/zh_Hant/changelogs/959.txt | 3 +
.../android/zh_Hant/changelogs/960.txt | 4 +
.../android/zh_Hant/full_description.txt | 2 +-
69 files changed, 1114 insertions(+), 329 deletions(-)
create mode 100644 app/src/main/res/values-so/strings.xml
create mode 100644 fastlane/metadata/android/de/changelogs/820.txt
create mode 100644 fastlane/metadata/android/de/changelogs/830.txt
create mode 100644 fastlane/metadata/android/de/changelogs/850.txt
create mode 100644 fastlane/metadata/android/de/changelogs/870.txt
create mode 100644 fastlane/metadata/android/de/changelogs/952.txt
create mode 100644 fastlane/metadata/android/de/changelogs/960.txt
create mode 100644 fastlane/metadata/android/eu/changelogs/960.txt
create mode 100644 fastlane/metadata/android/fi/changelogs/957.txt
create mode 100644 fastlane/metadata/android/id/changelogs/960.txt
create mode 100644 fastlane/metadata/android/it/changelogs/960.txt
create mode 100644 fastlane/metadata/android/ko/changelogs/953.txt
create mode 100644 fastlane/metadata/android/ko/changelogs/955.txt
create mode 100644 fastlane/metadata/android/ko/changelogs/956.txt
create mode 100644 fastlane/metadata/android/pt/changelogs/960.txt
create mode 100644 fastlane/metadata/android/so/full_description.txt
create mode 100644 fastlane/metadata/android/so/short_description.txt
create mode 100644 fastlane/metadata/android/zh_Hans/changelogs/840.txt
create mode 100644 fastlane/metadata/android/zh_Hans/changelogs/957.txt
create mode 100644 fastlane/metadata/android/zh_Hans/changelogs/958.txt
create mode 100644 fastlane/metadata/android/zh_Hans/changelogs/959.txt
create mode 100644 fastlane/metadata/android/zh_Hans/changelogs/960.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/63.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/64.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/71.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/730.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/750.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/955.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/956.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/957.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/958.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/959.txt
create mode 100644 fastlane/metadata/android/zh_Hant/changelogs/960.txt
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 14bbb79a9..efd682d9e 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -47,13 +47,13 @@
رابط غير مدعوم
استخدام مشغل صوت خارجي
استخدام مشغل فيديو خارجي
- (إختبارية) إجراء التنزيلات من خلال استخدام بروكسي Tor لزيادة الخصوصية ( تشغيل الفيديو المباشر غير مدعوم حتى الأن ).
+ (إختبارية) إجراء التنزيلات من خلال استخدام بروكسي Tor لزيادة الخصوصية (تشغيل الفيديو المباشر غير مدعوم حتى الأن).
استخدام تور
%1$s مشاهدة
محتوى غير متوفر
- تعذرت عملية تحميل كافة صور المعاينة
+ تعذر تحميل كافة الصور المصغرة
خطأ
- تعذرت عملية تحليل الموقع
+ تعذر تحليل الموقع
تعذر فك تشفير توقيع رابط الفيديو
اضغط على \"بحث\" للبدء
\n
@@ -102,7 +102,7 @@
استئناف التشغيل
متابعة التشغيل بعد المقاطعات (مثل المكالمات الهاتفية)
إظهار التلميحات \"اضغط للتجاهل\"
- عرض تلميح عند الضغط على الخلفية أو الزر المنبثق في الفيديو \"التفاصيل:\"
+ عرض تلميح على صفحة التفاصيل عند استخدام وضع مشغل الخلفية أو النافذة المنبثقة
المشغل
السلوك
الوضع المنبثق
@@ -127,10 +127,10 @@
تنبيهات مشغل NewPipe للخلفية والنوافذ المنبثقة
[غير معروف]
لا يمكن تحليل الموقع بشكل كلي
- تعذرت عملية إعداد قائمة التنزيل
- البث المباشر غير مدعوم حتى الآن
+ تعذر إعداد قائمة التنزيل
+ البثوث المباشرة ليست مدعومةً بعد
تعذر الحصول على أي بث
- تعذرت عملية تحميل الصورة
+ تعذر تحميل الصورة
تعطل التطبيق / واجهة المستخدم
لا يمكن تشغيل هذا البث
حدث خطأ للمشغل غير قابل للاسترداد
@@ -223,11 +223,11 @@
اختر قناة
لم يتم الاشتراك في أي قناة بعد
الشائعة
- أفضل 50
+ أفضل ٥٠
جديد وساخن
حذف
التفاصيل
- الإعدادات الصوتية
+ إعدادات الصوت
تشغيل هنا
بدأ التشغيل في نافذة منبثقة
تحدي الكابتشا
@@ -282,19 +282,19 @@
إلغاء
إعادة التسمية
تمت عملية التصدير
- إكتَملَت عملية الإستيراد
- تنبيه : تعذرت عملية استيراد كافة الملفات.
+ تمَّت عملية الإستيراد
+ تنبيه: تعذر استيراد كافة الملفات.
سوف يظهر شيء هنا قريبا ;D
مشغل الفيديو
السؤال دائماً
- الحصول على المعلومات …
+ الحصول على المعلومات…
تحميل المحتوى المطلوب
إنشاء قائمة تشغيل جديدة
حذف قائمة التشغيل
إعادة تسمية
التسمية
إضافة إلى قائمة تشغيل
- هل تريد حذف قائمة التشغيل هذه ؟
+ هل تريد حذف قائمة التشغيل هذه؟
تم إنشاء قائمة التشغيل
تمت إضافتها إلى قائمة التشغيل
لا يمكن حذف قائمة التشغيل.
@@ -308,7 +308,7 @@
تم إفراغ مساحة ذاكرة التخزين المؤقتة الخاصة بالصور
الملف
لا يوجد مثل هذا المجلد
- لا يمكن أن يكون اسم الملف فارغا
+ لا يمكن أن يكون اسم الملف فارغًا
طرأ هناك خطأ: %1$s
ملف مضغوط ZIP غير صالح
إزالة الفواصل المرجعية
@@ -327,7 +327,7 @@
إزالة جميع بيانات صفحات الويب المخزنة مؤقتًا
تم محو ذاكرة التخزين المؤقت للبيانات الوصفية
وضع البث القادم تلقائيا في قائمة الإنتظار
- استمر في إنهاء قائمة انتظار التشغيل (الغير المتكررة) من خلال إلحاق بث ذي صلة
+ استمر في إنهاء قائمة انتظار التشغيل (الغير المتكررة) من خلال إلحاق التدفق المرتبط
إضافة صورة مصغرة إلى قائمة التشغيل
تفضيل قائمة التشغيل
تم تغيير الصورة المصغرة لقائمة التشغيل.
@@ -338,12 +338,12 @@
تقرير الأخطاء خارج دورة الحياة
فرض الإبلاغ عن استثناءات Rx غير القابلة للتسليم خارج دورة حياة الجزء أو النشاط بعد التخلص منها
محو سجل المشاهدة
- حذف محفوظات التدفقات التي تم تشغيلها ومواقف التشغيل
- حذف سجل المشاهدة بالكامل\?
+ حذف محفوظات البثوث التي تم تشغيلها ومواقف التشغيل
+ حذف سجل المشاهدة بالكامل؟
تم حذف سجل المشاهدة.
محو سجل البحث
يحذف تاريخ البحث عن الكلمات الرئيسية
- حذف سِجل البحث بالكامل\?
+ حذف سِجل البحث بالكامل؟
تم حذف سجل البحث.
المشغل الخارجي لا يدعم هذه الأنواع من الروابط
لا يوجد مثل هذا الملف/مصدر المحتوى
@@ -460,15 +460,15 @@
فشل الاتصال الآمن
تعذر العثور على الخادم
لا يمكن الاتصال بالخادم
- الخادم لايقوم بإرسال البيانات
+ الخادم لا يقوم بإرسال البيانات
الخادم لا يقبل التنزيل المتعدد، إعادة المحاولة مع @string/msg_threads = 1
غير موجود
فشلت المعالجة الاولية
توقف
- أقصى عدد للمحاولات
- الحد الأقصى لعدد محاولات قبل إلغاء التحميل
+ عدد المحاولات الأقصى
+ الحد الأقصى لعدد المحاولات قبل إلغاء التحميل
المقاطعة على الشبكات المقيسة
- مفيد عند التبديل إلى بيانات الجوال ، على الرغم من أنه لا يمكن تعليق بعض التنزيلات
+ مفيد عند التبديل إلى بيانات الجوال، ولكن لا يمكن تعليق بعض التنزيلات
إظهار التعليقات
عطّله لإخفاء التعليقات
تشغيل تلقائي
@@ -498,7 +498,7 @@
سيُطلب منك مكان حفظ كل تنزيل
سيطلب منك مكان حفظ كل تنزيل.
\nاختر SAF إذا كنت تريد التنزيل على بطاقة SD خارجية
- استخدام آمن
+ استخدام SAF
يسمح \"إطار الوصول إلى التخزين\" بالتنزيل على بطاقة SD خارجية.
\nبعض الأجهزة غير متوافقة
حذف مواقف التشغيل
@@ -535,16 +535,16 @@
يتم دعم عناوين URL HTTPS فقط
مثيل الخادم موجود بالفعل
محلي
- أضيف مؤخرا
- الأكثر إعجابا
+ أُضيف مؤخرًا
+ الأكثر إعجابًا
تم إنشاؤه-تلقائيًا (لم يتم العثور على برنامج تحميل)
استرد
لا يمكن استرداد هذا التنزيل
اختيار مثيل
ابحث عن مثيلات الخوادم التي تناسبك على %s
تنظيف تاريخ التحميل
- حذف الملفات التي تم تنزيلها
- التنزيلات %1$d المحذوفة
+ حذف الملفات المحملة
+ تم حذف %1$d من التحميلات
إعطاء إذن لعرضه على التطبيقات الأخرى
لغة التطبيق
النظام الافتراضي
@@ -572,14 +572,14 @@
\nلذا فإن الاختيار يتلخص في ما تفضله: السرعة أو المعلومات الدقيقة.
تعطيل الوضع السريع
تمكين الوضع السريع
- متوفر في بعض الخدمات ، وعادة ما يكون أسرع بكثير ولكن قد يُرجع كمية محدودة من العناصر وغالبًا معلومات غير مكتملة (على سبيل المثال ، بدون مدة أو نوع عنصر أو حالة مباشرة).
+ متوفر في بعض الخدمات، وعادةً ما يكون أسرع بكثير ولكن قد يُرجع كمية محدودة من العناصر وغالبًا ما تكون معلومات غير مكتملة (مثلًا بدون مدة أو نوع عنصر أو حالة مباشرة).
جلب من تغذية مخصصة عندما تكون متاحة
- تحديث دائما
+ تحديث دائمًا
الوقت بعد التحديث الأخير قبل اعتبار الاشتراك قديمًا — %s
عتبة تحديث التغذية
تغذية
جديد
- هل تريد حذف هذه المجموعة\?
+ هل تريد حذف هذه المجموعة؟
اسم المجموعة فارغ
- %d تحديد
@@ -637,9 +637,9 @@
\nقم بتشغيل \"%1$s\" في الإعدادات إذا كنت تريد رؤيته.
نعم، ومقاطع الفيديو التي تمت مشاهدتها جزئيًا
ستتم إزالة مقاطع الفيديو التي تمت مشاهدتها قبل وبعد إضافتها إلى قائمة التشغيل.
-\nهل أنت واثق؟ هذا لا يمكن التراجع عنها!
+\nهل أنت واثق؟ لا يمكن التراجع عن هذا!
إزالة مقاطع الفيديو التي تمت مشاهدتها؟
- إزالة ماتمت مشاهدته
+ إزالة ما تمت مشاهدته
ستكون النصوص الأصلية من الخدمات مرئية في عناصر البث
عرض الوقت الأصلي على العناصر
شغيل \"وضع تقييد المحتوى\" في يوتيوب
@@ -649,7 +649,7 @@
صفحة قائمة التشغيل
إظهار الاشتراكات غير المجمعة فقط
لا توجد إشارات مرجعية لقائمة التشغيل حتى الآن
- حدد قائمة تشغيل
+ اختر قائمة تشغيل
يرجى التحقق مما إذا كانت هناك مشكلة في مناقشة تعطلك بالفعل. عند إنشاء تذاكر مكررة ، ستأخذ وقتًا منا يمكن أن نقضيه في إصلاح الخطأ الفعلي.
تقرير على جيثب
نسخ تقرير منسق
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 8076d279f..be4aa932e 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
@@ -5,7 +5,7 @@
%1$s 次观看
发布于 %1$s
在浏览器中打开
- 在悬浮窗模式下打开
+ 在悬浮窗中打开
您是不是要找:%1$s?
找不到串流播放器 (您可以安装 VLC 进行播放)。
下载串流文件
@@ -18,16 +18,16 @@
分享给...
选择浏览器
视频下载路径
- 已下载的视频存储在这里
+ 已下载的视频将存储于此
请选择下载视频的保存位置
- 已下载的音频存储在这里
+ 已下载的音频将存储于此
选择下载音频的储存位置
自动播放
使用Kodi播放
主题
浅色
- 暗黑
- 黑色
+ 深色
+ 暗黑
下载
不支持的 URL
外观
@@ -38,16 +38,17 @@
稍后
网络错误
- - %s 视频
+ - %s 部视频
+
禁用
后台播放
过滤器
刷新
- 搜索建议
+ 显示搜索建议
订阅
已订阅
- 观看历史
+ 观看记录
播放器
历史记录与缓存
播放列表
@@ -57,11 +58,11 @@
仅一次
添加至
文件
- 加载缩略图
- 清除观看记录
+ 加载封面
+ 清空观看记录
无
- 最小化后台播放器
- 最小化悬浮窗播放器
+ 最小化至后台播放
+ 最小化至悬浮窗播放
频道
播放列表
取消订阅
@@ -72,22 +73,22 @@
发布新版本时,通知我升级应用
网格
NewPipe可更新!
- 服务器不接受 接收 multi-threaded 下载, 以 @string/msg_threads = 1 重试
- 自动播放
- 清除数据
+ 服务器不接受多线程下载, 使用 @string/msg_threads = 1 重试
+ 自动恢复上次播放
+ 清空数据
观看记录已删除
喜欢
不喜欢
使用Tor
(实验性)通过 Tor 强制播放来增强隐私(暂不支持串流视频)。
- 报告错误
- 用户报告
+ 反馈错误
+ 用户反馈
无法创建下载目录\"%1$s\"
已成功创建下载目录「%1$s」
视频
音频
重试
- 存储访问权限已被拒绝
+ 访问存储权限已被拒绝
- %s 次观看
@@ -113,7 +114,7 @@
设置
关于
第三方许可
- © %1$s :作者 %2$s (使用 %3$s )
+ © %1$s :开发者 %2$s (使用 %3$s 许可证)
无法加载许可证
打开网站
关于
@@ -121,34 +122,34 @@
许可证
下载
文件名中允许的字符
- 无效字符将会被替换为此
+ 无效字符将会被替换为该字符
字母和数字
- 最特殊字符
+ 特殊字符
没有结果
- 没有订阅者
+ 无订阅者
- %s 位订阅者
- 没有视频
+ 无视频
拖动以重新排序
- 创建
- 仅删除一个
- 全部删除
- 解除
+ 新建
+ 仅删除一条
+ 删除全部
+ 退出
重命名
未安装可播放此文件的应用程序
- 已删除1个项目。
- 哪些标签需要在主页上展示
+ 已删除一项。
+ 自定义主页显示的标签页
列表视图模式
已完成
等待中…
已暂停
- 排队中
+ 已加入队列
加入队列
操作已被系统拒绝
下载失败
下载完成
- %s 次下载已完成
+ %s 个下载已完成
没有评论
切换服务,当前选择:
找不到串流播放器。您想安装 VLC 吗?
@@ -158,20 +159,21 @@
音频下载文件夹
从其他应用调用 NewPipe 时播放视频
默认分辨率
- 找不到Kore。是否安装?
- 显示“用Kodi播放”选项
+ 找不到Kore
+\n是否安装Kore?
+ 显示“使用Kodi播放”选项
显示“通过Kodi media center播放视频”的选项
音频
默认音频格式
- 显示“下一个”和“相似”视频
+ 显示“接下来”和“类似视频”
视频和音频
- 在后台播放
+ 后台播放
内容
- 展示年龄限制的内容
+ 显示年龄限制的内容
直播
下载
下载
- 错误报告
+ 反馈错误
错误
无法加载所有缩略图
无法解密视频的 URL 签名
@@ -182,46 +184,46 @@
暂时不支持观看直播
无法获得任何串流
无法加载图像
- App UI 崩溃
- 抱歉,这本不应该发生。
- 使用电子邮件报告错误
+ App/UI 崩溃
+ 抱歉,这本不该发生。
+ 使用电子邮件反馈错误
抱歉,发生了一些错误。
- 报告
+ 反馈
信息:
发生了什么:
详情:\\n请求:\\n内容语言:\\n内容国家:\\n客户端语言:\\n服务:\\nGMT时间:\\n包名:\\n版本:\\n操作系统版本:
- 您的附近说明(请用英文):
+ 您的附加说明(请用英文):
详细信息:
视频预览缩略图
- 播放视频,时长:
+ 播放视频,时长:
视频上传者的头像缩略图
- 字节
+ 十亿
错误的 URL 或未联网
- NewPipe下载中
+ NewPipe正在下载文件
请稍后在设置中设定下载目录
- 用悬浮窗模式
-\n需要此权限
+ 使用悬浮窗模式
+\n需要该权限
reCAPTCHA验证
- 请求的新的CAPTCHA验证
+ 已请求新的CAPTCHA验证
NewPipe 悬浮窗模式
在悬浮窗中播放
- 默认悬浮窗分辨率
+ 默认分辨率(悬浮窗模式)
使用更高的分辨率
仅某些设备支持播放2K / 4K视频
清除
记住悬浮窗属性
- 记住最后一次使用悬浮窗的大小和位置
+ 记住上一次使用悬浮窗的大小和位置
悬浮窗
调整大小
- 隐藏部分没有音频的分辨率
- 播放器手势控制
+ 在部分分辨率下将没有音频
+ 手势控制播放器
允许使用手势控制亮度和音量
- 显示搜索建议
+ 搜索时显示搜索建议
最佳分辨率
- 开源小巧的Android媒体播放器。
+ 开源且小巧的Android媒体播放器。
在GitHub上查看
NewPipe开源许可证
- 你是否有想:翻译、设计、清理或重构代码更改 ——我们始终欢迎你来贡献!
+ 你是否想过要翻译、设计、清理或重构代码 ——我们始终欢迎你来贡献!
阅读许可证
贡献
替换字符
@@ -231,31 +233,31 @@
主页
订阅
最新
- 恢复前台焦点
- 中断后继续播放(例如突然来电后)
- 搜索历史记录
- 在本地存储搜索查询记录
- 记录已观看视频
- 历史
+ 自动恢复播放
+ 在播放被打断(例如突然来电)后恢复播放
+ 搜索记录
+ 存储本地搜索记录
+ 保留观看记录
+ 历史记录
已搜索
已观看
历史记录功能已关闭
- 历史
- 历史记录为空
- 清除历史记录
+ 历史记录
+ 尚无历史记录
+ 历史记录已清空
NewPipe 通知
- NewPipe 后台播放和悬浮窗播放的通知
+ NewPipe 在后台播放和悬浮窗播放时在通知栏中显示通知
默认视频格式
行为
空空如也...
- 0次观看
+ 无人观看过
项目已删除
- 是否要从搜索历史记录中删除此项目?
- 显示在主页面内容
+ 是否删除此条搜索记录?
+ 主页面的显示内容
空白页
『时下流行』页-自定义
订阅页
- Feed 页面
+ Feed 页
频道页
选择一个频道
尚未订阅频道
@@ -265,16 +267,16 @@
前50
最新与热门
显示 \"长按添加\" 说明
- 在视频详情页中,按下背景播放或悬浮窗播放按钮时显示提示
+ 在视频详情页中,长按背景播放或悬浮窗播放按钮时显示提示
已加入后台播放播放列表
已加入悬浮窗播放列表
无法播放此串流
- 发生无法恢复播放器错误
- 恢复播放器错误
+ 发生无法处理的播放器错误
+ 播放器错误 自动恢复
移除
详情
音频设置
- 长按队列
+ 长按加入播放列表
[未知]
开始在此处开始播放
开始后台播放
@@ -282,11 +284,11 @@
捐赠
NewPipe是由志愿者开发的,他们利用自己的空闲时间为您带来最佳的用户体验。在开发者享受一杯咖啡的时候,回报他们,帮助他们让NewPipe变得更好。
反馈
- 网站
+ 官网
请访问 NewPipe 网站了解更多信息和讯息。
- 默认国家/地区
+ 视频默认国家/地区
切换方向
- 切换到背景播放
+ 切换到后台播放
切换到悬浮窗播放
切换到主页面
服务
@@ -303,7 +305,7 @@
正在加载请求的内容
导入数据库
导出数据库
- 覆盖您的当前播放历史、订阅、播放列表和(可选)设置
+ 覆盖您的当前播放历史、订阅、播放列表和设置(可选)
导出历史记录、订阅、播放列表和设置
导出成功
导入成功
@@ -311,94 +313,95 @@
警告:无法导入所有文件。
此操作会覆盖当前设置 。
显示信息
- 书签
- 确定要从观看历史记录中删除该项吗?
- 是否确实要从历史记录中删除所有项目?
- 最后播放
- 播放最多
- 总是询问
+ 收藏
+ 是否删除该条搜索记录吗?
+ 是否确定删除所有历史记录?
+ 最近观看
+ 最多观看
+ 每次询问
新建播放列表
删除
重命名
名称
添加到播放列表
- 设为播放列表缩略图
+ 设为播放列表封面
收藏播放列表
删除收藏
- 删除此播放列表?
+ 是否删除此播放列表?
新建播放列表成功
加入播放列表成功
- 播放列表缩略图更改成功。
+ 播放列表封面更改成功。
无法删除播放列表
无字幕
适应屏幕
填充屏幕
- 缩放
+ 缩放画面
敬请期待
调试
自动生成
『内存泄漏监视』可能导致应用在『核心转储』时无响应
报告『提前结束Android生命周期』错误
强制报告处理后的未送达的Activity或Fragment生命周期之外的Rx异常
- 使用快速不精确搜索
- 粗略定位播放:允许播放器以略低的精确度为代价换取更快的定位速度。此功能不适用于每隔5、15或25秒定位.
- 自动播放下一个
- 当播放完非循环列表中的最后一个视频时,自动加入一个相关视频到播放列表
- 没有此文件夹
+ 使用快速寻址(不精确)
+ 快速寻址定位允许播放器以较低精确度为代价换取更快的寻址定位速度。此功能不适用于以5、15或25秒为隔的寻址定位.
+ 自动将“接下来”视频加入播放列表
+ 播放完(非循环)列表中的最后一个视频后,自动将一个相关视频添加到当前播放列表
+ 没有该文件夹
无相似文件/内容源
- 该文件不存在 或 缺少读写该文件的权限
+ 该文件不存在 或 缺少读写文件权限
文件名不能为空
发生错误: %1$s
导入/导出
导入
- 从...导入
+ 导入自…
导出到...
正在导入…
正在导出…
导入文件
- 以前的导出
+ 之前的导出
无法导入订阅
无法导出订阅
从 Google takeout 导入YouTube 订阅:
\n
-\n1. 转到这个URL:%1$s
-\n2. 登录谷歌账户
-\n3. 点击“所有包含的数据”,然后点击“取消选择全部”,然后只选择“订阅”,然后点击“确定”
-\n4. 点击“下一步”然后点击“创建导出”
-\n5. 在“下载”按钮出现后,点击它
-\n6. 从下载的takeout压缩包提取.json文件 (通常能够位于\"YouTube and YouTube Music/subscriptions/subscriptions.json\")并在此导入它。
- 通过输入网址或你的 ID 导入 SoundCloud 配置文件:
-\n
-\n1. 在浏览器中启用\"电脑模式\"(该网站不适用于移动设备)
-\n2. 转到此 URL: %1$s
-\n3. 登录(如果需要)
-\n4. 复制重定向的配置文件下载地址。
- 你的 ID:soundcloud.com/[你的ID]
+\n1. 打开这个网页:%1$s;
+\n2. 登录谷歌账号;
+\n3.选择“YouTube 和 YouTube Music” ,然后点击“已包含所有YouTube数据”,然后取消全选,仅选择“订阅内容”,然后点击“确定”
+\n4. 点击“下一步”,可以保持默认,然后点击“创建导出作业”;
+\n5. 通过所指定的方式,下载takeout数据;
+\n6. 从下载的takeout压缩包提取.json文件 (通常位于\"YouTube and YouTube Music/subscriptions/subscriptions.json\")然后在此导入。
+ 通过输入网址或你的 ID 导入 SoundCloud 配置文件:
+\n
+\n1. 在浏览器中启用\"电脑模式\"(该网站未适配移动设备);
+\n2. 打开该网站: %1$s;
+\n3. 登录(如果需要);
+\n4. 复制得到的配置文件下载地址。
+ 你的 ID:soundcloud.com/[你的ID]
该操作消耗大量流量,
+\n
\n你想继续吗?
- 关闭可防止加载缩略图,节已省数据和内存使用。(若现在更改会清除内存和储存中缓存)
+ 关闭可禁止加载封面,节省流量和内存使用。(现在更改该选项将清除内存与储存中全部缓存)
清空图像缓存成功
清空已缓存元数据
清空已缓存的网页数据
清空元数据缓存成功
- 播放速度
+ 播放速度控制
节奏
音调
- 解除挂钩(可能导致失真)
+ 解除音视挂钩(可能导致失真)
首选“打开”操作
- 打开内容时默认操作: = %s
- 无可下载的串流内容
+ 打开内容时默认操作:- %s
+ 无可下载的串流
字幕
- 修改播放器字幕比例和背景样式。需要重新启动应用程序才能生效。
- 删除串流的播放历史和播放位置
- 删除全部观看历史记录?
- 清除搜索历史记录
- 清除搜索关键词的历史记录
- 是否删除全部搜索历史记录?
- 搜索历史记录已删除。
+ 修改播放器字幕比例和背景样式,重启应用生效。
+ 删除串流播放记录和播放位置记录
+ 删除全部观看记录?
+ 清空搜索记录
+ 清空搜索记录关键词
+ 是否删除全部搜索记录?
+ 搜索记录已删除。
NewPipe 是版权自由软件:您可以随时使用、研究共享和改进它。您可以根据自由软件基金会发布的 GNU 通用公共许可证GPLv3或(由您选择的)任何更高版本的许可证重新分发或修改该许可证。
- 是否要同时导入设置?
- NewPipe的隐私政策
+ 是否要导入设置?
+ NewPipe 隐私政策
NewPipe 项目非常重视您的隐私。因此,未经您的同意,应用程序不会收集任何数据。
\nNewPipe 的隐私政策详细解释了在发送崩溃报告时发送和存储的数据。
阅读隐私政策
@@ -407,25 +410,25 @@
接受
拒绝
无限制
- 使用移动数据时限制分辨率
+ 使用移动数据播放时降低分辨率
退出应用时最小化
从主播放器切换到其他应用时的操作 - %s
静音时快进
- 滑块[比例尺]
- 重 置
+ 比例调整
+ 重置
曲目
用户
选择标签
- 音量手势控制
+ 手势控制音量
使用手势控制播放器的音量
- 亮度手势控制
+ 手势控制亮度
使用手势控制播放器的亮度
视频默认语言
应用更新通知
NewPipe有新版本的通知
外置存储不可用
- 无法下载到外部 SD 卡。重置下载文件夹位置?
- 读取已保存标签时发生错误,因此使用者默认标签
+ 无法下载到外部 SD 卡,修改下载文件夹位置?
+ 读取已保存标签时发生错误,因此使用默认标签
恢复默认
是否恢复默认值?
选择
@@ -434,52 +437,52 @@
自动
切换视图
点击下载
- 后期处理
+ 处理中
生成唯一名称
覆盖
- 正在使用此名称进行下载
+ 已存在一进行中并使用该名称的下载任务
显示错误
代码
无法创建目标文件夹
无法创建文件
权限被系统拒绝
- 安全连接失败
+ 建立安全连接失败
找不到服务器
- 无法连接到服务器
+ 无法连接至服务器
服务器未发送数据
找不到 NOT FOUND
后期处理失败
停止
最大重试次数
取消下载前的最多重试次数
- 在切换到移动流量网络时中断播放
- 切换至移动数据时可能有用,尽管一些下载无法被暂停
+ 切换到移动流量网络后中断播放
+ 切换至移动数据时可能有用,虽然部分下载无法被暂停
事件
- 近期大会
+ 会议大会
显示评论
- 禁用,以停止显示评论
+ 是否隐藏评论
无法加载评论
关闭
恢复播放
- 恢复上次播放位置
- 列表中的位置
- 在列表中,显示视频最后一次播放时的播放位置
+ 自动定位到上次播放时位置
+ 显示最后一次播放位置
+ 在列表中,使用底端进度条显示某一视频上次播放时的播放位置
已删除播放位置记录。
- 文件被已移动或删除
+ 文件已被移动或被删除
该名称的文件已经存在
- 命名冲突,已存在具有此名称文件
+ 命名冲突,已存在具有该名称的文件
无法覆盖文件
有此名称的已暂停下载
NewPipe 在处理文件时被关闭
设备上没有剩余储存空间
进度丢失,文件已被删除
连接超时
- 是否要清除下载历史记录或删除所有下载的文件?
- 最大下载队列
- 同时只允许一个下载进行
+ 是否清空下载记录或删除所有下载的文件?
+ 限制下载并发数
+ 同一时间内只允许进行一个下载任务
开始下载
暂停下载
- 询问下载位置
+ 总是询问下载位置
系统将询问您将每次下载的保存位置
系统将询问您将每次下载的保存位置。
\n(如果要下载到外部 SD 卡,请选择 SAF)
@@ -488,8 +491,8 @@
\n一些设备不兼容SAF
删除播放位置记录
删除所有播放位置记录
- 删除所有播放位置记录?
- 更改下载目录让内容生效
+ 是否删除全部播放位置记录?
+ 更改下载目录以生效
『时下流行』页-默认
没有人在观看
@@ -497,28 +500,28 @@
没有人在听
- - %s 人在听
+ - %s 位听众
- 重新启动应用后,语言将更改。
+ 语言更改将在重启应用后生效。
PeerTube 服务器
- 设置自己喜欢的PeerTube服务器
- 查找最适合你的服务器%s
+ 设置自定义PeerTube服务器
+ 查找你需要的服务器%s
添加服务器
输入服务器网址(URL)
无法验证服务器
- 仅支持 HTTPS和URL
+ 仅支持 HTTPS URL
该服务器已存在
本地
最近添加
- 最喜欢的
- 自动生成的(未找到上传者)
+ 最受欢迎
+ 自动生成的(找不到上传者)
正在恢复
无法恢复此下载
选择一个服务器
- 快进 / 快退的单位时间
- 清除下载历史记录
- 删除已下载的文件
+ 快进 / 快退的寻址定位时间间隔
+ 清空下载记录
+ 删除下载文件
已删除 %1$d 下载
授予在其他应用上层显示的权限
Newpipe应用语言
@@ -529,7 +532,7 @@
- %d秒
- 由于ExoPlayer的限制,搜寻间隔设置为%d秒
+ 由于ExoPlayer的限制,寻址间隔置为%d秒
静音
取消静音
帮助
@@ -548,37 +551,38 @@
正在加载feed…
正在处理feed…
选择订阅
- 未选中订阅
+ 未选中任何订阅
- 已选中%d
- 组名为空
+ 清空组名
您要删除该组吗?
新建
- 订阅
+ Feed
Feed更新阈值
- 上次更新后,订阅被视为过时的时间-%s
+ 上次更新后,订阅被视为过期的时间-%s
始终更新
- 可用时从专用feed获取
- 在某些服务中可用,通常速度要快得多,但可能返回的条目数量有限,而且信息通常不完整(例如,没有持续时间,条目类型,没有实时状态)。
+ 可用时使用专用feed获取
+ 仅在某些服务中可用,通常速度更快,但返回的视频数量可能有限,而且信息通常不完整(如,无视频持续时间、类型与没有直播状态)。
启用快速模式
禁用快速模式
- 您是否认为Feed加载太慢?如果是这样,请尝试启用快速加载(您可以在设置中更改它,也可以按下面的按钮更改它)。
+ 您是否觉得Feed加载太慢?如果是这样,请尝试启用快速加载(可在设置中修改,也可使用下面的按钮修改)。
\n
\nNewPipe提供两种feed加载策略:
-\n•获取整个订阅频道,这很慢但是很是完整。
-\n•使用专用的服务端点,这样会比较快但通常不完整。
+\n•获取整个订阅频道,很慢但是很完整。
+\n•使用专用的服务端点,比较快但通常不完整。
\n
-\n两者之间的区别在于,后者通常缺少一些信息,例如条目的持续时间或类型(无法区分直播视频和普通视频),并且可能返回更少的条目。
+\n两者之间的区别在于,后者通常缺少一些信息,如视频的持续时间或类型(无法区分直播视频和普通视频),并且可能返回更少的视频条目。
\n
-\nYouTube是一个通过其RSS feed提供这种快速方法的服务示例。
+\nYouTube是一个通过其RSS feed提供此快速方法的服务示例。
\n
-\n因此,选择哪种方式取决于您更看重什么:是速度还是精确的信息。
+\n因此,选择哪种方式取决于您的偏好:
+\n加载速度还是信息准确。
NewPipe尚不支持该内容。
\n
\n
\n也许未来版本会支持它。
- ∞ 视频
+ ∞ 部视频
100+部视频
艺术家
专辑
@@ -590,54 +594,57 @@
由%s创建
频道的头像缩略图
是的,包括没看完的视频
- 已经看过且在之后被加入播放列表的视频将被移除。
-\n您确定吗?这不能被撤消!
+ 已经看过且在之后被加入播放列表的视频将被删除。
+\n您确定吗?操作不能被撤消!
移除看过的视频?
移除看过的视频
- 来自服务的原始文本将在流项目中可见
- 在项目上显示原始时间
+ 来自服务的原始文本将在串流项目中可见
+ 显示原始时间
打开YouTube\"受限模式\"
仅显示未分组订阅
播放列表页
- 尚无播放列表书签
+ 尚无收藏
选择播放列表
请检查您的问题是否已经存在。创建重复票证时,您需要从我们那里花些时间来让我们修复真正的bug。
在GitHub上反馈
- 复制格式报告
+ 复制已整理的报告
显示结果为:%s
- 永不
+ 从不
仅在Wi-Fi下
- 自动开始回放 — %s
- 播放队列
- 无法识别该url。用另一个应用程序打开它\?
- 自动排队
- 来自活跃播放器的队列将被替换
- 从一个播放器切换到另一个播放器后,你的队列可能会被替换
- 清除队列之前请求确认
+ 视频开始播放后,自动定位到上次播放时的位置 — %s
+ 播放列表
+ 无法识别该URL,用其他应用打开\?
+ 自动加入播放列表
+ 活跃播放列表将被替换
+ 从一个播放器切换到另一个播放器后,你的播放列表可能会被替换
+ 清空播放列表前再次确认
无
缓冲
随机播放
重复
- 您最多可以选择三个操作显示在紧凑通知中!
- 点击来编辑下面的每个通知动作。通过使用右边的复选框,选择其中最多三个显示在紧凑通知中。
+ 您最多可以选择显示在紧凑通知中的三个操作选项!
+ 点击编辑下面的每个通知动作。使用右方的复选框,选择显示在紧凑通知中的动作,最多三个。
第五操作按钮
第四操作按钮
第三操作按钮
第二操作按钮
- 首选操作按钮
- 将通知中显示的视频缩略图长宽比从16:9缩放到1:1(可能会导致失真)
- 缩放缩略图到1:1的长宽比
+ 第一操作按钮
+ 将通知中视频缩略图长宽比从16:9强制缩放到1:1(可能导致失真)
+ 强制缩放缩略图至1:1比例
通知
显示内存泄漏
已加入队列
加入队列
- 清理你在解决验证码时 NewPipe 存储的cookies
- reCAPTCHA cookies 已被清理
- 清理 reCAPTCHA cookies
- YouTube提供了一个“受限模式”,会隐藏潜在的成人内容
+ 清空本地存储的reCAPTCHA验证码相关cookies
+ reCAPTCHA cookies 已被清空
+ 清空 reCAPTCHA cookies
+ YouTube提供了“受限模式”,将隐藏潜在的成人内容
展示可能不适合儿童观看的内容,因为有年龄限制(比如18岁以上)
- 让安卓系统根据视频缩略图的主色彩自定义通知的颜色(注意,该特性并非在所有设备上都可用)
- 对通知着色
- 在锁定屏幕上显示缩略图为背景和内部通知
+ 让Android系统根据视频缩略图的主色彩自主决定通知颜色(注意,该特性仅在部分设备上可用)
+ 自动着色通知
+ 锁屏背景和通知中使用缩略图
显示缩略图
+ 视频哈希值计算通知
+ 视频正在哈希值计算时显示的通知
+ 计算哈希值中
\ No newline at end of file
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 812a1a815..6a8f4c212 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -1,6 +1,7 @@
- Націсніце \"Пошук\", каб пачаць
+ Націсніце \"Пошук\", каб пачаць
+\n
%1$s праглядаў
Апублікавана %1$s
Патокавы плэер не знойдзены. Усталяваць VLC?
@@ -36,11 +37,11 @@
У акне
Дадаць да
Каталог для спампаванага відэа
- Папка для захоўвання загружаных відэа
- Увядзіце шлях да папкі для загрузкі відэа
+ Папка для спампаванга відэа
+ Увядзіце шлях да папкі для спампавання відэа
Тэчка загрузкі аўдыё
- Сюды захоўваецца загружанае аўдыё
- Увядзіце шлях да папкі для загрузкі аўдыё
+ Папка для спампаванага аўдыя
+ Увядзіце шлях да папкі для спампавання аўдыя
Аўтапрайграванне
Прайграваць відэа пры выкліку NewPipe з іншага прыкладання
Разрознянне па змаўчанні
@@ -61,7 +62,7 @@
Аднавіць акно
Запамінаць памер і становішча ўсплываючага акна
Хуткі пошук пазіцыі
- Недакладны пошук дазваляе плэеру шукаць пазіцыю хутчэй, але менш дакладна
+ Недакладны пошук дазваляе плэеру шукаць пазіцыю хутчэй, але менш дакладна. Не працуе для перамоткі на 5, 15 ці 25 секунд
Загружаць мініяцюры
Адключыце, каб не загружаць мініяцюры і зэканоміць трафік і памяць. Змена налады ачысьціць кэш малюнкаў
Кэш малюнкаў ачышчаны
@@ -556,4 +557,7 @@
Паўтор
Кнопка пятага дзеяння
Паведамленні
+ Афарбоўваць апавяшчэнне асноўным колерам мініяцюры. Падтрымваецца не ўсімі прыладамі
+ У кампактным апавяшчэнні дасяжна не больш за тры дзеянні!
+ Дзеянні можна змяніць, націснуўшы на іх. Адзначце не больш за трох для адлюстравання ў кампактным апавяшчэнні
\ No newline at end of file
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 73ec90c82..7a8611d1c 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -1,6 +1,7 @@
- Докоснете търсачката, за да започнете
+ Докоснете търсачката, за да започнете
+\n
%1$s гледания
Публикувано на %1$s
Не е намерен стрийм плейър. Желаете ли да инсталирате VLC?
@@ -12,12 +13,12 @@
Изтегли
Търси
Настройки
- Може би имахте в предвид: %1$s\?
+ Може би имахте предвид „%1$s“\?
Сподели с
Избери браузър
ориентация
Използвай външен видео плейър
- Премахва аудио при НЯКОИ резолюции
+ Премахва аудиото при някои резолюции
Използвай външен аудио плейър
NewPipe в прозорец
Абониране
@@ -34,13 +35,13 @@
Въведете път за съхранение на изтеглените видеота
Директория за изтегляне на аудио
Папка за съхранение на изтеглено аудио
- Въведете път за съхранение на изтеглено аудио
+ Въведете папка за изтегляния на аудио файлове
Автоматично възпроизвеждане
Въпроизвежда видео, когато NewPipe е повикан от друго приложение
Резолюция по подразбиране
Резолюция по подразбиране на прозореца
Покажи по-високи резолюции
- Само някои устройства поддържат възпроизвеждане на 2K/4K клипове
+ Само някои устройства могат да възпроизвеждат 2K/4K видео
Въпроизвеждане с Kodi
Приложението „Kore“ не е намерено. Желаете ли да го инсталирате?
Покажи „Възпроизвеждане с Kodi“
@@ -408,4 +409,16 @@
Продължи възпроизвеждане
Изтрии данни
Показване на резултати за: %s
+ Няма коментари
+
+ - %s слушател
+ - %s слушатели
+
+ Няма слушатели
+
+ - %s зрител
+ - %s зрители
+
+ Няма зрители
+ Изтрива всички позиции на възпроизвеждане
\ No newline at end of file
diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml
index 3fde293d8..a33036846 100644
--- a/app/src/main/res/values-bn/strings.xml
+++ b/app/src/main/res/values-bn/strings.xml
@@ -437,7 +437,7 @@
ফাইল আমদানি করো
রপ্তানি করো
আমদানি করো
- বুকমার্ক প্লেলিস্ট
+ প্লেলিস্ট বুকমার্ক করো
তথ্য আনা হচ্ছে…
পপআপ প্লেয়ার
পটভূমি প্লেয়ার
@@ -476,4 +476,17 @@
সিস্টেম ডিফল্ট
সাফ ব্যবহার করো
বিজ্ঞপ্তি রঙিন করো
+
+ - %d দিন
+ - %d দিন
+
+
+ - %d ঘন্টা
+ - %d ঘন্টা
+
+
+ - %d মিনিট
+ - %d মিনিট
+
+ সর্বোচ্চ চেয্টা
\ No newline at end of file
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index fbfe8eeda..05e4d955c 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -657,6 +657,6 @@
Zobrazit obsah, i když je patrně nevhodný pro děti, protože odkazuje na věkové omezení (např. 18+)
Nechte Android přizpůsobit barvu oznámení podle hlavní barvy v miniatuře (není k dispozici na všech zařízeních)
Barevné notifikace
- Zobrazit miniaturu na zamknuté obrazovce jako pozadí a v oznámeních
+ Použít miniaturu pro pozadí zamknuté obrazovky a oznámení
Zobrazit miniaturu
\ No newline at end of file
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 121f74ee1..2ec4579f6 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -647,6 +647,9 @@
In Wiedergabe einreihen
Android kann die Farbe der Benachrichtigung entsprechend der Hauptfarbe in der Miniaturansicht anpassen (beachte, dass dies nicht auf allen Geräten verfügbar ist)
Benachrichtigung farblich anpassen
- Vorschaubild auf dem Sperrbildschirm als Hintergrund und innerhalb von Benachrichtigungen anzeigen
+ Vorschaubild für Sperrbildschirmhintergrund und Benachrichtigungen verwenden
Vorschaubild anzeigen
+ Hash wird berechnet
+ Benachrichtigungen für den Video-hashing Fortschritt
+ Video Hash Benachrichtigung
\ No newline at end of file
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 5410adf55..c7b189318 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -108,7 +108,7 @@
Προεπιλεγμένη ανάλυση αναδυόμενου παραθύρου
Εμφάνιση υψηλότερων αναλύσεων
Προεπιλεγμένη μορφή βίντεο
- Ενθύμιση τις ιδιότητες του αναδυόμενου παραθύρου
+ Ενθύμιση ιδιοτήτωναναδυόμενου παραθύρου
Ενθύμιση του τελευταίου μεγέθους και θέσης του παραθύρου
Χρήση γρήγορης ανακριβούς αναζήτησης
Η μην ακριβής αναζήτηση επιτρέπει στην εφαρμογή να αναζητεί θέσεις στο βίντεο γρηγορότερα με μειωμένη ακρίβεια. Δε λειτουργεί για διαστήματα των 5, 15 ή 25 δευτερολέπτων.
@@ -168,8 +168,8 @@
Αλλαγή σε Κύριο
Εισαγωγή βάσης δεδομένων
Εξαγωγή βάσης δεδομένων
- Παρακάμπτει το τρέχον ιστορικό και τις εγγραφές σας
- Εξαγωγή ιστορικού, εγγραφών και λιστών αναπαραγωγής
+ Παρακάμπτει το τρέχον ιστορικό, εγγραφές, λίστες αναπαραγωγής και (προαιρετικά) σας
+ Εξαγωγή ιστορικού, εγγραφών, λιστών αναπαραγωγής και
Εκκαθάριση ιστορικού προβολής
Διαγράφει το ιστορικό των αναπαραχθέντων ροών και των θέσεων αναπαραγωγής
Διαγραφή ολόκληρου του ιστορικού προβολής;
@@ -592,7 +592,7 @@
- %d επιλέχθηκαν
Δεν φορτώθηκε: %d
- Οι ομάδες του καναλιού
+ Ομάδες καναλιών
- %d ημέρα
- %d ημέρες
@@ -645,6 +645,9 @@
PeerTube instances
Χρωματισμός ειδοποιήσεων
Επιτρέπει στο Android να τροποποιήσει το χρώμα της ειδοποίησης, σύμφωνα με το κύριο χρώμα του εικονιδίου (δεν διατίθεται σε όλες τις συσκευές)
- Εμφάνιση των εικονιδίων στην οθόνη κλειδώματος, ως φόντο και στις ειδοποιήσεις
+ Χρήση των εικονιδίων στην οθόνη κλειδώματοςως φόντο και στις ειδοποιήσεις
Εμφάνιση
+ Υπολογισμός hash
+ Ειδοποιήσεις για πρόοδο βίντεο hashing
+ Ειδοποίηση βίντεο hash
\ No newline at end of file
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index fe16a89bc..2cf9f3b01 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -650,6 +650,6 @@
YouTube provee un «Modo restringido», el cual oculta contenido potencialmente sólo apto para adultos
Ajustar color de notificación
Permitir a Android personalizar el color de la notificación con el color principal de la imagen (ten en cuenta que esta opción no funciona en todos los dispositivos)
- Mostrar miniatura como fondo de pantalla de bloqueo y dentro de notificaciones
+ Usar miniatura como fondo de pantalla de bloqueo y notificaciones
Mostrar vista previa
\ No newline at end of file
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index a477cb27c..0dea45178 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -278,8 +278,8 @@
Fitxategia
Inportatu datu-basea
Esportatu datu-basea
- Zure uneko historiala eta harpidetzak gainidazten ditu
- Esportatu historiala, harpidetzak eta erreprodukzio-zerrendak
+ Zure uneko historiala, harpidetzak eta (aukeran) ezarpenak gainidazten ditu
+ Esportatu historiala, harpidetzak, erreprodukzio-zerrendak eta ezarpenak
Garbitu ikusitakoaren historiala
Jotako jarioen historiala eta erreprodukzio puntuak ezabatzen ditu
Ezabatu ikusitakoaren historia osoa\?
@@ -647,6 +647,9 @@
Editatu beheko jakinarazpen ekintza bakoitza gainean sakatuz. Hautatu horietako hiru gehienez jakinarazpen trinkoan erakusteko eskuineko kontrol laukiak erabiliz.
Androidek miniaturako kolore nagusiaren arabera jakinarazpenaren kolorea pertsonalizatzea baimendu (kontuan izan ez dagoela gailu guztietan erabilgarri)
Koloreztatu jakinarazpena
- Erakutsi miniatura blokeo pantailan atzeko planoko eta barruko jakinarazpen bezala
+ Erabili miniatura blokeo pantaila eta jakinarazpenentzako
Erakutsi miniatura
+ Jakinarazpenak bideoen hashing egoerarako
+ Bideo hash jakinarazpena
+ Hash-a kalkulatzen
\ No newline at end of file
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index c9026aded..baa0e8084 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -156,7 +156,7 @@
Tauota
Toista
Poista
- Tarkistus-suma
+ Tarkistussumma
Uusi tehtävä
OK
Tiedostonimi
@@ -272,8 +272,8 @@
Vaihda normaalitoistoon
Tuo tietokanta
Vie tietokanta
- Kirjoittaa yli tämänhetkisen historian ja tilaukset
- Vie historia, tilaukset tai soittolistat
+ Ylikirjoittaa tämänhetkisen historian, tilaukset, soittolistat ja (vaihtoehtoisesti) asetukset
+ Vie historia, tilaukset, soittolistat ja asetukset
Poista katseluhistoria
Poistaa toistohistorian ja toistokohdat
Poista koko katseluhistoria\?
@@ -647,4 +647,7 @@
Näytä mahdollisesti lapsille sopimaton sisältö, jolla on ikäraja (esim. 18+)
Anna Androidin muokata ilmoituksen väriä esikatselukuvan päävärin mukaan (tämä ei ole mahdollista kaikilla laitteilla)
Käytä värejä ilmoituksessa
+ Käytä esikatselukuvaa lukitusruudun ja ilmoitusten taustakuvana
+ Näytä esikatselukuva
+ Lasketaan
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 4b04865bd..c128c4214 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -650,5 +650,5 @@
Notification colorée
Demander à Android de personnaliser la couleur de la notification en fonction de la couleur principale de la miniature (noter que cela n’est pas disponible sur tous les appareils)
Afficher la miniature
- Afficher la miniature en arrière-plan de l’écran de verrouillage et dans les notifications
+ Utiliser la miniature pour l\'arrière-plan de l’écran de verrouillage et les notifications
\ 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 8da1918d3..e366a673c 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -667,6 +667,9 @@
הצגת תוכן שעלול להיות בלתי הולם לילדים עקב מגבלת גיל (כגון 18+)
לאפשר ל־Android להתאים את צבע ההתראה בהתאם לצבע העיקרי של התמונה הממוזערת (לא זמין בכל המכשירים)
צביעת ההתראה
- הצגת תמונה ממוזערת על מסך הנעילה כרקע ובתוך ההתראות
+ להשתמש בתמונה ממוזערת גם כרקע מסך הנעילה וגם בהתראות
הצגת תמונה ממוזערת
+ הגיבוב
+ התראות על תהליכי גיבוב
+ התראת גיבוב סרטון
\ No newline at end of file
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 063686d8f..0146b5fff 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -148,7 +148,7 @@
Dodirni za detalje
Molimo pričekajte…
Kopirano u međuspremnik
- Kasnije odredite mapu za preuzimanje u postavkama
+ Molimo kasnije u postavkama odaberite mapu za preuzimanje
Ova dozvola je potrebna za
\notvaranje skočnog prozora
reCAPTCHA zadatak
@@ -335,11 +335,14 @@
Prethodni izvozi
Nije moguće uvesti pretplatnike
Nije moguće izvesti pretplatnike
- Uvezite YouTube pretplatnike preuzimanjem izvozne datoteke:
-\n
-\n1. Idite na ovaj URL: %1$s
-\n2. Ulogirajte se
-\n3. Preuzimanje bi trebalo početi (to je izvozna datoteka)
+ Uvezite YouTube pretplatnike preuzimanjem izvozne datoteke Google-a:
+\n
+\n1. Idite na ovaj URL: %1$s
+\n2. Prijavite se
+\n3. Kliknite \"Uključeni svi podaci\", zatim \"Poništi odabir svih\", a zatim odaberite samo \"pretplate\" i kliknite \"U redu\"
+\n4. Kliknite na \"Nastavi\", a zatim \"Stvori izvoz\"
+\n5. Kliknite na \"Preuzmi\"
+\n6. Preuzmite zip datoteku i izvucite json datoteku (pod \"YouTube and YouTube Music/subscriptions/subscriptions.json\") pa uvezite je ovdje
vašID, soundcloud.com/vašID
Uzmite u obzir da ova operacija može uzrokovat veliku potrošnju prometa.
\n
@@ -487,7 +490,7 @@
Podržani su samo HTTP URL-ovi
Lokalno
Nedavno dodano
- Automatski generirana (nije pronađen nijedan autor)
+ Autogenerirano (prenositelj nedefiniran)
Očisti povijest preuzimanja
Izbriši preuzete datoteke
Obrisano %1$d preuzimanja
@@ -552,7 +555,7 @@
Promijenite mape za preuzimanje kako bi stupile na snagu
Prikazuju se rezultati za: %s
Nije moguće prepoznati URL. Želite li otvoriti u drugoj aplikaciji\?
- Promijeni omjer minijature na 1:1
+ Smanjiti omjer minijatura na 1:1
Učitavanje u predmemoriju
Istovremeno se pokreće jedno preuzimanje
Dodano u popis izvođenja
@@ -645,4 +648,18 @@
\nNeki uređaji nisu kompatibilni
Izvorni tekstovi usluga bit će vidljivi u elementima prijenosa
Dostupno je u nekim uslugama. Obično je puno brže, ali može vratiti ograničenu količinu predmeta i često nepotpune podatke (npr. bez trajanja, vrste predmeta, bez stanja uživo).
+ Mislite li da je učitavanje feeda prespor\? Ako je to slučaj, pokušajte omogućiti brzo učitavanje (možete ga promijeniti u postavkama ili pritiskom na donji gumb).
+\n
+\nNewPipe nudi dvije strategije ulaganja feeda:
+\n• Dohvaćanje cijelog pretplatničkog kanala, koji je spor, ali cjelovit.
+\n• Korištenje namjenske krajnje točke usluge, koja je brza, ali obično nije potpuna.
+\n
+\nRazlika je u tome što brzom obično nedostaju neke informacije, poput trajanja ili vrste stavke (ne može razlikovati videozapise uživo od uobičajenih), a možda će vratiti i manje predmeta.
+\n
+\nYouTube je primjer usluge koja nudi ovaj brzi način sa svojim RSS feedom.
+\n
+\nDakle, izbor se svodi na ono što više volite: brzinu ili precizne informacije.
+ Izračunavanje šifriranja
+ Obavijest šifriranja videa
+ Obavijesti o napretku šifriranja videa
\ 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 4e23cce03..b76274305 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -637,6 +637,7 @@
Menampilkan konten yang mungkin tidak cocok untuk anak-anak karena memiliki batasan umur (seperti 18+)
Minta Android menyesuaikan warna notifikasi sesuai dengan warna utama di thumbnail (perhatikan bahwa ini tidak tersedia di semua perangkat)
Warnai notifikasi
- Tampilkan thumbnail pada layar penguncian sebagai latar dan di dalam notifikasi
+ Gunakan thumbnail untuk latar layar penguncian dan notifikasi
Tampilkan thumbnail
+ Mengkalkulasi hash
\ No newline at end of file
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 9a3f6ef4e..86d125b70 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -162,9 +162,9 @@
Impossibile aggiornare l\'iscrizione
Iscrizioni
Novità
- Cronologia ricerche
+ Cronologia delle ricerche
Salva le ricerche localmente
- Cronologia visualizzazioni
+ Cronologia delle visualizzazioni
Salva la cronologia degli elementi visualizzati
Riprendi la riproduzione
Continua a riprodurre dopo le interruzioni (es. telefonate)
@@ -350,7 +350,7 @@
Carica copertine
Disabilita per prevenire il caricamento delle copertine, 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
+ Svuota la cache dei metadati
Elimina i dati delle pagine web memorizzati nella cache
Cache metadati svuotata
Controlli della velocità di riproduzione
@@ -363,14 +363,14 @@
Sottotitoli
Modifica dimensione e stile dei sottotitoli. Riavviare per applicare le modifiche.
Nessuna app installata per riprodurre questo file
- Pulisci cronologia visualizzazioni
+ Elimina la cronologia delle visualizzazioni
Elimina la cronologia degli elementi riprodotti e le posizioni di riproduzione
Eliminare la cronologia delle visualizzazioni\?
- Cronologia visualizzazioni eliminata.
- Pulisci cronologia ricerche
+ Cronologia delle visualizzazioni eliminata.
+ Elimina la cronologia delle ricerche
Elimina la cronologia dei termini di ricerca
Eliminare la cronologia delle ricerche\?
- Cronologia ricerche eliminata.
+ Cronologia delle ricerche eliminata.
1 elemento eliminato.
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?
@@ -399,7 +399,7 @@
Disiscriviti
Nuova scheda
Scegli scheda
- Gesti Controllo Volume
+ Gesti controllo volume
Utilizza i gesti per controllare il volume del lettore multimediale
Gesti controllo luminosità
Utilizza i gesti per controllare la luminosità del lettore multimediale
@@ -468,7 +468,7 @@
Recupera l\'ultima posizione di riproduzione
Posizioni nelle liste
Mostra gli indicatori della posizione di riproduzione nelle liste
- Pulisci dati
+ Elimina dati
Posizione di riproduzione eliminata.
File spostato o cancellato
Esiste già un file con questo nome
@@ -477,7 +477,7 @@
NewPipe è stato chiuso mentre lavorava sul file
Spazio insufficiente sul dispositivo
Progresso perso poiché il file è stato eliminato
- Pulire la cronologia dei download o eliminare tutti i file scaricati\?
+ Cancellare la cronologia dei download o eliminare tutti i file scaricati\?
Sarà avviato un solo dowload per volta
Avvia i download
Sospendi i download
@@ -489,7 +489,7 @@
\nScegli SAF se vuoi scaricare su una scheda SD esterna
Lo Storage Access Framework consente di salvare file su una memoria esterna.
\nAlcuni dispositivi non sono compatibili
- Elimina posizioni di riproduzione
+ Elimina le posizioni di riproduzione
Elimina tutte le posizioni di riproduzione
Eliminare tutte le posizioni di riproduzione\?
Modifica le cartelle di download per renderle effettive
@@ -522,7 +522,7 @@
recupero
Impossibile recuperare questo download
Scegli un\'istanza
- Pulisci cronologia download
+ Elimina la cronologia dei download
Elimina file scaricati
%1$d download eliminati
Consentire la visualizzazione sopra altre applicazioni
@@ -600,7 +600,7 @@
\nSei sicuro\? L\'azione è irreversibile!
Rimuovere i video già visti\?
Rimuovi elementi visti
- Attiva la «Modalità con restrizioni» di YouTube
+ Attiva la \"Modalità con restrizioni\" di YouTube
I testi originali dei servizi saranno visibili negli elementi video
Mostra i tempi originali degli elementi
Immagine del canale
@@ -641,12 +641,15 @@
Aggiunto alla coda
Accoda
Cancella i cookie che NewPipe memorizza quando si risolve un reCAPTCHA
- Cookie reCAPTCHA puliti
- Pulisci cookie reCAPTCHA
- Consente di usufruire della «Modalità con restrizioni» di YouTube, che esclude contenuti potenzialmente inappropriati per i minori
+ Cookie reCAPTCHA eliminati
+ Elimina cookie reCAPTCHA
+ Consente di usufruire della \"Modalità con restrizioni\" di YouTube, che esclude contenuti potenzialmente inappropriati per i minori
Mostra contenuti che hanno un limite di età (es. 18+). Potrebbero essere inadatti ai bambini
Lascia che Android modifichi il colore della notifica, secondo il colore principale della copertina (funzione non disponibile per tutti i dispositivi)
Colora notifica
- Mostra le copertine come sfondo della schermata di blocco e all\'interno delle notifiche
+ Utilizza le copertine come sfondo della schermata di blocco e per le notifiche
Mostra copertina
+ Calcolo dell\'hash
+ Notifica Hash Video
+ Notifiche per lo stato di avanzamento dell\'hashing video
\ No newline at end of file
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index e9253598d..34df2592e 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -495,7 +495,7 @@
誰も聴いていません
- - %s リスナー
+ - %s が聴取中
アプリを再起動すると、言語が変更されます。
高速早送り/巻き戻し時間
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index a9ed08379..36ed9d665 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -649,4 +649,7 @@
Fargelegg merknad
Vis miniatyrbilde på låseskjerm som bakgrunn og i merknader
Vis miniatyrbilde
+ Regner ut sjekksum
+ Merknad for videosjekksummeringsframdrift
+ Videosjekksumsmerknad
\ 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 d4ee389f2..231702c24 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -657,6 +657,6 @@
Pokaż treści nieodpowiednie dla dzieci, ponieważ mają ograniczenia wiekowe (np. 18+)
Niech Android dostosuje kolor powiadomienia zgodnie z głównym kolorem na miniaturze (nie jest to dostępne na wszystkich urządzeniach)
Pokolorowanie powiadomienia
- Pokazuj miniaturkę na ekranie blokady jako tło oraz wewnątrz powiadomień
- Pokaż miniaturkę
+ Używaj miniatury zarówno jako tła ekranu blokady, jak i powiadomień
+ Pokazuj miniaturę
\ No newline at end of file
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index c0e61b392..b9c352e79 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -647,6 +647,9 @@
Mostrar conteúdo possivelmente inadequado para crianças porque tem um limite de idade (como +18)
Permite o Android personalizar a cor da notificação de acordo com a cor principal da miniatura (note que isso não está disponível em todos os dispositivos)
Colorir notificação
- Mostrar miniaturas como fundo da tela de bloqueio e nas notificações
+ Usar miniatura para o plano de fundo da tela de bloqueio e as notificações
Mostrar miniatura
+ Calculando hash
+ Notificações para o progresso do hash do vídeo
+ Notificação de Hash do Vídeo
\ No newline at end of file
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 9c4000230..4799c6ea0 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -647,6 +647,9 @@
Mostrar conteúdo possivelmente impróprio para crianças porque tem um limite de idade (como 18+)
Fazer com que o Android personalize a cor da notificação de acordo com a cor principal na miniatura (esta opção não está disponível em todos os dispositivos)
Colorir notificação
- Mostrar miniaturas no ecrã de bloqueio como fundo e como notificação
+ Usar miniaturas no fundo do ecrã de bloqueio e em notificações
Mostrar miniatura
+ A calcular \'hash\'
+ Notificar sobre o progresso das \'hash\' de vídeos
+ Notificação \'hash\' do vídeo
\ 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 c672c648f..433bd50fb 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -83,7 +83,7 @@
Трансляции пока не поддерживаются
Не удалось загрузить изображение
Приложение/UI завершило работу
- Простите, это не должно было произойти.
+ Никогда такого не было, и вот опять.
Отправить отчёт по e-mail
Извините, что-то пошло не так.
Отчёт
@@ -592,7 +592,7 @@
\n
\nВыбор за вами: скорость или точность.
Обновление по RSS, если доступно
- Доступно для некоторых сервисов, быстрое, но может возвращать не всё содержимое канала и не содержать часть сведений (длительность, статус трансляции)
+ Доступно для некоторых сервисов, быстрое, может возвращать не всё содержимое канала и не содержать часть сведений (длительность, статус трансляции)
Период актуальности подписок после обновления — %s
Это видео имеет возрастное ограничение.
\n
@@ -658,6 +658,9 @@
Удалить сохранённые при решении reCAPTCHA куки
Окрашивать уведомление основным цветом миниатюры. Поддерживается не всеми устройствами
Цветное уведомление
- Отображать миниатюру в уведомлении и на экране блокировки
+ Использовать миниатюру для фона уведомлений и экрана блокировки
Показать миниатюру
+ Показать уведомление при хэшировании видео
+ Уведомление о хэшировании
+ Вычисляется хэш
\ No newline at end of file
diff --git a/app/src/main/res/values-sat/strings.xml b/app/src/main/res/values-sat/strings.xml
index d04b2be1c..f4827ca77 100644
--- a/app/src/main/res/values-sat/strings.xml
+++ b/app/src/main/res/values-sat/strings.xml
@@ -40,4 +40,5 @@
ᱯᱳᱯᱟᱹᱯ
ᱵᱮᱠᱜᱨᱟᱩᱸᱰ
ᱴᱮᱵᱽ ᱪᱚᱭᱚᱱ ᱢᱮᱸ
+ ᱰᱟᱩᱱᱞᱳᱰ ᱠᱟᱱ ᱣᱤᱰᱤᱭᱚ ᱨᱮᱫ ᱱᱚᱰᱮ ᱫᱚᱦᱚᱜᱼᱟ
\ No newline at end of file
diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml
index 2127434b6..8f9198d3f 100644
--- a/app/src/main/res/values-sc/strings.xml
+++ b/app/src/main/res/values-sc/strings.xml
@@ -647,6 +647,9 @@
Pedi a Android de personalizare su colore de sa notìfica sighende su colore printzipale de sa miniadura (ammenta·ti chi custu no est a disponimentu pro totu sos dispositivos)
Colora sas notìficas
Ammenta s\'ùrtima mannària e sa positzione in sa ventanedda
- Ammustra sa miniatura in s\'ischermada de blocu e in intro de sas notìficas
+ Imprea sa miniatura siat comente isfundu de s\'ischermada de blocu e siat in sas notìficas
Ammustra sa miniatura
+ Carculende s\'hash
+ Notìficas pro su protzessu de hashàgiu de su vìdeu
+ Notìfica de hash de su vìdeu
\ No newline at end of file
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index e08ab1b7b..9f1639644 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -658,5 +658,8 @@
Nechajte Android, aby prispôsobil farbu upozornenia podľa hlavnej farby v miniatúre (nemusí to fungovať na všetkých zariadeniach)
Farby upozornení
Zobrazovať miniatúru
- Zobrazovať miniatúru pri uzamknutej obrazovke a v upozorneniach
+ Používať miniatúru ako pozadie pri uzamknutej obrazovke a v upozorneniach
+ Počítanie hash
+ Upozornenie pri generovaní hash z názu videa
+ Oznámenie o hashovaní videa
\ No newline at end of file
diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml
new file mode 100644
index 000000000..0ae0fc31a
--- /dev/null
+++ b/app/src/main/res/values-so/strings.xml
@@ -0,0 +1,496 @@
+
+
+ Isticmaal dhaa-dhaafinta dagdaga ah (100% sax ma aha)
+ Xusuusnow meeshii iyo cabirkii u dambeeyay ee
+ Xusuusnow fadhiga daaqada
+ Madow
+ Nashqada
+ Nooca muuqaalka joogtada loo isticmaali doono
+ Nooca codka joogtada loo isticmaali doono
+ Android-ka haku badalo midabka ogaysiiska midabka galka waxa daaran (aaladahoo dhan looma wada heli karo nidaamkan)
+ idabbee ogaysiiska
+ Soo Kucinay
+ Isku
+ Ku
+ Ugu badnaan waxad dooran kartaa sadex wax iney ka muuqdaan ogaysiiska yar!
+ Wax ka badal ficilka ogaysiiska hoose oo walba adigoo dushiisa ku dhufanaya. Dooro ilaa sadex kamida si ay uga muuqdaan ogaysiiska yar adigoo taabanaya santuuqa dhanka midgta ku yaala.
+ batoonka ficilka koowaad
+ batoonka ficilka koowaad
+ batoonka ficilka sadexaad
+ batoonka ficilka
+ batoonka ficilka koowaad
+ La ekaysii galka muuqaalka xaga ogaysiisyada ka muuqda cabirka 1:1 adoo kasoo badalaya 16:9 (wuxuu keeni karaa shucaac)
+ Galka la ekaysii cabirka 1:1
+ Soo bandhig istikhyaar ah in muuqaal lagu furo xarunta madadaalada
+ Soo bandhig istikhyaarka \"Kufur Kodi\"
+ Kushub app-ka maqan ee Kore\?
+ Kufur
+ Aaladaha qaar kaliya ayaa furi kara muuqaalada 2K/4K ga
+ Tus cabirada muuqaalka ee sare
+ Cabirka muuqaalka daaqada marwalba
+ Cabirka Muuqaalka ee
+ Wuxuu daaraa muuqaal marka NewPipe laga soo furo app
+ Badal meelaha waxa lasoo dajiyay galaan si uu u hirgalo waxaad badashay
+ Dooro meesha dhagaysiga lasoo dajiyay galaan
+ Dooro meesha muuqaalada lasoo dajiyay galaan
+ Dhagaysiga lasoo dajiyay halkan ayaa lagu kaydiyaa
+ Muuqaalada lasoo dajiyay halkan ayaa lagu kaydiyaa
+ Meesha oodajinta dhagaysiga
+ Meesha soodajintu
+ Ku Dar
+ Si
+ Xaga Dambe
+ Dooro Daaqada
+ Daaqad Cusub
+ Xulalka la
+ Rukunka
+ Guud
+ Tus xogta
+ Lama cusbooneysiin karo rukunka
+ Lama badali karo rukunka
+ Kanaalka waad iskajoojisay
+ Iskajooji Rukumashada
+ Rukuntay
+ Rukumo
+ Si
+ Isticmaal dhagaysi daare dibada
+ Codka ayuu ka saaraa cabirrada muuqaalkaqaar
+ Isticmaal muuqaal daare dibada
+ Dooro
+ La Wadaag
+ Soobandhigaya natiijada: %s
+ Ma waxaad ka waday \"%1$s\"\?
+ Fadhiga
+ Daji midka socda
+ La
+ Kufur daaqad yar
+ Kufur browser
+ Ka
+ Ku
+ Wax fura lama helin. (waxad Ku shuban kartaa VLC si aad u furto).
+ la furay %1$s jeer
+ Wax fura lama helin. Ku shubo VLC\?
+ Lasoo galiyay %1$s
+ ku dhufo \"Raadi\" si aad u bilawdo
+\n
+ Shay magacan leh ayaa horay u
+ Ku
+ Usamee magac gaar
+ %s soodajin ayaa dhamaatay
+ Dajintii wuu dhamaatay
+ Dajintii ma guulaysto
+ Waxaa diiday
+ Kasoo
+ La
+ La
+ Hawsha Kujira
+ La
+ Ku dhufo si aad u dajiso
+ Nooc cusub oo NewPipe ah ayaa diyaar ah!
+ Baddal
+ Qaabka
+ Marna
+ Kaliya marka WiFi la isticmaal
+ Yaree marka app kale loo
+ Cusboonaysiinta
+ Xad
+ Dib
+ Horay u dhaafi meelaha
+ Maamulista Xawaaraha Waxa
+ yourID, soundcloud.com/yourid
+ Rukunka lama gudbin
+ Lama soo galin karo
+ Gudbintii
+ Soo gali
+ Gudbinaya…
+ Soo galinaya…
+ U
+ Kasoo
+ Soo
+ Soo gali/
+ "Qoraaladii asal ahaan adeegyada la socday way ka muuqan doonaan waxyaabaha"
+ Soo bandhig wakhtigii asalka ahaa ee kasoo wareegay (shayyada)
+ Ku khasab warinta kareebitaanada aan la fulin karin ee Rx ka ee dibada qayb ama wakhtiga hawsha kadib marka la iska
+ Wari khaladaadka wakhtigoo
+ Tus ciladaha
+ Dabagalka cilada kaydka waxay sababi kartaa inuu app-ku istaago marka \'heap dump\'
+ Waxkabadal cabirka qoraalka qoral-hooseedka iyo midabka xaga dambe. App-ka waa in dib loo furaa si ay u hirgasho.
+ So
+ Ku
+ Qoral-Hoosaas majiro
+ Isasoo-bilaabay (Soo-galiye lama helin)
+ Xulka lama saari karo.
+ Galkii xulka waa la badalay.
+ La
+ Xulka waa la
+ Saar xulkan\?
+ Ka saar alaamadinta
+ Calaamadi
+ Ku Fadhiisi Galka Xulka
+ adalsii
+ Ku dar
+ Magaca kabadal
+ Tirtir
+ Xul
+ Sookicinaya shayga la
+ Helaya
+ Waydii
+ Gadaal ku
+ Muuqaal
+ Ficilka la doorbiday maeka shay la furayo —
+ Ficilka \'fur\' loo doorbiday
+ Wax baa halkan kasoo muuqan dhawaan ;
+ Xidh
+ Fur
+ Bilaw inaad daaqad ku
+ Ka bilow daarista
+ Bilaw inaad xaga dambe ka
+ La
+ Xaji si loo
+ Fadhiga
+ Faahfaahin
+ Ka
+ Daar
+ Inta loogu jecelyahay
+ Dhawaan lagu soo
+ Shiddan
+ Cusub oo
+ 50ka ugu
+ Bandhig
+ Luuqadu waxay isbadali doontaa marka barnaamijka dib loo soo kiciyo.
+ Faalooyinka lama soo dhigi
+ Inaad sidoo kale fadhiga soo galiso ma rabtaa\?
+ Tani waxay badali fadhigaaga hadda.
+ Digniin: Lama soowada galin karo shayyada oo
+ Shay ZIP ah oo sax ah
+ Lasoo
+ La
+ Dooro
+ Wax xul ah wali lama
+ Dooro
+ Wax kanaal ah wali lama
+ Dooro
+ Boga
+ Boga
+ Boga
+ Bandhiga siduu
+ Boga
+ Bog
+ Daaqadaha la soobandhigo boga
+ Boga guud waxa ka
+ Badanaa la
+ Kii udambeeyay ee la
+ Ma hubtaa inaad ka saari rabto shaygan kaydka taariikhda\?
+ Ma rabtaa inaad ka saarto shaygan kaydka wixii la daawaday\?
+ Ma rabtaa inaad ka saarto shaygan kaydka wixii la raadiyay\?
+ Waa la
+ Taariikhdii waa la nadiifiyay
+ Kaydka taariikhda wuu madhan
+ Taariikh
+ Kaydinta taariikhda way
+ La
+ La
+ Akhri
+ NewPipe waa barnaamij bilaash ah oon lahayn xuquuqda daabacaada: Waad isticmaali kartaa, wadaagi kartaa waadna hormarin kartaa hadaad rabto. Gaar ahaan waad sii daabici kartaa ama wax baad ka badali kartaa adigoo raacaya shuruudaha sharciga guud ee GNU sida ay soosaareen Ururka Barnaamijyada Bilaashka ah, soosaarista 3aad ee laysinka, ama (hadaad doonto) nooc walba oo kasii dambeeyay kii 3aad.
+ Siyaasada Sir-Dhawrka NewPipe
+ Laysanka NewPipe
+ Akhri siyaasada sir-dhawrka
+ Mashruuca NewPipe sir dhawrkaaga aad ayuu u daneeyaa. Sidaas darteed, App-ku wax xogtaada ah ma uruuriyo fasax la\'aan.
+\nSiyaasada sir-dhawrka NewPipe ayaa si faahfaahsan u sharaxda wixii xog ah ee la diro lana kaydiyo markaad cilad farsamo wariso.
+ Booqo website-ka NewPipe xog intaas dheer iyo warar.
+ Website-ka
+ U fidi caawin
+ NewPipe waxaa sameeyay dad iskood isku xilqaamay oo wakhtiga ay xorta yihiin ku kharash gareeya inay kuu keenaan wax markaad isticmaalayso aad ku qanacdo. U fidi taageero sameeyaasha appka si ay NewPipe xataa sidan oga sii fiicneeyaan.
+ Ugu Deeq
+ Xaga GitHub fur
+ Hadaad hayso fikarodo; rogid, qaab badal, nafiinta \'code\', ama \'code-ka\' ood si wayn wax oga badashaa—caawinta marwalba waa lasoo dhawayn. Waxbadan hadii la qabto waxbadan ayaa fiicnaan!
+ Kusoo kordhin
+ Waa app fudud oo bilaash wax loogu daawado Android-ka.
+ Laysimada
+ Waxaa wax kusoo kordhiyay
+ Ku saabsan
+ Fur website-ka
+ Laysanka lama soo kicin karo
+ © %1$s sameeyay %2$s asagoo raacaya %3$s
+ Laysinada gacanta sadexaad
+ Xog
+ Fadhiga
+ Ku saabsan NewPipe
+ Barnaamij shaygan fura kuma jiro
+ Xarfaha gaarka ah kuwa ugu badan
+ Xarfaha iyo Godadka
+ Xarafka lagu badali
+ Xarfaha aan la taageerin waxaa lagu badali midkan
+ Xarafyada magaca shayga loo ogol yahay
+ Daji
+ Waan dhameeyay
+ Tijaabada reCAPTCHA ayaa la codsaday
+ Taabo \"Waan dhameeyay\" markaad xaliso
+ Tijaabada reCAPTCHA
+ 1 shay ayaa la saaray.
+ Ogolaanshahan ayaa loo baahan yahay si
+\nloogu furo qaabka daaqada
+ Fadlan meesha wax lagu dajin doono hadhawto xaga fadhiga ka dooro
+ Dhakada ayaa lagu qabtay
+ Fadlan sug…
+ Xisaabinaya waxa isbadalay
+ Fahfahinta kusii dhufo
+ NewPipe Wuu Dajinayaa
+ Tixraac khaldan ama khad baan jirin
+ Shaygan horay ayuu ujiray
+ Martigaliye aan la taageerin
+ Khalad
+ Maqaallo
+ Magaca shayga
+ Hagaag
+ Hawl cusub
+ Magaca kabadal
+ Iska dhaaf
+ Xaqiijiyaha
+ Dhammaan tirtir
+ Hal Xabo Tirtir
+ Tirtir
+ Samee
+ Daar
+ Qabo
+ Bilaw
+ Faalooyin ma jiraan
+
+ - %s muuqaal
+ - %s muuqaalo
+
+ ∞ muuqaalo
+ 100+ muuqaal
+ Muuqaalo ma jiraan
+
+ - %s dhagayste
+
+
+ Cidna ma dhagaysanayso
+
+ - %s ayaa daawanaya
+ - %s ayaa daawanaysa
+
+ Cidna ma daawanayso
+
+ - %s ayaa furtay
+ - %s ayaa furatay
+
+ Lama furin
+ inta rukumatay lama heli karo
+
+ - %s ayaa rukuntay
+ - %s ayaa rukumatay
+
+ Dad rukuntay ma jiraan
+ Furo adeega, hada waxaa dooran:
+ B
+ K
+ M
+ App-ka u ogolow kaydka aaalada marka hore
+ Markale isku day
+ Cod
+ Muuqaal
+ Waa la sameeyay galka soodajinta ee \'%1$s\'
+ Lama samayn karo galka soodajinta ee \'%1$s\'
+ Jiid si aad ukala hormariso
+ Meel madhan
+ Natiijo lama helin
+ Isticmaal warka
+ Wari khalad
+ (Waa tijaabo) Ku khasab in soodajinta la dhexmariyo Tor si aad sirtaada u ilaashato (Muuqaalada tooska ah looma heli karo hadda).
+ Intaan ka helin
+ Isticmaal Tor
+ Inta ka heshay
+ Sawirka soosaarha muuqaalka
+ Daar muuqaalka, intuu socdo:
+ Waxa:\\nCodsi:\\nShayga Luuqada:\\nWadanka Shayga:\\nApp-ka Luuqada:\\nAdeega:\\nGMT Wakhtiga:\\Xidhmada:\\nNooca:\\nNooca barnaamijka:
+ Galka muuqaal tusaha
+ Faahfaahin:
+ Faaladaada (oo Ingiriis ah):
+ Waxa dhacay:
+ Xog:
+ Wari
+ Waan ka xunahay, waxbaa khaldamay.
+ Fadlan hubi in arin ciladdaada ka hadlaya horay loo wariyay. Marka wax horay u jiray la wariyo markale, wakhti ayaad naga qaadaysaa kaasoo aan cilada ku sixi la hayn.
+ Ku wari GitHub-ka
+ Koobiyee warka oo diyaarsan
+ Khaladkan email ahaan ku warceli
+ Wan ka xunahay, sidaa inay dhacdo ma ahayn.
+ U ogolow app-ka inuu dul fuulo applicationada kale
+ Ma rabtaa inaad sidii hore ku celiso\?
+ Dib ugu fadhiisi sidii hore
+ Lama akhrin karo daaqadihii la kaydiyay, ...isticmaalaya kuwii app-ku kusoo baxay
+ Wax la dajiyo lama heli karo
+ Khalad ayaa ka dhacay:
+ Magaca shayga ma madhnaan karo
+ Shaygani ma jiro ama ogolaansho looma haysto in wax laga badalo
+ Shaygan ma jiro/tixraacan
+ Galkan ma jiro
+ Shaygan waa la guuriyay ama waa la tirtiray
+ Codad la dhagaysto lama helin
+ Muuqaalo la daawado lama helin
+ Tixraac khaldan
+ Muuqaal daarayaasha dibada ah linkiyda noocan ah ma furaan
+ Kasoo kabashadii muuqaal daaraha khalad ayaa ka dhacay
+ Khalad aan laga soo kaban karin ayaa dhacay
+ Muuqaalkan lama daari karo
+ App-ka/UI-ga ayaa khalkhalay
+ Sawirka lama soo kicin karo
+ Wax la daawado lama heli karo
+ Muuqaalada tooska ah wali lama taageerin
+ Lama soo kicin karo meeshii soodajinta
+ Shaygan lama heli karo
+ Website-ka si buuxda looma furi karo
+ Lama furi karo website-ka
+ Lama badali karo sixiixa tixraaca muuqaalka
+ Lama kicin karo galalka
+ Khalad xaga khadka ah
+ Ku dajinta kaydka dibadda ee SD-ga suurtogal ma aha. Dib u fadhiisi meesha wax lagu dajiyo\?
+ Kaydka dibadda lama heli karo
+ Khalad
+ Caawin
+ Wixii la raadiyay waa la tirtiray.
+ Tirtir dhamaan wixii la raadiyay\?
+ Wuxuu tirtiraa kaydka wixii la raadiyay
+ Meelihii ay marayeen waa la tirtiray.
+ Tir
+ Tirtir dhamaan meelaha ay marayaan\?
+ Wuxuu tirtiraa meelihii ay kuu marayeen
+ Tirtir meelaha ay marayaan waxa la daaray
+ Shay
+ Dib-Ucabirida
+ Nadiifi
+ Fanaan
+ Albumo
+ Heeso
+ Qaybo
+ Xulal
+ Xul
+ Kanaalo
+ Kanaal
+ Soodajinta
+ Soodajinta
+ Toos
+ Ka noqo
+ Cusboonaysii
+ Kala shaandhee
+ Xidhan
+ Haa
+ Isticmaal
+ Muuqaal
+ Dhamaan
+ Kaydka wixii ladaawaday waa la tirtiray.
+ Tirtir gabi ahaan kaydka wixii ladaawaday\?
+ Wuxuu tirtiraa kaydka wixii la daawaday iyo meelihii ay kuu
+ Nadiifi kaydka wixii ladaawaday
+ Nadiifi kaydka uu NewPipe kaydiyo markaad xaliso reCAPTCHA
+ Dibadda u gudbi kaydka wixii la daawaday, rukunka, xulalka iyo
+ Wuxuu badalaa kaydka waxaad daawatay, rukunka, xulalka iyo (hadaad doonto)
+ Kaydkii reCAPTCHA waa la
+ Nadiifi kaydka reCAPTCHA
+ Gudbi
+ Soo gali xog kaydsan
+ U badal
+ U baddal
+ U baddal xaga dambe
+ Dhinaca
+ [Garanwaa]
+ Ogaysiiska adalida Muuqaalka
+ Ogaysiisyada heerka uu marayo badalida muuqaalka
+ Ogaysiisyada nooca cusub ee
+ Ogaysiiska Cusbonaysiinta NewPipe
+ Ogaysiisyada NewPipe markuu gadaal ka shidan yahay
+ Ogaysiisyada NewPipe
+ Hal
+ Mar
+ Daar
+ Waa la saaray
+ Tayada
+ Hadhow
+ Dhacdooyin
+ Faahfaahinta
+ Muuqaalkan da\'da ayuu ku xidhan yahay
+\n
+\nXaga fadhiga ka fur \"%1$s\" hadaad rabto inaad furto.
+ YouTube-ku wuxuu leeyahay \"Qaabka Xadidan\" kaasoo qariya waxyaabo laga yaabo ineysa haboonayn
+ Fur nidaamka YouTube-ka \"Qaabka Xadidan\"
+ Soo bandhig muuqaalada laga yaabo inaysa ku haboonayn caruurta sababtoo ah waxay ku xidhan yihiin da\'da (sida 18+)
+ Tus muuqaalada da\'da ubaahan
+ shay-ga
+ Waxaa lagu horay daaqada
+ Waxaa lagu horay xaga dambe
+ Ku daaraya daaqada
+ Ka daaraya xaga dambe
+ Ogaysiisyada
+ Cusboonaysiinta
+ Cilad-bixinta
+ Waxyaabo kale
+ Muuqaalka
+ Daaqada
+ Taariikhdka & kaydka kumeelgadhka
+ Muuqaalka iyo codka
+ Muuqaal daareha
+ Dabeecada
+ Qaybtan horay ayay ujirtay
+ Kaliya waxaa la furi karaa URL-lada HTTPS ka ah
+ Lama ansixin karo qaybtan
+ Gali URL-ka qaybta
+ Ku dar qaybta
+ %s ka hel qaybaha aad jeceshahay
+ Dooro qaybaha aad jeceshahay ee PeerTube-ka
+ Qaybaha PeerTube
+ Luuqada muuqaalada
+ Adeeg
+ Wadanka muuqaalada
+ Lama garan karo URL-kan. Ku fur app kale\?
+ URL aan la furi karin
+ Tus sharaxaada marka la riixayo batoonka gadaal ama midka daaqada ee ku yaala \"Faahfaahinta:\" muuqaalka
+ Tus sharaxaha \"Farta ku hay si aad iskugu darto\"
+ Soo dhig muuqaalada \"Ka xiga\" iyo \"Kuwa lamidka h\"
+ Isdaarida
+ Daji
+ Sii wad wixii daarada marka la dhabqiyo kadib (tus. wicitaanada)
+ Sii wad
+ La soco muuqaalada ladaawaday
+ Tirtir xogta
+ Kusoo bandhig meelaha laga daarayo liis-tada
+ Meelaha liis-tada ku jira
+ Kasii wad meeshii hore
+ Siiwad wixii hore
+ Wixii horay looraadiyay
+ Kaydi wixii la raadiyay (aalada)
+ Wixii laraadiyay
+ Tus soojeedino marka wax la raadinayo
+ Soojeedinta Raadinta
+ Isticmaal fartaada si aad umaamusho iftiinka iyo codka
+ Maamulista daaraha (farta)
+ Isticmaal fartaada si aad u maamusho iftiinka
+ Maamulista iftiinka (farta)
+ Isticmaal fartaada si aad umaamusho codka
+ Maamulista codka ee farta
+ Hormada-isutalisa
+ Sii wad dhamaynta (mida aan isku celcelinin) hormada shidan ayadoo lagu darayo waxyaabo la xidhiidha
+ Ku xiji hormada la daari doono
+ Waa la tirtiray yaryarkii
+ Tirtir waxyaabaha kumeelgaadhka ah
+ Tirtir waxyaabaha yaryar
+ kaydkii kumeelgaadhka ahaa ee sawirka waa la tirtiray
+ Xidh si aad u joojiso soobandhiga galalka muuqaalada, adigoo yaraynaya isticmalka khadka iyo maskaxda. Waxkabadalkan wuxuu nafiifin waxa kaydka hore iyo ka caadiga ah kumeelgaadh ahan ugu jira.
+ Xidh si aad u qariso aragtiyada
+ Tus aragtitada
+ Soosaar galka muuqaalka
+ Hormada muuqaal daaraha hada wax shidaya waa la badali doonaa
+ Kalabadalka muuqaal daaraha waxay badali kartaa hormada
+ Waydii in la xaqiijiyo intan hormada la tirtirin
+ Horay-udhaafinta/-dibucelinta wakhtigeeda
+ Dhaaf-dhaafinta waxa daaran ee aan boqolkiiba boqol saxda ahayn waxay u sahashaa muuqaal daaraha inuu u dhaaf dhaafiyo si dagdag ah. Nidaamkan 5, 15 ama 25 ilbiriqsi wax looma dhaafdhaafin karo.
+ Madow
+ Caddaan
+ Cod
+ Waxba
+ Isdaar
+ gaddinta
+ Raadi
+ Daji
+
\ No newline at end of file
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index a65e26394..243f77f11 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -2,7 +2,7 @@
%1$s приказа
Објављен %1$s
- Нема плејера токова. Инсталирати ВЛЦ\?
+ Нема плејера токова. Желите ли да инсталирате ВЛЦ\?
Инсталирај
Одустани
Отвори у прегледачу
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index bc2b4ba5d..d105be597 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -645,8 +645,11 @@
reCAPTCHA çerezlerini temizle
YouTube, olası yetişkin içeriği gizleyen \"Kısıtlı Kip\" sağlamaktadır
Yaş kısıtı (18+ gibi) nedeniyle çocuklara uygun olmayabilecek içeriği göster
- Küçük resmi kilit ekranında arka plan olarak ve bildirimlerin içinde göster
+ Hem kilit ekranı arka planı hem de bildirimler için küçük resmi kullan
Küçük resmi göster
Android\'in bildirim rengini küçük resimdeki ana renge göre özelleştirmesini sağlayın (bunun tüm aygıtlarda kullanılamadığını unutmayın)
Bildirimi renklendir
+ Dosya özeti hesaplanıyor
+ Video dosya özetleme süreci için bildirimler
+ Video Dosya Özeti Bildirimi
\ 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 cd66e7a78..e51382ac5 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -93,7 +93,7 @@
無法完全解析網站
內容無法使用
無法設定下載選單
- 尚未支援現場串流
+ 尚未支援直播串流
無法取得串流
無法載入圖片
應用程式或界面已停止運作
@@ -121,9 +121,9 @@
刪除
檢查碼
新任務
- 好
+ 確定
檔案名稱
- 連線數
+ 執行緒數目
錯誤
不支援的伺服器
檔案已存在
@@ -149,7 +149,7 @@
新鮮事
搜尋紀錄
在本機儲存搜尋紀錄
- 檢視歷史
+ 觀看紀錄
記錄觀看過的影片
恢復播放
在干擾結束後繼續播放(例如有來電)
@@ -329,7 +329,7 @@
\n2. 當被提示時登入帳號
\n3. 點擊「包含所有資料」,然後「取消選取全部」,然後僅選取「訂閱」並點擊「確定」
\n4. 點擊「下一步」然後「建立匯出」
-\n5. 在「下載」按鈕出現後點擊它,然後
+\n5. 在「下載」按鈕出現後點擊它;然後
\n6. 從已下載的 takeout zip 解壓縮 .json 檔(通常會在「YouTube 與 YouTube Music/subscriptions/subscriptions.json」)然後匯入它。
yourID, soundcloud.com/yourid
請記住,此操作可造成昂貴網路花費。
@@ -388,7 +388,7 @@
重設
頻道
播放清單
- 軌
+ 曲目
使用者
取消訂閱
新分頁
@@ -418,25 +418,25 @@
切換檢視
有可用的 NewPipe 更新!
輕觸以下載
- 結束
- 有待
+ 已完成
+ 有待處理
已暫停
已排入佇列
正在後處理
佇列
動作被系統拒絕
下載失敗
- 下載已結束
- %s 個下載已結束
+ 下載已完成
+ %s 個下載已完成
生成獨特的名稱
覆寫
已有此名稱的已下載檔案
- 已有此名稱的當案的下載正在進行
+ 已有進行中的下載與此同名
顯示錯誤
代碼
無法建立檔案
無法建立目的地資料夾
- 被系統拒絕的權限
+ 權限被系統拒絕
無法建立安全連線
找不到伺服器
無法連線到伺服器
@@ -451,7 +451,7 @@
在切換到行動數據時很有用(雖然某些下載無法暫停)
事件
會議
- 連接超時
+ 連線已逾時
顯示留言
關閉以隱藏留言
自動播放
@@ -467,17 +467,17 @@
檔案已移動或已刪除
與此同名的檔案已存在
無法覆寫檔案
- 有同名的擱置中下載
+ 已有擱置中的下載與此同名
NewPipe 在處理檔案時被關閉
裝置上沒有剩餘的空間
進度遺失,因為檔案已被刪除
- 您想要清除您的下載歷史紀錄或刪除所有已下載的檔案嗎?
+ 您想要清除您的下載歷史紀錄,還是刪除所有已下載的檔案?
限制下載佇列
一次執行一個下載
開始下載
暫停下載
詢問要下載到哪裡
- 每次下載您都會被詢問要下載到哪裡
+ 每次下載都詢問要下載到哪裡
每次下載您都會被詢問要下載到哪裡。
\n如果您想要下載到外部的 SD 卡的話,請選擇 SAF
使用 SAF
@@ -489,7 +489,7 @@
變更下載資料夾以使其生效
切換服務,目前已選取:
- - %s 影片
+ - %s 部影片
預設 Kiosk
沒有人在看
@@ -515,7 +515,7 @@
最喜歡
自動生成(未找到上傳者)
正在恢復
- 無法復原此下載
+ 無法恢復此下載
選擇一個站臺
清除下載歷史紀錄
刪除已下載的檔案
@@ -582,11 +582,11 @@
藝術家
專輯
歌曲
- 此影片有年鈴限制。
+ 此影片設有年齡限制。
\n
\n如果您想要觀看,請在設定中開啟「%1$s」。
- 是的,以及部份觀看的影片
- 在新增到播放清單前後的影片將被移除。
+ 是的,包括已部份觀看的影片
+ 在新增到播放清單前和後已觀看的影片將被移除。
\n您確定嗎?此動作無法復原!
移除已觀看的影片?
移除已觀看
@@ -637,6 +637,9 @@
顯示可能不適於兒童的內容(因為其有年齡限制,如18歲以上等)
讓 Android 根據縮圖中的主要色彩來自訂通知的顏色(請注意,此功能不是在所有裝置上都能正常運作)
彩色通知
- 在鎖定畫面上顯示縮圖作為背景與內部通知
+ 於鎖定畫面背景與通知使用縮圖
顯示縮圖
+ 正在計算雜湊
+ 影片雜湊流程通知
+ 影片雜湊通知
\ 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 d2dd8afd5..7d790dfdc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -690,5 +690,5 @@
By %s
Playlist page
Show thumbnail
- Show thumbnail on lock screen as background and inside notifications
-
+ Use thumbnail for both lock screen background and notifications
+
\ No newline at end of file
diff --git a/fastlane/metadata/android/de/changelogs/820.txt b/fastlane/metadata/android/de/changelogs/820.txt
new file mode 100644
index 000000000..8312f8187
--- /dev/null
+++ b/fastlane/metadata/android/de/changelogs/820.txt
@@ -0,0 +1 @@
+Regex für Entschlüsselungsfunktionsname, das YouTube unverwendbar macht, reapariert.
diff --git a/fastlane/metadata/android/de/changelogs/830.txt b/fastlane/metadata/android/de/changelogs/830.txt
new file mode 100644
index 000000000..5139b3e84
--- /dev/null
+++ b/fastlane/metadata/android/de/changelogs/830.txt
@@ -0,0 +1 @@
+Aktualisierung der SoundCloud client ID zur behebung von SoundCloud Problemen.
diff --git a/fastlane/metadata/android/de/changelogs/850.txt b/fastlane/metadata/android/de/changelogs/850.txt
new file mode 100644
index 000000000..30229edc0
--- /dev/null
+++ b/fastlane/metadata/android/de/changelogs/850.txt
@@ -0,0 +1 @@
+In dieser Veröffentlichung wurde die Version der Youtube Internetseite aktualisiert. Die alte Version der Internetseite wird im März abgeschaltet und darum ist es nötig NewPipe zu aktualisieren.
diff --git a/fastlane/metadata/android/de/changelogs/870.txt b/fastlane/metadata/android/de/changelogs/870.txt
new file mode 100644
index 000000000..c67a66f45
--- /dev/null
+++ b/fastlane/metadata/android/de/changelogs/870.txt
@@ -0,0 +1,2 @@
+Dies ist eine Hotfix-Version, die es NewPipe erneut erlaubt, SoundCloud ohne gröbere Probleme zu nutzen.
+Der Extraktor nutzt nun die v2 API von SoundCloud und die Detektion ungültiger Client-IDs wurde verbessert.
diff --git a/fastlane/metadata/android/de/changelogs/952.txt b/fastlane/metadata/android/de/changelogs/952.txt
new file mode 100644
index 000000000..fab5f89f4
--- /dev/null
+++ b/fastlane/metadata/android/de/changelogs/952.txt
@@ -0,0 +1,7 @@
+Verbesserungen:
+• Autoplay ist nun für alle Services verfügbar (nicht nur für YouTube)
+
+Reparaturen:
+• Verwandte Streams wurden behoben, indem die neuen Streamfortsetzungen von YouTube unterstützt werden
+• Altersbeschränkte Videos repariert
+• [Android TV] Überlagerung von Fokus-Hervorhebungen behoben
diff --git a/fastlane/metadata/android/de/changelogs/960.txt b/fastlane/metadata/android/de/changelogs/960.txt
new file mode 100644
index 000000000..c95dec25a
--- /dev/null
+++ b/fastlane/metadata/android/de/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Verbesserte Beschreibung der Option "Datenbank exportieren" in den Einstellungen.
+• Das Parsen von YouTube-Kommentaren wurde behoben.
+• Anzeige des Namens des Dienstes media.ccc.de korrigiert.
+• Aktualisierte Übersetzungen.
diff --git a/fastlane/metadata/android/el/short_description.txt b/fastlane/metadata/android/el/short_description.txt
index b5b10ec58..1992765a4 100644
--- a/fastlane/metadata/android/el/short_description.txt
+++ b/fastlane/metadata/android/el/short_description.txt
@@ -1 +1 @@
-Ένα δωρεάν ελαφρύ εμπρόσθιο τμήμα του YouTube για συσκευές Android.
+Μία δωρεάν ελαφριά διέπαφη YouTube για συσκευές Android.
diff --git a/fastlane/metadata/android/eu/changelogs/960.txt b/fastlane/metadata/android/eu/changelogs/960.txt
new file mode 100644
index 000000000..94827bf85
--- /dev/null
+++ b/fastlane/metadata/android/eu/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Ezarpenetan esportatu datu-basea aukeraren deskribapena hobetu da.
+• YouTube iruzkinen analisia konpondu da.
+• media.ccc.de zerbitzuaren bistaratzeko izena konpondu da.
+• Itzulpenak eguneratuta.
diff --git a/fastlane/metadata/android/fi/changelogs/957.txt b/fastlane/metadata/android/fi/changelogs/957.txt
new file mode 100644
index 000000000..667a2bd29
--- /dev/null
+++ b/fastlane/metadata/android/fi/changelogs/957.txt
@@ -0,0 +1,10 @@
+• Yhdistetty tietyt jonotoiminnot
+• Kahden sormen ele soittimen sulkemiseksi
+• Valinta reCAPTCHA-evästeiden tyhjentämiseksi
+• Ilmoitusvärin muokkaus
+• Korjattu videon tietojen avaaminen, buginen käyttäytyminen NewPipeen jaettaessa ja muita epäjohdonmukaisuuksia
+• Nopeutettu YouTube-videoita ja korjattu ikärajoitettuja
+• Korjattu kaatuminen eteen-/taaksekelattaessa
+• Ei uudelleenjärjestä listoja raahaatessa esikatselukuvia
+• Ponnahdusikkunan ominaisuudet muistetaan aina
+• Lisätty santalin kieli
diff --git a/fastlane/metadata/android/id/changelogs/960.txt b/fastlane/metadata/android/id/changelogs/960.txt
new file mode 100644
index 000000000..5a9f11de5
--- /dev/null
+++ b/fastlane/metadata/android/id/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Memperjelas deskripsi dari opsi ekspor basisdata di dalam pengaturan.
+• Memperbaiki penguraian komentar YouTube.
+• Memperbaiki tampilan nama layanan media.ccc.de.
+• Memperbarui terjemahan.
diff --git a/fastlane/metadata/android/it/changelogs/960.txt b/fastlane/metadata/android/it/changelogs/960.txt
new file mode 100644
index 000000000..99ba982b1
--- /dev/null
+++ b/fastlane/metadata/android/it/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Migliorata la descrizione dell'opzione per l'esportazione del database nelle impostazioni.
+• Sistemato il parsing dei commenti per YouTube.
+• Sistemato il nome mostrato per il servizio media.ccc.de.
+• Traduzioni aggiornate.
diff --git a/fastlane/metadata/android/it/full_description.txt b/fastlane/metadata/android/it/full_description.txt
index 67de5069c..7f836e6d3 100644
--- a/fastlane/metadata/android/it/full_description.txt
+++ b/fastlane/metadata/android/it/full_description.txt
@@ -1 +1 @@
-NewPipe non usa nè le librerie di Google, nè l'API di YouTube, ma analizza il sito web per estrarne le informazioni di cui ha bisogno. Quindi l'app può essere usata senza un account YouTube e su dispositivi senza Google Play Services. Inoltre, NewPipe è libera ed open source.
+NewPipe non usa né le librerie di Google, né l'API di YouTube, ma analizza il sito web per estrarne le informazioni di cui ha bisogno. Quindi l'app può essere usata senza un account YouTube e su dispositivi senza Google Play Services. Inoltre, NewPipe è libera ed open source.
diff --git a/fastlane/metadata/android/ko/changelogs/953.txt b/fastlane/metadata/android/ko/changelogs/953.txt
new file mode 100644
index 000000000..6bae09406
--- /dev/null
+++ b/fastlane/metadata/android/ko/changelogs/953.txt
@@ -0,0 +1 @@
+유튜브의 복호화 추출 기능 수정.
diff --git a/fastlane/metadata/android/ko/changelogs/955.txt b/fastlane/metadata/android/ko/changelogs/955.txt
new file mode 100644
index 000000000..bf7b64a3d
--- /dev/null
+++ b/fastlane/metadata/android/ko/changelogs/955.txt
@@ -0,0 +1,3 @@
+[Youtube] 일부 사용자의 검색 수정
+[Youtube] 복호화의 예외 수정
+[SoundCloud] 이제 URL이 올바르게 분석됩니다
diff --git a/fastlane/metadata/android/ko/changelogs/956.txt b/fastlane/metadata/android/ko/changelogs/956.txt
new file mode 100644
index 000000000..fcfb9d4bb
--- /dev/null
+++ b/fastlane/metadata/android/ko/changelogs/956.txt
@@ -0,0 +1 @@
+[유튜브] 비디오 로딩시의 충돌 수정
diff --git a/fastlane/metadata/android/pt/changelogs/959.txt b/fastlane/metadata/android/pt/changelogs/959.txt
index a50b8d058..2ceda197e 100644
--- a/fastlane/metadata/android/pt/changelogs/959.txt
+++ b/fastlane/metadata/android/pt/changelogs/959.txt
@@ -1,3 +1,3 @@
-O loop infinito de falhas corrigido após a abertura do repórter de erro.
-Lista atualizada de instâncias do PeerTube que podem ser abertas automaticamente pelo NewPipe.
+Corrigido o ciclo infinito de falhas após a abertura do repórter de erros.
+Atualizada a lista de instâncias PeerTube que podem ser abertas automaticamente pelo NewPipe.
Traduções atualizadas.
diff --git a/fastlane/metadata/android/pt/changelogs/960.txt b/fastlane/metadata/android/pt/changelogs/960.txt
new file mode 100644
index 000000000..3508a26de
--- /dev/null
+++ b/fastlane/metadata/android/pt/changelogs/960.txt
@@ -0,0 +1,4 @@
+• Melhorada a descrição da opção de exportação da base de dados nas definições.
+• Correções ao processamento de comentários no YouTube.
+• Corrigido o nome de exibição para o serviço media.ccc.de.
+• Traduções atualizadas.
diff --git a/fastlane/metadata/android/pt/full_description.txt b/fastlane/metadata/android/pt/full_description.txt
index cf8f2a255..6a2c1147f 100644
--- a/fastlane/metadata/android/pt/full_description.txt
+++ b/fastlane/metadata/android/pt/full_description.txt
@@ -1 +1 @@
-NewPipe não utiliza nenhuma biblioteca de estrutura do Google, nem a API do YouTube. Apenas analisa o site para obter as informações necessárias. Portanto, esta app pode ser usado em aparelhos sem os Serviços do Google instalados. Além disso, não precisa de uma conta no YouTube para usar o NewPipe, e é FLOSS.
+NewPipe não utiliza qualquer biblioteca de estrutura do Google, nem a API do YouTube. Apenas analisa o site para obter as informações necessárias. Desta forma, esta aplicação pode ser utilizada em dispositivos que não tenham Google Services instalados. Não precisa de uma conta Youtube e, além disso, é uma aplicação FLOSS.
diff --git a/fastlane/metadata/android/pt/short_description.txt b/fastlane/metadata/android/pt/short_description.txt
index 5e111585b..6c0629adc 100644
--- a/fastlane/metadata/android/pt/short_description.txt
+++ b/fastlane/metadata/android/pt/short_description.txt
@@ -1 +1 @@
-Um frontend gratuito e leve do YouTube para o Android.
+Um reprodutor Youtube para Android.
diff --git a/fastlane/metadata/android/so/full_description.txt b/fastlane/metadata/android/so/full_description.txt
new file mode 100644
index 000000000..ca8643286
--- /dev/null
+++ b/fastlane/metadata/android/so/full_description.txt
@@ -0,0 +1 @@
+NewPipe ma isticmaalo wax nidaamka ka shaqaysiinta Google ka ah, ama iskuxidhyada (API) YouTube. Kaliya waxay xogta kasoo rogtaa websiteka YouTube-ka si ay xogta ay u baahantahay u hesho. Sidaa darteed app-kan waxaa lagu isticmaali karaa aaladaha aysa ku jirin Adeegyada Google. Sidoo kale uma baahnid akoon YouTube si aad u isticmaasho NewPipe, waana bilaash waxna waad ka badali kartaa (FLOSS).
diff --git a/fastlane/metadata/android/so/short_description.txt b/fastlane/metadata/android/so/short_description.txt
new file mode 100644
index 000000000..de3d3d12d
--- /dev/null
+++ b/fastlane/metadata/android/so/short_description.txt
@@ -0,0 +1 @@
+Barnaamij YouTube fudud oo bilaash ah oo loogu talagalay Android.
diff --git a/fastlane/metadata/android/tr/full_description.txt b/fastlane/metadata/android/tr/full_description.txt
index 312eeb825..e6ca6f1b4 100644
--- a/fastlane/metadata/android/tr/full_description.txt
+++ b/fastlane/metadata/android/tr/full_description.txt
@@ -1 +1 @@
-NewPipe herhangi bir Google çerçeve kütüphanesi veya YouTube API'si kullanmaz. İhtiyaç duyduğu bilgileri elde etmek için yalnızca web sitesini ayrıştırır. Bu nedenle Google hizmetlerinin yüklü olmadığı aygıtlarda kullanılabilir. Ayrıca NewPipe'ı kullanmak için bir YouTube hesabına ihtiyacınız yoktur, özgür ve açık kaynaklı bir yazılımdır.
+NewPipe herhangi bir Google çerçeve kütüphanesi veya YouTube API'si kullanmaz. Gereksindiği bilgileri edinirken yalnızca web sitesini ayrıştırır. Bu nedenle Google hizmetlerinin kurulmadığı aygıtlarda kullanılabilir. Ayrıca, NewPipe'ı kullanırken YouTube hesabına gereksinmezsiniz, özgür ve açık kaynaklı yazılımdır.
diff --git a/fastlane/metadata/android/zh_Hans/changelogs/840.txt b/fastlane/metadata/android/zh_Hans/changelogs/840.txt
new file mode 100644
index 000000000..b90e970a3
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hans/changelogs/840.txt
@@ -0,0 +1,24 @@
+新增功能
+
+• 新增 允许更改Newpipe应用语言
+• 新增 “发送到kodi”按钮(于播放器可
+折叠菜单)
+• 新增 长按复制评论
+
+改进
+• 修复 reCaptcha Activity并正确存储得到的 Cookie
+• 隐藏 当在设置中未启用观看历史记录时,隐藏三点菜单中的历史记录按钮
+• 改进 在 Android 6 以上设备,请求“显示其他应用上层”的权限时正确启动对应设置页面
+• 改进 允许在收藏栏中长按重命名播放列表
+• 改进 各种 PeerTube 改进
+• 改进 英语源字符串
+
+修复
+• 修复 已暂停的视频莫名继续,即使开启"App切换时最小化"选项且 NewPipe 已最小化
+• 修复 手势控制的初始亮度
+• 修复 下载的.srt格式字幕不包含所有换行符
+• 修复 下载至(外置)SD卡失败(某些 Android 5 设备不符合 CTF 标准)
+• 修复 Android 4.4设备上,下载出错
+• 修复 损坏的.mp4文件被识别为音频文件
+• 改进 各语言翻译错误,包括中文语言代码错误
+• 修复 YouTube视频简介中的时间戳可再次点击
diff --git a/fastlane/metadata/android/zh_Hans/changelogs/957.txt b/fastlane/metadata/android/zh_Hans/changelogs/957.txt
new file mode 100644
index 000000000..802608fc0
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hans/changelogs/957.txt
@@ -0,0 +1,10 @@
+• 将特定列表操作统一为一个
+• 手势(合指)关闭播放器
+• 允许清除 Cookie
+• 允许不着色通知
+• 改进视频详细信息的打开方式,以修复共享 NewPipe 时的无限缓冲、错误行为和其他不一致
+• 加快 YouTube 视频解析并修复年龄受限的视频
+• 修复快进/倒带的崩溃
+• 不再允许拖动缩略图来重新排列列表
+• 总是记住悬浮窗属性
+• 添加桑塔利语翻译
diff --git a/fastlane/metadata/android/zh_Hans/changelogs/958.txt b/fastlane/metadata/android/zh_Hans/changelogs/958.txt
new file mode 100644
index 000000000..1275c084c
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hans/changelogs/958.txt
@@ -0,0 +1,15 @@
+改进与新增:
+• 重新添加 在锁屏界面上隐藏缩略图的选项
+• 新增 下拉刷新
+• 提高 获取本地列表时性能
+
+修复:
+• 修复 杀死 NewPipe 后再启动 NewPipe 时的崩溃
+• 修复 无网络连接时启动崩溃,
+• 修复 亮度和音量手势设置问题
+• 修复 [YouTube] 过长播放列表崩溃
+
+其他:
+• 清理重构代码
+• 更新依赖
+• 更新翻译
diff --git a/fastlane/metadata/android/zh_Hans/changelogs/959.txt b/fastlane/metadata/android/zh_Hans/changelogs/959.txt
new file mode 100644
index 000000000..2691dcbc9
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hans/changelogs/959.txt
@@ -0,0 +1,3 @@
+修复 打开错误反馈后无限崩溃。
+更新 能被 NewPipe 自动打开的Peertube服务器列表。
+更新 各语言翻译。
diff --git a/fastlane/metadata/android/zh_Hans/changelogs/960.txt b/fastlane/metadata/android/zh_Hans/changelogs/960.txt
new file mode 100644
index 000000000..6eac6188a
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hans/changelogs/960.txt
@@ -0,0 +1,4 @@
+• 改进 设置中导出数据库的说明
+• 修复 YouTube 评论解析
+• 修复 media.ccc.de的名称显示。
+• 更新 各语言翻译。
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/63.txt b/fastlane/metadata/android/zh_Hant/changelogs/63.txt
new file mode 100644
index 000000000..254d5a168
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/63.txt
@@ -0,0 +1,8 @@
+### 改善
+- 匯入/匯出設定 #1333
+- 減少覆繪 (效能改善) #1371
+- 代碼稍作改善 #1375
+- 新增種種 GDPR 相關事宜 #1420
+
+### 修正
+- 下載器:修正從 .giga 檔案載入未完成的下載時崩 #1407
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/64.txt b/fastlane/metadata/android/zh_Hant/changelogs/64.txt
new file mode 100644
index 000000000..d0edf7458
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/64.txt
@@ -0,0 +1,8 @@
+### 改善
+- 新增使用流動數據時限制視訊品質的功能。 #1339
+- 記住工作階段中的亮度 #1442
+- 改善較低規格 CPU 的下載效能 #1431
+- 新增媒體工作階段的 (作用) 支援 #1433
+
+### 修正
+- 修正開啟下載時崩潰 (修正現可用於發行組建) #1441
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/71.txt b/fastlane/metadata/android/zh_Hant/changelogs/71.txt
new file mode 100644
index 000000000..ccd4bb32d
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/71.txt
@@ -0,0 +1,10 @@
+### 改善
+* 為 GitHub 組建新增應用程式更新通知 (#1608 鳴謝 @krtkush)
+* 下載器有多項改善 (#1944 鳴謝 @kapodamy):
+ * 新增缺少的白色圖示並以硬性方式更改圖示顏色
+ * 檢查迭代器是否已初始化 (修正 #2031)
+ * 允許在新混合器重試「後期處理失敗」的下載
+ * 新的 MPEG-4 混合器修正非同步的視訊和音訊串流 (#2039)
+
+### 修正
+* YouTube 直播串流沒多久就停止播放 (#1996 鳴謝 @yausername)
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/730.txt b/fastlane/metadata/android/zh_Hant/changelogs/730.txt
new file mode 100644
index 000000000..4e41ea2af
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/730.txt
@@ -0,0 +1,2 @@
+# 修正
+- 再次修補解密函式錯誤。
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/750.txt b/fastlane/metadata/android/zh_Hant/changelogs/750.txt
new file mode 100644
index 000000000..310460124
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/750.txt
@@ -0,0 +1,22 @@
+新增
+恢復播放 #2288
+• 在上次停止的地方恢復串流
+下載器提升 #2149
+• 使用儲存裝置存取框架以儲存下載到外置 SD 卡
+• 新增 mp4 混合器
+• 可選擇在開啟下載前更改下載目錄
+• 顧及考慮計量網路
+
+
+改善
+• 移除 gema 字串 #2295
+• 在活動週期中處理 (自動)旋轉變更 #2444
+• 長按功能表一致化 #2368
+
+修正
+• 修正選取的字幕軌名稱未有顯示 #2394
+• 檢查應用程式更新失敗時不要崩潰 (GitHub 版本) #2423
+• 修正下載停滯於 99.9% #2440
+• 更新播放佇列中繼資料 #2453
+• [SoundCloud] 修正載入播放清單時崩潰 TeamNewPipe/NewPipeExtractor#170
+• [YouTube] 修正持續時間無法剖析 TeamNewPipe/NewPipeExtractor#177
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/955.txt b/fastlane/metadata/android/zh_Hant/changelogs/955.txt
new file mode 100644
index 000000000..3aeeb01d5
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/955.txt
@@ -0,0 +1,3 @@
+[YouTube] 修正搜尋(部分使用者出現的問題)
+[YouTube] 修正隨機的解密例外狀況
+[SoundCloud] 以斜槓結尾的 URL 現已正確剖析
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/956.txt b/fastlane/metadata/android/zh_Hant/changelogs/956.txt
new file mode 100644
index 000000000..1fdb9777e
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/956.txt
@@ -0,0 +1 @@
+[YouTube] 修正載入任何影片時的崩潰
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/957.txt b/fastlane/metadata/android/zh_Hant/changelogs/957.txt
new file mode 100644
index 000000000..ff22a55b5
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/957.txt
@@ -0,0 +1,10 @@
+• 統一若干特定的佇列動作
+• 兩指手勢以關閉播放器
+• 允許清除 reCAPTCHA cookies
+• 可選擇通知不自動渲染顏色
+• 改善影片詳情的開啟方式以修正無盡緩衝處理、分享到 NewPipe 時的行為瑕疵,以及其他不一致之處
+• 提升 YouTube 影片速度並修正年齡限制影片
+• 修正快轉/快退時的崩潰
+• 拖放縮圖時不要重新排列清單
+• 永遠記住懸浮屬性
+• 新增桑塔利語
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/958.txt b/fastlane/metadata/android/zh_Hant/changelogs/958.txt
new file mode 100644
index 000000000..6e700272f
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/958.txt
@@ -0,0 +1,15 @@
+新增及改善:
+• 重新加入在鎖定螢幕上隱藏縮圖的選項
+• 下拉以重新整理 feed
+• 改善擷取本機清單時的效能
+
+修正:
+• 修正 NewPipe 自 RAM 卸載後開啟時的崩潰
+• 修正無網際網路連線的情況下啟動時的崩潰
+• 修正以尊重亮度與音量手勢設定
+• [YouTube] 修正長的播放清單
+
+其他:
+• 代碼清理以及若干內部改進
+• 依賴套件更新
+• 翻譯更新
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/959.txt b/fastlane/metadata/android/zh_Hant/changelogs/959.txt
new file mode 100644
index 000000000..bd4298c0a
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/959.txt
@@ -0,0 +1,3 @@
+修正開啟錯誤報告工具時不斷崩潰。
+更新可由 NewPipe 自動開啟的 PeerTube 站臺清單。
+更新翻譯。
diff --git a/fastlane/metadata/android/zh_Hant/changelogs/960.txt b/fastlane/metadata/android/zh_Hant/changelogs/960.txt
new file mode 100644
index 000000000..42870ade0
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hant/changelogs/960.txt
@@ -0,0 +1,4 @@
+• 改善設定中匯出資料庫選項的描述。
+• 修正 YouTube 留言的剖析。
+• 修正 media.ccc.de 服務的顯示名稱。
+• 更新翻譯。
diff --git a/fastlane/metadata/android/zh_Hant/full_description.txt b/fastlane/metadata/android/zh_Hant/full_description.txt
index b62867c36..b6c4c771c 100644
--- a/fastlane/metadata/android/zh_Hant/full_description.txt
+++ b/fastlane/metadata/android/zh_Hant/full_description.txt
@@ -1 +1 @@
-NewPipe 不使用任何 Google 框架函式庫或是 YouTube API。它僅透過解析網夜來取得需要的資訊。因此這個應用程式可以在沒有安裝 Google 服務的裝置上運作。同時,您也不需要有 YouTube 帳號就能使用 NewPipe,它是自由與開放原始碼軟體。
+NewPipe 不使用任何 Google 框架函式庫或是 YouTube API,僅透過剖析網頁來取得需要的資訊。因此這個應用程式可以在沒有安裝 Google 服務的裝置上運作。同時,您也不需要 YouTube 帳號,就能使用 NewPipe,它是自由與開放原始碼軟體。
From adfbf5b49fade06b45c605bb7024c4ddbd9ee745 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 23 Dec 2020 12:29:13 +0100
Subject: [PATCH 106/182] Fix line breaks
---
assets/NP logo v2.svg | 42 +-
assets/NewPipe_background_just1.svg | 2504 +++++++++++++--------------
2 files changed, 1273 insertions(+), 1273 deletions(-)
diff --git a/assets/NP logo v2.svg b/assets/NP logo v2.svg
index 3332f4dd9..51fdf95de 100644
--- a/assets/NP logo v2.svg
+++ b/assets/NP logo v2.svg
@@ -1,21 +1,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/NewPipe_background_just1.svg b/assets/NewPipe_background_just1.svg
index dae3db6b3..559a622f4 100644
--- a/assets/NewPipe_background_just1.svg
+++ b/assets/NewPipe_background_just1.svg
@@ -1,1252 +1,1252 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From fc342bd458522290a5414c34665e1dadacea855c Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 23 Dec 2020 12:30:05 +0100
Subject: [PATCH 107/182] Fix typo in "playlist_ctrl_seperator_margin"
Rename to "playlist_ctrl_separator_margin"
---
app/src/main/res/layout/playlist_control.xml | 8 ++++----
app/src/main/res/values/dimens.xml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/src/main/res/layout/playlist_control.xml b/app/src/main/res/layout/playlist_control.xml
index c49380262..82220ea5b 100644
--- a/app/src/main/res/layout/playlist_control.xml
+++ b/app/src/main/res/layout/playlist_control.xml
@@ -35,8 +35,8 @@
android:id="@+id/anchorLeft"
android:layout_width="1dp"
android:layout_height="match_parent"
- android:layout_marginTop="@dimen/playlist_ctrl_seperator_margin"
- android:layout_marginBottom="@dimen/playlist_ctrl_seperator_margin"
+ android:layout_marginTop="@dimen/playlist_ctrl_separator_margin"
+ android:layout_marginBottom="@dimen/playlist_ctrl_separator_margin"
android:background="?attr/colorAccent"
android:clickable="false" />
@@ -63,8 +63,8 @@
android:id="@+id/anchorRight"
android:layout_width="1dp"
android:layout_height="match_parent"
- android:layout_marginTop="@dimen/playlist_ctrl_seperator_margin"
- android:layout_marginBottom="@dimen/playlist_ctrl_seperator_margin"
+ android:layout_marginTop="@dimen/playlist_ctrl_separator_margin"
+ android:layout_marginBottom="@dimen/playlist_ctrl_separator_margin"
android:background="?attr/colorAccent"
android:clickable="false" />
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 5ace41aaa..ed3865074 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -100,7 +100,7 @@
60dp
50dp
- 10dp
+ 10dp
14sp
16sp
From 74f43639ad54bdf0a6b2dc3e76dafa09bc85f059 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 23 Dec 2020 14:56:16 +0100
Subject: [PATCH 108/182] Added changelog for 0.20.7 (961)
---
fastlane/metadata/android/en-US/changelogs/961.txt | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100644 fastlane/metadata/android/en-US/changelogs/961.txt
diff --git a/fastlane/metadata/android/en-US/changelogs/961.txt b/fastlane/metadata/android/en-US/changelogs/961.txt
new file mode 100644
index 000000000..22bcb2df2
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/961.txt
@@ -0,0 +1,12 @@
+• [YouTube] Mix support
+• [YouTube] Display info about public broadcasters and Covid-19
+• [media.ccc.de] Added recent videos
+• Added Somali translation
+
+• Many internal improvements
+
+• Fixed sharing videos from within the player
+• Fixed blank ReCaptcha webview
+• Fixed crash which occurred when removing a stream from a list
+• [PeerTube] Fixed related streams
+• [YouTube] Fixed YouTube Music search
\ No newline at end of file
From 81bbef04dc7f46e5e2cf94e572d7713ddd2772c2 Mon Sep 17 00:00:00 2001
From: bopol
Date: Wed, 23 Dec 2020 15:14:26 +0100
Subject: [PATCH 109/182] [peertube] implement sepia search
---
app/build.gradle | 2 +-
.../newpipe/fragments/list/search/SearchFragment.java | 10 +++++++++-
.../java/org/schabi/newpipe/util/ServiceHelper.java | 1 +
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 3ac8ff525..0d3cf61a8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -179,7 +179,7 @@ dependencies {
// NewPipe dependencies
// You can use a local version by uncommenting a few lines in settings.gradle
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:85fa006214b003f21eacb76c445a167732f19981'
+ implementation 'com.github.B0pol:NewPipeExtractor:3ae924a7f18d5ee5b4aa0bd13d7179922cc094fa'
implementation "com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751"
implementation "org.jsoup:jsoup:1.13.1"
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 02dbf176b..4b7b1c3db 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
@@ -45,6 +45,8 @@ 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.extractor.services.peertube.linkHandler.PeertubeSearchQueryHandlerFactory;
+import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory;
import org.schabi.newpipe.fragments.BackPressable;
import org.schabi.newpipe.fragments.list.BaseListFragment;
import org.schabi.newpipe.local.history.HistoryRecordManager;
@@ -419,12 +421,18 @@ public class SearchFragment extends BaseListFragment
Date: Wed, 23 Dec 2020 20:06:02 +0530
Subject: [PATCH 110/182] Fix queue display in ServicePlayerActivity.
---
.../java/org/schabi/newpipe/player/ServicePlayerActivity.java | 4 ++--
1 file changed, 2 insertions(+), 2 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 41d66dc90..fd20fd175 100644
--- a/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/player/ServicePlayerActivity.java
@@ -638,12 +638,12 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
case BasePlayer.STATE_COMPLETED:
queueControlBinding.controlPlayPause.setClickable(true);
queueControlBinding.controlPlayPause.setVisibility(View.VISIBLE);
- queueControlBinding.progressBar.setVisibility(View.GONE);
+ queueControlBinding.controlProgressBar.setVisibility(View.GONE);
break;
default:
queueControlBinding.controlPlayPause.setClickable(false);
queueControlBinding.controlPlayPause.setVisibility(View.INVISIBLE);
- queueControlBinding.progressBar.setVisibility(View.VISIBLE);
+ queueControlBinding.controlProgressBar.setVisibility(View.VISIBLE);
break;
}
}
From ced3898499c1157e67cb82f176fcd128c0263506 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 23 Dec 2020 16:45:56 +0100
Subject: [PATCH 111/182] Add Somali (Af Soomaali)[so] to app language chooser
---
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 a861b9607..44e75c10c 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -1067,6 +1067,7 @@
- sc
- sk
- sl
+ - so
- sq
- sr
- sv
@@ -1144,6 +1145,7 @@
- sardu
- Slovenčina
- Slovenščina
+ - Af Soomaali
- Shqip
- Српски
- Svenska
From eddc12693ab42114132116cf79589685750a7af2 Mon Sep 17 00:00:00 2001
From: TobiGr
Date: Wed, 23 Dec 2020 19:58:02 +0100
Subject: [PATCH 112/182] [media.ccc.de] Fix service color
Caused by changing service name in TeamNewPipe/NewPipeExtractor#472
---
app/src/main/AndroidManifest.xml | 2 +-
app/src/main/java/org/schabi/newpipe/MainActivity.java | 2 +-
app/src/main/res/values-v21/styles_services.xml | 9 +++++----
app/src/main/res/values/colors_services.xml | 2 +-
app/src/main/res/values/styles_services.xml | 8 ++++----
5 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f0a38b54f..d240d123f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -266,7 +266,7 @@
-
+
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index ff078fa2c..0c784e9d5 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -129,7 +129,7 @@ public class MainActivity extends AppCompatActivity {
+ "savedInstanceState = [" + savedInstanceState + "]");
}
- // enable TLS1.1/1.2 for kitkat devices, to fix download and play for mediaCCC sources
+ // enable TLS1.1/1.2 for kitkat devices, to fix download and play for media.ccc.de sources
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
TLSSocketFactoryCompat.setAsDefault();
}
diff --git a/app/src/main/res/values-v21/styles_services.xml b/app/src/main/res/values-v21/styles_services.xml
index e5b675ef8..c495a9a31 100644
--- a/app/src/main/res/values-v21/styles_services.xml
+++ b/app/src/main/res/values-v21/styles_services.xml
@@ -12,6 +12,7 @@
+
-
-
-
-
-
-
-
-