From a4cc1d1ddfa31a24813f17e53935501035ddb574 Mon Sep 17 00:00:00 2001 From: Alex Popov Date: Mon, 10 Nov 2025 02:22:56 +0700 Subject: [PATCH 01/19] feat(player): Remember and restore orientation on fullscreen exit - Store the original screen orientation when entering fullscreen. - Restore the saved orientation when exiting fullscreen. - On tablets, continue to just toggle the fullscreen UI without changing the device orientation. --- .../fragments/detail/VideoDetailFragment.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 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 7b8705565..7c1d46945 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 @@ -206,6 +206,8 @@ public final class VideoDetailFragment int lastStableBottomSheetState = BottomSheetBehavior.STATE_EXPANDED; @State protected boolean autoPlayEnabled = true; + @State + private int originalOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; @Nullable private StreamInfo currentInfo = null; @@ -1900,22 +1902,29 @@ public final class VideoDetailFragment @Override public void onScreenRotationButtonClicked() { - // In tablet user experience will be better if screen will not be rotated - // from landscape to portrait every time. - // Just turn on fullscreen mode in landscape orientation - // or portrait & unlocked global orientation - final boolean isLandscape = DeviceUtils.isLandscape(requireContext()); - if (DeviceUtils.isTablet(activity) - && (!globalScreenOrientationLocked(activity) || isLandscape)) { - player.UIs().get(MainPlayerUi.class).ifPresent(MainPlayerUi::toggleFullscreen); + final Optional playerUi = player != null + ? player.UIs().get(MainPlayerUi.class) + : Optional.empty(); + if (playerUi.isEmpty()) { return; } - final int newOrientation = isLandscape - ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT - : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; + // On tablets, just toggle fullscreen UI without orientation change. + if (DeviceUtils.isTablet(activity)) { + playerUi.get().toggleFullscreen(); + return; + } - activity.setRequestedOrientation(newOrientation); + if (playerUi.get().isFullscreen()) { + // EXITING FULLSCREEN + playerUi.get().toggleFullscreen(); + activity.setRequestedOrientation(originalOrientation); + } else { + // ENTERING FULLSCREEN + originalOrientation = activity.getRequestedOrientation(); + playerUi.get().toggleFullscreen(); + activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + } } /* From d770c6fd880a6a97ba242a2665c423351dde5360 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Wed, 10 Dec 2025 14:46:13 +0100 Subject: [PATCH 02/19] Fix state access --- .../schabi/newpipe/fragments/detail/VideoDetailFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index 7c1d46945..5ef4b3f1e 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 @@ -207,7 +207,7 @@ public final class VideoDetailFragment @State protected boolean autoPlayEnabled = true; @State - private int originalOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; + protected int originalOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; @Nullable private StreamInfo currentInfo = null; From 17ce699037daa8a89387f40c45008ad955b3fd89 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Wed, 10 Dec 2025 14:48:08 +0100 Subject: [PATCH 03/19] Do not change orientation on TVs when entering fullscreen --- .../schabi/newpipe/fragments/detail/VideoDetailFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 5ef4b3f1e..c3b7dc8a3 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 @@ -1909,8 +1909,8 @@ public final class VideoDetailFragment return; } - // On tablets, just toggle fullscreen UI without orientation change. - if (DeviceUtils.isTablet(activity)) { + // On tablets and TVs, just toggle fullscreen UI without orientation change. + if (DeviceUtils.isTablet(activity) || DeviceUtils.isTv(activity)) { playerUi.get().toggleFullscreen(); return; } From 1212486adb5f0a6779f9fcc98786e72844ddbb81 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sat, 13 Dec 2025 16:30:36 +0800 Subject: [PATCH 04/19] libs: Update dependencies to latest stable releases Signed-off-by: Aayush Gupta --- gradle/libs.versions.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0fc252587..01b64ace9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,14 +5,14 @@ [versions] acra = "5.13.1" -agp = "8.13.1" +agp = "8.13.2" appcompat = "1.7.1" assertj = "3.27.6" autoservice-google = "1.1.1" autoservice-zacsweers = "1.2.0" bridge = "v2.0.2" cardview = "1.0.0" -checkstyle = "12.1.2" +checkstyle = "12.2.0" constraintlayout = "2.2.1" core = "1.17.0" desugar = "2.1.5" @@ -32,7 +32,7 @@ localbroadcastmanager = "1.1.0" markwon = "4.6.2" material = "1.13.0" media = "1.7.1" -mockitoCore = "5.20.0" +mockitoCore = "5.21.0" okhttp = "5.3.2" phoenix = "3.0.0" #noinspection NewerVersionAvailable,GradleDependency --> 2.8 is the last version, not 2.71828! @@ -45,10 +45,10 @@ runner = "1.7.0" rxandroid = "3.0.2" rxbinding = "4.0.0" rxjava = "3.1.12" -sonarqube = "7.0.1.6134" +sonarqube = "7.2.1.6560" statesaver = "1.4.1" # TODO: Drop because it is deprecated and incompatible with KSP2 stetho = "1.6.0" -swiperefreshlayout = "1.1.0" +swiperefreshlayout = "1.2.0" # You can use a local version by uncommenting a few lines in settings.gradle # Or you can use a commit you pushed to GitHub by just replacing TeamNewPipe with your GitHub # name and the commit hash with the commit hash of the (pushed) commit you want to test From 77bea1ac6873fabea8e9e07c5d655966c03d4bda Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sat, 13 Dec 2025 17:03:54 +0800 Subject: [PATCH 05/19] Player: Enqueue next on the existing playQueue Fixes 150649aea9f2cf55b7b006d5538aaecd2ec57f42 Signed-off-by: Aayush Gupta --- app/src/main/java/org/schabi/newpipe/player/Player.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index 39f941693..42f6cbf36 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -395,7 +395,7 @@ public final class Player implements PlaybackListener, Listener { return; } final PlayQueueItem newItem = newQueue.getStreams().get(0); - newQueue.enqueueNext(newItem, false); + playQueue.enqueueNext(newItem, false); return; } From f3876d1c4a7b2818600e96856ddaa40ad5045b5d Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 15 Dec 2025 22:02:28 +0100 Subject: [PATCH 06/19] Translated using Weblate (Danish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 98.8% (755 of 764 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Lithuanian) Currently translated at 99.2% (758 of 764 strings) Translated using Weblate (Bengali) Currently translated at 74.3% (568 of 764 strings) Co-authored-by: Agustín Cantero Co-authored-by: Dual_A Co-authored-by: Hosted Weblate Co-authored-by: MS-PC Co-authored-by: cat Co-authored-by: gymka --- app/src/main/res/values-bn/strings.xml | 6 +++++- app/src/main/res/values-da/strings.xml | 7 +++++++ app/src/main/res/values-es/strings.xml | 10 ++++++++++ app/src/main/res/values-lt/strings.xml | 22 ++++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 682b59fe3..8d767a173 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -296,7 +296,7 @@ এক প্লেয়ার থেকে অন্য প্লেয়ারে পরিবর্তন করলে তোমার সারি প্রতিস্থাপিত হতে পারে কিউ মোছার আগে নিশ্চিত করো কমপ্যাক্ট বিজ্ঞপ্তিতে প্রদর্শন করতে তুমি সর্বাধিক তিনটি ক্রিয়া নির্বাচন করতে পারো! - নিচের প্রতিটি প্রজ্ঞাপন ক্রিয়া সম্পাদনা করো। ডান দিকের চেকবাক্স ব্যবহার করে কম্প্যাক্ট নোটিফিকেশনে দেখানোর জন্য তিনটি পর্যন্ত নির্বাচন করো + নিচের প্রতিটি প্রজ্ঞাপন ক্রিয়া সম্পাদনা করুন । ডান দিকের চেকবাক্স ব্যবহার করে কম্প্যাক্ট নোটিফিকেশনে দেখানোর জন্য তিনটি পর্যন্ত নির্বাচন করুন । প্রদর্শিত ভিডিও থাম্বনেইল ১৬:৯ থেকে ১:১অনুপাতে পরিবর্তন করো ফিড ওভাররাইট @@ -628,4 +628,8 @@ ভুক্তি মুছতে ডানে-বামে সরাও সম্প্রচার বিষয়ক তথ্য প্রক্রিয়ারত… প্লেব্যাক লোড বিরতির আকার + হ্যা + না + প্লেলিস্ট + উদাহরণস্বরূপ, যদি আপনি ভাঙা ফিজিক্যাল বোতাম সহ একটি হেডসেট ব্যবহার করেন তবে এটি কার্যকর diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 62d89d60b..78f08ee85 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -834,4 +834,11 @@ %sB Slet fil Kontoen er blevet lukket\n\n%1$s angiver følgende årsag: %2$s + Likes + SoundCloud Top 50-siden fjernet + SoundCloud har udfaset de oprindelige Top 50-hitlister. Den tilhørende fane er blevet fjernet fra din hovedside. + YouTube kombineret trending fjernet + YouTube har udfaset den kombinerede trending-side pr. 21. juli 2025. NewPipe har erstattet standardsiden for trending med trending livestreams.\n\nDu kan også vælge andre trending-sider under \"Indstillinger > Indhold > Indhold på hovedsiden\". + Gaming-trends + Trending podcasts diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ffa8ad4f0..72d1f58b5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -844,4 +844,14 @@ Eliminar archivo %sM %sM + Eliminar entrada + Cuenta cancelada\n\n%1$s proporciona esta razón: %2$s + Entrada eliminada + Error HTTP 403 recibido del servidor durante la reproducción, probablemente causado por la expiración de la URL de transmisión o una prohibición de IP + Error HTTP %1$s recibido del servidor durante la reproducción + Error HTTP 403 recibido del servidor durante la reproducción, probablemente causado por una prohibición de IP o problemas de desofuscación de la URL de transmisión + %1$s se negó a proporcionar datos y solicitó un inicio de sesión para confirmar que el solicitante no es un bot.\n\nEs posible que tu IP haya sido bloqueada temporalmente por %1$s. Puedes esperar un tiempo o cambiar a una IP diferente (por ejemplo, habilitando o deshabilitando una VPN, o cambiando de WiFi a datos móviles). + %sMM + Este contenido no está disponible para el país seleccionado actualmente.\n\nCambia tu selección en «Ajustes > Contenido > País predefinido del contenido». + Para usar el reproductor emergente, seleccione %1$s en el siguiente menú de la configuración de Android y habilite %2$s. diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 91c8005ce..20419fef6 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -836,4 +836,26 @@ Grojaraščiai Antrinis Dalintis kaip laikinuoju youtube grojaraščiu + Ieškoti %1$s + Ieškoti %1$s (%2$s) + Norėdami įjungti \"Popup Grotuvą\" pasirinkite Android nustatymų meniu pasirinkite %1$s ir įjunkite %2$s. + \"Leisti piešti virš kitų langų\" + %sK + %sM + %sB + Pašalinti failą + Ištrinti įrašą + Pasirinkite kanalo grupę + Dar nėra kanalo grupės + Kanalo grupės puslapis + Paskyra pašalinta\n\n%1$s dėl šios priežasties: %2$s + Mėgsta + SoundCloud Top 50 puslapis pašalintas + SoundCloud nebeteikia Top 50. Šis puslapis pašalintas iš jūsų pagrindinio puslapio. + YouTube sujungti rekomenduojami pašalinti + Žaidimų pasiūlymai + Mėgstami podcasts + Mėgstami filmai ir laidos + Mėgstama muzika + Įrašas pašalintas From 16d02480394a6a619897768fea2bbb7dfc49d4d7 Mon Sep 17 00:00:00 2001 From: tobigr Date: Mon, 15 Dec 2025 21:49:46 +0100 Subject: [PATCH 07/19] Add fastlane changelog for NewPipe 0.28.1 (1006) --- .../metadata/android/en-US/changelogs/1006.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/1006.txt diff --git a/fastlane/metadata/android/en-US/changelogs/1006.txt b/fastlane/metadata/android/en-US/changelogs/1006.txt new file mode 100644 index 000000000..15b974b97 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/1006.txt @@ -0,0 +1,16 @@ +# Improved +Keep current player when clicking on timestamps +Try to recover pending download missions when possible +Add option to delete a download without also deleting file +Overlay Permission: display explanatory dialog for Android > R +Support on.soundcloud link opening +A lot of small improvements and optimizations + +# Fixed +Fix short count formatting for Android versions below 7 +Fix ghost notifications +Fixes for SRT subtitle files +Fixed tons of crashes + +# Development +Internal code modernization \ No newline at end of file From 698187d2d665c95b770115a9fa9d2171eeeac226 Mon Sep 17 00:00:00 2001 From: tobigr Date: Mon, 15 Dec 2025 21:54:54 +0100 Subject: [PATCH 08/19] Update extractor to latest version --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 01b64ace9..00c6d1b1b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -59,7 +59,7 @@ teamnewpipe-nanojson = "e9d656ddb49a412a5a0a5d5ef20ca7ef09549996" # the corresponding commit hash, since JitPack sometimes deletes artifacts. # If there’s already a git hash, just add more of it to the end (or remove a letter) # to cause jitpack to regenerate the artifact. -teamnewpipe-newpipe-extractor = "76eb2008cab3fbbbe547135e7bfa3d2e8e32a7d1" +teamnewpipe-newpipe-extractor = "cde6f875e01357ff74068c42b61e33371b9ea871" viewpager2 = "1.1.0" webkit = "1.14.0" work = "2.10.5" # Newer versions require minSdk >= 23 From 097c643d1be02115ff3595ac59844e1f0d3ad24a Mon Sep 17 00:00:00 2001 From: Tobi Date: Mon, 15 Dec 2025 05:22:00 -0800 Subject: [PATCH 09/19] Add AI policy to contribution guidelines, PR and issue templates The amount of AI generated PRs is increasing while their quality often remains poor. The introduced guidelines aim to reduce the number of poor quality AI PRs while simultaneously increasing the quality of high quality AI PRs. New checkboxes for compliance with the AI policy and to increase the PR quality are introduced to the PR template. Prohibit AI generated issue and PR descriptions --- .github/CONTRIBUTING.md | 13 +++++++++++++ .github/ISSUE_TEMPLATE/bug_report.yml | 2 ++ .github/ISSUE_TEMPLATE/feature_request.yml | 2 ++ .github/PULL_REQUEST_TEMPLATE.md | 2 ++ 4 files changed, 19 insertions(+) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 686ae233a..069f003f4 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -3,6 +3,19 @@ NewPipe contribution guidelines =============================== +## AI policy + +* Using generative AI to develop new features or making larger code changes is generally prohibited. Please refrain from contributions which are heavily depending on AI generated source code because they are usually lacking a fundamental understanding of the overall project structure and thus come with poor quality. However, you are allowed to use gen. AI if you + * are aware of the project structure, + * ensure that the generated code follows the project structure, + * fully understand the generated code, and + * review the generated code completely. +* Using AI to find the root cause of bugs and generating small fixes might be acceptable. However, gen. AI often does not fix the underlying problem but is trying to fix the symptoms. If you are using AI to fix bugs, ensure that the root cause is tackled. +* The use of AI to generate documentation is allowed. We ask you to thoroughly check the quality of generated documentation – wrong, misleading or uninformative documentation is useless and wastes the reader's time. Ensure that reasoning is documented. +* Using generative AI to write or fill in PR or issue templates is prohibited. Those texts are often lengthy and miss critical information. +* PRs and issues that do not follow this AI policy can be closed without further explanation. + + ## Crash reporting Report crashes through the **automated crash report system** of NewPipe. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 52897f1ac..60c94ad25 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -26,6 +26,8 @@ body: required: true - label: "I have read and understood the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/dev/.github/CONTRIBUTING.md)." required: true + - label: "I have read and understood the [AI policy](https://github.com/TeamNewPipe/NewPipe/blob/dev/.github/CONTRIBUTING.md#ai-policy). The content of this bug report is not generated by AI." + required: true - type: input id: app-version diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 31ef92c44..97a3e38b5 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -25,6 +25,8 @@ body: required: true - label: "I have read and understood the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/dev/.github/CONTRIBUTING.md)." required: true + - label: "I have read and understood the [AI policy](https://github.com/TeamNewPipe/NewPipe/blob/dev/.github/CONTRIBUTING.md#ai-policy). The content of this request is not generated by AI." + required: true - type: textarea diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2062e840d..2af1556d4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -32,3 +32,5 @@ The APK can be found by going to the "Checks" tab below the title. On the left p #### Due diligence - [ ] I read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md). +- [ ] The proposed changes follow the [AI policy](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md#ai-policy). +- [ ] I tested the changes using an emulator or a physical device. From 0607b14bb24a4fa8ef4d13d329dbd4d79bbb2306 Mon Sep 17 00:00:00 2001 From: Damien Hardy Date: Wed, 17 Dec 2025 18:52:23 +0100 Subject: [PATCH 10/19] add indymotion.fr peertube instance on AndroidManifest.xml --- app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3da97f268..20e9a6ca9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -385,6 +385,7 @@ + From 86fb618f616e51e42673a5358a93ca6aabf8736f Mon Sep 17 00:00:00 2001 From: tobigr Date: Fri, 19 Dec 2025 12:01:38 +0100 Subject: [PATCH 11/19] Update NewPipe Extractor --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 00c6d1b1b..02c89fcef 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -59,7 +59,7 @@ teamnewpipe-nanojson = "e9d656ddb49a412a5a0a5d5ef20ca7ef09549996" # the corresponding commit hash, since JitPack sometimes deletes artifacts. # If there’s already a git hash, just add more of it to the end (or remove a letter) # to cause jitpack to regenerate the artifact. -teamnewpipe-newpipe-extractor = "cde6f875e01357ff74068c42b61e33371b9ea871" +teamnewpipe-newpipe-extractor = "05e0e4ced7b6ff05f3d68d831efed8bdf588f9ac" viewpager2 = "1.1.0" webkit = "1.14.0" work = "2.10.5" # Newer versions require minSdk >= 23 From acaaec2cdef3d632ec579ffc365ad2d6eb760919 Mon Sep 17 00:00:00 2001 From: Hatake Kakashri Date: Wed, 19 Nov 2025 22:36:54 +0530 Subject: [PATCH 12/19] Add enqueue option to router dialog - This allows users to enqueue a stream directly to the current player queue when sharing a link with the app, improving the user experience for queue management. - The 'Enqueue' option is now available in the action selection dialog and can also be set as the preferred open action in the settings. --- .../java/org/schabi/newpipe/RouterActivity.java | 16 +++++++++++++--- app/src/main/res/values/settings_keys.xml | 3 +++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java index 50639c5ae..5e25079b5 100644 --- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java +++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java @@ -316,7 +316,8 @@ public class RouterActivity extends AppCompatActivity { if (choiceChecker.isAvailableAndSelected( R.string.video_player_key, R.string.background_player_key, - R.string.popup_player_key)) { + R.string.popup_player_key, + R.string.enqueue_key)) { final String selectedChoice = choiceChecker.getSelectedChoiceKey(); @@ -329,6 +330,8 @@ public class RouterActivity extends AppCompatActivity { || selectedChoice.equals(getString(R.string.popup_player_key)); final boolean isAudioPlayerSelected = selectedChoice.equals(getString(R.string.background_player_key)); + final boolean isEnqueueSelected = + selectedChoice.equals(getString(R.string.enqueue_key)); if (currentLinkType != LinkType.STREAM && ((isExtAudioEnabled && isAudioPlayerSelected) @@ -345,7 +348,9 @@ public class RouterActivity extends AppCompatActivity { // Check if the service supports the choice if ((isVideoPlayerSelected && capabilities.contains(VIDEO)) - || (isAudioPlayerSelected && capabilities.contains(AUDIO))) { + || (isAudioPlayerSelected && capabilities.contains(AUDIO)) + || (isEnqueueSelected && (capabilities.contains(VIDEO) + || capabilities.contains(AUDIO)))) { handleChoice(selectedChoice); } else { handleChoice(getString(R.string.show_info_key)); @@ -544,7 +549,10 @@ public class RouterActivity extends AppCompatActivity { // not be added to a playlist returnedItems.add(new AdapterChoiceItem(getString(R.string.add_to_playlist_key), getString(R.string.add_to_playlist), - R.drawable.ic_add)); + R.drawable.ic_playlist_add)); + + returnedItems.add(new AdapterChoiceItem(getString(R.string.enqueue_key), + getString(R.string.enqueue_stream), R.drawable.ic_add)); } else { // LinkType.NONE is never present because it's filtered out before // channels and playlist can be played as they contain a list of videos @@ -1016,6 +1024,8 @@ public class RouterActivity extends AppCompatActivity { NavigationHelper.playOnBackgroundPlayer(this, playQueue, true); } else if (choice.playerChoice.equals(popupPlayerKey)) { NavigationHelper.playOnPopupPlayer(this, playQueue, true); + } else if (choice.playerChoice.equals(getString(R.string.enqueue_key))) { + NavigationHelper.enqueueOnPlayer(this, playQueue); } }; } diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 352e4cec1..ab6e9e345 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -479,6 +479,7 @@ popup_player download add_to_playlist + enqueue always_ask_player @@ -488,6 +489,7 @@ @string/popup_player @string/download @string/add_to_playlist + @string/enqueue_stream @string/always_ask_open_action @@ -498,6 +500,7 @@ @string/download_key @string/add_to_playlist_key @string/always_ask_open_action_key + @string/enqueue_key From 5582eac1c45aa1ce0fc967ae1b437fee5b1beb42 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Sun, 14 Dec 2025 13:07:14 +0100 Subject: [PATCH 13/19] Only show enqueue option if play queue is not empty in RouterActivity Make enqueue option avilable for playlists as well --- .../org/schabi/newpipe/RouterActivity.java | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java index 5e25079b5..eb5257354 100644 --- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java +++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java @@ -531,7 +531,7 @@ public class RouterActivity extends AppCompatActivity { final List capabilities = service.getServiceInfo().getMediaCapabilities(); - if (linkType == LinkType.STREAM) { + if (linkType == LinkType.STREAM || linkType == LinkType.PLAYLIST) { if (capabilities.contains(VIDEO)) { returnedItems.add(videoPlayer); returnedItems.add(popupPlayer); @@ -539,20 +539,28 @@ public class RouterActivity extends AppCompatActivity { if (capabilities.contains(AUDIO)) { returnedItems.add(backgroundPlayer); } - // download is redundant for linkType CHANNEL AND PLAYLIST (till playlist downloading is - // not supported ) - returnedItems.add(new AdapterChoiceItem(getString(R.string.download_key), - getString(R.string.download), - R.drawable.ic_file_download)); - // Add to playlist is not necessary for CHANNEL and PLAYLIST linkType since those can - // not be added to a playlist - returnedItems.add(new AdapterChoiceItem(getString(R.string.add_to_playlist_key), - getString(R.string.add_to_playlist), - R.drawable.ic_playlist_add)); + // Enqueue is only shown if the current queue is not empty. + // However, if the playqueue or the player is cleared after this item was chosen and + // while the item is extracted, it will automatically fall back to background player. + if (PlayerHolder.INSTANCE.getQueueSize() > 0) { + returnedItems.add(new AdapterChoiceItem(getString(R.string.enqueue_key), + getString(R.string.enqueue_stream), R.drawable.ic_add)); + } - returnedItems.add(new AdapterChoiceItem(getString(R.string.enqueue_key), - getString(R.string.enqueue_stream), R.drawable.ic_add)); + if (linkType == LinkType.STREAM) { + // download is redundant for linkType CHANNEL AND PLAYLIST + // (till playlist downloading is not supported ) + returnedItems.add(new AdapterChoiceItem(getString(R.string.download_key), + getString(R.string.download), + R.drawable.ic_file_download)); + + // Add to playlist is not necessary for CHANNEL and PLAYLIST linkType + // since those can not be added to a playlist + returnedItems.add(new AdapterChoiceItem(getString(R.string.add_to_playlist_key), + getString(R.string.add_to_playlist), + R.drawable.ic_playlist_add)); + } } else { // LinkType.NONE is never present because it's filtered out before // channels and playlist can be played as they contain a list of videos From 535f9da42281ce72cf5349814e16ed36b18ac9c3 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Sat, 20 Dec 2025 21:23:38 +0100 Subject: [PATCH 14/19] Fix rebase --- app/src/main/java/org/schabi/newpipe/RouterActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java index eb5257354..d85fdf7de 100644 --- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java +++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java @@ -543,7 +543,7 @@ public class RouterActivity extends AppCompatActivity { // Enqueue is only shown if the current queue is not empty. // However, if the playqueue or the player is cleared after this item was chosen and // while the item is extracted, it will automatically fall back to background player. - if (PlayerHolder.INSTANCE.getQueueSize() > 0) { + if (PlayerHolder.getInstance().getQueueSize() > 0) { returnedItems.add(new AdapterChoiceItem(getString(R.string.enqueue_key), getString(R.string.enqueue_stream), R.drawable.ic_add)); } From 3c0e6adf2eeaefefd6e58467381115e638247b13 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 19 Dec 2025 10:01:50 +0100 Subject: [PATCH 15/19] Translated using Weblate (Hungarian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (87 of 87 strings) Translated using Weblate (French) Currently translated at 100.0% (87 of 87 strings) Translated using Weblate (German) Currently translated at 100.0% (87 of 87 strings) Translated using Weblate (Italian) Currently translated at 100.0% (87 of 87 strings) Translated using Weblate (Polish) Currently translated at 58.6% (51 of 87 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (87 of 87 strings) Translated using Weblate (Czech) Currently translated at 100.0% (87 of 87 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (87 of 87 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (87 of 87 strings) Co-authored-by: Agnieszka C Co-authored-by: Fjuro Co-authored-by: Ghost of Sparta Co-authored-by: Mickaël Binos Co-authored-by: Milan Co-authored-by: Random Co-authored-by: VfBFan Co-authored-by: tct123 Co-authored-by: 大王叫我来巡山 Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/cs/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/fr/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/hu/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sk/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/ Translation: NewPipe/Metadata --- .../metadata/android/cs/changelogs/1006.txt | 16 +++++++++++++++ .../metadata/android/de/changelogs/1006.txt | 16 +++++++++++++++ .../metadata/android/de/changelogs/63.txt | 2 +- .../metadata/android/de/changelogs/68.txt | 6 +++--- .../metadata/android/de/changelogs/69.txt | 19 +++++++++--------- .../metadata/android/de/changelogs/70.txt | 2 +- .../metadata/android/de/changelogs/71.txt | 14 +++++++------ .../metadata/android/de/changelogs/730.txt | 2 +- .../metadata/android/de/changelogs/740.txt | 14 ++++++------- .../metadata/android/de/changelogs/750.txt | 20 +++++++++---------- .../metadata/android/de/changelogs/952.txt | 4 ++-- .../metadata/android/fr/changelogs/1006.txt | 17 ++++++++++++++++ .../metadata/android/hu/changelogs/1006.txt | 16 +++++++++++++++ .../metadata/android/it/changelogs/1006.txt | 16 +++++++++++++++ .../metadata/android/pl/changelogs/1006.txt | 16 +++++++++++++++ .../metadata/android/sk/changelogs/1006.txt | 16 +++++++++++++++ .../android/zh-Hans/changelogs/1005.txt | 16 +++++++++++++++ .../android/zh-Hans/changelogs/1006.txt | 16 +++++++++++++++ .../android/zh-Hans/changelogs/991.txt | 13 ++++++++++++ .../android/zh-Hans/changelogs/992.txt | 17 ++++++++++++++++ .../android/zh-Hans/changelogs/993.txt | 12 +++++++++++ .../android/zh-Hans/changelogs/994.txt | 15 ++++++++++++++ .../android/zh-Hans/changelogs/995.txt | 16 +++++++++++++++ .../android/zh-Hans/changelogs/996.txt | 2 ++ .../android/zh-Hans/changelogs/997.txt | 17 ++++++++++++++++ 25 files changed, 280 insertions(+), 40 deletions(-) create mode 100644 fastlane/metadata/android/cs/changelogs/1006.txt create mode 100644 fastlane/metadata/android/de/changelogs/1006.txt create mode 100644 fastlane/metadata/android/fr/changelogs/1006.txt create mode 100644 fastlane/metadata/android/hu/changelogs/1006.txt create mode 100644 fastlane/metadata/android/it/changelogs/1006.txt create mode 100644 fastlane/metadata/android/pl/changelogs/1006.txt create mode 100644 fastlane/metadata/android/sk/changelogs/1006.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/1005.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/1006.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/991.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/992.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/993.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/994.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/995.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/996.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/997.txt diff --git a/fastlane/metadata/android/cs/changelogs/1006.txt b/fastlane/metadata/android/cs/changelogs/1006.txt new file mode 100644 index 000000000..11a6f4cca --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/1006.txt @@ -0,0 +1,16 @@ +# Vylepšení +Ponechání aktuálního přehrávače při klepnutí na časová razítka +Pokus o obnovení čekajících stahování, pokud to jde +Možnost odstranění stahování bez smazání souboru +Oprávnění Zobrazení přes ostatní aplikace: zobrazení vysvětlení pro Android > R +Podpora odkazů on.soundcloud +Spousta malých vylepšení a optimalizací + +# Opravy +Oprava formátování pro verze Androidu nižší než 7 +Oprava falešných oznámení +Opravy souborů titulků SRT +Oprava spousty pádů + +# Vývoj +Interní modernizace kódu diff --git a/fastlane/metadata/android/de/changelogs/1006.txt b/fastlane/metadata/android/de/changelogs/1006.txt new file mode 100644 index 000000000..811138c07 --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/1006.txt @@ -0,0 +1,16 @@ +# Verbesserungen +Aktuellen Player beim Klick auf Zeitstempel beibehalten +Wiederherstellen ausstehender Downloadaufträge +Downloads löschen, ohne gleichzeitiges Löschen der Datei +Overlay-Berechtigung: Erklärendes Dialogfeld für Android > R +Unterstützung von on.soundcloud-Links +Viele kleine Verbesserungen und Optimierungen + +# Behoben +Kurzformatierung für Android-Versionen unter 7 +Geisterbenachrichtigungen +SRT-Untertiteldateien +Zahlreiche Abstürze + +# Entwicklung +Modernisierung des internen Codes diff --git a/fastlane/metadata/android/de/changelogs/63.txt b/fastlane/metadata/android/de/changelogs/63.txt index 3ccc56bc0..7ae7873fb 100644 --- a/fastlane/metadata/android/de/changelogs/63.txt +++ b/fastlane/metadata/android/de/changelogs/63.txt @@ -4,5 +4,5 @@ - Kleine Codeverbesserungen #1375 - Alles über DSGVO hinzugefügt #1420 -### Repariert +### Behoben - Downloader: Absturz beim Laden unvollendeter Downloads von .giga-Dateien behoben #1407 diff --git a/fastlane/metadata/android/de/changelogs/68.txt b/fastlane/metadata/android/de/changelogs/68.txt index f700b3d26..9d37a92fc 100644 --- a/fastlane/metadata/android/de/changelogs/68.txt +++ b/fastlane/metadata/android/de/changelogs/68.txt @@ -1,12 +1,12 @@ # Änderungen von v0.14.1 -### Fixed +### Behoben - nicht entschlüsselt Video url #1659 - Beschreibungs Link nicht extrahierbar #1657 # Änderungen von v0.14.0 -### New +### Neu - Neues Schubladendesign #1461 - Neue anpassbare Titelseite #1461 @@ -14,6 +14,6 @@ - Reworked Gesture Controls #1604 - Neue Möglichkeit, den Pop-up-Player #1597 zu schließen -### Fixed +### Behoben - Fehler beheben, wenn die Anzahl der Abonnements nicht verfügbar ist. Schließt #1649. - Zeigen Sie "Abonnentenzählung nicht verfügbar" in diesen Fällen. diff --git a/fastlane/metadata/android/de/changelogs/69.txt b/fastlane/metadata/android/de/changelogs/69.txt index 8802508a3..3e8cb3a6e 100644 --- a/fastlane/metadata/android/de/changelogs/69.txt +++ b/fastlane/metadata/android/de/changelogs/69.txt @@ -1,14 +1,15 @@ -### New -- Long-tap Löschen & Teilen in Abonnements #1516 -- Tablet UI & Rasterlistenlayout #1617 +### Neu +- Langes Tippen zum Löschen/Teilen in Abonnements #1516 +- Tablet-UI und Rasterlistenlayout #1617 ### Verbesserungen -- Speichern und Nachladen des zuletzt verwendeten Seitenverhältnisses #1748 -- Separate Einstellungen für Lautstärke & Helligkeitsgesten #1644 +- Speichern/Neuladen des zuletzt verwendeten Seitenverhältnisses #1748 +- Separate Einstellungen für Lautstärke-/Helligkeitsgesten #1644 +- Unterstützung für Lokalisierung #1792 -### Fixes +### Fehlerbehebungen - Anzahl der Abonnements -- Foreground Service Erlaubnis für API 28+ Geräte #1830 hinzugefügt +- Vordergrund-Dienstberechtigung für Geräte mit API 28+ hinzugefügt #1830 -### Known Bugs -- Wiedergabe kann nicht auf Android P gespeichert werden +### Bekannte Fehler +- Wiedergabestatus wird unter Android P nicht gespeichert diff --git a/fastlane/metadata/android/de/changelogs/70.txt b/fastlane/metadata/android/de/changelogs/70.txt index 59a09b210..b31f83720 100644 --- a/fastlane/metadata/android/de/changelogs/70.txt +++ b/fastlane/metadata/android/de/changelogs/70.txt @@ -5,6 +5,6 @@ ACHTUNG: Diese Version ist wahrscheinlich ein Bugfest. * Drop-Unterstützung für Android 4.1 - 4.3 #1884 * Streams aus der aktuellen Warteschlange entfernt, indem sie nach rechts swipen #1915 -### Fixed +### Behoben * Crash mit Standard-Auflösung eingestellt auf beste und begrenzte mobile Datenauflösung #1835 * Pop-up-Spieler-Absturz behoben #1874 diff --git a/fastlane/metadata/android/de/changelogs/71.txt b/fastlane/metadata/android/de/changelogs/71.txt index 0132de3c3..86d1d52d9 100644 --- a/fastlane/metadata/android/de/changelogs/71.txt +++ b/fastlane/metadata/android/de/changelogs/71.txt @@ -1,8 +1,10 @@ ### Verbesserungen -* App-Update-Benachrichtigung für GitHub build hinzufügen (#1608 von @krtkush) -* Verschiedene Verbesserungen des Downloaders (#1944 von @kapodamy): -* Fügen Sie fehlende weiße Icons hinzu und verwenden Sie hardcored Weg, um die Icon Farben zu ändern -* neue MPEG-4 muxer fixieren nicht-synchrone Video- und Audiostreams (#2039) +* Benachrichtigung über App-Updates für GitHub-Build (#1608 von @krtkush) +* Verschiedene Verbesserungen am Downloader (#1944 von @kapodamy): + * Weiße Symbole und Hardcoded-Methode zum Ändern der Symbolfarben + * Überprüfung, ob der Iterator initialisiert ist (behebt #2031) + * Erlaubt erneute Downloads mit dem Fehler „Nachbearbeitung fehlgeschlagen“ im neuen Muxer + * Neuer MPEG-4-Muxer (#2039) -### Fixed -* YouTube Live-Streams spielen nach kurzer Zeit (#1996 von @yausername) +### Behoben +* YouTube-Livestreams werden nicht abgespielt (#1996 von @yausername) diff --git a/fastlane/metadata/android/de/changelogs/730.txt b/fastlane/metadata/android/de/changelogs/730.txt index 12c5ffb16..dc534fea2 100644 --- a/fastlane/metadata/android/de/changelogs/730.txt +++ b/fastlane/metadata/android/de/changelogs/730.txt @@ -1,2 +1,2 @@ # Behoben -- erneuter Hotfix des Entschlüsselungsfunktionsfehlers. +- Fehler bei der Entschlüsselungsfunktion erneut behoben. diff --git a/fastlane/metadata/android/de/changelogs/740.txt b/fastlane/metadata/android/de/changelogs/740.txt index 0d28a157a..063e5a3c7 100644 --- a/fastlane/metadata/android/de/changelogs/740.txt +++ b/fastlane/metadata/android/de/changelogs/740.txt @@ -1,12 +1,12 @@

Verbesserungen

    -
  • Make Links in Kommentare klickbar, erhöhen Textgröße
  • -
  • seek zum Klicken von Zeitstempel-Links in Kommentare
  • -
  • Beliebte Registerkarte basierend auf kürzlich ausgewähltem Zustand anzeigen
  • -
  • Add-Unterstützung für Invidious links
  • +
  • Links in Kommentaren anklickbar machen, Textgröße erhöhen
  • +
  • Bei Anklicken von Zeitstempel-Links in Kommentaren suchen
  • +
  • Bevorzugte Registerkarte basierend auf zuletzt ausgewähltem Status anzeigen
  • +
  • Unterstützung für Invidious-Links
-

Fixed

+

Behoben

    -
  • fixed scroll w/kommentare und verwandten Streams deaktiviert
  • -
  • fixiert CheckForNewAppVersionTask wird ausgeführt, wenn es sollten't
  • +
  • Scrollen mit deaktivierten Kommentaren und verwandten Streams behoben
  • +
  • CheckForNewAppVersionTask wird nicht mehr ausgeführt, wenn es nicht sollte
diff --git a/fastlane/metadata/android/de/changelogs/750.txt b/fastlane/metadata/android/de/changelogs/750.txt index 78a25282a..5dd4766df 100644 --- a/fastlane/metadata/android/de/changelogs/750.txt +++ b/fastlane/metadata/android/de/changelogs/750.txt @@ -1,15 +1,15 @@ Neu -Playback Lebenslauf #2288 -• Resume Streams, wo Sie letztes Mal aufgehört haben -Downloader Verbesserungen #2149 - +Wiedergabe fortsetzen #2288 +Downloader-Verbesserungen #2149 Verbessert -• Gemaketten entfernen #2295 -• Handle (auto)Rotationsänderungen während des Aktivitätszyklus #2444 +• GEMA-Strings entfernt #2295 +• (Automatische) Rotationsänderungen #2444 +• Menüs bei langem Drücken #2368 Behoben -• Fixed Downloads bei 99,9% #2440 -• Aktualisieren der Spielwarteschlange Metadaten #2453 -• [SoundCloud] Fester Absturz beim Laden von Wiedergabelisten TeamNewPipe/NewPipeExtractor#170 -• [YouTube] Feste Dauer kann nicht paresd TeamNewPipe/NewPipeExtractor#177 +• Untertitelnamenanzeige #2394 +• Absturz, wenn die Überprüfung auf App-Updates fehlschlägt (GitHub-Version) #2423 +• Downloads, die bei 99,9 % hängen bleiben #2440 +• Metadaten der Wiedergabeliste aktualisieren #2453 +• [SoundCloud] Absturz beim Laden von Wiedergabelisten TeamNewPipe/NewPipeExtractor#170 diff --git a/fastlane/metadata/android/de/changelogs/952.txt b/fastlane/metadata/android/de/changelogs/952.txt index 309b02b09..33e1cbc23 100644 --- a/fastlane/metadata/android/de/changelogs/952.txt +++ b/fastlane/metadata/android/de/changelogs/952.txt @@ -1,7 +1,7 @@ -Verbesserungen +Verbessert • Autoplay ist nun für alle Services verfügbar (nicht nur für YouTube) -Reparaturen +Behoben • 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/fr/changelogs/1006.txt b/fastlane/metadata/android/fr/changelogs/1006.txt new file mode 100644 index 000000000..a9ed2c642 --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/1006.txt @@ -0,0 +1,17 @@ +# Améliorations +Conservation du lecteur en cours lors du clic sur les horodatages +Tentative de récupération des téléchargements en attente +Ajout d'une option pour supprimer un téléchargement sans supprimer le fichier +Autorisation de superposition : affichage d'une boîte de dialogue explicative pour Android > R +Prise en charge de l'ouverture des liens .soundcloud + +Nombreuses améliorations et optimisations mineures + +# Corrections +Correction du formatage du nombre court pour les versions Android inférieures à 7 +Correction des notifications fantômes +Corrections pour les fichiers de sous-titres SRT +Correction de nombreux plantages + +# Développement +Modernisation du code interne diff --git a/fastlane/metadata/android/hu/changelogs/1006.txt b/fastlane/metadata/android/hu/changelogs/1006.txt new file mode 100644 index 000000000..3d0cba88f --- /dev/null +++ b/fastlane/metadata/android/hu/changelogs/1006.txt @@ -0,0 +1,16 @@ +# Továbbfejlesztve +Az aktuális lejátszó megmarad időbélyegre kattintáskor +Függőben lévő letöltések helyreállításának megkísérlése +Letöltés törlése a fájl megtartásával +Overlay engedélyhez magyarázó párbeszédablak (Android 11+) +on.soundcloud hivatkozások támogatása +Sok kisebb fejlesztés és optimalizálás + +# Javítva +Számozás javítása Android 7 alatt +Szellem értesítések javítása +SRT felirat javítások +Sok összeomlás javítva + +# Fejlesztés +Belső kód modernizálása diff --git a/fastlane/metadata/android/it/changelogs/1006.txt b/fastlane/metadata/android/it/changelogs/1006.txt new file mode 100644 index 000000000..f7cbbf868 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/1006.txt @@ -0,0 +1,16 @@ +# Migliorie +Tieni il player attuale se si cliccano le marche temporali +Recupera i download in sospeso se possibile +Opzione per eliminare un download senza anche eliminare il file +Autorizzazione di sovrapposizione: mostra finestra esplicativa per Android > R +Supporto per link on.soundcloud +Tanti piccoli miglioramenti e ottimizzazioni + +# Correzioni +Formattazione breve del conto per Android < 7 +Notifiche fantasma +File di sottotitoli SRT +Crash vari + +# Sviluppo +Ammodernamento del codice interno diff --git a/fastlane/metadata/android/pl/changelogs/1006.txt b/fastlane/metadata/android/pl/changelogs/1006.txt new file mode 100644 index 000000000..a537d7c18 --- /dev/null +++ b/fastlane/metadata/android/pl/changelogs/1006.txt @@ -0,0 +1,16 @@ +Ulepszone +- Utrzymyw. bieżącego odtwarzacza przy naciskaniu znaczników czasu +- Próba odzysk. oczekuj. pobierań, jeśli to możliwe +- Dodano opcję usuwania pobierania bez usuwania pliku +- Uprawnienie na nakładkę: wyświetl. okna z objaśnieniami dla Androida powyżej R +- Obsługa otw. linków on.soundcloud +- Wiele drobnych ulepszeń i optymal. + +Naprawione +- Formatow. krótkich liczb na Androidzie poniżej 7 +- Puste powiadomienia +- Pliki napisów SRT +- Mnóstwo awarii + +Rozwój +- Modernizacja wewnętrznego kodu diff --git a/fastlane/metadata/android/sk/changelogs/1006.txt b/fastlane/metadata/android/sk/changelogs/1006.txt new file mode 100644 index 000000000..943b4ff5c --- /dev/null +++ b/fastlane/metadata/android/sk/changelogs/1006.txt @@ -0,0 +1,16 @@ +# Vylepšené +Aktuálny prehrávač zostane zachovaný pri kliknutí na časové značky +Ak je to možné, pokúsi sa obnoviť čakajúce úlohy sťahovania +Pridaná možnosť odstrániť sťahovanie bez odstránenia súboru +Oprávnenie zobrazenia cez ostatné aplikácie: zobrazí vysvetlenie pre Android > R +Podpora otvárania odkazov on.soundcloud +Množstvo malých vylepšení a optimalizácií + +# Opravené +Oprava formátovania krátkeho počítania pre verzie Androidu nižšie ako 7 +Oprava klamných oznámení +Oprava súborov titulkov SRT +Oprava množstva zlyhaní + +# Vývoj +Modernizácia interného kódu diff --git a/fastlane/metadata/android/zh-Hans/changelogs/1005.txt b/fastlane/metadata/android/zh-Hans/changelogs/1005.txt new file mode 100644 index 000000000..baf746b18 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/1005.txt @@ -0,0 +1,16 @@ +新增 +• 新增对 Android Auto 的支持 +• 允许将信息流分组设置为主屏幕标签页 +• [YouTube] 以临时播放列表的形式分享 +• [SoundCloud] 新增“喜欢”频道标签页 + +改进 +• 优化搜索栏提示 +• 在“下载”中显示下载日期 +• 使用 Android 13 的应用内语言 +修复 +• 修复深色模式下文本颜色显示错误 +• [YouTube] 修复播放列表加载超过 100 个项目时无法加载的问题 +• [YouTube] 修复推荐视频缺失的问题 +• 修复历史记录列表视图中的崩溃问题 +• 修复评论回复中的时间戳显示错误 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/1006.txt b/fastlane/metadata/android/zh-Hans/changelogs/1006.txt new file mode 100644 index 000000000..a3a089068 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/1006.txt @@ -0,0 +1,16 @@ +# 改进 +单击时间戳时保持当前播放器 +尽可能恢复未完成的下载任务 +新增选项,允许删除下载项而不删除文件 +叠加层权限:在 Android R 及以上版本中显示说明对话框 +支持打开 on.soundcloud 链接 +大量小改进和优化 + +# 修复 +修复 Android 7 以下版本短计数格式问题 +修复幽灵通知 +修复 SRT 字幕文件问题 +修复大量崩溃问题 + +# 开发 +内部代码现代化 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/991.txt b/fastlane/metadata/android/zh-Hans/changelogs/991.txt new file mode 100644 index 000000000..c4ca761f4 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/991.txt @@ -0,0 +1,13 @@ +新增 +• 在错误面板中添加“在浏览器中打开”按钮 +• 新增以列表形式显示频道组的选项 +• [YouTube] 长按视频片段即可分享时间戳 URL +• 在迷你播放器中添加播放队列按钮 + +改进 +• 新增冰岛语本地化并更新了其他多种语言的翻译 +• 多项内部改进 + +修复 +• 修复多个崩溃问题 +• [YouTube] 修复部分国家/地区频道加载、非专用源播放以及播放问题 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/992.txt b/fastlane/metadata/android/zh-Hans/changelogs/992.txt new file mode 100644 index 000000000..ca8e1733d --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/992.txt @@ -0,0 +1,17 @@ +新增 +• 视频详情页显示订阅者数量 +• 从播放队列下载 +• 永久设置播放列表缩略图 +• 长按话题标签和链接 +• 卡片视图模式 + +改进 +• 更大的迷你播放器关闭按钮 +• 更流畅的缩略图缩放 +• 目标平台:Android 13 (API 33) +• 快进/快退操作不再导致播放器暂停 + +修复 +• 修复 DeX/鼠标上的叠加层问题 +• 允许后台播放,无需单独的音频流 +• 其他 YouTube 相关问题修复及更多… diff --git a/fastlane/metadata/android/zh-Hans/changelogs/993.txt b/fastlane/metadata/android/zh-Hans/changelogs/993.txt new file mode 100644 index 000000000..abe5b8f27 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/993.txt @@ -0,0 +1,12 @@ +新增 +• 添加重复播放列表时发出警告,并添加删除按钮 +• 允许忽略硬件按钮 +• 允许在信息流中隐藏已观看但未完成的视频 + +改进 +• 在大屏幕上使用更多网格列 +• 使进度指示器与设置保持一致 + +修复 +• 修复在 Android 11 及更高版本上打开浏览器 URL、下载和外部播放器的问题 +• 修复在 MIUI 系统上全屏交互需要点击两次的问题 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/994.txt b/fastlane/metadata/android/zh-Hans/changelogs/994.txt new file mode 100644 index 000000000..38bfed7d0 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/994.txt @@ -0,0 +1,15 @@ +新增 +• 支持多音轨/多语言 +• 允许在屏幕任意一侧使用手势调节音量和亮度 +• 支持在屏幕底部显示主标签页 + +改进 +• [Bandcamp] 处理付费墙后的曲目 + +修复 +• [YouTube] 修复流媒体播放的 403 HTTP 错误 +• 修复从播放列表视图切换到主播放器时播放器黑屏的问题 +• 修复播放器服务内存泄漏问题 +• [PeerTube] 上传者和子频道头像互换的问题 + +以及更多 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/995.txt b/fastlane/metadata/android/zh-Hans/changelogs/995.txt new file mode 100644 index 000000000..4cd4d2b80 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/995.txt @@ -0,0 +1,16 @@ +新增 +• 支持频道标签页 +• 可选择图像质量 +• 获取所有图像的 URL + +改进 +• 播放器界面更易于访问 +• 改进仅下载视频时的音频选择 +• 可选择在共享播放列表内容中包含播放列表和视频名称 + +修复 +• [YouTube] 修复获取点赞数的问题 +• 修复播放器无响应的弹出窗口和崩溃问题 +• 修复语言选择器中选择错误语言的问题 +• 修复播放器音频焦点未响应静音设置的问题 +• 修复播放列表项目添加功能偶尔失效的问题 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/996.txt b/fastlane/metadata/android/zh-Hans/changelogs/996.txt new file mode 100644 index 000000000..4773b420b --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/996.txt @@ -0,0 +1,2 @@ +修复了在 media.ccc.de 中打开频道/会议时出现的 NullPointerException 异常。 +圣诞怪杰试图破坏我们送给大家的圣诞礼物,但我们已经解决了这个问题。 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/997.txt b/fastlane/metadata/android/zh-Hans/changelogs/997.txt new file mode 100644 index 000000000..a7cd06bd6 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/997.txt @@ -0,0 +1,17 @@ +新增 +• 添加评论回复 +• 允许重新排序播放列表 +• 显示播放列表描述和时长 +• 允许重置设置 + +改进 +• [Android 13+] 恢复自定义通知操作 +• 请求更新检查的同意 +• 允许在缓冲期间播放/暂停通知 +• 重新排序部分设置 + +修复 +• [YouTube] 修复评论无法加载的问题,以及其他修复和改进 +• 修复设置导入中的漏洞并切换到 JSON 格式 +• 修复各种下载问题 +• 精简搜索文本 From 3ffd194f78d7a708b443ff914cf68bb50b0683d1 Mon Sep 17 00:00:00 2001 From: tobigr Date: Sun, 21 Dec 2025 18:30:14 +0100 Subject: [PATCH 16/19] Fix insufficient permissions on opening downloaded streams --- .../giga/ui/adapter/MissionAdapter.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java index f245b3dd9..54ae2cfa4 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 @@ -2,6 +2,7 @@ package us.shandian.giga.ui.adapter; import static android.content.Intent.FLAG_GRANT_PREFIX_URI_PERMISSION; import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION; +import static android.content.Intent.createChooser; import static us.shandian.giga.get.DownloadMission.ERROR_CONNECT_HOST; import static us.shandian.giga.get.DownloadMission.ERROR_FILE_CREATION; import static us.shandian.giga.get.DownloadMission.ERROR_HTTP_NO_CONTENT; @@ -349,11 +350,15 @@ public class MissionAdapter extends Adapter implements Handler.Callb if (BuildConfig.DEBUG) Log.v(TAG, "Mime: " + mimeType + " package: " + BuildConfig.APPLICATION_ID + ".provider"); - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setDataAndType(resolveShareableUri(mission), mimeType); - intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION); - intent.addFlags(FLAG_GRANT_PREFIX_URI_PERMISSION); - ShareUtils.openIntentInApp(mContext, intent); + Intent viewIntent = new Intent(Intent.ACTION_VIEW); + viewIntent.setDataAndType(resolveShareableUri(mission), mimeType); + viewIntent.addFlags(FLAG_GRANT_READ_URI_PERMISSION); + viewIntent.addFlags(FLAG_GRANT_PREFIX_URI_PERMISSION); + + Intent chooserIntent = createChooser(viewIntent, null); + chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | FLAG_GRANT_READ_URI_PERMISSION); + + ShareUtils.openIntentInApp(mContext, chooserIntent); } private void shareFile(Mission mission) { @@ -364,8 +369,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb shareIntent.putExtra(Intent.EXTRA_STREAM, resolveShareableUri(mission)); shareIntent.addFlags(FLAG_GRANT_READ_URI_PERMISSION); - final Intent intent = new Intent(Intent.ACTION_CHOOSER); - intent.putExtra(Intent.EXTRA_INTENT, shareIntent); + final Intent intent = createChooser(shareIntent, null); // unneeded to set a title to the chooser on Android P and higher because the system // ignores this title on these versions if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O_MR1) { From 58efbf4de85c87e543ba1d51389540c31e2098a8 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Fri, 26 Dec 2025 21:57:26 +0100 Subject: [PATCH 17/19] Fix retrieving incomplete data for SubscriptionEntity This fixes a visual bug in which the channels reported the the subscriber count was unavailable although stored in the db. Closes #12953 --- .../newpipe/database/subscription/SubscriptionEntity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.kt b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.kt index 104d0a142..7df9830e4 100644 --- a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.kt +++ b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.kt @@ -55,8 +55,8 @@ data class SubscriptionEntity( fun toChannelInfoItem(): ChannelInfoItem { return ChannelInfoItem(this.serviceId, this.url, this.name).apply { thumbnails = ImageStrategy.dbUrlToImageList(this@SubscriptionEntity.avatarUrl) - subscriberCount = this.subscriberCount - description = this.description + subscriberCount = this@SubscriptionEntity.subscriberCount ?: -1 + description = this@SubscriptionEntity.description } } From c2f526d5b3137e291d269980f8c289e80ceb10a2 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 26 Dec 2025 14:15:33 +0200 Subject: [PATCH 18/19] Use context.getString() shorthand instead of context.getResources().getString() Cherry-picked from #12949 / 4360c1b8735c073b95a162324b2814cc5a5b4ecd --- .../org/schabi/newpipe/player/helper/PlayerHelper.java | 6 +++--- .../main/java/org/schabi/newpipe/util/Localization.java | 8 ++++---- .../main/java/org/schabi/newpipe/util/ThemeHelper.java | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index c335e9b7c..0f9579352 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -141,11 +141,11 @@ public final class PlayerHelper { @ResizeMode final int resizeMode) { switch (resizeMode) { case AspectRatioFrameLayout.RESIZE_MODE_FIT: - return context.getResources().getString(R.string.resize_fit); + return context.getString(R.string.resize_fit); case AspectRatioFrameLayout.RESIZE_MODE_FILL: - return context.getResources().getString(R.string.resize_fill); + return context.getString(R.string.resize_fill); case AspectRatioFrameLayout.RESIZE_MODE_ZOOM: - return context.getResources().getString(R.string.resize_zoom); + return context.getString(R.string.resize_zoom); case AspectRatioFrameLayout.RESIZE_MODE_FIXED_HEIGHT: case AspectRatioFrameLayout.RESIZE_MODE_FIXED_WIDTH: default: 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 b8cc26b41..49e27d108 100644 --- a/app/src/main/java/org/schabi/newpipe/util/Localization.java +++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java @@ -153,9 +153,9 @@ public final class Localization { case (int) ListExtractor.ITEM_COUNT_UNKNOWN: return ""; case (int) ListExtractor.ITEM_COUNT_INFINITE: - return context.getResources().getString(R.string.infinite_videos); + return context.getString(R.string.infinite_videos); case (int) ListExtractor.ITEM_COUNT_MORE_THAN_100: - return context.getResources().getString(R.string.more_than_100_videos); + return context.getString(R.string.more_than_100_videos); default: return getQuantity(context, R.plurals.videos, R.string.no_videos, streamCount, localizeNumber(streamCount)); @@ -168,9 +168,9 @@ public final class Localization { case (int) ListExtractor.ITEM_COUNT_UNKNOWN: return ""; case (int) ListExtractor.ITEM_COUNT_INFINITE: - return context.getResources().getString(R.string.infinite_videos_mini); + return context.getString(R.string.infinite_videos_mini); case (int) ListExtractor.ITEM_COUNT_MORE_THAN_100: - return context.getResources().getString(R.string.more_than_100_videos_mini); + return context.getString(R.string.more_than_100_videos_mini); default: return String.valueOf(streamCount); } diff --git a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java index ab74e0305..24a0f457f 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java @@ -263,7 +263,7 @@ public final class ThemeHelper { private static String getSelectedThemeKey(final Context context) { final String themeKey = context.getString(R.string.theme_key); - final String defaultTheme = context.getResources().getString(R.string.default_theme_value); + final String defaultTheme = context.getString(R.string.default_theme_value); return PreferenceManager.getDefaultSharedPreferences(context) .getString(themeKey, defaultTheme); } From 2dde0fef58364382f7f783c80916d8ea226a68b5 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 26 Dec 2025 11:21:10 +0200 Subject: [PATCH 19/19] Convert newpipe/util/KioskTranslator.java to kotlin Cherry picked from #12947 / 4649e46d1ee4c691f2923c9b5c35c154c77b29a4 --- .../schabi/newpipe/util/KioskTranslator.java | 100 ------------------ .../schabi/newpipe/util/KioskTranslator.kt | 69 ++++++++++++ 2 files changed, 69 insertions(+), 100 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java create mode 100644 app/src/main/java/org/schabi/newpipe/util/KioskTranslator.kt diff --git a/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java b/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java deleted file mode 100644 index 5aa332159..000000000 --- a/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.schabi.newpipe.util; - -import android.content.Context; - -import org.schabi.newpipe.R; - -/** - * 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 - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - *

- *

- * NewPipe is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - *

- *

- * You should have received a copy of the GNU General Public License - * along with NewPipe. If not, see . - *

- */ - -public final class KioskTranslator { - private KioskTranslator() { } - - public static String getTranslatedKioskName(final String kioskId, final Context c) { - switch (kioskId) { - case "Trending": - return c.getString(R.string.trending); - case "Top 50": - return c.getString(R.string.top_50); - case "New & hot": - return c.getString(R.string.new_and_hot); - case "Local": - return c.getString(R.string.local); - case "Recently added": - return c.getString(R.string.recently_added); - case "Most liked": - return c.getString(R.string.most_liked); - case "conferences": - return c.getString(R.string.conferences); - case "recent": - return c.getString(R.string.recent); - case "live": - return c.getString(R.string.duration_live); - case "Featured": - return c.getString(R.string.featured); - case "Radio": - return c.getString(R.string.radio); - case "trending_gaming": - return c.getString(R.string.trending_gaming); - case "trending_music": - return c.getString(R.string.trending_music); - case "trending_movies_and_shows": - return c.getString(R.string.trending_movies); - case "trending_podcasts_episodes": - return c.getString(R.string.trending_podcasts); - default: - return kioskId; - } - } - - public static int getKioskIcon(final String kioskId) { - switch (kioskId) { - case "Trending": - case "Top 50": - case "New & hot": - case "conferences": - return R.drawable.ic_whatshot; - case "Local": - return R.drawable.ic_home; - case "Recently added": - case "recent": - return R.drawable.ic_add_circle_outline; - case "Most liked": - return R.drawable.ic_thumb_up; - case "live": - return R.drawable.ic_live_tv; - case "Featured": - return R.drawable.ic_stars; - case "Radio": - return R.drawable.ic_radio; - case "trending_gaming": - return R.drawable.ic_videogame_asset; - case "trending_music": - return R.drawable.ic_music_note; - case "trending_movies_and_shows": - return R.drawable.ic_movie; - case "trending_podcasts_episodes": - return R.drawable.ic_podcasts; - default: - return 0; - } - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.kt b/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.kt new file mode 100644 index 000000000..39167e969 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.kt @@ -0,0 +1,69 @@ +package org.schabi.newpipe.util + +import android.content.Context +import org.schabi.newpipe.R + +/** + * 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 + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * + * + * NewPipe is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * + * + * You should have received a copy of the GNU General Public License + * along with NewPipe. If not, see //www.gnu.org/licenses/>. + * + */ +object KioskTranslator { + @JvmStatic + fun getTranslatedKioskName(kioskId: String, c: Context): String { + return when (kioskId) { + "Trending" -> c.getString(R.string.trending) + "Top 50" -> c.getString(R.string.top_50) + "New & hot" -> c.getString(R.string.new_and_hot) + "Local" -> c.getString(R.string.local) + "Recently added" -> c.getString(R.string.recently_added) + "Most liked" -> c.getString(R.string.most_liked) + "conferences" -> c.getString(R.string.conferences) + "recent" -> c.getString(R.string.recent) + "live" -> c.getString(R.string.duration_live) + "Featured" -> c.getString(R.string.featured) + "Radio" -> c.getString(R.string.radio) + "trending_gaming" -> c.getString(R.string.trending_gaming) + "trending_music" -> c.getString(R.string.trending_music) + "trending_movies_and_shows" -> c.getString(R.string.trending_movies) + "trending_podcasts_episodes" -> c.getString(R.string.trending_podcasts) + else -> kioskId + } + } + + @JvmStatic + fun getKioskIcon(kioskId: String): Int { + return when (kioskId) { + "Trending", "Top 50", "New & hot", "conferences" -> R.drawable.ic_whatshot + "Local" -> R.drawable.ic_home + "Recently added", "recent" -> R.drawable.ic_add_circle_outline + "Most liked" -> R.drawable.ic_thumb_up + "live" -> R.drawable.ic_live_tv + "Featured" -> R.drawable.ic_stars + "Radio" -> R.drawable.ic_radio + "trending_gaming" -> R.drawable.ic_videogame_asset + "trending_music" -> R.drawable.ic_music_note + "trending_movies_and_shows" -> R.drawable.ic_movie + "trending_podcasts_episodes" -> R.drawable.ic_podcasts + else -> 0 + } + } +}