From 6ddd4a7e636ed163b505e95d184b741931e6c226 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Sun, 11 Jan 2026 18:04:26 +0200 Subject: [PATCH 01/92] VideoDetailFragment: hide relatedItemsLayout in tablet mode after fullscreen Fixes: #7617 --- .../newpipe/fragments/detail/VideoDetailFragment.java | 6 +++++- 1 file changed, 5 insertions(+), 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 9bffa149c9c..aa78bfa383e 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 @@ -1899,7 +1899,11 @@ public void onFullscreenStateChanged(final boolean fullscreen) { } if (binding.relatedItemsLayout != null) { - binding.relatedItemsLayout.setVisibility(fullscreen ? View.GONE : View.VISIBLE); + if (showRelatedItems) { + binding.relatedItemsLayout.setVisibility(fullscreen ? View.GONE : View.VISIBLE); + } else { + binding.relatedItemsLayout.setVisibility(View.GONE); + } } scrollToTop(); From 54f9bcb03e4d1e4033cb630a5fbe2f81e5c6c154 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sun, 18 Jan 2026 00:30:12 +0800 Subject: [PATCH 02/92] Upgrade AGP to 9.0.0 Signed-off-by: Aayush Gupta --- gradle.properties | 3 +++ gradle/libs.versions.toml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 01e1aa01fce..39c2392bae3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,3 +7,6 @@ systemProp.file.encoding=utf-8 # https://docs.gradle.org/current/userguide/configuration_cache.html org.gradle.configuration-cache=true +android.enableAppCompileTimeRClass=false +android.r8.strictFullModeForKeepRules=false +android.r8.optimizedResourceShrinking=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5448848a2c5..ddfe32a3155 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ [versions] acra = "5.13.1" -agp = "8.13.2" +agp = "9.0.0" appcompat = "1.7.1" assertj = "3.27.6" autoservice-google = "1.1.1" From 4f70235ee82ff595c389b06f1a3a7279cddd4c5b Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sat, 17 Jan 2026 23:56:27 +0800 Subject: [PATCH 03/92] Enable proguard android optimizations AGP 9.0+ requires enabling optimizations Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 62afd852209..5a10a4aad69 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -78,7 +78,10 @@ android { } isMinifyEnabled = true isShrinkResources = false // disabled to fix F-Droid"s reproducible build - proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) } } From d045b27cea1ca30d1dc877440070172e1caae573 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sun, 18 Jan 2026 00:40:12 +0800 Subject: [PATCH 04/92] Migrate to built-in Kotlin Ref: https://developer.android.com/build/migrate-to-built-in-kotlin Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 3 +-- build.gradle.kts | 3 +-- gradle/libs.versions.toml | 5 ++--- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5a10a4aad69..949f38cb6e2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -5,8 +5,7 @@ plugins { alias(libs.plugins.android.application) - alias(libs.plugins.jetbrains.kotlin.android) - alias(libs.plugins.jetbrains.kotlin.kapt) + alias(libs.plugins.android.legacy.kapt) alias(libs.plugins.google.ksp) alias(libs.plugins.jetbrains.kotlin.parcelize) alias(libs.plugins.sonarqube) diff --git a/build.gradle.kts b/build.gradle.kts index 2c9173f575c..40d91d7704b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,8 +5,7 @@ plugins { alias(libs.plugins.android.application) apply false - alias(libs.plugins.jetbrains.kotlin.android) apply false - alias(libs.plugins.jetbrains.kotlin.kapt) apply false + alias(libs.plugins.android.legacy.kapt) apply false alias(libs.plugins.google.ksp) apply false alias(libs.plugins.jetbrains.kotlin.parcelize) apply false alias(libs.plugins.sonarqube) apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ddfe32a3155..c6413f68e1b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ groupie = "2.10.1" jsoup = "1.22.1" junit = "4.13.2" junit-ext = "1.3.0" -kotlin = "2.2.21" +kotlin = "2.2.10" ksp = "2.3.4" ktlint = "1.8.0" leakcanary = "2.14" @@ -132,8 +132,7 @@ zacsweers-autoservice-compiler = { module = "dev.zacsweers.autoservice:auto-serv [plugins] android-application = { id = "com.android.application", version.ref = "agp" } +android-legacy-kapt = { id = "com.android.legacy-kapt", version.ref = "agp" } # Needed for statesaver google-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } -jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } -jetbrains-kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } # Needed for statesaver jetbrains-kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" } From a3301dcfb17b76d1da8afaf5603fbe56f05d75d0 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sun, 18 Jan 2026 00:42:09 +0800 Subject: [PATCH 05/92] Enable resValues as build feature Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 949f38cb6e2..75963604254 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -113,6 +113,7 @@ android { buildFeatures { viewBinding = true buildConfig = true + resValues = true } packaging { From 7758a276947748e370c5f837a5a19e5e9cf0b49a Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sun, 18 Jan 2026 00:42:28 +0800 Subject: [PATCH 06/92] Migrate from deprecated android block to ApplicationExtension Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 75963604254..e79803a5356 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -3,6 +3,8 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +import com.android.build.api.dsl.ApplicationExtension + plugins { alias(libs.plugins.android.application) alias(libs.plugins.android.legacy.kapt) @@ -31,7 +33,7 @@ kotlin { } } -android { +configure { compileSdk = 36 namespace = "org.schabi.newpipe" From 19e94bd30ca36a1f3677761277f7a9c19fa6a53c Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sun, 18 Jan 2026 00:42:50 +0800 Subject: [PATCH 07/92] Migrate from deprecated srcDir to directories method Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e79803a5356..9f3837eb74e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -104,7 +104,7 @@ configure { sourceSets { getByName("androidTest") { - assets.srcDir("$projectDir/schemas") + assets.directories += "$projectDir/schemas" } } From fd192b4f3f48e8e98b4edd8ebb490effa70efec4 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sun, 18 Jan 2026 01:09:06 +0800 Subject: [PATCH 08/92] Drop default properties Signed-off-by: Aayush Gupta --- gradle.properties | 3 --- 1 file changed, 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 39c2392bae3..edfb90d9fd7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,4 @@ -android.enableJetifier=false android.nonFinalResIds=false -android.nonTransitiveRClass=true -android.useAndroidX=true org.gradle.jvmargs=-Xmx2048M --add-opens jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED systemProp.file.encoding=utf-8 From a7aad63bbbb5b721d3c5863e69cd91bec951f30e Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 29 Jan 2026 14:59:25 +0800 Subject: [PATCH 09/92] Upgrade Kotlin and KSP Fixes multiple build errors. Once parcelize is fixed, we should be good to use built-in Kotlin completely Ref: https://issuetracker.google.com/issues/478401081 Signed-off-by: Aayush Gupta --- build.gradle.kts | 7 +++++++ gradle/libs.versions.toml | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 40d91d7704b..eeb640af3f1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,6 +3,13 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +buildscript { + dependencies { + // https://developer.android.com/build/releases/agp-9-0-0-release-notes#runtime-dependency-on-kotlin-gradle-plugin-upgrade + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${libs.versions.kotlin.get()}") + } +} + plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.android.legacy.kapt) apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c6413f68e1b..d5b38e519b6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,8 +23,8 @@ groupie = "2.10.1" jsoup = "1.22.1" junit = "4.13.2" junit-ext = "1.3.0" -kotlin = "2.2.10" -ksp = "2.3.4" +kotlin = "2.3.0" +ksp = "2.3.5" ktlint = "1.8.0" leakcanary = "2.14" lifecycle = "2.9.4" # Newer versions require minSdk >= 23 From 8a2c47bc12b01938e8ba5edddbf5568303ca340d Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Thu, 29 Jan 2026 15:01:40 +0200 Subject: [PATCH 10/92] Remove dead code from info_list/InfoItemBuilder It no longer really builds any view and used only for stroing click gesture callbacks. In the same way lik local/LocalItemBuilder does Last usage of build functions: 2e9a860aaa138f9682d363eece897506b823e340 --- .../newpipe/info_list/InfoItemBuilder.java | 131 ------------------ .../newpipe/info_list/InfoItemBuilder.kt | 20 +++ 2 files changed, 20 insertions(+), 131 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java create mode 100644 app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.kt diff --git a/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java b/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java deleted file mode 100644 index d959c63277c..00000000000 --- a/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.schabi.newpipe.info_list; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; - -import org.schabi.newpipe.extractor.InfoItem; -import org.schabi.newpipe.extractor.channel.ChannelInfoItem; -import org.schabi.newpipe.extractor.comments.CommentsInfoItem; -import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem; -import org.schabi.newpipe.extractor.stream.StreamInfoItem; -import org.schabi.newpipe.info_list.holder.ChannelInfoItemHolder; -import org.schabi.newpipe.info_list.holder.ChannelMiniInfoItemHolder; -import org.schabi.newpipe.info_list.holder.CommentInfoItemHolder; -import org.schabi.newpipe.info_list.holder.InfoItemHolder; -import org.schabi.newpipe.info_list.holder.PlaylistInfoItemHolder; -import org.schabi.newpipe.info_list.holder.PlaylistMiniInfoItemHolder; -import org.schabi.newpipe.info_list.holder.StreamInfoItemHolder; -import org.schabi.newpipe.info_list.holder.StreamMiniInfoItemHolder; -import org.schabi.newpipe.local.history.HistoryRecordManager; -import org.schabi.newpipe.util.OnClickGesture; - -/* - * Created by Christian Schabesberger on 26.09.16. - *

- * Copyright (C) Christian Schabesberger 2016 - * InfoItemBuilder.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 class InfoItemBuilder { - private final Context context; - - private OnClickGesture onStreamSelectedListener; - private OnClickGesture onChannelSelectedListener; - private OnClickGesture onPlaylistSelectedListener; - private OnClickGesture onCommentsSelectedListener; - - public InfoItemBuilder(final Context context) { - this.context = context; - } - - public View buildView(@NonNull final ViewGroup parent, @NonNull final InfoItem infoItem, - final HistoryRecordManager historyRecordManager) { - return buildView(parent, infoItem, historyRecordManager, false); - } - - public View buildView(@NonNull final ViewGroup parent, @NonNull final InfoItem infoItem, - final HistoryRecordManager historyRecordManager, - final boolean useMiniVariant) { - final InfoItemHolder holder = - holderFromInfoType(parent, infoItem.getInfoType(), useMiniVariant); - holder.updateFromItem(infoItem, historyRecordManager); - return holder.itemView; - } - - private InfoItemHolder holderFromInfoType(@NonNull final ViewGroup parent, - @NonNull final InfoItem.InfoType infoType, - final boolean useMiniVariant) { - switch (infoType) { - case STREAM: - return useMiniVariant ? new StreamMiniInfoItemHolder(this, parent) - : new StreamInfoItemHolder(this, parent); - case CHANNEL: - return useMiniVariant ? new ChannelMiniInfoItemHolder(this, parent) - : new ChannelInfoItemHolder(this, parent); - case PLAYLIST: - return useMiniVariant ? new PlaylistMiniInfoItemHolder(this, parent) - : new PlaylistInfoItemHolder(this, parent); - case COMMENT: - return new CommentInfoItemHolder(this, parent); - default: - throw new RuntimeException("InfoType not expected = " + infoType.name()); - } - } - - public Context getContext() { - return context; - } - - public OnClickGesture getOnStreamSelectedListener() { - return onStreamSelectedListener; - } - - public void setOnStreamSelectedListener(final OnClickGesture listener) { - this.onStreamSelectedListener = listener; - } - - public OnClickGesture getOnChannelSelectedListener() { - return onChannelSelectedListener; - } - - public void setOnChannelSelectedListener(final OnClickGesture listener) { - this.onChannelSelectedListener = listener; - } - - public OnClickGesture getOnPlaylistSelectedListener() { - return onPlaylistSelectedListener; - } - - public void setOnPlaylistSelectedListener(final OnClickGesture listener) { - this.onPlaylistSelectedListener = listener; - } - - public OnClickGesture getOnCommentsSelectedListener() { - return onCommentsSelectedListener; - } - - public void setOnCommentsSelectedListener( - final OnClickGesture onCommentsSelectedListener) { - this.onCommentsSelectedListener = onCommentsSelectedListener; - } -} diff --git a/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.kt b/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.kt new file mode 100644 index 00000000000..cf674180e72 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.kt @@ -0,0 +1,20 @@ +/* + * SPDX-FileCopyrightText: 2016-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.info_list + +import android.content.Context +import org.schabi.newpipe.extractor.channel.ChannelInfoItem +import org.schabi.newpipe.extractor.comments.CommentsInfoItem +import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem +import org.schabi.newpipe.extractor.stream.StreamInfoItem +import org.schabi.newpipe.util.OnClickGesture + +class InfoItemBuilder(val context: Context) { + var onStreamSelectedListener: OnClickGesture? = null + var onChannelSelectedListener: OnClickGesture? = null + var onPlaylistSelectedListener: OnClickGesture? = null + var onCommentsSelectedListener: OnClickGesture? = null +} From 51e62f09baeb1c5434fdb68e78539ae1806d2aad Mon Sep 17 00:00:00 2001 From: Salman Muin Kayser Chishti <13schishti@gmail.com> Date: Fri, 30 Jan 2026 09:16:36 +0000 Subject: [PATCH 11/92] Upgrade GitHub Actions for Node 24 compatibility Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com> --- .github/workflows/backport-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/backport-pr.yml b/.github/workflows/backport-pr.yml index de46ca7c730..1e30740640e 100644 --- a/.github/workflows/backport-pr.yml +++ b/.github/workflows/backport-pr.yml @@ -22,7 +22,7 @@ jobs: github.event.comment.author_association == 'MEMBER' ) steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Get backport metadata # the target branch is the first argument after `/backport` env: From d051e8ecc8214fdfeba729afe5b5e367e711d86d Mon Sep 17 00:00:00 2001 From: Salman Muin Kayser Chishti <13schishti@gmail.com> Date: Fri, 30 Jan 2026 09:16:42 +0000 Subject: [PATCH 12/92] Upgrade GitHub Actions to latest versions Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d42c5a0b4a2..cb8fbc12a36 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: steps: - uses: actions/checkout@v6 - - uses: gradle/actions/wrapper-validation@v4 + - uses: gradle/actions/wrapper-validation@v5 - name: create and checkout branch # push events already checked out the branch From ae60f7d7eb7152ffc84e69c8eb4919fe4cd02328 Mon Sep 17 00:00:00 2001 From: Jonathan Davies Date: Sat, 31 Jan 2026 13:23:14 +0000 Subject: [PATCH 13/92] FeedLoadManager: Shuffle the order outdated subscriptions are updated in --- .../org/schabi/newpipe/local/feed/service/FeedLoadManager.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadManager.kt b/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadManager.kt index 3090a92d4c2..1e1bdcf16ec 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadManager.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadManager.kt @@ -111,7 +111,8 @@ class FeedLoadManager(private val context: Context) { broadcastProgress() } .observeOn(Schedulers.io()) - .flatMap { Flowable.fromIterable(it) } + // Randomize user subscription ordering to attempt to resist fingerprinting + .flatMap { Flowable.fromIterable(it.shuffled()) } .takeWhile { !cancelSignal.get() } .doOnNext { subscriptionEntity -> // throttle YouTube extractions once every BATCH_SIZE to avoid being rate limited From 07fe1e758ab3dfc2fdb6a231a148bc86500094f3 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Wed, 28 Jan 2026 00:07:31 +0200 Subject: [PATCH 14/92] Refactor settings/tabs/TabsJsonHelper.java to use java streams --- .../newpipe/settings/tabs/TabsJsonHelper.java | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsJsonHelper.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsJsonHelper.java index 30676477c65..c42348be052 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsJsonHelper.java +++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsJsonHelper.java @@ -9,8 +9,9 @@ import com.grack.nanojson.JsonStringWriter; import com.grack.nanojson.JsonWriter; -import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; /** * Class to get a JSON representation of a list of tabs, and the other way around. @@ -44,39 +45,25 @@ public static List getTabsFromJson(@Nullable final String tabsJson) return getDefaultTabs(); } - final List returnTabs = new ArrayList<>(); - - final JsonObject outerJsonObject; try { - outerJsonObject = JsonParser.object().from(tabsJson); + final JsonObject outerJsonObject = JsonParser.object().from(tabsJson); if (!outerJsonObject.has(JSON_TABS_ARRAY_KEY)) { throw new InvalidJsonException("JSON doesn't contain \"" + JSON_TABS_ARRAY_KEY + "\" array"); } - final JsonArray tabsArray = outerJsonObject.getArray(JSON_TABS_ARRAY_KEY); - - for (final Object o : tabsArray) { - if (!(o instanceof JsonObject)) { - continue; - } + final JsonArray tabsArray = outerJsonObject.getArray(JSON_TABS_ARRAY_KEY, null); - final Tab tab = Tab.from((JsonObject) o); + final var returnTabs = tabsArray.streamAsJsonObjects() + .map(Tab::from) + .filter(Objects::nonNull) + .collect(Collectors.toUnmodifiableList()); - if (tab != null) { - returnTabs.add(tab); - } - } + return returnTabs.isEmpty() ? getDefaultTabs() : returnTabs; } catch (final JsonParserException e) { throw new InvalidJsonException(e); } - - if (returnTabs.isEmpty()) { - return getDefaultTabs(); - } - - return returnTabs; } /** From 8d6e68d6f43ff5b10880345d730317f289ee9def Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 4 Feb 2026 15:56:44 +0800 Subject: [PATCH 15/92] Partially revert upgrade to AGP 9.0.0 Building is broken on ecrypted filesystems Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 3 ++- build.gradle.kts | 10 ++-------- gradle.properties | 4 +--- gradle/libs.versions.toml | 5 +++-- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9f3837eb74e..00b8242a8dc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -7,7 +7,8 @@ import com.android.build.api.dsl.ApplicationExtension plugins { alias(libs.plugins.android.application) - alias(libs.plugins.android.legacy.kapt) + alias(libs.plugins.jetbrains.kotlin.android) + alias(libs.plugins.jetbrains.kotlin.kapt) alias(libs.plugins.google.ksp) alias(libs.plugins.jetbrains.kotlin.parcelize) alias(libs.plugins.sonarqube) diff --git a/build.gradle.kts b/build.gradle.kts index eeb640af3f1..2c9173f575c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,16 +3,10 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -buildscript { - dependencies { - // https://developer.android.com/build/releases/agp-9-0-0-release-notes#runtime-dependency-on-kotlin-gradle-plugin-upgrade - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${libs.versions.kotlin.get()}") - } -} - plugins { alias(libs.plugins.android.application) apply false - alias(libs.plugins.android.legacy.kapt) apply false + alias(libs.plugins.jetbrains.kotlin.android) apply false + alias(libs.plugins.jetbrains.kotlin.kapt) apply false alias(libs.plugins.google.ksp) apply false alias(libs.plugins.jetbrains.kotlin.parcelize) apply false alias(libs.plugins.sonarqube) apply false diff --git a/gradle.properties b/gradle.properties index edfb90d9fd7..a529a42c8cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,7 @@ android.nonFinalResIds=false +android.useAndroidX=true org.gradle.jvmargs=-Xmx2048M --add-opens jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED systemProp.file.encoding=utf-8 # https://docs.gradle.org/current/userguide/configuration_cache.html org.gradle.configuration-cache=true -android.enableAppCompileTimeRClass=false -android.r8.strictFullModeForKeepRules=false -android.r8.optimizedResourceShrinking=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d5b38e519b6..14087863717 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ [versions] acra = "5.13.1" -agp = "9.0.0" +agp = "8.13.2" appcompat = "1.7.1" assertj = "3.27.6" autoservice-google = "1.1.1" @@ -132,7 +132,8 @@ zacsweers-autoservice-compiler = { module = "dev.zacsweers.autoservice:auto-serv [plugins] android-application = { id = "com.android.application", version.ref = "agp" } -android-legacy-kapt = { id = "com.android.legacy-kapt", version.ref = "agp" } # Needed for statesaver google-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +jetbrains-kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } # Needed for statesaver jetbrains-kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" } From 85d43fe45e854bd89dfc3587e396b00a4c13eb10 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 4 Feb 2026 16:22:48 +0800 Subject: [PATCH 16/92] proguard: Keep fields of generated proguard files Inspired from https://github.com/protocolbuffers/protobuf/blob/main/java/lite.md#r8-rule-to-make-production-app-builds-work Signed-off-by: Aayush Gupta --- app/proguard-rules.pro | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 8bcef3fbddd..3f31fc98b2b 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -39,3 +39,8 @@ ## For some reason NotificationModeConfigFragment wasn't kept (only referenced in a preference xml) -keep class org.schabi.newpipe.settings.notifications.** { *; } + +# Prevent R8 from stripping or renaming Protobuf internal fields +-keepclassmembers class * extends com.google.protobuf.GeneratedMessageLite { + ; +} From 5525d206dc2b8b888efbd0a51b89a07cff7df97e Mon Sep 17 00:00:00 2001 From: AbsurdlyLongUsername <22662897+absurdlylongusername@users.noreply.github.com> Date: Thu, 5 Feb 2026 04:28:00 +0000 Subject: [PATCH 17/92] Small refactor getPlayQueueFromCache --- app/src/main/java/org/schabi/newpipe/player/Player.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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 e18ead89992..124f56c2d80 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -567,11 +567,7 @@ private static PlayQueue getPlayQueueFromCache(@NonNull final Intent intent) { if (queueCache == null) { return null; } - final PlayQueue newQueue = SerializedCache.getInstance().take(queueCache, PlayQueue.class); - if (newQueue == null) { - return null; - } - return newQueue; + return SerializedCache.getInstance().take(queueCache, PlayQueue.class); } private void initUIsForCurrentPlayerType() { From 725cb70cbd20d6346bce784eb3100f904fd0955c Mon Sep 17 00:00:00 2001 From: AbsurdlyLongUsername <22662897+absurdlylongusername@users.noreply.github.com> Date: Thu, 5 Feb 2026 04:28:49 +0000 Subject: [PATCH 18/92] Update useVideoAndSubtitles rename in comment --- 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 124f56c2d80..078e4b344ea 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -2037,7 +2037,7 @@ public MediaSource sourceOf(final PlayQueueItem item, final StreamInfo info) { // resolver was called when the app was in background, the app will only stream audio when // the user come back to the app and will never fetch the video stream. // Note that the video is not fetched when the app is in background because the video - // renderer is fully disabled (see useVideoSource method), except for HLS streams + // renderer is fully disabled (see useVideoAndSubtitles method), except for HLS streams // (see https://github.com/google/ExoPlayer/issues/9282). return videoResolver.resolve(info); } From 118def08b4a583de6569c54ae43853bbf81024ff Mon Sep 17 00:00:00 2001 From: AbsurdlyLongUsername <22662897+absurdlylongusername@users.noreply.github.com> Date: Thu, 5 Feb 2026 04:36:53 +0000 Subject: [PATCH 19/92] Add conditional guard to prevent useVideoAndSubtitles overwriting recovery position that was set in Player.handleIntent for RESUME_PLAYBACK when resuming playback --- .../java/org/schabi/newpipe/player/Player.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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 078e4b344ea..fa1aaa2b67d 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -2210,6 +2210,13 @@ public void useVideoAndSubtitles(final boolean videoAndSubtitlesEnabled) { isAudioOnly = !videoAndSubtitlesEnabled; + final var item = playQueue.getItem(); + final boolean hasPendingRecovery = + item != null && item.getRecoveryPosition() != PlayQueueItem.RECOVERY_UNSET; + final boolean hasTimeline = + !exoPlayerIsNull() && !simpleExoPlayer.getCurrentTimeline().isEmpty(); + + getCurrentStreamInfo().ifPresentOrElse(info -> { // In case we don't know the source type, fall back to either video-with-audio, or // audio-only source type @@ -2217,6 +2224,10 @@ public void useVideoAndSubtitles(final boolean videoAndSubtitlesEnabled) { .orElse(SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY); setRecovery(); // making sure to save playback position before reloadPlayQueueManager() + if (hasTimeline || !hasPendingRecovery) { + // making sure to save playback position before reloadPlayQueueManager() + setRecovery(); + } if (playQueueManagerReloadingNeeded(sourceType, info, getVideoRendererIndex())) { reloadPlayQueueManager(); @@ -2230,6 +2241,10 @@ The current metadata may be null sometimes (for e.g. when using an unstable conn index of the video renderer or playQueueManagerReloadingNeeded returns true */ setRecovery(); // making sure to save playback position before reloadPlayQueueManager() + if (hasTimeline || !hasPendingRecovery) { + // making sure to save playback position before reloadPlayQueueManager() + setRecovery(); + } reloadPlayQueueManager(); }); From 1554f777629cc8170c3ac51a882b2044d226c847 Mon Sep 17 00:00:00 2001 From: AbsurdlyLongUsername <22662897+absurdlylongusername@users.noreply.github.com> Date: Thu, 5 Feb 2026 11:17:30 +0000 Subject: [PATCH 20/92] Fix additional setRecovery from rebase errors --- app/src/main/java/org/schabi/newpipe/player/Player.java | 2 -- 1 file changed, 2 deletions(-) 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 fa1aaa2b67d..b07b15a4585 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -2223,7 +2223,6 @@ public void useVideoAndSubtitles(final boolean videoAndSubtitlesEnabled) { final SourceType sourceType = videoResolver.getStreamSourceType() .orElse(SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY); - setRecovery(); // making sure to save playback position before reloadPlayQueueManager() if (hasTimeline || !hasPendingRecovery) { // making sure to save playback position before reloadPlayQueueManager() setRecovery(); @@ -2240,7 +2239,6 @@ The current metadata may be null sometimes (for e.g. when using an unstable conn Reload the play queue manager in this case, which is the behavior when we don't know the index of the video renderer or playQueueManagerReloadingNeeded returns true */ - setRecovery(); // making sure to save playback position before reloadPlayQueueManager() if (hasTimeline || !hasPendingRecovery) { // making sure to save playback position before reloadPlayQueueManager() setRecovery(); From 955844b3e1cd3449713db431cb47041ab5ecd985 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 5 Feb 2026 02:47:53 +0100 Subject: [PATCH 21/92] Translated using Weblate (Basque) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Latvian) Currently translated at 97.6% (746 of 764 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Latvian) Currently translated at 97.5% (745 of 764 strings) Translated using Weblate (Kabyle) Currently translated at 27.7% (212 of 764 strings) Translated using Weblate (German) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Korean) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Vietnamese) Currently translated at 99.3% (759 of 764 strings) Translated using Weblate (Latvian) Currently translated at 97.5% (745 of 764 strings) Translated using Weblate (French) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Hebrew) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Azerbaijani) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Greek) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Icelandic) Currently translated at 98.4% (752 of 764 strings) Translated using Weblate (Malay) Currently translated at 58.7% (449 of 764 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Bulgarian) Currently translated at 99.8% (763 of 764 strings) Translated using Weblate (Italian) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Estonian) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Czech) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (French) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Polish) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (764 of 764 strings) Merge branch 'origin/dev' into Weblate. Translated using Weblate (Somali) Currently translated at 71.5% (547 of 764 strings) Translated using Weblate (Somali) Currently translated at 71.5% (547 of 764 strings) Translated using Weblate (Danish) Currently translated at 98.5% (753 of 764 strings) Translated using Weblate (Danish) Currently translated at 98.5% (753 of 764 strings) Translated using Weblate (Kurdish (Central)) Currently translated at 80.4% (615 of 764 strings) Translated using Weblate (Dutch (Belgium)) Currently translated at 73.5% (562 of 764 strings) Translated using Weblate (Dutch (Belgium)) Currently translated at 73.5% (562 of 764 strings) Translated using Weblate (Hungarian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Hungarian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Georgian) Currently translated at 92.5% (707 of 764 strings) Translated using Weblate (Kurdish) Currently translated at 60.9% (466 of 764 strings) Translated using Weblate (Catalan) Currently translated at 96.0% (734 of 764 strings) Translated using Weblate (Catalan) Currently translated at 96.0% (734 of 764 strings) Translated using Weblate (Greek) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (French) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (French) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Japanese) Currently translated at 95.5% (730 of 764 strings) Translated using Weblate (Belarusian) Currently translated at 98.8% (755 of 764 strings) Translated using Weblate (Vietnamese) Currently translated at 99.3% (759 of 764 strings) Translated using Weblate (Odia) Currently translated at 95.2% (728 of 764 strings) Translated using Weblate (Russian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Russian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Korean) Currently translated at 98.4% (752 of 764 strings) Translated using Weblate (Korean) Currently translated at 98.4% (752 of 764 strings) Translated using Weblate (Interlingua) Currently translated at 31.1% (238 of 764 strings) Translated using Weblate (Interlingua) Currently translated at 31.1% (238 of 764 strings) Translated using Weblate (Indonesian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Indonesian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Tamazight (Central Atlas)) Currently translated at 18.5% (142 of 764 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Turkish) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Turkish) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Arabic (Libya)) Currently translated at 93.4% (714 of 764 strings) Translated using Weblate (Slovak) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Azerbaijani) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Lithuanian) Currently translated at 98.9% (756 of 764 strings) Translated using Weblate (Lithuanian) Currently translated at 98.9% (756 of 764 strings) Translated using Weblate (Portuguese) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Portuguese) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Hindi) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Hindi) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Czech) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Asturian) Currently translated at 60.6% (463 of 764 strings) Translated using Weblate (Asturian) Currently translated at 60.6% (463 of 764 strings) Translated using Weblate (Hebrew) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Hebrew) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Sardinian) Currently translated at 97.9% (748 of 764 strings) Translated using Weblate (Sardinian) Currently translated at 97.9% (748 of 764 strings) Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Currently translated at 95.1% (727 of 764 strings) Translated using Weblate (Albanian) Currently translated at 76.3% (583 of 764 strings) Translated using Weblate (Albanian) Currently translated at 76.3% (583 of 764 strings) Translated using Weblate (Nepali) Currently translated at 56.2% (430 of 764 strings) Translated using Weblate (Nepali) Currently translated at 56.2% (430 of 764 strings) Translated using Weblate (Finnish) Currently translated at 94.2% (720 of 764 strings) Translated using Weblate (Finnish) Currently translated at 94.2% (720 of 764 strings) Translated using Weblate (Uzbek (Latin script)) Currently translated at 59.2% (453 of 764 strings) Translated using Weblate (Uzbek (Latin script)) Currently translated at 59.2% (453 of 764 strings) Translated using Weblate (Punjabi) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Kurdish (Northern)) Currently translated at 62.5% (478 of 764 strings) Translated using Weblate (Kurdish (Northern)) Currently translated at 62.5% (478 of 764 strings) Translated using Weblate (Icelandic) Currently translated at 98.1% (750 of 764 strings) Translated using Weblate (N’Ko) Currently translated at 85.7% (655 of 764 strings) Translated using Weblate (Croatian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Serbian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Serbian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Spanish) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Spanish) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Ukrainian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Ukrainian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Bengali) Currently translated at 74.2% (567 of 764 strings) Translated using Weblate (German) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (German) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Romanian) Currently translated at 97.6% (746 of 764 strings) Translated using Weblate (Romanian) Currently translated at 97.6% (746 of 764 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (ryu (generated) (ryu)) Currently translated at 95.2% (728 of 764 strings) Translated using Weblate (Arabic) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Galician) Currently translated at 95.2% (728 of 764 strings) Translated using Weblate (Galician) Currently translated at 95.2% (728 of 764 strings) Translated using Weblate (Italian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Italian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Dutch) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Dutch) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Estonian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Estonian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Bulgarian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Bulgarian) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Malayalam) Currently translated at 73.0% (558 of 764 strings) Translated using Weblate (Malayalam) Currently translated at 73.0% (558 of 764 strings) Translated using Weblate (Swedish) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Swedish) Currently translated at 99.7% (762 of 764 strings) Translated using Weblate (Persian) Currently translated at 95.6% (731 of 764 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 89.9% (687 of 764 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 89.9% (687 of 764 strings) Translated using Weblate (Polish) Currently translated at 99.7% (762 of 764 strings) Co-authored-by: 2-Seol <2Seol.0117@gmail.com> Co-authored-by: Agnieszka C Co-authored-by: Ajeje Brazorf Co-authored-by: Alex25820 Co-authored-by: Allan Nordhøy Co-authored-by: Andreas Westrell Co-authored-by: Anonymous Co-authored-by: Anxhelo Lushka Co-authored-by: AudricV Co-authored-by: Aurelian Ciocîltan Co-authored-by: Bakary Kaba Co-authored-by: Balázs Meskó Co-authored-by: ButterflyOfFire Co-authored-by: Comrade KVRONV Co-authored-by: D D Co-authored-by: David Rebolo Magariños Co-authored-by: Deleted User Co-authored-by: Deleted User Co-authored-by: Deleted User Co-authored-by: Dormin Co-authored-by: Emin Tufan Çetin Co-authored-by: Enol P. Co-authored-by: Erenay Co-authored-by: Femini Co-authored-by: Fjuro Co-authored-by: Francesco Saltori Co-authored-by: GET100PERCENT Co-authored-by: Ghost of Sparta Co-authored-by: Guillem Co-authored-by: Hakim Oubouali Co-authored-by: Hoseok Seo Co-authored-by: Hosted Weblate Co-authored-by: Igor Nedoboy Co-authored-by: Ishwor Ghimire Co-authored-by: Jeff Huang Co-authored-by: Kiss Attila Co-authored-by: Ldm Public Co-authored-by: MS-PC Co-authored-by: Marian Hanzel Co-authored-by: Mathias Hamza Vedsted-Mirza Co-authored-by: Mickaël Binos Co-authored-by: Milan Co-authored-by: Milo Ivir Co-authored-by: Mukhamadjonov Co-authored-by: NEXI Co-authored-by: Nadir Nour Co-authored-by: Nikoloz Co-authored-by: Olivia Ng Co-authored-by: Oymate Co-authored-by: Philip Goto Co-authored-by: Priit Jõerüüt Co-authored-by: Random Co-authored-by: SecularSteve Co-authored-by: ShareASmile Co-authored-by: Sveinn í Felli Co-authored-by: Sérgio Marques Co-authored-by: TXRdev Archive Co-authored-by: Thadah D. Denyse Co-authored-by: Theophine Savio Theodore Co-authored-by: Trunars Co-authored-by: Vasilis K. Co-authored-by: VfBFan Co-authored-by: Ville Rantanen Co-authored-by: Yaron Shahrabani Co-authored-by: cat Co-authored-by: cehnemdark Co-authored-by: gymka Co-authored-by: justcontributor Co-authored-by: nautilusx Co-authored-by: ngocanhtve Co-authored-by: winqooq Co-authored-by: zmni Co-authored-by: Макар Разин Co-authored-by: Слободан Симић(Slobodan Simić) Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) Co-authored-by: 大王叫我来巡山 --- app/src/main/res/values-az/strings.xml | 4 +- app/src/main/res/values-bg/strings.xml | 4 +- app/src/main/res/values-cs/strings.xml | 6 +- app/src/main/res/values-de/strings.xml | 6 +- app/src/main/res/values-el/strings.xml | 6 +- app/src/main/res/values-et/strings.xml | 4 +- app/src/main/res/values-eu/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 20 ++--- app/src/main/res/values-he/strings.xml | 4 +- app/src/main/res/values-hu/strings.xml | 10 +-- app/src/main/res/values-is/strings.xml | 21 ++--- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-kab/strings.xml | 8 +- app/src/main/res/values-ko/strings.xml | 14 ++- app/src/main/res/values-lv/strings.xml | 54 ++++++------ app/src/main/res/values-ms/strings.xml | 99 +++++++++++++--------- app/src/main/res/values-pl/strings.xml | 6 +- app/src/main/res/values-sk/strings.xml | 25 +++--- app/src/main/res/values-sv/strings.xml | 4 +- app/src/main/res/values-tr/strings.xml | 4 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 4 +- 23 files changed, 172 insertions(+), 139 deletions(-) diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index d1d2c8bd9d0..ee3396bc7af 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -397,7 +397,7 @@ Server çox iş parçalı endirmələri qəbul etmir, @string/msg_threads = 1 ilə yenidən cəhd edin Bütün endirilmiş fayllar diskdən silinsin\? Maksimum təkrar cəhdlər - Pleylistə əlavə olunandan əvvəl və sonrakı baxılmış videolar silinəcək. \nSiz əminsiniz? Bu geri qaytarıla bilməz! + Pleylistə əlavə olunandan əvvəl və sonrakı baxılan yayımlar silinəcək. \nSiz əminsiniz? Kanal qrupları Yeni axın elementləri Abunəlik köhnəlmiş hesab edilənə qədərki son yeniləmədən sonrakı vaxt — %s @@ -528,7 +528,7 @@ ExoPlayer standartı Mövcud olduqda xüsusi axından al - Baxılmış videolar silinsin? + Baxılan yayımlar silinsin? İzləniləni sil Sistem qovluğu seçicisini (SAF) istifadə et Bağlantı fasiləsi diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index a038ac07b07..5d0b079433b 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -464,7 +464,7 @@ \nЕвентуално може да бъде поддържано в бъдещи версии. Обработка… Ще отнеме момент Поради ограничения в ExoPlayer, стъпката за превъртане е зададена на %d секунди - Видата, които са били изгледани преди и след добавянето към плейлиста ще бъдат премахнати. \nСигурни ли сте? Това не може да бъде отменено! + Потоците, които са били гледани преди и след добавянето им към плейлиста, ще бъдат премахнати. \nСигурни ли сте? „Storage Access Framework“ позволява изтегляния във външна SD-карта Започни изтеглянията Затвори @@ -500,7 +500,7 @@ Създаден от %s Съдържанието е достъпно само за хора, които са си платили, затова не може да бъде гледано или изтеглено с NewPipe. Това видео е достъпно за абонати на YouTube Music Premium, затова не може да бъде гледано или изтеглено с NewPipe. - Премахни изгледаните видеа? + Премахни изгледаните потоци? Да, както и само частично изгледаните видеа Брой на абонати не е наличен Инстанцията вече съществува diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index ce64e46dbf5..4c219d6d4f7 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -518,9 +518,9 @@ \n \nPokud jej chcete vidět, povolte „%1$s“ v nastavení. Ano, i zčásti zhlédnutá videa - Odstranit zhlédnutá videa? - Odstranit zhlédnutá - Videa, která jste zhlédli před a po jejich přidání do playlistu, budou odstraněna. \nJste se jisti? Tato akce je nevratná! + Odstranit zhlédnuté streamy? + Odstranit zhlédnuté + Streamy, které jste zhlédli před a po jejich přidání do playlistu, budou odstraněny. \nJste se jisti? Původní texty služeb budou viditelné u položek streamů U položek zobrazit původní čas Zapnout „Omezený režim“ YouTube diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b071515854a..1b4800a8f4b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -516,10 +516,10 @@ Dieses Video ist altersbeschränkt. \n \nAktiviere in den Einstellungen „%1$s“, falls du diese sehen möchtest. - Videos, die vor und nach dem Hinzufügen zur Wiedergabeliste angeschaut wurden, werden entfernt. \nBist du sicher? Dies kann nicht rückgängig gemacht werden! - Ja, und teilweise gesehene Videos + Streams, die vor und nach dem Hinzufügen zur Wiedergabeliste angeschaut wurden, werden entfernt. \nBist du sicher? + Teilweise angesehene Streams entfernen Gesehene entfernen - Gesehene Videos entfernen? + Gesehene Streams entfernen? Originalzeit vor Elementen anzeigen Originaltexte von Diensten werden in Stream-Elementen sichtbar sein YouTubes „Eingeschränkten Modus“ aktivieren diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 7c23666d58f..ac93470bcf1 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -525,8 +525,8 @@ Λόγω περιορισμών του ExoPlayer, η διάρκεια αναζήτησης ορίστηκε στα %d δευτερόλεπτα Ναι. Και τα μερικώς θεαθέντα βίντεο - Τα βίντεο που εθεάθησαν πριν και αφού προστέθηκαν στη λίστα αναπαραγωγής θα απομακρυνθούν \nΕίστε σίγουρος; Δεν μπορεί να αναιρεθεί! - Απομάκρυνση θεαθέντων βίντεο; + Οι ροές που εθεάθησαν πριν και αφού προστέθηκαν στη λίστα αναπαραγωγής θα απομακρυνθούν \nΕίστε σίγουρος; + Απομάκρυνση θεαθέντων ροών; Απομάκρυνση όσων θεάθησαν Γλώσσα εφαρμογής Επιλογή μιας instance @@ -614,7 +614,7 @@ \nΘέλετε να απεγγραφείτε από αυτό το κανάλι; Αδυναμία φόρτωσης τροφοδοσίας για \'%s\'. Σφάλμα φόρτωσης τροφοδοσίας - Από το Android 10 και μετά, μόνο το SAF υποστηρίζεται + Από το Android 10 και μετά, μόνο το Πλαίσιο Πρόσβασης Αποθήκευσης υποστηρίζεται Θα ερωτηθείτε πού να αποθηκεύσετε κάθε λήψη Δεν έχει ορισθεί φάκελος λήψεων ακόμα, eπιλέξτε τον προεπιλεγμένο φάκελο τώρα Host diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 0ede005879b..6459c05a0f9 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -530,9 +530,9 @@ %d sekund %d sekundit - Sellega eemaldame vaadatud videod ja esitusloendisse lisatud videod. \nKas sa oled kindel? Seda tegevust ei saa hiljem tagasi pöörata! + Sellega eemaldame vaadatud meediavood ja esitusloendisse lisatud sisu. \nKas sa oled kindel? Jah, sealhulgas videod, mille vaatmine jäi pooleli - Kas eemaldame vaadatud videod? + Kas eemaldame vaadatud meediavood? Eemalda vaadatud videod Kasuta süsteemi keelt Rakenduse keel diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index dc2fefa21ca..1bac3b498a3 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -706,7 +706,7 @@ Harpidedunak Ezezaguna Bolumena - Erabili ExoPlayer-en deskodetzailearen ordezko eginbidea + Erabili ExoPlayer-en deskodetzailearen ordezko ezaugarria Bat ere ez Metadatuak kargatzen… Kudeatu ExoPlayer-en ezarpen batzuk. Aldaketa hauek eragina izan dezaten, erreproduzitzailea berrabiarazi behar da diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 2977d982e57..efd735bc80b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -207,15 +207,15 @@ Chargement du contenu demandé Importer la base de données Exporter la base de données - 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 + Remplace votre historique actuel, vos abonnements, vos playlists et (éventuellement) vos paramètres. + Historique des exportations, abonnements, playlists et paramètres Exporté Importé Fichier ZIP non valide Avertissement : impossible d’importer tous les fichiers. Cela effacera vos paramètres actuels. Afficher les informations - Listes de lecture enregistrées + Playlists enregistrées Ajouter à Glisser pour réordonner Créer @@ -318,7 +318,7 @@ Aucune limite Limiter la définition lors de l’utilisation des données mobiles Chaînes - Listes de lecture + Playlists Morceaux Utilisateurs Accélérer pendant les silences @@ -404,7 +404,7 @@ \nAutorisez le sélecteur de dossier système si vous voulez télécharger vers une carte SD externe Reprend la lecture à la dernière position Positions dans les listes - Affiche les indicateurs de position de lecture dans les listes + Afficher les indicateurs de position de lecture dans les listes Positions de reprise de lecture supprimées Utiliser le sélecteur de dossier système L’« Infrastructure d’accès au stockage » permet le téléchargement sur une carte mémoire SD externe @@ -522,8 +522,8 @@ \nActivez « %1$s » dans les paramètres si vous voulez la voir. Supprimer les vidéos visionnées Oui ainsi que les vidéos partiellement visionnées - Les vidéos qui ont été visionnées avant et après avoir été ajoutées à la playlist seront supprimées. \nÊtes-vous certain(e) ? Cette action est irréversible ! - Supprimer les vidéos visionnées ? + Les flux visionnés avant et après leur ajout à la playlist seront supprimés.\nÊtes-vous sûr ? + Supprimer les flux visionnés ? Miniature de l\'avatar de la chaine De %s Créé par %s @@ -723,7 +723,7 @@ Appuyez pour télécharger %s Échec de la copie dans le presse-papiers Cette option est disponible seulement si %s est sélectionné pour le thème - Les listes de lecture grisées contiennent déjà cet élément. + Les playlists grisées contiennent déjà cet élément. Carte Utile si, par exemple, vous utilisez un casque avec des boutons dysfonctionnels Effacer les doublons @@ -784,7 +784,7 @@ Albums Qualité moyenne Bannières - Listes de lecture + Playlists Plus d’options Miniatures Pistes @@ -836,7 +836,7 @@ Les paramètres de l\'export en cours d\'importation utilisent un format vulnérable qui a été déprécié depuis NewPipe 0.27.0. Assurez-vous que l\'export en cours d\'importation provient d\'une source fiable. Privilégiez les exports obtenues à partir de NewPipe 0.27.0 ou des versions plus récentes à l\'avenir. Le support pour l\'importation des paramètres dans ce format vulnérable sera bientôt complètement supprimé et les anciennes versions de NewPipe ne pourront plus importer les paramètres des exports des nouvelles versions. secondaire Partager comme liste de lecture YouTube temporaire - Listes de lecture + Playlists Sélectionnez un groupe de flux Encore aucun groupe de flux créé Page du groupe de chaînes diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index c979ab2295a..24d916464a0 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -528,9 +528,9 @@ \n \nיש להפעיל את „%1$s” בהגדרות כדי לצפות בו. כן, לרבות סרטונים שהפסקתי באמצע - סרטונים שלאחר שצפית בהם מופיע לרשימת הנגינה יוסרו. \nלהמשיך? זאת פעולה בלתי הפיכה! + תזרימים שלאחר שצפית בהם לפני ואחרי שנוספו לרשימת הנגינה יוסרו. \nלהמשיך? הסרת נצפו - להסיר סרטונים שנצפו? + להסיר תזרימים שנצפו? הטקסט המקורי משירותים יופיע בפריטי התזרים הצגת לפני כמה זמן מקורי על פריטים הפעלת „מצב מוגבל” של YouTube diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index ad5ac913dc8..03f868de9b5 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -584,7 +584,7 @@ Hírfolyam feldolgozása… Egyes szolgáltatásoknál érhető el, általában sokkal gyorsabb, és korlátozott számú elemet adhat vissza, gyakran hiányos információkkal (például nincs hossz, elemtípus, vagy élő videó állapot) Fiók eltávolítva - Megjelölés megnézettként + Megjelölés megtekintettként Még nincs letöltési mappa beállítva, válassza ki az alapértelmezett letöltési mappát most Tekerősáv bélyegkép-előnézete Magas minőségű (nagyobb) @@ -620,8 +620,8 @@ Címkék Adatvédelem Gyors mód letiltása - Igen, és távolítsa el a részben megnézett videókat is - A videók, melyeket már megnézett miután a lejátszási listához adta őket, el lesznek távolítva. \nBiztos benne? Ez nem vonható vissza! + Távolítsa el a részben megtekintett közvetítéseket + A lejátszási listához való hozzáadás előtt és után megtekintett közvetítések el lesznek távolítva.\nBiztos benne? A szolgáltatásokból származó eredeti szövegek láthatók lesznek a közvetítési elemeken Lejátszó összeomlasztása Képjelölők megjelenítése @@ -630,8 +630,8 @@ Hangmagasság megtartása (torzítást okozhat) Frissítések keresése Ne jelenítse meg - Megnézettek eltávolítása - Eltávolítja a megnézett videókat? + Megtekintettek eltávolítása + Eltávolítja a megtekintett közvetítéseket? %1$s letöltés törölve %1$s letöltés törölve diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 9473f5f9235..cf3fbd8b2c6 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -260,8 +260,8 @@ Gefa Vefsíða Lesa persónuverndarstefnu - Ferill - Ferill + Áhorf + Áhorf Lesa leyfi Nýlega spilað Mest spilað @@ -296,8 +296,7 @@ Skýringartexti Flytja inn Flytur inn… - Í samræmi við almenna persónuverndarreglugerðin ESB vekjum við athygli þína á persónuverndarstefnu NewPipe. Vinsamlegast lestu hana vandlega. -\nÞú verður að samþykkja hana til að senda okkur villuskýrsluna. + Í samræmi við almenna persónuverndarreglugerðin ESB vekjum við athygli þína á persónuverndarstefnu NewPipe. Lestu hana vandlega. \nÞú verður að samþykkja hana til að senda okkur villuskýrsluna. Hraði Tónhæð Skref @@ -533,7 +532,7 @@ %s nýtt streymi %s ný streymi - Vinsamlega veldu niðurhalsmöppu síðar í stillingunum + Skilgreindu niðurhalsmöppu síðar í stillingunum Engin niðurhalsmappa er stillt ennþá. Veldu sjálfgefna niðurhalsmöppu núna Þessa heimildar þarfnast til að \nopna í sprettiglugga @@ -549,7 +548,7 @@ \nVirkjaðu kerfismöppuval (SAF) ef þú vilt nota ytra SD-kort Þú verður spurð(ur) hvert ætti að sækja skrár í hvert skipti Virkja kerfismöppuval (SAF) - Fjarlægja áhorfð myndskeið? + Fjarlægja streymi sem búið er að horfa á? Streymi síðast uppfært %s Ekki hlaðið: %d Ný atriði í streymi @@ -568,10 +567,8 @@ Skapað af %s Nota smámynd fyrir tilkynningar og bakgrunn lásskjás Ekkert forrit í tækinu þínu getur opnað þetta - Enginn viðeigandi skráarstjóri fannst fyrir þessa aðgerð. -\nVinsamlegast settu upp skráastjóra eða reyndu að slökkva á ‚%s‘ í niðurhalsstillingunum - Enginn viðeigandi skráarstjóri fannst fyrir þessa aðgerð. -\nVinsamlegast settu upp skráarstjóra sem styður Geymsluaðgangsramma (SAF) + Enginn viðeigandi skráastjóri fannst fyrir þessa aðgerð. \nEndilega settu upp skráastjóra eða reyndu að slökkva á \'%s\' í niðurhalsstillingunum + Enginn viðeigandi skráastjóri fannst fyrir þessa aðgerð. \nSettu upp skráastjóra sem styður Storage Access Framework Þetta efni er ekki fáanlegt í þínu landi. Þetta efni er aðeins í boði fyrir notendur sem hafa greitt — það er ekki hægt að streyma því eða sækja með NewPipe. Sjálfvirk (þema tækis) @@ -673,9 +670,9 @@ %1$s sóttum skrám eytt Fjöldi tilrauna áður en hætt er við niðurhal - Myndskeiðum sem skoðuð voru áður eða eftir að þeim var bætt við spilunarlistann verður eytt. \nErtu viss? Það er ekki hægt að afturkalla þetta! + Myndskeiðum sem skoðuð voru áður eða eftir að þeim var bætt við spilunarlistann verður eytt. \nErtu viss? Já og skoðuð að hluta - Nota RSS ef tiltækt + Sækja úr tileinkuðu streymi þegar það er tiltækt Hjartað af höfunda Slökkt er á tilkynningum Þú ert nú áskrifandi diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 10a3c976ff0..7955eed1514 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -518,7 +518,7 @@ \n \nAttivare «%1$s» nelle Impostazioni per poterlo vedere. Sì, anche quelli visualizzati parzialmente - I video che sono stati visti prima e dopo essere stati aggiunti alla playlist verranno rimossi. \nProcedere? L\'azione è irreversibile! + I video che sono stati visti prima e dopo essere stati aggiunti alla playlist verranno rimossi. \nProcedere? Rimuovere i video già visti? Rimuovi elementi visti Attiva la \"Modalità con restrizioni\" di YouTube diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index 29db7417227..055af88f9a6 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -6,7 +6,7 @@ Akk Sbedd asnas n Kore yexxuṣen\? Sbedd - Asider + Sader Isadaren Isadaren Iɣewwaren @@ -79,7 +79,7 @@ Imesli Iselkinen Afaw - Sider + Sader Asfaylu udhim Ttu Kter @@ -94,7 +94,7 @@ Aneggaru yettwaslekmen Taɣuri tawurmant Aneqqis - Sider + Sader Tuccḍa Iɛǧeb-iyi Tiddin @@ -125,7 +125,7 @@ Pas Amezwer n unagraw Snifel isem - Asider ur yeddi ara + Asader ur yeddi ara Tamwalit Aɣawas n deffir Amazray diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 39a985a96d0..8eb19ade820 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -362,7 +362,7 @@ 서버에 연결할 수 없습니다 서버가 데이터를 전송하지 않고 있습니다 서버가 다중 스레드 다운로드를 받아들이지 않습니다, @string/msg_threads = 1 를 사용해 다시 시도해보세요 - HTTP 찾을 수 없습니다 + 찾을 수 없음 후처리 작업이 실패하였습니다 멈추기 최대 재시도 횟수 @@ -659,7 +659,7 @@ 구독 선택 일부 서비스에서 사용할 수 있으며 일반적으로 훨씬 빠르지만 제한된 양의 항목과 종종 불완전한 정보를 반환할 수 있습니다 (예: 기간 없음, 항목 유형, 라이브 상태 없음) 안드로이드 10부터 \'저장영역 접속 프레임워크\'만 지원됩니다 - 재생 목록에 추가되기 전과 후에 시청한 동영상은 제거됩니다. \n확실합니까? 이것은 취소 할 수 없습니다! + 재생목록에 추가하기 전후로 시청한 스트림이 제거됩니다. \n정말 계속합니까? 화면 자동 회전이 잠겨 있는 경우 미니 플레이어에서 동영상을 시작하지 말고 바로 전체 화면 모드로 재생하세요. 전체 화면을 종료해서 미니 플레이어를 이용할 수도 있습니다 공식 라디오 @@ -825,4 +825,14 @@ 인기 급상승 팟캐스트 인기 급상승 영화 및 쇼 인기 급상승 음악 + 팝업 플레이어를 사용하려면, 이후 Android 설정에서 %1$s 선택 후 %2$s 설정을 켜 주십시오. + 항목 삭제 + 보조 + 좋아요 + 항목 삭제됨 + 재생 중 서버에서 HTTP 403 오류를 수신했으며, 스트리밍 URL이 만료되었거나 IP 차단으로 인해 발생했을 수 있습니다 + 재생 중 서버에서 HTTP %1$s 오류를 수신했습니다 + 재생 중 서버에서 HTTP 403 오류를 수신했으며, 스트리밍 URL 역난독화 문제나 IP 차단 때문일 수 있습니다 + %1$s에서 데이터 제공을 거부하고, 요청자가 봇이 아닌지 확인하기 위해 로그인을 요청하고 있습니다.\n\n아마 IP가 %1$s에서 임시 차단되었을 것이며, 잠시 기다리거나 다른 IP로 전환할 수 있습니다 (예를 들자면 VPN을 켜/끄거나, WiFi를 모바일 데이터로 바꾸세요). + 이 콘텐츠는 현재 선택한 콘텐츠 지역에서 이용할 수 없습니다.\n\n\"설정 > 콘텐츠 > 기본 콘텐츠 국가\"에서 지역을 바꾸세요. diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index f36c2aff61d..bb41037a15e 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -6,7 +6,7 @@ Dzēst atskaņošanas sarakstu\? Iestatīt, kā atskaņošanas saraksta attēlu Pievienot atskaņošanas sarakstam - Vārds + Nosaukums Pārsaukt Jauns Atskaņošanas Saraksts Ielādē prasīto saturu @@ -29,15 +29,15 @@ Jauns un populārs Top 50 Nevarēja ielādēt komentārus - Vai jūs vēlaties arī importēt iestatījumus\? + Vai jūs vēlaties ievietot arī iestatījumus? Šis pārrakstīt jūsu tagadējo uzstādījumu. - Brīdinājums: Nevarēja importēt visus failus. + Uzmanību: Ne visas datnes varēja ievietot. Nav derīgs ZIP fails - Importēts + Ievietošana pabeigta Eksportēts - Izvēlaties kiosku + Atlasiet kiosku Nav atskaņošanas sarakstu pagaidām - Izvēlaties atskaņošanas sarakstu + Atlasiet atskaņošanas sarakstu Nav kanālu abonamentu pagaidām Atlasiet kanālu Kanāls @@ -128,13 +128,13 @@ %s skatījumi Nav skatījumu - Abonamentu skaits nav pieejams + Abonentu skaits nav pieejams - %s abonamentu - %s abonaments - %s abonamenti + %s abonenti + %s abonents + %s abonenti - Nav abonamentu + Nav abonentu Izvēlaties pakalpojumu, šobrīd izvēlēts: Atkārtot Audio @@ -208,11 +208,11 @@ Notīrīt skatīšanās vēsturi Notīrīt sīkfailus , kurus NewPipe saglabā, kad jūs atrisinat reCAPTCHA Eksportēt vēsturi, abonementus, atskaņošanas sarakstus un iestatījumus - Pārrakstīt jūsu tagadējo vēsturi, abonementus, atskaņošanas sarakstus un (pēc izvēles) iestatījumus + Aizstās jūsu pašreizējo vēsturi, abonementus, atskaņošanas sarakstus un (pēc izvēles) iestatījumus reCAPTCHA sīkfaili tika izdzēsti Izdzēst reCAPTCHA sīkfailus Eksportēt datubāzi - Importēt datubāzi + Ievietot datubāzi Pārslēgt uz Galveno Pārslēgt uz Popup Pārslēgt uz Fonu @@ -267,7 +267,7 @@ Ievadīt instances saites URL Pievienot instanci Atrodiet instances, kas jums patīk ar %s - Izvēlaties jūsu mīļākās PeerTube instances + Atlasiet savas iecienītākās PeerTube instances PeerTube serveri (instances) Neviena lietotne jūsu ierīcē nevar šo atvērt Nodaļas @@ -300,9 +300,9 @@ Laiks pēc pēdējās atjaunināšanas, pirms abonements tiek uzskatīts par novecojušu — %s Plūsmas atjaunināšanas biežuma slieksnis Straume - Rādīt tikai nesagrupētus abonementus + Rādīt tikai nepievienotus grupai abonementus Jauna - Vai vēlaties izdzēst šo grupu\? + Vai tiešām vēlaties izdzēst šo grupu? Tukšs grupas nosaukums %d atlasīti @@ -310,12 +310,12 @@ %d atlasīti Nav atlasīts neviens abonements - Atlasiet abonementus + Atlasīt abonementus Notiek plūsmas apstrāde … Notiek plūsmas ielāde… Nav ielādēts: %d Plūsma pēdējoreiz atjaunināta: %s - Kanālu grupas + Abonementu grupas Kas jauns %d dienas @@ -457,10 +457,10 @@ Pagājušais eksports Importēt failu Eksportē… - Importē… + Ievieto… Eksportēt uz - Importēt no - Importēt + Ievietot no + Ievietot Rādīt oriģinālo laiku uz lietām Rādīt atmiņas noplūdes Subtitri @@ -681,12 +681,12 @@ Jebkurš tīkls Jums ir jaunākā NewPipe versija Noderīgi, piemēram, lietojot austiņas ar bojātām pogām - Izvēlēties skaņu celiņu ar audio aprakstu cilvēkiem ar redzes traucējumiem, ja tāds ir pieejams + Atskaņos skaņu celiņu ar audio aprakstiem vājredzīgajiem, ja tāds ir pieejams Ignorēt ierīces multimēdiju pogas Izdzēst visus lejupielādētos failus\? Jaunumi kanālā Dot priekšroku oriģinālajai skaņai - Izvēlēties oriģinālo skaņu celiņu neatkarīgi no valodas + Atskaņos oriģinālo skaņu celiņu neatkarīgi no valodas Dot priekšroku skaņu celiņam ar audio aprakstu Izvēlēties žestu kreisajai atskaņotāja ekrāna pusei Izvēlēties žestu labajai atskaņotāja ekrāna pusei @@ -694,7 +694,7 @@ Spilgtums Skaļums Nekā - Importējiet vai eksportējiet abonementus 3-punktu izvēlnē + Abonementus var ievietot vai izgūt, izmantojot 3-punktoto izvēlni augšējā labajā ekrāna stūrī Ja Jums rodas problēmas ar lietotni, noteikti apskatiet šīs atbildes bieži uzdotiem jautājumiem! Skatīt tīkla vietnē Skaņa: %s @@ -833,4 +833,10 @@ Pašlaik populārs spēļu nozarē YouTube pārtrauca piedāvāt apvienoto pašlaik populārs lapu kopš 2025. gada 21. jūlija. NewPipe aizstāja noklusējuma pašlaik populārs lapu ar pašlaik populāras tiešraides.\n\nJūs variet atlasīt arī citas pašlaik populārs lapas zem \"Iestatījumi > Saturs > Galvenā lapa\". Dzēst datni + Dzēst ierakstu + Ieraksts dzēsts + Abonementu grupu + Atlasiet abonementu grupu + YouTube likvidēja apvienoto pašlaik populārs + “Ļaut rādīt virs citām lietotnēm” diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index e70e61a74b8..b0039bf0cd0 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -6,7 +6,7 @@ Tiada pemain strim yang ditemui (anda boleh memasang VLC untuk memainkan). Pasang Batal - Buka dalam pelayar + Buka dalam pelayar web Buka dalam mod timbul Kongsi Muat turun @@ -16,53 +16,53 @@ Adakah anda maksudkan \"%1$s\"\? Berkongsi dengan Guna pemain video luaran - Menghilangkan audio untuk beberapa resolusi + Mengalih keluar audio pada sesetengah resolusi Gunakan pemain audio luaran Langgan Dilanggan - Langganan saluran dihenti + Saluran dinyahlanggan Tidak dapat menukar langganan Tidak dapat mengemaskini langganan Papar maklumat Langganan - Penanda halaman Senarai main + Senarai Main Yang Disimpan Henti langganan Pilih Tab Apa yang Baru Latar Belakang - Popup + Tetingkap Timbul Tambahkan Ke Folder muat turun video - Fail video yang dimuat turun disimpan di sini + Fail video yang telah dimuat turun disimpan di sini Pilih folder muat turun untuk fail video - Lokasi muat turun audio + Folder muat turun audio Fail audio yang dimuat turun disimpan di sini Pilih folder muat turun untuk fail audio - Resolusi utama - Resolusi popup utama + Resolusi asal + Resolusi asal tetingkap timbul Papar resolusi yang lebih tinggi - Hanya peranti tertentu yang boleh bermain video 2K/4K - Main dengan Kodi - Pasangkan aplikasi Kode yang tidak dijumpai\? - Paparkan opsyen \"Main dengan Kodi\" - Paparkan opsyen untuk memain video dengan Kodi + Hanya peranti tertentu sahaja yang boleh memainkan video 2K/4K + Main menggunakan Kodi + Pasang aplikasi Kore yang tidak ditemui? + Paparkan pilihan \"Main menggunakan Kodi\" + Paparkan pilihan untuk memainkan video melalui Kodi Audio - Format audio utama - Format video utama + Format audio asal + Format video asal Tema Cerah Gelap Hitam - Mengingat saiz dan posisi popup - Mengingat saiz dan posisi popup terakhir - Gunakan tinjau laju tidak tepat - Membolehkan pemain untuk meninjau ke posisi lebih laju dengan kurang ketepatan. Mencari 5, 15 atau 25 saat tidak berfungsi dengan ini + Ingat tetapan tetingkap timbul + Ingat saiz dan kedudukan terakhir tetingkap timbul + Guna langkauan masa pantas (kurang jitu) + Carian kurang jitu membolehkan pemain layar untuk melangkau masa lebih pantas dengan ketepatan rendah. Langkauan masa 5, 15 atau 25 saat tidak akan berfungsi dengan pilihan ini Cache imej dihapuskan Hapuskan cache metadata Hapuskan semua cache data halaman web Cache metadata dihapuskan - Automatik beratur strim seterusnya - Tambahkan secara automatik strim berkaitan apabila memain strim terakhir dalam giliran tidak berulang. + Tambah siaran seterusnya ke giliran secara automatik + Cadangan carian Tunjukkan cadangan semasa mencari Sejarah carian @@ -403,32 +403,32 @@ Tunjuk kandungan yang mungkin tidak wajar untuk kanak-kanak kerana mempunyai had umur (seperti 18+) URL tidak dikenali. Buka dengan aplikasi lain\? Kosongkan data - Matikan untuk menyembunyikan kotak meta-maklumat yang ada maklumat lanjut tentang pencipta, kandungan strim atau permintaan carian + Matikan untuk menyembunyikan kotak maklumat meta yang mengandungi maklumat tambahan mengenai pencipta, kandungan siaran atau permintaan carian Matikan untuk menyembunyikan deskripsi video dan maklumat lanjut - Tunjuk deskripsi + Tunjukkan deskripsi Matikan untuk menyembunyikan ulasan - Tunjuk ulasan - Tempoh langkau/balik - Tema Malam - Anda hanya boleh pilih hingga tiga aksi untuk dipapar dalam pemberitahuan padat! - Tekan untuk menyunting setiap aksi pemberitahuan di bawah. Pilih hingga tiga di antaranya untuk tunjukkannya di dalam pemberitahuan padat dengan menggunakan kotak pilihan di sebelah kanan - Baris gilir daripada pemain yang aktif akan digantikan - Menukar ke pemain yang lain mungkin akan menggantikan baris gilir anda - Minta untuk pengesahan sebelum mengosongkan baris gilir - Mewarnai pemberitahuan + Tunjukkan ulasan + Tempoh langkauan laju ke hadapan/ke belakang + Tema malam + Anda hanya boleh memilih sehingga tiga tindakan sahaja untuk dipaparkan dalam pemberitahuan kompak! + Edit setiap tindakan pemberitahuan di bawah dengan mengetiknya. Pilih sehingga tiga tindakan untuk dipaparkan pada pemberitahuan kompak dengan menggunakan kotak semak di sebelah kanan. + Senarai gilir daripada pemain yang aktif akan digantikan + Menukar kepada pemain layar yang lain mungkin akan menggantikan senarai gilir anda + Minta untuk pengesahan sebelum mengosongkan senarai gilir + Warnakan pemberitahuan Tiada - Ocok + Rombak Ulang - Butang aksi kelima - Butang aksi keempat - Butang aksi ketiga - Butang aksi kedua - Butang aksi pertama + Butang tindakan kelima + Butang tindakan keempat + Butang tindakan ketiga + Butang tindakan kedua + Butang tindakan pertama tidak boleh tulis ganti fail Fail dengan nama yang sama sudah ada Jangan tunjuk Nyahbisu - Minta Android menyesuaikan warna pemberitahuan sesuai dengan warna utama di thumbnail (perhatikan bahawa ini tidak tersedia dalam semua perangkat) + Biar Android menyesuaikan warna pemberitahuan mengikut warna utama pada lakaran kecil (ambil perhatian bahawa ini tidak tersedia pada semua peranti) Auto-main Sambung main Tidak boleh memuat komentar @@ -510,4 +510,23 @@ Lakaran kecil Avatar pemuat naik Avatar saluran kecil + Ya + Tandakan sebagai telah ditonton + Cari %1$s + Cari %1$s (%2$s) + Senarai Main + Gagalkan pemain + Pangkas lakaran kecil kepada nisbah aspek 1:1 + Pangkas lakaran kecil video dalam pemberitahuan daripada nisbah 16:9 kepada 1:1 + Edit setiap tindakan pemberitahuan di bawah dengan mengetiknya. Tiga tindakan pertama (main/jeda, sebelumnya dan seterusnya) telah ditetapkan oleh sistem dan tidak boleh diubah suai. + Memuatkan + Saiz selang muatan main balik + Mengubah saiz selang muatan pada kandungan progresif (kini %s). Nilai yang lebih rendah mungkin dapat mempercepatkan pemuatan awal + Abaikan isyarat butang media + Berguna, sebagai contoh, jika anda menggunakan fon kepala dengan butang fizikal yang rosak + Tunjukkan info meta + Pilih audio asal + Pilih trek audio asal tanpa mengira bahasa + Pilih audio deskriptif + Pilih audio dengan deskripsi untuk golongan kurang upaya penglihatan jika ada diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 5580ea24af5..c72e6de26e9 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -522,9 +522,9 @@ To wideo jest objęte ograniczeniem wiekowym. \n \nWłącz „%1$s” w ustawieniach, jeśli chcesz je zobaczyć. - Tak, i częściowo obejrzane wideo - Wideo, które zostały obejrzane przed i po dodaniu do playlisty, zostaną usunięte. \nCzy na pewno? Tego nie da się cofnąć! - Czy usunąć obejrzane wideo? + Usuń częściowo obejrzane strumienie + Strumienie, które zostały obejrzane przed i po dodaniu do playlisty, zostaną usunięte. \nCzy na pewno? + Czy usunąć obejrzane strumienie? Usuń obejrzane Oryginalne teksty z usług będą widoczne w strumieniowanych pozycjach Pokazuj oryginalny czas na pozycjach diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 9f79f233149..e05ab384279 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -110,8 +110,8 @@ Čo je nové Hľadať v histórií Hľadané výrazy uloží lokálne - História pozretí - Uloží históriu pozretých videí + História pozerania + Uloží históriu pozeraných videí Pokračovať v prehrávaní Pokračouje v prehrávaní po prerušení (napr. po telefonáte) NewPipe oznámenia @@ -147,11 +147,12 @@ %s odberatelia %s odberateľov - Žiadne pozretia + Žiadne zobrazenia - %s pozriete - %s pozretia - %s pozretí + %s zobrazenie + %s zobrazenia + %s zobrazení + %s zobrazení Žiadne videá @@ -296,10 +297,10 @@ Rýchlosť Výška Spraviť nezávislými (môže spôsobovať skreslenie) - Vymazať históriu pozretí + Vymazať históriu pozerania Odstráni históriu a pozície prehrávaných streamov - Vymazať celú históriu pozretí\? - História pozretí bola vymazaná + Vymazať celú históriu pozerania? + História pozerania bola vymazaná Vymazať históriu vyhľadávania Odstráni históriu vyhľadávania kľúčových slov Vymazať celú históriu vyhľadávania\? @@ -510,9 +511,9 @@ \n \nMožno v budúcnosti sa to zmení. Áno aj čiastočne pozreté videá - Pozreté videá, ktoré ste pozreli pred a po ich pridaní do playlistu, budú odstránené. \nSte si istí ich odstránením z playlistu? Táto operácia je nezvratná! - Odstrániť pozreté videá? - Odstrániť pozreté + Videá, ktoré ste sledovali pred a po pridaní do playlistu, budú odstránené. \nNaozaj to chcete urobiť? + Odstrániť pozerané videá? + Odstrániť pozerané Pôvodné texty zo služieb budú viditeľné v položkách streamu Zobrazovať pôvodný čas ∞ videí diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index fb23c9201b0..7806044ce23 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -474,8 +474,8 @@ På grund av ExoPlayer-begränsningar sattes söktiden till %d sekunder Ja, och delvis tittade videor - Videor som har spelats före och efter att de har lagts till i spellistan kommer att tas bort. \nÄr du säker? Detta kan inte ångras! - Ta bort tittade videor? + Strömningar som har spelats före och efter att de har lagts till i spellistan kommer att tas bort. \nÄr du säker? + Ta bort tittade strömningar? Ta bort tittade Systemstandard Appspråk diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 083225ff93a..aa641503b96 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -506,9 +506,9 @@ Bu video yaş kısıtlıdır. \n \nGörmek istiyorsanız ayarlarda \"%1$s\" seçeneğini açın. - Oynatma listesine eklendikten önce ve sonra izlenen videolar kaldırılacak. \nEmin misiniz? Bu geri döndürülemez! + Oynatma listesine eklenmeden önce ve sonra izlenen yayınlar kaldırılacaktır. \nEmin misiniz? Evet ve kısmen izlenmiş videolar - İzlenen videoları kaldır? + İzlenen yayınları kaldır? İzleneni kaldır Akış ögelerinde hizmetlerden alınan özgün metinler görünecektir Ögelerde özgün \'… önce\'yi göster diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 50ca67efcf4..cde4821fa14 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -62,7 +62,7 @@ Lỗi Lỗi kết nối mạng Không thể tải tất cả hình thu nhỏ - Không thể phân tích cú pháp trang web + Không thể phân tích cú pháp trang web vì trang này đã ngừng hoạt động vào 21/07/2025. Nội dung không khả dụng Không thể thiết lập menu tải về Ứng dụng/Giao diện người dùng bị lỗi diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 7622cddcfb0..88b30af5ea5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -501,7 +501,7 @@ 由 %s 创建 频道的头像缩略图 是的,包括没看完的视频 - 已经看过且在之后被加入播放列表的视频将被删除。 \n您确定吗?操作不能被撤消! + 已经看过且在之后被加入播放列表的视频将被删除。 \n您确定吗? 移除看过的视频? 移除看过的视频 来自服务的原始文本将在串流项目中可见 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index d69f4e5a8ea..f5ebc2bf8be 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -480,8 +480,8 @@ \n \n如果您想要觀看,請在設定中開啟「%1$s」。 是的,包括已部份觀看的影片 - 已觀看過的影片在加入播放清單後將被移除。\n您確定嗎?此動作無法復原! - 移除已觀看的影片? + 已觀看過的串流在加入播放清單後將被移除。\n您確定嗎? + 移除已觀看的串流? 移除已觀看的影片 來自服務的原始文字將在串流項目中可見 在項目上顯示原始時間 From 5e1a1989be6a89b70e8839b24b5a422a670de5fa Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 6 Feb 2026 19:03:01 +0200 Subject: [PATCH 22/92] VideoDetailFragment: Forcefully catch click events uncaught by children Because otherwise they will be caught by underlying view and "click through" will happen. Workaround for #5600 --- .../newpipe/fragments/detail/VideoDetailFragment.java | 6 ++++++ 1 file changed, 6 insertions(+) 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 ef9fa1137ff..31a4967116e 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 @@ -646,6 +646,12 @@ protected void initViews(final View rootView, final Bundle savedInstanceState) { protected void initListeners() { super.initListeners(); + // Workaround for #5600 + // Forcefully catch click events uncaught by children because otherwise + // they will be caught by underlying view and "click through" will happen + binding.getRoot().setOnClickListener(v -> { }); + binding.getRoot().setOnLongClickListener(v -> true); + setOnClickListeners(); setOnLongClickListeners(); From d6be966db36bca3d40611675e0d1a6693870f8d4 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 9 Jan 2026 19:39:47 +0200 Subject: [PATCH 23/92] Replace Illegal{State,Argument} exceptions with more idiomatic kotlin code --- .../main/java/org/schabi/newpipe/about/AboutActivity.kt | 4 ++-- .../org/schabi/newpipe/database/stream/dao/StreamDAO.kt | 2 +- .../newpipe/database/subscription/SubscriptionDAO.kt | 2 +- .../newpipe/player/mediabrowser/MediaBrowserCommon.kt | 4 ++-- .../newpipe/player/mediabrowser/PackageValidator.kt | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt index cfb504200f1..94bde796b83 100644 --- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt @@ -92,7 +92,7 @@ class AboutActivity : AppCompatActivity() { return when (position) { posAbout -> AboutFragment() posLicense -> LicenseFragment.newInstance(SOFTWARE_COMPONENTS) - else -> throw IllegalArgumentException("Unknown position for ViewPager2") + else -> error("Unknown position for ViewPager2") } } @@ -105,7 +105,7 @@ class AboutActivity : AppCompatActivity() { return when (position) { posAbout -> R.string.tab_about posLicense -> R.string.tab_licenses - else -> throw IllegalArgumentException("Unknown position for ViewPager2") + else -> error("Unknown position for ViewPager2") } } } diff --git a/app/src/main/java/org/schabi/newpipe/database/stream/dao/StreamDAO.kt b/app/src/main/java/org/schabi/newpipe/database/stream/dao/StreamDAO.kt index a6ab2c6cc77..86ba262f5d7 100644 --- a/app/src/main/java/org/schabi/newpipe/database/stream/dao/StreamDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/stream/dao/StreamDAO.kt @@ -87,7 +87,7 @@ abstract class StreamDAO : BasicDAO { private fun compareAndUpdateStream(newerStream: StreamEntity) { val existentMinimalStream = getMinimalStreamForCompare(newerStream.serviceId, newerStream.url) - ?: throw IllegalStateException("Stream cannot be null just after insertion.") + ?: error("Stream cannot be null just after insertion.") newerStream.uid = existentMinimalStream.uid if (!StreamTypeUtil.isLiveStream(newerStream.streamType)) { diff --git a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt index e6fdcbf70ec..72bdbcf5cc7 100644 --- a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt @@ -100,7 +100,7 @@ abstract class SubscriptionDAO : BasicDAO { entity.uid = uidFromInsert } else { val subscriptionIdFromDb = getSubscriptionIdInternal(entity.serviceId, entity.url!!) - ?: throw IllegalStateException("Subscription cannot be null just after insertion.") + ?: error("Subscription cannot be null just after insertion.") entity.uid = subscriptionIdFromDb update(entity) diff --git a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserCommon.kt b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserCommon.kt index 12d69a163a0..fb879bd7ca2 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserCommon.kt +++ b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserCommon.kt @@ -22,7 +22,7 @@ internal fun infoItemTypeToString(type: InfoType): String { InfoType.STREAM -> ID_STREAM InfoType.PLAYLIST -> ID_PLAYLIST InfoType.CHANNEL -> ID_CHANNEL - else -> throw IllegalStateException("Unexpected value: $type") + else -> error("Unexpected value: $type") } } @@ -31,7 +31,7 @@ internal fun infoItemTypeFromString(type: String): InfoType { ID_STREAM -> InfoType.STREAM ID_PLAYLIST -> InfoType.PLAYLIST ID_CHANNEL -> InfoType.CHANNEL - else -> throw IllegalStateException("Unexpected value: $type") + else -> error("Unexpected value: $type") } } diff --git a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/PackageValidator.kt b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/PackageValidator.kt index 05c94e990b5..ebc70c3b04d 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/PackageValidator.kt +++ b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/PackageValidator.kt @@ -82,11 +82,11 @@ internal class PackageValidator(context: Context) { // Build the caller info for the rest of the checks here. val callerPackageInfo = buildCallerInfo(callingPackage) - ?: throw IllegalStateException("Caller wasn't found in the system?") + ?: error("Caller wasn't found in the system?") // Verify that things aren't ... broken. (This test should always pass.) - if (callerPackageInfo.uid != callingUid) { - throw IllegalStateException("Caller's package UID doesn't match caller's actual UID?") + check(callerPackageInfo.uid != callingUid) { + "Caller's package UID doesn't match caller's actual UID?" } val callerSignature = callerPackageInfo.signature @@ -202,7 +202,7 @@ internal class PackageValidator(context: Context) { */ private fun getSystemSignature(): String = getPackageInfo(ANDROID_PLATFORM)?.let { platformInfo -> getSignature(platformInfo) - } ?: throw IllegalStateException("Platform signature not found") + } ?: error("Platform signature not found") /** * Creates a SHA-256 signature given a certificate byte array. From 37cef825a25a38ae8bed042257b1dafed115e08e Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Mon, 9 Feb 2026 14:31:56 +0200 Subject: [PATCH 24/92] Correct inverted check If performs action when value is true but check when false Fix for d6be966db36bca3d40611675e0d1a6693870f8d4 --- .../org/schabi/newpipe/player/mediabrowser/PackageValidator.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/PackageValidator.kt b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/PackageValidator.kt index ebc70c3b04d..619fa600a93 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/PackageValidator.kt +++ b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/PackageValidator.kt @@ -85,7 +85,7 @@ internal class PackageValidator(context: Context) { ?: error("Caller wasn't found in the system?") // Verify that things aren't ... broken. (This test should always pass.) - check(callerPackageInfo.uid != callingUid) { + check(callerPackageInfo.uid == callingUid) { "Caller's package UID doesn't match caller's actual UID?" } From 21f446a78e749a9c8611e91d95efb4d86938bd62 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Mon, 9 Feb 2026 17:04:55 +0200 Subject: [PATCH 25/92] Refactor settings/preferencesearch/PreferenceSearchItem#allRelevantSearchFields It doesn't need to return mutable list --- .../settings/preferencesearch/PreferenceSearchItem.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchItem.kt b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchItem.kt index 750e40eae03..82bbe7b232a 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchItem.kt +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchItem.kt @@ -26,14 +26,13 @@ data class PreferenceSearchItem( val breadcrumbs: String, @XmlRes val searchIndexItemResId: Int ) { + val allRelevantSearchFields: List + get() = listOf(title, summary, entries, breadcrumbs) + fun hasData(): Boolean { return !key.isEmpty() && !title.isEmpty() } - fun getAllRelevantSearchFields(): MutableList { - return mutableListOf(title, summary, entries, breadcrumbs) - } - override fun toString(): String { return "PreferenceItem: $title $summary $key" } From 289d22eed7798d39e5b0be2ef52a6863df93c3d8 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Mon, 9 Feb 2026 17:10:59 +0200 Subject: [PATCH 26/92] Utilize kotlins ifEmpty --- .../newpipe/database/playlist/model/PlaylistRemoteEntity.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.kt b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.kt index 82162e1e4ad..254fa425aa4 100644 --- a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.kt +++ b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.kt @@ -62,11 +62,7 @@ data class PlaylistRemoteEntity( orderingName = playlistInfo.name, url = playlistInfo.url, thumbnailUrl = ImageStrategy.imageListToDbUrl( - if (playlistInfo.thumbnails.isEmpty()) { - playlistInfo.uploaderAvatars - } else { - playlistInfo.thumbnails - } + playlistInfo.thumbnails.ifEmpty { playlistInfo.uploaderAvatars } ), uploader = playlistInfo.uploaderName, streamCount = playlistInfo.streamCount From 451409fc3baefea8138dfff44e415cad64f784ee Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Mon, 9 Feb 2026 22:54:28 +0200 Subject: [PATCH 27/92] SharedPreferences.edit applies changes automatically --- .../java/org/schabi/newpipe/local/feed/FeedViewModel.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt index 7e781b30f7d..58ec818f3bd 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt @@ -129,8 +129,7 @@ class FeedViewModel( fun setSaveShowPlayedItems(showPlayedItems: Boolean) { this.showPlayedItems.onNext(showPlayedItems) PreferenceManager.getDefaultSharedPreferences(application).edit { - this.putBoolean(application.getString(R.string.feed_show_watched_items_key), showPlayedItems) - this.apply() + putBoolean(application.getString(R.string.feed_show_watched_items_key), showPlayedItems) } } @@ -139,8 +138,7 @@ class FeedViewModel( fun setSaveShowPartiallyPlayedItems(showPartiallyPlayedItems: Boolean) { this.showPartiallyPlayedItems.onNext(showPartiallyPlayedItems) PreferenceManager.getDefaultSharedPreferences(application).edit { - this.putBoolean(application.getString(R.string.feed_show_partially_watched_items_key), showPartiallyPlayedItems) - this.apply() + putBoolean(application.getString(R.string.feed_show_partially_watched_items_key), showPartiallyPlayedItems) } } @@ -149,8 +147,7 @@ class FeedViewModel( fun setSaveShowFutureItems(showFutureItems: Boolean) { this.showFutureItems.onNext(showFutureItems) PreferenceManager.getDefaultSharedPreferences(application).edit { - this.putBoolean(application.getString(R.string.feed_show_future_items_key), showFutureItems) - this.apply() + putBoolean(application.getString(R.string.feed_show_future_items_key), showFutureItems) } } From edfdbe805ff098e1b000020fbc98400dc71df57d Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Mon, 9 Feb 2026 23:19:32 +0200 Subject: [PATCH 28/92] Uitilize kotlin elvis operator --- .../schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt index ab856278f7e..7a256c16601 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt @@ -327,7 +327,7 @@ class FeedGroupDialog : DialogFragment(), BackPressable { groupIcon = feedGroupEntity?.icon groupSortOrder = feedGroupEntity?.sortOrder ?: -1 - val feedGroupIcon = if (selectedIcon == null) icon else selectedIcon!! + val feedGroupIcon = selectedIcon ?: icon feedGroupCreateBinding.iconPreview.setImageResource(feedGroupIcon.getDrawableRes()) if (feedGroupCreateBinding.groupNameInput.text.isNullOrBlank()) { From 780e6a4848813108eb4d6b28acb18bb48001f4a3 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 9 Jan 2026 06:39:07 +0200 Subject: [PATCH 29/92] Convert newpipe/util/PlayButtonHelper to kotlin --- .../schabi/newpipe/util/PlayButtonHelper.java | 94 ------------------ .../schabi/newpipe/util/PlayButtonHelper.kt | 96 +++++++++++++++++++ 2 files changed, 96 insertions(+), 94 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/util/PlayButtonHelper.java create mode 100644 app/src/main/java/org/schabi/newpipe/util/PlayButtonHelper.kt diff --git a/app/src/main/java/org/schabi/newpipe/util/PlayButtonHelper.java b/app/src/main/java/org/schabi/newpipe/util/PlayButtonHelper.java deleted file mode 100644 index 655ea7092f2..00000000000 --- a/app/src/main/java/org/schabi/newpipe/util/PlayButtonHelper.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.schabi.newpipe.util; - -import android.content.Context; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.preference.PreferenceManager; - -import org.schabi.newpipe.R; -import org.schabi.newpipe.databinding.PlaylistControlBinding; -import org.schabi.newpipe.fragments.list.playlist.PlaylistControlViewHolder; -import org.schabi.newpipe.player.PlayerType; - -/** - * Utility class for play buttons and their respective click listeners. - */ -public final class PlayButtonHelper { - - private PlayButtonHelper() { - // utility class - } - - /** - * Initialize {@link android.view.View.OnClickListener OnClickListener} - * and {@link android.view.View.OnLongClickListener OnLongClickListener} for playlist control - * buttons defined in {@link R.layout#playlist_control}. - * - * @param activity The activity to use for the {@link android.widget.Toast Toast}. - * @param playlistControlBinding The binding of the - * {@link R.layout#playlist_control playlist control layout}. - * @param fragment The fragment to get the play queue from. - */ - public static void initPlaylistControlClickListener( - @NonNull final AppCompatActivity activity, - @NonNull final PlaylistControlBinding playlistControlBinding, - @NonNull final PlaylistControlViewHolder fragment) { - // click listener - playlistControlBinding.playlistCtrlPlayAllButton.setOnClickListener(view -> { - NavigationHelper.playOnMainPlayer(activity, fragment.getPlayQueue()); - showHoldToAppendToastIfNeeded(activity); - }); - playlistControlBinding.playlistCtrlPlayPopupButton.setOnClickListener(view -> { - NavigationHelper.playOnPopupPlayer(activity, fragment.getPlayQueue(), false); - showHoldToAppendToastIfNeeded(activity); - }); - playlistControlBinding.playlistCtrlPlayBgButton.setOnClickListener(view -> { - NavigationHelper.playOnBackgroundPlayer(activity, fragment.getPlayQueue(), false); - showHoldToAppendToastIfNeeded(activity); - }); - - // long click listener - playlistControlBinding.playlistCtrlPlayAllButton.setOnLongClickListener(view -> { - NavigationHelper.enqueueOnPlayer(activity, fragment.getPlayQueue(), PlayerType.MAIN); - return true; - }); - playlistControlBinding.playlistCtrlPlayPopupButton.setOnLongClickListener(view -> { - NavigationHelper.enqueueOnPlayer(activity, fragment.getPlayQueue(), PlayerType.POPUP); - return true; - }); - playlistControlBinding.playlistCtrlPlayBgButton.setOnLongClickListener(view -> { - NavigationHelper.enqueueOnPlayer(activity, fragment.getPlayQueue(), PlayerType.AUDIO); - return true; - }); - } - - /** - * Show the "hold to append" toast if the corresponding preference is enabled. - * - * @param context The context to show the toast. - */ - private static void showHoldToAppendToastIfNeeded(@NonNull final Context context) { - if (shouldShowHoldToAppendTip(context)) { - Toast.makeText(context, R.string.hold_to_append, Toast.LENGTH_SHORT).show(); - } - - } - - /** - * Check if the "hold to append" toast should be shown. - * - *

- * The tip is shown if the corresponding preference is enabled. - * This is the default behaviour. - *

- * - * @param context The context to get the preference. - * @return {@code true} if the tip should be shown, {@code false} otherwise. - */ - public static boolean shouldShowHoldToAppendTip(@NonNull final Context context) { - return PreferenceManager.getDefaultSharedPreferences(context) - .getBoolean(context.getString(R.string.show_hold_to_append_key), true); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/PlayButtonHelper.kt b/app/src/main/java/org/schabi/newpipe/util/PlayButtonHelper.kt new file mode 100644 index 00000000000..40734ec5822 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/PlayButtonHelper.kt @@ -0,0 +1,96 @@ +/* + * SPDX-FileCopyrightText: 2023-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.util + +import android.content.Context +import android.view.View +import android.view.View.OnLongClickListener +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.preference.PreferenceManager +import org.schabi.newpipe.R +import org.schabi.newpipe.databinding.PlaylistControlBinding +import org.schabi.newpipe.fragments.list.playlist.PlaylistControlViewHolder +import org.schabi.newpipe.player.PlayerType + +/** + * Utility class for play buttons and their respective click listeners. + */ +object PlayButtonHelper { + /** + * Initialize [OnClickListener][View.OnClickListener] + * and [OnLongClickListener][OnLongClickListener] for playlist control + * buttons defined in [R.layout.playlist_control]. + * + * @param activity The activity to use for the [Toast][Toast]. + * @param playlistControlBinding The binding of the + * [playlist control layout][R.layout.playlist_control]. + * @param fragment The fragment to get the play queue from. + */ + @JvmStatic + fun initPlaylistControlClickListener( + activity: AppCompatActivity, + playlistControlBinding: PlaylistControlBinding, + fragment: PlaylistControlViewHolder + ) { + // click listener + playlistControlBinding.playlistCtrlPlayAllButton.setOnClickListener { + NavigationHelper.playOnMainPlayer(activity, fragment.getPlayQueue()) + showHoldToAppendToastIfNeeded(activity) + } + playlistControlBinding.playlistCtrlPlayPopupButton.setOnClickListener { + NavigationHelper.playOnPopupPlayer(activity, fragment.getPlayQueue(), false) + showHoldToAppendToastIfNeeded(activity) + } + playlistControlBinding.playlistCtrlPlayBgButton.setOnClickListener { + NavigationHelper.playOnBackgroundPlayer(activity, fragment.getPlayQueue(), false) + showHoldToAppendToastIfNeeded(activity) + } + + // long click listener + playlistControlBinding.playlistCtrlPlayAllButton.setOnLongClickListener { + NavigationHelper.enqueueOnPlayer(activity, fragment.getPlayQueue(), PlayerType.MAIN) + true + } + playlistControlBinding.playlistCtrlPlayPopupButton.setOnLongClickListener { + NavigationHelper.enqueueOnPlayer(activity, fragment.getPlayQueue(), PlayerType.POPUP) + true + } + playlistControlBinding.playlistCtrlPlayBgButton.setOnLongClickListener { + NavigationHelper.enqueueOnPlayer(activity, fragment.getPlayQueue(), PlayerType.AUDIO) + true + } + } + + /** + * Show the "hold to append" toast if the corresponding preference is enabled. + * + * @param context The context to show the toast. + */ + private fun showHoldToAppendToastIfNeeded(context: Context) { + if (shouldShowHoldToAppendTip(context)) { + Toast.makeText(context, R.string.hold_to_append, Toast.LENGTH_SHORT).show() + } + } + + /** + * Check if the "hold to append" toast should be shown. + * + * + * + * The tip is shown if the corresponding preference is enabled. + * This is the default behaviour. + * + * + * @param context The context to get the preference. + * @return `true` if the tip should be shown, `false` otherwise. + */ + @JvmStatic + fun shouldShowHoldToAppendTip(context: Context): Boolean { + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(context.getString(R.string.show_hold_to_append_key), true) + } +} From 48467669b6d73fced59cdd93cced3a7da7f8ddc2 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 9 Jan 2026 07:00:26 +0200 Subject: [PATCH 30/92] Convert newpipe/util/PeertubeHelper to kotlin --- .../schabi/newpipe/util/PeertubeHelper.java | 69 ------------------- .../org/schabi/newpipe/util/PeertubeHelper.kt | 53 ++++++++++++++ 2 files changed, 53 insertions(+), 69 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.java create mode 100644 app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.kt diff --git a/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.java b/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.java deleted file mode 100644 index 34f99d26252..00000000000 --- a/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.schabi.newpipe.util; - -import android.content.Context; -import android.content.SharedPreferences; - -import androidx.preference.PreferenceManager; - -import com.grack.nanojson.JsonArray; -import com.grack.nanojson.JsonObject; -import com.grack.nanojson.JsonParser; -import com.grack.nanojson.JsonParserException; -import com.grack.nanojson.JsonStringWriter; -import com.grack.nanojson.JsonWriter; - -import org.schabi.newpipe.R; -import org.schabi.newpipe.extractor.ServiceList; -import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance; - -import java.util.ArrayList; -import java.util.List; - -public final class PeertubeHelper { - private PeertubeHelper() { } - - public static List getInstanceList(final Context context) { - final SharedPreferences sharedPreferences = PreferenceManager - .getDefaultSharedPreferences(context); - final String savedInstanceListKey = context.getString(R.string.peertube_instance_list_key); - final String savedJson = sharedPreferences.getString(savedInstanceListKey, null); - if (null == savedJson) { - return List.of(getCurrentInstance()); - } - - try { - final JsonArray array = JsonParser.object().from(savedJson).getArray("instances"); - final List result = new ArrayList<>(); - for (final Object o : array) { - if (o instanceof JsonObject) { - final JsonObject instance = (JsonObject) o; - final String name = instance.getString("name"); - final String url = instance.getString("url"); - result.add(new PeertubeInstance(url, name)); - } - } - return result; - } catch (final JsonParserException e) { - return List.of(getCurrentInstance()); - } - } - - public static PeertubeInstance selectInstance(final PeertubeInstance instance, - final Context context) { - final SharedPreferences sharedPreferences = PreferenceManager - .getDefaultSharedPreferences(context); - final String selectedInstanceKey = - context.getString(R.string.peertube_selected_instance_key); - final JsonStringWriter jsonWriter = JsonWriter.string().object(); - jsonWriter.value("name", instance.getName()); - jsonWriter.value("url", instance.getUrl()); - final String jsonToSave = jsonWriter.end().done(); - sharedPreferences.edit().putString(selectedInstanceKey, jsonToSave).apply(); - ServiceList.PeerTube.setInstance(instance); - return instance; - } - - public static PeertubeInstance getCurrentInstance() { - return ServiceList.PeerTube.getInstance(); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.kt b/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.kt new file mode 100644 index 00000000000..3da7958d272 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.kt @@ -0,0 +1,53 @@ +/* + * SPDX-FileCopyrightText: 2019-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.util + +import android.content.Context +import androidx.core.content.edit +import androidx.preference.PreferenceManager +import com.grack.nanojson.JsonObject +import com.grack.nanojson.JsonParser +import com.grack.nanojson.JsonWriter +import org.schabi.newpipe.R +import org.schabi.newpipe.extractor.ServiceList +import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance + +object PeertubeHelper { + @JvmStatic + fun getInstanceList(context: Context): List { + val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) + val savedInstanceListKey = context.getString(R.string.peertube_instance_list_key) + val savedJson = sharedPreferences.getString(savedInstanceListKey, null) + if (savedJson == null) { + return listOf(currentInstance) + } + + return runCatching { + JsonParser.`object`().from(savedJson).getArray("instances") + .filterIsInstance() + .map { PeertubeInstance(it.getString("url"), it.getString("name")) } + }.getOrDefault(listOf(currentInstance)) + } + + @JvmStatic + fun selectInstance(instance: PeertubeInstance, context: Context): PeertubeInstance { + val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) + val selectedInstanceKey = context.getString(R.string.peertube_selected_instance_key) + + val jsonWriter = JsonWriter.string().`object`() + jsonWriter.value("name", instance.name) + jsonWriter.value("url", instance.url) + val jsonToSave = jsonWriter.end().done() + + sharedPreferences.edit { putString(selectedInstanceKey, jsonToSave) } + ServiceList.PeerTube.instance = instance + return instance + } + + @JvmStatic + val currentInstance: PeertubeInstance + get() = ServiceList.PeerTube.instance +} From 6cf932b2a714a1011849b3b2eb2fce8d0808f4aa Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 9 Jan 2026 11:51:41 +0200 Subject: [PATCH 31/92] Convert newpipe/ExitActivity to kotlin --- .../java/org/schabi/newpipe/ExitActivity.java | 50 ------------------- .../java/org/schabi/newpipe/ExitActivity.kt | 38 ++++++++++++++ 2 files changed, 38 insertions(+), 50 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/ExitActivity.java create mode 100644 app/src/main/java/org/schabi/newpipe/ExitActivity.kt diff --git a/app/src/main/java/org/schabi/newpipe/ExitActivity.java b/app/src/main/java/org/schabi/newpipe/ExitActivity.java deleted file mode 100644 index bd1351f0c1f..00000000000 --- a/app/src/main/java/org/schabi/newpipe/ExitActivity.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.schabi.newpipe; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; - -import org.schabi.newpipe.util.NavigationHelper; - -/* - * Copyright (C) Hans-Christoph Steiner 2016 - * ExitActivity.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 class ExitActivity extends Activity { - - public static void exitAndRemoveFromRecentApps(final Activity activity) { - final Intent intent = new Intent(activity, ExitActivity.class); - - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS - | Intent.FLAG_ACTIVITY_CLEAR_TASK - | Intent.FLAG_ACTIVITY_NO_ANIMATION); - - activity.startActivity(intent); - } - - @SuppressLint("NewApi") - @Override - protected void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - finishAndRemoveTask(); - - NavigationHelper.restartApp(this); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/ExitActivity.kt b/app/src/main/java/org/schabi/newpipe/ExitActivity.kt new file mode 100644 index 00000000000..854a07c4329 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/ExitActivity.kt @@ -0,0 +1,38 @@ +/* + * SPDX-FileCopyrightText: 2016-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import org.schabi.newpipe.util.NavigationHelper +class ExitActivity : Activity() { + @SuppressLint("NewApi") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + finishAndRemoveTask() + + NavigationHelper.restartApp(this) + } + + companion object { + @JvmStatic + fun exitAndRemoveFromRecentApps(activity: Activity) { + val intent = Intent(activity, ExitActivity::class.java) + + intent.addFlags( + Intent.FLAG_ACTIVITY_NEW_TASK + or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS + or Intent.FLAG_ACTIVITY_CLEAR_TASK + or Intent.FLAG_ACTIVITY_NO_ANIMATION + ) + + activity.startActivity(intent) + } + } +} From d665a4f01688e09eecacfc815bd58f2c57bd09f4 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 9 Jan 2026 12:11:48 +0200 Subject: [PATCH 32/92] Convert newpipe/util/NewPipeTextViewHelper to kotlin --- .../newpipe/util/NewPipeTextViewHelper.java | 61 ------------------- .../newpipe/util/NewPipeTextViewHelper.kt | 60 ++++++++++++++++++ 2 files changed, 60 insertions(+), 61 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.java create mode 100644 app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.kt diff --git a/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.java b/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.java deleted file mode 100644 index cf1a9a03ad9..00000000000 --- a/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.schabi.newpipe.util; - -import android.content.Context; -import android.text.Selection; -import android.text.Spannable; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import org.schabi.newpipe.util.external_communication.ShareUtils; -import org.schabi.newpipe.views.NewPipeEditText; -import org.schabi.newpipe.views.NewPipeTextView; - -public final class NewPipeTextViewHelper { - private NewPipeTextViewHelper() { - } - - /** - * Share the selected text of {@link NewPipeTextView NewPipeTextViews} and - * {@link NewPipeEditText NewPipeEditTexts} with - * {@link ShareUtils#shareText(Context, String, String)}. - * - *

- * This allows EMUI users to get the Android share sheet instead of the EMUI share sheet when - * using the {@code Share} command of the popup menu which appears when selecting text. - *

- * - * @param textView the {@link TextView} on which sharing the selected text. It should be a - * {@link NewPipeTextView} or a {@link NewPipeEditText} (even if - * {@link TextView standard TextViews} are supported). - */ - public static void shareSelectedTextWithShareUtils(@NonNull final TextView textView) { - final CharSequence textViewText = textView.getText(); - shareSelectedTextIfNotNullAndNotEmpty(textView, getSelectedText(textView, textViewText)); - if (textViewText instanceof Spannable) { - Selection.setSelection((Spannable) textViewText, textView.getSelectionEnd()); - } - } - - @Nullable - private static CharSequence getSelectedText(@NonNull final TextView textView, - @Nullable final CharSequence text) { - if (!textView.hasSelection() || text == null) { - return null; - } - - final int start = textView.getSelectionStart(); - final int end = textView.getSelectionEnd(); - return String.valueOf(start > end ? text.subSequence(end, start) - : text.subSequence(start, end)); - } - - private static void shareSelectedTextIfNotNullAndNotEmpty( - @NonNull final TextView textView, - @Nullable final CharSequence selectedText) { - if (selectedText != null && selectedText.length() != 0) { - ShareUtils.shareText(textView.getContext(), "", selectedText.toString()); - } - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.kt b/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.kt new file mode 100644 index 00000000000..33046c967ea --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.kt @@ -0,0 +1,60 @@ +/* + * SPDX-FileCopyrightText: 2021-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.util + +import android.text.Selection +import android.text.Spannable +import android.widget.TextView +import org.schabi.newpipe.util.external_communication.ShareUtils + +object NewPipeTextViewHelper { + /** + * Share the selected text of [NewPipeTextViews][org.schabi.newpipe.views.NewPipeTextView] and + * [NewPipeEditTexts][org.schabi.newpipe.views.NewPipeEditText] with + * [ShareUtils.shareText]. + * + * + * + * This allows EMUI users to get the Android share sheet instead of the EMUI share sheet when + * using the `Share` command of the popup menu which appears when selecting text. + * + * + * @param textView the [TextView] on which sharing the selected text. It should be a + * [org.schabi.newpipe.views.NewPipeTextView] or a [org.schabi.newpipe.views.NewPipeEditText] + * (even if [standard TextViews][TextView] are supported). + */ + @JvmStatic + fun shareSelectedTextWithShareUtils(textView: TextView) { + val textViewText = textView.getText() + shareSelectedTextIfNotNullAndNotEmpty(textView, getSelectedText(textView, textViewText)) + if (textViewText is Spannable) { + Selection.setSelection(textViewText, textView.selectionEnd) + } + } + + private fun getSelectedText(textView: TextView, text: CharSequence?): CharSequence? { + if (!textView.hasSelection() || text == null) { + return null + } + + val start = textView.selectionStart + val end = textView.selectionEnd + return if (start > end) { + text.subSequence(end, start) + } else { + text.subSequence(start, end) + } + } + + private fun shareSelectedTextIfNotNullAndNotEmpty( + textView: TextView, + selectedText: CharSequence? + ) { + if (!selectedText.isNullOrEmpty()) { + ShareUtils.shareText(textView.getContext(), "", selectedText.toString()) + } + } +} From 09a746dd6a131bee665ed44e7cff1d554b85e9bb Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 9 Jan 2026 12:45:56 +0200 Subject: [PATCH 33/92] Convert newpipe/util/ServiceHelper to kotlin --- .../schabi/newpipe/util/ServiceHelper.java | 213 ------------------ .../org/schabi/newpipe/util/ServiceHelper.kt | 173 ++++++++++++++ 2 files changed, 173 insertions(+), 213 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java create mode 100644 app/src/main/java/org/schabi/newpipe/util/ServiceHelper.kt diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java deleted file mode 100644 index c712157b35b..00000000000 --- a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java +++ /dev/null @@ -1,213 +0,0 @@ -package org.schabi.newpipe.util; - -import static org.schabi.newpipe.extractor.ServiceList.SoundCloud; - -import android.content.Context; -import android.content.SharedPreferences; - -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; -import androidx.preference.PreferenceManager; - -import com.grack.nanojson.JsonObject; -import com.grack.nanojson.JsonParser; -import com.grack.nanojson.JsonParserException; - -import org.schabi.newpipe.R; -import org.schabi.newpipe.extractor.NewPipe; -import org.schabi.newpipe.extractor.ServiceList; -import org.schabi.newpipe.extractor.StreamingService; -import org.schabi.newpipe.extractor.exceptions.ExtractionException; -import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance; - -import java.util.Optional; -import java.util.concurrent.TimeUnit; - -public final class ServiceHelper { - private static final StreamingService DEFAULT_FALLBACK_SERVICE = ServiceList.YouTube; - - private ServiceHelper() { } - - @DrawableRes - public static int getIcon(final int serviceId) { - switch (serviceId) { - case 0: - return R.drawable.ic_smart_display; - case 1: - return R.drawable.ic_cloud; - case 2: - return R.drawable.ic_placeholder_media_ccc; - case 3: - return R.drawable.ic_placeholder_peertube; - case 4: - return R.drawable.ic_placeholder_bandcamp; - default: - return R.drawable.ic_circle; - } - } - - public static String getTranslatedFilterString(final String filter, final Context c) { - switch (filter) { - case "all": - return c.getString(R.string.all); - case "videos": - case "sepia_videos": - case "music_videos": - return c.getString(R.string.videos_string); - case "channels": - return c.getString(R.string.channels); - case "playlists": - case "music_playlists": - return c.getString(R.string.playlists); - case "tracks": - return c.getString(R.string.tracks); - case "users": - return c.getString(R.string.users); - case "conferences": - return c.getString(R.string.conferences); - case "events": - return c.getString(R.string.events); - case "music_songs": - return c.getString(R.string.songs); - case "music_albums": - return c.getString(R.string.albums); - case "music_artists": - return c.getString(R.string.artists); - default: - return filter; - } - } - - /** - * Get a resource string with instructions for importing subscriptions for each service. - * - * @param serviceId service to get the instructions for - * @return the string resource containing the instructions or -1 if the service don't support it - */ - @StringRes - public static int getImportInstructions(final int serviceId) { - switch (serviceId) { - case 0: - return R.string.import_youtube_instructions; - case 1: - return R.string.import_soundcloud_instructions; - default: - return -1; - } - } - - /** - * For services that support importing from a channel url, return a hint that will - * be used in the EditText that the user will type in his channel url. - * - * @param serviceId service to get the hint for - * @return the hint's string resource or -1 if the service don't support it - */ - @StringRes - public static int getImportInstructionsHint(final int serviceId) { - switch (serviceId) { - case 1: - return R.string.import_soundcloud_instructions_hint; - default: - return -1; - } - } - - public static int getSelectedServiceId(final Context context) { - return Optional.ofNullable(getSelectedService(context)) - .orElse(DEFAULT_FALLBACK_SERVICE) - .getServiceId(); - } - - @Nullable - public static StreamingService getSelectedService(final Context context) { - final String serviceName = PreferenceManager.getDefaultSharedPreferences(context) - .getString(context.getString(R.string.current_service_key), - context.getString(R.string.default_service_value)); - - try { - return NewPipe.getService(serviceName); - } catch (final ExtractionException e) { - return null; - } - } - - @NonNull - public static String getNameOfServiceById(final int serviceId) { - return ServiceList.all().stream() - .filter(s -> s.getServiceId() == serviceId) - .findFirst() - .map(StreamingService::getServiceInfo) - .map(StreamingService.ServiceInfo::getName) - .orElse(""); - } - - /** - * @param serviceId the id of the service - * @return the service corresponding to the provided id - * @throws java.util.NoSuchElementException if there is no service with the provided id - */ - @NonNull - public static StreamingService getServiceById(final int serviceId) { - return ServiceList.all().stream() - .filter(s -> s.getServiceId() == serviceId) - .findFirst() - .orElseThrow(); - } - - public static void setSelectedServiceId(final Context context, final int serviceId) { - String serviceName; - try { - serviceName = NewPipe.getService(serviceId).getServiceInfo().getName(); - } catch (final ExtractionException e) { - serviceName = DEFAULT_FALLBACK_SERVICE.getServiceInfo().getName(); - } - - setSelectedServicePreferences(context, serviceName); - } - - private static void setSelectedServicePreferences(final Context context, - final String serviceName) { - PreferenceManager.getDefaultSharedPreferences(context).edit(). - putString(context.getString(R.string.current_service_key), serviceName).apply(); - } - - public static long getCacheExpirationMillis(final int serviceId) { - if (serviceId == SoundCloud.getServiceId()) { - return TimeUnit.MILLISECONDS.convert(5, TimeUnit.MINUTES); - } else { - return TimeUnit.MILLISECONDS.convert(1, TimeUnit.HOURS); - } - } - - public static void initService(final Context context, final int serviceId) { - if (serviceId == ServiceList.PeerTube.getServiceId()) { - final SharedPreferences sharedPreferences = PreferenceManager - .getDefaultSharedPreferences(context); - final String json = sharedPreferences.getString(context.getString( - R.string.peertube_selected_instance_key), null); - if (null == json) { - return; - } - - final JsonObject jsonObject; - try { - jsonObject = JsonParser.object().from(json); - } catch (final JsonParserException e) { - return; - } - final String name = jsonObject.getString("name"); - final String url = jsonObject.getString("url"); - final PeertubeInstance instance = new PeertubeInstance(url, name); - ServiceList.PeerTube.setInstance(instance); - } - } - - public static void initServices(final Context context) { - for (final StreamingService s : ServiceList.all()) { - initService(context, s.getServiceId()); - } - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.kt b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.kt new file mode 100644 index 00000000000..99cae0010e4 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.kt @@ -0,0 +1,173 @@ +/* + * SPDX-FileCopyrightText: 2018-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.util + +import android.content.Context +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes +import androidx.core.content.edit +import androidx.preference.PreferenceManager +import com.grack.nanojson.JsonObject +import com.grack.nanojson.JsonParser +import com.grack.nanojson.JsonParserException +import java.util.concurrent.TimeUnit +import org.schabi.newpipe.R +import org.schabi.newpipe.extractor.NewPipe +import org.schabi.newpipe.extractor.ServiceList +import org.schabi.newpipe.extractor.StreamingService +import org.schabi.newpipe.extractor.exceptions.ExtractionException +import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance +import org.schabi.newpipe.ktx.getStringSafe + +object ServiceHelper { + private val DEFAULT_FALLBACK_SERVICE: StreamingService = ServiceList.YouTube + + @JvmStatic + @DrawableRes + fun getIcon(serviceId: Int): Int { + return when (serviceId) { + 0 -> R.drawable.ic_smart_display + 1 -> R.drawable.ic_cloud + 2 -> R.drawable.ic_placeholder_media_ccc + 3 -> R.drawable.ic_placeholder_peertube + 4 -> R.drawable.ic_placeholder_bandcamp + else -> R.drawable.ic_circle + } + } + + @JvmStatic + fun getTranslatedFilterString(filter: String, context: Context): String { + return when (filter) { + "all" -> context.getString(R.string.all) + "videos", "sepia_videos", "music_videos" -> context.getString(R.string.videos_string) + "channels" -> context.getString(R.string.channels) + "playlists", "music_playlists" -> context.getString(R.string.playlists) + "tracks" -> context.getString(R.string.tracks) + "users" -> context.getString(R.string.users) + "conferences" -> context.getString(R.string.conferences) + "events" -> context.getString(R.string.events) + "music_songs" -> context.getString(R.string.songs) + "music_albums" -> context.getString(R.string.albums) + "music_artists" -> context.getString(R.string.artists) + else -> filter + } + } + + /** + * Get a resource string with instructions for importing subscriptions for each service. + * + * @param serviceId service to get the instructions for + * @return the string resource containing the instructions or -1 if the service don't support it + */ + @JvmStatic + @StringRes + fun getImportInstructions(serviceId: Int): Int { + return when (serviceId) { + 0 -> R.string.import_youtube_instructions + 1 -> R.string.import_soundcloud_instructions + else -> -1 + } + } + + /** + * For services that support importing from a channel url, return a hint that will + * be used in the EditText that the user will type in his channel url. + * + * @param serviceId service to get the hint for + * @return the hint's string resource or -1 if the service don't support it + */ + @JvmStatic + @StringRes + fun getImportInstructionsHint(serviceId: Int): Int { + return when (serviceId) { + 1 -> R.string.import_soundcloud_instructions_hint + else -> -1 + } + } + + @JvmStatic + fun getSelectedServiceId(context: Context): Int { + return (getSelectedService(context) ?: DEFAULT_FALLBACK_SERVICE).serviceId + } + + @JvmStatic + fun getSelectedService(context: Context): StreamingService? { + val serviceName: String = PreferenceManager.getDefaultSharedPreferences(context) + .getStringSafe( + context.getString(R.string.current_service_key), + context.getString(R.string.default_service_value) + ) + + return runCatching { NewPipe.getService(serviceName) }.getOrNull() + } + + @JvmStatic + fun getNameOfServiceById(serviceId: Int): String { + return ServiceList.all().stream() + .filter { it.serviceId == serviceId } + .findFirst() + .map(StreamingService::getServiceInfo) + .map(StreamingService.ServiceInfo::getName) + .orElse("") + } + + /** + * @param serviceId the id of the service + * @return the service corresponding to the provided id + * @throws java.util.NoSuchElementException if there is no service with the provided id + */ + @JvmStatic + fun getServiceById(serviceId: Int): StreamingService { + return ServiceList.all().firstNotNullOf { it.takeIf { it.serviceId == serviceId } } + } + + @JvmStatic + fun setSelectedServiceId(context: Context, serviceId: Int) { + val serviceName = runCatching { NewPipe.getService(serviceId).serviceInfo.name } + .getOrDefault(DEFAULT_FALLBACK_SERVICE.serviceInfo.name) + + setSelectedServicePreferences(context, serviceName) + } + + private fun setSelectedServicePreferences(context: Context, serviceName: String?) { + val sp = PreferenceManager.getDefaultSharedPreferences(context) + sp.edit { putString(context.getString(R.string.current_service_key), serviceName) } + } + + @JvmStatic + fun getCacheExpirationMillis(serviceId: Int): Long { + return if (serviceId == ServiceList.SoundCloud.serviceId) { + TimeUnit.MILLISECONDS.convert(5, TimeUnit.MINUTES) + } else { + TimeUnit.MILLISECONDS.convert(1, TimeUnit.HOURS) + } + } + + fun initService(context: Context, serviceId: Int) { + if (serviceId == ServiceList.PeerTube.serviceId) { + val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) + val json = sharedPreferences.getString( + context.getString(R.string.peertube_selected_instance_key), + null + ) + if (null == json) { + return + } + + val jsonObject = runCatching { JsonParser.`object`().from(json) } + .getOrElse { return@initService } + + val name = jsonObject.getString("name") + val url = jsonObject.getString("url") + ServiceList.PeerTube.instance = PeertubeInstance(url, name) + } + } + + @JvmStatic + fun initServices(context: Context) { + ServiceList.all().forEach { initService(context, it.serviceId) } + } +} From 2c7654a579357f0a83edd5c1de26c8f73f149a04 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 9 Jan 2026 12:54:36 +0200 Subject: [PATCH 34/92] Covert newpipe/util/DependentPreferenceHelper to kotlin --- .../util/DependentPreferenceHelper.java | 51 ------------------- .../newpipe/util/DependentPreferenceHelper.kt | 46 +++++++++++++++++ 2 files changed, 46 insertions(+), 51 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.java create mode 100644 app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.kt diff --git a/app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.java b/app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.java deleted file mode 100644 index 9591beddb3c..00000000000 --- a/app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.schabi.newpipe.util; - -import android.content.Context; -import android.content.SharedPreferences; - -import androidx.preference.PreferenceManager; - -import org.schabi.newpipe.R; - -/** - * For preferences with dependencies and multiple use case, - * this class can be used to reduce the lines of code. - */ -public final class DependentPreferenceHelper { - - private DependentPreferenceHelper() { - // no instance - } - - /** - * Option `Resume playback` depends on `Watch history`, this method can be used to retrieve if - * `Resume playback` and its dependencies are all enabled. - * - * @param context the Android context - * @return returns true if `Resume playback` and `Watch history` are both enabled - */ - public static boolean getResumePlaybackEnabled(final Context context) { - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - - return prefs.getBoolean(context.getString( - R.string.enable_watch_history_key), true) - && prefs.getBoolean(context.getString( - R.string.enable_playback_resume_key), true); - } - - /** - * Option `Position in lists` depends on `Watch history`, this method can be used to retrieve if - * `Position in lists` and its dependencies are all enabled. - * - * @param context the Android context - * @return returns true if `Positions in lists` and `Watch history` are both enabled - */ - public static boolean getPositionsInListsEnabled(final Context context) { - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - - return prefs.getBoolean(context.getString( - R.string.enable_watch_history_key), true) - && prefs.getBoolean(context.getString( - R.string.enable_playback_state_lists_key), true); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.kt b/app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.kt new file mode 100644 index 00000000000..8e73a94f20b --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.kt @@ -0,0 +1,46 @@ +/* + * SPDX-FileCopyrightText: 2023-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.util + +import android.content.Context +import androidx.preference.PreferenceManager +import org.schabi.newpipe.R + +/** + * For preferences with dependencies and multiple use case, + * this class can be used to reduce the lines of code. + */ +object DependentPreferenceHelper { + /** + * Option `Resume playback` depends on `Watch history`, this method can be used to retrieve if + * `Resume playback` and its dependencies are all enabled. + * + * @param context the Android context + * @return returns true if `Resume playback` and `Watch history` are both enabled + */ + @JvmStatic + fun getResumePlaybackEnabled(context: Context): Boolean { + val prefs = PreferenceManager.getDefaultSharedPreferences(context) + + return prefs.getBoolean(context.getString(R.string.enable_watch_history_key), true) && + prefs.getBoolean(context.getString(R.string.enable_playback_resume_key), true) + } + + /** + * Option `Position in lists` depends on `Watch history`, this method can be used to retrieve if + * `Position in lists` and its dependencies are all enabled. + * + * @param context the Android context + * @return returns true if `Positions in lists` and `Watch history` are both enabled + */ + @JvmStatic + fun getPositionsInListsEnabled(context: Context): Boolean { + val prefs = PreferenceManager.getDefaultSharedPreferences(context) + + return prefs.getBoolean(context.getString(R.string.enable_watch_history_key), true) && + prefs.getBoolean(context.getString(R.string.enable_playback_state_lists_key), true) + } +} From 1eedfd7eee3d45640caa485b77df50d17ba57dd2 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 9 Jan 2026 13:11:29 +0200 Subject: [PATCH 35/92] Convert /newpipe/util/StreamTypeUtil to kotlin --- .../schabi/newpipe/util/StreamTypeUtil.java | 50 ----------------- .../org/schabi/newpipe/util/StreamTypeUtil.kt | 54 +++++++++++++++++++ 2 files changed, 54 insertions(+), 50 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/util/StreamTypeUtil.java create mode 100644 app/src/main/java/org/schabi/newpipe/util/StreamTypeUtil.kt diff --git a/app/src/main/java/org/schabi/newpipe/util/StreamTypeUtil.java b/app/src/main/java/org/schabi/newpipe/util/StreamTypeUtil.java deleted file mode 100644 index 0cc0ecf1fd3..00000000000 --- a/app/src/main/java/org/schabi/newpipe/util/StreamTypeUtil.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.schabi.newpipe.util; - -import org.schabi.newpipe.extractor.stream.StreamType; - -/** - * Utility class for {@link StreamType}. - */ -public final class StreamTypeUtil { - private StreamTypeUtil() { - // No impl pls - } - - /** - * Check if the {@link StreamType} of a stream is a livestream. - * - * @param streamType the stream type of the stream - * @return whether the stream type is {@link StreamType#AUDIO_STREAM}, - * {@link StreamType#AUDIO_LIVE_STREAM} or {@link StreamType#POST_LIVE_AUDIO_STREAM} - */ - public static boolean isAudio(final StreamType streamType) { - return streamType == StreamType.AUDIO_STREAM - || streamType == StreamType.AUDIO_LIVE_STREAM - || streamType == StreamType.POST_LIVE_AUDIO_STREAM; - } - - /** - * Check if the {@link StreamType} of a stream is a livestream. - * - * @param streamType the stream type of the stream - * @return whether the stream type is {@link StreamType#VIDEO_STREAM}, - * {@link StreamType#LIVE_STREAM} or {@link StreamType#POST_LIVE_STREAM} - */ - public static boolean isVideo(final StreamType streamType) { - return streamType == StreamType.VIDEO_STREAM - || streamType == StreamType.LIVE_STREAM - || streamType == StreamType.POST_LIVE_STREAM; - } - - /** - * Check if the {@link StreamType} of a stream is a livestream. - * - * @param streamType the stream type of the stream - * @return whether the stream type is {@link StreamType#LIVE_STREAM} or - * {@link StreamType#AUDIO_LIVE_STREAM} - */ - public static boolean isLiveStream(final StreamType streamType) { - return streamType == StreamType.LIVE_STREAM - || streamType == StreamType.AUDIO_LIVE_STREAM; - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/StreamTypeUtil.kt b/app/src/main/java/org/schabi/newpipe/util/StreamTypeUtil.kt new file mode 100644 index 00000000000..2401a4f4909 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/StreamTypeUtil.kt @@ -0,0 +1,54 @@ +/* + * SPDX-FileCopyrightText: 2021-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.util + +import org.schabi.newpipe.extractor.stream.StreamType + +/** + * Utility class for [StreamType]. + */ +object StreamTypeUtil { + /** + * Check if the [StreamType] of a stream is a livestream. + * + * @param streamType the stream type of the stream + * @return whether the stream type is [StreamType.AUDIO_STREAM], + * [StreamType.AUDIO_LIVE_STREAM] or [StreamType.POST_LIVE_AUDIO_STREAM] + */ + @JvmStatic + fun isAudio(streamType: StreamType): Boolean { + return streamType == StreamType.AUDIO_STREAM || + streamType == StreamType.AUDIO_LIVE_STREAM || + streamType == StreamType.POST_LIVE_AUDIO_STREAM + } + + /** + * Check if the [StreamType] of a stream is a livestream. + * + * @param streamType the stream type of the stream + * @return whether the stream type is [StreamType.VIDEO_STREAM], + * [StreamType.LIVE_STREAM] or [StreamType.POST_LIVE_STREAM] + */ + @JvmStatic + fun isVideo(streamType: StreamType): Boolean { + return streamType == StreamType.VIDEO_STREAM || + streamType == StreamType.LIVE_STREAM || + streamType == StreamType.POST_LIVE_STREAM + } + + /** + * Check if the [StreamType] of a stream is a livestream. + * + * @param streamType the stream type of the stream + * @return whether the stream type is [StreamType.LIVE_STREAM] or + * [StreamType.AUDIO_LIVE_STREAM] + */ + @JvmStatic + fun isLiveStream(streamType: StreamType): Boolean { + return streamType == StreamType.LIVE_STREAM || + streamType == StreamType.AUDIO_LIVE_STREAM + } +} From c6fc94e7bd65e15315e94a66f001c7c29d4cbc42 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 9 Jan 2026 15:26:43 +0200 Subject: [PATCH 36/92] Convert newpipe/settings/export/PreferencesObjectInputStream to kotlin --- .../export/PreferencesObjectInputStream.java | 58 ------------------- .../export/PreferencesObjectInputStream.kt | 52 +++++++++++++++++ 2 files changed, 52 insertions(+), 58 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/settings/export/PreferencesObjectInputStream.java create mode 100644 app/src/main/java/org/schabi/newpipe/settings/export/PreferencesObjectInputStream.kt diff --git a/app/src/main/java/org/schabi/newpipe/settings/export/PreferencesObjectInputStream.java b/app/src/main/java/org/schabi/newpipe/settings/export/PreferencesObjectInputStream.java deleted file mode 100644 index 0d11b0b61c8..00000000000 --- a/app/src/main/java/org/schabi/newpipe/settings/export/PreferencesObjectInputStream.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.schabi.newpipe.settings.export; - -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectStreamClass; -import java.util.Set; - -/** - * An {@link ObjectInputStream} that only allows preferences-related types to be deserialized, to - * prevent injections. The only allowed types are: all primitive types, all boxed primitive types, - * null, strings. HashMap, HashSet and arrays of previously defined types are also allowed. Sources: - * - * cmu.edu - * , - * - * OWASP cheatsheet - * , - * - * Apache's {@code ValidatingObjectInputStream} - * - */ -public class PreferencesObjectInputStream extends ObjectInputStream { - - /** - * Primitive types, strings and other built-in types do not pass through resolveClass() but - * instead have a custom encoding; see - * - * official docs. - */ - private static final Set CLASS_WHITELIST = Set.of( - "java.lang.Boolean", - "java.lang.Byte", - "java.lang.Character", - "java.lang.Short", - "java.lang.Integer", - "java.lang.Long", - "java.lang.Float", - "java.lang.Double", - "java.lang.Void", - "java.util.HashMap", - "java.util.HashSet" - ); - - public PreferencesObjectInputStream(final InputStream in) throws IOException { - super(in); - } - - @Override - protected Class resolveClass(final ObjectStreamClass desc) - throws ClassNotFoundException, IOException { - if (CLASS_WHITELIST.contains(desc.getName())) { - return super.resolveClass(desc); - } else { - throw new ClassNotFoundException("Class not allowed: " + desc.getName()); - } - } -} diff --git a/app/src/main/java/org/schabi/newpipe/settings/export/PreferencesObjectInputStream.kt b/app/src/main/java/org/schabi/newpipe/settings/export/PreferencesObjectInputStream.kt new file mode 100644 index 00000000000..5f564a7a4d3 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/export/PreferencesObjectInputStream.kt @@ -0,0 +1,52 @@ +/* + * SPDX-FileCopyrightText: 2024-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.settings.export + +import java.io.IOException +import java.io.InputStream +import java.io.ObjectInputStream +import java.io.ObjectStreamClass + +/** + * An [ObjectInputStream] that only allows preferences-related types to be deserialized, to + * prevent injections. The only allowed types are: all primitive types, all boxed primitive types, + * null, strings. HashMap, HashSet and arrays of previously defined types are also allowed. Sources: + * [cmu.edu](https://wiki.sei.cmu.edu/confluence/display/java/SER00-J.+Enable+serialization+compatibility+during+class+evolution) * , + * [OWASP cheatsheet](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#harden-your-own-javaioobjectinputstream) * , + * [Apache's `ValidatingObjectInputStream`](https://commons.apache.org/proper/commons-io/apidocs/src-html/org/apache/commons/io/serialization/ValidatingObjectInputStream.html#line-118) * + */ +class PreferencesObjectInputStream(stream: InputStream) : ObjectInputStream(stream) { + @Throws(ClassNotFoundException::class, IOException::class) + override fun resolveClass(desc: ObjectStreamClass): Class<*> { + if (desc.name in CLASS_WHITELIST) { + return super.resolveClass(desc) + } else { + throw ClassNotFoundException("Class not allowed: $desc.name") + } + } + + companion object { + /** + * Primitive types, strings and other built-in types do not pass through resolveClass() but + * instead have a custom encoding; see + * [ + * official docs](https://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html#10152). + */ + private val CLASS_WHITELIST = setOf( + "java.lang.Boolean", + "java.lang.Byte", + "java.lang.Character", + "java.lang.Short", + "java.lang.Integer", + "java.lang.Long", + "java.lang.Float", + "java.lang.Double", + "java.lang.Void", + "java.util.HashMap", + "java.util.HashSet" + ) + } +} From 224a5d0cb9d4682986ba060b60bd7ff2bfc77482 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 10 Feb 2026 16:32:53 +0800 Subject: [PATCH 37/92] Minor improvements - Use early return in case of nulls - Use better variable names - Remove non-required newlines, imports and add missing ones Signed-off-by: Aayush Gupta --- .../java/org/schabi/newpipe/ExitActivity.kt | 4 +--- .../newpipe/util/NewPipeTextViewHelper.kt | 2 +- .../org/schabi/newpipe/util/PeertubeHelper.kt | 13 ++++++------- .../org/schabi/newpipe/util/ServiceHelper.kt | 19 +++++++------------ 4 files changed, 15 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/ExitActivity.kt b/app/src/main/java/org/schabi/newpipe/ExitActivity.kt index 854a07c4329..cc9f448b70b 100644 --- a/app/src/main/java/org/schabi/newpipe/ExitActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/ExitActivity.kt @@ -10,13 +10,12 @@ import android.app.Activity import android.content.Intent import android.os.Bundle import org.schabi.newpipe.util.NavigationHelper + class ExitActivity : Activity() { @SuppressLint("NewApi") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - finishAndRemoveTask() - NavigationHelper.restartApp(this) } @@ -24,7 +23,6 @@ class ExitActivity : Activity() { @JvmStatic fun exitAndRemoveFromRecentApps(activity: Activity) { val intent = Intent(activity, ExitActivity::class.java) - intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS diff --git a/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.kt b/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.kt index 33046c967ea..159791813b5 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/util/NewPipeTextViewHelper.kt @@ -54,7 +54,7 @@ object NewPipeTextViewHelper { selectedText: CharSequence? ) { if (!selectedText.isNullOrEmpty()) { - ShareUtils.shareText(textView.getContext(), "", selectedText.toString()) + ShareUtils.shareText(textView.context, "", selectedText.toString()) } } } diff --git a/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.kt b/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.kt index 3da7958d272..9cf3c1e73d9 100644 --- a/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/util/PeertubeHelper.kt @@ -16,14 +16,17 @@ import org.schabi.newpipe.extractor.ServiceList import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance object PeertubeHelper { + + @JvmStatic + val currentInstance: PeertubeInstance + get() = ServiceList.PeerTube.instance + @JvmStatic fun getInstanceList(context: Context): List { val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) val savedInstanceListKey = context.getString(R.string.peertube_instance_list_key) val savedJson = sharedPreferences.getString(savedInstanceListKey, null) - if (savedJson == null) { - return listOf(currentInstance) - } + ?: return listOf(currentInstance) return runCatching { JsonParser.`object`().from(savedJson).getArray("instances") @@ -46,8 +49,4 @@ object PeertubeHelper { ServiceList.PeerTube.instance = instance return instance } - - @JvmStatic - val currentInstance: PeertubeInstance - get() = ServiceList.PeerTube.instance } diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.kt b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.kt index 99cae0010e4..4239f43e059 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.kt @@ -10,15 +10,12 @@ import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.core.content.edit import androidx.preference.PreferenceManager -import com.grack.nanojson.JsonObject import com.grack.nanojson.JsonParser -import com.grack.nanojson.JsonParserException import java.util.concurrent.TimeUnit import org.schabi.newpipe.R import org.schabi.newpipe.extractor.NewPipe import org.schabi.newpipe.extractor.ServiceList import org.schabi.newpipe.extractor.StreamingService -import org.schabi.newpipe.extractor.exceptions.ExtractionException import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance import org.schabi.newpipe.ktx.getStringSafe @@ -133,8 +130,8 @@ object ServiceHelper { } private fun setSelectedServicePreferences(context: Context, serviceName: String?) { - val sp = PreferenceManager.getDefaultSharedPreferences(context) - sp.edit { putString(context.getString(R.string.current_service_key), serviceName) } + val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) + sharedPreferences.edit { putString(context.getString(R.string.current_service_key), serviceName) } } @JvmStatic @@ -152,17 +149,15 @@ object ServiceHelper { val json = sharedPreferences.getString( context.getString(R.string.peertube_selected_instance_key), null - ) - if (null == json) { - return - } + ) ?: return val jsonObject = runCatching { JsonParser.`object`().from(json) } .getOrElse { return@initService } - val name = jsonObject.getString("name") - val url = jsonObject.getString("url") - ServiceList.PeerTube.instance = PeertubeInstance(url, name) + ServiceList.PeerTube.instance = PeertubeInstance( + jsonObject.getString("url"), + jsonObject.getString("name") + ) } } From 59e5018c2d9b58de333f7bdab5c3f66f4c14f4dd Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Wed, 28 Jan 2026 20:25:47 +0200 Subject: [PATCH 38/92] player/helper/PlayerHelper#getTimeString replace ints with longs Duration data in the player code incosnistently typed. Half code uses ints and half uses longs. Recieve longs in this function to allow both halfs of player code just use the function without nasty long to int downcasting warnings/errors in code --- .../org/schabi/newpipe/player/helper/PlayerHelper.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 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 0f9579352a5..11d39a5c55b 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 @@ -87,11 +87,11 @@ public static void resetFormat() { } @NonNull - public static String getTimeString(final int milliSeconds) { - final int seconds = (milliSeconds % 60000) / 1000; - final int minutes = (milliSeconds % 3600000) / 60000; - final int hours = (milliSeconds % 86400000) / 3600000; - final int days = (milliSeconds % (86400000 * 7)) / 86400000; + public static String getTimeString(final long milliSeconds) { + final long seconds = (milliSeconds % 60000) / 1000; + final long minutes = (milliSeconds % 3600000) / 60000; + final long hours = (milliSeconds % 86400000) / 3600000; + final long days = (milliSeconds % (86400000 * 7)) / 86400000; final Formatters formatters = FORMATTERS_PROVIDER.formatters(); if (days > 0) { From 3a0a3a42afc91b31d0ee0184a85caaf658ebc0e2 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Wed, 28 Jan 2026 20:14:36 +0200 Subject: [PATCH 39/92] Misc loop/stream based player refactors --- .../newpipe/player/helper/PlayerHelper.java | 9 ++++--- .../player/playqueue/SinglePlayQueue.java | 8 ++----- .../newpipe/player/ui/MainPlayerUi.java | 24 +++++++------------ 3 files changed, 14 insertions(+), 27 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 11d39a5c55b..25844f79935 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 @@ -49,12 +49,12 @@ import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; public final class PlayerHelper { private static final FormattersProvider FORMATTERS_PROVIDER = new FormattersProvider(); @@ -174,10 +174,9 @@ public static String resizeTypeOf(@NonNull final Context context, @Nullable public static PlayQueue autoQueueOf(@NonNull final StreamInfo info, @NonNull final List existingItems) { - final Set urls = new HashSet<>(existingItems.size()); - for (final PlayQueueItem item : existingItems) { - urls.add(item.getUrl()); - } + final Set urls = existingItems.stream() + .map(PlayQueueItem::getUrl) + .collect(Collectors.toUnmodifiableSet()); final List relatedItems = info.getRelatedItems(); if (Utils.isNullOrEmpty(relatedItems)) { diff --git a/app/src/main/java/org/schabi/newpipe/player/playqueue/SinglePlayQueue.java b/app/src/main/java/org/schabi/newpipe/player/playqueue/SinglePlayQueue.java index f13d7924d0f..a072369d658 100644 --- a/app/src/main/java/org/schabi/newpipe/player/playqueue/SinglePlayQueue.java +++ b/app/src/main/java/org/schabi/newpipe/player/playqueue/SinglePlayQueue.java @@ -5,8 +5,8 @@ import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.extractor.stream.StreamInfoItem; -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public final class SinglePlayQueue extends PlayQueue { public SinglePlayQueue(final StreamInfoItem item) { @@ -29,11 +29,7 @@ public SinglePlayQueue(@NonNull final List items, final int inde } private static List playQueueItemsOf(@NonNull final List items) { - final List playQueueItems = new ArrayList<>(items.size()); - for (final StreamInfoItem item : items) { - playQueueItems.add(new PlayQueueItem(item)); - } - return playQueueItems; + return items.stream().map(PlayQueueItem::new).collect(Collectors.toList()); } @Override diff --git a/app/src/main/java/org/schabi/newpipe/player/ui/MainPlayerUi.java b/app/src/main/java/org/schabi/newpipe/player/ui/MainPlayerUi.java index 86888178285..4d85dc95057 100644 --- a/app/src/main/java/org/schabi/newpipe/player/ui/MainPlayerUi.java +++ b/app/src/main/java/org/schabi/newpipe/player/ui/MainPlayerUi.java @@ -77,6 +77,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutChangeListener { private static final String TAG = MainPlayerUi.class.getSimpleName(); @@ -749,13 +750,13 @@ public void onItemLongClick(@NonNull final StreamSegmentItem item, final int sec } private int getNearestStreamSegmentPosition(final long playbackPosition) { - int nearestPosition = 0; final List segments = player.getCurrentStreamInfo() .map(StreamInfo::getStreamSegments) .orElse(Collections.emptyList()); - for (int i = 0; i < segments.size(); i++) { - if (segments.get(i).getStartTimeSeconds() * 1000L > playbackPosition) { + int nearestPosition = 0; + for (final var segment : segments) { + if (segment.getStartTimeSeconds() * 1000L > playbackPosition) { break; } nearestPosition++; @@ -816,22 +817,13 @@ private void updateQueueTime(final int currentTime) { } final int currentStream = playQueue.getIndex(); - int before = 0; - int after = 0; - final List streams = playQueue.getStreams(); - final int nStreams = streams.size(); - for (int i = 0; i < nStreams; i++) { - if (i < currentStream) { - before += streams.get(i).getDuration(); - } else { - after += streams.get(i).getDuration(); - } - } + final long before = streams.subList(0, currentStream).stream() + .collect(Collectors.summingLong(PlayQueueItem::getDuration)) * 1000; - before *= 1000; - after *= 1000; + final long after = streams.subList(currentStream, streams.size()).stream() + .collect(Collectors.summingLong(PlayQueueItem::getDuration)) * 1000; binding.itemsListHeaderDuration.setText( String.format("%s/%s", From 869a3cea9b54f6af798873f7fab841fa3f16370a Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Tue, 10 Feb 2026 01:32:18 +0200 Subject: [PATCH 40/92] ErrorActivity small refactor --- .../schabi/newpipe/error/ErrorActivity.java | 31 ++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java index 160dcca4df4..e183ebd712f 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java @@ -85,8 +85,6 @@ protected void onCreate(final Bundle savedInstanceState) { activityErrorBinding = ActivityErrorBinding.inflate(getLayoutInflater()); setContentView(activityErrorBinding.getRoot()); - final Intent intent = getIntent(); - setSupportActionBar(activityErrorBinding.toolbarLayout.toolbar); final ActionBar actionBar = getSupportActionBar(); @@ -96,13 +94,12 @@ protected void onCreate(final Bundle savedInstanceState) { actionBar.setDisplayShowTitleEnabled(true); } - errorInfo = IntentCompat.getParcelableExtra(intent, ERROR_INFO, ErrorInfo.class); + errorInfo = IntentCompat.getParcelableExtra(getIntent(), ERROR_INFO, ErrorInfo.class); // important add guru meditation addGuruMeditation(); // print current time, as zoned ISO8601 timestamp - final ZonedDateTime now = ZonedDateTime.now(); - currentTimeStamp = now.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + currentTimeStamp = ZonedDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); activityErrorBinding.errorReportEmailButton.setOnClickListener(v -> openPrivacyPolicyDialog(this, "EMAIL")); @@ -160,9 +157,7 @@ private void openPrivacyPolicyDialog(final Context context, final String action) final Intent i = new Intent(Intent.ACTION_SENDTO) .setData(Uri.parse("mailto:")) // only email apps should handle this .putExtra(Intent.EXTRA_EMAIL, new String[]{ERROR_EMAIL_ADDRESS}) - .putExtra(Intent.EXTRA_SUBJECT, ERROR_EMAIL_SUBJECT - + getString(R.string.app_name) + " " - + BuildConfig.VERSION_NAME) + .putExtra(Intent.EXTRA_SUBJECT, getErrorEmailSubject()) .putExtra(Intent.EXTRA_TEXT, buildJson()); ShareUtils.openIntentInApp(context, i); } else if (action.equals("GITHUB")) { // open the NewPipe issue page on GitHub @@ -180,12 +175,10 @@ private String formErrorText(final String[] el) { } private void buildInfo(final ErrorInfo info) { - String text = ""; - activityErrorBinding.errorInfoLabelsView.setText(getString(R.string.info_labels) .replace("\\n", "\n")); - text += getUserActionString(info.getUserAction()) + "\n" + final String text = info.getUserAction().getMessage() + "\n" + info.getRequest() + "\n" + getContentLanguageString() + "\n" + getContentCountryString() + "\n" @@ -203,7 +196,7 @@ private String buildJson() { try { return JsonWriter.string() .object() - .value("user_action", getUserActionString(errorInfo.getUserAction())) + .value("user_action", errorInfo.getUserAction().getMessage()) .value("request", errorInfo.getRequest()) .value("content_language", getContentLanguageString()) .value("content_country", getContentCountryString()) @@ -239,7 +232,7 @@ private String buildMarkdown() { htmlErrorReport .append("## Exception") .append("\n* __User Action:__ ") - .append(getUserActionString(errorInfo.getUserAction())) + .append(errorInfo.getUserAction().getMessage()) .append("\n* __Request:__ ").append(errorInfo.getRequest()) .append("\n* __Content Country:__ ").append(getContentCountryString()) .append("\n* __Content Language:__ ").append(getContentLanguageString()) @@ -286,14 +279,6 @@ private String buildMarkdown() { } } - private String getUserActionString(final UserAction userAction) { - if (userAction == null) { - return "Your description is in another castle."; - } else { - return userAction.getMessage(); - } - } - private String getContentCountryString() { return Localization.getPreferredContentCountry(this).getCountryCode(); } @@ -306,6 +291,10 @@ private String getAppLanguage() { return Localization.getAppLocale().toString(); } + private String getErrorEmailSubject() { + return ERROR_EMAIL_SUBJECT + getString(R.string.app_name) + " " + BuildConfig.VERSION_NAME; + } + private String getOsString() { final String osBase = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? Build.VERSION.BASE_OS : "Android"; From 4a7eaed3a70f0a5ec599253c59b39bde173ca404 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Tue, 10 Feb 2026 09:32:43 +0200 Subject: [PATCH 41/92] ErrorActivity convert to kotlin Co-authored-by: Aayush Gupta --- .../schabi/newpipe/error/ErrorActivity.java | 313 ------------------ .../org/schabi/newpipe/error/ErrorActivity.kt | 281 ++++++++++++++++ 2 files changed, 281 insertions(+), 313 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java create mode 100644 app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java deleted file mode 100644 index e183ebd712f..00000000000 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java +++ /dev/null @@ -1,313 +0,0 @@ -package org.schabi.newpipe.error; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.util.Log; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; - -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.content.IntentCompat; - -import com.grack.nanojson.JsonWriter; - -import org.schabi.newpipe.BuildConfig; -import org.schabi.newpipe.R; -import org.schabi.newpipe.databinding.ActivityErrorBinding; -import org.schabi.newpipe.util.Localization; -import org.schabi.newpipe.util.ThemeHelper; -import org.schabi.newpipe.util.external_communication.ShareUtils; - -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Arrays; -import java.util.stream.Collectors; - -/* - * Created by Christian Schabesberger on 24.10.15. - * - * Copyright (C) Christian Schabesberger 2016 - * ErrorActivity.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 . - */ - -/** - * This activity is used to show error details and allow reporting them in various ways. Use {@link - * ErrorUtil#openActivity(Context, ErrorInfo)} to correctly open this activity. - */ -public class ErrorActivity extends AppCompatActivity { - // LOG TAGS - public static final String TAG = ErrorActivity.class.toString(); - // BUNDLE TAGS - public static final String ERROR_INFO = "error_info"; - - public static final String ERROR_EMAIL_ADDRESS = "crashreport@newpipe.schabi.org"; - public static final String ERROR_EMAIL_SUBJECT = "Exception in "; - - public static final String ERROR_GITHUB_ISSUE_URL = - "https://github.com/TeamNewPipe/NewPipe/issues"; - - private ErrorInfo errorInfo; - private String currentTimeStamp; - - private ActivityErrorBinding activityErrorBinding; - - - //////////////////////////////////////////////////////////////////////// - // Activity lifecycle - //////////////////////////////////////////////////////////////////////// - - @Override - protected void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - ThemeHelper.setDayNightMode(this); - ThemeHelper.setTheme(this); - - activityErrorBinding = ActivityErrorBinding.inflate(getLayoutInflater()); - setContentView(activityErrorBinding.getRoot()); - - setSupportActionBar(activityErrorBinding.toolbarLayout.toolbar); - - final ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setTitle(R.string.error_report_title); - actionBar.setDisplayShowTitleEnabled(true); - } - - errorInfo = IntentCompat.getParcelableExtra(getIntent(), ERROR_INFO, ErrorInfo.class); - - // important add guru meditation - addGuruMeditation(); - // print current time, as zoned ISO8601 timestamp - currentTimeStamp = ZonedDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); - - activityErrorBinding.errorReportEmailButton.setOnClickListener(v -> - openPrivacyPolicyDialog(this, "EMAIL")); - - activityErrorBinding.errorReportCopyButton.setOnClickListener(v -> - ShareUtils.copyToClipboard(this, buildMarkdown())); - - activityErrorBinding.errorReportGitHubButton.setOnClickListener(v -> - openPrivacyPolicyDialog(this, "GITHUB")); - - // normal bugreport - buildInfo(errorInfo); - activityErrorBinding.errorMessageView.setText(errorInfo.getMessage(this)); - activityErrorBinding.errorView.setText(formErrorText(errorInfo.getStackTraces())); - - // print stack trace once again for debugging: - for (final String e : errorInfo.getStackTraces()) { - Log.e(TAG, e); - } - } - - @Override - public boolean onCreateOptionsMenu(final Menu menu) { - final MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.error_menu, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(final MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - onBackPressed(); - return true; - case R.id.menu_item_share_error: - ShareUtils.shareText(getApplicationContext(), - getString(R.string.error_report_title), buildJson()); - return true; - default: - return false; - } - } - - private void openPrivacyPolicyDialog(final Context context, final String action) { - new AlertDialog.Builder(context) - .setIcon(android.R.drawable.ic_dialog_alert) - .setTitle(R.string.privacy_policy_title) - .setMessage(R.string.start_accept_privacy_policy) - .setCancelable(false) - .setNeutralButton(R.string.read_privacy_policy, (dialog, which) -> - ShareUtils.openUrlInApp(context, - context.getString(R.string.privacy_policy_url))) - .setPositiveButton(R.string.accept, (dialog, which) -> { - if (action.equals("EMAIL")) { // send on email - final Intent i = new Intent(Intent.ACTION_SENDTO) - .setData(Uri.parse("mailto:")) // only email apps should handle this - .putExtra(Intent.EXTRA_EMAIL, new String[]{ERROR_EMAIL_ADDRESS}) - .putExtra(Intent.EXTRA_SUBJECT, getErrorEmailSubject()) - .putExtra(Intent.EXTRA_TEXT, buildJson()); - ShareUtils.openIntentInApp(context, i); - } else if (action.equals("GITHUB")) { // open the NewPipe issue page on GitHub - ShareUtils.openUrlInApp(this, ERROR_GITHUB_ISSUE_URL); - } - }) - .setNegativeButton(R.string.decline, null) - .show(); - } - - private String formErrorText(final String[] el) { - final String separator = "-------------------------------------"; - return Arrays.stream(el) - .collect(Collectors.joining(separator + "\n", separator + "\n", separator)); - } - - private void buildInfo(final ErrorInfo info) { - activityErrorBinding.errorInfoLabelsView.setText(getString(R.string.info_labels) - .replace("\\n", "\n")); - - final String text = info.getUserAction().getMessage() + "\n" - + info.getRequest() + "\n" - + getContentLanguageString() + "\n" - + getContentCountryString() + "\n" - + getAppLanguage() + "\n" - + info.getServiceName() + "\n" - + currentTimeStamp + "\n" - + getPackageName() + "\n" - + BuildConfig.VERSION_NAME + "\n" - + getOsString(); - - activityErrorBinding.errorInfosView.setText(text); - } - - private String buildJson() { - try { - return JsonWriter.string() - .object() - .value("user_action", errorInfo.getUserAction().getMessage()) - .value("request", errorInfo.getRequest()) - .value("content_language", getContentLanguageString()) - .value("content_country", getContentCountryString()) - .value("app_language", getAppLanguage()) - .value("service", errorInfo.getServiceName()) - .value("package", getPackageName()) - .value("version", BuildConfig.VERSION_NAME) - .value("os", getOsString()) - .value("time", currentTimeStamp) - .array("exceptions", Arrays.asList(errorInfo.getStackTraces())) - .value("user_comment", activityErrorBinding.errorCommentBox.getText() - .toString()) - .end() - .done(); - } catch (final Throwable e) { - Log.e(TAG, "Error while erroring: Could not build json"); - e.printStackTrace(); - } - - return ""; - } - - private String buildMarkdown() { - try { - final StringBuilder htmlErrorReport = new StringBuilder(); - - final String userComment = activityErrorBinding.errorCommentBox.getText().toString(); - if (!userComment.isEmpty()) { - htmlErrorReport.append(userComment).append("\n"); - } - - // basic error info - htmlErrorReport - .append("## Exception") - .append("\n* __User Action:__ ") - .append(errorInfo.getUserAction().getMessage()) - .append("\n* __Request:__ ").append(errorInfo.getRequest()) - .append("\n* __Content Country:__ ").append(getContentCountryString()) - .append("\n* __Content Language:__ ").append(getContentLanguageString()) - .append("\n* __App Language:__ ").append(getAppLanguage()) - .append("\n* __Service:__ ").append(errorInfo.getServiceName()) - .append("\n* __Timestamp:__ ").append(currentTimeStamp) - .append("\n* __Package:__ ").append(getPackageName()) - .append("\n* __Service:__ ").append(errorInfo.getServiceName()) - .append("\n* __Version:__ ").append(BuildConfig.VERSION_NAME) - .append("\n* __OS:__ ").append(getOsString()).append("\n"); - - - // Collapse all logs to a single paragraph when there are more than one - // to keep the GitHub issue clean. - if (errorInfo.getStackTraces().length > 1) { - htmlErrorReport - .append("
Exceptions (") - .append(errorInfo.getStackTraces().length) - .append(")

\n"); - } - - // add the logs - for (int i = 0; i < errorInfo.getStackTraces().length; i++) { - htmlErrorReport.append("

Crash log "); - if (errorInfo.getStackTraces().length > 1) { - htmlErrorReport.append(i + 1); - } - htmlErrorReport.append("") - .append("

\n") - .append("\n```\n").append(errorInfo.getStackTraces()[i]).append("\n```\n") - .append("

\n"); - } - - // make sure to close everything - if (errorInfo.getStackTraces().length > 1) { - htmlErrorReport.append("

\n"); - } - htmlErrorReport.append("
\n"); - return htmlErrorReport.toString(); - } catch (final Throwable e) { - Log.e(TAG, "Error while erroring: Could not build markdown"); - e.printStackTrace(); - return ""; - } - } - - private String getContentCountryString() { - return Localization.getPreferredContentCountry(this).getCountryCode(); - } - - private String getContentLanguageString() { - return Localization.getPreferredLocalization(this).getLocalizationCode(); - } - - private String getAppLanguage() { - return Localization.getAppLocale().toString(); - } - - private String getErrorEmailSubject() { - return ERROR_EMAIL_SUBJECT + getString(R.string.app_name) + " " + BuildConfig.VERSION_NAME; - } - - private String getOsString() { - final String osBase = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M - ? Build.VERSION.BASE_OS : "Android"; - return System.getProperty("os.name") - + " " + (osBase.isEmpty() ? "Android" : osBase) - + " " + Build.VERSION.RELEASE - + " - " + Build.VERSION.SDK_INT; - } - - private void addGuruMeditation() { - //just an easter egg - String text = activityErrorBinding.errorSorryView.getText().toString(); - text += "\n" + getString(R.string.guru_meditation); - activityErrorBinding.errorSorryView.setText(text); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt new file mode 100644 index 00000000000..b48dd29beae --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt @@ -0,0 +1,281 @@ +/* + * SPDX-FileCopyrightText: 2015-2026 NewPipe contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.error + +import android.content.Context +import android.content.Intent +import android.os.Build +import android.os.Bundle +import android.util.Log +import android.view.Menu +import android.view.MenuItem +import androidx.appcompat.app.AlertDialog +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.IntentCompat +import androidx.core.net.toUri +import com.grack.nanojson.JsonWriter +import java.time.ZonedDateTime +import java.time.format.DateTimeFormatter +import org.schabi.newpipe.BuildConfig +import org.schabi.newpipe.R +import org.schabi.newpipe.databinding.ActivityErrorBinding +import org.schabi.newpipe.util.Localization +import org.schabi.newpipe.util.ThemeHelper +import org.schabi.newpipe.util.external_communication.ShareUtils + +/** + * This activity is used to show error details and allow reporting them in various ways. + * Use [ErrorUtil.openActivity] to correctly open this activity. + */ +class ErrorActivity : AppCompatActivity() { + private lateinit var errorInfo: ErrorInfo + private lateinit var currentTimeStamp: String + + private lateinit var activityErrorBinding: ActivityErrorBinding + + private val contentCountryString: String + get() = Localization.getPreferredContentCountry(this).countryCode + + private val contentLanguageString: String + get() = Localization.getPreferredLocalization(this).localizationCode + + private val appLanguage: String + get() = Localization.getAppLocale().toString() + + private val osString: String + get() { + val name = System.getProperty("os.name")!! + val osBase = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + Build.VERSION.BASE_OS.ifEmpty { "Android" } + } else { + "Android" + } + return "$name $osBase ${Build.VERSION.RELEASE} - ${Build.VERSION.SDK_INT}" + } + + private val errorEmailSubject: String + get() = "$ERROR_EMAIL_SUBJECT ${getString(R.string.app_name)} ${BuildConfig.VERSION_NAME}" + + // ///////////////////////////////////////////////////////////////////// + // Activity lifecycle + // ///////////////////////////////////////////////////////////////////// + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + ThemeHelper.setDayNightMode(this) + ThemeHelper.setTheme(this) + + activityErrorBinding = ActivityErrorBinding.inflate(layoutInflater) + setContentView(activityErrorBinding.getRoot()) + + setSupportActionBar(activityErrorBinding.toolbarLayout.toolbar) + supportActionBar?.apply { + setDisplayHomeAsUpEnabled(true) + setTitle(R.string.error_report_title) + setDisplayShowTitleEnabled(true) + } + + errorInfo = IntentCompat.getParcelableExtra(intent, ERROR_INFO, ErrorInfo::class.java)!! + + // important add guru meditation + addGuruMeditation() + // print current time, as zoned ISO8601 timestamp + currentTimeStamp = ZonedDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME) + + activityErrorBinding.errorReportEmailButton.setOnClickListener { _ -> + openPrivacyPolicyDialog(this, "EMAIL") + } + + activityErrorBinding.errorReportCopyButton.setOnClickListener { _ -> + ShareUtils.copyToClipboard(this, buildMarkdown()) + } + + activityErrorBinding.errorReportGitHubButton.setOnClickListener { _ -> + openPrivacyPolicyDialog(this, "GITHUB") + } + + // normal bugreport + buildInfo(errorInfo) + activityErrorBinding.errorMessageView.text = errorInfo.getMessage(this) + activityErrorBinding.errorView.text = formErrorText(errorInfo.stackTraces) + + // print stack trace once again for debugging: + errorInfo.stackTraces.forEach { Log.e(TAG, it) } + } + + override fun onCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate(R.menu.error_menu, menu) + return true + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return when (item.itemId) { + android.R.id.home -> { + onBackPressed() + true + } + + R.id.menu_item_share_error -> { + ShareUtils.shareText( + applicationContext, + getString(R.string.error_report_title), + buildJson() + ) + true + } + + else -> false + } + } + + private fun openPrivacyPolicyDialog(context: Context, action: String) { + AlertDialog.Builder(context) + .setIcon(android.R.drawable.ic_dialog_alert) + .setTitle(R.string.privacy_policy_title) + .setMessage(R.string.start_accept_privacy_policy) + .setCancelable(false) + .setNeutralButton(R.string.read_privacy_policy) { _, _ -> + ShareUtils.openUrlInApp(context, context.getString(R.string.privacy_policy_url)) + } + .setPositiveButton(R.string.accept) { _, _ -> + if (action == "EMAIL") { // send on email + val i = Intent(Intent.ACTION_SENDTO) + .setData("mailto:".toUri()) // only email apps should handle this + .putExtra(Intent.EXTRA_EMAIL, arrayOf(ERROR_EMAIL_ADDRESS)) + .putExtra(Intent.EXTRA_SUBJECT, errorEmailSubject) + .putExtra(Intent.EXTRA_TEXT, buildJson()) + ShareUtils.openIntentInApp(context, i) + } else if (action == "GITHUB") { // open the NewPipe issue page on GitHub + ShareUtils.openUrlInApp(this, ERROR_GITHUB_ISSUE_URL) + } + } + .setNegativeButton(R.string.decline, null) + .show() + } + + private fun formErrorText(el: Array): String { + val separator = "-------------------------------------" + return el.joinToString(separator + "\n", separator + "\n", separator) + } + + private fun buildInfo(info: ErrorInfo) { + activityErrorBinding.errorInfoLabelsView.text = getString(R.string.info_labels) + .replace("\\n", "\n") + + val text = info.userAction.message + "\n" + + info.request + "\n" + + contentLanguageString + "\n" + + contentCountryString + "\n" + + appLanguage + "\n" + + info.getServiceName() + "\n" + + currentTimeStamp + "\n" + + packageName + "\n" + + BuildConfig.VERSION_NAME + "\n" + + osString + + activityErrorBinding.errorInfosView.text = text + } + + private fun buildJson(): String { + try { + return JsonWriter.string() + .`object`() + .value("user_action", errorInfo.userAction.message) + .value("request", errorInfo.request) + .value("content_language", contentLanguageString) + .value("content_country", contentCountryString) + .value("app_language", appLanguage) + .value("service", errorInfo.getServiceName()) + .value("package", packageName) + .value("version", BuildConfig.VERSION_NAME) + .value("os", osString) + .value("time", currentTimeStamp) + .array("exceptions", errorInfo.stackTraces.toList()) + .value("user_comment", activityErrorBinding.errorCommentBox.getText().toString()) + .end() + .done() + } catch (error: Throwable) { + Log.e(TAG, "Error while erroring: Could not build json", error) + } + + return "" + } + + private fun buildMarkdown(): String { + try { + return buildString(1024) { + val userComment = activityErrorBinding.errorCommentBox.getText().toString() + if (!userComment.isEmpty()) { + appendLine(userComment) + } + + // basic error info + appendLine("## Exception") + appendLine("* __User Action:__ ${errorInfo.userAction.message}") + appendLine("* __Request:__ ${errorInfo.request}") + appendLine("* __Content Country:__ $contentCountryString") + appendLine("* __Content Language:__ $contentLanguageString") + appendLine("* __App Language:__ $appLanguage") + appendLine("* __Service:__ ${errorInfo.getServiceName()}") + appendLine("* __Timestamp:__ $currentTimeStamp") + appendLine("* __Package:__ $packageName") + appendLine("* __Service:__ ${errorInfo.getServiceName()}") + appendLine("* __Version:__ ${BuildConfig.VERSION_NAME}") + appendLine("* __OS:__ $osString") + + // Collapse all logs to a single paragraph when there are more than one + // to keep the GitHub issue clean. + if (errorInfo.stackTraces.size > 1) { + append("
Exceptions (") + append(errorInfo.stackTraces.size) + append(")

\n") + } + + // add the logs + for (i in errorInfo.stackTraces.indices) { + append("

Crash log ") + if (errorInfo.stackTraces.size > 1) { + append(i + 1) + } + append("") + append("

\n") + append("\n```\n${errorInfo.stackTraces[i]}\n```\n") + append("

\n") + } + + // make sure to close everything + if (errorInfo.stackTraces.size > 1) { + append("

\n") + } + append("
\n") + } + } catch (error: Throwable) { + Log.e(TAG, "Error while erroring: Could not build markdown", error) + return "" + } + } + + private fun addGuruMeditation() { + // just an easter egg + var text = activityErrorBinding.errorSorryView.getText().toString() + text += "\n" + getString(R.string.guru_meditation) + activityErrorBinding.errorSorryView.text = text + } + + companion object { + // LOG TAGS + val TAG: String = ErrorActivity::class.java.toString() + + // BUNDLE TAGS + const val ERROR_INFO: String = "error_info" + + const val ERROR_EMAIL_ADDRESS: String = "crashreport@newpipe.schabi.org" + const val ERROR_EMAIL_SUBJECT: String = "Exception in " + + const val ERROR_GITHUB_ISSUE_URL: String = "https://github.com/TeamNewPipe/NewPipe/issues" + } +} From d7a4435e943fc59687cfb161c087c1492d0e09ed Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 11 Feb 2026 18:39:34 +0800 Subject: [PATCH 42/92] ErrorActivity: Use better variable names and encapsulation Signed-off-by: Aayush Gupta --- .../org/schabi/newpipe/error/ErrorActivity.kt | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt index b48dd29beae..32f9769a1de 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt @@ -34,7 +34,7 @@ class ErrorActivity : AppCompatActivity() { private lateinit var errorInfo: ErrorInfo private lateinit var currentTimeStamp: String - private lateinit var activityErrorBinding: ActivityErrorBinding + private lateinit var binding: ActivityErrorBinding private val contentCountryString: String get() = Localization.getPreferredContentCountry(this).countryCode @@ -69,10 +69,10 @@ class ErrorActivity : AppCompatActivity() { ThemeHelper.setDayNightMode(this) ThemeHelper.setTheme(this) - activityErrorBinding = ActivityErrorBinding.inflate(layoutInflater) - setContentView(activityErrorBinding.getRoot()) + binding = ActivityErrorBinding.inflate(layoutInflater) + setContentView(binding.getRoot()) - setSupportActionBar(activityErrorBinding.toolbarLayout.toolbar) + setSupportActionBar(binding.toolbarLayout.toolbar) supportActionBar?.apply { setDisplayHomeAsUpEnabled(true) setTitle(R.string.error_report_title) @@ -86,22 +86,22 @@ class ErrorActivity : AppCompatActivity() { // print current time, as zoned ISO8601 timestamp currentTimeStamp = ZonedDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME) - activityErrorBinding.errorReportEmailButton.setOnClickListener { _ -> + binding.errorReportEmailButton.setOnClickListener { _ -> openPrivacyPolicyDialog(this, "EMAIL") } - activityErrorBinding.errorReportCopyButton.setOnClickListener { _ -> + binding.errorReportCopyButton.setOnClickListener { _ -> ShareUtils.copyToClipboard(this, buildMarkdown()) } - activityErrorBinding.errorReportGitHubButton.setOnClickListener { _ -> + binding.errorReportGitHubButton.setOnClickListener { _ -> openPrivacyPolicyDialog(this, "GITHUB") } // normal bugreport buildInfo(errorInfo) - activityErrorBinding.errorMessageView.text = errorInfo.getMessage(this) - activityErrorBinding.errorView.text = formErrorText(errorInfo.stackTraces) + binding.errorMessageView.text = errorInfo.getMessage(this) + binding.errorView.text = formErrorText(errorInfo.stackTraces) // print stack trace once again for debugging: errorInfo.stackTraces.forEach { Log.e(TAG, it) } @@ -143,12 +143,12 @@ class ErrorActivity : AppCompatActivity() { } .setPositiveButton(R.string.accept) { _, _ -> if (action == "EMAIL") { // send on email - val i = Intent(Intent.ACTION_SENDTO) + val intent = Intent(Intent.ACTION_SENDTO) .setData("mailto:".toUri()) // only email apps should handle this .putExtra(Intent.EXTRA_EMAIL, arrayOf(ERROR_EMAIL_ADDRESS)) .putExtra(Intent.EXTRA_SUBJECT, errorEmailSubject) .putExtra(Intent.EXTRA_TEXT, buildJson()) - ShareUtils.openIntentInApp(context, i) + ShareUtils.openIntentInApp(context, intent) } else if (action == "GITHUB") { // open the NewPipe issue page on GitHub ShareUtils.openUrlInApp(this, ERROR_GITHUB_ISSUE_URL) } @@ -157,13 +157,13 @@ class ErrorActivity : AppCompatActivity() { .show() } - private fun formErrorText(el: Array): String { + private fun formErrorText(stacktrace: Array): String { val separator = "-------------------------------------" - return el.joinToString(separator + "\n", separator + "\n", separator) + return stacktrace.joinToString(separator + "\n", separator + "\n", separator) } private fun buildInfo(info: ErrorInfo) { - activityErrorBinding.errorInfoLabelsView.text = getString(R.string.info_labels) + binding.errorInfoLabelsView.text = getString(R.string.info_labels) .replace("\\n", "\n") val text = info.userAction.message + "\n" + @@ -177,7 +177,7 @@ class ErrorActivity : AppCompatActivity() { BuildConfig.VERSION_NAME + "\n" + osString - activityErrorBinding.errorInfosView.text = text + binding.errorInfosView.text = text } private fun buildJson(): String { @@ -195,7 +195,7 @@ class ErrorActivity : AppCompatActivity() { .value("os", osString) .value("time", currentTimeStamp) .array("exceptions", errorInfo.stackTraces.toList()) - .value("user_comment", activityErrorBinding.errorCommentBox.getText().toString()) + .value("user_comment", binding.errorCommentBox.getText().toString()) .end() .done() } catch (error: Throwable) { @@ -208,7 +208,7 @@ class ErrorActivity : AppCompatActivity() { private fun buildMarkdown(): String { try { return buildString(1024) { - val userComment = activityErrorBinding.errorCommentBox.getText().toString() + val userComment = binding.errorCommentBox.getText().toString() if (!userComment.isEmpty()) { appendLine(userComment) } @@ -261,21 +261,21 @@ class ErrorActivity : AppCompatActivity() { private fun addGuruMeditation() { // just an easter egg - var text = activityErrorBinding.errorSorryView.getText().toString() + var text = binding.errorSorryView.text.toString() text += "\n" + getString(R.string.guru_meditation) - activityErrorBinding.errorSorryView.text = text + binding.errorSorryView.text = text } companion object { // LOG TAGS - val TAG: String = ErrorActivity::class.java.toString() + private val TAG = ErrorActivity::class.java.toString() // BUNDLE TAGS - const val ERROR_INFO: String = "error_info" + const val ERROR_INFO = "error_info" - const val ERROR_EMAIL_ADDRESS: String = "crashreport@newpipe.schabi.org" - const val ERROR_EMAIL_SUBJECT: String = "Exception in " + private const val ERROR_EMAIL_ADDRESS = "crashreport@newpipe.schabi.org" + private const val ERROR_EMAIL_SUBJECT = "Exception in " - const val ERROR_GITHUB_ISSUE_URL: String = "https://github.com/TeamNewPipe/NewPipe/issues" + private const val ERROR_GITHUB_ISSUE_URL = "https://github.com/TeamNewPipe/NewPipe/issues" } } From 8968aab5785b326b4aebcb5f7ea91c4f54629e1f Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 11 Feb 2026 18:41:10 +0800 Subject: [PATCH 43/92] ErrorActivity: Catch exceptions not throwables Signed-off-by: Aayush Gupta --- .../main/java/org/schabi/newpipe/error/ErrorActivity.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt index 32f9769a1de..7fbeb17168a 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt @@ -198,8 +198,8 @@ class ErrorActivity : AppCompatActivity() { .value("user_comment", binding.errorCommentBox.getText().toString()) .end() .done() - } catch (error: Throwable) { - Log.e(TAG, "Error while erroring: Could not build json", error) + } catch (exception: Exception) { + Log.e(TAG, "Error while erroring: Could not build json", exception) } return "" @@ -253,8 +253,8 @@ class ErrorActivity : AppCompatActivity() { } append("
\n") } - } catch (error: Throwable) { - Log.e(TAG, "Error while erroring: Could not build markdown", error) + } catch (exception: Exception) { + Log.e(TAG, "Error while erroring: Could not build markdown", exception) return "" } } From c3dbed54e50430b585e9d7b88cf22c9f3a6cc54c Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 11 Feb 2026 21:39:01 +0800 Subject: [PATCH 44/92] ErrorActivity: Kotlin-fy buildMarkdown method Signed-off-by: Aayush Gupta --- .../org/schabi/newpipe/error/ErrorActivity.kt | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt index 7fbeb17168a..b29190a55b5 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt @@ -208,8 +208,8 @@ class ErrorActivity : AppCompatActivity() { private fun buildMarkdown(): String { try { return buildString(1024) { - val userComment = binding.errorCommentBox.getText().toString() - if (!userComment.isEmpty()) { + val userComment = binding.errorCommentBox.text.toString() + if (userComment.isNotEmpty()) { appendLine(userComment) } @@ -229,28 +229,27 @@ class ErrorActivity : AppCompatActivity() { // Collapse all logs to a single paragraph when there are more than one // to keep the GitHub issue clean. - if (errorInfo.stackTraces.size > 1) { + if (errorInfo.stackTraces.isNotEmpty()) { append("
Exceptions (") append(errorInfo.stackTraces.size) append(")

\n") - } - // add the logs - for (i in errorInfo.stackTraces.indices) { - append("

Crash log ") - if (errorInfo.stackTraces.size > 1) { - append(i + 1) + // add the logs + errorInfo.stackTraces.forEachIndexed { index, stacktrace -> + append("
Crash log ") + if (errorInfo.stackTraces.isNotEmpty()) { + append(index + 1) + } + append("") + append("

\n") + append("\n```\n${stacktrace}\n```\n") + append("

\n") } - append("
") - append("

\n") - append("\n```\n${errorInfo.stackTraces[i]}\n```\n") - append("

\n") - } - // make sure to close everything - if (errorInfo.stackTraces.size > 1) { + // make sure to close everything append("

\n") } + append("
\n") } } catch (exception: Exception) { From 54090ca7b6f1c7f1f478514dc832c2961dfcdb7d Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Wed, 11 Feb 2026 16:54:00 +0200 Subject: [PATCH 45/92] ErrorActivity use normal `\n` instead of `\\n` in resource strings --- app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt | 1 - app/src/main/res/values-ar-rLY/strings.xml | 2 +- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-az/strings.xml | 2 +- app/src/main/res/values-b+ast/strings.xml | 2 +- app/src/main/res/values-b+uz+Latn/strings.xml | 2 +- app/src/main/res/values-be/strings.xml | 2 +- app/src/main/res/values-bg/strings.xml | 2 +- app/src/main/res/values-bn-rBD/strings.xml | 2 +- app/src/main/res/values-bn-rIN/strings.xml | 2 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-bs/strings.xml | 2 +- app/src/main/res/values-ca/strings.xml | 2 +- app/src/main/res/values-ckb/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-da/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-eo/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-et/strings.xml | 2 +- app/src/main/res/values-eu/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 2 +- app/src/main/res/values-fi/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-gl/strings.xml | 2 +- app/src/main/res/values-he/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 2 +- app/src/main/res/values-hr/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-is/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-ka/strings.xml | 2 +- app/src/main/res/values-kmr/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-ku/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 2 +- app/src/main/res/values-lv/strings.xml | 2 +- app/src/main/res/values-mk/strings.xml | 2 +- app/src/main/res/values-ml/strings.xml | 2 +- app/src/main/res/values-ms/strings.xml | 2 +- app/src/main/res/values-nb-rNO/strings.xml | 2 +- app/src/main/res/values-ne/strings.xml | 2 +- app/src/main/res/values-nl-rBE/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-nqo/strings.xml | 2 +- app/src/main/res/values-or/strings.xml | 2 +- app/src/main/res/values-pa/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt-rPT/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-ryu/strings.xml | 2 +- app/src/main/res/values-sat/strings.xml | 2 +- app/src/main/res/values-sc/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-sl/strings.xml | 2 +- app/src/main/res/values-so/strings.xml | 2 +- app/src/main/res/values-sq/strings.xml | 2 +- app/src/main/res/values-sr/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-ta/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-ur/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rHK/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 74 files changed, 73 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt index b29190a55b5..a8555abaea6 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt @@ -164,7 +164,6 @@ class ErrorActivity : AppCompatActivity() { private fun buildInfo(info: ErrorInfo) { binding.errorInfoLabelsView.text = getString(R.string.info_labels) - .replace("\\n", "\n") val text = info.userAction.message + "\n" + info.request + "\n" + diff --git a/app/src/main/res/values-ar-rLY/strings.xml b/app/src/main/res/values-ar-rLY/strings.xml index ad411ab1eb8..e481d6bf718 100644 --- a/app/src/main/res/values-ar-rLY/strings.xml +++ b/app/src/main/res/values-ar-rLY/strings.xml @@ -381,7 +381,7 @@ القنوات لا تظهر أدخل عنوان للمثيل - ماذا:\\nطلب:\\nلغة المحتوى:\\nبلد المحتوى:\\nلغة التطبيق:\\nالخدمات:\\nتوقيت جرينتش:\\nالحزمة:\\nالإصدار:\\nOS نسخة: + ماذا:\nطلب:\nلغة المحتوى:\nبلد المحتوى:\nلغة التطبيق:\nالخدمات:\nتوقيت جرينتش:\nالحزمة:\nالإصدار:\nOS نسخة: يزيل الصوت في بعض الجودات جلب ألسنة القنوات جودة عالية (أكبر) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 51a1e47cb16..d4e1847f36a 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -109,7 +109,7 @@ أبلِغ معلومات: ماذا حدث: - ماذا:\\nطلب:\\nلغة المحتوى:\\nبلد المحتوى:\\nلغة التطبيق:\\nالخدمات:\\nتوقيت جرينتش:\\nالحزمة:\\nالإصدار:\\nOS نسخة: + ماذا:\nطلب:\nلغة المحتوى:\nبلد المحتوى:\nلغة التطبيق:\nالخدمات:\nتوقيت جرينتش:\nالحزمة:\nالإصدار:\nOS نسخة: تعليقك (باللغة الإنجليزية): التفاصيل: لم يتم العثور على نتائج diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index ee3396bc7af..aec305e7269 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -577,7 +577,7 @@ Səs Təfərrüatlar: - Nə:\\nSorğu:\\nMəzmun Dili:\\nMəzmun Ölkəsi:\\nTətbiq Dili:\\nXidmət:\\nGMT Saatı:\\nPaket:\\nVersiya:\\nƏS versiyası: + Nə:\nSorğu:\nMəzmun Dili:\nMəzmun Ölkəsi:\nTətbiq Dili:\nXidmət:\nGMT Saatı:\nPaket:\nVersiya:\nƏS versiyası: Bağışlayın, nəsə səhv oldu. Formatlanmış hesabatı köçür Server URL\'sini daxil et diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml index c64972eb3ed..e5fb76ae116 100644 --- a/app/src/main/res/values-b+ast/strings.xml +++ b/app/src/main/res/values-b+ast/strings.xml @@ -267,7 +267,7 @@ Llimpiar los metadatos de la caché Llimpióse la caché d\'imáxenes ¿Instalar Kode\? - 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: + 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 diff --git a/app/src/main/res/values-b+uz+Latn/strings.xml b/app/src/main/res/values-b+uz+Latn/strings.xml index cc82ec69c91..7e737235b96 100644 --- a/app/src/main/res/values-b+uz+Latn/strings.xml +++ b/app/src/main/res/values-b+uz+Latn/strings.xml @@ -279,7 +279,7 @@ Videoni ijro etish muddati, davomiyligi: Detallar: Sizning sharhingiz (ingliz tilida): - Nima: \\n So\'rov: \\nTarkib tili: \\nTarkib mamlakati: \\nIlova tili: \\ nXizmat: \\ nGMT vaqti: \\ nPaket: \\ nVersion: \\ nOS versiyasi: + Nima: \n So\'rov: \nTarkib tili: \nTarkib mamlakati: \nIlova tili: \\ nXizmat: \\ nGMT vaqti: \\ nPaket: \\ nVersion: \\ nOS versiyasi: Nima sodir bo\'ldi: Info: Hisobot diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index e44d2ea5cbd..530d700a796 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -146,7 +146,7 @@ Справаздача Інфармацыя: Што адбылося: - Што:\\nЗапыт:\\nМова кантэнту:\\nКраіна кантэнту:\\nМова праграмы:\\nСэрвіс:\\nЧас GMT:\\nПакет:\\nВерсія:\\nВерсія АС: + Што:\nЗапыт:\nМова кантэнту:\nКраіна кантэнту:\nМова праграмы:\nСэрвіс:\nЧас GMT:\nПакет:\nВерсія:\nВерсія АС: Ваш каментарый (па-англійску): Падрабязнасці: Прайграць відэа, працягласць: diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 5d0b079433b..22f4b9685a3 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -204,7 +204,7 @@ Изтрива историята на възпроизвежданите стриймове и позицията на възпроизвеждането Не са намерени видео стриймове Не са намерени аудио стриймове - Какво:\\nЗаявка:\\nЕзик на съдържанието:\\nДържава на съдържанието:\\nЕзик на приложението:\\nУслуга:\\nGMT Време:\\nПакет:\\nВерсия:\\nВерсия на ОС: + Какво:\nЗаявка:\nЕзик на съдържанието:\nДържава на съдържанието:\nЕзик на приложението:\nУслуга:\nGMT Време:\nПакет:\nВерсия:\nВерсия на ОС: Пренареди чрез плъзгане Начало Преименувай diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 2b0ffe91874..0d82e434b4d 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -103,7 +103,7 @@ reCAPTCHA চ্যালেঞ্জ reCAPTCHA চ্যালেঞ্জ অনুরোধ করা হয়েছে - কি:\\nঅনুরোধ:\\nকন্টেন্ট ভাষা:\\nসার্ভিস:\\nসময়(GMT এ):\\nপ্যাকেজ:\\nসংস্করণ:\\nওএস সংস্করণ:\\nআইপি পরিসর: + কি:\nঅনুরোধ:\nকন্টেন্ট ভাষা:\nসার্ভিস:\nসময়(GMT এ):\nপ্যাকেজ:\nসংস্করণ:\nওএস সংস্করণ:\nআইপি পরিসর: স্ট্রিম ফাইল ডাউনলোড করুন তথ্য দেখাও নতুন যা কিছু diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index a79319ee35f..bf226e28ebc 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -33,7 +33,7 @@ ভিডিও প্রাকদর্শন, সময়ঃ বর্ণনা: আপনার মন্তব্য (ইংরেজিতে): - কি:\\nঅনুরোধ:\\nকন্টেন্ট ভাষা:\\nকন্টেন্ট দেশ:\\nঅ্যাপ ভাষা:\\nসার্ভিস:\\nসময়(GMT এ):\\nপ্যাকেজ:\\nসংস্করণ:\\nওএস সংস্করণ: + কি:\nঅনুরোধ:\nকন্টেন্ট ভাষা:\nকন্টেন্ট দেশ:\nঅ্যাপ ভাষা:\nসার্ভিস:\nসময়(GMT এ):\nপ্যাকেজ:\nসংস্করণ:\nওএস সংস্করণ: কি হয়েছিল: তথ্য: প্রতিবেদন diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 7a4c8b3b044..9059bd4f507 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -114,7 +114,7 @@ ভিডিও চালাও, সময়ঃ বর্ণনা: তোমার মন্তব্য (ইংরেজিতে): - কি:\\nঅনুরোধ:\\nকন্টেন্ট ভাষা:\\nসার্ভিস:\\nসময়(GMT এ):\\nপ্যাকেজ:\\nসংস্করণ:\\nওএস সংস্করণ:\\nআইপি পরিসর: + কি:\nঅনুরোধ:\nকন্টেন্ট ভাষা:\nসার্ভিস:\nসময়(GMT এ):\nপ্যাকেজ:\nসংস্করণ:\nওএস সংস্করণ:\nআইপি পরিসর: কি হয়েছিল: তথ্য: প্রতিবেদন diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml index ee4fc3317b0..6c4b08a721a 100644 --- a/app/src/main/res/values-bs/strings.xml +++ b/app/src/main/res/values-bs/strings.xml @@ -268,7 +268,7 @@ Prijavi Info: Šta se dogodilo: - Šta:\\nZahtjev:\\nJezik sadržaja:\\nZemlja sadržaja:\\nJezik aplikacije:\\nUsluga:\\nVremenska oznaka:\\nPaket:\\nVerzija:\\nVerzija OS-a: + Šta:\nZahtjev:\nJezik sadržaja:\nZemlja sadržaja:\nJezik aplikacije:\nUsluga:\nVremenska oznaka:\nPaket:\nVerzija:\nVerzija OS-a: Vaš komentar (na engleskom): Detalji: Reproduciraj video, trajanje: diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index ff12819f509..88d5b2e65ca 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -268,7 +268,7 @@ Acaba de reproduir la cua (sense repetició) quan s\'hi afegeixi un vídeo relacionat Mostra l\'indicador «Mantenir per posar a la cua» Mostra un missatge d\'ajuda quan el botó de mode en segon pla o emergent estigui premut a la pàgina de detalls d\'un vídeo - Què ha passat:\\nPetició:\\nIdioma del contingut:\\nPaís del contingut:\\nLlengua de l\'aplicació:\\nServei:\\nHora GMT:\\nPaquet:\\nVersió:\\nVersió del SO: + Què ha passat:\nPetició:\nIdioma del contingut:\nPaís del contingut:\nLlengua de l\'aplicació:\nServei:\nHora GMT:\nPaquet:\nVersió:\nVersió del SO: Acció d\'obertura preferida Acció per defecte en obrir continguts — %s La supervisió de fugues de memòria pot fer que l\'aplicació deixi de respondre mentre es bolca la memòria diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml index d448c111886..d168bbb3745 100644 --- a/app/src/main/res/values-ckb/strings.xml +++ b/app/src/main/res/values-ckb/strings.xml @@ -12,7 +12,7 @@ \n \nبۆیە هەڵژرادن بۆ خۆت دەگەڕێتەوە: زانیاری تەواو یان خێرا.
نیوپایپ نه‌رمه‌والایه‌كی سەرچاوە کراوەیە : دەتوانیت بەکاریبهێنیت، بیخوێنیتەوە، هاوبەشی پێبکەیت ،بەرەوپێشی ببەیت. بەتایبەتی دەتوانی دابەشیبکەیتەوە یاخوود بگۆڕیت بەپێی مەرجەکانی GNU مۆڵەتنامەی گشتی وەک نه‌رمه‌واڵایه‌كی بڵاوی خۆڕایی, بەهۆی وەشانی ٣ ی مۆڵەتنامە، یان هەر وەشانێکی دوواتر. - چی:\\nداواكاری:\\nزمانی بابەت:\\nوڵاتی بابەت:\\nزمانی به‌رنامه‌:\\nخزمه‌تگوزاری:\\nGMT كات:\\nپاكێج:\\nوه‌شان:\\nOS وه‌شان: + چی:\nداواكاری:\nزمانی بابەت:\nوڵاتی بابەت:\nزمانی به‌رنامه‌:\nخزمه‌تگوزاری:\nGMT كات:\nپاكێج:\nوه‌شان:\nOS وه‌شان: پڕۆژەی نیوپایپ زانیارییە تایبەتییەکانت بە وردی دەپارێزێت. هەروەها به‌رنامه‌كه‌ هیچ زانایارییەکت بەبێ ئاگاداری تۆ بەکارنابات. \n‫سیاسەتی تایبەتی نیوپایپ بە وردی ڕوونکردنەوەت دەداتێ لەسەر ئەو زانیاریانەی وەریاندەگرێت و بەکاریاندەبات. ناتوانرێت لە بیرگەی دەرەکیدا داببەزێنرێت . شوێنی فۆڵده‌ری دابه‌زاندنەکان ڕێکبخرێتەوە؟ diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4c219d6d4f7..37e8d70e505 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -81,7 +81,7 @@ Černé Kontrolní součet Určete prosím složku pro stahování později v nastavení - Co:\\nŽádost:\\nJazyk obsahu:\\nZemě obsahu:\\nJazyk aplikace:\\nSlužba:\\nČas GMT:\\nBalíček:\\nVerze:\\nVerze OS: + Co:\nŽádost:\nJazyk obsahu:\nZemě obsahu:\nJazyk aplikace:\nSlužba:\nČas GMT:\nBalíček:\nVerze:\nVerze OS: Vše Otevřít ve vyskakovacím okně Toto oprávnění je vyžadováno diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index f3a25e3b7e5..2be7c8bb87b 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -317,7 +317,7 @@ Start afspilning i et popup Åbn Skuffe Luk Skuffe - Hvad:\\nForespørgsel:\\nIndholdssprog:\\nIndholdsland:\\nApp-sprog:\\nTjeneste:\\nGMT-tid:\\nPakke:\\nVersion:\\nOS-version: + Hvad:\nForespørgsel:\nIndholdssprog:\nIndholdsland:\nApp-sprog:\nTjeneste:\nGMT-tid:\nPakke:\nVersion:\nOS-version: Standardhandling ved åbning af indhold — %s Anvend som playlistens miniaturebillede Bogmærk Playliste diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 1b4800a8f4b..6270c658ad3 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -54,7 +54,7 @@ Melden Info: Dies ist passiert: - Was:\\nAnfrage:\\nSprache des Inhalts:\\nLand des Inhalts:\\nSprache der App:\\nDienst:\\nZeit (GMT):\\nPaket:\\nVersion:\\nOS-Version: + Was:\nAnfrage:\nSprache des Inhalts:\nLand des Inhalts:\nSprache der App:\nDienst:\nZeit (GMT):\nPaket:\nVersion:\nOS-Version: Details: Video Audio diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index ac93470bcf1..b8166905e1c 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -163,7 +163,7 @@ Λυπούμαστε, αυτό δεν έπρεπε να έχει συμβεί. Αναφορά μέσω ηλεκτρονικού ταχυδρομείου Συγγνώμη, κάτι πήγε στραβά. - Τι:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΧώρα περιεχομένου:\\nΓλώσσα εφαρμογής:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού συστήματος: + Τι:\nΑίτημα:\nΓλώσσα περιεχομένου:\nΧώρα περιεχομένου:\nΓλώσσα εφαρμογής:\nΥπηρεσία:\nΏρα GMT:\nΠακέτο:\nΈκδοση:\nΈκδοση λειτουργικού συστήματος: Κανένα αποτέλεσμα Δεν υπάρχει τίποτα εδώ Σύρετε για ταξινόμηση diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index cc42c042660..e1b1bede2ce 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -242,7 +242,7 @@ Pardonu, eraro okazis. Pardonon, io mizokasis. Kio okazis: - Kio:\\nPeto:\\nEnhavlingvo:\\nEnhavlando:\\nAplingvo:\\nServo:\\nGMT Horo:\\nPako:\\nVersio:\\nOperaciumo versio: + Kio:\nPeto:\nEnhavlingvo:\nEnhavlando:\nAplingvo:\nServo:\nGMT Horo:\nPako:\nVersio:\nOperaciumo versio: Aŭdio Komenci Paŭzigi diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a2ab5ca5220..9838eb3c1cd 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -78,7 +78,7 @@ Copiado al portapapeles Defina una carpeta de descargas más tarde en los ajustes La interfaz de la aplicación dejó de funcionar - Qué:\\nSolicitud:\\nIdioma del contenido:\\nPaís del contenido:\\nIdioma de la aplicación:\\nServicio:\\nMarca de tiempo:\\nPaquete:\\nVersión:\\nVersión del SO: + Qué:\nSolicitud:\nIdioma del contenido:\nPaís del contenido:\nIdioma de la aplicación:\nServicio:\nMarca de tiempo:\nPaquete:\nVersión:\nVersión del SO: Negro Todo Abrir en modo emergente diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 6459c05a0f9..5d7e829f3fe 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -141,7 +141,7 @@ Teata Info: Mis juhtus: - Mis:\\nPäring:\\nSisu keel:\\nSisu maa:\\nRakenduse keel:\\nTeenus:\\nGMT aeg:\\nPakett:\\nVersioon:\\nOS versioon: + Mis:\nPäring:\nSisu keel:\nSisu maa:\nRakenduse keel:\nTeenus:\nGMT aeg:\nPakett:\nVersioon:\nOS versioon: Oma kommentaar (inglise keeles): Üksikasjad: Esita video, kestus: diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 1bac3b498a3..8b23cf8eab8 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -78,7 +78,7 @@ Salatu Informazioa: Zer gertatu da: - Zer:\\nEskaria:\\nEdukiaren hizkuntza:\\nEdukiaren herrialdea:\\nAplikazioaren hizkuntza:\\nZerbitzua:\\nDenbora-zigilua:\\nPaketea:\\nBertsioa:\\nSE bertsioa: + Zer:\nEskaria:\nEdukiaren hizkuntza:\nEdukiaren herrialdea:\nAplikazioaren hizkuntza:\nZerbitzua:\nDenbora-zigilua:\nPaketea:\nBertsioa:\nSE bertsioa: Zure iruzkina (Ingelesez): Xehetasunak: Bideoa diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index cd2d1ec32ef..09a01e0bd29 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -275,7 +275,7 @@ نمایش راهنما هنگام فشردن پس زمینه یا دکمهٔ تصویر در تصویر در «جزییات:» ویدیو برای در صف قرار دادن، نگه دارید بازگردانی - چی:\\nدرخواست:\\nزبان محتوا:\\nکشور محتوا:\\nزبان اپ:\\nخدمت:\\nزمان GMT\\nپکیج:T:\\nنسخه:\\nنسخه‌اندروید: + چی:\nدرخواست:\nزبان محتوا:\nکشور محتوا:\nزبان اپ:\nخدمت:\nزمان GMT\nپکیج:T:\nنسخه:\nنسخه‌اندروید: چالش ری‌کپچا نیاز به چالش ری‌کپچا است این اجازه برای گشودن در حالت diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 3f66a85eb8c..1ce4df00903 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -155,7 +155,7 @@ Haluatko poistaa tämän hakuhistoriasta? Jatka toistoa Info: - Mikä:\\nPyyntö:\\nSisällön kieli:\\nSisällön maa:\\n:Sovelluksen kieli:\\nPalvelu:\\nGMT Aika:\\nPaketti:\\nVersio:\\nOS versio: + Mikä:\nPyyntö:\nSisällön kieli:\nSisällön maa:\n:Sovelluksen kieli:\nPalvelu:\nGMT Aika:\nPaketti:\nVersio:\nOS versio: © %1$s %2$s %3$s alla Pääsivun sisältö Tyhjä sivu diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index efd735bc80b..f7459e40989 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -86,7 +86,7 @@ Ouvrir en mode flottant Lecture en mode flottant Désactivés - Quoi :\\nRequest :\\nContent Language :\\nContent Country :\\nApp Language :\\nService :\\nGMT Time :\\nPackage :\\nVersion :\\nOS version : + Quoi :\nRequest :\nContent Language :\nContent Country :\nApp Language :\nService :\nGMT Time :\nPackage :\nVersion :\nOS version : Cette autorisation est nécessaire pour \nutiliser le mode flottant Arrière-plan diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 6c7fa3e3c2f..bea6c2eb754 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -145,7 +145,7 @@ Informe Información: Que ocorreu: - Que: \\n Solicitar: \\n Idioma de contido: \\n País de contido: \\n Idioma do aplicativo: \\nServicio: \\n Tempo GMT: \\n Paquete: \\n Versión: \\n versión de nOS: + Que: \n Solicitar: \n Idioma de contido: \n País de contido: \n Idioma do aplicativo: \nServicio: \n Tempo GMT: \n Paquete: \n Versión: \n versión de nOS: O teu comentario (en inglés): Detalles: Reproducir o vídeo, duración: diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 24d916464a0..3d630394f53 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -73,7 +73,7 @@ דיווח מידע: מה קרה: - מה:\\nבקשה:\\nשפת התוכן:\\nמדינת התוכן:\\nשפת היישומון:\\nשירות:\\nשעון גריניץ׳:\\nחבילה:\\nגרסה:\\nגרסת מערכת ההפעלה: + מה:\nבקשה:\nשפת התוכן:\nמדינת התוכן:\nשפת היישומון:\nשירות:\nשעון גריניץ׳:\nחבילה:\nגרסה:\nגרסת מערכת ההפעלה: רישום למינוי נרשמת ביטול מינוי לערוץ diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 5c7be01b426..3a5cda8c933 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -114,7 +114,7 @@ रिपोर्ट करें जानकारी: क्या हुआ: - क्या:\\nअनुरोध:\\nसामग्री भाषा:\\nसामग्री देश:\\nऐप भाषा:\\nसेवा:\\nजीएमटी समय:\\nपैकेज:\\nसंस्करण:\\nOS संस्करण: + क्या:\nअनुरोध:\nसामग्री भाषा:\nसामग्री देश:\nऐप भाषा:\nसेवा:\nजीएमटी समय:\nपैकेज:\nसंस्करण:\nOS संस्करण: आपकी टिप्पणी(अंग्रेजी में): विवरण: वीडियो चलाएं, अवधि : diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 85a2fa3675c..757f6244d38 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -87,7 +87,7 @@ Prijavi Informacije: Što se dogodilo: - Što:\\nZahtjev:\\nJezik sadržaja:\\nZemlja sadržaja:\\nJezik aplikacije:\\nUsluga:\\nGMT vrijeme:\\nPaket:\\nVerzija:\\nVerzija OS-a: + Što:\nZahtjev:\nJezik sadržaja:\nZemlja sadržaja:\nJezik aplikacije:\nUsluga:\nGMT vrijeme:\nPaket:\nVerzija:\nVerzija OS-a: Tvoj komentar (na engleskom): Detalji: Pokreni video, trajanje: diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 03f868de9b5..1110fd248da 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -129,7 +129,7 @@ A külső lejátszó nem támogatja az ilyen típusú hivatkozásokat Nem található videófolyam Nem található hangfolyam - Mi:\\nKérés:\\nTartalom nyelve:\\nTartalom származási országa:\\nAlkalmazás nyelve:\\nSzolgáltatás:\\nGMT idő:\\nCsomag:\\nVerzió:\\nOperációs rendszer verzió: + Mi:\nKérés:\nTartalom nyelve:\nTartalom származási országa:\nAlkalmazás nyelve:\nSzolgáltatás:\nGMT idő:\nCsomag:\nVerzió:\nOperációs rendszer verzió: Nincs találat Közvetítési fájl letöltése Hozzáadás ehhez diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 003994de256..d023e9fb356 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -76,7 +76,7 @@ Silakan pilih folder unduhan di pengaturan Pemutar penjaliran tidak ditemukan. Pasang VLC? App/UI rusak - Apa:\\nPermintaan:\\nBahasa Konten:\\nNegara Konten:\\nBahasa Apl:\\nLayanan:\\nWaktu GMT:\\nPaket:\\nVersi:\\nVersi OS: + Apa:\nPermintaan:\nBahasa Konten:\nNegara Konten:\nBahasa Apl:\nLayanan:\nWaktu GMT:\nPaket:\nVersi:\nVersi OS: Thread Tantangan reCAPTCHA Meminta kode reCAPTCHA diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index cf3fbd8b2c6..34c29ff10d2 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -212,7 +212,7 @@ Því miður fór eitthvað úrskeiðis. Líkar við Það sem gerðist: - Hvað:\\nBeiðni:\\nTungumál Efnis:\\nLand Efnis:\\nTungumál forrits:\\nÞjónusta:\\nGMT Tími:\\nPakki:\\nÚtgáfa:\\nÚtgáfu Stýrikerfis: + Hvað:\nBeiðni:\nTungumál Efnis:\nLand Efnis:\nTungumál forrits:\nÞjónusta:\nGMT Tími:\nPakki:\nÚtgáfa:\nÚtgáfu Stýrikerfis: Athugasemd þín (á ensku): Engar niðurstöður Myndskeið diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7955eed1514..3a3995b143d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -78,7 +78,7 @@ Copiato negli appunti Seleziona una cartella per i file scaricati L\'app/UI si è interrotta - Cosa:\\nRichiesta:\\nLingua contenuti:\\nPaese contenuti\\nLingua app:\\nServizio:\\nOrario GMT:\\nPacchetto:\\nVersione:\\nVersione SO: + Cosa:\nRichiesta:\nLingua contenuti:\nPaese contenuti\nLingua app:\nServizio:\nOrario GMT:\nPacchetto:\nVersione:\nVersione SO: Risoluzione reCAPTCHA Nero Tutto diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index d78a0654710..ac9fe36844f 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -78,7 +78,7 @@ ダウンロード 不具合報告 アプリ(UI)がクラッシュしました - どんな問題:\\nリクエスト:\\nコンテンツ言語:\\nコンテンツ国:\\nアプリ言語:\\nサービス:\\nGMT 時間:\\nパッケージ:\\nバージョン:\\nOSバージョン: + どんな問題:\nリクエスト:\nコンテンツ言語:\nコンテンツ国:\nアプリ言語:\nサービス:\nGMT 時間:\nパッケージ:\nバージョン:\nOSバージョン: reCAPTCHA の要求 reCAPTCHA を要求しました ブラック diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 61b3ee52399..444625fc064 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -604,7 +604,7 @@ გარე დამკვრელს არ აქვთ ამ ტიპის ბმულების მხარდაჭერა ფაილი არ არსებობს ან მასზე წაკითხვის ან ჩაწერის ნებართვა აკლია შენახული ჩანართების წაკითხვა ვერ მოხერხდა, ამიტომ გამოიყენეთ ნაგულისხმევი ჩანართები - რა:\\nმოითხოვეთ:\\nშემცველობის ენა:\\nშემცველობის ქვეყანა:\\nაპლიკაციის ენა:\\nსერვისი:\\nGMT დრო:\\nპაკეტი:\\nვერსია:\\nOS ვერსია: + რა:\nმოითხოვეთ:\nშემცველობის ენა:\nშემცველობის ქვეყანა:\nაპლიკაციის ენა:\nსერვისი:\nGMT დრო:\nპაკეტი:\nვერსია:\nOS ვერსია: ამტვირთველის ავატარის ესკიზი კომენტარები გამორთულია Შექმნა diff --git a/app/src/main/res/values-kmr/strings.xml b/app/src/main/res/values-kmr/strings.xml index f8da8d1a745..f4b83eda223 100644 --- a/app/src/main/res/values-kmr/strings.xml +++ b/app/src/main/res/values-kmr/strings.xml @@ -64,7 +64,7 @@ Vîdeo, demdirêj bilîze: Hûrî: Şîroveya we (bi Îngilîzî): - Çi:\\nRequest:\\nContent Language:\\nContent Welat:\\nApp Language:\\nService:\\nGMT Dem:\\nPackage:\\nVersion:\\nOS version: + Çi:\nRequest:\nContent Language:\nContent Welat:\nApp Language:\nService:\nGMT Dem:\nPackage:\nVersion:\nOS version: Çi qewimî: Agahdarî: Nûçe diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 8eb19ade820..59832ece4d3 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -113,7 +113,7 @@ 이 스트림을 재생할 수 없습니다 복구할 수 없는 플레이어 오류가 발생했습니다 플레이어 오류로부터 복구 중 - 무엇:\\n요청:\\n콘텐츠 언어:\\n콘텐츠 국가:\\n앱 언어:\\n서비스:\\nGMT 시간:\\n패키지:\\n버전:\\nOS 버전: + 무엇:\n요청:\n콘텐츠 언어:\n콘텐츠 국가:\n앱 언어:\n서비스:\nGMT 시간:\n패키지:\n버전:\nOS 버전: 결과 없음 구독할 항목을 추가하세요 구독자 없음 diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index e556fcf2673..c788f252acb 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -328,7 +328,7 @@ گێڕانەوەی کارپێکەر بۆکاتی پێش کێشە هەمان فۆڵدەر بوونی نییە هەمان فایل/بابەت بوونی نییە - چی:\\nداواکراو:\\nناوەڕۆک:\\nلانگ:\\nخزمەتگوزاری:\\nGMT:\\nکات:\\nپاکێج:\\nوەشان:\\nوەشانی سیستەم: + چی:\nداواکراو:\nناوەڕۆک:\nلانگ:\nخزمەتگوزاری:\nGMT:\nکات:\nپاکێج:\nوەشان:\nوەشانی سیستەم: هێما ڕێگەپێدراوەکان لە فایلێکی ناویدا هێما نادروستەکان بەم بەهایە جێگۆڕکێ دەکرێن هێمای جێگۆڕین diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 70700bb5d97..dd787480986 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -74,7 +74,7 @@ Ataskaita Informacija: Kas nutiko: - Kas:\\nUžklausa:\\nTurinio Kalba:\\nTurinio Šalis:\\nProgramėlės Kalba:\\nPaslauga:\\nGMT Laikas:\\nPaketas:\\nVersija:\\nOS versija: + Kas:\nUžklausa:\nTurinio Kalba:\nTurinio Šalis:\nProgramėlės Kalba:\nPaslauga:\nGMT Laikas:\nPaketas:\nVersija:\nOS versija: Jūsų komentaras (anglų kalba): Išsami informacija: Paleisti vaizdo įrašą, trukmė: diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index bb41037a15e..0580b9dd715 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -151,7 +151,7 @@ Atskaņot video, ilgums: Detaļas: Jūsu komentārs (Angliski): - Kas:\\nRequest:\\nContent Valoda:\\nContent Valsts:\\nApp Valoda:\\nService:\\nGMT Laiks:\\nPackage:\\nVersion:\\nOS versija: + Kas:\nRequest:\nContent Valoda:\nContent Valsts:\nApp Valoda:\nService:\nGMT Laiks:\nPackage:\nVersion:\nOS versija: Paziņojumi video apstrādes progresam Video haša paziņojums Atcerēties pēdējo uznirstošā loga izmēru un pozīciju diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 5ce379216a0..8931cef3d53 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -133,7 +133,7 @@ Извештај Инфо: Што се случи: - What:\\nRequest:\\nContent Language:\\nContent Country:\\nApp Language:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version: + What:\nRequest:\nContent Language:\nContent Country:\nApp Language:\nService:\nGMT Time:\nPackage:\nVersion:\nOS version: Ваш коментар (на Англиски): Детали: Емитување на видео, времетраење diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 2fce034d2f4..a149b910b41 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -112,7 +112,7 @@ കൂടുതൽ വിവരങ്ങൾക്കും വാർത്തകൾക്കും ന്യൂപൈപ്പിന്റെ വെബ്സൈറ്റ് സന്ദർശിക്കുക. വെബ്സൈറ്റ് തിരികെ നൽകുക - എന്താണ്:\\nഅപേക്ഷ:\\nഉള്ളടക്കത്തിന്റെ ഭാഷ:\\nഉള്ളടക്കത്തിന്റെ രാജ്യം:\\n അപ്ലിക്കേഷന്റെ ഭാഷ:\\nസേവനം:\\nGMT സമയം:\\nപാക്കേജ്:\\nപതിപ്പ്:\\nOS ന്റെ പതിപ്പ്: + എന്താണ്:\nഅപേക്ഷ:\nഉള്ളടക്കത്തിന്റെ ഭാഷ:\nഉള്ളടക്കത്തിന്റെ രാജ്യം:\n അപ്ലിക്കേഷന്റെ ഭാഷ:\nസേവനം:\nGMT സമയം:\nപാക്കേജ്:\nപതിപ്പ്:\nOS ന്റെ പതിപ്പ്: നിങ്ങൾക്ക് മികച്ച ഉപഭോക്തൃ അനുഭവം നൽകാനായി പ്രയത്‌നിക്കുന്ന ലോകമെമ്പാടുമുള്ള വൊളന്റിയർമാരാണ് ന്യൂപൈപ്പിന്റെ ശക്തി. ന്യൂപൈപ്പിനെ ഇനിയും മികവുറ്റതാക്കാൻ നിങ്ങൾക്ക് കഴിയും, നിങ്ങളുടെ സംഭാവനയിലൂടെ. സംഭാവന ചെയ്യുക ജിറ്റ്ഹബിൽ കാണുക diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index b0039bf0cd0..bf4da344021 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -158,7 +158,7 @@ Lapor Maklumat: Apa yang berlaku: - Apa:\\nPermintaan:\\nBahasa Kandungan:\\nNegara Kandungan:\\nBahasa Aplikasi:\\nPerkhidmatan:\\nWaktu GMT:\\nPakej:\\nVersi:\\nVersi OS: + Apa:\nPermintaan:\nBahasa Kandungan:\nNegara Kandungan:\nBahasa Aplikasi:\nPerkhidmatan:\nWaktu GMT:\nPakej:\nVersi:\nVersi OS: Ulasan anda (dalam bahasa Inggeris): Butiran: Main video, tempoh masa: diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 404851e6df6..633140dcc65 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -76,7 +76,7 @@ Trykk for detaljer Vent… Kopiert til utklippstavle - Hva:\\nForespørsel:\\nInnholdsspråk:\\nInnholdsland:\\nAppspråk:\\nTjeneste:\\nGMT-tid:\\nPakke:\\nVersjon:\\nOS-versjon: + Hva:\nForespørsel:\nInnholdsspråk:\nInnholdsland:\nAppspråk:\nTjeneste:\nGMT-tid:\nPakke:\nVersjon:\nOS-versjon: Start Definer en nedlastingsmappe senere i innstillingene reCAPTCHA-oppgave diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 75e113d4e0a..06e2bacc1a4 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -163,7 +163,7 @@ रिपोर्ट जानकारी: के भयो: - के:\\nअनुरोध:\\nसामग्री भाषा: \\nसेवा:\\nGMT समय:\\nप्याकेज:\\nसंस्करण: \\nOS संस्करण: + के:\nअनुरोध:\nसामग्री भाषा: \nसेवा:\nGMT समय:\nप्याकेज:\nसंस्करण: \nOS संस्करण: तपाईंको टिप्पणी (अंग्रेजी मा): विवरण: प्ले भिडियो, अवधि: diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index 148468dd292..92d36ab7705 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -134,7 +134,7 @@ Melden Info: Wat er is gebeurd: - Wat:\\nVerzoek:\\nTaal van inhoud:\\nLand:\\nTaal van applicatie:\\nDienst:\\nGMT tijd:\\nPakket:\\nVersie:\\nVersie van besturingssysteem: + Wat:\nVerzoek:\nTaal van inhoud:\nLand:\nTaal van applicatie:\nDienst:\nGMT tijd:\nPakket:\nVersie:\nVersie van besturingssysteem: Uw opmerking (in het Engels): Details: Speel video, tijd: diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c7aab3577af..7d2f0b7beac 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -65,7 +65,7 @@ Downloads Foutrapport App/UI gecrasht - Wat:\\nVerzoek:\\nInhoudstaal:\\nInhoudsland:\\nApp-taal:\\nDienst:\\nGMT-tijd:\\nPakket:\\nVersie:\\nVersie van besturingssysteem: + Wat:\nVerzoek:\nInhoudstaal:\nInhoudsland:\nApp-taal:\nDienst:\nGMT-tijd:\nPakket:\nVersie:\nVersie van besturingssysteem: Starten Pauzeren Verwijderen diff --git a/app/src/main/res/values-nqo/strings.xml b/app/src/main/res/values-nqo/strings.xml index fb695004604..abf7ad70dcf 100644 --- a/app/src/main/res/values-nqo/strings.xml +++ b/app/src/main/res/values-nqo/strings.xml @@ -166,7 +166,7 @@ ߘߌ߬ߢߍ߬߸ ߞߏ߫ ߘߏ߫ ߡߊ߫ ߕߊ߬ߡߌ߲߬ ߞߏߢߊ߬. ߟߌ߬ߤߟߊ: ߡߎ߲߬ ߞߍߣߍ߲߫: - ߡߎ߲߬:\\nRequest:\\nContent Language:\\nContent Country:\\nApp Language:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version: + ߡߎ߲߬:\nRequest:\nContent Language:\nContent Country:\nApp Language:\nService:\nGMT Time:\nPackage:\nVersion:\nOS version: ߌ ߟߊ߫ ߞߊ߲߬ߞߎߡߊ (ߊ߲߬ߞߌ߬ߟߍ߬ ߞߊ߲ ߘߐ߫): ߕߐ߬ߝߍ߬ߦߊ ߟߎ߬: ߦߋߡߍ߲ߕߊ ߘߐߞߊ߬ߙߊ߲߸ ߥߎ߬ߛߎ: diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index d15afa4fec8..c9d0e6758ec 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -461,7 +461,7 @@ ଫାଇଲ୍ ବିଦ୍ୟମାନ ନାହିଁ କିମ୍ବା ଏହାକୁ ପଢ଼ିବା କିମ୍ବା ଲେଖିବା ପାଇଁ ଅନୁମତି ଅଭାବ ଏପରି ଫୋଲ୍ଡର ନାହିଁ ସଞ୍ଚିତ ଟ୍ୟାବଗୁଡିକ ପଢ଼ି ପାରିଲା ନାହିଁ, ତେଣୁ ଡିଫଲ୍ଟଗୁଡିକ ବ୍ୟବହାର କରି - କଣ:\\nRequest:\\nContent Language:\\nContent Country:\\nApp Language:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS ସଂସ୍କରଣ: + କଣ:\nRequest:\nContent Language:\nContent Country:\nApp Language:\nService:\nGMT Time:\nPackage:\nVersion:\nOS ସଂସ୍କରଣ: କୌଣସି ଫଳାଫଳ ନାହିଁ ଏଠାରେ କ୍ରିକେଟ୍ ବ୍ୟତୀତ ଆଉ କିଛି ନାହିଁ ପୁନଃଚେଷ୍ଟା କରନ୍ତୁ diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 2c6158355d0..8c69dd85019 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -140,7 +140,7 @@ ਇਤਲਾਹ ਕਰੋ ਜਾਣਕਾਰੀ: ਕੀ ਹੋਇਆ ਹੈ: - ਕੀ:\\nRequest:\\nContent ਭਾਸ਼ਾ/ਬੋਲੀ:\\nContent Country:\\nApp ਭਾਸ਼ਾ/ਬੋਲੀ:\\nService:\\nGMT ਸਮਾਂ:\\nPackage:\\nVersion:\\nOS version: + ਕੀ:\nRequest:\nContent ਭਾਸ਼ਾ/ਬੋਲੀ:\nContent Country:\nApp ਭਾਸ਼ਾ/ਬੋਲੀ:\nService:\nGMT ਸਮਾਂ:\nPackage:\nVersion:\nOS version: ਤੁਹਾਡੀ ਟਿੱਪਣੀ (ਅੰਗਰੇਜ਼ੀ ਵਿਚ): ਵੇਰਵੇ: ਵੀਡੀਓ ਚਲਾਓ, ਮਿਆਦ: diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index c72e6de26e9..910b110448d 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -55,7 +55,7 @@ Zgłoś Informacje: Co się stało: - Co:\\nŻądanie:\\nJęzyk treści:\\nKraj treści:\\nJęzyk aplikacji:\\nUsługa:\\nZnacznik czasu:\\nPakiet:\\nWersja:\\nWersja systemu: + Co:\nŻądanie:\nJęzyk treści:\nKraj treści:\nJęzyk aplikacji:\nUsługa:\nZnacznik czasu:\nPakiet:\nWersja:\nWersja systemu: Twój komentarz (po angielsku): Szczegóły: Odtwarzane wideo, czas trwania: diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 7488e69c73b..44cfb9e2a60 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -81,7 +81,7 @@ Usar player de áudio externo Usar player de vídeo externo Mostrar opção \"Reproduzir no Kodi\" - O que aconteceu:\\nPedido:\\nIdioma do conteúdo:\\nPaís do conteúdo:\\nIdioma do aplicativo:\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nVersão do SO: + O que aconteceu:\nPedido:\nIdioma do conteúdo:\nPaís do conteúdo:\nIdioma do aplicativo:\nServiço:\nHora GMT:\nPacote:\nVersão:\nVersão do SO: Abrir no modo Popup Resolução padrão do Popup Mostrar resoluções mais altas diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 4e9a85522be..80f943ce5b1 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -202,7 +202,7 @@ Gerar nome único Ação a executar ao trocar para outra aplicação a partir do menu principal - %s Utilizar reprodutor de vídeo externo - O quê:\\nPedido:\\nIdioma do conteúdo:\\nPaís do conteúdo\\nIdioma da aplicação\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nSO Versão: + O quê:\nPedido:\nIdioma do conteúdo:\nPaís do conteúdo\nIdioma da aplicação\nServiço:\nHora GMT:\nPacote:\nVersão:\nSO Versão: Se tem ideias para: tradução, alterações de desenho, limpeza de código, ou alterações significativas no código fonte - todas as ajudas são bem-vindas. Quanto mais se faz, melhor ficará! Limpar dados Apenas uma vez diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index e18984dc27b..1ae1f8b6f47 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -78,7 +78,7 @@ Processos Descarga NewPipe Aplicação terminou em erro - O quê:\\nPedido:\\nIdioma do conteúdo:\\nPaís do conteúdo\\nIdioma da aplicação\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nSO Versão: + O quê:\nPedido:\nIdioma do conteúdo:\nPaís do conteúdo\nIdioma da aplicação\nServiço:\nHora GMT:\nPacote:\nVersão:\nSO Versão: Abrir no modo popup Preto Tudo diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index ccd1483a1e3..2afe73875b9 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -91,7 +91,7 @@ Toate Dezactivat Aplicația/UI s-a oprit - Ce:\\nSolicitare:\\nLimba conținutului:\\nȚara conținutului:\\nLimba aplicației:\\nServiciu:\\nOra GMT:\\nPachet:\\nVersiune:\\nVersiune SO: + Ce:\nSolicitare:\nLimba conținutului:\nȚara conținutului:\nLimba aplicației:\nServiciu:\nOra GMT:\nPachet:\nVersiune:\nVersiune SO: Elimină sunetul audio la anumite rezoluții Fundal Pop-up diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b96667f93c9..a10681060e2 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -87,7 +87,7 @@ Воспроизведение во всплывающем окне Очистить Всё - Что:\\nЗапрос:\\nЯзык контента:\\nСтрана контента:\\nЯзык приложения:\\nСервис:\\nВремя по Гринвичу:\\nПакет:\\nВерсия пакета:\\nВерсия ОС: + Что:\nЗапрос:\nЯзык контента:\nСтрана контента:\nЯзык приложения:\nСервис:\nВремя по Гринвичу:\nПакет:\nВерсия пакета:\nВерсия ОС: Это разрешение нужно для \nвоспроизведения в окне Открыть во всплывающем окне diff --git a/app/src/main/res/values-ryu/strings.xml b/app/src/main/res/values-ryu/strings.xml index 6b70c0c8e61..4be7d532882 100644 --- a/app/src/main/res/values-ryu/strings.xml +++ b/app/src/main/res/values-ryu/strings.xml @@ -78,7 +78,7 @@ ダウンロード ふぐあいほうくーく アプリ(UI)やしがクラッシュさびたん - ちゃーるむんだい:\\nリクエスト:\\nコンテンツぬぎんぐ:\\nコンテンツぬくに:\\nアプリぬぎんぐ:\\nサービス:\\nGMTじかん:\\nパッケージ:\\nバージョン:\\nOSぬバージョン: + ちゃーるむんだい:\nリクエスト:\nコンテンツぬぎんぐ:\nコンテンツぬくに:\nアプリぬぎんぐ:\nサービス:\nGMTじかん:\nパッケージ:\nバージョン:\nOSぬバージョン: reCAPTCHAぬようきゅう reCAPTCHAようきゅうさびたん ブラック diff --git a/app/src/main/res/values-sat/strings.xml b/app/src/main/res/values-sat/strings.xml index 88e9cfca1f6..71a8067b1a9 100644 --- a/app/src/main/res/values-sat/strings.xml +++ b/app/src/main/res/values-sat/strings.xml @@ -209,7 +209,7 @@ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱞᱮᱱᱟ, ᱱᱤᱴᱤᱯᱷᱤᱠᱮᱥᱚᱱ ᱧᱮᱞ ᱢᱮ GitHub ᱨᱮ ᱚᱱᱚᱞ ᱨᱤᱯᱚᱨᱴ - What:\\nRequest:\\nContent Language:\\nContent ᱫᱤᱥᱚᱢ:\\nApp Language:\\nService:\\nGMT ᱚᱠᱛᱚ:\\nPackage:\\nVersion:\\nOS version: + What:\nRequest:\nContent Language:\nContent ᱫᱤᱥᱚᱢ:\nApp Language:\nService:\nGMT ᱚᱠᱛᱚ:\nPackage:\nVersion:\nOS version: ᱟᱢᱟᱜ ᱯᱟᱹᱛᱭᱟᱹᱣ (ᱤᱝᱞᱤᱥ ᱛᱮ): ᱚᱯᱞᱚᱰᱟᱨᱟᱜ ᱟᱵᱟᱛᱟᱨ ᱛᱷᱩᱱᱤᱠᱟ ᱞᱟᱭᱠ diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index dcaf7290e49..f47e8e569da 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -224,7 +224,7 @@ Esportende… B\'at bisòngiu de custu permissu pro \nabèrrere sa modalidade ventanedda - Ite:\\nRechesta:\\nLimba de su cuntenutu\\nIstadu de su cuntenutu:\\nLimba de s\'aplicatzione:\\nServìtziu:\\nOràriu GMT:\\nPachete:\\nVersione:\\nVersione SO: + Ite:\nRechesta:\nLimba de su cuntenutu\nIstadu de su cuntenutu:\nLimba de s\'aplicatzione:\nServìtziu:\nOràriu GMT:\nPachete:\nVersione:\nVersione SO: A dolu mannu b\'at àpidu carchi problema. Cronologia de chirca iscantzellada Custu vìdeu tenet unu lìmite de edade. diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index e05ab384279..ff6cd720af6 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -78,7 +78,7 @@ Stiahnuté Hlásenie o chybe Aplikácia/UP zlyhalo - Čo:\\nPožiadavka:\\nJazyk obsahu:\\nKrajina Obsahu:\\nJazyk Aplikácie:\\nSlužba:\\nČas v GMT:\\nBalík:\\nVerzia:\\nOS: + Čo:\nPožiadavka:\nJazyk obsahu:\nKrajina Obsahu:\nJazyk Aplikácie:\nSlužba:\nČas v GMT:\nBalík:\nVerzia:\nOS: Výzva reCAPTCHA Čierna Všetko diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 8b4ba8f7bc4..ed316e93eaf 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -80,7 +80,7 @@ Program se je sesul Izziv reCAPTCHA Zahtevan izziv reCAPTCHA - Predmet:\\nZahteva:\\nJezik vsebine:\\nDržava vsebine:\\nJezik aplikacije:\\nStoritev:\\nČas v GMT:\\nPaket:\\nRazličica:\\nRazličica OS: + Predmet:\nZahteva:\nJezik vsebine:\nDržava vsebine:\nJezik aplikacije:\nStoritev:\nČas v GMT:\nPaket:\nRazličica:\nRazličica OS: Črna Vse Odpri v pojavnem načinu diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index f40df57f197..1453e3491a1 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -252,7 +252,7 @@ inta ka heshay Sawirka u saaran soosaareha Daar muuqaalka, intuu socdo: - Shayga:\\nCodsiga:\\nLuuqada Shayga:\\nWadanka Shayga:\\nLuuqada Appka:\\nAdeega:\\nWakhtiga oo GMT ah:\\nXidhmada:\\nTirsiga Appka:\\nTirsiga Nooca Barnaamijka: + Shayga:\nCodsiga:\nLuuqada Shayga:\nWadanka Shayga:\nLuuqada Appka:\nAdeega:\nWakhtiga oo GMT ah:\nXidhmada:\nTirsiga Appka:\nTirsiga Nooca Barnaamijka: Faahfaahin: Faalladaada (oo Ingiriis ah): Waxa dhacay: diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 5a33ad77fac..398a6cf45b2 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -307,7 +307,7 @@ Luaje videon, kohëzgjatja: Detajet: Komenti juaj (në Anglisht): - Çfarë:\\nKërkesa:\\nGjuha e përmbajtjes:\\nShteti i pëmbajtjes:\\nGjuha e aplikacionit:\\nShërbimi:\\nKoha në GMT:\\nPaketa:\\nVersioni:\\nVersioni i sistemit operativ: + Çfarë:\nKërkesa:\nGjuha e përmbajtjes:\nShteti i pëmbajtjes:\nGjuha e aplikacionit:\nShërbimi:\nKoha në GMT:\nPaketa:\nVersioni:\nVersioni i sistemit operativ: Çfarë ndodhi: Informacion: Raporto diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 847b60f2f69..2d14361b38a 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -78,7 +78,7 @@ Преузимања Извештај о грешци Програм је отказао - Шта:\\nЗахтев:\\nЈезик садржаја:\\nДржава садржаја:\\nЈезик апликације:\\nУслуга:\\nGMT време:\\nПакет:\\nВерзија:\\nВерзија ОС-а: + Шта:\nЗахтев:\nЈезик садржаја:\nДржава садржаја:\nЈезик апликације:\nУслуга:\nGMT време:\nПакет:\nВерзија:\nВерзија ОС-а: „reCAPTCHA“ задатак Решите „reCAPTCHA“ задатак Црна diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 7806044ce23..d9742c80e36 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -104,7 +104,7 @@ Allvarligt spelarfel inträffade Återhämtar sig från spelarfel Rapportera via e-post - Vad:\\nBegäran:\\nInnehållsspråk:\\nInnehållsland:\\nApp-språk:\\nTjänst:\\nGMT-tid:\\nPaket:\\nVersion:\\nOS-version: + Vad:\nBegäran:\nInnehållsspråk:\nInnehållsland:\nApp-språk:\nTjänst:\nGMT-tid:\nPaket:\nVersion:\nOS-version: Spela video, längd: Uppladdarens avatar-miniatyrbild Inga resultat diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index b7534ccc0ea..068a099d27a 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -256,7 +256,7 @@ இயல்பிருப்புகளை மீட்டெடு NewPipe பிழையைச் எதிர்கொண்டது, புகாரளிக்க தட்டு புகாரளி - என்ன:\\nகோரிக்கை:\\nஉள்ளடக்க மொழி:\\nஉள்ளடக்க நாடு:\\nசெயலி மொழி:\\nசேவை:\\nGMT நேரம்:\\nசிப்பம்:\\nபதிப்பு:\\nOS பதிப்பு: + என்ன:\nகோரிக்கை:\nஉள்ளடக்க மொழி:\nஉள்ளடக்க நாடு:\nசெயலி மொழி:\nசேவை:\nGMT நேரம்:\nசிப்பம்:\nபதிப்பு:\nOS பதிப்பு: காணொளியை இயக்கு, காலவளவு: கருத்தளிப்புகள் இயக்கியைச் சிதை diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index aa641503b96..9c84ee81dc7 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -55,7 +55,7 @@ Bildir Bilgi: Ne oldu: - Ne:\\nİstek:\\nİçerik Dili:\\nİçerik Ülkesi:\\nUygulama Dili:\\nHizmet:\\nGMT Zamanı:\\nPaket:\\nSürüm:\\nİşletim sistemi sürümü: + Ne:\nİstek:\nİçerik Dili:\nİçerik Ülkesi:\nUygulama Dili:\nHizmet:\nGMT Zamanı:\nPaket:\nSürüm:\nİşletim sistemi sürümü: Videoyu oynat, süre: Yükleyenin avatar küçük resmi Beğeni diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 4526ea837b1..df8ee490dfb 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -170,7 +170,7 @@ Показувати підказку під час натискання фонової або спливної кнопки у відео \"Деталі:\" Сталася невиправна помилка програвача Зовнішні програвачі не підтримують такі види посилань - Що:\\nЗапит:\\nМова вмісту:\\nКраїна вмісту:\\nМова застосунку:\\nСлужба:\\nЧас GMT:\\nПакунок:\\nВерсія:\\nВерсія ОС: + Що:\nЗапит:\nМова вмісту:\nКраїна вмісту:\nМова застосунку:\nСлужба:\nЧас GMT:\nПакунок:\nВерсія:\nВерсія ОС: Мініатюрний аватар завантажувача відео Вподобані Не сподобалося diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index bb95e2811ba..6c596b64c02 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -133,7 +133,7 @@ رپورٹ کریں معلومات: کیا ہوا: - کیا ہوا:\\nدرخواست:\\nمواد کی زبان:\\nملک:\\nایپ کی زبان:\\nسروس:\\nجی ایم ٹٰ:\\nوقت:\\nپیکیج:\\nورژن:\\nآپریٹنگ سسٹم ورزن: + کیا ہوا:\nدرخواست:\nمواد کی زبان:\nملک:\nایپ کی زبان:\nسروس:\nجی ایم ٹٰ:\nوقت:\nپیکیج:\nورژن:\nآپریٹنگ سسٹم ورزن: آپ کا تبصرہ (انگریزی میں): تفصیلات: ویڈیو چلائیں، دورانیہ: diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index cde4821fa14..efa12f11d28 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -72,7 +72,7 @@ Báo cáo Thông tin: Chuyện gì đã xảy ra: - Loại lỗi:\\nYêu cầu:\\nNgôn ngữ của nội dung:\\nVùng miền (quốc gia) của nội dung:\\nNgôn ngữ của ứng dụng:\\nDịch vụ:\\nThời gian GMT:\\nTên gói:\\nPhiên bản:\\nPhiên bản hệ điều hành: + Loại lỗi:\nYêu cầu:\nNgôn ngữ của nội dung:\nVùng miền (quốc gia) của nội dung:\nNgôn ngữ của ứng dụng:\nDịch vụ:\nThời gian GMT:\nTên gói:\nPhiên bản:\nPhiên bản hệ điều hành: Nhận xét của bạn (bằng tiếng Anh): Chi tiết: Phát video, thời lượng: diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 88b30af5ea5..adbf2ce6448 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -146,7 +146,7 @@ 反馈 信息: 发生了什么: - 详情:\\n请求:\\n内容语言:\\n内容国家:\\n客户端语言:\\n服务:\\nGMT时间:\\n包名:\\n版本:\\n操作系统版本: + 详情:\n请求:\n内容语言:\n内容国家:\n客户端语言:\n服务:\nGMT时间:\n包名:\n版本:\n操作系统版本: 您的附加说明(请用英文): 详细信息: 播放视频,时长: diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index c483ca96b57..0dd10f1bc36 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -86,7 +86,7 @@ 浮面播緊 全部嘢 App/界面閃退 - 經過:\\n請求:\\n內容語言:\\n內容國家:\\nApp 語言:\\n服務:\\nGMT 時間:\\n封裝:\\n版本:\\nOS 版本: + 經過:\n請求:\n內容語言:\n內容國家:\nApp 語言:\n服務:\nGMT 時間:\n封裝:\n版本:\nOS 版本: reCAPTCHA 考驗 以浮面模式開啟 \n有呢個權限至得 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f5ebc2bf8be..1f4bfb290ae 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -76,7 +76,7 @@ 回報 資訊: 發生了什麼事: - 發生了什麼:\\n請求:\\n內容語言:\\n內容國家:\\n應用程式語言:\\n服務:\\nGMT 時間:\\n套件:\\n版本:\\n系統版本: + 發生了什麼:\n請求:\n內容語言:\n內容國家:\n應用程式語言:\n服務:\nGMT 時間:\n套件:\n版本:\n系統版本: 您的留言 (請用英語): 詳細資訊: 影片 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1a2a5b6f198..9095fe927c3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -271,7 +271,7 @@ Report Info: What happened: - What:\\nRequest:\\nContent Language:\\nContent Country:\\nApp Language:\\nService:\\nTimestamp:\\nPackage:\\nVersion:\\nOS version: + What:\nRequest:\nContent Language:\nContent Country:\nApp Language:\nService:\nTimestamp:\nPackage:\nVersion:\nOS version: Your comment (in English): Details: From 6c69a5409b9313a9b6853cf609ce2216bac6fa96 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 11 Feb 2026 22:49:11 +0100 Subject: [PATCH 46/92] Translated using Weblate (Slovak) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 77.5% (69 of 89 strings) Translated using Weblate (Basque) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 49.4% (44 of 89 strings) Translated using Weblate (Icelandic) Currently translated at 99.2% (758 of 764 strings) Translated using Weblate (Czech) Currently translated at 100.0% (89 of 89 strings) Translated using Weblate (French) Currently translated at 100.0% (89 of 89 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (89 of 89 strings) Translated using Weblate (German) Currently translated at 100.0% (89 of 89 strings) Added translation using Weblate (Gaelic) Translated using Weblate (French) Currently translated at 77.2% (68 of 88 strings) Translated using Weblate (Turkish) Currently translated at 34.0% (30 of 88 strings) Co-authored-by: Erenay Co-authored-by: Fjuro Co-authored-by: Hosted Weblate Co-authored-by: Mickaël Binos Co-authored-by: Milan Co-authored-by: Nico Co-authored-by: S.B. MacQueen Co-authored-by: Sveinn í Felli Co-authored-by: Thadah D. Denyse Co-authored-by: VfBFan Co-authored-by: delvani 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/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sk/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/ Translation: NewPipe/Metadata --- app/src/main/res/values-eu/strings.xml | 4 +- app/src/main/res/values-gd/strings.xml | 3 ++ app/src/main/res/values-is/strings.xml | 10 ++++- app/src/main/res/values-pt-rBR/strings.xml | 2 +- .../metadata/android/cs/changelogs/1008.txt | 4 ++ .../metadata/android/de/changelogs/1007.txt | 12 +++++- .../metadata/android/de/changelogs/1008.txt | 4 ++ .../metadata/android/fr/changelogs/1000.txt | 16 +++---- .../metadata/android/fr/changelogs/1005.txt | 5 --- .../metadata/android/fr/changelogs/1008.txt | 4 ++ .../metadata/android/fr/changelogs/65.txt | 41 +----------------- .../metadata/android/fr/changelogs/66.txt | 42 ------------------- .../metadata/android/fr/changelogs/68.txt | 30 ------------- .../metadata/android/fr/changelogs/69.txt | 9 ---- .../metadata/android/fr/changelogs/70.txt | 20 +-------- .../metadata/android/fr/changelogs/740.txt | 16 +------ .../metadata/android/fr/changelogs/750.txt | 26 ------------ .../metadata/android/fr/changelogs/760.txt | 34 --------------- .../metadata/android/fr/changelogs/800.txt | 21 ---------- .../metadata/android/fr/changelogs/810.txt | 10 ----- .../metadata/android/fr/changelogs/840.txt | 13 ------ .../metadata/android/fr/changelogs/930.txt | 7 ---- .../metadata/android/fr/changelogs/992.txt | 2 - .../metadata/android/fr/changelogs/993.txt | 1 - .../metadata/android/fr/changelogs/994.txt | 3 -- .../metadata/android/fr/changelogs/995.txt | 5 +-- .../metadata/android/fr/changelogs/997.txt | 7 +--- .../metadata/android/fr/changelogs/999.txt | 2 - .../android/pt-BR/changelogs/1000.txt | 20 ++++----- .../metadata/android/sk/changelogs/1008.txt | 4 ++ .../metadata/android/tr/changelogs/995.txt | 16 +++++++ .../android/zh-Hans/changelogs/1007.txt | 12 +++++- .../android/zh-Hans/changelogs/1008.txt | 4 ++ 33 files changed, 93 insertions(+), 316 deletions(-) create mode 100644 app/src/main/res/values-gd/strings.xml create mode 100644 fastlane/metadata/android/cs/changelogs/1008.txt create mode 100644 fastlane/metadata/android/de/changelogs/1008.txt create mode 100644 fastlane/metadata/android/fr/changelogs/1008.txt create mode 100644 fastlane/metadata/android/sk/changelogs/1008.txt create mode 100644 fastlane/metadata/android/tr/changelogs/995.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/1008.txt diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 8b23cf8eab8..a34a050fabf 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -494,8 +494,8 @@ Kanalaren avatarraren miniatura Erakutsi taldekatuta ez dauden harpidetzak soilik Bai, partzialki ikusitako bideoak ere bai - Dagoeneko ikusi eta gero erreprodukzio-zerrendara gehitu diren bideoak kendu egingo dira. \nJarraitu nahi duzu? Ekintza hau ezin da desegin! - Ikusitako bideoak kendu? + Dagoeneko ikusi eta gero erreprodukzio-zerrendara gehitu diren igorpenak kendu egingo dira. \nJarraitu nahi duzu? + Ikusitako igorpenak kendu? Kendu ikusitako bideoak Inoiz ez WiFi-arekin soilik diff --git a/app/src/main/res/values-gd/strings.xml b/app/src/main/res/values-gd/strings.xml new file mode 100644 index 00000000000..55344e51920 --- /dev/null +++ b/app/src/main/res/values-gd/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 34c29ff10d2..029c411efb5 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -212,7 +212,7 @@ Því miður fór eitthvað úrskeiðis. Líkar við Það sem gerðist: - Hvað:\nBeiðni:\nTungumál Efnis:\nLand Efnis:\nTungumál forrits:\nÞjónusta:\nGMT Tími:\nPakki:\nÚtgáfa:\nÚtgáfu Stýrikerfis: + Hvað:\nBeiðni:\nTungumál efnis:\nLandsvæði efnis:\nTungumál forrits:\nÞjónusta:\nTímastimpill:\nPakki:\nÚtgáfa:\nÚtgáfa stýrikerfis: Athugasemd þín (á ensku): Engar niðurstöður Myndskeið @@ -369,7 +369,7 @@ Fjarleitar leitartillögur Halda áfram Óstudd vefslóð - Sjálfgefið efnisland + Sjálfgefið landsvæði efnis PeerTube þjónar Bæta við Sláðu inn slóð tilviks @@ -817,4 +817,10 @@ Eyða færslu Aðgangi lokað\n\n%1$s gefur þessa ástæðu: %2$s Færslu eytt + Samsettur vinsældalisti YouTube fjarlægður + YouTube hætti með samsetta vinsældalistann sinn frá og með 21. júlí 2025. NewPipe skipti út sjálfgefna vinsældalistanum fyrir vinsæl streymi í beinni útsendingu.\n\nÞú getur líka valið annað vinsælt efni með því að fara í \"Stillingar > Efni > Efni aðalsíðu\". + Tók við HTTP-villu 403 frá þjóni á meðan afspilun stóð, líklega vegna útrunninar URL-slóðar streymis eða banns á IP-vistfang + Tók við HTTP-villu %1$s frá þjóni á meðan afspilun stóð + Tók við HTTP-villu 403 frá þjóni á meðan afspilun stóð, líklega vegna banns á IP-vistfang eða vandamála með afkóðun URL-slóðar streymis + Þetta efni er ekki í boði fyrir valið landsvæði efnis.\n\nBreyttu valinu með því að fara í \"Stillingar > Efni > Sjálfgefið landsvæði efnis\". diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 44cfb9e2a60..490c5f6179a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -518,7 +518,7 @@ \n \nAtive \"%1$s\" nas configurações se quiser vê-lo. Sim, e vídeos parcialmente assistidos - Os vídeos que foram assistidos antes e depois de terem sidos adicionados à playlist serão removidos. \nTem certeza? Esta ação não pode ser desfeita! + Os vídeos que foram assistidos antes e depois de terem sidos adicionados à playlist serão removidos. \nTem certeza? Remover vídeos assistidos? Remover assistidos Textos originais dos serviços serão visíveis nos itens de transmissão diff --git a/fastlane/metadata/android/cs/changelogs/1008.txt b/fastlane/metadata/android/cs/changelogs/1008.txt new file mode 100644 index 00000000000..8be67b02a07 --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/1008.txt @@ -0,0 +1,4 @@ +∙ Opraveno obnovení streamů na poslední pozici přehrávání +∙ [YouTube] Přidána podpora pro více formátů URL kanálů +∙ [YouTube] Přidána podpora pro více formátů metainformací videí +∙ Aktualizovány překlady diff --git a/fastlane/metadata/android/de/changelogs/1007.txt b/fastlane/metadata/android/de/changelogs/1007.txt index 43623578f6a..edeb158e799 100644 --- a/fastlane/metadata/android/de/changelogs/1007.txt +++ b/fastlane/metadata/android/de/changelogs/1007.txt @@ -1 +1,11 @@ -Behoben, dass YouTube keinen Stream abspielte +Dieser Hotfix behebt „Inhalt nicht verfügbar“: YouTube-Videos können nun wieder abgespielt werden! + +Einige in 0.28.1 aufgetretene Fehler behoben: +• Wiedergabelisten-Elemente können nur auf benachbarte Pos. gezogen werden +• Titel/Kommentare flackern zwischen aktuellem und vorherigem Video +• „Hauptplayer im Vollbildmodus starten“ + +Weitere Verbesserungen: +• [YouTube] Livestreams bis zu 4 Stunden zurückspulen +• Livestreams bei Wiedergabe im Hintergrund nicht laden +• Neue UI für „Gesehene entfernen“ diff --git a/fastlane/metadata/android/de/changelogs/1008.txt b/fastlane/metadata/android/de/changelogs/1008.txt new file mode 100644 index 00000000000..3adb1ef9687 --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/1008.txt @@ -0,0 +1,4 @@ +∙ Fortsetzen von Streams an der letzten Wiedergabeposition korrigiert +∙ [YouTube] Unterstützung für weitere Kanal-URL-Formate +∙ [YouTube] Unterstützung für weitere Video-Metainfo-Formate +∙ Übersetzungen aktualisiert diff --git a/fastlane/metadata/android/fr/changelogs/1000.txt b/fastlane/metadata/android/fr/changelogs/1000.txt index 994b6061d41..db858eafded 100644 --- a/fastlane/metadata/android/fr/changelogs/1000.txt +++ b/fastlane/metadata/android/fr/changelogs/1000.txt @@ -1,13 +1,9 @@ Améliorations -• La description de la playlist est désormais cliquable pour afficher plus ou moins de contenu. -• [PeerTube] Gestion automatique des liens d'instance `subscribeto.me` -• Lecture d'un seul élément à la fois depuis l'historique +• Rendre la description de la liste de lecture cliquable pour afficher plus / moins de contenu. +• Ne lancer la lecture que d'un seul élément dans l'écran de l'historique. Corrections -• Amélioration de la visibilité du bouton RSS -• Correction des plantages liés à l'aperçu de la barre de progression -• Correction de l'ajout d'un élément sans vignette à la playlist -• Correction de la fermeture prématurée de la boîte de dialogue de téléchargement -• Correction de la fenêtre contextuelle d'ajout à la file d'attente de la liste des éléments associés -• Amélioration de l'ordre d'affichage dans la boîte de dialogue « Ajouter à la playlist » -• Ajustement de la mise en page des signets de playlist +• Correction des plantages de l'aperçu de la barre de recherche. +• Correction de l'ajout à la playlist d'un élément sans vignette. +• Correction de la fenêtre contextuelle de mise en file d'attente des éléments associés. +• Ajustement de la disposition des éléments des signets de la liste de lecture. diff --git a/fastlane/metadata/android/fr/changelogs/1005.txt b/fastlane/metadata/android/fr/changelogs/1005.txt index 269ba210580..8f4a61f1eca 100644 --- a/fastlane/metadata/android/fr/changelogs/1005.txt +++ b/fastlane/metadata/android/fr/changelogs/1005.txt @@ -1,17 +1,12 @@ Nouveautés • Ajout de la compatibilité avec Android Auto • Possibilité de définir des groupes de flux comme onglets de l'écran principal -• [YouTube] Partager comme playlist temporaire -• [SoundCloud] Onglet « J'aime » sur les chaînes Améliorations • Amélioration des suggestions de la barre de recherche • Affichage de la date de téléchargement dans Téléchargements -• Utilisation de la langue par application d'Android 13 Corrections • Correction des couleurs de texte défectueuses en mode sombre • [YouTube] Correction du chargement des playlists de plus de 100 éléments • [YouTube] Correction de l'affichage des vidéos recommandées manquantes -• Correction des plantages dans l'historique -• Correction des horodatages dans les réponses aux commentaires diff --git a/fastlane/metadata/android/fr/changelogs/1008.txt b/fastlane/metadata/android/fr/changelogs/1008.txt new file mode 100644 index 00000000000..2580e888c65 --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/1008.txt @@ -0,0 +1,4 @@ +∙ Correction de la reprise des flux à la dernière position de lecture. +∙ [YouTube] Ajout de la prise en charge d'autres formats d'URL de chaîne. +∙ [YouTube] Ajout de la prise en charge d'autres formats de métadonnées vidéo. +∙ Mise à jour des traductions diff --git a/fastlane/metadata/android/fr/changelogs/65.txt b/fastlane/metadata/android/fr/changelogs/65.txt index 9d06cac1711..b7a9d47e53a 100644 --- a/fastlane/metadata/android/fr/changelogs/65.txt +++ b/fastlane/metadata/android/fr/changelogs/65.txt @@ -1,41 +1,2 @@ ### Améliorations - -- Désactivation de l'animation de l'icône du menu hamburger #1486 - -- Annulation de la suppression des téléchargements #1472 - -- Option de téléchargement dans le menu de partage #1498 - -- Ajout de l'option de partage au menu contextuel (appui long) #1454 - -- Réduction du lecteur principal à la fermeture #1354 - -- Mise à jour de la version de la bibliothèque et correction de la sauvegarde de la base de données #1510 - -- Mise à jour ExoPlayer 2.8.2 #1392 - -- Refonte de la boîte de dialogue de contrôle de la vitesse de lecture pour permettre des incréments différents et ainsi accélérer les changements de vitesse. - -- Ajout d'une option pour avancer rapidement pendant les silences dans le contrôle de la vitesse de lecture. Cette fonction devrait être utile pour les livres audio et certains genres musicaux, et peut offrir une expérience d'écoute parfaitement fluide (mais peut aussi perturber la lecture d'un morceau comportant de nombreux silences =\\). - -- Refonte de la résolution de la source multimédia pour permettre la transmission des métadonnées directement dans le lecteur, au lieu d'une saisie manuelle. Nous disposons désormais d'une source unique de métadonnées, directement disponible au démarrage de la lecture. - Correction du problème de mise à jour des métadonnées des listes de lecture distantes lors de la disponibilité de nouvelles métadonnées à l'ouverture d'un fragment de liste de lecture. - -- Diverses corrections d'interface utilisateur : #1383, les commandes de notification du lecteur en arrière-plan sont désormais toujours blanches, fermeture plus facile du lecteur contextuel par un mouvement brusque. - -- Utilisation d'un nouvel extracteur avec une architecture remaniée pour le multiservice. - -### Corrections - -- Correction du problème #1440 : affichage incorrect des informations vidéo. #1491 - -- Correction de l'historique de visionnage. #1497 - -- #1495 : mise à jour des métadonnées (miniature, titre et nombre de vidéos) dès que l'utilisateur accède à la liste de lecture. - -- #1475 : enregistrement d'une vue dans la base de données lorsque l'utilisateur lance une vidéo sur un lecteur externe dans le fragment de détails. - -- Correction du délai d'expiration de l'écran en mode contextuel. #1463 (Correction du problème #640) - -- Correction du lecteur vidéo principal. #1509 - -- [#1412] Correction du mode répétition provoquant une exception NullPointerException (NPE) du lecteur lors de la réception d'une nouvelle intention alors que l'activité du lecteur est en arrière-plan. - Correction d'un problème où la réduction du lecteur dans une fenêtre contextuelle ne détruisait pas le lecteur lorsque l'autorisation d'afficher la fenêtre contextuelle n'était pas accordée. +- Ajout d'une option pour avancer rapidement pendant les silences dans le contrôle de la vitesse de lecture. Cette fonction devrait être utile pour les livres audio et certains genres musicaux, et peut offrir une expérience d'écoute parfaitement fluide (mais peut aussi perturber la lecture d'un morceau comportant de nombreux silences =\\) diff --git a/fastlane/metadata/android/fr/changelogs/66.txt b/fastlane/metadata/android/fr/changelogs/66.txt index b6092f44f7a..c62f13dced1 100644 --- a/fastlane/metadata/android/fr/changelogs/66.txt +++ b/fastlane/metadata/android/fr/changelogs/66.txt @@ -1,50 +1,8 @@ # Journal des modifications de la v0.13.7 -### Corrigé -- Correction des problèmes de filtre de tri de la v0.13.6 - -# Journal des modifications de la v0.13.6 - ### Améliorations - -- Désactivation de l'animation de l'icône du menu hamburger #1486 - -- Annulation de la suppression des téléchargements #1472 - -- Option de téléchargement dans le menu de partage #1498 - -- Ajout de l'option de partage au menu contextuel (appui long) #1454 - -- Réduction du lecteur principal à la fermeture #1354 - - Mise à jour de la version de la bibliothèque et correction de la sauvegarde de la base de données #1510 - -- Mise à jour ExoPlayer 2.8.2 #1392 - - Refonte de la boîte de dialogue de contrôle de la vitesse de lecture pour permettre des incréments différents et ainsi accélérer les changements de vitesse. -- Ajout d'une option pour avancer rapidement pendant les silences dans le contrôle de la vitesse de lecture. Ceci devrait être utile pour les livres audio et certains genres musicaux, et peut offrir une expérience d'écoute parfaitement fluide (mais peut aussi perturber une chanson avec de nombreux silences =\\). - Résolution de la source multimédia remaniée pour permettre la transmission interne des métadonnées au lecteur, au lieu d'une saisie manuelle. Les métadonnées proviennent désormais d'une source unique et sont directement disponibles au démarrage de la lecture. - -- Correction du problème de mise à jour des métadonnées des listes de lecture distantes lors de l'ouverture d'un fragment de liste de lecture, même lorsque de nouvelles métadonnées sont disponibles. - -- Diverses corrections d'interface : #1383, les commandes de notification du lecteur en arrière-plan sont désormais toujours blanches ; il est plus facile de fermer le lecteur contextuel en le faisant glisser. - -- Utilisation d'un nouvel extracteur avec une architecture remaniée pour le multiservice. - ### Corrections - -- Correction du problème #1440 : affichage incorrect des informations vidéo ; #1491 - -- Correction de l'historique de visionnage ; #1497 - - #1495 : mise à jour des métadonnées (miniature, titre et nombre de vidéos) dès que l'utilisateur accède à la liste de lecture. - -- #1475 : enregistrement d'une vue dans la base de données lorsque l'utilisateur lance une vidéo sur un lecteur externe dans le fragment de détails. - -- Correction du délai d'expiration de l'écran en mode fenêtre contextuelle. #1463 (Correction de #640) - -- Correction du lecteur vidéo principal #1509 - -- [#1412] Correction du mode de répétition provoquant une exception de pointeur nul (NPE) du lecteur lors de la réception d'une nouvelle intention alors que l'activité du lecteur est en arrière-plan. - -- Correction du problème suivant : la réduction du lecteur dans une fenêtre contextuelle ne le détruisait pas lorsque l'autorisation d'ouvrir une fenêtre contextuelle n'était pas accordée. diff --git a/fastlane/metadata/android/fr/changelogs/68.txt b/fastlane/metadata/android/fr/changelogs/68.txt index 3c9c4446f48..30f2e1e1021 100644 --- a/fastlane/metadata/android/fr/changelogs/68.txt +++ b/fastlane/metadata/android/fr/changelogs/68.txt @@ -1,11 +1,5 @@ # Modifications de la v0.14.1 -### Corrigé -- Correction du problème de décryptage de l'URL vidéo (#1659) -- Correction du problème d'extraction du lien de description (#1657) - -# Modifications de la v0.14.0 - ### Nouveau - Nouveau design du tiroir (#1461) - Nouvelle page d'accueil personnalisable (#1461) @@ -15,30 +9,6 @@ - Nouvelle méthode pour fermer le lecteur pop-up (#1597) ### Corrigé -- Correction d'une erreur lorsque le nombre d'abonnements n'est pas disponible. Résout le problème n° 1649. - - Afficher « Nombre d'abonnés indisponible » dans ces cas - -- Correction d'une exception NPE lorsqu'une playlist YouTube est vide - -- Correction rapide pour les bornes interactives sur SoundCloud - -- Refactorisation et correction du bug n° 1623 - -- Correction du résultat de recherche cyclique n° 1562 - -- Correction de la barre de progression (position statique) - - Correction du blocage incorrect des vidéos YouTube Premium - -- Correction du chargement intempestif des vidéos (dû à l'analyse DASH) - -- Correction des liens dans la description des vidéos - - Afficher un avertissement lors d'une tentative de téléchargement sur carte SD externe - -- Correction d'une exception déclenchant un rapport en cas d'absence d'affichage - -- Correction de l'affichage des miniatures dans le lecteur en arrière-plan sous Android 8.1 [voir ici](https://github.com/TeamNewPipe/NewPipe/issues/943) - -- Correction de l'enregistrement du récepteur de diffusion. Résout le problème n° 1641. diff --git a/fastlane/metadata/android/fr/changelogs/69.txt b/fastlane/metadata/android/fr/changelogs/69.txt index c96b390d9f9..d27dfb97abb 100644 --- a/fastlane/metadata/android/fr/changelogs/69.txt +++ b/fastlane/metadata/android/fr/changelogs/69.txt @@ -3,17 +3,8 @@ - Interface utilisateur pour tablettes et disposition de la liste en grille #1617 ### Améliorations -- Stockage/recharge du dernier rapport d'aspect utilisé #1748 - Activation de la disposition linéaire dans l'activité Téléchargements avec les noms complets des vidéos #1771 -- Suppression et partage des abonnements directement à partir de l'onglet abonnements #1516 - La mise en file d'attente déclenche désormais la lecture de la vidéo si la file d'attente de lecture est déjà terminée #1783 -- Paramètres distincts pour les gestes de volume et de luminosité #1644 -- Ajout de la prise en charge de la localisation #1792 - -### Corrections -- Analyse de l'heure pour le format . , afin que NewPipe puisse être utilisé en Finlande. -- Compte d'abonnement -- Ajout permission de service de premier plan pour les appareils API 28+ #1830 ### Bugs connus - État de lecture ne peut être enregistré sur Android P diff --git a/fastlane/metadata/android/fr/changelogs/70.txt b/fastlane/metadata/android/fr/changelogs/70.txt index 185f98f6957..e3b909b4cc3 100644 --- a/fastlane/metadata/android/fr/changelogs/70.txt +++ b/fastlane/metadata/android/fr/changelogs/70.txt @@ -1,25 +1,7 @@ -ATTENTION : Cette version est probablement un festival de bugs, tout comme la dernière. Cependant, en raison de la fermeture complète depuis la 17. une version cassée est mieux que pas de version. N'est-ce pas ? ¯\_(ツ)_/¯ - ### Améliorations * Les fichiers téléchargés peuvent maintenant être ouverts en un seul clic. -* Suppression du support pour Android 4.1 - 4.3 #1884 -* Suppression de l'ancien lecteur #1884 -* Suppression des flux de la file d'attente de lecture actuelle en les faisant glisser vers la droite #1915 -* Suppression du flux en file d'attente automatique lorsqu'un nouveau flux est mis en file d'attente manuellement #1878 * Post-traitement pour les téléchargements et implémentation des fonctionnalités manquantes #1759 par @kapodamy - * Infrastructure de post-traitement - * Infrastructure de gestion des erreurs (pour le téléchargeur) - * File d'attente au lieu de téléchargements multiples - * Déplacer les téléchargements sérialisés en attente (fichiers `.giga`) vers les données de l'application. - * Implémentation de la répétition maximale des téléchargements - * Mise en pause des téléchargements multi-threads - * Arrêter les téléchargements lors du passage au réseau mobile (ne fonctionne jamais, voir 2ème point) - * Sauvegarder le nombre de threads pour les prochains téléchargements - * Beaucoup d'incohérences corrigées +* Déplacer les téléchargements sérialisés en attente (fichiers `.giga`) vers les données de l'application. ### Corrigé * Correction d'un crash avec la résolution par défaut réglée sur la meilleure et la résolution limitée des données mobiles #1835 -* Correction du crash du lecteur de pop-up #1874 -* NPE lors de l'ouverture du lecteur de fond #1901 -* Correction de l'insertion de nouveaux flux lorsque la mise en file d'attente automatique est activée #1878 -* Correction du problème de décryptage de Shuttown diff --git a/fastlane/metadata/android/fr/changelogs/740.txt b/fastlane/metadata/android/fr/changelogs/740.txt index 167608b66fc..83f5cb7dbf6 100644 --- a/fastlane/metadata/android/fr/changelogs/740.txt +++ b/fastlane/metadata/android/fr/changelogs/740.txt @@ -1,23 +1,9 @@

Améliorations

-
  • Rendre les liens dans les commentaires cliquables, augmenter la taille du texte
  • Rechercher en cliquant sur les liens d'horodatage dans les commentaires
  • -
  • Afficher l'onglet préféré en fonction de l'état récemment sélectionné
  • -
  • Ajouter la playlist à la file d'attente lors d'un clic long sur 'Arrière-plan' dans la fenêtre de la playlist
  • -
  • Rechercher le texte partagé lorsqu'il ne s'agit pas d'une URL
  • -
  • Ajouter "partager à l'heure actuelle" bouton au lecteur vidéo principal lecteur vidéo principal
  • -
  • Ajouter un bouton de fermeture du lecteur principal lorsque la file d'attente vidéo est terminée
  • -
  • Ajouter "jouer directement en arrière-plan" au menu longpress pour les éléments de la liste vidéo
  • -
  • Améliorer les traductions en anglais des commandes Play/Enqueue
  • -
  • Petites améliorations des performances
  • -
  • Supprimer les fichiers inutilisés
  • -
  • Mise à jour ExoPlayer à 2.9.6
  • -
  • Ajouter le support pour les liens Invidious
  • +

Corrections

-
    -
  • Défilement avec les commentaires et les flux associés désactivés
  • -
  • CheckForNewAppVersionTask qui est exécuté alors qu'il ne devrait pas l'être'
  • Importation des abonnements YouTube : ignorer ceux dont l’URL est invalide et conserver ceux dont le titre est vide
  • URL YouTube invalide : le nom de la balise signature n'est pas toujours "signature", ce qui empêche le chargement des flux.
diff --git a/fastlane/metadata/android/fr/changelogs/750.txt b/fastlane/metadata/android/fr/changelogs/750.txt index 7273ae1f01a..57da00cbc21 100644 --- a/fastlane/metadata/android/fr/changelogs/750.txt +++ b/fastlane/metadata/android/fr/changelogs/750.txt @@ -1,36 +1,10 @@ Nouveautés - -Reprise de la lecture #2288 - -• Reprise des flux là où vous les avez interrompus -Améliorations du téléchargeur #2149 - • Utilisation de Storage Access Framework pour stocker les téléchargements sur des cartes SD externes - -• Nouveau multiplexeur mp4 - • Possibilité de modifier le répertoire de téléchargement avant de lancer un téléchargement -• Respect des réseaux limités - Améliorations - • Suppression des chaînes gema #2295 - • Gestion des changements de rotation (automatique) pendant le cycle de vie de l'activité #2444 -• Harmonisation des menus accessibles par appui long #2368 - Corrections - -• Correction de l'affichage du nom de la piste de sous-titres sélectionnée #2394 - -• Correction du plantage en cas d'échec de la vérification des mises à jour de l'application (version GitHub) #2423 - • Correction du blocage des téléchargements à 99,9 % #2440 - -• Mise à jour des métadonnées de la file d'attente de lecture #2453 - -• [SoundCloud] Correction du plantage lors du chargement des playlists TeamNewPipe/NewPipeExtractor#170 - -• [YouTube] Correction de l'impossibilité d'afficher la durée paresd TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/fr/changelogs/760.txt b/fastlane/metadata/android/fr/changelogs/760.txt index e0a225fce64..4e62425d24e 100644 --- a/fastlane/metadata/android/fr/changelogs/760.txt +++ b/fastlane/metadata/android/fr/changelogs/760.txt @@ -1,43 +1,9 @@ Changements dans la version 0.17.1 -Nouveauté -• Localisation en thaïlandais - - Améliorations • Ajout de l'action "Commencer à jouer ici" dans les menus qui s'appuient longuement pour les playlists #2518 • Ajout d'un commutateur pour le sélecteur de fichiers SAF / hérité #2521 Corrections -• Correction des boutons qui disparaissent dans la vue des téléchargements lors du changement d'applications #2487 -• Correction de la position de lecture qui est enregistrée même si l'historique de visionnage est désactivé -• Correction des performances réduites causées par la position de lecture dans les vues de liste #2517 • [Extractor] Correction de ReCaptchaActivity #2527, TeamNewPipe/NewPipeExtractor#186 • [Extractor] [YouTube] Correction de l'erreur de recherche occasionnelle lorsque les playlists sont dans les résultats TeamNewPipe/NewPipeExtractor#185 - - - -Changements dans la version 0.17.0 - -Nouveautés -Reprise de lecture #2288 -• Reprise des flux là où vous vous étiez arrêté la dernière fois -Améliorations du téléchargeur #2149 -• Utilisation du Storage Access Framework pour stocker les téléchargements sur des cartes SD externes -• Nouveau multiplexeur mp4 -• Possibilité de changer le répertoire de téléchargement avant de commencer un téléchargement -• Respect des réseaux tarifés - - -Améliorations -• Suppression des chaînes gema #2295 -• Gestion des changements de (auto)rotation pendant le cycle de vie de l'activité #2444 -• Uniformisation des menus qui s'appuient longuement #2368 - -Corrections -• Correction du nom de la piste de sous-titres sélectionnée qui ne s'affiche pas #2394 -• Ne plante pas lorsque la vérification de la mise à jour de l'application échoue (version GitHub) #2423 -• Correction des téléchargements bloqués à 99,9 % #2440 -• Mise à jour des métadonnées de la file de lecture #2453 -• [SoundCloud] Correction du plantage lors du chargement des playlists TeamNewPipe/NewPipeExtractor#170 -• [YouTube] Correction de la durée qui ne peut pas être analysée TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/fr/changelogs/800.txt b/fastlane/metadata/android/fr/changelogs/800.txt index 46fe1504e73..5f41e602609 100644 --- a/fastlane/metadata/android/fr/changelogs/800.txt +++ b/fastlane/metadata/android/fr/changelogs/800.txt @@ -1,27 +1,6 @@ -Nouveau -- Support de PeerTube sans P2P (#2201) [Beta] : - ◦ Regarder et télécharger des vidéos depuis des instances PeerTube - ◦ Ajouter des instances dans les paramètres pour accéder à l'ensemble du monde PeerTube - ◦ Il peut y avoir des problèmes avec les handshakes SSL sur Android 4.4 et 7.1 lors de l'accès à certaines instances, ce qui entraîne une erreur de réseau. - -- Téléchargeur (#2679) : - ◦ Calculer l'heure d'arrivée du téléchargement - ◦ Télécharger les opus (fichiers webm) en ogg - ◦ Récupération des liens de téléchargement expirés pour reprendre les téléchargements après une longue pause - Amélioré - Le KioskFragment est informé des changements dans le pays de contenu préféré et améliore les performances de tous les onglets principaux #2742 -- Utilisation des nouvelles implémentations Localization et Downloader de l'extracteur #2713 -- Rendre la chaîne « Default kiosk » traduisible -- Barre de navigation noire pour le thème noir #2569 Correction - Correction d'un bogue qui ne permettait pas de déplacer le lecteur popup si un autre doigt était placé pendant le déplacement du lecteur popup #2772 - Autorise les playlists sans uploader et corrige les crashs liés à ce problème #2724, TeamNewPipe/NewPipeExtractor#219 -- Activation de TLS1.1/1.2 sur les appareils Android 4.4 (API 19/KitKat) pour corriger le handshake TLS avec MediaCCC et certaines instances PeerTube #2792 -- SoundCloud] Correction de l'extraction de l'identifiant client TeamNewPipe/NewPipeExtractor#217 -- [SoundCloud] Correction de l'extraction du flux audio - -Développement -- Mise à jour d'ExoPlayer vers la version 2.10.8 #2791, #2816 -- Mise à jour de Gradle vers 3.5.1 et ajout du support Kotlin #2714 diff --git a/fastlane/metadata/android/fr/changelogs/810.txt b/fastlane/metadata/android/fr/changelogs/810.txt index 573ea9889c6..8b8b9d518ed 100644 --- a/fastlane/metadata/android/fr/changelogs/810.txt +++ b/fastlane/metadata/android/fr/changelogs/810.txt @@ -4,16 +4,6 @@ Nouveautée : Améliorations : • Ajout de la playlist locale à la file d'attente lors d'une pression longue sur le bouton arrière-plan / flottant • Possibilité de faire défiler les onglets de la page principale et les masquent lorsqu'il n'y a qu'un seul onglet -• Limite le nombre de mises à jour de la miniature des notifications avec le lecteur en arrière-plan -• Ajout d'une miniature fictive pour les playlists locales vides -• Utilisation de l'extension de fichier *.opus au lieu de *.webm et affiche « opus » pour le nom du format au lieu de « WebM Opus » dans la liste déroulante de téléchargement. -• Ajout d'un bouton pour supprimer les fichiers téléchargés ou l'historique de téléchargements dans les « Téléchargements » -• [YouTube] Ajout de la prise en charge des liens de chaînes /c/shortened_url Corrections : • Correction de plusieurs problèmes lors du partage d'une vidéo sur NewPipe et du téléchargement direct de ses flux -• Correction de l'accès du lecteur hors de son fil de création -• Correction de la pagination des résultats de recherche -• [YouTube] Correction de null résultant en une erreur NPE -• [YouTube] Correction de l'affichage des commentaires lors de l'ouverture d'une url invidio.us -• [SoundCloud] client_id mis à jour diff --git a/fastlane/metadata/android/fr/changelogs/840.txt b/fastlane/metadata/android/fr/changelogs/840.txt index 240b77824b4..a09ce98c10f 100644 --- a/fastlane/metadata/android/fr/changelogs/840.txt +++ b/fastlane/metadata/android/fr/changelogs/840.txt @@ -1,22 +1,9 @@ Nouveau • Ajout d'un sélecteur de langue pour changer la langue de l'application -• Ajout du bouton Envoyer vers Kodi au menu déroulant du lecteur • Ajout de la possibilité de copier les commentaires en appuyant longuement Amélioré -• Corriger l'activité ReCaptcha et enregistrer correctement les cookies obtenus • Suppression du menu à points au profit du tiroir et du bouton Masquer l'historique lorsque l'historique de visionnage n'est pas activé dans les paramètres -• Demander correctement l'autorisation d'affichage sur d'autres applications dans les paramètres sur Android 6 et versions ultérieures -• Renommer la playlist locale en cliquant longuement dans BookmarkFragment -• Diverses améliorations de PeerTube -• Amélioration de plusieurs chaînes sources en anglais Corrigé • Correction du redémarrage du lecteur bien qu'il soit en pause lorsque l'option « Réduire au changement d'application » est activée et que NewPipe est réduit -• Correction de la valeur de luminosité initiale pour le geste -• Correction des téléchargements de sous-titres .srt ne contenant pas tous les sauts de ligne -• Correction du téléchargement sur la carte SD qui échoue car certains appareils Android 5 ne sont pas conformes CTF -• Correction du téléchargement sur Android KitKat -• Correction du fichier vidéo .mp4 corrompu reconnu comme fichier audio -• Correction de plusieurs problèmes de localisation, y compris des codes de langue chinois erronés -• [YouTube] Les horodatages dans la description sont à nouveau cliquables diff --git a/fastlane/metadata/android/fr/changelogs/930.txt b/fastlane/metadata/android/fr/changelogs/930.txt index 4bf050a24d4..d6151d5ea4d 100644 --- a/fastlane/metadata/android/fr/changelogs/930.txt +++ b/fastlane/metadata/android/fr/changelogs/930.txt @@ -5,15 +5,8 @@ Nouveau Amélioré • Ajout de la possibilité de supprimer toutes les vidéos regardées d'une playlist locale • Afficher un message lorsque le contenu n'est pas encore pris en charge au lieu de planter -• Redimensionnement amélioré du lecteur contextuel avec des gestes de pincement -• Mettre les flux en file d'attente en appuyant longuement sur les boutons d'arrière-plan et contextuels dans la chaîne -• Gestion améliorée de la taille du titre de l'en-tête du tiroir Corrigé • Correction du paramètre de contenu restreint par âge qui ne fonctionne pas • Correction de certains types de reCAPTCHA • Correction du crash lors de l'ouverture des signets alors que la playlist est « nulle » -• Correction de la détection des exceptions liées au réseau -• Correction de la visibilité du bouton de tri de groupe dans le fragment d'abonnements - -et plus diff --git a/fastlane/metadata/android/fr/changelogs/992.txt b/fastlane/metadata/android/fr/changelogs/992.txt index dc1fad35b07..4aa8a0e67b0 100644 --- a/fastlane/metadata/android/fr/changelogs/992.txt +++ b/fastlane/metadata/android/fr/changelogs/992.txt @@ -8,10 +8,8 @@ Nouveau Amélioré • Bouton de fermeture du mini-lecteur plus grand • Réduction d'échelle des vignettes plus fluide -• Cible Android 13 (API 33) • La recherche ne met plus le lecteur en pause Corrigé • Correction de la superposition sur DeX/souris • Autoriser le lecteur d'arrière-plan sans flux audio séparés -• Divers correctifs YouTube et plus encore… diff --git a/fastlane/metadata/android/fr/changelogs/993.txt b/fastlane/metadata/android/fr/changelogs/993.txt index 9865a19acc7..875b09c9422 100644 --- a/fastlane/metadata/android/fr/changelogs/993.txt +++ b/fastlane/metadata/android/fr/changelogs/993.txt @@ -9,4 +9,3 @@ Amélioré Corrigé • Correction de l'ouverture des URL du navigateur, des téléchargements et des lecteurs externes sur Android 11+ -• Correction de l'interaction avec le plein écran nécessitant deux appuis sur MIUI diff --git a/fastlane/metadata/android/fr/changelogs/994.txt b/fastlane/metadata/android/fr/changelogs/994.txt index 35a77aa91d3..20d64ac94d0 100644 --- a/fastlane/metadata/android/fr/changelogs/994.txt +++ b/fastlane/metadata/android/fr/changelogs/994.txt @@ -8,8 +8,5 @@ Amélioré Corrigé • [YouTube] Erreurs HTTP 403 pour les flux -• Lecteur noir lors du passage au lecteur principal depuis la vue playlist • Fuite de mémoire du service de lecture • [PeerTube] Les avatars du téléchargeur et du sous-canal ont été échangés - -et plus diff --git a/fastlane/metadata/android/fr/changelogs/995.txt b/fastlane/metadata/android/fr/changelogs/995.txt index b91f83875ad..da96067efed 100644 --- a/fastlane/metadata/android/fr/changelogs/995.txt +++ b/fastlane/metadata/android/fr/changelogs/995.txt @@ -4,13 +4,10 @@ Nouveau • Obtenir les URL de toutes les images Amélioré -• Accessibilité des interfaces du lecteur • Meilleure sélection audio pour les téléchargements de vidéos uniquement • Option permettant d'inclure les noms de playlist et de vidéo dans le contenu de playlist partagé Corrigé -• [YouTube] Correction de l'obtention du nombre de likes +• [YouTube] Correction de l'obtention du nombre de like • Correction des fenêtres contextuelles et des plantages du lecteur • Sélection de mauvaises langues dans le sélecteur de langue -• Le focus audio du lecteur ne respectait pas la fonction muet -• L'ajout d'éléments de playlist ne fonctionnait parfois pas diff --git a/fastlane/metadata/android/fr/changelogs/997.txt b/fastlane/metadata/android/fr/changelogs/997.txt index b1a550577b7..4d9a7c29a49 100644 --- a/fastlane/metadata/android/fr/changelogs/997.txt +++ b/fastlane/metadata/android/fr/changelogs/997.txt @@ -2,16 +2,11 @@ Nouveau • Ajouter des réponses aux commentaires • Autoriser la réorganisation des playlists • Afficher la description et la durée de la playlist -• Autoriser la réinitialisation des paramètres Amélioré -• [Android 13+] Restaurer les actions de notification personnalisées • Demander le consentement pour la vérification des mises à jour -• Autoriser la lecture/pause des notifications pendant la mise en mémoire tampon -• Réorganiser certains paramètres +• Autoriser la lecture/pause de notifications pendant la mise en mémoire tampon Corrigé • [YouTube] Correction des commentaires qui ne se chargent pas, ainsi que d'autres correctifs et améliorations • Résoudre la vulnérabilité dans l'importation des paramètres et passer à JSON -• Divers correctifs de téléchargement -• Couper le texte de recherche diff --git a/fastlane/metadata/android/fr/changelogs/999.txt b/fastlane/metadata/android/fr/changelogs/999.txt index a2271fde60d..f7e1fd2f08c 100644 --- a/fastlane/metadata/android/fr/changelogs/999.txt +++ b/fastlane/metadata/android/fr/changelogs/999.txt @@ -1,5 +1,3 @@ -Ce correctif corrige les erreurs HTTP 403 au milieu des vidéos YouTube. - Nouveau • [SoundCloud] Ajout de la prise en charge des URL on.soundcloud.com diff --git a/fastlane/metadata/android/pt-BR/changelogs/1000.txt b/fastlane/metadata/android/pt-BR/changelogs/1000.txt index 7f89cd9b2c5..c158f5222a3 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/1000.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/1000.txt @@ -1,13 +1,13 @@ -Melhorado -• Torne a descrição da lista de reprodução clicável para mostrar mais / menos conteudo -• [PeerTube] Gerênciar links de instâncias `subscribeto.me` automaticamente -• Começar a reprodução apenas de um item na tela de histórico +Melhorias +• Tornar a descrição da lista de reprodução clicável para mostrar mais/menos conteúdo +• [PeerTube] Lidar automaticamente com links de instâncias do `subscribeto.me` +• Iniciar a reprodução de apenas um item na tela de histórico Corrigido -• Corrigir visibilidade do botão RSS +• Corrigir a visibilidade do botão RSS • Corrigir falhas na pré-visualização da barra de busca -• Corrigir erro ao adicionar item sem miniatura à playlist -• Corrigir erro ao sair da caixa de diálogo de descarregar antes de ela aparecer -• Corrigir itens relacionados ao pop-up de colocar na fila -• Corrigir a ordem no diálogo de adicionar à lista de reprodução -• Ajustar o layout do item de marcador de lista de reprodução +• Corrigir a inclusão de um item sem miniatura na lista de reprodução +• Corrigir o fechamento da caixa de diálogo de download antes de ela aparecer +• Corrigir o pop-up de enfileiramento da lista de itens relacionados +• Corrigir a ordem na caixa de diálogo de adicionar à lista de reprodução +• Ajustar o layout do item de marcador da lista de reprodução diff --git a/fastlane/metadata/android/sk/changelogs/1008.txt b/fastlane/metadata/android/sk/changelogs/1008.txt new file mode 100644 index 00000000000..fd5ebc93cc3 --- /dev/null +++ b/fastlane/metadata/android/sk/changelogs/1008.txt @@ -0,0 +1,4 @@ +Opravené obnovenie streamov na poslednej pozícii prehrávania. +∙ [YouTube] Pridaná podpora pre viac formátov URL kanálov. +∙ [YouTube] Pridaná podpora pre viac formátov metainformácií videí. +∙ Aktualizované preklady diff --git a/fastlane/metadata/android/tr/changelogs/995.txt b/fastlane/metadata/android/tr/changelogs/995.txt new file mode 100644 index 00000000000..edfd248fdcb --- /dev/null +++ b/fastlane/metadata/android/tr/changelogs/995.txt @@ -0,0 +1,16 @@ +Yeni +• Kanal sekmeleri desteği +• Resim kalite seçme özelliği +• Tüm resimlerin URL'lerini alma özelliği + +İyileştirmeler +• Oynatıcı arayüzlerinin erişilebilirliği +• Yalnızca video indirmeleri için daha iyi ses seçimi +• Paylaşılan oynatma listesi içeriğine oynatma listesi ve video adlarını ekleme seçeneği + +Düzeltilenler +• [YouTube] Beğeni sayısını alma sorunu düzeltildi +• Oynatıcının yanıt vermemesi ve çökmesi sorunu düzeltildi +• Dil seçicide yanlış dil seçimi sorunu düzeltildi +• Oynatıcı ses odaklı modda, sessize alma özelliğini dikkate almıyordu +• Oynatma listesi öğesi ekleme özelliği bazen çalışmıyordu diff --git a/fastlane/metadata/android/zh-Hans/changelogs/1007.txt b/fastlane/metadata/android/zh-Hans/changelogs/1007.txt index 8a5424c9e02..285ca3827e3 100644 --- a/fastlane/metadata/android/zh-Hans/changelogs/1007.txt +++ b/fastlane/metadata/android/zh-Hans/changelogs/1007.txt @@ -1 +1,11 @@ -修复YouTube无法播放任何视频 +这个热修复版本修复了“内容不可用”错误:又能播放 YouTube 视频了! + +还修复了几个 0.28.1 版本引入的故障: +• 播放列表项只拖动到相邻位置 +• 标题、评论在当前和上一个视频之间闪烁 +• “全屏模式启动主播放器”选项不工作 + +其他改进: +• [YouTube] 再次允许将直播倒退最多 4 小时 +• 后台播放时不加载直播视频 +• “删除已观看”的新用户界面 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/1008.txt b/fastlane/metadata/android/zh-Hans/changelogs/1008.txt new file mode 100644 index 00000000000..7ba4bfab4a6 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/1008.txt @@ -0,0 +1,4 @@ +∙ 修复了在上次播放位置继续播放音视频流的问题 +∙ [YouTube] 支持更多频道 URL 格式 +∙ [YouTube] 支持更多视频元信息格式 +∙ 更新翻译 From 3815f5f593d0c0d66389166858b27bba276ea953 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 12 Feb 2026 09:16:41 +0100 Subject: [PATCH 47/92] Translated using Weblate (Bengali (India)) Currently translated at 39.2% (300 of 764 strings) --- app/src/main/res/values-bn-rIN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index bf226e28ebc..17e317dfebb 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -309,6 +309,6 @@ কিছু না হ্যাঁ না - সার্চ - খুঁজুন + সার্চ %1$s + খুঁজুন %1$s (%2$s) From 70cdaf5550d02f6c0b60bf31f08956a0afdebdbe Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 13 Feb 2026 13:33:27 +0200 Subject: [PATCH 48/92] Partially revert: ErrorActivity: Kotlin-fy buildMarkdown method Partially reverts c3dbed54e50430b585e9d7b88cf22c9f3a6cc54c Fix the bug where collapse container for several crashlogs is created when only one crash log present --- .../org/schabi/newpipe/error/ErrorActivity.kt | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt index a8555abaea6..5dd0755c59a 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt @@ -228,24 +228,26 @@ class ErrorActivity : AppCompatActivity() { // Collapse all logs to a single paragraph when there are more than one // to keep the GitHub issue clean. - if (errorInfo.stackTraces.isNotEmpty()) { + if (errorInfo.stackTraces.size > 1) { append("
Exceptions (") append(errorInfo.stackTraces.size) append(")

\n") + } - // add the logs - errorInfo.stackTraces.forEachIndexed { index, stacktrace -> - append("

Crash log ") - if (errorInfo.stackTraces.isNotEmpty()) { - append(index + 1) - } - append("") - append("

\n") - append("\n```\n${stacktrace}\n```\n") - append("

\n") + // add the logs + errorInfo.stackTraces.forEachIndexed { index, stacktrace -> + append("
Crash log ") + if (errorInfo.stackTraces.size > 1) { + append(index + 1) } + append("") + append("

\n") + append("\n```\n${stacktrace}\n```\n") + append("

\n") + } - // make sure to close everything + // make sure to close everything + if (errorInfo.stackTraces.size > 1) { append("

\n") } From 95367dd338efa7f9bfc7707aa648c54997d5f72e Mon Sep 17 00:00:00 2001 From: pierreeurope Date: Mon, 16 Feb 2026 12:46:30 +0100 Subject: [PATCH 49/92] Fix subtitle post-processing error losing original exception Previously, TtmlConverter.process() caught all exceptions during TTML to SRT conversion and returned opaque error codes (1 for IOException, 8 for other exceptions). These error codes were then wrapped by Postprocessing.run() into a generic RuntimeException with the message 'post-processing algorithm returned N', losing the original exception and its stack trace. This made it impossible for users and developers to diagnose the root cause of subtitle download failures, as reported in #13206. Now, IOExceptions are re-thrown directly, and other exceptions are wrapped in an IOException with the original exception as the cause. This allows DownloadMission.doPostprocessing() to properly catch and report the actual error, including the full stack trace in the crash report. Fixes #13206 Signed-off-by: pierreeurope --- .../us/shandian/giga/postprocessing/TtmlConverter.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java b/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java index 8ed0dfae5de..d723bfb4561 100644 --- a/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java +++ b/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java @@ -29,9 +29,12 @@ int process(SharpStream out, SharpStream... sources) throws IOException { try { writer.build(sources[0]); + } catch (IOException err) { + Log.e(TAG, "subtitle conversion failed due to I/O error", err); + throw err; } catch (Exception err) { - Log.e(TAG, "subtitle parse failed", err); - return err instanceof IOException ? 1 : 8; + Log.e(TAG, "subtitle conversion failed", err); + throw new IOException("TTML to SRT conversion failed", err); } return OK_RESULT; From 7e7ad1e41063fbbc5cf220358e50aaba84b5a8dc Mon Sep 17 00:00:00 2001 From: vt Date: Fri, 13 Feb 2026 08:21:33 +0530 Subject: [PATCH 50/92] fix layout of comment replies header to work when avatar image is gone (disabled in content -> image settings) --- .../res/layout/comment_replies_header.xml | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/layout/comment_replies_header.xml b/app/src/main/res/layout/comment_replies_header.xml index ed5ba1a1084..f99b101f725 100644 --- a/app/src/main/res/layout/comment_replies_header.xml +++ b/app/src/main/res/layout/comment_replies_header.xml @@ -24,6 +24,8 @@ android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" + android:layout_marginTop="16dp" + app:layout_goneMarginStart="16dp" android:ellipsize="end" android:lines="1" android:textAppearance="?android:attr/textAppearanceLarge" @@ -31,22 +33,21 @@ app:layout_constraintBottom_toTopOf="@+id/uploadDate" app:layout_constraintEnd_toStartOf="@+id/thumbsUpImage" app:layout_constraintStart_toEndOf="@+id/authorAvatar" - app:layout_constraintTop_toTopOf="@+id/authorAvatar" + app:layout_constraintTop_toTopOf="parent" tools:text="@tools:sample/lorem/random" /> @@ -57,9 +58,9 @@ android:layout_marginEnd="@dimen/video_item_detail_like_margin" android:contentDescription="@string/detail_likes_img_view_description" android:src="@drawable/ic_thumb_up" - app:layout_constraintBottom_toBottomOf="@+id/authorAvatar" + app:layout_constraintBottom_toBottomOf="@+id/uploadDate" app:layout_constraintEnd_toStartOf="@+id/thumbsUpCount" - app:layout_constraintTop_toTopOf="@+id/authorAvatar" /> + app:layout_constraintTop_toTopOf="@+id/authorName" /> + app:layout_constraintTop_toTopOf="@+id/authorName" /> Date: Sun, 8 Feb 2026 13:07:23 +0530 Subject: [PATCH 51/92] remove existing comment replies screens before adding new one --- .../fragments/list/search/SearchFragment.java | 6 +++- .../schabi/newpipe/util/NavigationHelper.java | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java index 8cb5f649734..5c0d7d321fd 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 @@ -1009,7 +1009,11 @@ public void handleSuggestions(@NonNull final List suggestions) { Log.d(TAG, "handleSuggestions() called with: suggestions = [" + suggestions + "]"); } suggestionListAdapter.submitList(suggestions, - () -> searchBinding.suggestionsList.scrollToPosition(0)); + () -> { + if (searchBinding != null) { + searchBinding.suggestionsList.scrollToPosition(0); + } + }); if (suggestionsPanelVisible && isErrorPanelVisible()) { hideLoading(); diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java index f702c5bd52e..bfdf6a02cdf 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java @@ -501,6 +501,7 @@ public static void openCommentAuthorIfPresent(@NonNull final FragmentActivity ac public static void openCommentRepliesFragment(@NonNull final FragmentActivity activity, @NonNull final CommentsInfoItem comment) { + closeCommentRepliesFragments(activity); defaultTransaction(activity.getSupportFragmentManager()) .replace(R.id.fragment_holder, new CommentRepliesFragment(comment), CommentRepliesFragment.TAG) @@ -508,6 +509,41 @@ public static void openCommentRepliesFragment(@NonNull final FragmentActivity ac .commit(); } + /** + * Closes all open {@link CommentRepliesFragment}s in {@code activity}, + * including those that are not at the top of the back stack. + * This is needed to prevent multiple open CommentRepliesFragments + * Ideally there should only be one since we remove existing before opening a new one. + * @param activity the activity in which to close the CommentRepliesFragments + */ + public static void closeCommentRepliesFragments(@NonNull final FragmentActivity activity) { + final FragmentManager fm = activity.getSupportFragmentManager(); + + // Remove all existing fragment instances tagged as CommentRepliesFragment + final FragmentTransaction tx = defaultTransaction(fm); + boolean removed = false; + for (final Fragment fragment : fm.getFragments()) { + if (fragment != null && CommentRepliesFragment.TAG.equals(fragment.getTag())) { + tx.remove(fragment); + removed = true; + } + } + if (removed) { + tx.commit(); + } + + // Only pop back stack entries named CommentRepliesFragment.TAG if they are at the top. + while (fm.getBackStackEntryCount() > 0 + && CommentRepliesFragment.TAG.equals( + fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName() + ) + ) { + fm.popBackStackImmediate(CommentRepliesFragment.TAG, + FragmentManager.POP_BACK_STACK_INCLUSIVE); + } + + } + public static void openPlaylistFragment(final FragmentManager fragmentManager, final int serviceId, final String url, @NonNull final String name) { From feb442492b7f5152a4e9d61a3f8131c99b1bd1b1 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 19 Feb 2026 09:41:02 +0100 Subject: [PATCH 52/92] Translated using Weblate (Dutch) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Dutch) Currently translated at 57.3% (51 of 89 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Somali) Currently translated at 72.1% (551 of 764 strings) Translated using Weblate (Russian) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 66.2% (59 of 89 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 66.2% (59 of 89 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Dutch) Currently translated at 99.8% (763 of 764 strings) Translated using Weblate (Latvian) Currently translated at 97.6% (746 of 764 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 99.8% (763 of 764 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 53.9% (48 of 89 strings) Translated using Weblate (Spanish) Currently translated at 99.8% (763 of 764 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (764 of 764 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (89 of 89 strings) Translated using Weblate (Marathi) Currently translated at 30.4% (233 of 764 strings) Translated using Weblate (Portuguese) Currently translated at 99.8% (763 of 764 strings) Translated using Weblate (Polish) Currently translated at 56.1% (50 of 89 strings) Co-authored-by: 439JBYL80IGQTF25UXNR0X1BG <439JBYL80IGQTF25UXNR0X1BG@users.noreply.hosted.weblate.org> Co-authored-by: AMOL GHORPADE Co-authored-by: Daria Szatan Co-authored-by: Hosted Weblate Co-authored-by: Kairos Co-authored-by: Milo Ivir Co-authored-by: Miq Maq Co-authored-by: Nicolás Pérez Co-authored-by: Philip Goto Co-authored-by: delvani Co-authored-by: igoroliveira-letras Co-authored-by: ojppe Co-authored-by: ssantos Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) Co-authored-by: 大王叫我来巡山 Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nl/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/ Translation: NewPipe/Metadata --- app/src/main/res/values-es/strings.xml | 4 +- app/src/main/res/values-hr/strings.xml | 4 +- app/src/main/res/values-lv/strings.xml | 21 +++--- app/src/main/res/values-mr/strings.xml | 4 +- app/src/main/res/values-nl/strings.xml | 6 +- app/src/main/res/values-pt-rBR/strings.xml | 24 +++---- app/src/main/res/values-pt-rPT/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 8 +-- app/src/main/res/values-so/strings.xml | 4 ++ .../metadata/android/nl/changelogs/1000.txt | 13 ++++ .../metadata/android/nl/changelogs/1002.txt | 2 +- .../metadata/android/nl/changelogs/1003.txt | 7 +- .../metadata/android/nl/changelogs/1004.txt | 4 +- .../metadata/android/nl/changelogs/1007.txt | 12 +++- .../metadata/android/nl/changelogs/64.txt | 2 +- .../metadata/android/nl/changelogs/930.txt | 2 +- .../metadata/android/nl/changelogs/952.txt | 10 +-- .../metadata/android/nl/changelogs/953.txt | 2 +- .../metadata/android/nl/changelogs/998.txt | 5 +- .../metadata/android/pl/changelogs/996.txt | 2 + .../android/pt-BR/changelogs/1000.txt | 24 +++---- .../android/pt-BR/changelogs/1002.txt | 5 +- .../android/pt-BR/changelogs/1003.txt | 7 +- .../android/pt-BR/changelogs/1004.txt | 4 +- .../android/pt-BR/changelogs/1005.txt | 28 ++++---- .../android/pt-BR/changelogs/1006.txt | 16 +++++ .../android/pt-BR/changelogs/1007.txt | 12 +++- .../android/pt-BR/changelogs/1008.txt | 4 ++ .../metadata/android/pt-BR/changelogs/65.txt | 27 +------- .../metadata/android/pt-BR/changelogs/66.txt | 54 ++++++++-------- .../metadata/android/pt-BR/changelogs/68.txt | 52 +++++++-------- .../metadata/android/pt-BR/changelogs/69.txt | 32 +++++----- .../metadata/android/pt-BR/changelogs/70.txt | 46 ++++++------- .../metadata/android/pt-BR/changelogs/71.txt | 18 +++--- .../metadata/android/pt-BR/changelogs/740.txt | 46 ++++++------- .../metadata/android/pt-BR/changelogs/750.txt | 38 +++++------ .../metadata/android/pt-BR/changelogs/760.txt | 64 +++++++++---------- .../metadata/android/pt-BR/changelogs/780.txt | 20 +++--- .../metadata/android/pt-BR/changelogs/790.txt | 24 +++---- .../metadata/android/pt-BR/changelogs/800.txt | 46 ++++++------- .../metadata/android/pt-BR/changelogs/810.txt | 34 +++++----- .../metadata/android/pt-BR/changelogs/840.txt | 40 ++++++------ .../metadata/android/pt-BR/changelogs/850.txt | 2 +- .../metadata/android/pt-BR/changelogs/930.txt | 32 +++++----- .../metadata/android/pt-BR/changelogs/954.txt | 12 ++-- .../metadata/android/pt-BR/changelogs/964.txt | 16 ++--- .../metadata/android/pt-BR/changelogs/966.txt | 24 +++---- .../metadata/android/pt-BR/changelogs/968.txt | 9 +++ .../metadata/android/pt-BR/changelogs/969.txt | 10 +++ .../metadata/android/pt-BR/changelogs/971.txt | 3 + .../metadata/android/pt-BR/changelogs/973.txt | 4 ++ .../metadata/android/pt-BR/changelogs/974.txt | 5 ++ .../metadata/android/pt-BR/changelogs/976.txt | 9 +++ .../metadata/android/pt-BR/changelogs/995.txt | 26 ++++---- .../metadata/android/pt-BR/changelogs/998.txt | 5 +- .../metadata/android/pt-BR/changelogs/999.txt | 13 +++- .../android/zh-Hans/changelogs/972.txt | 4 +- 58 files changed, 533 insertions(+), 422 deletions(-) create mode 100644 fastlane/metadata/android/nl/changelogs/1000.txt create mode 100644 fastlane/metadata/android/pl/changelogs/996.txt create mode 100644 fastlane/metadata/android/pt-BR/changelogs/1006.txt create mode 100644 fastlane/metadata/android/pt-BR/changelogs/1008.txt create mode 100644 fastlane/metadata/android/pt-BR/changelogs/968.txt create mode 100644 fastlane/metadata/android/pt-BR/changelogs/969.txt create mode 100644 fastlane/metadata/android/pt-BR/changelogs/971.txt create mode 100644 fastlane/metadata/android/pt-BR/changelogs/973.txt create mode 100644 fastlane/metadata/android/pt-BR/changelogs/974.txt create mode 100644 fastlane/metadata/android/pt-BR/changelogs/976.txt diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 9838eb3c1cd..1841b6c09b0 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -513,8 +513,8 @@ Canciones Este vídeo tiene restricción de edad. \n \nHabilitar \"%1$s\" en los ajustes si quieres verlo. Sí, y también vídeos vistos parcialmente - Los vídeos que ya se hayan visto luego de añadidos a la lista de reproducción, serán quitados. \n¿Estás seguro? ¡Esta acción no se puede deshacer! - ¿Quitar vídeos ya vistos? + Los vídeos que ya se hayan visto antes y después de ser añadidos a la lista de reproducción serán quitados. \n¿Estás seguro? + ¿Quitar streams ya vistos? Quitar vídeos ya vistos Por %s Creado por %s diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 757f6244d38..f9f95db72b8 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -437,7 +437,7 @@ Ograniči popis preuzimanja Koristi sustavksi birač mapa (SAF) Ukloni pregledano - Ukloni pogledana videa? + Ukloniti pogledana emitiranja? %d sekunda %d sekunde @@ -510,7 +510,7 @@ Napredak je izgubljen, jer je datoteka izbrisana NewPipe se zatvorio tijekom rada s datotekom Stranica playliste - Videa koji su gledani prije i nakon dodavanja u playlistu će se ukloniti. \nStvarno ih želiš ukloniti? Ovo je nepovratna radnja! + Emitiranja koji su gledani prije i nakon dodavanja u playlistu će se ukloniti. \nStvarno ih želiš ukloniti? Još nema zabilježenih playlista Odaberi playlistu obnavljanje diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 0580b9dd715..45d126183e5 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -15,7 +15,7 @@ Popup atskaņotājs Fona atskaņotājs Sākt atskaņot ar popup - Sākt atskaņot fonā + Klausīties fonā šo Ielikts rindā Ielikt rindā Turiet, lai ieliktu atskaņošanas rindā @@ -123,7 +123,7 @@ Neviens neskatās - %s skatījumu + %s skatījumi %s skatījums %s skatījumi @@ -301,7 +301,7 @@ Plūsmas atjaunināšanas biežuma slieksnis Straume Rādīt tikai nepievienotus grupai abonementus - Jauna + Izveidot jaunu grupu Vai tiešām vēlaties izdzēst šo grupu? Tukšs grupas nosaukums @@ -339,8 +339,8 @@ ExoPlayer ierobežojumu dēļ meklēšanas ilgums tika iestatīts uz %d sekundēm Jā, un daļēji skatītos video - Video, kas skatīti pirms un pēc pievienošanas atskaņošanas sarakstam, tiks noņemti. \nVai tiešām turpināt? Šo darbību nevarēs atsaukt! - Vai tiešām noņemt skatītos video? + Tiešraides, kas pirms tam skatītas un pēc tam pievienotas atskaņošanas sarakstam, tiks noņemtas. \nVai tiešām turpināt? + Vai tiešām noņemt skatītās tiešraides? Noņemt skatīto System default Lietotnes valoda @@ -440,7 +440,7 @@ Minimizēt uz popup atskaņotāju Minimizēt uz fona atskaņotāju Nav - Rādīt paziņojumu, kad ir pieejama jauna aplikācijas versija + Rādīt paziņojumu, ja pieejama jauna lietotnes versija Atjauninājumi Ierobežots izšķirtspēju, izmantojot mobilos datus Nav ierobežojuma @@ -554,7 +554,7 @@ Lejupielādētās video datnes tiek glabātas šeit Video lejupielādes mape Pievienot - Fonā + Klausīties fonā Atlasiet cilni Saglabātie saraksti Abonementi @@ -620,7 +620,7 @@ Rādīt attēlu indikatorus Augstas kvalitātes (lielāks) Pārbaudīt atjauninājumus - Manuāli pārbaudīt, vai ir jaunas versijas + Pašrocīgi pārbaudīt jaunas versijas pieejamību Video atskaņošanas joslas sīktēla priekšskatījums Pārbauda, vai ir atjauninājumi… Sākot ar Android 10, tikai“Krātuves Piekļuves Sistēma” ir atbalstīta @@ -658,7 +658,7 @@ Jaunās tiešraides Radās kļūda, detalizētāku informāciju skatiet paziņojumā - %s jauna tiešraide + %s jaunas tiešraides %s jauna tiešraide %s jaunas tiešraides @@ -728,8 +728,7 @@ Par Sīkattēli Kārtot - NewPipe var automātiski pārbaudīt, vai ir jaunas versijas laiku pa laikam un paziņot jūs, kad tās ir pieejamas. -\nVai jūs gribat šo ieslēgt? + NewPipe var pati automātiski pārbaudīt jaunas versijas pieejamību laiku pa laikam un informēt jūs, kad tā ir pieejama.\nVai jūs tiešām gribiet ieslēgt šo funkciju? Netika atrasts atbilstošs failu pārvaldnieks šai darbībai. \nLūdzu instalējiet failu pārvaldnieku vai pamēģiniet atspējot \'%s\' lejuplādēšanas iestatījumos oriģinālais diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index 7a6b2eda429..de6cec2a0db 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -31,7 +31,7 @@ पॉप अप मोड मध्ये उघडा हा मेन्यू नमुना व्हिडिओ किंवा ऑडियो वेब ब्राउजर मध्ये चालवू शकतो रद्द करा - इंस्टॉल + स्थापित करा प्लेअर सापडले नाही (तुम्ही VLC player वापरून फाईल चालवू शकता). प्लेअर सापडले नाही. VLC प्लेअर इंस्टॉल करू इच्छिता का\? प्रारंभ करण्यासाठी मॅग्निफाइंग ग्लासवर टॅप करा. @@ -236,4 +236,4 @@ माहिती रांगेत आहे बंद करा - \ No newline at end of file + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 7d2f0b7beac..845e7431c00 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -213,7 +213,7 @@ Dit overschrijft je huidige configuratie. Streambestand downloaden Informatie tonen - Bijgehouden afspeellijsten + Afspeellijsten Toevoegen aan Versleep om de volgorde te wijzigen Aanmaken @@ -503,8 +503,8 @@ \n \nHopelijk zal dit bij een toekomstige versie ondersteund worden.
Ja, en deels bekeken video\'s - Video\'s die zijn bekeken voor, en na ze werden toegevoegd aan de afspeellijst worden verwijderd. \nWeet u dit zeker? Deze actie kan niet ongedaan gemaakt worden! - Bekeken video\'s verwijderen? + Streams die zijn bekeken voor, en na ze werden toegevoegd aan de afspeellijst worden verwijderd. \nWeet u dit zeker? + Bekeken streams verwijderen? ∞ video\'s 100+ video\'s Deze video heeft een leeftijdsbeperking. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 490c5f6179a..1cbfa694710 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -69,20 +69,20 @@ Vídeos baixados são salvos aqui Pasta para vídeos baixados Instalar Kore? - Toque na lupa para começar. + Toque no ícone de lupa para iniciar sua busca. Processos Por favor, defina uma pasta de download depois nas configurações - Player de vídeo não encontrado. Instalar VLC? + O player de video não foi encontrado, mas você pode instalar o VLC. Deseja fazer isso? O site não pôde ser analisado Áudio Reproduzir no Kodi Buscar Mostrar opção para reproduzir o vídeo no Kodi Usar player de áudio externo - Usar player de vídeo externo + Usar um player de vídeo alternativo Mostrar opção \"Reproduzir no Kodi\" O que aconteceu:\nPedido:\nIdioma do conteúdo:\nPaís do conteúdo:\nIdioma do aplicativo:\nServiço:\nHora GMT:\nPacote:\nVersão:\nVersão do SO: - Abrir no modo Popup + Reproduzir no modo flutuante Resolução padrão do Popup Mostrar resoluções mais altas Apenas alguns dispositivos suportam vídeos em 2K/4K @@ -97,7 +97,7 @@ Segundo plano Lembrar propriedades do Popup Lembrar último tamanho e posição do Popup - Remove áudio em algumas resoluções + Atenção: o áudio pode não funcionar em certas resoluções Sugestões de busca Escolha as sugestões a serem exibidas enquanto estiver buscando Melhor resolução @@ -129,7 +129,7 @@ Continuar a reprodução após interrupções (por exemplo, chamadas telefônicas) Histórico de busca Armazena o histórico de busca localmente - Histórico de exibição + Histórico de reprodução Mantenha o controle dos vídeos assistidos Histórico Histórico @@ -188,7 +188,7 @@ Retribuir Site oficial Visite o site do NewPipe para mais informações e novidades. - Player de vídeo não encontrado (você pode instalar o VLC para reproduzi-lo). + O player de vídeo não foi encontrado, mas você pode instalar o VLC para tentar reproduzi-lo. País padrão do conteúdo Sempre Apenas uma vez @@ -212,7 +212,7 @@ Nenhum arquivo ZIP válido Aviso: Não foi possível importar todos os arquivos. Isso irá sobrescrever suas configurações atuais. - Baixar arquivo + Salvar arquivo para reprodução sem internet Mostrar informação Playlists favoritas Adicionar a @@ -295,10 +295,10 @@ Fechar gaveta Legendas Mudar tamanho da legenda e estilos de plano de fundo. Requer reiniciar o aplicativo para ter efeito - Remover histórico de exibição + Remover histórico de reprodução Remove o histórico de vídeos assistidos e as posições de reprodução - Remover todo o histórico de exibição? - Histórico de exibição removido + Remover todo o histórico de reprodução? + Histórico de reprodução removido Remover histórico de buscas Remove o histórico de buscas Remover todo o histórico de buscas? @@ -581,7 +581,7 @@ Comentários Desative para ocultar a descrição do vídeo e informações adicionais Mostrar descrição - Abrir com + Reproduzir com Nenhum aplicativo em seu dispositivo pode abrir isso O aplicativo parou Este conteúdo está disponível apenas para usuários que pagaram, portanto não pode ser transmitido ou baixado pelo NewPipe. diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 80f943ce5b1..f6e1b5a6741 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -280,7 +280,7 @@ Notificações para novas versões do NewPipe Histórico Lista - Remover vídeos visualizados? + Remover transmissões vistas? %d minuto %d minutos diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 1ae1f8b6f47..8e0210dbc0d 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -519,7 +519,7 @@ \nPara o poder ver, tem que ativar \"%1$s\" nas definições. Os vídeos que tenham sido vistos antes e depois de serem adicionados à lista de reprodução serão removidos. \nTem a certeza? Esta ação não pode ser revertida! Sim e também os vídeos parcialmente vistos - Remover vídeos visualizados? + Remover transmissões vistas? Remover visualizados Os textos originais dos serviços serão visíveis nos itens do vídeo Mostrar antiguidade nos itens diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a10681060e2..fc32c0da363 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -345,7 +345,7 @@ Сетка Автоматически Загрузка на SD-карту невозможна. Сбросить расположение папки загрузки\? - SD-карта недоступна + Внешнее хранилище недоступно Вкладки, видимые на главной странице Значения по умолчанию Восстановить значения по умолчанию\? @@ -510,7 +510,7 @@ \nКак пример, YouTube поддерживает быстрое обновление. \n \nВыбор за вами: скорость или точность.
- Обновление по RSS, если доступно + Получать из выделенной ленты, когда доступно Доступно для некоторых сервисов, быстрое, может возвращать не всё содержимое канала и не содержать часть сведений (длительность, статус трансляции) Период актуальности подписок после обновления — %s Это видео имеет возрастное ограничение. @@ -526,8 +526,8 @@ Альбомы Удалить просмотренные Да, и частично просмотренные - Видео, просмотренные до или после добавления в плейлист, будут удалены. \nПродолжить? Не может быть отменено! - Удалить просмотренные видео? + Трансляции, просмотренные до или после добавления в плейлист, будут удалены. \nВы уверены? + Удалить просмотренные трансляции? Отображать сообщённое сервисом время с момента публикации Исходное время публикации Включить \"Ограниченный режим\" YouTube diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index 1453e3491a1..22d5fe16fd8 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -633,4 +633,8 @@ Soojeedinada raadinta gudaha Cabirka soodaarida udhexeeya Jabi Daareha + Haa + Maya + Raadi %1$s + Raadi %1$s (%2$s) diff --git a/fastlane/metadata/android/nl/changelogs/1000.txt b/fastlane/metadata/android/nl/changelogs/1000.txt new file mode 100644 index 00000000000..91c136da5f1 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/1000.txt @@ -0,0 +1,13 @@ +Verbeterd: +• Maak de beschrijving van de afspeellijst klikbaar om meer/minder content te tonen +• [PeerTube] Verwerk `subscribeto.me`-instantiekoppelingen automatisch +• Begin alleen met het afspelen van één item in het geschiedenisscherm +Opgelost: + +• Herstel de zichtbaarheid van de RSS-knop +• Herstel crashes van de zoekbalkvoorvertoning +• Herstel het afspelen van een item zonder miniatuur +• Herstel het afsluiten van het downloaddialoogvenster voordat het verschijnt +• Herstel de pop-up van de lijst met gerelateerde items enqueue +• Herstel de volgorde in het dialoogvenster Toevoegen aan afspeellijst +• Pas de lay-out van het bladwijzeritem van de afspeellijst aan diff --git a/fastlane/metadata/android/nl/changelogs/1002.txt b/fastlane/metadata/android/nl/changelogs/1002.txt index 9bd8adf8693..b31d08284d9 100644 --- a/fastlane/metadata/android/nl/changelogs/1002.txt +++ b/fastlane/metadata/android/nl/changelogs/1002.txt @@ -1 +1 @@ -YouTube speelt geen stream af opgelost +YouTube speelt geen stream af opgelost. diff --git a/fastlane/metadata/android/nl/changelogs/1003.txt b/fastlane/metadata/android/nl/changelogs/1003.txt index 9bd8adf8693..9f1814388c8 100644 --- a/fastlane/metadata/android/nl/changelogs/1003.txt +++ b/fastlane/metadata/android/nl/changelogs/1003.txt @@ -1 +1,6 @@ -YouTube speelt geen stream af opgelost +Dit is een hotfix-release die YouTube-fouten verhelpt: +• [YouTube] Probleem opgelost waarbij geen video-informatie werd geladen, HTTP 403-fouten tijdens het afspelen van video's werden verholpen en de weergave van sommige video's met leeftijdsbeperking werd hersteld +• Probleem opgelost waarbij de ondertitelgrootte niet werd aangepast +• Probleem opgelost waarbij informatie twee keer werd gedownload bij het openen van een stream +• [Soundcloud] Niet-afspeelbare DRM-beveiligde streams verwijderd +• Vertalingen bijgewerkt diff --git a/fastlane/metadata/android/nl/changelogs/1004.txt b/fastlane/metadata/android/nl/changelogs/1004.txt index 9bd8adf8693..f03db87b7c5 100644 --- a/fastlane/metadata/android/nl/changelogs/1004.txt +++ b/fastlane/metadata/android/nl/changelogs/1004.txt @@ -1 +1,3 @@ -YouTube speelt geen stream af opgelost +Deze release verhelpt het probleem dat YouTube alleen een 360p-stream aanbiedt. + +Houd er rekening mee dat de oplossing in deze versie waarschijnlijk tijdelijk is en dat op de lange termijn het SABR-videoprotocol geïmplementeerd moet worden. De leden van TeamNewPipe hebben het momenteel echter erg druk, dus alle hulp is van harte welkom! https://github.com/TeamNewPipe/NewPipe/issues/12248 diff --git a/fastlane/metadata/android/nl/changelogs/1007.txt b/fastlane/metadata/android/nl/changelogs/1007.txt index 9bd8adf8693..95c723500dc 100644 --- a/fastlane/metadata/android/nl/changelogs/1007.txt +++ b/fastlane/metadata/android/nl/changelogs/1007.txt @@ -1 +1,11 @@ -YouTube speelt geen stream af opgelost +Deze hotfix verhelpt de foutmelding "Inhoud niet beschikbaar": YouTube-video's kunnen nu weer worden afgespeeld! + +Het lost ook een aantal bugs op die in versie 0.28.1 zijn geïntroduceerd: +• Playlist-items konden alleen naar aangrenzende posities worden gesleept +• Titel/opmerkingen flikkerden tussen de huidige en vorige video +• De optie "Start de hoofdspeler in volledig scherm" werkte niet + +Andere verbeteringen: +• [YouTube] Het is weer mogelijk om livestreams tot 4 uur terug te spoelen +• Livestreamvideo's worden niet geladen wanneer ze op de achtergrond worden afgespeeld +• Nieuwe gebruikersinterface voor "Verwijder bekeken" diff --git a/fastlane/metadata/android/nl/changelogs/64.txt b/fastlane/metadata/android/nl/changelogs/64.txt index dd457279c15..dbed1653706 100644 --- a/fastlane/metadata/android/nl/changelogs/64.txt +++ b/fastlane/metadata/android/nl/changelogs/64.txt @@ -1,5 +1,5 @@ ### Verbeteringen -- Mogelijkheid toegevoegd om de videokwaliteit te beperken bij het gebruik van mobiele data. #1339 +- Mogelijkheid toegevoegd om de videokwaliteit te beperken bij het gebruik van mobiele data. #1339 - Helderheid voor de sessie onthouden #1442 - Downloadprestaties voor zwakkere CPU's verbeterd #1431 - (werkende) ondersteuning voor mediasessie toegevoegd #1433 diff --git a/fastlane/metadata/android/nl/changelogs/930.txt b/fastlane/metadata/android/nl/changelogs/930.txt index 853bfa5de2f..9be06db77cd 100644 --- a/fastlane/metadata/android/nl/changelogs/930.txt +++ b/fastlane/metadata/android/nl/changelogs/930.txt @@ -10,7 +10,7 @@ Nieuw • Verbeterde formaatverwerking van de titel van de ladekoptekst Opgelost - • instelling voor inhoud met leeftijdsbeperking werkt niet opgelost + • instelling voor inhoud met leeftijdsbeperking werkt niet opgelost • Bepaalde soorten reCAPTCHA's opgelost • Crash opgelost bij het openen van bladwijzers terwijl de afspeellijst 'null' is • Vaste detectie van netwerkgerelateerde uitzonderingen diff --git a/fastlane/metadata/android/nl/changelogs/952.txt b/fastlane/metadata/android/nl/changelogs/952.txt index 3ff60109a60..5dba7daed7c 100644 --- a/fastlane/metadata/android/nl/changelogs/952.txt +++ b/fastlane/metadata/android/nl/changelogs/952.txt @@ -1,7 +1,7 @@ Verbeterd -• Automatisch afspelen is beschikbaar voor alle services (in plaats van alleen voor YouTube) +• Auto-afspelen is beschikbaar voor alle services (in plaats van alleen voor YouTube) -Aangepast -• Vaste gerelateerde streams door de nieuwe voortzettingen van YouTube te ondersteunen -• YouTube-video's met leeftijdsbeperking -• [Android TV] Opgeloste overlay met focusaccenten +Opgelost +• Gerelateerde streams opgelost door YouTube's nieuwe voortzettingen te steunen +• Leeftijdsbeperkte YouTube videos opgelost +• [Android TV] Aanhoudende focusmarkeringlaag opgelost diff --git a/fastlane/metadata/android/nl/changelogs/953.txt b/fastlane/metadata/android/nl/changelogs/953.txt index 8f7f8b89a36..7454c3ddce4 100644 --- a/fastlane/metadata/android/nl/changelogs/953.txt +++ b/fastlane/metadata/android/nl/changelogs/953.txt @@ -1 +1 @@ -Herstel de extractie van de decoderingsfunctie van YouTube. +Extractie van YouTube's decryptiefunctie opgelost. diff --git a/fastlane/metadata/android/nl/changelogs/998.txt b/fastlane/metadata/android/nl/changelogs/998.txt index 9bd8adf8693..fca4440dd4e 100644 --- a/fastlane/metadata/android/nl/changelogs/998.txt +++ b/fastlane/metadata/android/nl/changelogs/998.txt @@ -1 +1,4 @@ -YouTube speelt geen stream af opgelost +Het probleem dat YouTube geen streams afspeelde vanwege HTTP 403-fouten is opgelost. + +Incidentele HTTP 403-fouten midden in een YouTube-video zijn nog niet verholpen. +Dit probleem zal zo snel mogelijk in een volgende hotfix-release worden aangepakt. diff --git a/fastlane/metadata/android/pl/changelogs/996.txt b/fastlane/metadata/android/pl/changelogs/996.txt new file mode 100644 index 00000000000..51b21ce58ba --- /dev/null +++ b/fastlane/metadata/android/pl/changelogs/996.txt @@ -0,0 +1,2 @@ +Naprawiono NullPointerException podczas otwierania kanału / konferencji na media.ccc.de. +Grinch próbował zepsuć nasz prezent świąteczny, który został przygotowany dla Ciebie, ale to naprawiliśmy. diff --git a/fastlane/metadata/android/pt-BR/changelogs/1000.txt b/fastlane/metadata/android/pt-BR/changelogs/1000.txt index c158f5222a3..6a884f9672e 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/1000.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/1000.txt @@ -1,13 +1,13 @@ -Melhorias -• Tornar a descrição da lista de reprodução clicável para mostrar mais/menos conteúdo -• [PeerTube] Lidar automaticamente com links de instâncias do `subscribeto.me` -• Iniciar a reprodução de apenas um item na tela de histórico +Improved +• Make playlist description clickable to show more / less content +• [PeerTube] Handle `subscribeto.me` instance links automatically +• Only start playing single item in history screen -Corrigido -• Corrigir a visibilidade do botão RSS -• Corrigir falhas na pré-visualização da barra de busca -• Corrigir a inclusão de um item sem miniatura na lista de reprodução -• Corrigir o fechamento da caixa de diálogo de download antes de ela aparecer -• Corrigir o pop-up de enfileiramento da lista de itens relacionados -• Corrigir a ordem na caixa de diálogo de adicionar à lista de reprodução -• Ajustar o layout do item de marcador da lista de reprodução +Fixed +• Fix RSS button visibility +• Fix seekbar preview crashes +• Fix playlisting a thumbnail-less item +• Fix exiting the download dialog before it appears +• Fix related items list enqueue popup +• Fix order in add to playlist dialog +• Adjust the playlist bookmark item layout diff --git a/fastlane/metadata/android/pt-BR/changelogs/1002.txt b/fastlane/metadata/android/pt-BR/changelogs/1002.txt index 59fc6a5cdb0..7879b39dbcb 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/1002.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/1002.txt @@ -1 +1,4 @@ -Corrigido YouTube não reproduzir qualquer transmissão +Corrigido o problema do YouTube não reproduzir nenhum vídeo. + +Esta versão corrige apenas o erro mais urgente que impede o carregamento de detalhes dos vídeos do YouTube. +Estamos cientes de que existem outros problemas e, em breve, lançaremos uma versão separada para resolvê-los. diff --git a/fastlane/metadata/android/pt-BR/changelogs/1003.txt b/fastlane/metadata/android/pt-BR/changelogs/1003.txt index 59fc6a5cdb0..3cad38acfea 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/1003.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/1003.txt @@ -1 +1,6 @@ -Corrigido YouTube não reproduzir qualquer transmissão +Esta é uma versão de correção que corrige erros do YouTube: +• [YouTube] Corrige o não carregamento de informações de vídeo, corrige erros HTTP 403 durante a reprodução de vídeos e restaura a reprodução de alguns vídeos com restrição de idade +• Corrige o tamanho das legendas que não era alterado +• Corrige o download de informações duas vezes ao abrir uma transmissão. +• [Soundcloud] Remove transmissões protegidas por DRM que não podem ser reproduzidas +• Traduções atualizadas diff --git a/fastlane/metadata/android/pt-BR/changelogs/1004.txt b/fastlane/metadata/android/pt-BR/changelogs/1004.txt index 59fc6a5cdb0..a2c33d8ed1a 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/1004.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/1004.txt @@ -1 +1,3 @@ -Corrigido YouTube não reproduzir qualquer transmissão +Esta versão corrige o problema do YouTube fornecer apenas uma transmissão de 360p. + +Observe que a solução empregada nesta versão é provavelmente temporária e, a longo prazo, o protocolo de vídeo SABR precisa ser implementado, mas os membros da TeamNewPipe estão ocupados no momento, portanto, qualquer ajuda será muito bem-vinda! https://github.com/TeamNewPipe/NewPipe/issues/12248 diff --git a/fastlane/metadata/android/pt-BR/changelogs/1005.txt b/fastlane/metadata/android/pt-BR/changelogs/1005.txt index 3ef1f3e2e0f..2bfdfca0e0a 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/1005.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/1005.txt @@ -1,17 +1,17 @@ New -• Suporte adicionado para Android Auto -• Permitir configuração de grupos de feed como abas da tela principal -• [YouTube] Compartilhe como playlist temporária -• [SoundCloud] Aba de curtidas do canal +• Add support for Android Auto +• Allow setting feed groups as main screen tabs +• [YouTube] Share as temporary playlist +• [SoundCloud] Likes channel tab -Melhorado -• Melhor sugestão na barra de busca -• Mostra data do download em Downloads -• Usar idioma por aplicativo no Android 13 +Improved +• Better search bar hints +• Show download date in Downloads +• Use Android 13 per-app language -Consertado -• Texto no modo escuro consertado -• [YouTube] Conserta playlists não carregando mais do que 100 itens -• [YouTube] Conserta videos recomendados faltando -• Conserta lista de visualização do histórico -• Conserta registro de tempo na resposta de comentários +Fixed +• Fix broken text colors in dark mode +• [YouTube] Fix playlists not loading more than 100 items +• [YouTube] Fix missing recommended videos +• Fix crashes in History list view +• Fix timestamps in comment replies diff --git a/fastlane/metadata/android/pt-BR/changelogs/1006.txt b/fastlane/metadata/android/pt-BR/changelogs/1006.txt new file mode 100644 index 00000000000..90fd823f93f --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/1006.txt @@ -0,0 +1,16 @@ +# Melhorias +Mantém o player ao tocar nas minutagens do vídeo. +Recupera downloads pendentes quando possível. +Limpa a lista de downloads sem excluir o arquivo permanentemente. +Aviso de Permissão de Sobreposição (Android R+). +Suporte a links do SoundCloud. +Pequenas melhorias e otimizações. + +# Correções +Formato de contagem para Android < 7. +Notificações confusas ou incoerentes. +Ajustes em legendas SRT. +Correção de fechamentos bruscos (crashes). + +# Desenvolvimento +Modernização do código interno. diff --git a/fastlane/metadata/android/pt-BR/changelogs/1007.txt b/fastlane/metadata/android/pt-BR/changelogs/1007.txt index 59fc6a5cdb0..d3bd98aeafe 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/1007.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/1007.txt @@ -1 +1,11 @@ -Corrigido YouTube não reproduzir qualquer transmissão +This hotfix release fixes the "Content not available" error: YouTube videos can now be played again! + +It also fixes a few bugs introduced in 0.28.1: +• Playlist items dragging to only neighbor positions +• Title/comments flickering between current and previous video +• "Start main player in fullscreen" option not working + +Other improvements: +• [YouTube] Allow rewinding livestreams up to 4 hours again +• Don't load livestream video when playing in background +• New UI for "Remove watched" diff --git a/fastlane/metadata/android/pt-BR/changelogs/1008.txt b/fastlane/metadata/android/pt-BR/changelogs/1008.txt new file mode 100644 index 00000000000..ef7d70a9b56 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/1008.txt @@ -0,0 +1,4 @@ +∙ Corrigido o retomar de streams na última posição de reprodução +∙ [YouTube] Adicionado suporte a mais formatos de URL de canal +∙ [YouTube] Adicionado suporte a mais formatos de metadados de vídeo +∙ Traduções atualizadas diff --git a/fastlane/metadata/android/pt-BR/changelogs/65.txt b/fastlane/metadata/android/pt-BR/changelogs/65.txt index bd7a638f68e..ed37e78e5cc 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/65.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/65.txt @@ -1,26 +1 @@ -### Melhorias - -- Desabilitar a animação do ícone do burgermenu #1486 -- Desfazer a eliminação de descarregamentos #1472 -- Opção de descarregamento no menu de partilha #1498 -- Opção de partilha adicionada ao menu de toque longo #1454 -- Minimize o jogador principal na saída #1354 -- Atualização da versão da biblioteca e correção de cópia de segurança da base de dados #1510 -- ExoPlayer 2.8.2 Atualização #1392 - - Retrabalhado a caixa de diálogo de controlo de velocidade de reprodução para suportar diferentes tamanhos de etapa para uma mudança de velocidade mais rápida. - - Adicionado uma alternância para avanço rápido durante silêncios no controle de velocidade de reprodução. Isso deve ser útil para audiolivros e certos gêneros musicais, e pode trazer uma experiência verdadeiramente perfeita (e pode quebrar uma música com muitos silêncios =\\) - - Resolução de fonte de média ré fatorada para permitir a passagem de metadados junto com a média internamente no reprodutor, em vez de fazê-lo manualmente. Agora temos uma única fonte de metadados e está disponível diretamente quando a reprodução é iniciada. - - Correção de metadados de listas de reprodução remotas que não são atualizadas quando novos metadados estão disponíveis quando o fragmento da lista de reprodução é aberta. - - Várias correções de interface do utilizador : #1383, controles de notificação do reprodutor em segundo plano agora sempre brancos, mais fácil de desligar o reprodutor pop-up por meio de arremesso -- Use novo extrator com arquitetura ré fatorada para multisserviço - -### Correções - -- Corrigir #1440 Layout de informações de vídeo quebrado #1491 -- Ver correção de histórico #1497 - - #1495, atualizando os metadados (miniatura, título e contagem de vídeos) assim que o usuário acessar a lista de reprodução. - - #1475, registando uma visualização na base de dados quando o utilizador inicia um vídeo no reprodutor externo no fragmento de detalhes. -- Correção de tempo limite de criação em caso de modo pop-up. #1463 (Corrigido #640) -- Correção do reprodutor de vídeo principal #1509 - [#1412] Corrigido o modo de repetição causando NPE do reprodutor quando uma nova intenção é recebida enquanto a atividade do reprodutor está em segundo plano. - - Corrigida a minimização de reprodutor para pop-up não destrói o reprodutor quando a permissão de pop-up não é concedida. +A tradução não deve exceder o comprimento. diff --git a/fastlane/metadata/android/pt-BR/changelogs/66.txt b/fastlane/metadata/android/pt-BR/changelogs/66.txt index ed84a27599e..30c20b0e8cb 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/66.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/66.txt @@ -1,33 +1,33 @@ -# Changelog de v0.13.7 +# Changelog of v0.13.7 -### Fixo -- Fixar questões de filtro de ordenação da v0.13.6 +### Fixed +- Fix sort filter issues of v0.13.6 -# Mudança do v0.13.6 +# Changelog of v0.13.6 -### Melhorias +### Improvements -- Desactivar animação de ícones de burgermenu #1486 -- anular a eliminação dos downloads #1472 -- Opção de download no menu de partilha #1498 -- Adicionada a opção de partilha no menu de toque longo #1454 -- Minimizar o jogador principal na saída #1354 -- Actualização da versão da biblioteca e correcção da cópia de segurança da base de dados #1510 -- ExoPlayer 2.8.2 Actualização #1392 - - Reformulou o diálogo de controlo de velocidade de reprodução para suportar diferentes tamanhos de passos para uma mudança de velocidade mais rápida. - - Adicionada uma alternância para avançar rapidamente durante os silêncios no controlo de velocidade de reprodução. Isto deve ser útil para audiolivros e certos géneros musicais, e pode trazer uma verdadeira experiência sem falhas (e pode quebrar uma canção com muitos silêncios =\i1). - - A resolução da fonte dos meios de comunicação foi refeita para permitir a passagem de metadados ao lado dos meios de comunicação internamente no leitor, em vez de o fazer manualmente. Agora temos uma única fonte de metadados e está directamente disponível quando a reprodução começa. - - Fixados os metadados da lista de reprodução remota que não são actualizados quando novos metadados estão disponíveis quando o fragmento da lista de reprodução é aberto. - - Várias correcções UI: #1383, a notificação do leitor de fundo controla agora sempre branco, mais fácil de desligar o leitor de pop-ups através do fling -- Usar novo extractor com arquitectura refacturada para multiserviços +- Disable burgermenu icon animation #1486 +- undo delete of downloads #1472 +- Download option in share menu #1498 +- Added share option to long tap menu #1454 +- Minimize main player on exit #1354 +- Library version update and database backup fix #1510 +- ExoPlayer 2.8.2 Update #1392 + - Reworked the playback speed control dialog to support different step sizes for faster speed change. + - Added a toggle to fast-forward during silences in playback speed control. This should be helpful for audiobooks and certain music genres, and can bring a true seamless experience (and can break a song with lots of silences =\\). + - Refactored media source resolution to allow passing metadata alongside media internally in the player, rather than doing so manually. Now we have a single source of metadata and is directly available when playback starts. + - Fixed remote playlist metadata not updating when new metadata is available when playlist fragment is opened. + - Various UI fixes: #1383, background player notification controls now always white, easier to shutdown popup player through flinging +- Use new extractor with refactored architecture for multiservice -### Correcções +### Fixes -- Reparação #1440 Layout de Informação de Vídeo Partido #1491 -- Ver histórico correcção #1497 - - #1495, actualizando os metadados (miniatura, título e contagem de vídeo) assim que o utilizador aceda à lista de reprodução. - - #1475, através do registo de uma vista na base de dados quando o utilizador inicia um vídeo no leitor externo sobre fragmento de detalhe. -- Fixar tempo limite de creen em caso de modo popup. #1463 (Fixado #640) -- Correcção principal do leitor de vídeo #1509 - - [#1412] Modo de repetição fixo causando NPE do jogador quando novas intenções são recebidas enquanto a actividade do jogador está em segundo plano. - - Fixa a minimização do jogador a popup não destrói o jogador quando não é concedida permissão de popup. +- Fix #1440 Broken Video Info Layout #1491 +- View history fix #1497 + - #1495, by updating the metadata (thumbnail, title and video count) as soon as the user access the playlist. + - #1475, by registering a view in the database when the user starts a video on external player on detail fragment. +- Fix creen timeout in case of popup mode. #1463 (Fixed #640) +- Main video player fix #1509 + - [#1412] Fixed repeat mode causing player NPE when new intent is received while player activity is in background. + - Fixed minimizing player to popup does not destroy player when popup permission is not granted. diff --git a/fastlane/metadata/android/pt-BR/changelogs/68.txt b/fastlane/metadata/android/pt-BR/changelogs/68.txt index 1e6c42e01d2..238b1e0b18c 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/68.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/68.txt @@ -1,31 +1,31 @@ -# mudanças da v0.14.1 +# changes of v0.14.1 -### fixo -- Fixo falhou em desencriptar a url de vídeo #1659 -- Ligação de descrição fixa não extraída bem #1657 +### Fixed +- Fixed failed to decrypt video url #1659 +- Fixed description link not extract well #1657 -# mudanças de v0.14.0 +# changes of v0.14.0 -### Novo -- Novo desenho de gaveta #1461 -- Nova página inicial personalizável #1461 +### New +- New Drawer design #1461 +- New customizable front page #1461 -### Melhorias -- Controlos por gestos retrabalhados #1604 -- Nova forma de fechar o leitor de popup #1597 +### Improvements +- Reworked Gesture controls #1604 +- New way to close the popup player #1597 -### Fixa -- Corrigir erro quando a contagem de assinaturas não está disponível. Fecha #1649. - - Mostrar "Contagem de subscritores não disponível" nesses casos -- Consertar NPE quando uma lista de reprodução do YouTube está vazia -- Correcção rápida para os quiosques em SoundCloud -- Refactor e correcção de bugs #1623 - - Resultado de pesquisa cíclica reparada #1562 - - Barra de procura fixa não estática - - Os vídeos do YT Premium não estão bloqueados correctamente - - Vídeos Fixos por vezes não carregados (devido à análise do DASH) - - Corrigir ligações na descrição vídeo - - Mostrar aviso quando alguém tenta descarregar para sdcard externo - - nada de excepção mostrado dispara o relatório - - thumbnail não mostrado no leitor de fundo para andróide 8.1 [ver aqui](https://github.com/TeamNewPipe/NewPipe/issues/943) -- Correcção do registo do receptor de radiodifusão. Fecha #1641. +### Fixed +- Fix error when subscription count is not available. Closes #1649. + - Show "Subscriber count not available" in those cases +- Fix NPE when a YouTube playlist is empty +- Quick fix for the kiosks in SoundCloud +- Refactor and bugfix #1623 + - Fix Cyclic search result #1562 + - Fix Seek bar not statically lay outed + - Fix YT Premium video are not blocked correctly + - Fix Videos sometimes not loading (due to DASH parsing) + - Fix links in video description + - Show warning when someone tries to download to external sdcard + - fix nothing shown exception triggers report + - thumbnail not shown in background player for android 8.1 [see here](https://github.com/TeamNewPipe/NewPipe/issues/943) +- Fix registering of broadcast receiver. Closes #1641. diff --git a/fastlane/metadata/android/pt-BR/changelogs/69.txt b/fastlane/metadata/android/pt-BR/changelogs/69.txt index fa7d5d85cda..c8262d1b0d7 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/69.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/69.txt @@ -1,19 +1,19 @@ -#### Novo -- Eliminação de longa duração e partilha de subscrições #1516 -- Tabela UI e esquema de lista de grelha #1617 +### New +- Long-tap delete and share in subscriptions #1516 +- Tablet UI and grid list layout #1617 -### Melhorias -- armazenar e recarregar a última relação de aspeto utilizada #1748 -- Ativar a disposição linear na atividade de Downloads com nomes de vídeo completos #1771 -- Apagar e partilhar subscrições diretamente do separador de subscrições #1516 -- Enqueuing agora ativa a reprodução de vídeo se a fila de reprodução já tiver terminado #1783 -- Configurações separadas para os gestos de volume e luminosidade #1644 -- Adicionar apoio à Localização #1792 +### Improvements +- store and reload the last used aspect ratio #1748 +- Enable linear layout in Downloads activity with full video names #1771 +- Delete and share subscriptions directly from within the subscriptions tab #1516 +- Enqueuing now triggers video playing if the play queue has already ended #1783 +- Separate settings for volume and brightness gestures #1644 +- Add support for Localization #1792 -### Correções -- Fixar a análise do tempo para . formato, para que NewPipe possa ser usado na Finlândia -- Contagem fixa de assinaturas -- Adicionar permissão de serviço em primeiro plano para dispositivos API 28+ #1830 +### Fixes +- Fix time parsing for . format, so NewPipe can be used in Finland +- Fix subscription count +- Add foreground service permission for API 28+ devices #1830 -### Bugs conhecidos -- O estado de reprodução não pode ser guardado no Android P +### Known Bugs +- Playback state can not be saved on Android P diff --git a/fastlane/metadata/android/pt-BR/changelogs/70.txt b/fastlane/metadata/android/pt-BR/changelogs/70.txt index 61de40666ef..ad87a4409c5 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/70.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/70.txt @@ -1,25 +1,25 @@ -Atenção: esta versão é provavelmente um bugfest, tal como a última. No entanto, devido ao desligamento total desde o 17. uma versão quebrada é melhor do que nenhuma versão. Certo? ¯\_(ツ)_/¯ +ATTENTION: This version probably is a bugfest, just like the last one. However due to the full shutdown since the 17. a broken version is better then no version. Right? ¯\_(ツ)_/¯ -### Melhoria -* os arquivos baixados agora podem ser abertos com um clique #1879 -* suporte drop para android 4.1-4.3 #1884 -* remover jogador antigo #1884 -* remova os fluxos da fila de reprodução atual passando-os para a direita #1915 -* remova o fluxo enfileirado automático quando um novo fluxo é enfileirado manualmente # 1878 -* Pós-processamento para downloads e implementar recursos ausentes #1759 por @ kapodamy - * Infra-estruturas de pós-processamento - * Tratamento adequado de erros "infraestrutura" (para downloader) - * Fila em vez de vários downloads - * Mover transferências pendentes serializadas (`.arquivos giga`) para dados do aplicativo - * Implementar nova tentativa máxima de download - * Pausa adequada para o download de vários segmentos - * Parar downloads quando swicthing à rede móvel (nunca funciona, ver ponto 2) - * Salve a contagem de threads para os próximos downloads - * Muitas incoerências corrigidas +### Improvements +* downloaded files can now be opened with one click #1879 +* drop support for android 4.1 - 4.3 #1884 +* remove old player #1884 +* remove streams from current play queue by swiping them to the right #1915 +* remove auto queued stream when a new stream is enqueued manually #1878 +* Postprocessing for downloads and implement missing features #1759 by @kapodamy + * Post-processing infrastructure + * Proper error handling "infrastructure" (for downloader) + * Queue instead of multiple downloads + * Move serialized pending downloads (`.giga` files) to app data + * Implement max download retry + * Proper multi-thread download pausing + * Stop downloads when swicthing to mobile network (never works, see 2nd point) + * Save the thread count for next downloads + * A lot of incoherences fixed -### Corrigido -* Corrigir falha com resolução padrão definida como a melhor e limitada resolução de dados móveis #1835 -* falha do jogador pop-up corrigida #1874 -* NPE ao tentar abrir o jogador de fundo #1901 -* Correção para inserir novos fluxos quando o enfileiramento automático está habilitado #1878 -* Corrigido o problema decypering shuttown +### Fixed +* Fix crash with default resolution set to best and limited mobile data resolution #1835 +* pop-up player crash fixed #1874 +* NPE when trying to open background player #1901 +* Fix for inserting new streams when auto queuing is enabled #1878 +* Fixed the decypering shuttown issue diff --git a/fastlane/metadata/android/pt-BR/changelogs/71.txt b/fastlane/metadata/android/pt-BR/changelogs/71.txt index fb525ccccca..5facfc05f3a 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/71.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/71.txt @@ -1,10 +1,10 @@ -### Melhoria -* Adicionar notificação de atualização do aplicativo para compilação do GitHub (#1608 por @ krtkush) -* Várias melhorias para o downloader(# 1944 por @kapodamy): - * * adicione ícones brancos ausentes e use o modo hardcore para alterar as cores dos ícones - * verifique se o iterador foi inicializado (correções #2031) - * * permitir novas tentativas de downloads com erro "Falha no pós-processamento" no novo mixer - * novo muxer MPEG - 4 que fixa fluxos de vídeo e áudio não síncronos (#2039) +### Improvements +* Add app update notification for GitHub build (#1608 by @krtkush) +* Various improvements to the downloader (#1944 by @kapodamy): + * add missing white icons and use hardcored way for change the icon colors + * check if the iterator is initialized (fixes #2031) + * allow retry downloads with "post-processing failed" error in the new muxer + * new MPEG-4 muxer fixing non-synchronous video and audio streams (#2039) -### Corrigido -* * As transmissões ao vivo do YouTube param de ser reproduzidas após um curto período de tempo(# 1996 por @username) +### Fixed +* YouTube live streams stop playing after a short time (#1996 by @yausername) diff --git a/fastlane/metadata/android/pt-BR/changelogs/740.txt b/fastlane/metadata/android/pt-BR/changelogs/740.txt index d591eda53e0..c795978a894 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/740.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/740.txt @@ -1,23 +1,23 @@ -< H4 > melhorias< / h4> -< ul> -< li>tornar os links nos comentários clicáveis, aumentar o tamanho do texto< / li> -< li>procurar ao clicar em links de carimbo de data/hora nos comentários< / li> -< li>mostrar a guia preferida com base no estado selecionado recentemente< / li> -< li>adicionar lista de reprodução à fila ao clicar longamente em & # 39;fundo& # 39; na janela da lista de reprodução< / li> -< li>procurar texto partilhado quando não é um URL< / li> -< li>adicionar o botão"Partilhar no momento atual & quot; ao leitor de vídeo principal< / li> -< li>adicionar botão fechar ao leitor principal quando terminar a fila de vídeo< / li> -< li>Adicionar & quot;Reproduzir diretamente em segundo plano & quot; ao menu longpress para itens da lista de vídeos< / li> -< li>melhorar as traduções em Inglês para comandos Play / Enqueue< / li> -< li>pequenas melhorias de desempenho< / li> -< li>remover ficheiros não utilizados < / li> -< li>Atualizar o ExoPlayer para 2.9.6< / li> -< li>adicionar suporte para links ofensivos< / li> -< / ul> -

fixo < /h4> -< ul> -< li>rolagem fixa com comentários e fluxos relacionados desativados < / li> -< li>Corrigido CheckForNewAppVersionTask sendo executado quando deveria & # 39; t< / li> -< li>importação de assinatura fixa do youtube: ignore aqueles com url inválido e mantenha aqueles com título vazio< / li> -< li>corrigir URL inválido do YouTube: o nome da marca de assinatura nem sempre é "Assinatura", impedindo o carregamento de fluxos< / li> -< / ul> +

Improvements

+
    +
  • make links in comments clickable, increase text size
  • +
  • seek on clicking timestamp links in comments
  • +
  • show preferred tab based on recently selected state
  • +
  • add playlist to queue when long clicking on 'Background' in playlist window
  • +
  • search for shared text when it is not an URL
  • +
  • add "share at current time" button to the main video player
  • +
  • add close button to main player when video queue is finished
  • +
  • add "Play directly in Background" to longpress menu for video list items
  • +
  • improve English translations for Play/Enqueue commands
  • +
  • small performance improvements
  • +
  • remove unused files
  • +
  • update ExoPlayer to 2.9.6
  • +
  • add support for Invidious links
  • +
+

Fixed

+
    +
  • fixed scroll w/ comments and related streams disabled
  • +
  • fixed CheckForNewAppVersionTask being executed when it shouldn't
  • +
  • fixed youtube subscription import: ignore ones with invalid url and keep ones with empty title
  • +
  • fix invalid YouTube url: signature tag name is not always "signature" preventing streams from loading
  • +
diff --git a/fastlane/metadata/android/pt-BR/changelogs/750.txt b/fastlane/metadata/android/pt-BR/changelogs/750.txt index 25f0c1dbfdc..39b77f7c346 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/750.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/750.txt @@ -1,22 +1,22 @@ -Novo -Resumo da reprodução #2288 -* Retomar fluxos onde parou da última vez -Melhorias Do Downloader #2149 -* Use o Storage Access Framework para armazenar downloads em cartões SD externos -* Novo MP4 muxer -* Opcionalmente, altere o diretório de download antes de iniciar um download -* Respeitar as redes de medição +New +Playback resume #2288 +• Resume streams where you stopped last time +Downloader Enhancements #2149 +• Use Storage Access Framework to store downloads on external SD-cards +• New mp4 muxer +• Optionally change the download directory before starting a download +• Respect metered networks -Melhorado -* Cordas gema removidas #2295 -* Lidar com mudanças de rotação (automática) durante o ciclo de vida da atividade #2444 -* Tornar os menus de pressão longa consistentes #2368 +Improved +• Removed gema strings #2295 +• Handle (auto)rotation changes during activity lifecycle #2444 +• Make long-press menus consistent #2368 -Corrigido -* Corrigido o nome da faixa de legenda selecionada não sendo mostrado #2394 -• Não trave quando a verificação da atualização do aplicativo falhar (versão do GitHub) #2423 -* Downloads fixos presos em 99,9% #2440 -* Atualizar meta dados da fila de reprodução #2453 -* [*[SoundCloud] corrigida a falha ao carregar listas de reprodução Team New Pipe / New Pipe Extractor#170 -* [*[YouTube] A duração fixa não pode ser analisada Team New Pipe / New Pipe Extractor#177 +Fixed +• Fixed selected subtitle track name not being shown #2394 +• Do not crash when check for app update fails (GitHub version) #2423 +• Fixed downloads stuck at 99.9% #2440 +• Update play queue metadata #2453 +• [SoundCloud] Fixed crash when loading playlists TeamNewPipe/NewPipeExtractor#170 +• [YouTube] Fixed duration can not be paresd TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/pt-BR/changelogs/760.txt b/fastlane/metadata/android/pt-BR/changelogs/760.txt index 113a92615f7..6e000f6d9f0 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/760.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/760.txt @@ -1,43 +1,43 @@ -Alterações em 0.17.1 +Changes in 0.17.1 -Novo -* Localização tailandesa +New +• Thai localization -Melhorado -* Adicionar começar a jogar aqui ação em menus de longo imprensa para playlists novamente #2518 -* Adicionar interruptor para SAF / legacy file picker #2521 +Improved +• Add start playing here action in long-press menus for playlists again #2518 +• Add switch for SAF / legacy file picker #2521 -Corrigido -* Corrigir botões desaparecendo na visualização de downloads ao alternar aplicativos #2487 -* Corrigir a posição de reprodução é armazenada, embora o histórico de exibição esteja desativado -* Corrigir desempenho reduzido causado pela posição de reprodução em visualizações de lista #2517 -* [Extractor] Corrigir ReCaptchaActivity # 2527, TeamNewPipe / NewPipeExtractor#186 -* [Extractor] [YouTube] Corrigir Erro de pesquisa casual quando as listas de reprodução estão nos resultados TeamNewPipe / NewPipeExtractor#185 +Fixed +• Fix disappearing buttons in downloads view when switching apps #2487 +• Fix playback position is stored although watch history is disabled +• Fix reduced performance caused by playback position in list views #2517 +• [Extractor] Fix ReCaptchaActivity #2527, TeamNewPipe/NewPipeExtractor#186 +• [Extractor] [YouTube] Fix casual search error when playlists are in results TeamNewPipe/NewPipeExtractor#185 -Alterações em 0.17.0 +Changes in 0.17.0 -Novo -Resumo da reprodução #2288 -* Retomar fluxos onde parou da última vez -Melhorias Do Downloader #2149 -* Use o Storage Access Framework para armazenar downloads em cartões SD externos -* Novo MP4 muxer -* Opcionalmente, altere o diretório de download antes de iniciar um download -* Respeitar as redes de medição +New +Playback resume #2288 +• Resume streams where you stopped last time +Downloader Enhancements #2149 +• Use Storage Access Framework to store downloads on external SD-cards +• New mp4 muxer +• Optionally change the download directory before starting a download +• Respect metered networks -Melhorado -* Cordas gema removidas #2295 -* Lidar com mudanças de rotação (automática) durante o ciclo de vida da atividade #2444 -* Tornar os menus de pressão longa consistentes #2368 +Improved +• Removed gema strings #2295 +• Handle (auto)rotation changes during activity lifecycle #2444 +• Make long-press menus consistent #2368 -Corrigido -* Corrigido o nome da faixa de legenda selecionada não sendo mostrado #2394 -• Não trave quando a verificação da atualização do aplicativo falhar (versão do GitHub) #2423 -* Downloads fixos presos em 99,9% #2440 -* Atualizar metadados da fila de reprodução #2453 -* [SoundCloud] corrigida a falha ao carregar listas de reprodução TeamNewPipe / NewPipeExtractor#170 -* [YouTube] duração fixa não pode ser Paresd TeamNewPipe / NewPipeExtractor#177 +Fixed +• Fixed selected subtitle track name not being shown #2394 +• Do not crash when check for app update fails (GitHub version) #2423 +• Fixed downloads stuck at 99.9% #2440 +• Update play queue metadata #2453 +• [SoundCloud] Fixed crash when loading playlists TeamNewPipe/NewPipeExtractor#170 +• [YouTube] Fixed duration can not be paresd TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/pt-BR/changelogs/780.txt b/fastlane/metadata/android/pt-BR/changelogs/780.txt index 61392c0df56..9100d7335f0 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/780.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/780.txt @@ -1,12 +1,12 @@ -Alterações em 0.17.3 +Changes in 0.17.3 -Melhorado -- Adicionada opção para limpar estados de reprodução #2550 -- Mostrar diretórios ocultos no seletor de ficheiros #2591 -- URLs de apoio de instâncias `invidio.us` a serem abertas com NewPipe #2488 -- Adicionar suporte para `music.youtube.com` URLs TeamNewPipe/NewPipeExtractor#194 +Improved +• Added option to clear playback states #2550 +• Show hidden directories in the file picker #2591 +• Support URLs from `invidio.us` instances to be opened with NewPipe #2488 +• Add support for `music.youtube.com` URLs TeamNewPipe/NewPipeExtractor#194 -Corrigido -- [YouTube] Fixo 'java.lang.IllegalArgumentException #192 -- [YouTube] Fluxos fixos ao vivo não funcionam TeamNewPipe/NewPipeExtractor#195 -- Resolvido problema de desempenho em torta de android ao descarregar um fluxo #2592 +Fixed +• [YouTube] Fixed 'java.lang.IllegalArgumentException #192 +• [YouTube] Fixed live streams not working TeamNewPipe/NewPipeExtractor#195 +• Fixed performance problem in android pie when downloading a stream #2592 diff --git a/fastlane/metadata/android/pt-BR/changelogs/790.txt b/fastlane/metadata/android/pt-BR/changelogs/790.txt index f1b3a2dd98c..ec77b2acb0d 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/790.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/790.txt @@ -1,14 +1,14 @@ -Melhorado -- Adicionar mais títulos para melhorar a acessibilidade para os cegos #2655 -- Tornar a linguagem da pasta de download mais consistente e menos ambígua #2637 +Improved +• Add more titles to improve accessibility for blind people #2655 +• Make language of download folder setting more consistent and less ambiguous #2637 -Fixa -- Verificar se o último byte no bloco é descarregado #2646 -- Rolagem fixa em fragmento de detalhe de vídeo #2672 -- Remover a dupla pesquisa de animações de caixa transparente para uma #2695 -- Fixar extracção client_id #2745 +Fixed +• Check if last byte in the block is downloaded #2646 +• Fixed scrolling in video detail fragment #2672 +• Remove double search clear box animations to one #2695 +• [SoundCloud] Fix client_id extraction #2745 -Desenvolvimento -- Adicionar dependências em falta herdadas de NewPipeExtractor em NewPipe #2535 -- Migrar para AndroidX #2685 -- Actualização para ExoPlayer 2.10.6 #2697, #2736 +Development +• Add missing dependencies inherited from NewPipeExtractor into NewPipe #2535 +• Migrate to AndroidX #2685 +• Update to ExoPlayer 2.10.6 #2697, #2736 diff --git a/fastlane/metadata/android/pt-BR/changelogs/800.txt b/fastlane/metadata/android/pt-BR/changelogs/800.txt index 1b6ec1a4c7c..332b5c9946d 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/800.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/800.txt @@ -1,27 +1,27 @@ -Novo -- Suporte PeerTube sem P2P (#2201) [Beta]: - ◦ Ver e descarregar vídeos de instâncias do PeerTube - ◦ Adicionar instâncias nas definições para aceder ao mundo completo do PeerTube - ◦ Pode haver problemas com apertos de mão SSL no Android 4.4 e 7.1 quando o acesso a certos casos resulta num erro de rede. +New +• PeerTube support without P2P (#2201) [Beta]: + ◦ Watch and download videos from PeerTube instances + ◦ Add instances in the settings to access the complete PeerTube world + ◦ There might be problems with SSL handshakes on Android 4.4 and 7.1 when accessing certain instances resulting in a network error. -- Downloader (#2679): - ◦ Calcular ETA de descarregamento - ◦ Descarregar opus (ficheiros webm) como ogg - ◦ Recuperar ligações expiradas para retomar os downloads após uma longa pausa +• Downloader (#2679): + ◦ Calculate download ETA + ◦ Download opus (webm files) as ogg + ◦ Recover expired download links to resume downloads after a long pause -Melhorado -- Tornar o KioskFragment consciente das mudanças no país de conteúdo preferido e melhorar o desempenho de todos os separadores principais #2742 -- Utilizar novas implementações de Localização e Downloader do extractor #2713 -- Tornar o fio "Quiosque por defeito" traduzível -- Barra de navegação preta para o tema preto #2569 +Improved +• Make the KioskFragment aware of changes in the preferred content country and improve performance of all main tabs #2742 +• Use new Localization and Downloader implementations from extractor #2713 +• Make "Default kiosk" string translatable +• Black navigation bar for black theme #2569 -Fixa -- Corrigido um bug que não podia mover o leitor de popup se outro dedo fosse colocado enquanto se movia o leitor de popup #2772 -- Permitir listas de reprodução sem um carregador e corrigir falhas relacionadas com este problema #2724, TeamNewPipe/NewPipeExtractor#219 -- Habilitação de TLS1.1/1.2 em dispositivos Android 4.4 (API 19/KitKat) para corrigir o aperto de mão de TLS com MediaCCC e algumas instâncias PeerTube #2792 -- [SoundCloud] Equipa fixa de extracção client_idNewPipe/NewPipeExtractor#217 -- Fixar a extracção do fluxo de áudio +Fixed +• Fixed a bug that could not move the popup player if another finger was placed while moving the popup player #2772 +• Allow playlists missing an uploader and fix crashes related to this problem #2724, TeamNewPipe/NewPipeExtractor#219 +• Enabling TLS1.1/1.2 on Android 4.4 devices (API 19/KitKat) to fix TLS handshake with MediaCCC and some PeerTube instances #2792 +• [SoundCloud] Fixed client_id extraction TeamNewPipe/NewPipeExtractor#217 +• [SoundCloud] Fix audio stream extraction -Desenvolvimento -- Atualizar ExoPlayer para 2.10.8 #2791, #2816 -- Atualizar o Gradle para 3.5.1 e adicionar o suporte Kotlin #2714 +Development +• Update ExoPlayer to 2.10.8 #2791, #2816 +• Update Gradle to 3.5.1 and add Kotlin support #2714 diff --git a/fastlane/metadata/android/pt-BR/changelogs/810.txt b/fastlane/metadata/android/pt-BR/changelogs/810.txt index 3cb60e434ae..c75855fd18a 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/810.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/810.txt @@ -1,19 +1,19 @@ -Novo -- Mostrar a miniatura do vídeo no ecrã de bloqueio ao tocar em fundo +New +• Show video thumbnail on the lock screen when playing in the background -Melhorado -- Adicionar lista de reprodução local à fila de espera ao premir durante muito tempo no botão de fundo / popup -- Faça com que os separadores da página principal possam ser deslocados e escondidos quando só existe um único separador -- Quantidade limite de actualizações de miniaturas de notificação no leitor de fundo -- Adicionar miniatura de miniatura para listas de reprodução locais vazias -- Use a extensão de ficheiro *.opus em vez de *.webm e mostre "opus" na etiqueta de formato em vez de "WebM Opus" no menu pendente de download -- Adicionar botão para apagar ficheiros descarregados ou histórico de descarregamentos em "Downloads -- [YouTube] Adicionar suporte a /c/shortened_url channel links +Improved +• Add local playlist to queue when long pressing on background / popup button +• Make main page tabs scrollable and hide when there is only a single tab +• Limit amount of notification thumbnail updates in background player +• Add dummy thumbnail for empty local playlists +• Use *.opus file extension instead of *.webm and show "opus" in format label instead of "WebM Opus" in the download dropdown +• Add button to delete downloaded files or download history in "Downloads" +• [YouTube] Add support to /c/shortened_url channel links -Fixa -- Corrigido múltiplos problemas ao partilhar um vídeo para NewPipe e descarregar diretamente os seus fluxos -- Acesso fixo do jogador fora do seu fio de criação -- Paginação fixa de resultados de pesquisa -- Ligar nulo fixo causando NPE -- [YouTube] Comentários de visualização fixos ao abrir uma url invidio.us -- ClientCloud] Client_id actualizado +Fixed +• Fixed multiple issues when sharing a video to NewPipe and downloading its streams directly +• Fixed player access out of its creation thread +• Fixed search result paging +• [YouTube] Fixed switching on null causing NPE +• [YouTube] Fixed viewing comments when opening an invidio.us url +• [SoundCloud] Updated client_id diff --git a/fastlane/metadata/android/pt-BR/changelogs/840.txt b/fastlane/metadata/android/pt-BR/changelogs/840.txt index 4ee1d8ab395..95dc80844c8 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/840.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/840.txt @@ -1,22 +1,22 @@ -Novo -- Adicionado o seletor de língua para alterar a língua da aplicação -- Adicionado enviar para o botão Kodi ao menu desmontável do leitor -- Capacidade adicional de copiar comentários sobre imprensa longa +New +• Added language selector to change the app language +• Added send to Kodi button to player collapsible menu +• Added ability to copy comments on long press -Melhorado -- Fixar a actividade ReCaptcha e guardar corretamente os cookies obtidos -- Removido o ponto-menu a favor da gaveta e botão esconder histórico quando o histórico do relógio não está ativado nas definições -- Pedir permissão de visualização sobre outras aplicações em definições corretamente no Android 6 e posteriores -- Renomear playlist local através de um clique longo em BookmarkFragment -- Vários melhoramentos do PeerTube -- Melhorou várias cadeias de caracteres em inglês +Improved +• Fix ReCaptcha activity and correctly save obtained cookies +• Removed dot-menu in favour of drawer and hide history button when watch history is not enabled in settings +• Ask for display over other apps permission in settings correctly on Android 6 and later +• Rename local playlist by long-clicking in BookmarkFragment +• Various PeerTube improvements +• Improved several English source strings -Fixa -- Jogador fixo a recomeçar, embora seja pausado quando a opção "minimizar no comutador da aplicação" é ativada e o NewPipe é minimizado -- Fixar o valor de brilho inicial para o gesto -- Downloads de subtítulos .srt fixos contendo nem todas as quebras de linha -- Corrigido o download para cartão SD falhando porque alguns dispositivos Android 5 não são compatíveis com CTF -- Descarregamento fixo no Android KitKat -- Ficheiro fixo de vídeo corrupto .mp4 sendo reconhecido como ficheiro de áudio -- Resolvidos problemas de localização múltipla, incluindo códigos de língua chinesa errados -- Os carimbos temporais em descrição podem ser clicados novamente +Fixed +• Fixed player starting again although it is paused when option "minimize on app switch" enabled and NewPipe is minimized +• Fix initial brightness value for gesture +• Fixed .srt subtitle downloads containing not all line breaks +• Fixed download to SD card failing because some Android 5 devices are not CTF compliant +• Fixed downloading on Android KitKat +• Fixed corrupt video .mp4 file being recognized as audio file +• Fixed multiple localization problems, including wrong Chinese language codes +• [YouTube] Timestamps in description are clickable again diff --git a/fastlane/metadata/android/pt-BR/changelogs/850.txt b/fastlane/metadata/android/pt-BR/changelogs/850.txt index d5e7f5dbafb..b3219d7ccd9 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/850.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/850.txt @@ -1 +1 @@ -Neste lançamento, a versão do site do YouTube FOI foi atualizada. A versão Antiga do site será interrompida EM março, portanto, é obrigado a atualizar o NewPipe. +Nesta atualização, a versão do site do YouTube foi atualizada. A versão antiga do site será descontinuada em março e, portanto, você deverá atualizar o NewPipe. diff --git a/fastlane/metadata/android/pt-BR/changelogs/930.txt b/fastlane/metadata/android/pt-BR/changelogs/930.txt index 1ded9e8870f..b23b01ea8ce 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/930.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/930.txt @@ -1,19 +1,19 @@ -Novo -- Pesquisa no YouTube Música -- Suporte básico de TV Android +New +• Search on YouTube Music +• Basic Android TV support -Melhorado -- Adicionada a capacidade de remover todos os vídeos vistos de uma lista de reprodução local -- Mostrar mensagem quando o conteúdo ainda não é suportado, em vez de se chocar -- Reprodutor popup melhorado redimensionado com gestos de beliscão -- Enqueue streams em fundo e botões de popup no canal -- Melhor manuseamento do tamanho do título do cabeçalho da gaveta +Improved +• Added the ability to remove all watched videos from a local playlist +• Show message when content isn't supported yet instead of crashing +• Improved popup player resize with pinch gestures +• Enqueue streams on long press on background and popup buttons in channel +• Improved size handling of the drawer header title -Fixa -- Definição de conteúdo com restrição de idade fixa não funciona -- Fixação de certos tipos de reCAPTCHAs -- Corrigido o crash ao abrir marcadores enquanto a lista de reprodução é "nula". -- Deteção fixa de exceções relacionadas com a rede -- Visibilidade fixa do botão de ordenação do grupo no fragmento de subscrições +Fixed +• Fixed age restricted content setting not working +• Fixed certain kinds of reCAPTCHAs +• Fixed crash when opening bookmarks while playlist is `null` +• Fixed detection of network related exceptions +• Fixed visibility of group sort button in the subscriptions fragment -e mais +and more diff --git a/fastlane/metadata/android/pt-BR/changelogs/954.txt b/fastlane/metadata/android/pt-BR/changelogs/954.txt index cd131c16256..0ba384b5764 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/954.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/954.txt @@ -1,7 +1,7 @@ -• Novo recurso: veja vídeos na página de detalhes, deslize para baixo para minimizar o vídeo -• Notificações MediaStyle: ações personalizáveis em notificações, melhorias de desempenho -• redimensionamento básico ao usar NewPipe como aplicativo de computador -• diálogo com opções abertas se URL não for suportado -• Melhor experiência de sugestão de pesquisa quando não pode ser buscada +• Novidade: toque mídia na página de detalhes e deslize para baixo para minimizar o reprodutor. +• Notificações de mídia: ações personalizáveis nas e melhorias de desempenho +• Redimensionar ao usar o NewPipe como aplicativo de computador +• Diálogo com opções extras se a URL não for suportada +• Melhor experiência de sugestão de pesquisa quando ocorrer erro de interpretação do servidor • Maior qualidade do vídeo padrão para 720p60 no reprodutor interno e 480p no Pop-up -• correções de falhas e mais (?) +• Correções de falhas etc diff --git a/fastlane/metadata/android/pt-BR/changelogs/964.txt b/fastlane/metadata/android/pt-BR/changelogs/964.txt index f2742607441..1238eb87691 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/964.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/964.txt @@ -1,8 +1,8 @@ -• Suporte para capítulos adicionado nos controles do player -• [PeerTube] Busca Sépia adicionada -• Botão de compartilhamento adicionado novamente na visualização de detalhes do vídeo e descrição da transmissão movida para o layout de abas -• Desativação da restauração do brilho se o gesto de brilho estiver desativado -• Item de lista adicionado para reproduzir vídeo no Kodi -• Travamento corrigido quando nenhum navegador padrão está definido em alguns dispositivos e diálogos de compartilhamento aprimorados -• Alternar reprodução/pausa com o botão de espaço físico no player em tela cheia -• [media.ccc.de] Diversas correções e melhorias +• Added support for chapters in player controls +• [PeerTube] Added Sepia search +• Re-added share button in video detail view and moved stream description into the tab layout +• Disable restoring brightness if brightness gesture is disabled +• Added list item to play video on kodi +• Fixed crash when no default browser is set on some devices and improve share dialogs +• Toggle play/pause with hardware space button in fullscreen player +• [media.ccc.de] Various fixes and improvements diff --git a/fastlane/metadata/android/pt-BR/changelogs/966.txt b/fastlane/metadata/android/pt-BR/changelogs/966.txt index 13722dc3463..b7fdc182fa4 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/966.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/966.txt @@ -1,14 +1,14 @@ -Novo: -- Acrescentado um novo serviço: Bandcamp +New: +• Add a new service: Bandcamp -Melhorado: -- Adicionada uma opção para que a aplicação siga o tema do dispositivo -- Previne alguns travamentos mostrando um painel de erros melhorado -- Mostra mais informações sobre as causas da indisponibilidade do conteúdo -- A tecla de espaço de hardware ativa play/pausa -- Mostra "Download iniciado" +Improved: +• Add an option to have the app follow the device theme +• Prevent some crashes by showing an improved error panel +• Show more information on why content in unavailable +• Hardware space button triggers play/pause +• Show "Download started" toast -Resolvido: -- Miniaturas muito pequenas em detalhes de vídeo enquanto se reproduz em fundo -- Corrige título vazio em tocador minimizado -- O último modo de redimensionamento do tamanho não estava sendo restaurado corretamente +Fixed: +• Fix very small thumbnail in video details while playing in the background +• Fix empty title in minimized player +• Fix last resize mode not being restored correctly diff --git a/fastlane/metadata/android/pt-BR/changelogs/968.txt b/fastlane/metadata/android/pt-BR/changelogs/968.txt new file mode 100644 index 00000000000..0e2026fad0a --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/968.txt @@ -0,0 +1,9 @@ +# Melhorias +* Detalhes do canal adicionados ao menu de toque longo. +* Agora é possível renomear playlists diretamente pela interface. +* Permite pausar o vídeo mesmo durante o carregamento (buffering). +* Refinamentos e polimento no tema claro. +# Correções +* Correção de fontes sobrepostas ao usar tamanhos de letra maiores. +* Correção da ausência de vídeo nos aparelhos Formuler e Zephier. +* Correção de diversos erros de fechamento (crashes). diff --git a/fastlane/metadata/android/pt-BR/changelogs/969.txt b/fastlane/metadata/android/pt-BR/changelogs/969.txt new file mode 100644 index 00000000000..ab881f8d30d --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/969.txt @@ -0,0 +1,10 @@ +# Melhorias +Instalação em armazenamento externo (SD). +[Bandcamp] Exibe os 3 primeiros comentários. +Aviso de download aparece apenas ao iniciar. +Sem cookies reCaptcha desnecessários. +[Player] Melhor cache e fluidez. +Correções +[Player] Início automático corrigido. +Fecha avisos antigos ao excluir downloads. +Erro ao excluir item inexistente corrigido. diff --git a/fastlane/metadata/android/pt-BR/changelogs/971.txt b/fastlane/metadata/android/pt-BR/changelogs/971.txt new file mode 100644 index 00000000000..6683d26ec18 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/971.txt @@ -0,0 +1,3 @@ +Correção rápida +• Aumentado o buffer para reprodução após rebuffer +• Corrigido travamento em tablets e TVs ao clicar no ícone da fila de reprodução no player diff --git a/fastlane/metadata/android/pt-BR/changelogs/973.txt b/fastlane/metadata/android/pt-BR/changelogs/973.txt new file mode 100644 index 00000000000..7c052c5e0fe --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/973.txt @@ -0,0 +1,4 @@ +Correção rápida +• Corrigidos miniaturas e títulos sendo cortados no layout em grade, devido a um cálculo errado de quantos vídeos cabem em uma linha +• Corrigido diálogo de download desaparecendo sem fazer nada se aberto pelo menu de compartilhamento +• Atualizada uma biblioteca relacionada à abertura de atividades externas, como o seletor de arquivos do Storage Access Framework diff --git a/fastlane/metadata/android/pt-BR/changelogs/974.txt b/fastlane/metadata/android/pt-BR/changelogs/974.txt new file mode 100644 index 00000000000..a5c24f0cc2a --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/974.txt @@ -0,0 +1,5 @@ +Correção rápida +• Corrigidos problemas de buffer causados pelo throttling do YouTube +• Corrigida extração de comentários do YouTube e travamentos com comentários desativados +• Corrigida a busca de músicas no YouTube +• Corrigidas transmissões ao vivo no PeerTube diff --git a/fastlane/metadata/android/pt-BR/changelogs/976.txt b/fastlane/metadata/android/pt-BR/changelogs/976.txt new file mode 100644 index 00000000000..8560f3f1a40 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/976.txt @@ -0,0 +1,9 @@ +• Foi adicionada a opção de abrir o reprodutor em tela cheia sem clicar novamente. +• Você pode escolher quais sugestões de pesquisa exibir. +• Tema escuro e tela de abertura com preto AMOLED. +• Arquivos incompatíveis aparecem como cinza. +• Importação de inscrições do YouTube corrigida. +• O botão de repetir o vídeo exige apenas um toque. +• Sessão de áudio fecha corretamente. +• [Android TV] Saltos na barra de pesquisa pelo controle remoto corrigidos. +Confira as alterações na aba de links abaixo. diff --git a/fastlane/metadata/android/pt-BR/changelogs/995.txt b/fastlane/metadata/android/pt-BR/changelogs/995.txt index 943b842b0b5..45f55c2fff9 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/995.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/995.txt @@ -1,14 +1,16 @@ -Novidades -• Suporta abas de canal -• Seleção da qualidade da imagem -• Obtém os URL para todas as imagens +New +• Support channel tabs +• Select image quality +• Get URLs to all images -Melhorias -• Acessibilidade das interfaces do reprodutor -• Pode adicionar nome da lista de reprodução e de vídeo para compartilhamento do conteúdo -• Melhorias internas (?) e atualizações de dependências +Improved +• Accessibility of player interfaces +• Better audio selection for video-only downloads +• Option to include playlist and video names to shared playlist content -Corrigido -• Seleção de idiomas errados ao selecionar -• O foco do áudio do reprodutor não respeitava o mudo -• Adicionar itens para listas de reprodução não funcionava em casos específicos +Fixed +• [YouTube] Fix getting like count +• Fix player not responding popups and crashes +• Selection of wrong languages in language picker +• Player audio focus was not respecting mute +• Playlist item addition occasionally not working diff --git a/fastlane/metadata/android/pt-BR/changelogs/998.txt b/fastlane/metadata/android/pt-BR/changelogs/998.txt index 59fc6a5cdb0..65e30eb4501 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/998.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/998.txt @@ -1 +1,4 @@ -Corrigido YouTube não reproduzir qualquer transmissão +Corrigido o YouTube por não reproduzir nenhum vídeo devido a erros HTTP 403. + +Erros HTTP 403 ocasionais no meio de um vídeo do YouTube ainda não foram corrigidos. +Esse problema será resolvido em outra versão de hotfix assim que possível. diff --git a/fastlane/metadata/android/pt-BR/changelogs/999.txt b/fastlane/metadata/android/pt-BR/changelogs/999.txt index 59fc6a5cdb0..b2dac8187ac 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/999.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/999.txt @@ -1 +1,12 @@ -Corrigido YouTube não reproduzir qualquer transmissão +Esta versão de correção corrige erros HTTP 403 no meio dos vídeos do YouTube. + +Novo +• [SoundCloud] Adicionado suporte para URLs on.soundcloud.com + +Melhorado +• [Bandcamp] Exibição de informações adicionais no quiosque de rádio + +Corrigido +• [YouTube] Correção de erros HTTP 403 ocasionais no início ou no meio dos vídeos +• [YouTube] Extração de avatar e banner de mais tipos de cabeçalhos de canal +• [Bandcamp] Correção de vários bugs e uso exclusivo de HTTPS diff --git a/fastlane/metadata/android/zh-Hans/changelogs/972.txt b/fastlane/metadata/android/zh-Hans/changelogs/972.txt index b7c28ef8303..90cb8714921 100644 --- a/fastlane/metadata/android/zh-Hans/changelogs/972.txt +++ b/fastlane/metadata/android/zh-Hans/changelogs/972.txt @@ -1,12 +1,14 @@ 新增 在简介文本中识别时间戳和井号标签 增加手动开启平板模式的设置选项 -允许在订阅中隐藏已播放项目 +允许在订阅源中隐藏已播放项目 + 改进 正确支持存储访问框架 (SAF) 改进不可用和已删号的频道的错误处理 对于Android 10+用户的分享页面现在支持显示内容标题 更新 Invidious 实例 (instances) 并支持 Piped 链接 + 修复 [YouTube]年龄限制内容 打开选择对话框时防止窗口内存泄露异常 From 5b009453f21d3d5d29e8f4a0d6f43b880bc4d5ea Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 4 Feb 2026 16:36:12 +0800 Subject: [PATCH 53/92] Address non-final resource IDs warnings Signed-off-by: Aayush Gupta --- .../java/org/schabi/newpipe/MainActivity.java | 34 +-- .../org/schabi/newpipe/QueueItemMenuUtil.java | 86 +++--- .../newpipe/download/DownloadDialog.java | 260 ++++++++---------- .../list/channel/ChannelFragment.java | 51 ++-- .../list/playlist/PlaylistFragment.java | 53 ++-- .../newpipe/player/PlayQueueActivity.java | 64 ++--- .../giga/ui/adapter/MissionAdapter.java | 170 ++++++------ .../giga/ui/fragment/MissionsFragment.java | 33 +-- gradle.properties | 1 - 9 files changed, 357 insertions(+), 395 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index 8dac39682fc..3c0018d9915 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -309,25 +309,21 @@ private void addDrawerMenuForCurrentService() throws ExtractionException { } private boolean drawerItemSelected(final MenuItem item) { - switch (item.getGroupId()) { - case R.id.menu_services_group: - changeService(item); - break; - case R.id.menu_tabs_group: - tabSelected(item); - break; - case R.id.menu_kiosks_group: - try { - kioskSelected(item); - } catch (final Exception e) { - ErrorUtil.showUiErrorSnackbar(this, "Selecting drawer kiosk", e); - } - break; - case R.id.menu_options_about_group: - optionsAboutSelected(item); - break; - default: - return false; + final int groupId = item.getGroupId(); + if (groupId == R.id.menu_services_group) { + changeService(item); + } else if (groupId == R.id.menu_tabs_group) { + tabSelected(item); + } else if (groupId == R.id.menu_kiosks_group) { + try { + kioskSelected(item); + } catch (final Exception e) { + ErrorUtil.showUiErrorSnackbar(this, "Selecting drawer kiosk", e); + } + } else if (groupId == R.id.menu_options_about_group) { + optionsAboutSelected(item); + } else { + return false; } mainBinding.getRoot().closeDrawers(); diff --git a/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java b/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java index e6177f6a358..3eeb912c851 100644 --- a/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java +++ b/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java @@ -41,50 +41,50 @@ public static void openPopupMenu(final PlayQueue playQueue, } popupMenu.setOnMenuItemClickListener(menuItem -> { - switch (menuItem.getItemId()) { - case R.id.menu_item_remove: - final int index = playQueue.indexOf(item); - playQueue.remove(index); - return true; - case R.id.menu_item_details: - // playQueue is null since we don't want any queue change - NavigationHelper.openVideoDetail(context, item.getServiceId(), - item.getUrl(), item.getTitle(), null, - false); - return true; - case R.id.menu_item_append_playlist: - PlaylistDialog.createCorrespondingDialog( - context, - List.of(new StreamEntity(item)), - dialog -> dialog.show( - fragmentManager, - "QueueItemMenuUtil@append_playlist" - ) - ); + final int itemId = menuItem.getItemId(); + if (itemId == R.id.menu_item_remove) { + final int index = playQueue.indexOf(item); + playQueue.remove(index); + return true; + } else if (itemId == R.id.menu_item_details) { + // playQueue is null since we don't want any queue change + NavigationHelper.openVideoDetail(context, item.getServiceId(), + item.getUrl(), item.getTitle(), null, + false); + return true; + } else if (itemId == R.id.menu_item_append_playlist) { + PlaylistDialog.createCorrespondingDialog( + context, + List.of(new StreamEntity(item)), + dialog -> dialog.show( + fragmentManager, + "QueueItemMenuUtil@append_playlist" + ) + ); - return true; - case R.id.menu_item_channel_details: - SparseItemUtil.fetchUploaderUrlIfSparse(context, item.getServiceId(), - item.getUrl(), item.getUploaderUrl(), - // An intent must be used here. - // Opening with FragmentManager transactions is not working, - // as PlayQueueActivity doesn't use fragments. - uploaderUrl -> NavigationHelper.openChannelFragmentUsingIntent( - context, item.getServiceId(), uploaderUrl, item.getUploader() - )); - return true; - case R.id.menu_item_share: - shareText(context, item.getTitle(), item.getUrl(), - item.getThumbnails()); - return true; - case R.id.menu_item_download: - fetchStreamInfoAndSaveToDatabase(context, item.getServiceId(), item.getUrl(), - info -> { - final DownloadDialog downloadDialog = new DownloadDialog(context, - info); - downloadDialog.show(fragmentManager, "downloadDialog"); - }); - return true; + return true; + } else if (itemId == R.id.menu_item_channel_details) { + SparseItemUtil.fetchUploaderUrlIfSparse(context, item.getServiceId(), + item.getUrl(), item.getUploaderUrl(), + // An intent must be used here. + // Opening with FragmentManager transactions is not working, + // as PlayQueueActivity doesn't use fragments. + uploaderUrl -> NavigationHelper.openChannelFragmentUsingIntent( + context, item.getServiceId(), uploaderUrl, item.getUploader() + )); + return true; + } else if (itemId == R.id.menu_item_share) { + shareText(context, item.getTitle(), item.getUrl(), + item.getThumbnails()); + return true; + } else if (itemId == R.id.menu_item_download) { + fetchStreamInfoAndSaveToDatabase(context, item.getServiceId(), item.getUrl(), + info -> { + final DownloadDialog downloadDialog = new DownloadDialog(context, + info); + downloadDialog.show(fragmentManager, "downloadDialog"); + }); + return true; } return false; }); diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java index 741bda24633..d7cd75054cf 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java @@ -558,17 +558,13 @@ public void onCheckedChanged(final RadioGroup group, @IdRes final int checkedId) } boolean flag = true; - switch (checkedId) { - case R.id.audio_button: - setupAudioSpinner(); - break; - case R.id.video_button: - setupVideoSpinner(); - break; - case R.id.subtitle_button: - setupSubtitleSpinner(); - flag = false; - break; + if (checkedId == R.id.audio_button) { + setupAudioSpinner(); + } else if (checkedId == R.id.video_button) { + setupVideoSpinner(); + } else if (checkedId == R.id.subtitle_button) { + setupSubtitleSpinner(); + flag = false; } dialogBinding.threads.setEnabled(flag); @@ -585,29 +581,26 @@ public void onItemSelected(final AdapterView parent, + "position = [" + position + "], id = [" + id + "]"); } - switch (parent.getId()) { - case R.id.quality_spinner: - switch (dialogBinding.videoAudioGroup.getCheckedRadioButtonId()) { - case R.id.video_button: - selectedVideoIndex = position; - onVideoStreamSelected(); - break; - case R.id.subtitle_button: - selectedSubtitleIndex = position; - break; - } - onItemSelectedSetFileName(); - break; - case R.id.audio_track_spinner: - final boolean trackChanged = selectedAudioTrackIndex != position; - selectedAudioTrackIndex = position; - if (trackChanged) { - updateSecondaryStreams(); - fetchStreamsSize(); - } - break; - case R.id.audio_stream_spinner: - selectedAudioIndex = position; + final int parentId = parent.getId(); + if (parentId == R.id.quality_spinner) { + final int checkedRadioButtonId = dialogBinding.videoAudioGroup + .getCheckedRadioButtonId(); + if (checkedRadioButtonId == R.id.video_button) { + selectedVideoIndex = position; + onVideoStreamSelected(); + } else if (checkedRadioButtonId == R.id.subtitle_button) { + selectedSubtitleIndex = position; + } + onItemSelectedSetFileName(); + } else if (parentId == R.id.audio_track_spinner) { + final boolean trackChanged = selectedAudioTrackIndex != position; + selectedAudioTrackIndex = position; + if (trackChanged) { + updateSecondaryStreams(); + fetchStreamsSize(); + } + } else if (parentId == R.id.audio_stream_spinner) { + selectedAudioIndex = position; } } @@ -622,23 +615,20 @@ private void onItemSelectedSetFileName() { || prevFileName.startsWith(getString(R.string.caption_file_name, fileName, ""))) { // only update the file name field if it was not edited by the user - switch (dialogBinding.videoAudioGroup.getCheckedRadioButtonId()) { - case R.id.audio_button: - case R.id.video_button: - if (!prevFileName.equals(fileName)) { - // since the user might have switched between audio and video, the correct - // text might already be in place, so avoid resetting the cursor position - dialogBinding.fileName.setText(fileName); - } - break; - - case R.id.subtitle_button: - final String setSubtitleLanguageCode = subtitleStreamsAdapter - .getItem(selectedSubtitleIndex).getLanguageTag(); - // this will reset the cursor position, which is bad UX, but it can't be avoided - dialogBinding.fileName.setText(getString( - R.string.caption_file_name, fileName, setSubtitleLanguageCode)); - break; + final int radioButtonId = dialogBinding.videoAudioGroup + .getCheckedRadioButtonId(); + if (radioButtonId == R.id.audio_button || radioButtonId == R.id.video_button) { + if (!prevFileName.equals(fileName)) { + // since the user might have switched between audio and video, the correct + // text might already be in place, so avoid resetting the cursor position + dialogBinding.fileName.setText(fileName); + } + } else if (radioButtonId == R.id.subtitle_button) { + final String setSubtitleLanguageCode = subtitleStreamsAdapter + .getItem(selectedSubtitleIndex).getLanguageTag(); + // this will reset the cursor position, which is bad UX, but it can't be avoided + dialogBinding.fileName.setText(getString( + R.string.caption_file_name, fileName, setSubtitleLanguageCode)); } } } @@ -770,47 +760,44 @@ private void prepareSelectedDownload() { filenameTmp = getNameEditText().concat("."); - switch (dialogBinding.videoAudioGroup.getCheckedRadioButtonId()) { - case R.id.audio_button: - selectedMediaType = getString(R.string.last_download_type_audio_key); - mainStorage = mainStorageAudio; - format = audioStreamsAdapter.getItem(selectedAudioIndex).getFormat(); - size = getWrappedAudioStreams().getSizeInBytes(selectedAudioIndex); - if (format == MediaFormat.WEBMA_OPUS) { - mimeTmp = "audio/ogg"; - filenameTmp += "opus"; - } else if (format != null) { - mimeTmp = format.mimeType; - filenameTmp += format.getSuffix(); - } - break; - case R.id.video_button: - selectedMediaType = getString(R.string.last_download_type_video_key); - mainStorage = mainStorageVideo; - format = videoStreamsAdapter.getItem(selectedVideoIndex).getFormat(); - size = wrappedVideoStreams.getSizeInBytes(selectedVideoIndex); - if (format != null) { - mimeTmp = format.mimeType; - filenameTmp += format.getSuffix(); - } - break; - case R.id.subtitle_button: - selectedMediaType = getString(R.string.last_download_type_subtitle_key); - mainStorage = mainStorageVideo; // subtitle & video files go together - format = subtitleStreamsAdapter.getItem(selectedSubtitleIndex).getFormat(); - size = wrappedSubtitleStreams.getSizeInBytes(selectedSubtitleIndex); - if (format != null) { - mimeTmp = format.mimeType; - } + final int checkedRadioButtonId = dialogBinding.videoAudioGroup.getCheckedRadioButtonId(); + if (checkedRadioButtonId == R.id.audio_button) { + selectedMediaType = getString(R.string.last_download_type_audio_key); + mainStorage = mainStorageAudio; + format = audioStreamsAdapter.getItem(selectedAudioIndex).getFormat(); + size = getWrappedAudioStreams().getSizeInBytes(selectedAudioIndex); + if (format == MediaFormat.WEBMA_OPUS) { + mimeTmp = "audio/ogg"; + filenameTmp += "opus"; + } else if (format != null) { + mimeTmp = format.mimeType; + filenameTmp += format.getSuffix(); + } + } else if (checkedRadioButtonId == R.id.video_button) { + selectedMediaType = getString(R.string.last_download_type_video_key); + mainStorage = mainStorageVideo; + format = videoStreamsAdapter.getItem(selectedVideoIndex).getFormat(); + size = wrappedVideoStreams.getSizeInBytes(selectedVideoIndex); + if (format != null) { + mimeTmp = format.mimeType; + filenameTmp += format.getSuffix(); + } + } else if (checkedRadioButtonId == R.id.subtitle_button) { + selectedMediaType = getString(R.string.last_download_type_subtitle_key); + mainStorage = mainStorageVideo; // subtitle & video files go together + format = subtitleStreamsAdapter.getItem(selectedSubtitleIndex).getFormat(); + size = wrappedSubtitleStreams.getSizeInBytes(selectedSubtitleIndex); + if (format != null) { + mimeTmp = format.mimeType; + } - if (format == MediaFormat.TTML) { - filenameTmp += MediaFormat.SRT.getSuffix(); - } else if (format != null) { - filenameTmp += format.getSuffix(); - } - break; - default: - throw new RuntimeException("No stream selected"); + if (format == MediaFormat.TTML) { + filenameTmp += MediaFormat.SRT.getSuffix(); + } else if (format != null) { + filenameTmp += format.getSuffix(); + } + } else { + throw new RuntimeException("No stream selected"); } if (!askForSavePath && (mainStorage == null @@ -1057,59 +1044,56 @@ private void continueSelectedDownload(@NonNull final StoredFileHelper storage) { long nearLength = 0; // more download logic: select muxer, subtitle converter, etc. - switch (dialogBinding.videoAudioGroup.getCheckedRadioButtonId()) { - case R.id.audio_button: - kind = 'a'; - selectedStream = audioStreamsAdapter.getItem(selectedAudioIndex); - - if (selectedStream.getFormat() == MediaFormat.M4A) { - psName = Postprocessing.ALGORITHM_M4A_NO_DASH; - } else if (selectedStream.getFormat() == MediaFormat.WEBMA_OPUS) { - psName = Postprocessing.ALGORITHM_OGG_FROM_WEBM_DEMUXER; - } - break; - case R.id.video_button: - kind = 'v'; - selectedStream = videoStreamsAdapter.getItem(selectedVideoIndex); + final int checkedRadioButtonId = dialogBinding.videoAudioGroup.getCheckedRadioButtonId(); + if (checkedRadioButtonId == R.id.audio_button) { + kind = 'a'; + selectedStream = audioStreamsAdapter.getItem(selectedAudioIndex); + + if (selectedStream.getFormat() == MediaFormat.M4A) { + psName = Postprocessing.ALGORITHM_M4A_NO_DASH; + } else if (selectedStream.getFormat() == MediaFormat.WEBMA_OPUS) { + psName = Postprocessing.ALGORITHM_OGG_FROM_WEBM_DEMUXER; + } + } else if (checkedRadioButtonId == R.id.video_button) { + kind = 'v'; + selectedStream = videoStreamsAdapter.getItem(selectedVideoIndex); - final SecondaryStreamHelper secondary = videoStreamsAdapter - .getAllSecondary() - .get(wrappedVideoStreams.getStreamsList().indexOf(selectedStream)); + final SecondaryStreamHelper secondary = videoStreamsAdapter + .getAllSecondary() + .get(wrappedVideoStreams.getStreamsList().indexOf(selectedStream)); - if (secondary != null) { - secondaryStream = secondary.getStream(); + if (secondary != null) { + secondaryStream = secondary.getStream(); - if (selectedStream.getFormat() == MediaFormat.MPEG_4) { - psName = Postprocessing.ALGORITHM_MP4_FROM_DASH_MUXER; - } else { - psName = Postprocessing.ALGORITHM_WEBM_MUXER; - } + if (selectedStream.getFormat() == MediaFormat.MPEG_4) { + psName = Postprocessing.ALGORITHM_MP4_FROM_DASH_MUXER; + } else { + psName = Postprocessing.ALGORITHM_WEBM_MUXER; + } - final long videoSize = wrappedVideoStreams.getSizeInBytes( - (VideoStream) selectedStream); + final long videoSize = wrappedVideoStreams.getSizeInBytes( + (VideoStream) selectedStream); - // set nearLength, only, if both sizes are fetched or known. This probably - // does not work on slow networks but is later updated in the downloader - if (secondary.getSizeInBytes() > 0 && videoSize > 0) { - nearLength = secondary.getSizeInBytes() + videoSize; - } + // set nearLength, only, if both sizes are fetched or known. This probably + // does not work on slow networks but is later updated in the downloader + if (secondary.getSizeInBytes() > 0 && videoSize > 0) { + nearLength = secondary.getSizeInBytes() + videoSize; } - break; - case R.id.subtitle_button: - threads = 1; // use unique thread for subtitles due small file size - kind = 's'; - selectedStream = subtitleStreamsAdapter.getItem(selectedSubtitleIndex); - - if (selectedStream.getFormat() == MediaFormat.TTML) { - psName = Postprocessing.ALGORITHM_TTML_CONVERTER; - psArgs = new String[] { - selectedStream.getFormat().getSuffix(), - "false" // ignore empty frames - }; - } - break; - default: - return; + } + } else if (checkedRadioButtonId == R.id.subtitle_button) { + threads = 1; // use unique thread for subtitles due small file size + kind = 's'; + selectedStream = subtitleStreamsAdapter.getItem(selectedSubtitleIndex); + + if (selectedStream.getFormat() == MediaFormat.TTML) { + psName = Postprocessing.ALGORITHM_TTML_CONVERTER; + psArgs = new String[]{ + selectedStream.getFormat().getSuffix(), + "false" // ignore empty frames + }; + } + } else { + return; } if (secondaryStream == null) { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index d75d14b4ada..878ceb1391d 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -160,34 +160,29 @@ public void onPrepareMenu(@NonNull final Menu menu) { @Override public boolean onMenuItemSelected(@NonNull final MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_item_notify: - final boolean value = !item.isChecked(); - item.setEnabled(false); - setNotify(value); - break; - case R.id.action_settings: - NavigationHelper.openSettings(requireContext()); - break; - case R.id.menu_item_rss: - if (currentInfo != null) { - ShareUtils.openUrlInApp(requireContext(), currentInfo.getFeedUrl()); - } - break; - case R.id.menu_item_openInBrowser: - if (currentInfo != null) { - ShareUtils.openUrlInBrowser(requireContext(), - currentInfo.getOriginalUrl()); - } - break; - case R.id.menu_item_share: - if (currentInfo != null) { - ShareUtils.shareText(requireContext(), name, - currentInfo.getOriginalUrl(), currentInfo.getAvatars()); - } - break; - default: - return false; + final int itemId = item.getItemId(); + if (itemId == R.id.menu_item_notify) { + final boolean value = !item.isChecked(); + item.setEnabled(false); + setNotify(value); + } else if (itemId == R.id.action_settings) { + NavigationHelper.openSettings(requireContext()); + } else if (itemId == R.id.menu_item_rss) { + if (currentInfo != null) { + ShareUtils.openUrlInApp(requireContext(), currentInfo.getFeedUrl()); + } + } else if (itemId == R.id.menu_item_openInBrowser) { + if (currentInfo != null) { + ShareUtils.openUrlInBrowser(requireContext(), + currentInfo.getOriginalUrl()); + } + } else if (itemId == R.id.menu_item_share) { + if (currentInfo != null) { + ShareUtils.shareText(requireContext(), name, + currentInfo.getOriginalUrl(), currentInfo.getAvatars()); + } + } else { + return false; } return true; } 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 6410fb9ee75..ee6a0922c0f 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 @@ -232,35 +232,30 @@ protected Single loadResult(final boolean forceLoad) { @Override public boolean onOptionsItemSelected(final MenuItem item) { - switch (item.getItemId()) { - case R.id.action_settings: - NavigationHelper.openSettings(requireContext()); - break; - case R.id.menu_item_openInBrowser: - ShareUtils.openUrlInBrowser(requireContext(), url); - break; - case R.id.menu_item_share: - ShareUtils.shareText(requireContext(), name, url, - currentInfo == null ? List.of() : currentInfo.getThumbnails()); - break; - case R.id.menu_item_bookmark: - onBookmarkClicked(); - break; - case R.id.menu_item_append_playlist: - if (currentInfo != null) { - disposables.add(PlaylistDialog.createCorrespondingDialog( - getContext(), - getPlayQueue() - .getStreams() - .stream() - .map(StreamEntity::new) - .collect(Collectors.toList()), - dialog -> dialog.show(getFM(), TAG) - )); - } - break; - default: - return super.onOptionsItemSelected(item); + final int itemId = item.getItemId(); + if (itemId == R.id.action_settings) { + NavigationHelper.openSettings(requireContext()); + } else if (itemId == R.id.menu_item_openInBrowser) { + ShareUtils.openUrlInBrowser(requireContext(), url); + } else if (itemId == R.id.menu_item_share) { + ShareUtils.shareText(requireContext(), name, url, + currentInfo == null ? List.of() : currentInfo.getThumbnails()); + } else if (itemId == R.id.menu_item_bookmark) { + onBookmarkClicked(); + } else if (itemId == R.id.menu_item_append_playlist) { + if (currentInfo != null) { + disposables.add(PlaylistDialog.createCorrespondingDialog( + getContext(), + getPlayQueue() + .getStreams() + .stream() + .map(StreamEntity::new) + .collect(Collectors.toList()), + dialog -> dialog.show(getFM(), TAG) + )); + } + } else { + return super.onOptionsItemSelected(item); } return true; } diff --git a/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java b/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java index 06b33f86189..b6bb84ec6c7 100644 --- a/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java +++ b/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java @@ -127,39 +127,39 @@ public boolean onPrepareOptionsMenu(final Menu m) { @Override public boolean onOptionsItemSelected(final MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - finish(); - return true; - case R.id.action_settings: - NavigationHelper.openSettings(this); - return true; - case R.id.action_append_playlist: - PlaylistDialog.showForPlayQueue(player, getSupportFragmentManager()); - return true; - case R.id.action_playback_speed: - openPlaybackParameterDialog(); - return true; - case R.id.action_mute: - player.toggleMute(); - return true; - case R.id.action_system_audio: - startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS)); - return true; - case R.id.action_switch_main: - this.player.setRecovery(); - NavigationHelper.playOnMainPlayer(this, player.getPlayQueue(), true); - return true; - case R.id.action_switch_popup: - if (PermissionHelper.isPopupEnabledElseAsk(this)) { - this.player.setRecovery(); - NavigationHelper.playOnPopupPlayer(this, player.getPlayQueue(), true); - } - return true; - case R.id.action_switch_background: + final int itemId = item.getItemId(); + if (itemId == android.R.id.home) { + finish(); + return true; + } else if (itemId == R.id.action_settings) { + NavigationHelper.openSettings(this); + return true; + } else if (itemId == R.id.action_append_playlist) { + PlaylistDialog.showForPlayQueue(player, getSupportFragmentManager()); + return true; + } else if (itemId == R.id.action_playback_speed) { + openPlaybackParameterDialog(); + return true; + } else if (itemId == R.id.action_mute) { + player.toggleMute(); + return true; + } else if (itemId == R.id.action_system_audio) { + startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS)); + return true; + } else if (itemId == R.id.action_switch_main) { + this.player.setRecovery(); + NavigationHelper.playOnMainPlayer(this, player.getPlayQueue(), true); + return true; + } else if (itemId == R.id.action_switch_popup) { + if (PermissionHelper.isPopupEnabledElseAsk(this)) { this.player.setRecovery(); - NavigationHelper.playOnBackgroundPlayer(this, player.getPlayQueue(), true); - return true; + NavigationHelper.playOnPopupPlayer(this, player.getPlayQueue(), true); + } + return true; + } else if (itemId == R.id.action_switch_background) { + this.player.setRecovery(); + NavigationHelper.playOnBackgroundPlayer(this, player.getPlayQueue(), true); + return true; } if (item.getGroupId() == MENU_ID_AUDIO_TRACK) { 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 54ae2cfa4e7..45ffcb331b8 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 @@ -632,103 +632,95 @@ private boolean handlePopupItem(@NonNull ViewHolderItem h, @NonNull MenuItem opt DownloadMission mission = h.item.mission instanceof DownloadMission ? (DownloadMission) h.item.mission : null; if (mission != null) { - switch (id) { - case R.id.start: - h.status.setText(UNDEFINED_PROGRESS); - mDownloadManager.resumeMission(mission); - return true; - case R.id.pause: - mDownloadManager.pauseMission(mission); - return true; - case R.id.error_message_view: - showError(mission); - return true; - case R.id.queue: - boolean flag = !h.queue.isChecked(); - h.queue.setChecked(flag); - mission.setEnqueued(flag); - updateProgress(h); - return true; - case R.id.retry: - if (mission.isPsRunning()) { - mission.psContinue(true); - } else { - mDownloadManager.tryRecover(mission); - if (mission.storage.isInvalid()) - mRecover.tryRecover(mission); - else - recoverMission(mission); - } - return true; - case R.id.cancel: - mission.psContinue(false); - return false; - } - } - - switch (id) { - case R.id.menu_item_share: - shareFile(h.item.mission); + if (id == R.id.start) { + h.status.setText(UNDEFINED_PROGRESS); + mDownloadManager.resumeMission(mission); return true; - case R.id.delete: - // delete the entry and the file - mDeleter.append(h.item.mission, true); - applyChanges(); - checkMasterButtonsVisibility(); + } else if (id == R.id.pause) { + mDownloadManager.pauseMission(mission); return true; - case R.id.delete_entry: - // just delete the entry - mDeleter.append(h.item.mission, false); - applyChanges(); - checkMasterButtonsVisibility(); + } else if (id == R.id.error_message_view) { + showError(mission); return true; - case R.id.md5: - case R.id.sha1: - final StoredFileHelper storage = h.item.mission.storage; - if (!storage.existsAsFile()) { - Toast.makeText(mContext, R.string.missing_file, Toast.LENGTH_SHORT).show(); - mDeleter.append(h.item.mission, true); - applyChanges(); - return true; - } - 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()); - compositeDisposable.add( - Observable.fromCallable(() -> Utility.checksum(storage, id)) - .subscribeOn(Schedulers.computation()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(result -> { - ShareUtils.copyToClipboard(mContext, result); - notificationManager.cancel(HASH_NOTIFICATION_ID); - }) - ); + } else if (id == R.id.queue) { + boolean flag = !h.queue.isChecked(); + h.queue.setChecked(flag); + mission.setEnqueued(flag); + updateProgress(h); return true; - case R.id.source: - /*Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(h.item.mission.source)); - mContext.startActivity(intent);*/ - try { - Intent intent = NavigationHelper.getIntentByLink(mContext, h.item.mission.source); - intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); - mContext.startActivity(intent); - } catch (Exception e) { - Log.w(TAG, "Selected item has a invalid source", e); + } else if (id == R.id.retry) { + if (mission.isPsRunning()) { + mission.psContinue(true); + } else { + mDownloadManager.tryRecover(mission); + if (mission.storage.isInvalid()) + mRecover.tryRecover(mission); + else + recoverMission(mission); } return true; - default: + } else if (id == R.id.cancel) { + mission.psContinue(false); return false; + } + } + + if (id == R.id.menu_item_share) { + shareFile(h.item.mission); + return true; + } else if (id == R.id.delete) {// delete the entry and the file + mDeleter.append(h.item.mission, true); + applyChanges(); + checkMasterButtonsVisibility(); + return true; + } else if (id == R.id.delete_entry) {// just delete the entry + mDeleter.append(h.item.mission, false); + applyChanges(); + checkMasterButtonsVisibility(); + return true; + } else if (id == R.id.md5 || id == R.id.sha1) { + final StoredFileHelper storage = h.item.mission.storage; + if (!storage.existsAsFile()) { + Toast.makeText(mContext, R.string.missing_file, Toast.LENGTH_SHORT).show(); + mDeleter.append(h.item.mission, true); + applyChanges(); + return true; + } + 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()); + compositeDisposable.add( + Observable.fromCallable(() -> Utility.checksum(storage, id)) + .subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(result -> { + ShareUtils.copyToClipboard(mContext, result); + notificationManager.cancel(HASH_NOTIFICATION_ID); + }) + ); + return true; + } else if (id == R.id.source) { + try { + Intent intent = NavigationHelper.getIntentByLink(mContext, h.item.mission.source); + intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); + mContext.startActivity(intent); + } catch (Exception e) { + Log.w(TAG, "Selected item has a invalid source", e); + } + return true; } + return false; } public void applyChanges() { diff --git a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java index 690ed4a9735..ddd9ba42607 100644 --- a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java +++ b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java @@ -186,23 +186,24 @@ public void onPrepareOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.switch_mode: - mLinear = !mLinear; - updateList(); - return true; - case R.id.clear_list: - showClearDownloadHistoryPrompt(); - return true; - case R.id.start_downloads: - mBinder.getDownloadManager().startAllMissions(); - return true; - case R.id.pause_downloads: - mBinder.getDownloadManager().pauseAllMissions(false); - mAdapter.refreshMissionItems();// update items view - default: - return super.onOptionsItemSelected(item); + int itemId = item.getItemId(); + if (itemId == R.id.switch_mode) { + mLinear = !mLinear; + updateList(); + return true; + } else if (itemId == R.id.clear_list) { + showClearDownloadHistoryPrompt(); + return true; + } else if (itemId == R.id.start_downloads) { + mBinder.getDownloadManager().startAllMissions(); + return true; + } else if (itemId == R.id.pause_downloads) { + mBinder.getDownloadManager().pauseAllMissions(false); + mAdapter.refreshMissionItems();// update items view + + return super.onOptionsItemSelected(item); } + return super.onOptionsItemSelected(item); } public void showClearDownloadHistoryPrompt() { diff --git a/gradle.properties b/gradle.properties index a529a42c8cb..1a8297ddf87 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,3 @@ -android.nonFinalResIds=false android.useAndroidX=true org.gradle.jvmargs=-Xmx2048M --add-opens jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED systemProp.file.encoding=utf-8 From 8c016c95d296b778d64d6ab4e4f54bdf30e364c6 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 4 Feb 2026 16:39:30 +0800 Subject: [PATCH 54/92] Enable resources shrinking AGP 9.0.0 has introduced additional resource shrinking tasks. Its better to enable and fix this. Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index af0a5171bad..e2fa9dfdba8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -79,7 +79,7 @@ configure { resValue("string", "app_name", "NewPipe $suffix") } isMinifyEnabled = true - isShrinkResources = false // disabled to fix F-Droid"s reproducible build + isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" From 89cb87b2a9b9f08a7224b550759e3981a4b7bc94 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 4 Feb 2026 16:46:36 +0800 Subject: [PATCH 55/92] Introduce lint configuration and enable checks Supress missing translation errors as they are done by volunteers Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 8 ++------ app/lint.xml | 8 ++++++++ 2 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 app/lint.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e2fa9dfdba8..e72fcfcfc97 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -88,13 +88,9 @@ configure { } lint { - checkReleaseBuilds = false - // Or, if you prefer, you can continue to check for errors in release builds, - // but continue the build even when errors are found: + lintConfig = file("lint.xml") + // Continue the debug build even when errors are found abortOnError = false - // suppress false warning ("Resource IDs will be non-final in Android Gradle Plugin version - // 5.0, avoid using them in switch case statements"), which affects only library projects - disable += "NonConstantResourceId" } compileOptions { diff --git a/app/lint.xml b/app/lint.xml new file mode 100644 index 00000000000..d07ece5ea7b --- /dev/null +++ b/app/lint.xml @@ -0,0 +1,8 @@ + + + + + From 582f852e7adcdecc2d493e05f943b01dd5941b65 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 12:56:37 +0800 Subject: [PATCH 56/92] Add missing permission checks for notifications Notifications can be disabled manually even after permission has been granted once. Always check if they are enabled before notifying the user. Signed-off-by: Aayush Gupta --- .../org/schabi/newpipe/NewVersionWorker.kt | 4 +++- .../org/schabi/newpipe/error/ErrorUtil.kt | 7 +++++-- .../feed/notifications/NotificationHelper.kt | 21 ++++++++++++------- .../local/feed/service/FeedLoadService.kt | 4 +++- .../services/BaseImportExportService.java | 9 ++++++-- .../player/notification/NotificationUtil.java | 8 +++++-- 6 files changed, 38 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/NewVersionWorker.kt b/app/src/main/java/org/schabi/newpipe/NewVersionWorker.kt index fb48d3f7055..4cdcc6c691a 100644 --- a/app/src/main/java/org/schabi/newpipe/NewVersionWorker.kt +++ b/app/src/main/java/org/schabi/newpipe/NewVersionWorker.kt @@ -82,7 +82,9 @@ class NewVersionWorker( ) val notificationManager = NotificationManagerCompat.from(applicationContext) - notificationManager.notify(2000, notificationBuilder.build()) + if (notificationManager.areNotificationsEnabled()) { + notificationManager.notify(2000, notificationBuilder.build()) + } } @Throws(IOException::class, ReCaptchaException::class) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorUtil.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorUtil.kt index 7facb5d8566..0fa302623b5 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorUtil.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorUtil.kt @@ -134,8 +134,11 @@ class ErrorUtil { ) ) - NotificationManagerCompat.from(context) - .notify(ERROR_REPORT_NOTIFICATION_ID, notificationBuilder.build()) + val notificationManager = NotificationManagerCompat.from(context) + if (notificationManager.areNotificationsEnabled()) { + notificationManager + .notify(ERROR_REPORT_NOTIFICATION_ID, notificationBuilder.build()) + } ContextCompat.getMainExecutor(context).execute { // since the notification is silent, also show a toast, otherwise the user is confused diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt b/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt index d2d16a75587..aa03aafc54c 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt @@ -92,8 +92,10 @@ class NotificationHelper(val context: Context) { // Show individual stream notifications, set channel icon only if there is actually // one showStreamNotifications(newStreams, data.serviceId, data.url, bitmap) - // Show summary notification - manager.notify(data.pseudoId, summaryBuilder.build()) + // Show summary notification if enabled + if (manager.areNotificationsEnabled()) { + manager.notify(data.pseudoId, summaryBuilder.build()) + } iconLoadingTargets.remove(this) // allow it to be garbage-collected } @@ -101,8 +103,10 @@ class NotificationHelper(val context: Context) { override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) { // Show individual stream notifications showStreamNotifications(newStreams, data.serviceId, data.url, null) - // Show summary notification - manager.notify(data.pseudoId, summaryBuilder.build()) + // Show summary notification if enabled + if (manager.areNotificationsEnabled()) { + manager.notify(data.pseudoId, summaryBuilder.build()) + } iconLoadingTargets.remove(this) // allow it to be garbage-collected } @@ -124,9 +128,12 @@ class NotificationHelper(val context: Context) { channelUrl: String, channelIcon: Bitmap? ) { - for (stream in newStreams) { - val notification = createStreamNotification(stream, serviceId, channelUrl, channelIcon) - manager.notify(stream.url.hashCode(), notification) + if (manager.areNotificationsEnabled()) { + newStreams.forEach { stream -> + val notification = + createStreamNotification(stream, serviceId, channelUrl, channelIcon) + manager.notify(stream.url.hashCode(), notification) + } } } 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 48ad5df94c9..bd128b3bc3f 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 @@ -185,7 +185,9 @@ class FeedLoadService : Service() { } } - notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()) + if (notificationManager.areNotificationsEnabled()) { + notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()) + } } // ///////////////////////////////////////////////////////////////////////// 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 b7c11b1605d..850409e2558 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 @@ -144,7 +144,9 @@ protected void updateNotification(final String text) { notificationBuilder.setContentText(text); } - notificationManager.notify(getNotificationId(), notificationBuilder.build()); + if (notificationManager.areNotificationsEnabled()) { + notificationManager.notify(getNotificationId(), notificationBuilder.build()); + } } protected void stopService() { @@ -174,7 +176,10 @@ protected void postErrorResult(final String title, final String text) { .setContentTitle(title) .setStyle(new NotificationCompat.BigTextStyle().bigText(textOrEmpty)) .setContentText(textOrEmpty); - notificationManager.notify(getNotificationId(), notificationBuilder.build()); + + if (notificationManager.areNotificationsEnabled()) { + notificationManager.notify(getNotificationId(), notificationBuilder.build()); + } } protected NotificationCompat.Builder createNotification() { diff --git a/app/src/main/java/org/schabi/newpipe/player/notification/NotificationUtil.java b/app/src/main/java/org/schabi/newpipe/player/notification/NotificationUtil.java index 9b9c47b0e85..be98abb7a2e 100644 --- a/app/src/main/java/org/schabi/newpipe/player/notification/NotificationUtil.java +++ b/app/src/main/java/org/schabi/newpipe/player/notification/NotificationUtil.java @@ -72,7 +72,9 @@ public synchronized void createNotificationIfNeededAndUpdate(final boolean force notificationBuilder = createNotification(); } updateNotification(); - notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + if (notificationManager.areNotificationsEnabled()) { + notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + } } public synchronized void updateThumbnail() { @@ -84,7 +86,9 @@ public synchronized void updateThumbnail() { } setLargeIcon(notificationBuilder); - notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + if (notificationManager.areNotificationsEnabled()) { + notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + } } } From 2f3a993f8e4549d382872a36dadf89e22575edfa Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 12:58:14 +0800 Subject: [PATCH 57/92] ReCaptchaActivity: Supress lint error for missing super call saveCookiesAndFinish method handles back navigation Signed-off-by: Aayush Gupta --- .../main/java/org/schabi/newpipe/error/ReCaptchaActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java index 51a0ff1e632..811671039c9 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java +++ b/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java @@ -126,6 +126,7 @@ public boolean onCreateOptionsMenu(final Menu menu) { } @Override + @SuppressLint("MissingSuperCall") // saveCookiesAndFinish method handles back navigation public void onBackPressed() { saveCookiesAndFinish(); } From deb6b4230d4b2a41aaf8e4d155a2312e9ec349ee Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 13:03:13 +0800 Subject: [PATCH 58/92] FinishedMIssionStore: Throw exception if column is missing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ../../src/main/java/us/shandian/giga/get/sqlite/FinishedMissionStore.java:105: Value must be ≥ 0 but getColumnIndex can be -1 Signed-off-by: Aayush Gupta --- .../giga/get/sqlite/FinishedMissionStore.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/us/shandian/giga/get/sqlite/FinishedMissionStore.java b/app/src/main/java/us/shandian/giga/get/sqlite/FinishedMissionStore.java index 704385212ab..215a6553b2f 100644 --- a/app/src/main/java/us/shandian/giga/get/sqlite/FinishedMissionStore.java +++ b/app/src/main/java/us/shandian/giga/get/sqlite/FinishedMissionStore.java @@ -102,14 +102,23 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.beginTransaction(); while (cursor.moveToNext()) { ContentValues values = new ContentValues(); - values.put(KEY_SOURCE, cursor.getString(cursor.getColumnIndex(KEY_SOURCE))); - values.put(KEY_DONE, cursor.getString(cursor.getColumnIndex(KEY_DONE))); - values.put(KEY_TIMESTAMP, cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))); - values.put(KEY_KIND, cursor.getString(cursor.getColumnIndex(KEY_KIND))); + values.put( + KEY_SOURCE, + cursor.getString(cursor.getColumnIndexOrThrow(KEY_SOURCE)) + ); + values.put( + KEY_DONE, + cursor.getString(cursor.getColumnIndexOrThrow(KEY_DONE)) + ); + values.put( + KEY_TIMESTAMP, + cursor.getLong(cursor.getColumnIndexOrThrow(KEY_TIMESTAMP)) + ); + values.put(KEY_KIND, cursor.getString(cursor.getColumnIndexOrThrow(KEY_KIND))); values.put(KEY_PATH, Uri.fromFile( new File( - cursor.getString(cursor.getColumnIndex(KEY_LOCATION)), - cursor.getString(cursor.getColumnIndex(KEY_NAME)) + cursor.getString(cursor.getColumnIndexOrThrow(KEY_LOCATION)), + cursor.getString(cursor.getColumnIndexOrThrow(KEY_NAME)) ) ).toString()); @@ -141,7 +150,8 @@ private ContentValues getValuesOfMission(@NonNull Mission downloadMission) { } private FinishedMission getMissionFromCursor(Cursor cursor) { - String kind = Objects.requireNonNull(cursor).getString(cursor.getColumnIndex(KEY_KIND)); + String kind = Objects.requireNonNull(cursor) + .getString(cursor.getColumnIndexOrThrow(KEY_KIND)); if (kind == null || kind.isEmpty()) kind = "?"; String path = cursor.getString(cursor.getColumnIndexOrThrow(KEY_PATH)); From b3f4cb81140638c10dda55101bfcdaf25c8702f2 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 13:05:05 +0800 Subject: [PATCH 59/92] Use requireContext() instead of asserting non-null context Signed-off-by: Aayush Gupta --- app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt index ac076f1b8d6..89b89a80001 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt @@ -255,7 +255,7 @@ class FeedFragment : BaseStateFragment() { viewModel.getShowFutureItemsFromPreferences() ) - AlertDialog.Builder(context!!) + AlertDialog.Builder(requireContext()) .setTitle(R.string.feed_hide_streams_title) .setMultiChoiceItems(dialogItems, checkedDialogItems) { _, which, isChecked -> checkedDialogItems[which] = isChecked From 2182ff12b7d08ad0f6b2f77310fcac6fea4409d4 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 13:08:56 +0800 Subject: [PATCH 60/92] Use correct constant for hiding keyboard ../../src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt:509: Must be one or more of: InputMethodManager.HIDE_IMPLICIT_ONLY, InputMethodManager.HIDE_NOT_ALWAYS Signed-off-by: Aayush Gupta --- .../newpipe/local/subscription/dialog/FeedGroupDialog.kt | 4 ++-- app/src/main/java/org/schabi/newpipe/util/KeyboardUtil.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt index 7a256c16601..b0ccaa3c5ad 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt @@ -506,7 +506,7 @@ class FeedGroupDialog : DialogFragment(), BackPressable { private fun hideKeyboardSearch() { inputMethodManager.hideSoftInputFromWindow( searchLayoutBinding.toolbarSearchEditText.windowToken, - InputMethodManager.RESULT_UNCHANGED_SHOWN + InputMethodManager.HIDE_NOT_ALWAYS ) searchLayoutBinding.toolbarSearchEditText.clearFocus() } @@ -523,7 +523,7 @@ class FeedGroupDialog : DialogFragment(), BackPressable { private fun hideKeyboard() { inputMethodManager.hideSoftInputFromWindow( feedGroupCreateBinding.groupNameInput.windowToken, - InputMethodManager.RESULT_UNCHANGED_SHOWN + InputMethodManager.HIDE_NOT_ALWAYS ) feedGroupCreateBinding.groupNameInput.clearFocus() } diff --git a/app/src/main/java/org/schabi/newpipe/util/KeyboardUtil.java b/app/src/main/java/org/schabi/newpipe/util/KeyboardUtil.java index a709dc32ecf..679f3e042f8 100644 --- a/app/src/main/java/org/schabi/newpipe/util/KeyboardUtil.java +++ b/app/src/main/java/org/schabi/newpipe/util/KeyboardUtil.java @@ -48,7 +48,7 @@ public static void hideKeyboard(final Activity activity, final EditText editText final InputMethodManager imm = ContextCompat.getSystemService(activity, InputMethodManager.class); imm.hideSoftInputFromWindow(editText.getWindowToken(), - InputMethodManager.RESULT_UNCHANGED_SHOWN); + InputMethodManager.HIDE_NOT_ALWAYS); editText.clearFocus(); } From f64e40e9584051fedc393ba5b4d069e5554c4b7b Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 14:46:28 +0800 Subject: [PATCH 61/92] DownloadRunnableFallback: Fix error with log tag being too long Abbreviate Download -> DL Signed-off-by: Aayush Gupta --- .../java/us/shandian/giga/get/DownloadRunnableFallback.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 1d2483e7947..b79ff59c35c 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 @@ * Single-threaded fallback mode */ public class DownloadRunnableFallback extends Thread { - private static final String TAG = "DownloadRunnableFallback"; + private static final String TAG = "DLRunnableFallback"; private final DownloadMission mMission; From 3d43e52afb897812b3ebb42bb98c0e00960bac6f Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 14:47:36 +0800 Subject: [PATCH 62/92] activity_player_queue_control: Switch to app:tint instead of android:tint ../../src/main/res/layout/activity_player_queue_control.xml:208: Must use app:tint instead of android:tint Signed-off-by: Aayush Gupta --- .../activity_player_queue_control.xml | 20 +++++++++---------- .../layout/activity_player_queue_control.xml | 10 +++++----- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/layout-land/activity_player_queue_control.xml b/app/src/main/res/layout-land/activity_player_queue_control.xml index a5df5e56629..ad2655380c4 100644 --- a/app/src/main/res/layout-land/activity_player_queue_control.xml +++ b/app/src/main/res/layout-land/activity_player_queue_control.xml @@ -122,8 +122,8 @@ android:focusable="true" android:scaleType="fitCenter" android:src="@drawable/exo_controls_rewind" - android:tint="?attr/colorAccent" - android:contentDescription="@string/rewind" /> + android:contentDescription="@string/rewind" + app:tint="?attr/colorAccent" /> + android:contentDescription="@string/pause" + app:tint="?attr/colorAccent" /> + android:contentDescription="@string/forward" + app:tint="?attr/colorAccent" /> + android:contentDescription="@string/notification_action_repeat" + app:tint="?attr/colorAccent" /> + android:contentDescription="@string/notification_action_shuffle" + app:tint="?attr/colorAccent" /> + app:tint="?attr/colorAccent" /> + app:tint="?attr/colorAccent" /> From 10b943f37e2a5bb2e0029b857045407eb21a1371 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 15:02:28 +0800 Subject: [PATCH 63/92] DownloadDialog: Avoid using restricted API for menuitem Signed-off-by: Aayush Gupta --- .../main/java/org/schabi/newpipe/download/DownloadDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java index d7cd75054cf..91fac7d7b51 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java @@ -16,6 +16,7 @@ import android.provider.Settings; import android.util.Log; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -31,7 +32,6 @@ import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.view.menu.ActionMenuItemView; import androidx.appcompat.widget.Toolbar; import androidx.collection.SparseArrayCompat; import androidx.documentfile.provider.DocumentFile; @@ -113,7 +113,7 @@ public class DownloadDialog extends DialogFragment private StoredDirectoryHelper mainStorageAudio = null; private StoredDirectoryHelper mainStorageVideo = null; private DownloadManager downloadManager = null; - private ActionMenuItemView okButton = null; + private MenuItem okButton = null; private Context context = null; private boolean askForSavePath; From 15829c882ba1a4185e0b5deef5e8e5967f816be0 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 15:24:12 +0800 Subject: [PATCH 64/92] lint: Supress more translation related errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit They should be fixed by translators or weblate in general. ../../src/main/res/values-lt/strings.xml:87: For locale "lt" (Lithuanian) the following quantity should also be defined: many (e.g. "1.1 obuolio") ../../src/main/res/values-is/strings.xml:318: The quantity 'one' matches more than one specific number in this locale (1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …), but the message did not include a formatting argument (such as %d). This is usually an internationalization error. See full issue explanation for more. Signed-off-by: Aayush Gupta --- app/lint.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/lint.xml b/app/lint.xml index d07ece5ea7b..9497c22ca4f 100644 --- a/app/lint.xml +++ b/app/lint.xml @@ -5,4 +5,6 @@ --> + + From 5eb5f7533d134d98708ad27ed17711c11aea200e Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 15:51:29 +0800 Subject: [PATCH 65/92] ic_smart_display: Fix invalid vector path on older devices Signed-off-by: Aayush Gupta --- app/src/main/res/drawable/ic_smart_display.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/drawable/ic_smart_display.xml b/app/src/main/res/drawable/ic_smart_display.xml index d666a3b3739..93d73aee511 100644 --- a/app/src/main/res/drawable/ic_smart_display.xml +++ b/app/src/main/res/drawable/ic_smart_display.xml @@ -5,6 +5,6 @@ android:viewportWidth="24" android:tint="@color/defaultIconTint"> From 653b33bdb9f3cae3bfdfb6c0b0dfa25743a03c1d Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 5 Feb 2026 16:12:09 +0800 Subject: [PATCH 66/92] FocusOverlayView: Avoid accessing restricted API Signed-off-by: Aayush Gupta --- .../newpipe/views/FocusOverlayView.java | 3 +- .../newpipe/views/SimpleWindowCallback.kt | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/org/schabi/newpipe/views/SimpleWindowCallback.kt diff --git a/app/src/main/java/org/schabi/newpipe/views/FocusOverlayView.java b/app/src/main/java/org/schabi/newpipe/views/FocusOverlayView.java index 29c38511c2e..9e06211f23a 100644 --- a/app/src/main/java/org/schabi/newpipe/views/FocusOverlayView.java +++ b/app/src/main/java/org/schabi/newpipe/views/FocusOverlayView.java @@ -40,7 +40,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import androidx.appcompat.view.WindowCallbackWrapper; import org.schabi.newpipe.R; @@ -232,7 +231,7 @@ private static void setupOverlay(final Window window, final FocusOverlayView ove // Unfortunately many such forms of "scrolling" do not count as scrolling for purpose // of dispatching ViewTreeObserver callbacks, so we have to intercept them by directly // receiving keys from Window. - window.setCallback(new WindowCallbackWrapper(window.getCallback()) { + window.setCallback(new SimpleWindowCallback(window.getCallback()) { @Override public boolean dispatchKeyEvent(final KeyEvent event) { final boolean res = super.dispatchKeyEvent(event); diff --git a/app/src/main/java/org/schabi/newpipe/views/SimpleWindowCallback.kt b/app/src/main/java/org/schabi/newpipe/views/SimpleWindowCallback.kt new file mode 100644 index 00000000000..46f58d24c93 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/views/SimpleWindowCallback.kt @@ -0,0 +1,39 @@ +/* + * SPDX-FileCopyrightText: 2026 NewPipe e.V. + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package org.schabi.newpipe.views + +import android.os.Build +import android.view.KeyEvent +import android.view.KeyboardShortcutGroup +import android.view.Menu +import android.view.Window +import androidx.annotation.RequiresApi + +/** + * Simple window callback class to allow intercepting key events + * @see FocusOverlayView.setupOverlay + */ +open class SimpleWindowCallback(private val baseCallback: Window.Callback) : + Window.Callback by baseCallback { + + override fun dispatchKeyEvent(event: KeyEvent?): Boolean { + return baseCallback.dispatchKeyEvent(event) + } + + @RequiresApi(Build.VERSION_CODES.O) + override fun onPointerCaptureChanged(hasCapture: Boolean) { + baseCallback.onPointerCaptureChanged(hasCapture) + } + + @RequiresApi(Build.VERSION_CODES.N) + override fun onProvideKeyboardShortcuts( + data: List?, + menu: Menu?, + deviceId: Int + ) { + baseCallback.onProvideKeyboardShortcuts(data, menu, deviceId) + } +} From 273b09a3e87d663ac958d2e9ae418728497a9571 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sat, 21 Feb 2026 00:06:12 +0800 Subject: [PATCH 67/92] App: Migrate from Java to Kotlin Based on changes from refactor branch for code parity Signed-off-by: Aayush Gupta --- app/src/main/java/org/schabi/newpipe/App.java | 285 ------------------ app/src/main/java/org/schabi/newpipe/App.kt | 285 ++++++++++++++++++ .../java/org/schabi/newpipe/MainActivity.java | 4 +- .../info_list/dialog/InfoItemDialog.java | 2 +- .../newpipe/local/feed/FeedViewModel.kt | 2 +- .../newpipe/player/helper/PlayerHolder.java | 2 +- .../newpipe/settings/NewPipeSettings.java | 2 +- .../settings/migration/SettingMigrations.java | 2 +- .../org/schabi/newpipe/util/DeviceUtils.java | 4 +- .../schabi/newpipe/util/PermissionHelper.java | 4 +- .../schabi/newpipe/util/ReleaseVersionUtil.kt | 2 +- .../util/potoken/PoTokenProviderImpl.kt | 2 +- 12 files changed, 298 insertions(+), 298 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/App.java create mode 100644 app/src/main/java/org/schabi/newpipe/App.kt diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java deleted file mode 100644 index cf41aad46cd..00000000000 --- a/app/src/main/java/org/schabi/newpipe/App.java +++ /dev/null @@ -1,285 +0,0 @@ -package org.schabi.newpipe; - -import android.app.Application; -import android.content.Context; -import android.content.SharedPreferences; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.core.app.NotificationChannelCompat; -import androidx.core.app.NotificationManagerCompat; -import androidx.preference.PreferenceManager; - -import com.jakewharton.processphoenix.ProcessPhoenix; - -import org.acra.ACRA; -import org.acra.config.CoreConfigurationBuilder; -import org.schabi.newpipe.error.ReCaptchaActivity; -import org.schabi.newpipe.extractor.NewPipe; -import org.schabi.newpipe.extractor.downloader.Downloader; -import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor; -import org.schabi.newpipe.ktx.ExceptionUtils; -import org.schabi.newpipe.settings.NewPipeSettings; -import org.schabi.newpipe.util.BridgeStateSaverInitializer; -import org.schabi.newpipe.util.Localization; -import org.schabi.newpipe.util.ServiceHelper; -import org.schabi.newpipe.util.StateSaver; -import org.schabi.newpipe.util.image.ImageStrategy; -import org.schabi.newpipe.util.image.PicassoHelper; -import org.schabi.newpipe.util.image.PreferredImageQuality; -import org.schabi.newpipe.util.potoken.PoTokenProviderImpl; - -import java.io.IOException; -import java.io.InterruptedIOException; -import java.net.SocketException; -import java.util.List; -import java.util.Objects; - -import io.reactivex.rxjava3.exceptions.CompositeException; -import io.reactivex.rxjava3.exceptions.MissingBackpressureException; -import io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException; -import io.reactivex.rxjava3.exceptions.UndeliverableException; -import io.reactivex.rxjava3.functions.Consumer; -import io.reactivex.rxjava3.plugins.RxJavaPlugins; - -/* - * Copyright (C) Hans-Christoph Steiner 2016 - * App.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 class App extends Application { - public static final String PACKAGE_NAME = BuildConfig.APPLICATION_ID; - private static final String TAG = App.class.toString(); - - private boolean isFirstRun = false; - private boolean notificationsRequested = false; - - private static App app; - - @NonNull - public static App getApp() { - return app; - } - - public boolean getNotificationsRequested() { - return notificationsRequested; - } - - public void setNotificationsRequested() { - notificationsRequested = true; - } - - @Override - protected void attachBaseContext(final Context base) { - super.attachBaseContext(base); - initACRA(); - } - - @Override - public void onCreate() { - super.onCreate(); - - app = this; - - if (ProcessPhoenix.isPhoenixProcess(this)) { - Log.i(TAG, "This is a phoenix process! " - + "Aborting initialization of App[onCreate]"); - return; - } - - // check if the last used preference version is set - // to determine whether this is the first app run - final int lastUsedPrefVersion = PreferenceManager.getDefaultSharedPreferences(this) - .getInt(getString(R.string.last_used_preferences_version), -1); - isFirstRun = lastUsedPrefVersion == -1; - - // Initialize settings first because other initializations can use its values - NewPipeSettings.initSettings(this); - - NewPipe.init(getDownloader(), - Localization.getPreferredLocalization(this), - Localization.getPreferredContentCountry(this)); - Localization.initPrettyTime(Localization.resolvePrettyTime()); - - BridgeStateSaverInitializer.init(this); - StateSaver.init(this); - initNotificationChannels(); - - ServiceHelper.initServices(this); - - // Initialize image loader - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - PicassoHelper.init(this); - ImageStrategy.setPreferredImageQuality(PreferredImageQuality.fromPreferenceKey(this, - prefs.getString(getString(R.string.image_quality_key), - getString(R.string.image_quality_default)))); - PicassoHelper.setIndicatorsEnabled(MainActivity.DEBUG - && prefs.getBoolean(getString(R.string.show_image_indicators_key), false)); - - configureRxJavaErrorHandler(); - - YoutubeStreamExtractor.setPoTokenProvider(PoTokenProviderImpl.INSTANCE); - } - - @Override - public void onTerminate() { - super.onTerminate(); - PicassoHelper.terminate(); - } - - protected Downloader getDownloader() { - final DownloaderImpl downloader = DownloaderImpl.init(null); - setCookiesToDownloader(downloader); - return downloader; - } - - protected void setCookiesToDownloader(final DownloaderImpl downloader) { - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( - getApplicationContext()); - final String key = getApplicationContext().getString(R.string.recaptcha_cookies_key); - downloader.setCookie(ReCaptchaActivity.RECAPTCHA_COOKIES_KEY, prefs.getString(key, null)); - downloader.updateYoutubeRestrictedModeCookies(getApplicationContext()); - } - - private void configureRxJavaErrorHandler() { - // https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling - RxJavaPlugins.setErrorHandler(new Consumer() { - @Override - public void accept(@NonNull final Throwable throwable) { - Log.e(TAG, "RxJavaPlugins.ErrorHandler called with -> : " - + "throwable = [" + throwable.getClass().getName() + "]"); - - final Throwable actualThrowable; - if (throwable instanceof UndeliverableException) { - // As UndeliverableException is a wrapper, - // get the cause of it to get the "real" exception - actualThrowable = Objects.requireNonNull(throwable.getCause()); - } else { - actualThrowable = throwable; - } - - final List errors; - if (actualThrowable instanceof CompositeException) { - errors = ((CompositeException) actualThrowable).getExceptions(); - } else { - errors = List.of(actualThrowable); - } - - for (final Throwable error : errors) { - if (isThrowableIgnored(error)) { - return; - } - if (isThrowableCritical(error)) { - reportException(error); - return; - } - } - - // Out-of-lifecycle exceptions should only be reported if a debug user wishes so, - // When exception is not reported, log it - if (isDisposedRxExceptionsReported()) { - reportException(actualThrowable); - } else { - Log.e(TAG, "RxJavaPlugin: Undeliverable Exception received: ", actualThrowable); - } - } - - private boolean isThrowableIgnored(@NonNull final Throwable throwable) { - // Don't crash the application over a simple network problem - return ExceptionUtils.hasAssignableCause(throwable, - // network api cancellation - IOException.class, SocketException.class, - // blocking code disposed - InterruptedException.class, InterruptedIOException.class); - } - - private boolean isThrowableCritical(@NonNull final Throwable throwable) { - // Though these exceptions cannot be ignored - return ExceptionUtils.hasAssignableCause(throwable, - NullPointerException.class, IllegalArgumentException.class, // bug in app - OnErrorNotImplementedException.class, MissingBackpressureException.class, - IllegalStateException.class); // bug in operator - } - - private void reportException(@NonNull final Throwable throwable) { - // Throw uncaught exception that will trigger the report system - Thread.currentThread().getUncaughtExceptionHandler() - .uncaughtException(Thread.currentThread(), throwable); - } - }); - } - - /** - * Called in {@link #attachBaseContext(Context)} after calling the {@code super} method. - * Should be overridden if MultiDex is enabled, since it has to be initialized before ACRA. - */ - protected void initACRA() { - if (ACRA.isACRASenderServiceProcess()) { - return; - } - - final CoreConfigurationBuilder acraConfig = new CoreConfigurationBuilder() - .withBuildConfigClass(BuildConfig.class); - ACRA.init(this, acraConfig); - } - - private void initNotificationChannels() { - // Keep the importance below DEFAULT to avoid making noise on every notification update for - // the main and update channels - final List notificationChannelCompats = List.of( - new NotificationChannelCompat.Builder(getString(R.string.notification_channel_id), - NotificationManagerCompat.IMPORTANCE_LOW) - .setName(getString(R.string.notification_channel_name)) - .setDescription(getString(R.string.notification_channel_description)) - .build(), - new NotificationChannelCompat - .Builder(getString(R.string.app_update_notification_channel_id), - NotificationManagerCompat.IMPORTANCE_LOW) - .setName(getString(R.string.app_update_notification_channel_name)) - .setDescription( - getString(R.string.app_update_notification_channel_description)) - .build(), - new NotificationChannelCompat.Builder(getString(R.string.hash_channel_id), - NotificationManagerCompat.IMPORTANCE_HIGH) - .setName(getString(R.string.hash_channel_name)) - .setDescription(getString(R.string.hash_channel_description)) - .build(), - new NotificationChannelCompat.Builder(getString(R.string.error_report_channel_id), - NotificationManagerCompat.IMPORTANCE_LOW) - .setName(getString(R.string.error_report_channel_name)) - .setDescription(getString(R.string.error_report_channel_description)) - .build(), - new NotificationChannelCompat - .Builder(getString(R.string.streams_notification_channel_id), - NotificationManagerCompat.IMPORTANCE_DEFAULT) - .setName(getString(R.string.streams_notification_channel_name)) - .setDescription( - getString(R.string.streams_notification_channel_description)) - .build() - ); - - final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); - notificationManager.createNotificationChannelsCompat(notificationChannelCompats); - } - - protected boolean isDisposedRxExceptionsReported() { - return false; - } - - public boolean isFirstRun() { - return isFirstRun; - } -} diff --git a/app/src/main/java/org/schabi/newpipe/App.kt b/app/src/main/java/org/schabi/newpipe/App.kt new file mode 100644 index 00000000000..ad6b8243523 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/App.kt @@ -0,0 +1,285 @@ +package org.schabi.newpipe + +import android.app.Application +import android.content.Context +import android.util.Log +import androidx.core.app.NotificationChannelCompat +import androidx.core.app.NotificationManagerCompat +import androidx.preference.PreferenceManager +import com.jakewharton.processphoenix.ProcessPhoenix +import io.reactivex.rxjava3.exceptions.CompositeException +import io.reactivex.rxjava3.exceptions.MissingBackpressureException +import io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException +import io.reactivex.rxjava3.exceptions.UndeliverableException +import io.reactivex.rxjava3.functions.Consumer +import io.reactivex.rxjava3.plugins.RxJavaPlugins +import java.io.IOException +import java.io.InterruptedIOException +import java.net.SocketException +import org.acra.ACRA.init +import org.acra.ACRA.isACRASenderServiceProcess +import org.acra.config.CoreConfigurationBuilder +import org.schabi.newpipe.error.ReCaptchaActivity +import org.schabi.newpipe.extractor.NewPipe +import org.schabi.newpipe.extractor.downloader.Downloader +import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor +import org.schabi.newpipe.ktx.hasAssignableCause +import org.schabi.newpipe.settings.NewPipeSettings +import org.schabi.newpipe.util.BridgeStateSaverInitializer +import org.schabi.newpipe.util.Localization +import org.schabi.newpipe.util.ServiceHelper +import org.schabi.newpipe.util.StateSaver +import org.schabi.newpipe.util.image.ImageStrategy.setPreferredImageQuality +import org.schabi.newpipe.util.image.PicassoHelper +import org.schabi.newpipe.util.image.PreferredImageQuality.Companion.fromPreferenceKey +import org.schabi.newpipe.util.potoken.PoTokenProviderImpl + +/* + * Copyright (C) Hans-Christoph Steiner 2016 + * App.kt 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 . + */ +open class App : Application() { + var isFirstRun = false + private set + var notificationsRequested = false + private set + + fun setNotificationsRequested() { + notificationsRequested = true + } + + override fun attachBaseContext(base: Context?) { + super.attachBaseContext(base) + initACRA() + } + + override fun onCreate() { + super.onCreate() + + instance = this + + if (ProcessPhoenix.isPhoenixProcess(this)) { + Log.i(TAG, "This is a phoenix process! Aborting initialization of App[onCreate]") + return + } + + // check if the last used preference version is set + // to determine whether this is the first app run + val lastUsedPrefVersion = + PreferenceManager + .getDefaultSharedPreferences(this) + .getInt(getString(R.string.last_used_preferences_version), -1) + isFirstRun = lastUsedPrefVersion == -1 + + // Initialize settings first because other initializations can use its values + NewPipeSettings.initSettings(this) + + NewPipe.init( + getDownloader(), + Localization.getPreferredLocalization(this), + Localization.getPreferredContentCountry(this) + ) + Localization.initPrettyTime(Localization.resolvePrettyTime()) + + BridgeStateSaverInitializer.init(this) + StateSaver.init(this) + initNotificationChannels() + + ServiceHelper.initServices(this) + + // Initialize image loader + val prefs = PreferenceManager.getDefaultSharedPreferences(this) + PicassoHelper.init(this) + setPreferredImageQuality( + fromPreferenceKey( + this, + prefs.getString( + getString(R.string.image_quality_key), + getString(R.string.image_quality_default) + ) + ) + ) + PicassoHelper.setIndicatorsEnabled( + MainActivity.DEBUG && + prefs.getBoolean(getString(R.string.show_image_indicators_key), false) + ) + + configureRxJavaErrorHandler() + + YoutubeStreamExtractor.setPoTokenProvider(PoTokenProviderImpl) + } + + override fun onTerminate() { + super.onTerminate() + PicassoHelper.terminate() + } + + protected open fun getDownloader(): Downloader { + val downloader = DownloaderImpl.init(null) + setCookiesToDownloader(downloader) + return downloader + } + + protected fun setCookiesToDownloader(downloader: DownloaderImpl) { + val prefs = PreferenceManager.getDefaultSharedPreferences(this) + val key = getString(R.string.recaptcha_cookies_key) + downloader.setCookie(ReCaptchaActivity.RECAPTCHA_COOKIES_KEY, prefs.getString(key, null)) + downloader.updateYoutubeRestrictedModeCookies(this) + } + + private fun configureRxJavaErrorHandler() { + // https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling + RxJavaPlugins.setErrorHandler( + object : Consumer { + override fun accept(throwable: Throwable) { + Log.e(TAG, "RxJavaPlugins.ErrorHandler called with -> : throwable = [${throwable.javaClass.getName()}]") + + // As UndeliverableException is a wrapper, + // get the cause of it to get the "real" exception + val actualThrowable = (throwable as? UndeliverableException)?.cause ?: throwable + + val errors = (actualThrowable as? CompositeException)?.exceptions ?: listOf(actualThrowable) + + for (error in errors) { + if (isThrowableIgnored(error)) { + return + } + if (isThrowableCritical(error)) { + reportException(error) + return + } + } + + // Out-of-lifecycle exceptions should only be reported if a debug user wishes so, + // When exception is not reported, log it + if (isDisposedRxExceptionsReported()) { + reportException(actualThrowable) + } else { + Log.e(TAG, "RxJavaPlugin: Undeliverable Exception received: ", actualThrowable) + } + } + + fun isThrowableIgnored(throwable: Throwable): Boolean { + // Don't crash the application over a simple network problem + return throwable // network api cancellation + .hasAssignableCause( + IOException::class.java, + SocketException::class.java, // blocking code disposed + InterruptedException::class.java, + InterruptedIOException::class.java + ) + } + + fun isThrowableCritical(throwable: Throwable): Boolean { + // Though these exceptions cannot be ignored + return throwable + .hasAssignableCause( + // bug in app + NullPointerException::class.java, + IllegalArgumentException::class.java, + OnErrorNotImplementedException::class.java, + MissingBackpressureException::class.java, + // bug in operator + IllegalStateException::class.java + ) + } + + fun reportException(throwable: Throwable) { + // Throw uncaught exception that will trigger the report system + Thread + .currentThread() + .uncaughtExceptionHandler + .uncaughtException(Thread.currentThread(), throwable) + } + } + ) + } + + /** + * Called in [.attachBaseContext] after calling the `super` method. + * Should be overridden if MultiDex is enabled, since it has to be initialized before ACRA. + */ + protected fun initACRA() { + if (isACRASenderServiceProcess()) { + return + } + + val acraConfig = + CoreConfigurationBuilder() + .withBuildConfigClass(BuildConfig::class.java) + init(this, acraConfig) + } + + private fun initNotificationChannels() { + // Keep the importance below DEFAULT to avoid making noise on every notification update for + // the main and update channels + val mainChannel = + NotificationChannelCompat + .Builder( + getString(R.string.notification_channel_id), + NotificationManagerCompat.IMPORTANCE_LOW + ).setName(getString(R.string.notification_channel_name)) + .setDescription(getString(R.string.notification_channel_description)) + .build() + val appUpdateChannel = + NotificationChannelCompat + .Builder( + getString(R.string.app_update_notification_channel_id), + NotificationManagerCompat.IMPORTANCE_LOW + ).setName(getString(R.string.app_update_notification_channel_name)) + .setDescription(getString(R.string.app_update_notification_channel_description)) + .build() + val hashChannel = + NotificationChannelCompat + .Builder( + getString(R.string.hash_channel_id), + NotificationManagerCompat.IMPORTANCE_HIGH + ).setName(getString(R.string.hash_channel_name)) + .setDescription(getString(R.string.hash_channel_description)) + .build() + val errorReportChannel = + NotificationChannelCompat + .Builder( + getString(R.string.error_report_channel_id), + NotificationManagerCompat.IMPORTANCE_LOW + ).setName(getString(R.string.error_report_channel_name)) + .setDescription(getString(R.string.error_report_channel_description)) + .build() + val newStreamChannel = + NotificationChannelCompat + .Builder( + getString(R.string.streams_notification_channel_id), + NotificationManagerCompat.IMPORTANCE_DEFAULT + ).setName(getString(R.string.streams_notification_channel_name)) + .setDescription(getString(R.string.streams_notification_channel_description)) + .build() + + val channels = listOf(mainChannel, appUpdateChannel, hashChannel, errorReportChannel, newStreamChannel) + + NotificationManagerCompat.from(this).createNotificationChannelsCompat(channels) + } + + protected open fun isDisposedRxExceptionsReported(): Boolean = false + + companion object { + const val PACKAGE_NAME: String = BuildConfig.APPLICATION_ID + private val TAG = App::class.java.toString() + + @JvmStatic + lateinit var instance: App + private set + } +} diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index 3c0018d9915..e4f4b5b8a28 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -191,7 +191,7 @@ protected void onCreate(final Bundle savedInstanceState) { NotificationWorker.initialize(this); } if (!UpdateSettingsFragment.wasUserAskedForConsent(this) - && !App.getApp().isFirstRun() + && !App.getInstance().isFirstRun() && ReleaseVersionUtil.INSTANCE.isReleaseApk()) { UpdateSettingsFragment.askForConsentToUpdateChecks(this); } @@ -203,7 +203,7 @@ protected void onCreate(final Bundle savedInstanceState) { protected void onPostCreate(final Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); - final App app = App.getApp(); + final App app = App.getInstance(); if (sharedPreferences.getBoolean(app.getString(R.string.update_app_key), false) && sharedPreferences diff --git a/app/src/main/java/org/schabi/newpipe/info_list/dialog/InfoItemDialog.java b/app/src/main/java/org/schabi/newpipe/info_list/dialog/InfoItemDialog.java index 0c69557bfd8..dcf01e1905e 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/dialog/InfoItemDialog.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/dialog/InfoItemDialog.java @@ -346,7 +346,7 @@ public InfoItemDialog create() { public static void reportErrorDuringInitialization(final Throwable throwable, final InfoItem item) { - ErrorUtil.showSnackbar(App.getApp().getBaseContext(), new ErrorInfo( + ErrorUtil.showSnackbar(App.getInstance().getBaseContext(), new ErrorInfo( throwable, UserAction.OPEN_INFO_ITEM_DIALOG, "none", diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt index 58ec818f3bd..19adf6eaada 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt @@ -166,7 +166,7 @@ class FeedViewModel( fun getFactory(context: Context, groupId: Long) = viewModelFactory { initializer { FeedViewModel( - App.getApp(), + App.instance, groupId, // Read initial value from preferences getShowPlayedItemsFromPreferences(context.applicationContext), diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java index 9edfc804a75..daae6d54e01 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java @@ -117,7 +117,7 @@ public void setListener(@Nullable final PlayerServiceExtendedEventListener newLi // helper to handle context in common place as using the same // context to bind/unbind a service is crucial private Context getCommonContext() { - return App.getApp(); + return App.getInstance(); } public void startService(final boolean playAfterConnect, diff --git a/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java b/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java index 7cb1564b386..3cc29afee2f 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java +++ b/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java @@ -157,7 +157,7 @@ private static void disableMediaTunnelingIfNecessary(@NonNull final Context cont prefs.getInt(disabledTunnelingAutomaticallyKey, -1) == 0 && !prefs.getBoolean(disabledTunnelingKey, false); - if (App.getApp().isFirstRun() + if (App.getInstance().isFirstRun() || (wasDeviceBlacklistUpdated && !wasMediaTunnelingEnabledByUser)) { setMediaTunneling(context); } diff --git a/app/src/main/java/org/schabi/newpipe/settings/migration/SettingMigrations.java b/app/src/main/java/org/schabi/newpipe/settings/migration/SettingMigrations.java index 67944075dc2..92520ec7ece 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/migration/SettingMigrations.java +++ b/app/src/main/java/org/schabi/newpipe/settings/migration/SettingMigrations.java @@ -251,7 +251,7 @@ static void runMigrationsIfNeeded(@NonNull final Context context) { final int lastPrefVersion = sp.getInt(lastPrefVersionKey, 0); // no migration to run, already up to date - if (App.getApp().isFirstRun()) { + if (App.getInstance().isFirstRun()) { sp.edit().putInt(lastPrefVersionKey, VERSION).apply(); return; } else if (lastPrefVersion == VERSION) { diff --git a/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java b/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java index 9eb9fab37b1..83152a36d84 100644 --- a/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java @@ -131,7 +131,7 @@ public static boolean isFireTv() { } isFireTV = - App.getApp().getPackageManager().hasSystemFeature(AMAZON_FEATURE_FIRE_TV); + App.getInstance().getPackageManager().hasSystemFeature(AMAZON_FEATURE_FIRE_TV); return isFireTV; } @@ -140,7 +140,7 @@ public static boolean isTv(final Context context) { return isTV; } - final PackageManager pm = App.getApp().getPackageManager(); + final PackageManager pm = App.getInstance().getPackageManager(); // from doc: https://developer.android.com/training/tv/start/hardware.html#runtime-check boolean isTv = ContextCompat.getSystemService(context, UiModeManager.class) diff --git a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java index 969d787d74d..2defbdc5b24 100644 --- a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java @@ -90,10 +90,10 @@ public static boolean checkPostNotificationsPermission(final Activity activity, && ContextCompat.checkSelfPermission(activity, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { - if (!App.getApp().getNotificationsRequested()) { + if (!App.getInstance().getNotificationsRequested()) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.POST_NOTIFICATIONS}, requestCode); - App.getApp().setNotificationsRequested(); + App.getInstance().setNotificationsRequested(); return false; } } diff --git a/app/src/main/java/org/schabi/newpipe/util/ReleaseVersionUtil.kt b/app/src/main/java/org/schabi/newpipe/util/ReleaseVersionUtil.kt index bc3849384f0..31d42d751dd 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ReleaseVersionUtil.kt +++ b/app/src/main/java/org/schabi/newpipe/util/ReleaseVersionUtil.kt @@ -21,7 +21,7 @@ object ReleaseVersionUtil { val certificates = mapOf( RELEASE_CERT_PUBLIC_KEY_SHA256.hexToByteArray() to PackageManager.CERT_INPUT_SHA256 ) - val app = App.getApp() + val app = App.instance try { PackageInfoCompat.hasSignatures(app.packageManager, app.packageName, certificates, false) } catch (e: PackageManager.NameNotFoundException) { diff --git a/app/src/main/java/org/schabi/newpipe/util/potoken/PoTokenProviderImpl.kt b/app/src/main/java/org/schabi/newpipe/util/potoken/PoTokenProviderImpl.kt index 12fadb68d2c..53ae04a3c82 100644 --- a/app/src/main/java/org/schabi/newpipe/util/potoken/PoTokenProviderImpl.kt +++ b/app/src/main/java/org/schabi/newpipe/util/potoken/PoTokenProviderImpl.kt @@ -78,7 +78,7 @@ object PoTokenProviderImpl : PoTokenProvider { // create a new webPoTokenGenerator webPoTokenGenerator = PoTokenWebView - .newPoTokenGenerator(App.getApp()).blockingGet() + .newPoTokenGenerator(App.instance).blockingGet() // The streaming poToken needs to be generated exactly once before generating // any other (player) tokens. From 57364109f4f357e32e0669ae9b87978422322244 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sat, 21 Feb 2026 16:38:35 +0800 Subject: [PATCH 68/92] Migrate from Picasso to Coil Based on changes from refactor Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 3 +- app/src/main/java/org/schabi/newpipe/App.kt | 38 +-- .../org/schabi/newpipe/DownloaderImpl.java | 5 + .../org/schabi/newpipe/about/AboutActivity.kt | 8 +- .../fragments/detail/VideoDetailFragment.java | 29 +-- .../list/channel/ChannelFragment.java | 18 +- .../list/comments/CommentRepliesFragment.java | 4 +- .../list/playlist/PlaylistFragment.java | 11 +- .../newpipe/info_list/StreamSegmentItem.kt | 44 ++-- .../holder/ChannelMiniInfoItemHolder.java | 4 +- .../holder/CommentInfoItemHolder.java | 8 +- .../holder/PlaylistMiniInfoItemHolder.java | 4 +- .../holder/StreamMiniInfoItemHolder.java | 4 +- .../java/org/schabi/newpipe/ktx/Bitmap.kt | 13 + .../newpipe/local/feed/item/StreamItem.kt | 4 +- .../feed/notifications/NotificationHelper.kt | 68 ++---- .../local/holder/LocalPlaylistItemHolder.java | 7 +- .../holder/LocalPlaylistStreamItemHolder.java | 6 +- .../LocalStatisticStreamItemHolder.java | 6 +- .../holder/RemotePlaylistItemHolder.java | 7 +- .../local/subscription/item/ChannelItem.kt | 4 +- .../item/PickerSubscriptionItem.kt | 4 +- .../org/schabi/newpipe/player/Player.java | 93 +++----- .../playqueue/PlayQueueItemBuilder.java | 4 +- .../SeekbarPreviewThumbnailHolder.java | 7 +- .../settings/ContentSettingsFragment.java | 16 +- .../settings/DebugSettingsFragment.java | 8 - .../settings/SelectChannelFragment.java | 4 +- .../settings/SelectPlaylistFragment.java | 18 +- .../external_communication/ShareUtils.java | 72 +++--- .../schabi/newpipe/util/image/CoilHelper.kt | 185 +++++++++++++++ .../newpipe/util/image/PicassoHelper.java | 224 ------------------ app/src/main/res/values/settings_keys.xml | 1 - app/src/main/res/xml/debug_settings.xml | 7 - gradle/libs.versions.toml | 6 +- 35 files changed, 432 insertions(+), 512 deletions(-) create mode 100644 app/src/main/java/org/schabi/newpipe/ktx/Bitmap.kt create mode 100644 app/src/main/java/org/schabi/newpipe/util/image/CoilHelper.kt delete mode 100644 app/src/main/java/org/schabi/newpipe/util/image/PicassoHelper.java diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e72fcfcfc97..e18826c1619 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -272,7 +272,8 @@ dependencies { implementation(libs.lisawray.groupie.viewbinding) // Image loading - implementation(libs.squareup.picasso) + implementation(libs.coil.compose) + implementation(libs.coil.network.okhttp) // Markdown library for Android implementation(libs.noties.markwon.core) diff --git a/app/src/main/java/org/schabi/newpipe/App.kt b/app/src/main/java/org/schabi/newpipe/App.kt index ad6b8243523..3ca259528ac 100644 --- a/app/src/main/java/org/schabi/newpipe/App.kt +++ b/app/src/main/java/org/schabi/newpipe/App.kt @@ -1,11 +1,19 @@ package org.schabi.newpipe +import android.app.ActivityManager import android.app.Application import android.content.Context import android.util.Log import androidx.core.app.NotificationChannelCompat import androidx.core.app.NotificationManagerCompat +import androidx.core.content.getSystemService import androidx.preference.PreferenceManager +import coil3.ImageLoader +import coil3.SingletonImageLoader +import coil3.network.okhttp.OkHttpNetworkFetcherFactory +import coil3.request.allowRgb565 +import coil3.request.crossfade +import coil3.util.DebugLogger import com.jakewharton.processphoenix.ProcessPhoenix import io.reactivex.rxjava3.exceptions.CompositeException import io.reactivex.rxjava3.exceptions.MissingBackpressureException @@ -29,9 +37,8 @@ import org.schabi.newpipe.util.BridgeStateSaverInitializer import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.ServiceHelper import org.schabi.newpipe.util.StateSaver -import org.schabi.newpipe.util.image.ImageStrategy.setPreferredImageQuality -import org.schabi.newpipe.util.image.PicassoHelper -import org.schabi.newpipe.util.image.PreferredImageQuality.Companion.fromPreferenceKey +import org.schabi.newpipe.util.image.ImageStrategy +import org.schabi.newpipe.util.image.PreferredImageQuality import org.schabi.newpipe.util.potoken.PoTokenProviderImpl /* @@ -51,7 +58,9 @@ import org.schabi.newpipe.util.potoken.PoTokenProviderImpl * You should have received a copy of the GNU General Public License * along with NewPipe. If not, see . */ -open class App : Application() { +open class App : + Application(), + SingletonImageLoader.Factory { var isFirstRun = false private set var notificationsRequested = false @@ -102,9 +111,8 @@ open class App : Application() { // Initialize image loader val prefs = PreferenceManager.getDefaultSharedPreferences(this) - PicassoHelper.init(this) - setPreferredImageQuality( - fromPreferenceKey( + ImageStrategy.setPreferredImageQuality( + PreferredImageQuality.fromPreferenceKey( this, prefs.getString( getString(R.string.image_quality_key), @@ -112,20 +120,20 @@ open class App : Application() { ) ) ) - PicassoHelper.setIndicatorsEnabled( - MainActivity.DEBUG && - prefs.getBoolean(getString(R.string.show_image_indicators_key), false) - ) configureRxJavaErrorHandler() YoutubeStreamExtractor.setPoTokenProvider(PoTokenProviderImpl) } - override fun onTerminate() { - super.onTerminate() - PicassoHelper.terminate() - } + override fun newImageLoader(context: Context): ImageLoader = ImageLoader + .Builder(this) + .logger(if (BuildConfig.DEBUG) DebugLogger() else null) + .allowRgb565(getSystemService()!!.isLowRamDevice) + .crossfade(true) + .components { + add(OkHttpNetworkFetcherFactory(callFactory = DownloaderImpl.getInstance().client)) + }.build() protected open fun getDownloader(): Downloader { val downloader = DownloaderImpl.init(null) diff --git a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java index 041e913968d..74a2cab5176 100644 --- a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java +++ b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java @@ -48,6 +48,11 @@ private DownloaderImpl(final OkHttpClient.Builder builder) { this.mCookies = new HashMap<>(); } + @NonNull + public OkHttpClient getClient() { + return client; + } + /** * It's recommended to call exactly once in the entire lifetime of the application. * diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt index 94bde796b83..ed5951f0440 100644 --- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt @@ -207,10 +207,10 @@ class AboutActivity : AppCompatActivity() { StandardLicenses.APACHE2 ), SoftwareComponent( - "Picasso", - "2013", - "Square, Inc.", - "https://square.github.io/picasso/", + "Coil", + "2023", + "Coil Contributors", + "https://coil-kt.github.io/coil/", StandardLicenses.APACHE2 ), SoftwareComponent( 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 31a4967116e..c97d12ba274 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 @@ -118,7 +118,7 @@ import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.external_communication.KoreUtils; import org.schabi.newpipe.util.external_communication.ShareUtils; -import org.schabi.newpipe.util.image.PicassoHelper; +import org.schabi.newpipe.util.image.CoilHelper; import java.util.ArrayList; import java.util.Iterator; @@ -129,6 +129,7 @@ import java.util.concurrent.TimeUnit; import java.util.function.Consumer; +import coil3.util.CoilUtils; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.Disposable; @@ -160,8 +161,6 @@ public final class VideoDetailFragment private static final String DESCRIPTION_TAB_TAG = "DESCRIPTION TAB"; private static final String EMPTY_TAB_TAG = "EMPTY TAB"; - private static final String PICASSO_VIDEO_DETAILS_TAG = "PICASSO_VIDEO_DETAILS_TAG"; - // tabs private boolean showComments; private boolean showRelatedItems; @@ -1499,7 +1498,10 @@ public void showLoading() { } } - PicassoHelper.cancelTag(PICASSO_VIDEO_DETAILS_TAG); + CoilUtils.dispose(binding.detailThumbnailImageView); + CoilUtils.dispose(binding.detailSubChannelThumbnailView); + CoilUtils.dispose(binding.overlayThumbnail); + CoilUtils.dispose(binding.detailUploaderThumbnailView); binding.detailThumbnailImageView.setImageBitmap(null); binding.detailSubChannelThumbnailView.setImageBitmap(null); } @@ -1590,8 +1592,8 @@ public void handleResult(@NonNull final StreamInfo info) { binding.detailSecondaryControlPanel.setVisibility(View.GONE); checkUpdateProgressInfo(info); - PicassoHelper.loadDetailsThumbnail(info.getThumbnails()).tag(PICASSO_VIDEO_DETAILS_TAG) - .into(binding.detailThumbnailImageView); + CoilHelper.INSTANCE.loadDetailsThumbnail(binding.detailThumbnailImageView, + info.getThumbnails()); showMetaInfoInTextView(info.getMetaInfo(), binding.detailMetaInfoTextView, binding.detailMetaInfoSeparator, disposables); @@ -1641,8 +1643,8 @@ private void displayUploaderAsSubChannel(final StreamInfo info) { binding.detailUploaderTextView.setVisibility(View.GONE); } - PicassoHelper.loadAvatar(info.getUploaderAvatars()).tag(PICASSO_VIDEO_DETAILS_TAG) - .into(binding.detailSubChannelThumbnailView); + CoilHelper.INSTANCE.loadAvatar(binding.detailSubChannelThumbnailView, + info.getUploaderAvatars()); binding.detailSubChannelThumbnailView.setVisibility(View.VISIBLE); binding.detailUploaderThumbnailView.setVisibility(View.GONE); } @@ -1673,11 +1675,11 @@ private void displayBothUploaderAndSubChannel(final StreamInfo info) { binding.detailUploaderTextView.setVisibility(View.GONE); } - PicassoHelper.loadAvatar(info.getSubChannelAvatars()).tag(PICASSO_VIDEO_DETAILS_TAG) - .into(binding.detailSubChannelThumbnailView); + CoilHelper.INSTANCE.loadAvatar(binding.detailSubChannelThumbnailView, + info.getSubChannelAvatars()); binding.detailSubChannelThumbnailView.setVisibility(View.VISIBLE); - PicassoHelper.loadAvatar(info.getUploaderAvatars()).tag(PICASSO_VIDEO_DETAILS_TAG) - .into(binding.detailUploaderThumbnailView); + CoilHelper.INSTANCE.loadAvatar(binding.detailUploaderThumbnailView, + info.getUploaderAvatars()); binding.detailUploaderThumbnailView.setVisibility(View.VISIBLE); } @@ -2435,8 +2437,7 @@ private void updateOverlayData(@Nullable final String overlayTitle, binding.overlayTitleTextView.setText(isEmpty(overlayTitle) ? "" : overlayTitle); binding.overlayChannelTextView.setText(isEmpty(uploader) ? "" : uploader); binding.overlayThumbnail.setImageDrawable(null); - PicassoHelper.loadDetailsThumbnail(thumbnails).tag(PICASSO_VIDEO_DETAILS_TAG) - .into(binding.overlayThumbnail); + CoilHelper.INSTANCE.loadDetailsThumbnail(binding.overlayThumbnail, thumbnails); } private void setOverlayPlayPauseImage(final boolean playerIsPlaying) { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index 878ceb1391d..97481f25b3d 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -53,13 +53,14 @@ import org.schabi.newpipe.util.StateSaver; import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.external_communication.ShareUtils; +import org.schabi.newpipe.util.image.CoilHelper; import org.schabi.newpipe.util.image.ImageStrategy; -import org.schabi.newpipe.util.image.PicassoHelper; import java.util.List; import java.util.Queue; import java.util.concurrent.TimeUnit; +import coil3.util.CoilUtils; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.disposables.CompositeDisposable; @@ -73,7 +74,6 @@ public class ChannelFragment extends BaseStateFragment implements StateSaver.WriteRead { private static final int BUTTON_DEBOUNCE_INTERVAL = 100; - private static final String PICASSO_CHANNEL_TAG = "PICASSO_CHANNEL_TAG"; @State protected int serviceId = Constants.NO_SERVICE_ID; @@ -578,7 +578,9 @@ private void runWorker(final boolean forceLoad) { @Override public void showLoading() { super.showLoading(); - PicassoHelper.cancelTag(PICASSO_CHANNEL_TAG); + CoilUtils.dispose(binding.channelAvatarView); + CoilUtils.dispose(binding.channelBannerImage); + CoilUtils.dispose(binding.subChannelAvatarView); animate(binding.channelSubscribeButton, false, 100); } @@ -589,17 +591,15 @@ public void handleResult(@NonNull final ChannelInfo result) { setInitialData(result.getServiceId(), result.getOriginalUrl(), result.getName()); if (ImageStrategy.shouldLoadImages() && !result.getBanners().isEmpty()) { - PicassoHelper.loadBanner(result.getBanners()).tag(PICASSO_CHANNEL_TAG) - .into(binding.channelBannerImage); + CoilHelper.INSTANCE.loadBanner(binding.channelBannerImage, result.getBanners()); } else { // do not waste space for the banner, if the user disabled images or there is not one binding.channelBannerImage.setImageDrawable(null); } - PicassoHelper.loadAvatar(result.getAvatars()).tag(PICASSO_CHANNEL_TAG) - .into(binding.channelAvatarView); - PicassoHelper.loadAvatar(result.getParentChannelAvatars()).tag(PICASSO_CHANNEL_TAG) - .into(binding.subChannelAvatarView); + CoilHelper.INSTANCE.loadAvatar(binding.channelAvatarView, result.getAvatars()); + CoilHelper.INSTANCE.loadAvatar(binding.subChannelAvatarView, + result.getParentChannelAvatars()); binding.channelTitleView.setText(result.getName()); binding.channelSubscriberView.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentRepliesFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentRepliesFragment.java index ce52c029dd2..ed7dd5a8c1f 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentRepliesFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentRepliesFragment.java @@ -25,8 +25,8 @@ import org.schabi.newpipe.util.ExtractorHelper; import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.NavigationHelper; +import org.schabi.newpipe.util.image.CoilHelper; import org.schabi.newpipe.util.image.ImageStrategy; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.text.TextLinkifier; import org.schabi.newpipe.util.text.LongPressLinkMovementMethod; @@ -84,7 +84,7 @@ protected Supplier getListHeaderSupplier() { final CommentsInfoItem item = commentsInfoItem; // load the author avatar - PicassoHelper.loadAvatar(item.getUploaderAvatars()).into(binding.authorAvatar); + CoilHelper.INSTANCE.loadAvatar(binding.authorAvatar, item.getUploaderAvatars()); binding.authorAvatar.setVisibility(ImageStrategy.shouldLoadImages() ? View.VISIBLE : View.GONE); 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 ee6a0922c0f..8f0c3ac98e6 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 @@ -53,7 +53,7 @@ import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.PlayButtonHelper; import org.schabi.newpipe.util.external_communication.ShareUtils; -import org.schabi.newpipe.util.image.PicassoHelper; +import org.schabi.newpipe.util.image.CoilHelper; import org.schabi.newpipe.util.text.TextEllipsizer; import java.util.ArrayList; @@ -62,6 +62,7 @@ import java.util.function.Supplier; import java.util.stream.Collectors; +import coil3.util.CoilUtils; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.core.Single; @@ -71,8 +72,6 @@ public class PlaylistFragment extends BaseListInfoFragment implements PlaylistControlViewHolder { - private static final String PICASSO_PLAYLIST_TAG = "PICASSO_PLAYLIST_TAG"; - private CompositeDisposable disposables; private Subscription bookmarkReactor; private AtomicBoolean isBookmarkButtonReady; @@ -271,7 +270,7 @@ public void showLoading() { animate(headerBinding.getRoot(), false, 200); animateHideRecyclerViewAllowingScrolling(itemsList); - PicassoHelper.cancelTag(PICASSO_PLAYLIST_TAG); + CoilUtils.dispose(headerBinding.uploaderAvatarView); animate(headerBinding.uploaderLayout, false, 200); } @@ -322,8 +321,8 @@ public void handleResult(@NonNull final PlaylistInfo result) { R.drawable.ic_radio) ); } else { - PicassoHelper.loadAvatar(result.getUploaderAvatars()).tag(PICASSO_PLAYLIST_TAG) - .into(headerBinding.uploaderAvatarView); + CoilHelper.INSTANCE.loadAvatar(headerBinding.uploaderAvatarView, + result.getUploaderAvatars()); } streamCount = result.getStreamCount(); diff --git a/app/src/main/java/org/schabi/newpipe/info_list/StreamSegmentItem.kt b/app/src/main/java/org/schabi/newpipe/info_list/StreamSegmentItem.kt index a7ca3bd68ea..7276051e86b 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/StreamSegmentItem.kt +++ b/app/src/main/java/org/schabi/newpipe/info_list/StreamSegmentItem.kt @@ -1,19 +1,18 @@ package org.schabi.newpipe.info_list import android.view.View -import android.widget.ImageView -import android.widget.TextView -import com.xwray.groupie.GroupieViewHolder -import com.xwray.groupie.Item +import com.xwray.groupie.viewbinding.BindableItem +import com.xwray.groupie.viewbinding.GroupieViewHolder import org.schabi.newpipe.R +import org.schabi.newpipe.databinding.ItemStreamSegmentBinding import org.schabi.newpipe.extractor.stream.StreamSegment import org.schabi.newpipe.util.Localization -import org.schabi.newpipe.util.image.PicassoHelper +import org.schabi.newpipe.util.image.CoilHelper class StreamSegmentItem( private val item: StreamSegment, private val onClick: StreamSegmentAdapter.StreamSegmentListener -) : Item() { +) : BindableItem() { companion object { const val PAYLOAD_SELECT = 1 @@ -21,34 +20,35 @@ class StreamSegmentItem( var isSelected = false - override fun bind(viewHolder: GroupieViewHolder, position: Int) { - item.previewUrl?.let { - PicassoHelper.loadThumbnail(it) - .into(viewHolder.root.findViewById(R.id.previewImage)) - } - viewHolder.root.findViewById(R.id.textViewTitle).text = item.title + override fun bind(viewBinding: ItemStreamSegmentBinding, position: Int) { + CoilHelper.loadThumbnail(viewBinding.previewImage, item.previewUrl) + viewBinding.textViewTitle.text = item.title if (item.channelName == null) { - viewHolder.root.findViewById(R.id.textViewChannel).visibility = View.GONE + viewBinding.textViewChannel.visibility = View.GONE // When the channel name is displayed there is less space // and thus the segment title needs to be only one line height. // But when there is no channel name displayed, the title can be two lines long. // The default maxLines value is set to 1 to display all elements in the AS preview, - viewHolder.root.findViewById(R.id.textViewTitle).maxLines = 2 + viewBinding.textViewTitle.maxLines = 2 } else { - viewHolder.root.findViewById(R.id.textViewChannel).text = item.channelName - viewHolder.root.findViewById(R.id.textViewChannel).visibility = View.VISIBLE + viewBinding.textViewChannel.text = item.channelName + viewBinding.textViewChannel.visibility = View.VISIBLE } - viewHolder.root.findViewById(R.id.textViewStartSeconds).text = + viewBinding.textViewStartSeconds.text = Localization.getDurationString(item.startTimeSeconds.toLong()) - viewHolder.root.setOnClickListener { onClick.onItemClick(this, item.startTimeSeconds) } - viewHolder.root.setOnLongClickListener { + viewBinding.root.setOnClickListener { onClick.onItemClick(this, item.startTimeSeconds) } + viewBinding.root.setOnLongClickListener { onClick.onItemLongClick(this, item.startTimeSeconds) true } - viewHolder.root.isSelected = isSelected + viewBinding.root.isSelected = isSelected } - override fun bind(viewHolder: GroupieViewHolder, position: Int, payloads: MutableList) { + override fun bind( + viewHolder: GroupieViewHolder, + position: Int, + payloads: MutableList + ) { if (payloads.contains(PAYLOAD_SELECT)) { viewHolder.root.isSelected = isSelected return @@ -57,4 +57,6 @@ class StreamSegmentItem( } override fun getLayout() = R.layout.item_stream_segment + + override fun initializeViewBinding(view: View) = ItemStreamSegmentBinding.bind(view) } diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java index 7afc05c6c25..92a5054e130 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java @@ -13,8 +13,8 @@ import org.schabi.newpipe.extractor.utils.Utils; import org.schabi.newpipe.info_list.InfoItemBuilder; import org.schabi.newpipe.local.history.HistoryRecordManager; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.Localization; +import org.schabi.newpipe.util.image.CoilHelper; public class ChannelMiniInfoItemHolder extends InfoItemHolder { private final ImageView itemThumbnailView; @@ -56,7 +56,7 @@ public void updateFromItem(final InfoItem infoItem, itemAdditionalDetailView.setText(getDetailLine(item)); } - PicassoHelper.loadAvatar(item.getThumbnails()).into(itemThumbnailView); + CoilHelper.INSTANCE.loadAvatar(itemThumbnailView, item.getThumbnails()); itemView.setOnClickListener(view -> { if (itemBuilder.getOnChannelSelectedListener() != null) { diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentInfoItemHolder.java index a19831cc7e6..5dee128ebf7 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentInfoItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentInfoItemHolder.java @@ -27,8 +27,8 @@ import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.external_communication.ShareUtils; +import org.schabi.newpipe.util.image.CoilHelper; import org.schabi.newpipe.util.image.ImageStrategy; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.text.TextEllipsizer; public class CommentInfoItemHolder extends InfoItemHolder { @@ -82,14 +82,12 @@ public CommentInfoItemHolder(final InfoItemBuilder infoItemBuilder, @Override public void updateFromItem(final InfoItem infoItem, final HistoryRecordManager historyRecordManager) { - if (!(infoItem instanceof CommentsInfoItem)) { + if (!(infoItem instanceof CommentsInfoItem item)) { return; } - final CommentsInfoItem item = (CommentsInfoItem) infoItem; - // load the author avatar - PicassoHelper.loadAvatar(item.getUploaderAvatars()).into(itemThumbnailView); + CoilHelper.INSTANCE.loadAvatar(itemThumbnailView, item.getUploaderAvatars()); if (ImageStrategy.shouldLoadImages()) { itemThumbnailView.setVisibility(View.VISIBLE); itemRoot.setPadding(commentVerticalPadding, commentVerticalPadding, diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistMiniInfoItemHolder.java index c9216d9a9e5..b7949318d58 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistMiniInfoItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistMiniInfoItemHolder.java @@ -9,8 +9,8 @@ import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem; import org.schabi.newpipe.info_list.InfoItemBuilder; import org.schabi.newpipe.local.history.HistoryRecordManager; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.Localization; +import org.schabi.newpipe.util.image.CoilHelper; public class PlaylistMiniInfoItemHolder extends InfoItemHolder { public final ImageView itemThumbnailView; @@ -46,7 +46,7 @@ public void updateFromItem(final InfoItem infoItem, .localizeStreamCountMini(itemStreamCountView.getContext(), item.getStreamCount())); itemUploaderView.setText(item.getUploaderName()); - PicassoHelper.loadPlaylistThumbnail(item.getThumbnails()).into(itemThumbnailView); + CoilHelper.INSTANCE.loadPlaylistThumbnail(itemThumbnailView, item.getThumbnails()); itemView.setOnClickListener(view -> { if (itemBuilder.getOnPlaylistSelectedListener() != null) { diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java index 01f3be6b328..32fa8bf608b 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java @@ -16,8 +16,8 @@ import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.util.DependentPreferenceHelper; import org.schabi.newpipe.util.Localization; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.StreamTypeUtil; +import org.schabi.newpipe.util.image.CoilHelper; import org.schabi.newpipe.views.AnimatedProgressBar; import java.util.concurrent.TimeUnit; @@ -87,7 +87,7 @@ public void updateFromItem(final InfoItem infoItem, } // Default thumbnail is shown on error, while loading and if the url is empty - PicassoHelper.loadThumbnail(item.getThumbnails()).into(itemThumbnailView); + CoilHelper.INSTANCE.loadThumbnail(itemThumbnailView, item.getThumbnails()); itemView.setOnClickListener(view -> { if (itemBuilder.getOnStreamSelectedListener() != null) { diff --git a/app/src/main/java/org/schabi/newpipe/ktx/Bitmap.kt b/app/src/main/java/org/schabi/newpipe/ktx/Bitmap.kt new file mode 100644 index 00000000000..140351b0d6c --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/ktx/Bitmap.kt @@ -0,0 +1,13 @@ +package org.schabi.newpipe.ktx + +import android.graphics.Bitmap +import android.graphics.Rect +import androidx.core.graphics.BitmapCompat + +@Suppress("NOTHING_TO_INLINE") +inline fun Bitmap.scale( + width: Int, + height: Int, + srcRect: Rect? = null, + scaleInLinearSpace: Boolean = true +) = BitmapCompat.createScaledBitmap(this, width, height, srcRect, scaleInLinearSpace) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/item/StreamItem.kt b/app/src/main/java/org/schabi/newpipe/local/feed/item/StreamItem.kt index e367961f12c..258a67a4cc6 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/item/StreamItem.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/item/StreamItem.kt @@ -21,7 +21,7 @@ import org.schabi.newpipe.extractor.stream.StreamType.POST_LIVE_STREAM import org.schabi.newpipe.extractor.stream.StreamType.VIDEO_STREAM import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.StreamTypeUtil -import org.schabi.newpipe.util.image.PicassoHelper +import org.schabi.newpipe.util.image.CoilHelper data class StreamItem( val streamWithState: StreamWithState, @@ -101,7 +101,7 @@ data class StreamItem( viewBinding.itemProgressView.visibility = View.GONE } - PicassoHelper.loadThumbnail(stream.thumbnailUrl).into(viewBinding.itemThumbnailView) + CoilHelper.loadThumbnail(viewBinding.itemThumbnailView, stream.thumbnailUrl) if (itemVersion != ItemVersion.MINI) { viewBinding.itemAdditionalDetails.text = diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt b/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt index aa03aafc54c..11be80f2a1f 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt @@ -6,7 +6,6 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.Bitmap -import android.graphics.drawable.Drawable import android.net.Uri import android.os.Build import android.provider.Settings @@ -17,20 +16,17 @@ import androidx.core.content.ContextCompat import androidx.core.content.getSystemService import androidx.core.net.toUri import androidx.preference.PreferenceManager -import com.squareup.picasso.Picasso -import com.squareup.picasso.Target import org.schabi.newpipe.R import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.local.feed.service.FeedUpdateInfo import org.schabi.newpipe.util.NavigationHelper -import org.schabi.newpipe.util.image.PicassoHelper +import org.schabi.newpipe.util.image.CoilHelper /** * Helper for everything related to show notifications about new streams to the user. */ class NotificationHelper(val context: Context) { private val manager = NotificationManagerCompat.from(context) - private val iconLoadingTargets = ArrayList() /** * Show notifications for new streams from a single channel. The individual notifications are @@ -71,67 +67,34 @@ class NotificationHelper(val context: Context) { summaryBuilder.setStyle(style) // open the channel page when clicking on the summary notification + val intent = NavigationHelper + .getChannelIntent(context, data.serviceId, data.url) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) summaryBuilder.setContentIntent( - PendingIntentCompat.getActivity( - context, - data.pseudoId, - NavigationHelper - .getChannelIntent(context, data.serviceId, data.url) - .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), - 0, - false - ) + PendingIntentCompat.getActivity(context, data.pseudoId, intent, 0, false) ) - // a Target is like a listener for image loading events - val target = object : Target { - override fun onBitmapLoaded(bitmap: Bitmap, from: Picasso.LoadedFrom) { - // set channel icon only if there is actually one (for Android versions < 7.0) - summaryBuilder.setLargeIcon(bitmap) - - // Show individual stream notifications, set channel icon only if there is actually - // one - showStreamNotifications(newStreams, data.serviceId, data.url, bitmap) - // Show summary notification if enabled - if (manager.areNotificationsEnabled()) { - manager.notify(data.pseudoId, summaryBuilder.build()) - } - - iconLoadingTargets.remove(this) // allow it to be garbage-collected - } - - override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) { - // Show individual stream notifications - showStreamNotifications(newStreams, data.serviceId, data.url, null) - // Show summary notification if enabled - if (manager.areNotificationsEnabled()) { - manager.notify(data.pseudoId, summaryBuilder.build()) - } - iconLoadingTargets.remove(this) // allow it to be garbage-collected - } + val avatarIcon = + CoilHelper.loadBitmapBlocking(context, data.avatarUrl, R.drawable.ic_newpipe_triangle_white) + summaryBuilder.setLargeIcon(avatarIcon) - override fun onPrepareLoad(placeHolderDrawable: Drawable) { - // Nothing to do - } + // Show individual stream notifications, set channel icon only if there is actually one + showStreamNotifications(newStreams, data.serviceId, avatarIcon) + // Show summary notification + if (manager.areNotificationsEnabled()) { + manager.notify(data.pseudoId, summaryBuilder.build()) } - - // add the target to the list to hold a strong reference and prevent it from being garbage - // collected, since Picasso only holds weak references to targets - iconLoadingTargets.add(target) - - PicassoHelper.loadNotificationIcon(data.avatarUrl).into(target) } private fun showStreamNotifications( newStreams: List, serviceId: Int, - channelUrl: String, channelIcon: Bitmap? ) { if (manager.areNotificationsEnabled()) { newStreams.forEach { stream -> val notification = - createStreamNotification(stream, serviceId, channelUrl, channelIcon) + createStreamNotification(stream, serviceId, channelIcon) manager.notify(stream.url.hashCode(), notification) } } @@ -140,7 +103,6 @@ class NotificationHelper(val context: Context) { private fun createStreamNotification( item: StreamInfoItem, serviceId: Int, - channelUrl: String, channelIcon: Bitmap? ): Notification { return NotificationCompat.Builder( @@ -151,7 +113,7 @@ class NotificationHelper(val context: Context) { .setLargeIcon(channelIcon) .setContentTitle(item.name) .setContentText(item.uploaderName) - .setGroup(channelUrl) + .setGroup(item.uploaderUrl) .setColor(ContextCompat.getColor(context, R.color.ic_launcher_background)) .setColorized(true) .setAutoCancel(true) diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java index 528275d75d6..518fb3553a6 100644 --- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java @@ -8,8 +8,8 @@ import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.local.LocalItemBuilder; import org.schabi.newpipe.local.history.HistoryRecordManager; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.Localization; +import org.schabi.newpipe.util.image.CoilHelper; import java.time.format.DateTimeFormatter; @@ -30,17 +30,16 @@ public LocalPlaylistItemHolder(final LocalItemBuilder infoItemBuilder, final Vie public void updateFromItem(final LocalItem localItem, final HistoryRecordManager historyRecordManager, final DateTimeFormatter dateTimeFormatter) { - if (!(localItem instanceof PlaylistMetadataEntry)) { + if (!(localItem instanceof PlaylistMetadataEntry item)) { return; } - final PlaylistMetadataEntry item = (PlaylistMetadataEntry) localItem; itemTitleView.setText(item.getOrderingName()); itemStreamCountView.setText(Localization.localizeStreamCountMini( itemStreamCountView.getContext(), item.getStreamCount())); itemUploaderView.setVisibility(View.INVISIBLE); - PicassoHelper.loadPlaylistThumbnail(item.getThumbnailUrl()).into(itemThumbnailView); + CoilHelper.INSTANCE.loadPlaylistThumbnail(itemThumbnailView, item.getThumbnailUrl()); if (item instanceof PlaylistDuplicatesEntry && ((PlaylistDuplicatesEntry) item).getTimesStreamIsContained() > 0) { diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java index 89a714fd7f6..7dc71bfb4ac 100644 --- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java @@ -16,8 +16,8 @@ import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.util.DependentPreferenceHelper; import org.schabi.newpipe.util.Localization; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.ServiceHelper; +import org.schabi.newpipe.util.image.CoilHelper; import org.schabi.newpipe.views.AnimatedProgressBar; import java.time.format.DateTimeFormatter; @@ -83,8 +83,8 @@ public void updateFromItem(final LocalItem localItem, } // Default thumbnail is shown on error, while loading and if the url is empty - PicassoHelper.loadThumbnail(item.getStreamEntity().getThumbnailUrl()) - .into(itemThumbnailView); + CoilHelper.INSTANCE.loadThumbnail(itemThumbnailView, + item.getStreamEntity().getThumbnailUrl()); itemView.setOnClickListener(view -> { if (itemBuilder.getOnItemSelectedListener() != null) { diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java index 150a35eb59c..f26a76ad9f7 100644 --- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java @@ -16,8 +16,8 @@ import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.util.DependentPreferenceHelper; import org.schabi.newpipe.util.Localization; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.ServiceHelper; +import org.schabi.newpipe.util.image.CoilHelper; import org.schabi.newpipe.views.AnimatedProgressBar; import java.time.format.DateTimeFormatter; @@ -117,8 +117,8 @@ public void updateFromItem(final LocalItem localItem, } // Default thumbnail is shown on error, while loading and if the url is empty - PicassoHelper.loadThumbnail(item.getStreamEntity().getThumbnailUrl()) - .into(itemThumbnailView); + CoilHelper.INSTANCE.loadThumbnail(itemThumbnailView, + item.getStreamEntity().getThumbnailUrl()); itemView.setOnClickListener(view -> { if (itemBuilder.getOnItemSelectedListener() != null) { diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java index 3a339aec878..1eb97a59e53 100644 --- a/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java @@ -8,8 +8,8 @@ import org.schabi.newpipe.local.LocalItemBuilder; import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.util.Localization; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.ServiceHelper; +import org.schabi.newpipe.util.image.CoilHelper; import java.time.format.DateTimeFormatter; @@ -29,10 +29,9 @@ public RemotePlaylistItemHolder(final LocalItemBuilder infoItemBuilder, public void updateFromItem(final LocalItem localItem, final HistoryRecordManager historyRecordManager, final DateTimeFormatter dateTimeFormatter) { - if (!(localItem instanceof PlaylistRemoteEntity)) { + if (!(localItem instanceof PlaylistRemoteEntity item)) { return; } - final PlaylistRemoteEntity item = (PlaylistRemoteEntity) localItem; itemTitleView.setText(item.getOrderingName()); itemStreamCountView.setText(Localization.localizeStreamCountMini( @@ -45,7 +44,7 @@ public void updateFromItem(final LocalItem localItem, itemUploaderView.setText(ServiceHelper.getNameOfServiceById(item.getServiceId())); } - PicassoHelper.loadPlaylistThumbnail(item.getThumbnailUrl()).into(itemThumbnailView); + CoilHelper.INSTANCE.loadPlaylistThumbnail(itemThumbnailView, item.getThumbnailUrl()); super.updateFromItem(localItem, historyRecordManager, dateTimeFormatter); } diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/item/ChannelItem.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/item/ChannelItem.kt index 7946de69385..7687a7d6de8 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/item/ChannelItem.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/item/ChannelItem.kt @@ -9,7 +9,7 @@ import org.schabi.newpipe.R import org.schabi.newpipe.extractor.channel.ChannelInfoItem import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.OnClickGesture -import org.schabi.newpipe.util.image.PicassoHelper +import org.schabi.newpipe.util.image.CoilHelper class ChannelItem( private val infoItem: ChannelInfoItem, @@ -39,7 +39,7 @@ class ChannelItem( itemChannelDescriptionView.text = infoItem.description } - PicassoHelper.loadAvatar(infoItem.thumbnails).into(itemThumbnailView) + CoilHelper.loadAvatar(itemThumbnailView, infoItem.thumbnails) gesturesListener?.run { viewHolder.root.setOnClickListener { selected(infoItem) } diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/item/PickerSubscriptionItem.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/item/PickerSubscriptionItem.kt index 3a4c6e41b99..da35447e38d 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/item/PickerSubscriptionItem.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/item/PickerSubscriptionItem.kt @@ -10,7 +10,7 @@ import org.schabi.newpipe.database.subscription.SubscriptionEntity import org.schabi.newpipe.databinding.PickerSubscriptionItemBinding import org.schabi.newpipe.ktx.AnimationType import org.schabi.newpipe.ktx.animate -import org.schabi.newpipe.util.image.PicassoHelper +import org.schabi.newpipe.util.image.CoilHelper data class PickerSubscriptionItem( val subscriptionEntity: SubscriptionEntity, @@ -21,7 +21,7 @@ data class PickerSubscriptionItem( override fun getSpanSize(spanCount: Int, position: Int): Int = 1 override fun bind(viewBinding: PickerSubscriptionItemBinding, position: Int) { - PicassoHelper.loadAvatar(subscriptionEntity.avatarUrl).into(viewBinding.thumbnailView) + CoilHelper.loadAvatar(viewBinding.thumbnailView, subscriptionEntity.avatarUrl) viewBinding.titleView.text = subscriptionEntity.name viewBinding.selectedHighlight.isVisible = isSelected } 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 b07b15a4585..159ecbd6efc 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -46,13 +46,14 @@ import static org.schabi.newpipe.util.ListHelper.getResolutionIndex; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static coil3.Image_androidKt.toBitmap; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.support.v4.media.session.MediaSessionCompat; import android.util.Log; @@ -80,8 +81,6 @@ import com.google.android.exoplayer2.trackselection.MappingTrackSelector; import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.video.VideoSize; -import com.squareup.picasso.Picasso; -import com.squareup.picasso.Target; import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; @@ -126,13 +125,14 @@ import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.SerializedCache; import org.schabi.newpipe.util.StreamTypeUtil; -import org.schabi.newpipe.util.image.PicassoHelper; +import org.schabi.newpipe.util.image.CoilHelper; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.stream.IntStream; +import coil3.target.Target; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; @@ -181,7 +181,6 @@ public final class Player implements PlaybackListener, Listener { //////////////////////////////////////////////////////////////////////////*/ public static final int RENDERER_UNAVAILABLE = -1; - private static final String PICASSO_PLAYER_THUMBNAIL_TAG = "PICASSO_PLAYER_THUMBNAIL_TAG"; /*////////////////////////////////////////////////////////////////////////// // Playback @@ -200,6 +199,8 @@ public final class Player implements PlaybackListener, Listener { private MediaItemTag currentMetadata; @Nullable private Bitmap currentThumbnail; + @Nullable + private coil3.request.Disposable thumbnailDisposable; /*////////////////////////////////////////////////////////////////////////// // Player @@ -255,12 +256,6 @@ public final class Player implements PlaybackListener, Listener { @NonNull private final CompositeDisposable streamItemDisposable = new CompositeDisposable(); - // This is the only listener we need for thumbnail loading, since there is always at most only - // one thumbnail being loaded at a time. This field is also here to maintain a strong reference, - // which would otherwise be garbage collected since Picasso holds weak references to targets. - @NonNull - private final Target currentThumbnailTarget; - /*////////////////////////////////////////////////////////////////////////// // Utils //////////////////////////////////////////////////////////////////////////*/ @@ -314,8 +309,6 @@ public Player(@NonNull final PlayerService service, videoResolver = new VideoPlaybackResolver(context, dataSource, getQualityResolver()); audioResolver = new AudioPlaybackResolver(context, dataSource); - currentThumbnailTarget = getCurrentThumbnailTarget(); - // The UIs added here should always be present. They will be initialized when the player // reaches the initialization step. Make sure the media session ui is before the // notification ui in the UIs list, since the notification depends on the media session in @@ -704,7 +697,6 @@ public void destroy() { databaseUpdateDisposable.clear(); progressUpdateDisposable.set(null); streamItemDisposable.clear(); - cancelLoadingCurrentThumbnail(); UIs.destroyAll(Object.class); // destroy every UI: obviously every UI extends Object } @@ -884,67 +876,58 @@ private void unregisterBroadcastReceiver() { //////////////////////////////////////////////////////////////////////////*/ //region Thumbnail loading - private Target getCurrentThumbnailTarget() { - // a Picasso target is just a listener for thumbnail loading events - return new Target() { - @Override - public void onBitmapLoaded(final Bitmap bitmap, final Picasso.LoadedFrom from) { - if (DEBUG) { - Log.d(TAG, "Thumbnail - onBitmapLoaded() called with: bitmap = [" + bitmap - + " -> " + bitmap.getWidth() + "x" + bitmap.getHeight() + "], from = [" - + from + "]"); - } - // there is a new thumbnail, so e.g. the end screen thumbnail needs to change, too. - onThumbnailLoaded(bitmap); - } - - @Override - public void onBitmapFailed(final Exception e, final Drawable errorDrawable) { - Log.e(TAG, "Thumbnail - onBitmapFailed() called", e); - // there is a new thumbnail, so e.g. the end screen thumbnail needs to change, too. - onThumbnailLoaded(null); - } - - @Override - public void onPrepareLoad(final Drawable placeHolderDrawable) { - if (DEBUG) { - Log.d(TAG, "Thumbnail - onPrepareLoad() called"); - } - } - }; - } - private void loadCurrentThumbnail(final List thumbnails) { if (DEBUG) { Log.d(TAG, "Thumbnail - loadCurrentThumbnail() called with thumbnails = [" + thumbnails.size() + "]"); } - // first cancel any previous loading - cancelLoadingCurrentThumbnail(); + // Cancel any ongoing image loading + if (thumbnailDisposable != null) { + thumbnailDisposable.dispose(); + } // Unset currentThumbnail, since it is now outdated. This ensures it is not used in media - // session metadata while the new thumbnail is being loaded by Picasso. + // session metadata while the new thumbnail is being loaded by Coil. onThumbnailLoaded(null); if (thumbnails.isEmpty()) { return; } // scale down the notification thumbnail for performance - PicassoHelper.loadScaledDownThumbnail(context, thumbnails) - .tag(PICASSO_PLAYER_THUMBNAIL_TAG) - .into(currentThumbnailTarget); - } + final var thumbnailTarget = new Target() { + @Override + public void onError(@Nullable final coil3.Image error) { + Log.e(TAG, "Thumbnail - onError() called"); + // there is a new thumbnail, so e.g. the end screen thumbnail needs to change, too. + onThumbnailLoaded(null); + } + + @Override + public void onStart(@Nullable final coil3.Image placeholder) { + if (DEBUG) { + Log.d(TAG, "Thumbnail - onStart() called"); + } + } - private void cancelLoadingCurrentThumbnail() { - // cancel the Picasso job associated with the player thumbnail, if any - PicassoHelper.cancelTag(PICASSO_PLAYER_THUMBNAIL_TAG); + @Override + public void onSuccess(@NonNull final coil3.Image result) { + if (DEBUG) { + Log.d(TAG, "Thumbnail - onSuccess() called with: drawable = [" + result + "]"); + } + // there is a new thumbnail, so e.g. the end screen thumbnail needs to change, too. + onThumbnailLoaded(toBitmap(result)); + } + }; + thumbnailDisposable = CoilHelper.INSTANCE + .loadScaledDownThumbnail(context, thumbnails, thumbnailTarget); } + private void onThumbnailLoaded(@Nullable final Bitmap bitmap) { // Avoid useless thumbnail updates, if the thumbnail has not actually changed. Based on the // thumbnail loading code, this if would be skipped only when both bitmaps are `null`, since - // onThumbnailLoaded won't be called twice with the same nonnull bitmap by Picasso's target. + // onThumbnailLoaded won't be called twice with the same nonnull bitmap by Coil's target. if (currentThumbnail != bitmap) { currentThumbnail = bitmap; UIs.call(playerUi -> playerUi.onThumbnailLoaded(bitmap)); diff --git a/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueueItemBuilder.java b/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueueItemBuilder.java index 066f92c2607..8994aef79df 100644 --- a/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueueItemBuilder.java +++ b/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueueItemBuilder.java @@ -6,8 +6,8 @@ import android.view.View; import org.schabi.newpipe.util.Localization; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.ServiceHelper; +import org.schabi.newpipe.util.image.CoilHelper; public class PlayQueueItemBuilder { private static final String TAG = PlayQueueItemBuilder.class.toString(); @@ -33,7 +33,7 @@ public void buildStreamInfoItem(final PlayQueueItemHolder holder, final PlayQueu holder.itemDurationView.setVisibility(View.GONE); } - PicassoHelper.loadThumbnail(item.getThumbnails()).into(holder.itemThumbnailView); + CoilHelper.INSTANCE.loadThumbnail(holder.itemThumbnailView, item.getThumbnails()); holder.itemRoot.setOnClickListener(view -> { if (onItemClickListener != null) { diff --git a/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHolder.java b/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHolder.java index 09c61b8b35a..d9e25fe8b92 100644 --- a/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHolder.java +++ b/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHolder.java @@ -13,8 +13,9 @@ import com.google.common.base.Stopwatch; +import org.schabi.newpipe.App; import org.schabi.newpipe.extractor.stream.Frameset; -import org.schabi.newpipe.util.image.PicassoHelper; +import org.schabi.newpipe.util.image.CoilHelper; import java.util.Comparator; import java.util.List; @@ -207,8 +208,8 @@ private Bitmap getBitMapFrom(final String url) { Log.d(TAG, "Downloading bitmap for seekbarPreview from '" + url + "'"); // Gets the bitmap within the timeout of 15 seconds imposed by default by OkHttpClient - // Ensure that your are not running on the main-Thread this will otherwise hang - final Bitmap bitmap = PicassoHelper.loadSeekbarThumbnailPreview(url).get(); + // Ensure that you are not running on the main thread, otherwise this will hang + final var bitmap = CoilHelper.INSTANCE.loadBitmapBlocking(App.getInstance(), url); if (sw != null) { Log.d(TAG, "Download of bitmap for seekbarPreview from '" + url + "' took " 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 b855f7c38aa..85ee9785313 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java @@ -19,12 +19,12 @@ import org.schabi.newpipe.player.helper.PlayerHelper; import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.image.ImageStrategy; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.image.PreferredImageQuality; -import java.io.IOException; import java.util.Locale; +import coil3.SingletonImageLoader; + public class ContentSettingsFragment extends BasePreferenceFragment { private String youtubeRestrictedModeEnabledKey; @@ -74,14 +74,12 @@ private void setupImageQualityPref() { (preference, newValue) -> { ImageStrategy.setPreferredImageQuality(PreferredImageQuality .fromPreferenceKey(requireContext(), (String) newValue)); - try { - PicassoHelper.clearCache(preference.getContext()); - Toast.makeText(preference.getContext(), - R.string.thumbnail_cache_wipe_complete_notice, Toast.LENGTH_SHORT) + final var loader = SingletonImageLoader.get(preference.getContext()); + loader.getMemoryCache().clear(); + loader.getDiskCache().clear(); + Toast.makeText(preference.getContext(), + R.string.thumbnail_cache_wipe_complete_notice, Toast.LENGTH_SHORT) .show(); - } catch (final IOException e) { - Log.e(TAG, "Unable to clear Picasso cache", e); - } return true; }); } diff --git a/app/src/main/java/org/schabi/newpipe/settings/DebugSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/DebugSettingsFragment.java index 82f2f5bb632..229de7005c3 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/DebugSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/DebugSettingsFragment.java @@ -10,7 +10,6 @@ import org.schabi.newpipe.error.ErrorUtil; import org.schabi.newpipe.error.UserAction; import org.schabi.newpipe.local.feed.notifications.NotificationWorker; -import org.schabi.newpipe.util.image.PicassoHelper; import java.util.Optional; @@ -25,8 +24,6 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro requirePreference(R.string.allow_heap_dumping_key); final Preference showMemoryLeaksPreference = requirePreference(R.string.show_memory_leaks_key); - final Preference showImageIndicatorsPreference = - requirePreference(R.string.show_image_indicators_key); final Preference checkNewStreamsPreference = requirePreference(R.string.check_new_streams_key); final Preference crashTheAppPreference = @@ -54,11 +51,6 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro showMemoryLeaksPreference.setSummary(R.string.leak_canary_not_available); } - showImageIndicatorsPreference.setOnPreferenceChangeListener((preference, newValue) -> { - PicassoHelper.setIndicatorsEnabled((Boolean) newValue); - return true; - }); - checkNewStreamsPreference.setOnPreferenceClickListener(preference -> { NotificationWorker.runNow(preference.getContext()); return true; diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java index 18e0816bbde..25d6b3a0f6e 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java @@ -19,8 +19,8 @@ import org.schabi.newpipe.database.subscription.SubscriptionEntity; import org.schabi.newpipe.error.ErrorUtil; import org.schabi.newpipe.local.subscription.SubscriptionManager; -import org.schabi.newpipe.util.image.PicassoHelper; import org.schabi.newpipe.util.ThemeHelper; +import org.schabi.newpipe.util.image.CoilHelper; import java.util.List; import java.util.Vector; @@ -190,7 +190,7 @@ public void onBindViewHolder(final SelectChannelItemHolder holder, final int pos final SubscriptionEntity entry = subscriptions.get(position); holder.titleView.setText(entry.getName()); holder.view.setOnClickListener(view -> clickedItem(position)); - PicassoHelper.loadAvatar(entry.getAvatarUrl()).into(holder.thumbnailView); + CoilHelper.INSTANCE.loadAvatar(holder.thumbnailView, entry.getAvatarUrl()); } @Override diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java index 880cbb282ea..ea475cb4f5e 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java @@ -27,7 +27,7 @@ import org.schabi.newpipe.error.UserAction; import org.schabi.newpipe.local.playlist.LocalPlaylistManager; import org.schabi.newpipe.local.playlist.RemotePlaylistManager; -import org.schabi.newpipe.util.image.PicassoHelper; +import org.schabi.newpipe.util.image.CoilHelper; import java.util.List; import java.util.Vector; @@ -154,21 +154,17 @@ public void onBindViewHolder(@NonNull final SelectPlaylistItemHolder holder, final int position) { final PlaylistLocalItem selectedItem = playlists.get(position); - if (selectedItem instanceof PlaylistMetadataEntry) { - final PlaylistMetadataEntry entry = ((PlaylistMetadataEntry) selectedItem); - + if (selectedItem instanceof PlaylistMetadataEntry entry) { holder.titleView.setText(entry.getOrderingName()); holder.view.setOnClickListener(view -> clickedItem(position)); - PicassoHelper.loadPlaylistThumbnail(entry.getThumbnailUrl()) - .into(holder.thumbnailView); - - } else if (selectedItem instanceof PlaylistRemoteEntity) { - final PlaylistRemoteEntity entry = ((PlaylistRemoteEntity) selectedItem); + CoilHelper.INSTANCE.loadPlaylistThumbnail(holder.thumbnailView, + entry.getThumbnailUrl()); + } else if (selectedItem instanceof PlaylistRemoteEntity entry) { holder.titleView.setText(entry.getOrderingName()); holder.view.setOnClickListener(view -> clickedItem(position)); - PicassoHelper.loadPlaylistThumbnail(entry.getThumbnailUrl()) - .into(holder.thumbnailView); + CoilHelper.INSTANCE.loadPlaylistThumbnail(holder.thumbnailView, + entry.getThumbnailUrl()); } } diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java index 9fe351b4b97..d563621056f 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java @@ -1,6 +1,7 @@ package org.schabi.newpipe.util.external_communication; import static org.schabi.newpipe.MainActivity.DEBUG; +import static coil3.Image_androidKt.toBitmap; import android.content.ActivityNotFoundException; import android.content.ClipData; @@ -9,6 +10,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.text.TextUtils; @@ -25,12 +27,15 @@ import org.schabi.newpipe.RouterActivity; import org.schabi.newpipe.extractor.Image; import org.schabi.newpipe.util.image.ImageStrategy; -import org.schabi.newpipe.util.image.PicassoHelper; -import java.io.File; -import java.io.FileOutputStream; +import java.nio.file.Files; +import java.util.Collections; import java.util.List; +import coil3.SingletonImageLoader; +import coil3.disk.DiskCache; +import coil3.memory.MemoryCache; + public final class ShareUtils { private static final String TAG = ShareUtils.class.getSimpleName(); @@ -273,7 +278,7 @@ public static void shareText(@NonNull final Context context, * @param content the content to share * @param images a set of possible {@link Image}s of the subject, among which to choose with * {@link ImageStrategy#choosePreferredImage(List)} since that's likely to - * provide an image that is in Picasso's cache + * provide an image that is in Coil's cache */ public static void shareText(@NonNull final Context context, @NonNull final String title, @@ -334,11 +339,9 @@ public static void copyToClipboard(@NonNull final Context context, final String * *

* In order not to worry about network issues (timeouts, DNS issues, low connection speed, ...) - * when sharing a content, only images in the {@link com.squareup.picasso.LruCache LruCache} - * used by the Picasso library inside {@link PicassoHelper} are used as preview images. If the - * thumbnail image is not in the cache, no {@link ClipData} will be generated and {@code null} - * will be returned. - *

+ * when sharing a content, only images in the {@link MemoryCache} or {@link DiskCache} + * used by the Coil library are used as preview images. If the thumbnail image is not in the + * cache, no {@link ClipData} will be generated and {@code null} will be returned. * *

* In order to display the image in the content preview of the Android share sheet, an URI of @@ -354,12 +357,6 @@ public static void copyToClipboard(@NonNull final Context context, final String *

* *

- * This method will call {@link PicassoHelper#getImageFromCacheIfPresent(String)} to get the - * thumbnail of the content in the {@link com.squareup.picasso.LruCache LruCache} used by - * the Picasso library inside {@link PicassoHelper}. - *

- * - *

* Using the result of this method when sharing has only an effect on the system share sheet (if * OEMs didn't change Android system standard behavior) on Android API 29 and higher. *

@@ -373,33 +370,46 @@ private static ClipData generateClipDataForImagePreview( @NonNull final Context context, @NonNull final String thumbnailUrl) { try { - final Bitmap bitmap = PicassoHelper.getImageFromCacheIfPresent(thumbnailUrl); - if (bitmap == null) { - return null; - } - // Save the image in memory to the application's cache because we need a URI to the // image to generate a ClipData which will show the share sheet, and so an image file final Context applicationContext = context.getApplicationContext(); - final String appFolder = applicationContext.getCacheDir().getAbsolutePath(); - final File thumbnailPreviewFile = new File(appFolder - + "/android_share_sheet_image_preview.jpg"); + final var loader = SingletonImageLoader.get(context); + final var value = loader.getMemoryCache() + .get(new MemoryCache.Key(thumbnailUrl, Collections.emptyMap())); + + final Bitmap cachedBitmap; + if (value != null) { + cachedBitmap = toBitmap(value.getImage()); + } else { + try (var snapshot = loader.getDiskCache().openSnapshot(thumbnailUrl)) { + if (snapshot != null) { + cachedBitmap = BitmapFactory.decodeFile(snapshot.getData().toString()); + } else { + cachedBitmap = null; + } + } + } - // Any existing file will be overwritten with FileOutputStream - final FileOutputStream fileOutputStream = new FileOutputStream(thumbnailPreviewFile); - bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream); - fileOutputStream.close(); + if (cachedBitmap == null) { + return null; + } + + final var path = applicationContext.getCacheDir().toPath() + .resolve("android_share_sheet_image_preview.jpg"); + // Any existing file will be overwritten + try (var outputStream = Files.newOutputStream(path)) { + cachedBitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream); + } final ClipData clipData = ClipData.newUri(applicationContext.getContentResolver(), "", - FileProvider.getUriForFile(applicationContext, - BuildConfig.APPLICATION_ID + ".provider", - thumbnailPreviewFile)); + FileProvider.getUriForFile(applicationContext, + BuildConfig.APPLICATION_ID + ".provider", + path.toFile())); if (DEBUG) { Log.d(TAG, "ClipData successfully generated for Android share sheet: " + clipData); } return clipData; - } catch (final Exception e) { Log.w(TAG, "Error when setting preview image for share sheet", e); return null; diff --git a/app/src/main/java/org/schabi/newpipe/util/image/CoilHelper.kt b/app/src/main/java/org/schabi/newpipe/util/image/CoilHelper.kt new file mode 100644 index 00000000000..bd1c57f98b1 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/image/CoilHelper.kt @@ -0,0 +1,185 @@ +package org.schabi.newpipe.util.image + +import android.content.Context +import android.graphics.Bitmap +import android.util.Log +import android.widget.ImageView +import androidx.annotation.DrawableRes +import coil3.executeBlocking +import coil3.imageLoader +import coil3.request.Disposable +import coil3.request.ImageRequest +import coil3.request.error +import coil3.request.placeholder +import coil3.request.target +import coil3.request.transformations +import coil3.size.Size +import coil3.target.Target +import coil3.toBitmap +import coil3.transform.Transformation +import kotlin.math.min +import org.schabi.newpipe.MainActivity +import org.schabi.newpipe.R +import org.schabi.newpipe.extractor.Image +import org.schabi.newpipe.ktx.scale + +object CoilHelper { + private val TAG = CoilHelper::class.java.simpleName + + @JvmOverloads + fun loadBitmapBlocking( + context: Context, + url: String?, + @DrawableRes placeholderResId: Int = 0 + ): Bitmap? = context.imageLoader + .executeBlocking(getImageRequest(context, url, placeholderResId).build()) + .image + ?.toBitmap() + + fun loadAvatar( + target: ImageView, + images: List + ) { + loadImageDefault(target, images, R.drawable.placeholder_person) + } + + fun loadAvatar( + target: ImageView, + url: String? + ) { + loadImageDefault(target, url, R.drawable.placeholder_person) + } + + fun loadThumbnail( + target: ImageView, + images: List + ) { + loadImageDefault(target, images, R.drawable.placeholder_thumbnail_video) + } + + fun loadThumbnail( + target: ImageView, + url: String? + ) { + loadImageDefault(target, url, R.drawable.placeholder_thumbnail_video) + } + + fun loadScaledDownThumbnail( + context: Context, + images: List, + target: Target + ): Disposable { + val url = ImageStrategy.choosePreferredImage(images) + val request = + getImageRequest(context, url, R.drawable.placeholder_thumbnail_video) + .target(target) + .transformations( + object : Transformation() { + override val cacheKey = "COIL_PLAYER_THUMBNAIL_TRANSFORMATION_KEY" + + override suspend fun transform( + input: Bitmap, + size: Size + ): Bitmap { + if (MainActivity.DEBUG) { + Log.d(TAG, "Thumbnail - transform() called") + } + + val notificationThumbnailWidth = + min( + context.resources.getDimension(R.dimen.player_notification_thumbnail_width), + input.width.toFloat() + ).toInt() + + var newHeight = input.height / (input.width / notificationThumbnailWidth) + val result = input.scale(notificationThumbnailWidth, newHeight) + + return if (result == input || !result.isMutable) { + // create a new mutable bitmap to prevent strange crashes on some + // devices (see #4638) + newHeight = input.height / (input.width / (notificationThumbnailWidth - 1)) + input.scale(notificationThumbnailWidth, newHeight) + } else { + result + } + } + } + ).build() + + return context.imageLoader.enqueue(request) + } + + fun loadDetailsThumbnail( + target: ImageView, + images: List + ) { + val url = ImageStrategy.choosePreferredImage(images) + loadImageDefault(target, url, R.drawable.placeholder_thumbnail_video, false) + } + + fun loadBanner( + target: ImageView, + images: List + ) { + loadImageDefault(target, images, R.drawable.placeholder_channel_banner) + } + + fun loadPlaylistThumbnail( + target: ImageView, + images: List + ) { + loadImageDefault(target, images, R.drawable.placeholder_thumbnail_playlist) + } + + fun loadPlaylistThumbnail( + target: ImageView, + url: String? + ) { + loadImageDefault(target, url, R.drawable.placeholder_thumbnail_playlist) + } + + private fun loadImageDefault( + target: ImageView, + images: List, + @DrawableRes placeholderResId: Int + ) { + loadImageDefault(target, ImageStrategy.choosePreferredImage(images), placeholderResId) + } + + private fun loadImageDefault( + target: ImageView, + url: String?, + @DrawableRes placeholderResId: Int, + showPlaceholder: Boolean = true + ) { + val request = + getImageRequest(target.context, url, placeholderResId, showPlaceholder) + .target(target) + .build() + target.context.imageLoader.enqueue(request) + } + + private fun getImageRequest( + context: Context, + url: String?, + @DrawableRes placeholderResId: Int, + showPlaceholderWhileLoading: Boolean = true + ): ImageRequest.Builder { + // if the URL was chosen with `choosePreferredImage` it will be null, but check again + // `shouldLoadImages` in case the URL was chosen with `imageListToDbUrl` (which is the case + // for URLs stored in the database) + val takenUrl = url?.takeIf { it.isNotEmpty() && ImageStrategy.shouldLoadImages() } + + return ImageRequest + .Builder(context) + .data(takenUrl) + .error(placeholderResId) + .memoryCacheKey(takenUrl) + .diskCacheKey(takenUrl) + .apply { + if (takenUrl != null || showPlaceholderWhileLoading) { + placeholder(placeholderResId) + } + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/image/PicassoHelper.java b/app/src/main/java/org/schabi/newpipe/util/image/PicassoHelper.java deleted file mode 100644 index 4b116bdf906..00000000000 --- a/app/src/main/java/org/schabi/newpipe/util/image/PicassoHelper.java +++ /dev/null @@ -1,224 +0,0 @@ -package org.schabi.newpipe.util.image; - -import static org.schabi.newpipe.MainActivity.DEBUG; -import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; -import static org.schabi.newpipe.util.image.ImageStrategy.choosePreferredImage; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.util.Log; - -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.graphics.BitmapCompat; - -import com.squareup.picasso.Cache; -import com.squareup.picasso.LruCache; -import com.squareup.picasso.OkHttp3Downloader; -import com.squareup.picasso.Picasso; -import com.squareup.picasso.RequestCreator; -import com.squareup.picasso.Transformation; - -import org.schabi.newpipe.R; -import org.schabi.newpipe.extractor.Image; - -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import okhttp3.OkHttpClient; - -public final class PicassoHelper { - private static final String TAG = PicassoHelper.class.getSimpleName(); - private static final String PLAYER_THUMBNAIL_TRANSFORMATION_KEY = - "PICASSO_PLAYER_THUMBNAIL_TRANSFORMATION_KEY"; - - private PicassoHelper() { - } - - private static Cache picassoCache; - private static OkHttpClient picassoDownloaderClient; - - // suppress because terminate() is called in App.onTerminate(), preventing leaks - @SuppressLint("StaticFieldLeak") - private static Picasso picassoInstance; - - - public static void init(final Context context) { - picassoCache = new LruCache(10 * 1024 * 1024); - picassoDownloaderClient = new OkHttpClient.Builder() - .cache(new okhttp3.Cache(new File(context.getExternalCacheDir(), "picasso"), - 50L * 1024L * 1024L)) - // this should already be the default timeout in OkHttp3, but just to be sure... - .callTimeout(15, TimeUnit.SECONDS) - .build(); - - picassoInstance = new Picasso.Builder(context) - .memoryCache(picassoCache) // memory cache - .downloader(new OkHttp3Downloader(picassoDownloaderClient)) // disk cache - .defaultBitmapConfig(Bitmap.Config.RGB_565) - .build(); - } - - public static void terminate() { - picassoCache = null; - picassoDownloaderClient = null; - - if (picassoInstance != null) { - picassoInstance.shutdown(); - picassoInstance = null; - } - } - - public static void clearCache(final Context context) throws IOException { - picassoInstance.shutdown(); - picassoCache.clear(); // clear memory cache - final okhttp3.Cache diskCache = picassoDownloaderClient.cache(); - if (diskCache != null) { - diskCache.delete(); // clear disk cache - } - init(context); - } - - public static void cancelTag(final Object tag) { - picassoInstance.cancelTag(tag); - } - - public static void setIndicatorsEnabled(final boolean enabled) { - picassoInstance.setIndicatorsEnabled(enabled); // useful for debugging - } - - - public static RequestCreator loadAvatar(@NonNull final List images) { - return loadImageDefault(images, R.drawable.placeholder_person); - } - - public static RequestCreator loadAvatar(@Nullable final String url) { - return loadImageDefault(url, R.drawable.placeholder_person); - } - - public static RequestCreator loadThumbnail(@NonNull final List images) { - return loadImageDefault(images, R.drawable.placeholder_thumbnail_video); - } - - public static RequestCreator loadThumbnail(@Nullable final String url) { - return loadImageDefault(url, R.drawable.placeholder_thumbnail_video); - } - - public static RequestCreator loadDetailsThumbnail(@NonNull final List images) { - return loadImageDefault(choosePreferredImage(images), - R.drawable.placeholder_thumbnail_video, false); - } - - public static RequestCreator loadBanner(@NonNull final List images) { - return loadImageDefault(images, R.drawable.placeholder_channel_banner); - } - - public static RequestCreator loadPlaylistThumbnail(@NonNull final List images) { - return loadImageDefault(images, R.drawable.placeholder_thumbnail_playlist); - } - - public static RequestCreator loadPlaylistThumbnail(@Nullable final String url) { - return loadImageDefault(url, R.drawable.placeholder_thumbnail_playlist); - } - - public static RequestCreator loadSeekbarThumbnailPreview(@Nullable final String url) { - return picassoInstance.load(url); - } - - public static RequestCreator loadNotificationIcon(@Nullable final String url) { - return loadImageDefault(url, R.drawable.ic_newpipe_triangle_white); - } - - - public static RequestCreator loadScaledDownThumbnail(final Context context, - @NonNull final List images) { - // scale down the notification thumbnail for performance - return PicassoHelper.loadThumbnail(images) - .transform(new Transformation() { - @Override - public Bitmap transform(final Bitmap source) { - if (DEBUG) { - Log.d(TAG, "Thumbnail - transform() called"); - } - - final float notificationThumbnailWidth = Math.min( - context.getResources() - .getDimension(R.dimen.player_notification_thumbnail_width), - source.getWidth()); - - final Bitmap result = BitmapCompat.createScaledBitmap( - source, - (int) notificationThumbnailWidth, - (int) (source.getHeight() - / (source.getWidth() / notificationThumbnailWidth)), - null, - true); - - if (result == source || !result.isMutable()) { - // create a new mutable bitmap to prevent strange crashes on some - // devices (see #4638) - final Bitmap copied = BitmapCompat.createScaledBitmap( - source, - (int) notificationThumbnailWidth - 1, - (int) (source.getHeight() / (source.getWidth() - / (notificationThumbnailWidth - 1))), - null, - true); - source.recycle(); - return copied; - } else { - source.recycle(); - return result; - } - } - - @Override - public String key() { - return PLAYER_THUMBNAIL_TRANSFORMATION_KEY; - } - }); - } - - @Nullable - public static Bitmap getImageFromCacheIfPresent(@NonNull final String imageUrl) { - // URLs in the internal cache finish with \n so we need to add \n to image URLs - return picassoCache.get(imageUrl + "\n"); - } - - - private static RequestCreator loadImageDefault(@NonNull final List images, - @DrawableRes final int placeholderResId) { - return loadImageDefault(choosePreferredImage(images), placeholderResId); - } - - private static RequestCreator loadImageDefault(@Nullable final String url, - @DrawableRes final int placeholderResId) { - return loadImageDefault(url, placeholderResId, true); - } - - private static RequestCreator loadImageDefault(@Nullable final String url, - @DrawableRes final int placeholderResId, - final boolean showPlaceholderWhileLoading) { - // if the URL was chosen with `choosePreferredImage` it will be null, but check again - // `shouldLoadImages` in case the URL was chosen with `imageListToDbUrl` (which is the case - // for URLs stored in the database) - if (isNullOrEmpty(url) || !ImageStrategy.shouldLoadImages()) { - return picassoInstance - .load((String) null) - .placeholder(placeholderResId) // show placeholder when no image should load - .error(placeholderResId); - } else { - final RequestCreator requestCreator = picassoInstance - .load(url) - .error(placeholderResId); - if (showPlaceholderWhileLoading) { - requestCreator.placeholder(placeholderResId); - } - return requestCreator; - } - } -} diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index ab6e9e34517..d8592b90500 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -241,7 +241,6 @@ show_memory_leaks_key allow_disposed_exceptions_key show_original_time_ago_key - show_image_indicators_key show_crash_the_player_key check_new_streams crash_the_app_key diff --git a/app/src/main/res/xml/debug_settings.xml b/app/src/main/res/xml/debug_settings.xml index 84bb281f31e..d97c5aa1a2b 100644 --- a/app/src/main/res/xml/debug_settings.xml +++ b/app/src/main/res/xml/debug_settings.xml @@ -34,13 +34,6 @@ app:singleLineTitle="false" app:iconSpaceReserved="false" /> - - 2.8 is the last version, not 2.71828! -picasso = "2.8" preference = "1.2.1" prettytime = "5.0.8.Final" recyclerview = "1.4.0" @@ -91,6 +90,8 @@ androidx-webkit = { module = "androidx.webkit:webkit", version.ref = "webkit" } androidx-work-runtime = { module = "androidx.work:work-runtime", version.ref = "work" } androidx-work-rxjava3 = { module = "androidx.work:work-rxjava3", version.ref = "work" } assertj-core = { module = "org.assertj:assertj-core", version.ref = "assertj" } +coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" } +coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" } evernote-statesaver-compiler = { module = "com.evernote:android-state-processor", version.ref = "statesaver" } evernote-statesaver-core = { module = "com.evernote:android-state", version.ref = "statesaver" } facebook-stetho-core = { module = "com.facebook.stetho:stetho", version.ref = "stetho" } @@ -127,7 +128,6 @@ squareup-leakcanary-core = { module = "com.squareup.leakcanary:leakcanary-androi squareup-leakcanary-plumber = { module = "com.squareup.leakcanary:plumber-android", version.ref = "leakcanary" } squareup-leakcanary-watcher = { module = "com.squareup.leakcanary:leakcanary-object-watcher-android", version.ref = "leakcanary" } squareup-okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } -squareup-picasso = { module = "com.squareup.picasso:picasso", version.ref = "picasso" } zacsweers-autoservice-compiler = { module = "dev.zacsweers.autoservice:auto-service-ksp", version.ref = "autoservice-zacsweers" } [plugins] From 402a0aaaa383349a6091d3b65fc78e3f74a57cf9 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sat, 21 Feb 2026 16:45:06 +0800 Subject: [PATCH 69/92] Delete unused preference title and summary Signed-off-by: Aayush Gupta --- app/src/main/res/values-ar-rLY/strings.xml | 2 -- app/src/main/res/values-ar/strings.xml | 2 -- app/src/main/res/values-az/strings.xml | 2 -- app/src/main/res/values-be/strings.xml | 2 -- app/src/main/res/values-bg/strings.xml | 2 -- app/src/main/res/values-bn/strings.xml | 1 - app/src/main/res/values-bs/strings.xml | 2 -- app/src/main/res/values-ca/strings.xml | 2 -- app/src/main/res/values-ckb/strings.xml | 2 -- app/src/main/res/values-cs/strings.xml | 2 -- app/src/main/res/values-da/strings.xml | 2 -- app/src/main/res/values-de/strings.xml | 2 -- app/src/main/res/values-el/strings.xml | 2 -- app/src/main/res/values-es/strings.xml | 2 -- app/src/main/res/values-et/strings.xml | 2 -- app/src/main/res/values-eu/strings.xml | 2 -- app/src/main/res/values-fa/strings.xml | 2 -- app/src/main/res/values-fi/strings.xml | 2 -- app/src/main/res/values-fr/strings.xml | 2 -- app/src/main/res/values-gl/strings.xml | 2 -- app/src/main/res/values-he/strings.xml | 2 -- app/src/main/res/values-hi/strings.xml | 2 -- app/src/main/res/values-hr/strings.xml | 2 -- app/src/main/res/values-hu/strings.xml | 2 -- app/src/main/res/values-in/strings.xml | 2 -- app/src/main/res/values-is/strings.xml | 2 -- app/src/main/res/values-it/strings.xml | 2 -- app/src/main/res/values-ja/strings.xml | 2 -- app/src/main/res/values-ka/strings.xml | 2 -- app/src/main/res/values-ko/strings.xml | 2 -- app/src/main/res/values-lt/strings.xml | 2 -- app/src/main/res/values-lv/strings.xml | 2 -- app/src/main/res/values-ml/strings.xml | 2 -- app/src/main/res/values-nb-rNO/strings.xml | 2 -- app/src/main/res/values-nl-rBE/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 2 -- app/src/main/res/values-nqo/strings.xml | 2 -- app/src/main/res/values-or/strings.xml | 2 -- app/src/main/res/values-pa/strings.xml | 2 -- app/src/main/res/values-pl/strings.xml | 2 -- app/src/main/res/values-pt-rBR/strings.xml | 2 -- app/src/main/res/values-pt-rPT/strings.xml | 2 -- app/src/main/res/values-pt/strings.xml | 2 -- app/src/main/res/values-ro/strings.xml | 2 -- app/src/main/res/values-ru/strings.xml | 2 -- app/src/main/res/values-ryu/strings.xml | 2 -- app/src/main/res/values-sat/strings.xml | 2 -- app/src/main/res/values-sc/strings.xml | 2 -- app/src/main/res/values-sk/strings.xml | 2 -- app/src/main/res/values-so/strings.xml | 2 -- app/src/main/res/values-sr/strings.xml | 2 -- app/src/main/res/values-sv/strings.xml | 2 -- app/src/main/res/values-ta/strings.xml | 2 -- app/src/main/res/values-te/strings.xml | 2 -- app/src/main/res/values-tr/strings.xml | 2 -- app/src/main/res/values-uk/strings.xml | 2 -- app/src/main/res/values-vi/strings.xml | 2 -- app/src/main/res/values-zh-rCN/strings.xml | 2 -- app/src/main/res/values-zh-rHK/strings.xml | 2 -- app/src/main/res/values-zh-rTW/strings.xml | 2 -- app/src/main/res/values/strings.xml | 2 -- 61 files changed, 120 deletions(-) diff --git a/app/src/main/res/values-ar-rLY/strings.xml b/app/src/main/res/values-ar-rLY/strings.xml index e481d6bf718..05e3813d520 100644 --- a/app/src/main/res/values-ar-rLY/strings.xml +++ b/app/src/main/res/values-ar-rLY/strings.xml @@ -299,7 +299,6 @@ %s مشارك جلب البيانات الوصفية… - إظهار مؤشرات الصور انقر للتنزيل %s تعطيل الوضع السريع , @@ -824,7 +823,6 @@ لقد اشتركت الآن في هذه القناة بدءًا من Android 10، يتم دعم \"Storage Access Framework\" فقط إنشاء اسم فريد - أظهر أشرطة ملونة لبيكاسو أعلى الصور تشير إلى مصدرها: الأحمر للشبكة والأزرق للقرص والأخضر للذاكرة فشل الاتصال الآمن يتوفر هذا الفيديو فقط لأعضاء YouTube Music Premium، لذلك لا يمكن بثه أو تنزيله من قبل NewPipe. البث السابق diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index d4e1847f36a..8a840f82825 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -668,8 +668,6 @@ معاينة مصغرة على شريط التمرير وضع علامة على تمت مشاهدته أُعجب بها منشئ المحتوى - أظهر أشرطة ملونة لبيكاسو أعلى الصور تشير إلى مصدرها: الأحمر للشبكة والأزرق للقرص والأخضر للذاكرة - إظهار مؤشرات الصور اقتراحات البحث عن بعد اقتراحات البحث المحلية اسحب العناصر لإزالتها diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index aec305e7269..73ed98d7e78 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -490,8 +490,6 @@ Məlumat əldə edilir… Elementlərdə orijinal, əvvəlki vaxtı göstər Yaşam dövrəsi xaricindəki xətaları bildir - Şəkil göstəricilərini göstər - Şəkillərin üzərində mənbəsini göstərən Picasso rəngli lentləri göstər: şəbəkə üçün qırmızı, disk üçün mavi və yaddaş üçün yaşıl Bəzi endirmələri dayandırmaq mümkün olmasa da, mobil dataya keçərkən faydalıdır Bağla Fayl silindiyi üçün irəliləyiş itirildi diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 530d700a796..16c940e6c45 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -611,8 +611,6 @@ Перайсці на вэб-сайт Каб выдаліць элемент, змахніце яго ўбок Прыбраць пастаянную мініяцюру - Паказваць на відарысах указальнікі - Паказваць на відарысах каляровыя меткі Picasso, якія абазначаюць яго крыніцу: чырвоная — сетка, сіняя — дыск, зялёная — памяць Апрацоўка стужкі… Пры кожным спампоўванні вам будзе прапанавана выбраць месца захавання Загрузка канала… diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 22f4b9685a3..87eee28d94f 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -518,7 +518,6 @@ Това видео е с възрастова граница. \n \nВключете „%1$s“ в настройките ако искате да го пуснете. - Покажи цветни Picasso-панделки в горната част на изображенията като индикатор за техния произход (червен – от мрежата, син – от диска и червен – от паметта) Автоматична (тази на устройството) Мащабиране на миниатюрата в известието от 16:9 към 1:1 формат (възможни са изкривявания) Избете плейлист @@ -788,7 +787,6 @@ NewPipe откри грешка, докоснете, за да докладвате Няма потоци Деактивиране на медийното тунелиране - Покажи индикатори за изображения В очакване Неуспешна последваща обработка Прекъсване на мрежи с измерване diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 9059bd4f507..0d4fbd99c06 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -584,7 +584,6 @@ নতুন ধারা কম্পাঙ্ক দেখো পূর্বদর্শন রেখার মাধ্যমে প্রাকদর্শন - ছবিরূপ সূচক দেখাও দেখিও না যেকোনো নেটওয়ার্ক পরেরটা ক্রমে রাখা হয়েছে diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml index 6c4b08a721a..d422dbe9111 100644 --- a/app/src/main/res/values-bs/strings.xml +++ b/app/src/main/res/values-bs/strings.xml @@ -449,8 +449,6 @@ Onemogući tuneliranje medija Onemogućite tuneliranje medija ako se pojavi crni ekran ili se prilikom reprodukcije videa pojavi prekid. Tuneliranje medija je onemogućeno prema zadanim postavkama na vašem uređaju jer je poznato da vaš model uređaja to ne podržava. - Prikaži indikatore slike - Prikažite Picasso obojene trake preko slika koje označavaju njihov izvor: crvena za mrežu, plava za disk i zelena za memoriju Prikaži \"Sruši plejer\" Prikazuje opciju pada sistema prilikom korištenja plejera Pokreni provjeru za nove tokove diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 88d5b2e65ca..64dd7a4a959 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -621,7 +621,6 @@ No mostris Baixa qualitat (més petit) Alta qualitat (més gran) - Mostra indicadors de la imatge Desactiva l\'entunelament del contingut si en reproduir el vídeos la pantalla se\'n va a negre o s\'entretallen. Mostra detalls del canal No s\'ha establert una carpeta de descàrregues, selecciona la carpeta per defecte ara @@ -665,7 +664,6 @@ Comentari fixat Mostra \"Força el tancament del reproductor\" Mostra una opció de fallada quan s\'utilitza el reproductor - Mostra les cintes de color Picasso a la part superior de les imatges que indiquen la seva font: vermell per a la xarxa, blau per al disc i verd per a la memòria El LeakCanary no està disponible Comprovant freqüència Es necesita una conexió a Internet diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml index d168bbb3745..23baa512c84 100644 --- a/app/src/main/res/values-ckb/strings.xml +++ b/app/src/main/res/values-ckb/strings.xml @@ -625,8 +625,6 @@ پیشان نەدرێت کواڵێتی نزم (بچووکتر) کواڵێتی بەرز (گەورەتر) - پیشاندانی شریتە ڕەنگکراوەکانی پیکاسۆ لەسەرووی وێنەکانەوە بۆ بەدیار خستنی سەرچاوەکانیان : سوور بۆ تۆڕ ، شین بۆ دیسک و سەوز بۆ بیرگە - پیشاندانی دیارخەرەکانی وێنە پێشنیازکراوەکانی گەڕانی ڕیمۆت پێشنیازکراوەکانی گەڕانی نێوخۆیی دیارکردن وەک بینراو diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 37e8d70e505..283fb8a7d34 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -648,8 +648,6 @@ %s stahování dokončena %s stahováních dokončeno - Zobrazit barevné pásky Picasso na obrázcích označujících jejich zdroj: červená pro síť, modrá pro disk a zelená pro paměť - Zobrazit indikátory obrázků Vzdálené návrhy vyhledávání Lokální návrhy vyhledávání Pokud je vypnuté automatické otáčení, nespouštět video v mini přehrávači, ale přepnout se přímo do režimu celé obrazovky. Do mini přehrávače se lze i nadále dostat ukončením režimu celé obrazovky diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 2be7c8bb87b..7b14885e7ee 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -512,7 +512,6 @@ Behandler… Det kan tage et øjeblik Vis hukommelseslækager Deaktivér medietunneling - Vis billedindikatorer Netværkskrav Alle netværk Kontrolfrekvens @@ -689,7 +688,6 @@ Ofte stillede spørgsmål Hvis du har problemer med at bruge appen, bør du tjekke disse svar på almindelige spørgsmål! Se på hjemmesiden - Vis Picasso-farvede bånd oven på billeder, der angiver deres kilde: rød for netværk, blå for disk og grøn for hukommelse Du kører den nyeste version af NewPipe Grundet ExoPlayer-begrænsninger blev søgevarigheden sat til %d sekunder Vis kun ugrupperede abonnementer diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6270c658ad3..b19314f939c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -631,8 +631,6 @@ Aus Als gesehen markieren Vom Ersteller mit Herz versehen - Farbige Picasso-Bänder über den Bildern anzeigen, die deren Quelle angeben: rot für Netzwerk, blau für Festplatte und grün für Speicher - Bildindikatoren anzeigen Entfernte Suchvorschläge Lokale Suchvorschläge diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index b8166905e1c..17edecb59e0 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -628,8 +628,6 @@ Προεπισκόπηση στην μπάρα αναζήτησης Σήμανση ως αναπαραχθέν Επισημάνθηκε από τον δημιουργό - Εμφάνιση χρωματιστής κορδέλας πάνω στις εικόνες, που δείχνει την πηγή τους: κόκκινη για δίκτυο, μπλε για δίσκο και πράσινο για μνήμη - Εμφάνιση δεικτών εικόνων Προτάσεις απομακρυσμένης αναζήτησης Προτάσεις τοπικής αναζήτησης diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 1841b6c09b0..051d90d3434 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -631,8 +631,6 @@ Los comentarios están deshabilitados De corazón por el creador Marcar como visto - Mostrar cintas de colores Picasso encima de las imágenes indicando su origen: rojo para la red, azul para el disco y verde para la memoria - Mostrar indicadores de imagen Sugerencias de búsqueda remota Sugerencias de búsqueda local diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 5d7e829f3fe..66c7a715125 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -614,8 +614,6 @@ Südamlik autor Kas sinu meelest on voo laadimine aeglane? Sel juhul proovi lubada kiire laadimine (seda saad muuta seadetes või vajutades allolevat nuppu). \n \nNewPipe pakub kahte voo laadimise strateegiat: \n• Tellitud kanali täielik, kuid aeglane hankimine. \n• Teenuse spetsiaalse otspunkti kasutamine, mis on kiire, kuid tavaliselt mittetäielik. \n \nErinevus nende kahe vahel seisneb selles, et kiirel puudub tavaliselt teave, näiteks üksuse pikkus või tüüp (ei saa eristada reaalajas videoid tavalistest) ja see võib tagastada vähem üksusi. \n \nYouTube on näide teenusest, mis pakub seda kiirmeetodit oma RSS-vooga. \n \nNii et valik taandub sellele, mida eelistad: kiirus või täpne teave. Märgi vaadatuks - Näita piltide kohal Picasso värvides riba, mis märgib pildi allikat: punane tähistab võrku, sinine kohalikku andmekandjat ja roheline kohalikku mälu - Näita piltide allikat Kaugotsingu soovitused Kohaliku otsingu soovitused Üksuse eemaldamiseks viipa diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index a34a050fabf..f4883546045 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -616,8 +616,6 @@ Deskarga amaituta %s deskarga amaituta - Irudien gainean Picasso koloretako zintak erakutsi, jatorria adieraziz: gorria sarerako, urdina diskorako eta berdea memoriarako - Erakutsi irudi-adierazleak Urruneko bilaketa-iradokizunak Tokiko bilaketa-iradokizunak Ikusitako gisa markatu diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 09a01e0bd29..70ea7293880 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -592,7 +592,6 @@ رنگی کردن آگاهی گشودن با نشانه به عنوان دیده شده - نمایش روبان‌های رنگی پیکاسو در بالای تصویرها کهنشانگر منبعشان است: قرمز برای شبکه ، آبی برای دیسک و سبز برای حافظه درخواست از اندروید برای سفارشی‌سازی رنگ آگاهی براساس رنگ اصلی در بندانگشتی (توجّه داشته باشید که روی همهٔ افزاره‌ها در دسترس نیست) این ویدیو محدود به سن است. \n @@ -629,7 +628,6 @@ قلب‌شده به دست ایجادگر پیشنهادهای جست‌وجوی محلّی پیشنهادهای جست‌وجوی دوردست - نمایش نشانگرهای تصویر بارگیری پایان یافت %s بارگیری پایان یافتند diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 1ce4df00903..ee470a3cc53 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -628,8 +628,6 @@ Latauskansiota ei vielä asetettu, valitse ensin oletuslatauskansio Kommentit poistettu käytöstä Merkitse katsotuksi - Näytä Picasso-värjätyt nauhat kuvien päällä osoittaakseen lähteen: punainen tarkoittaa verkkoa, sininen tarkoittaa levytilaa ja vihreä tarkoittaa muistia - Näytä kuvailmaisimet Etähakuehdotukset Paikalliset hakuehdotukset Lisää seuraavaksi diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f7459e40989..85ec148de54 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -640,10 +640,8 @@ Prévisualisation de la barre de progression sur la miniature Marquer comme visionné Apprécié par le créateur - Afficher les indicateurs d’image Suggestions de recherche distante Suggestions de recherche locale - Affiche les rubans colorés de Picasso au-dessus des images indiquant leur source : rouge pour le réseau, bleu pour le disque et vert pour la mémoire %1$s téléchargement supprimé %1$s téléchargements supprimés diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index bea6c2eb754..c3873c2a405 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -621,7 +621,6 @@ %s descargas finalizadas Miniatura na barra de busca - Mostrar indicadores de imaxe Desactive o túnel multimedia se experimentar unha pantalla en negro ou interrupcións na reprodución. Desactivar túnel multimedia Engadido á cola @@ -658,7 +657,6 @@ A partir do Android 10, só o \'Sistema de Acceso ao Almacenamento\' está soportado Procesando... Pode devagar un momento Crear unha notificación de erro - Amosar fitas coloridas de Picasso na cima das imaxes que indican a súa fonte: vermello para a rede, azul para o disco e verde para a memoria Novos elementos Predefinido do ExoPlayer Amosar \"Travar o reprodutor\" diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 3d630394f53..cfcf05e6dbe 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -648,8 +648,6 @@ תמונה מוקטנת בסרגל הנגינה סומן בלב על ידי היוצר סימון כנצפה - הצגת סרטים בסגנון פיקאסו בראש התמונות לציון המקור שלהם: אדום זה מהרשת, כחול מהכונן וירוק מהזיכרון - הצגת מחווני תמונות הצעות חיפוש מרוחקות הצעות חיפוש מקומיות diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 3a5cda8c933..eb04149c66c 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -566,7 +566,6 @@ कतारबद्ध हुआ स्ट्रीम विवरण लोड हो रहे हैं… प्रोसेस हो रहा है… कुछ समय लग सकता है - छवि संकेतक दिखाएं प्लेयर का उपयोग करते समय क्रैश विकल्प दिखाता है नई स्ट्रीमों के लिए जांच चलाएं एक त्रुटि स्नैकबार दिखाएं @@ -663,7 +662,6 @@ लीक-कैनरी उपलब्ध नहीं है एक त्रुटी हुई है, नोटीफिकेशन देखें यदि वीडियो प्लेबैक पर आप काली स्क्रीन या रुक-रुक कर वीडियो चलने का अनुभव करते हैं तो मीडिया टनलिंग को अक्षम करें। - छवियों के शीर्ष पर पिकासो रंगीन रिबन दिखाएँ जो उनके स्रोत को दर्शाता है: नेटवर्क के लिए लाल, डिस्क के लिए नीला और मेमोरी के लिए हरा त्रुटी की नोटीफिकेशन बनाएं इस डाउनलोड को पुनर्प्राप्त नहीं किया जा सकता अभी तक कोई डाउनलोड फ़ोल्डर सेट नहीं किया गया है, अब डिफ़ॉल्ट डाउनलोड फ़ोल्डर चुनें diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index f9f95db72b8..28412795eb2 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -640,7 +640,6 @@ Sada možeš odabrati tekst u opisu. Napomena: stranica će možda treperiti i možda nećeš moći kliknuti poveznice u načinu rada za odabir teksta. Obrada u tijeku … Može malo potrajati Za ukljanjanje stavki povuci ih - Prikaži indikatore slike %s preuzimanje je gotovo %s preuzimanja su gotova @@ -649,7 +648,6 @@ Pokreni glavni player u cjeloekranskom prikazu Dodaj u popis kao sljedeći Dodano u popis kao sljedeći - Prikaži Picassove vrpce u boji na slikama koje označavaju njihov izvor: crvena za mrežu, plava za disk i zelena za memoriju Izbrisano %1$s preuzimanje Izbrisana %1$s preuzimanja diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 1110fd248da..691e31567cd 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -550,7 +550,6 @@ Az eltávolítás utáni, fragment vagy activity életcikluson kívüli, nem kézbesíthető Rx kivételek jelentésének kényszerítése Eredeti „ennyi ideje” megjelenítése az elemeken Tiltsa le a médiacsatornázást, ha fekete képernyőt vagy akadozást tapasztal videólejátszáskor. - Picasso színes szalagok megjelenítése a képek fölött, megjelölve a forrásukat: piros a hálózathoz, kék a lemezhez, zöld a memóriához Minden letöltésnél meg fogja kérdezni, hogy hova mentse el Válasszon egy példányt Hírfolyam utoljára frissítve: %s @@ -624,7 +623,6 @@ A lejátszási listához való hozzáadás előtt és után megtekintett közvetítések el lesznek távolítva.\nBiztos benne? A szolgáltatásokból származó eredeti szövegek láthatók lesznek a közvetítési elemeken Lejátszó összeomlasztása - Képjelölők megjelenítése A „Lejátszó összeomlasztása” lehetőség megjelenítése Megjeleníti az összeomlasztási lehetőséget a lejátszó használatakor Hangmagasság megtartása (torzítást okozhat) diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index d023e9fb356..eafd00e8d61 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -625,13 +625,11 @@ Disukai oleh kreator Saran pencarian lokal Saran pencarian remote - Tampilkan indikator gambar Menghapus %1$s unduhan tambahkan ke selanjutnya telah ditambahkan ke selanjutnya - Tampilkan Ribon bewarna Picasso di atas gambar yang mengindikasikan asalnya: merah untuk jaringan, biru untuk disk dan hijau untuk memori Jangan memulai memutar video di mini player, tapi nyalakan langsung di mode layar penuh, jika rotasi otomatis terkunci. Anda tetap dapat mengakses mini player dengan keluar dari layar penuh Memproses… Mungkin butuh waktu sebentar Periksa Pembaruan diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 029c411efb5..aa8c2e72cea 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -637,8 +637,6 @@ Upprunalegir textar frá þjónustu verða sýnilegir í streymisatriðum Slökkva á margmiðlagöngum Slökktu á margmiðlunargöngum (media tunneling) ef vart verður við svartan skjá eða hökt við spilun myndskeiða. - Sýna myndvísa - Sýna Picasso litaða borða ofan á myndum sem gefa til kynna uppruna þeirra: rauðan fyrir netið, bláan fyrir disk og grænan fyrir minni Sýna „Láta spilara hrynja\" Sýna valkost til að hrynja spilara Hrynja forrit diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 3a3995b143d..c3e513079ee 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -638,8 +638,6 @@ Commenti disattivati Apprezzato dall\'autore Segna come visto - Mostra gli indicatori colorati Picasso sopra le immagini, per indicare la loro fonte: rosso per la rete, blu per il disco e verde per la memoria - Mostra indicatori immagine Suggerimenti di ricerca remoti Suggerimenti di ricerca locali diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index ac9fe36844f..b0be8529246 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -628,8 +628,6 @@ %s 個のダウンロードが完了しました - ピカソは、画像の上に、画像の出所を識別する色彩記章を表示します: 赤はネットワーク、青はディスク、緑はメモリ - 画像に標識を表示 処理中… 少し時間がかかるかもしれません 新しいバージョンを手動で確認します アップデートを確認中… diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 444625fc064..98b5e24751d 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -380,7 +380,6 @@ ორიგინალური ტექსტები სერვისებიდან ხილული იქნება ნაკადის ერთეულებში მედია გვირაბის გათიშვა გამორთეთ მედია გვირაბი, თუ ვიდეოს დაკვრისას შავი ეკრანი ან ჭუჭყი გაქვთ - გამოსახულების ინდიკატორების ჩვენება აჩვენე \"დამკვრელის დამსხვრევა\" აჩვენებს ავარიის ვარიანტს დამკვრელის გამოყენებისას გაუშვით შემოწმება ახალი ნაკადებისთვის @@ -677,7 +676,6 @@ გამოწერების იმპორტი ვერ მოხერხდა შეატყობინეთ სასიცოცხლო ციკლის შეცდომებს იძულებითი მოხსენება შეუსაბამო Rx გამონაკლისების შესახებ ფრაგმენტის ან აქტივობის სასიცოცხლო ციკლის გარეთ განკარგვის შემდეგ - აჩვენეთ პიკასოს ფერადი ლენტები სურათების თავზე, სადაც მითითებულია მათი წყარო: წითელი ქსელისთვის, ლურჯი დისკისთვის და მწვანე მეხსიერებისთვის სწრაფი კვების რეჟიმი ამაზე მეტ ინფორმაციას არ იძლევა. „%s“-ის არხის ჩატვირთვა ვერ მოხერხდა. ხელმისაწვდომია ზოგიერთ სერვისში, როგორც წესი, ბევრად უფრო სწრაფია, მაგრამ შეიძლება დააბრუნოს შეზღუდული რაოდენობის ელემენტი და ხშირად არასრული ინფორმაცია (მაგ. ხანგრძლივობის გარეშე, ელემენტის ტიპი, არ არის ლაივის სტატუსი) diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 59832ece4d3..079dc45b4d6 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -541,8 +541,6 @@ 미디어 터널링 비활성화 서비스의 원본 텍스트가 스트림 항목에 표시됩니다 동영상 재생 시 검은 화면이 나타나거나 끊김 현상이 발생하면 미디어 터널링을 비활성화하세요. - 이미지 표시기 표시 - 원본을 나타내는 이미지 위에 피카소 컬러 리본 표시: 네트워크는 빨간색, 디스크는 파란색, 메모리는 녹색 \"플레이어 충돌\" 표시 플레이어를 사용할 때 충돌 옵션을 표시합니다 새로운 스트림 확인 실행 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index dd787480986..d43a69fb0aa 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -638,8 +638,6 @@ Nerodyti Širdelė nuo kurėjo Pažymėti kaip peržiūrėtą - Rodyti „Picasso“ spalvotas juosteles ant vaizdų, nurodančių jų šaltinį: raudona tinklui, mėlyna diskui ir žalia atmintis - Rodyti vaizdo indikatorius Nuotolinės paieškos pasiūlymai Vietinės paieškos pasiūlymai diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 45d126183e5..e474f606c1f 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -612,12 +612,10 @@ Nesākt video atskaņošanu samazinātā režīmā, bet pilnekrāna režīmā, ja automātiskā rotācija ir izslēgta Izslēgt multivides tuneļošanu Izslēdziet multivides tuneļošanu, ja jums video atskaņošanas laikā parādās melns ekrāns vai aizķeršanās. - Rādīt krāsainas lentes virs attēliem, norādot to avotu: sarkana - tīkls, zila - disks, zaļa - atmiņa Ieslēgt teksta atlasīšanu video aprakstā Lejupielādes mape vēl nav iestatīta, izvēlieties noklusējuma lejupielādes mapi Pavelciet atlasīto elementu pa kreisi vai labi, lai to aizvāktu Lokālie meklēšanas ieteikumi - Rādīt attēlu indikatorus Augstas kvalitātes (lielāks) Pārbaudīt atjauninājumus Pašrocīgi pārbaudīt jaunas versijas pieejamību diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index a149b910b41..01380217683 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -590,7 +590,6 @@ രണ്ടാം പ്രവർത്തന ബട്ടൺ ആദ്യ പ്രവർത്തന ബട്ടൺ വീഡിയോ കാണുമ്പോൾ കറുത്ത സ്ക്രീൻ, അവ്യക്തത അനുഭവിക്കുന്നു എങ്കിൽ മീഡിയ ട്യൂൺലിങ് പ്രവർത്തനരഹിതമാക്കുക - ഉറവിടം തിരിച്ചറിയാൻ പിക്കാസോ കളർഡ് റിബൺ ചിത്രങ്ങളുടെ മുകളിൽ കാണിക്കുക: നെറ്റ്‌വർക്കിന് ചുവപ്പ്, ഡിസ്കിനു നീല, മെമ്മറിയിക്ക് പച്ച സീക്ബാർ ചെറുചിത്രം പ്രദർശനം സ്നേഹത്തോടെ സൃഷ്ടാവ് ഡിസ്ക്രിപ്ഷനിലെ ടെക്സ്റ്റ്‌ സെലക്ട്‌ ചെയ്യുവാൻ അനുവദിക്കാതെ ഇരിക്കുക @@ -624,7 +623,6 @@ കാണിക്കരുത് കുറഞ്ഞ നിലവാരം (ചെറുത് ) ഉയർന്ന നിലവാരം (വലിയത് ) - ഇമേജ് ഇൻഡിക്കേറ്ററുകൾ കാണിക്കുക മീഡിയ ട്യൂൺലിങ് പ്രവർത്തനരഹിതമാക്കുക ഡൌൺലോഡ് ഫോൾഡർ ഇത് വരെയും സെറ്റ് ചെയ്തിട്ടില്ല, സ്ഥിര ഡൌൺലോഡ് ഫോൾഡർ ഇപ്പോൾ തിരഞ്ഞെക്കുക അഭിപ്രായങ്ങൾ പ്രവർത്തനരഹിതമായിരിക്കുന്നു diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 633140dcc65..7d25bf84732 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -638,9 +638,7 @@ Lokale søkeforslag Marker som sett Ikke start videoer i minispilleren, men bytt til fullskjermsmodus direkte dersom auto-rotering er låst. Du har fremdeles tilgang til minispilleren ved å avslutte fullskjermsvisningen - Vis Picasso-fargede bånd på toppen av bilder for å indikere kilde: Rød for nettverk, blå for disk, og grønn for minne Hjertemerket av skaperen - Vis bildeindikatorer Dra elementer for å fjerne dem Start hovedspiller i fullskjerm Still i kø neste diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index 92d36ab7705..237e9238c94 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -606,7 +606,6 @@ Geen download map ingesteld, kies nu de standaard download map Niet tonen Reacties zijn uitgeschakeld - Toon afbeeldingsindicatoren Speler melding Configureer actieve stream melding Meldingen diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 845e7431c00..2ff13b391f5 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -626,8 +626,6 @@ Lage kwaliteit (kleiner) Hoge kwaliteit (groter) Zoekbalk miniatuurafbeelding voorbeeld - Toon Picasso-gekleurde linten bovenop afbeeldingen die hun bron aangeven: rood voor netwerk, blauw voor schijf en groen voor geheugen - Afbeeldings­indicatoren tonen Reacties zijn uitgeschakeld Zoeksuggesties op afstand Lokale zoeksuggesties diff --git a/app/src/main/res/values-nqo/strings.xml b/app/src/main/res/values-nqo/strings.xml index abf7ad70dcf..ee17b09211f 100644 --- a/app/src/main/res/values-nqo/strings.xml +++ b/app/src/main/res/values-nqo/strings.xml @@ -436,8 +436,6 @@ ߗߋߢߊߟߌ ߟߎ߬ ߞߟߏߜߍ߫ ߓߐߛߎ߲ߡߊ ߟߎ߬ ߦߌ߬ߘߊ߬ߕߐ߫ ߟߋ߬ ߟߊ߬ߖߍ߲߬ߛߍ߲߬ߠߌ߲ ߘߐ߫ ߞߋߟߋߞߋߟߋ ߟߊ߫ ߝߊߟߊ߲ߓߍߦߊ ߟߊߛߊ߬ ߞߋߟߋߞߋߟߋ ߟߊ߫ ߝߊߟߊ߲ߓߍߦߊ ߟߊߛߊ߬ ߣߴߌ ߞߊ߬ ߥߊ߲߬ߊߥߊ߲߬ ߝߌ߲ ߦߋ߫ ߥߟߊ߫ ߜߊߘߊ߲ߜߊߘߊ߲ߠߌ߲ ߦߋߡߍ߲ߕߊ ߘߏ߫ ߘߐߛߊߙߌ߫ ߕߎߡߊ - ߞߊ߬ ߖߌ߬ߦߊ߬ߓߍ߫ ߦߌ߬ߘߊ߬ߟߊ߲ ߠߎ߫ ߝߍ߲߬ߛߍ߲߫ - ߏ߬ ߦߋ߫ ߔߌߛߊߞߏ߫ ߟߊ߫ ߡߙߎߝߋ߫ ߞߟߐ߬ߡߊ ߟߎ߫ ߟߋ߬ ߝߍ߲߬ߛߍ߲߬ ߠߊ߫ ߖߌ߬ߦߊ߬ߓߍ ߟߎ߫ ߞߎ߲߬ߘߐ߫ ߞߵߊ߬ߟߎ߬ ߓߐߛߎ߲ ߦߌ߬ߘߊ߬: ߥߎߟߋ߲߬ߡߊ߲ ߦߋ߫ ߞߙߏ߬ߝߏ ߕߊ ߘߌ߫߸ ߓߊ߯ߡߊ ߦߋ߫ ߝߘߍ߬ ߜߍߟߍ߲ ߕߊ ߘߌ߫ ߊ߬ߣߌ߫ ߝߙߌߛߌߡߊ ߦߋ߫ ߦߟߌߕߏߟߊ߲ ߕߊ ߘߌ߫ ߟߊ߬ߓߐ߬ߟߌ ߦߴߌߘߐ߫… ߞߵߊ߬ ߘߊߡߌ߬ߣߊ߬ ߞߊ߲߬ߞߎߡߊ ߟߎ߬ ߟߊߛߊ߬ߣߍ߲ ߠߋ߬ diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index c9d0e6758ec..57459de1093 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -340,7 +340,6 @@ ସେବାଗୁଡିକରୁ ମୂଳ ଲେଖା ଷ୍ଟ୍ରିମ୍ ଆଇଟମ୍ ଗୁଡିକରେ ଦୃଶ୍ୟମାନ ହେବ ମିଡିଆ ଟନେଲିଂକୁ ଅକ୍ଷମ କରନ୍ତୁ ଯଦି ଆପଣ ଏକ କଳା ପରଦା ଅନୁଭବ କରନ୍ତି କିମ୍ବା ଭିଡିଓ ପ୍ଲେବେକ୍ ଉପରେ ଝୁଣ୍ଟି ପଡ଼ନ୍ତି ତେବେ ମିଡିଆ ଟନେଲିଂକୁ ଅକ୍ଷମ କରନ୍ତୁ । - ଚିତ୍ରଗୁଡ଼ିକର ଉପରେ ପିକାସୋ ରଙ୍ଗୀନ ଫିତା ଦେଖାନ୍ତୁ: ସେମାନଙ୍କର ଉତ୍ସକୁ ସୂଚାଇଥାଏ: ନେଟୱାର୍କ ପାଇଁ ନାଲି, ଡିସ୍କ ପାଇଁ ନୀଳ ଏବଂ ସ୍ମୃତି ପାଇଁ ସବୁଜ ଆମଦାନି କରନ୍ତୁ ଠାରୁ ଆମଦାନୀ କରନ୍ତୁ ଆମଦାନି… @@ -651,7 +650,6 @@ ଅଟୋ-ଜେନେରେଟ୍ (କୌଣସି ଅପଲୋଡର୍ ମିଳିଲା ନାହିଁ) ପୁରଣ କରନ୍ତୁ କ୍ୟାପସନ୍ - ପ୍ରତିଛବି ସୂଚକ ଦେଖାନ୍ତୁ ପ୍ଲେୟାର ବ୍ୟବହାର କରିବା ସମୟରେ ଏକ କ୍ରାସ୍ ବିକଳ୍ପ ଦେଖାଏ ନୂତନ ଷ୍ଟ୍ରିମ୍ ପାଇଁ ଯାଞ୍ଚ ଚଲାନ୍ତୁ ଆପ୍ କ୍ରାସ୍ କରନ୍ତୁ diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 8c69dd85019..cc0be8ae47f 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -602,8 +602,6 @@ ਨਿਊਪਾਈਪ ਖਾਮੀ ਤੋਂ ਪ੍ਰਭਾਵਤ ਹੋਈ ਹੈ, ਇੱਥੇ ਨੱਪ ਕੇ ਰਿਪੋਰਟ ਕਰੋ ਇੱਕ ਖਾਮੀ ਪ੍ਰਭਾਵੀ ਹੋਈ ਹੈ, ਨੋਟੀਫੀਕੇਸ਼ਨ ਵੇਖੋ ਆਈਟਮਾਂ ਨੂੰ ਇੱਕ ਪਾਸੇ ਖਿੱਚ ਕੇ ਹਟਾਓ - ਦ੍ਰਿਸ਼ ਸੂਚਕ ਵਿਖਾਓ - ਦ੍ਰਿਸ਼ਾਂ ਦੇ ਉੱਪਰ ਉਹਨਾਂ ਦੀ ਸਰੋਤ-ਪਛਾਣ ਲਈ ਪਿਕਾਸੋ ਦੇ ਰੰਗਦਾਰ ਰਿਬਨ ਵਿਖਾਓ : ਨੈੱਟਵਰਕ ਲਈ ਲਾਲ, ਡਿਸਕ ਲਈ ਨੀਲੇ ਤੇ ਮੈਮਰੀ ਲਈ ਹਰੇ ਨਵੀਂ ਸਟ੍ਰੀਮ ਦੇ ਨੋਟੀਫਿਕੇਸ਼ਨ ਪਿੰਨ ਕੀਤੀ ਟਿੱਪਣੀ ਅੱਪਡੇਟ ਦੀ ਉਪਲੱਬਧਤਾ ਪਰਖੀ ਜਾ ਰਹੀ… diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 910b110448d..60dab077d3f 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -643,8 +643,6 @@ Nie pokazuj Serduszko od twórcy Oznacz jako obejrzane - Pokazuj kolorowe wstążki Picasso nad obrazami wskazujące ich źródło: czerwone dla sieci, niebieskie dla dysku i zielone dla pamięci - Pokazuj wskaźniki obrazu Zdalne podpowiedzi wyszukiwania Lokalne podpowiedzi wyszukiwania diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1cbfa694710..595fa961319 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -638,7 +638,6 @@ Os comentários estão desabilitados Marcar como assistido Curtido pelo criador - Exibir fitas coloridas no topo das imagens indicando sua fonte: vermelho para rede, azul para disco e verde para memória %1$s download excluído %1$s downloads excluídos @@ -649,7 +648,6 @@ %s downloads concluídos %s downloads concluídos - Mostrar indicadores de imagem Adicionado na próxima posição da fila Enfileira a próxima Deslize os itens para remove-los diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index f6e1b5a6741..f14d2e40208 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -638,8 +638,6 @@ Ainda não foi definida uma pasta de descarregamento, escolha agora a pasta de descarregamento padrão Comentários estão desativados Marcar como visto - Mostrar fitas coloridas de Picasso em cima das imagens que indicam a sua fonte: vermelho para rede, azul para disco e verde para memória - Mostrar indicadores de imagem Sugestões de pesquisa remotas Sugestões de pesquisa locais diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 8e0210dbc0d..b3d8fe7b414 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -638,8 +638,6 @@ Baixa qualidade (menor) Alta qualidade (maior) Os comentários estão desativados - Mostrar fitas coloridas de Picasso em cima das imagens que indicam a sua fonte: vermelho para rede, azul para disco e verde para memória - Mostrar indicadores de imagem Sugestões de pesquisa remotas Sugestões de pesquisa locais diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 2afe73875b9..c5c45089474 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -654,8 +654,6 @@ Calitate scăzută (mai mică) Calitate înaltă (mai mare) Miniatură de previzualizare în bara de derulare - Afișați panglici colorate de Picasso deasupra imaginilor, indicând sursa acestora: roșu pentru rețea, albastru pentru disc și verde pentru memorie - Afișați indicatorii de imagine Dezactivați tunelarea media dacă întâmpinați un ecran negru sau blocaje la redarea video. Procesarea.. Poate dura un moment Verifică dacă există actualizări diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index fc32c0da363..b3f92f16790 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -646,8 +646,6 @@ Миниатюра над полосой прокрутки Автору видео понравилось это Пометить проигранным - Picasso: указать цветом источник изображений (красный — сеть, синий — диск, зелёный — память) - Цветные метки на изображениях Серверные предложения поиска Локальные предложения поиска diff --git a/app/src/main/res/values-ryu/strings.xml b/app/src/main/res/values-ryu/strings.xml index 4be7d532882..f5b40be8397 100644 --- a/app/src/main/res/values-ryu/strings.xml +++ b/app/src/main/res/values-ryu/strings.xml @@ -640,8 +640,6 @@ %sちぬダウンロードぬかんりょうさびたん %sちぬダウンロードぬかんりょうさびたん - ピカソー、がぞうぬういに、がぞうくとぅどぅくるしーきびちするしきさいきしーょうひょうじさびーん: あかーネットワーク、あおーディスク、みどぅれーメモリ - やしがぞうんかいふぃいょうしきひょうじ しーょりちゅう… くーてーんじがんがかかいんかむしりやびらん みーさるバージョンしーゅどうでぃかくにんさびーん アップデートかくにんちゅう… diff --git a/app/src/main/res/values-sat/strings.xml b/app/src/main/res/values-sat/strings.xml index 71a8067b1a9..47ac2c53d04 100644 --- a/app/src/main/res/values-sat/strings.xml +++ b/app/src/main/res/values-sat/strings.xml @@ -268,7 +268,6 @@ LeakCanary ᱵᱟᱭ ᱧᱟᱢᱚᱜ ᱠᱟᱱᱟ ᱢᱮᱢᱚᱨᱤ ᱞᱤᱠᱟᱞ ᱢᱚᱱᱤᱴᱚᱨᱤᱝ ᱦᱤᱯ ᱰᱟᱢᱯᱤᱝ ᱚᱠᱛᱚ ᱨᱮ ᱮᱯᱞᱤᱠᱮᱥᱚᱱ ᱨᱟᱥᱴᱨᱤᱭ ᱦᱩᱭ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ ᱡᱤᱭᱚᱱ ᱪᱤᱠᱤ ᱠᱷᱚᱱ ᱵᱟᱦᱨᱮ ᱨᱮ ᱵᱷᱮᱜᱟᱨ ᱠᱚ ᱚᱱᱚᱞ ᱢᱮ - ᱱᱮᱴᱣᱟᱨᱠ ᱞᱟᱹᱜᱤᱫ red, ᱰᱤᱥᱠ ᱞᱟᱹᱜᱤᱫ blue ᱟᱨ ᱢᱮᱢᱚᱨᱤ ᱞᱟᱹᱜᱤᱫ green ᱯᱞᱮᱭᱟᱨ ᱵᱮᱵᱷᱟᱨ ᱚᱠᱛᱮ ᱨᱮ ᱠᱨᱟᱥ ᱚᱯᱥᱚᱱ ᱧᱮᱞᱚᱜ ᱠᱟᱱᱟ ᱤᱢᱯᱳᱨᱴ ᱤᱢᱯᱚᱨᱴ @@ -535,7 +534,6 @@ ᱡᱤᱱᱤᱥ ᱠᱚᱨᱮᱱᱟᱜ ᱢᱩᱞ ᱚᱠᱛᱚ ᱧᱮᱞ ᱢᱮ ᱥᱮᱵᱟ ᱠᱷᱚᱱ ᱚᱨᱡᱤᱱᱤᱭᱟᱞ ᱴᱮᱠᱥᱴ ᱠᱚ ᱥᱴᱨᱤᱢ ᱤᱴᱮᱢ ᱨᱮ ᱧᱮᱞᱚᱜᱼᱟ ᱡᱩᱫᱤ ᱟᱢ ᱵᱷᱤᱰᱤᱭᱳ ᱯᱞᱮᱭᱚᱯ ᱨᱮ ᱵᱞᱮᱠ ᱥᱠᱨᱤᱱ ᱟᱨᱵᱟᱝ ᱠᱷᱟᱹᱞᱤ ᱥᱴᱮᱴᱞᱤᱝ ᱮᱢ ᱧᱟᱢᱟ ᱮᱱᱠᱷᱟᱱ ᱢᱤᱰᱤᱭᱟ ᱴᱩᱱᱮᱞᱤᱝ ᱵᱚᱫᱚᱞ ᱢᱮ ᱾ - ᱪᱤᱛᱟᱹᱨ ᱪᱤᱱᱦᱟᱹ ᱠᱚ ᱧᱮᱞ ᱢᱮ ᱱᱟᱣᱟ ᱥᱴᱨᱤᱢ ᱞᱟᱹᱜᱤᱫ ᱪᱟᱪᱞᱟᱣ ᱢᱮ ᱢᱤᱫ error notification ᱛᱮᱭᱟᱨ ᱢᱮ ᱥᱮᱞᱮᱫ ᱮᱠᱥᱯᱳᱨᱴ ᱵᱟᱝ ᱦᱩᱭ ᱫᱟᱲᱮᱭᱟᱜ ᱠᱟᱱᱟ diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index f47e8e569da..5f5887f5f5c 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -628,8 +628,6 @@ Sos cummentos sunt disabilitados Su creadore b\'at postu unu coro Marca comente pompiadu - Ammustra sos listrones colorados de Picasso in subra de sas immàgines chi indicant sa fonte issoro: ruja pro sa retze, biaita pro su discu e birde pro sa memòria - Ammustra sos indicadores de immàgines Impòsitos de chirca remota Impòsitos de chirca locales diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index ff6cd720af6..27f34c9db3a 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -648,8 +648,6 @@ Nízka kvalita (menšie) Vysoká kvalita (väčšie) Náhľad miniatúry pri vyhľadávaní - Zobrazí farebné pásiky Picasso na obrázkoch podľa ich zdroja: červený pre sieť, modrý pre disk a zelený pre pamäť - Zobraziť indikátory obrázka Potiahnutím vymazať Komentáre sú zakázané Ak je automatické otáčanie zablokované, nespustí videá v miniprehrávači, ale prepne sa do celoobrazovkového režimu. Do miniprehrávača sa dostanete po ukončení režimu celej obrazovky diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index 22d5fe16fd8..dc2a89c9c70 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -627,8 +627,6 @@ Fallooyinka waa laxidhay Kahelay soosaaraha Waan daawaday - Soo bandhig shaambado midabka Picasso leh sawirrada dushooda oo tilmaamaya isha laga keenay: guduud waa khadka, buluug waa kaydka gudaha, cagaar waa kaydka K/G - Tus tilmaamayaasha sawirka Soojeedinada raadinta banaanka Soojeedinada raadinta gudaha Cabirka soodaarida udhexeeya diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 2d14361b38a..33126a21188 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -638,7 +638,6 @@ Означи као одгледано Коментари су онемогућени Обрађивање… Може потрајати пар тренутака - Прикажи индикаторе слике Не покрећите видео снимке у мини-плејеру, већ директно пређите на режим целог екрана, ако је аутоматска ротација закључана. И даље можете приступити мини-плејеру тако што ћете изаћи из целог екрана Покрени главни плејер преко целог екрана Срушите плејер @@ -734,7 +733,6 @@ Обавештења за пријаву грешака Увезите или извезите праћења из менија са 3 тачке Аудио снимак - Прикажите Picasso обојене траке на врху слика које указују на њихов извор: црвена за мрежу, плава за диск и зелена за меморију Направите обавештење о грешци Проценат Користите најновију верзију NewPipe-а diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index d9742c80e36..1e58d2184c0 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -627,7 +627,6 @@ Du kan välja det natt-tema du föredrar nedan Välj det natt-tema du föredrar — %s Sökradens förhandsvisningsminiatyr - Visa bildindikatorer Lokala sökningsförslag Tog bort %1$s nedladdning @@ -645,7 +644,6 @@ Svep objekt för att ta bort dem Förslag via fjärrsökning Starta inte videor i minispelaren, utan byt till helskärmsläge direkt, om automatisk rotation är låst. Du kan fortfarande komma åt minispelaren genom att gå ut ur helskärmsläge - Visa Picasso färgade band ovanpå bilderna som anger deras källa: rött för nätverk, blått för disk och grönt för minne Sök efter uppdateringar Kolla manuellt efter nya versioner Söker efter uppdateringar… diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 068a099d27a..86dd3cc4318 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -641,8 +641,6 @@ மீடியா சுரங்கப்பாதையை முடக்கு நீங்கள் ஒரு கருப்பு திரை அனுபவித்தால் அல்லது வீடியோ பிளேபேக்கில் திணறினால் மீடியா சுரங்கப்பாதையை முடக்கு. உங்கள் சாதனத்தில் முன்னிருப்பாக மீடியா சுரங்கப்பாதை முடக்கப்பட்டது, ஏனெனில் உங்கள் சாதன மாதிரி அதை ஆதரிக்காது என்று அறியப்படுகிறது. - பட குறிகாட்டிகளைக் காட்டு - அவற்றின் மூலத்தைக் குறிக்கும் படங்களின் மேல் பிக்காசோ வண்ண ரிப்பன்களைக் காட்டு: நெட்வொர்க்கிற்கு சிவப்பு, வட்டுக்கு நீலம் மற்றும் நினைவகத்திற்கு பச்சை \"வீரரை செயலிழக்க\" காட்டு பிளேயரைப் பயன்படுத்தும் போது செயலிழப்பு விருப்பத்தைக் காட்டுகிறது புதிய நீரோடைகளுக்கு காசோலை இயக்கவும் diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index b95e04c0cfe..a422dc99685 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -438,7 +438,6 @@ ప్లేబ్యాక్ స్పీడ్ నియంత్రణలు ఏమిలేదు మీరు బ్లాక్ స్క్రీన్ లేదా చలనచిత్రం ప్లేబ్యాక్‌లో అంతరాయాన్ని అనుభవిస్తే మీడియా టన్నెలింగ్‌ను నిలిపివేయండి - చిత్రాల మూలాన్ని సూచించే విధంగా వాటి పైభాగంలో పికాసో రంగు రిబ్బన్‌లను చూపండి: నెట్‌వర్క్ కోసం ఎరుపు, డిస్క్ కోసం నీలం మరియు మెమరీ కోసం ఆకుపచ్చ లోపం స్నాక్‌బార్‌ని చూపండి మీరు NewPipe యొక్క తాజా సంస్కరణను అమలు చేస్తున్నారు NewPipe నవీకరణ అందుబాటులో ఉంది! @@ -451,7 +450,6 @@ తక్కువ నాణ్యత (చిన్నది) చూపించవద్దు మీడియా టన్నెలింగ్‌ని నిలిపివేయండి - చిత్ర సూచికలను చూపు కొత్త స్ట్రీమ్‌ల కోసం తనిఖీని అమలు చేయండి ఎర్రర్ నోటిఫికేషన్‌ను సృష్టించండి దిగుమతి diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 9c84ee81dc7..76215fa0d96 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -627,8 +627,6 @@ Yorumlar devre dışı Yaratıcısınca kalplendi İzlendi olarak işaretle - Resimlerin üzerinde kaynaklarını gösteren Picasso renkli şeritler göster: ağ için kırmızı, disk için mavi ve bellek için yeşil - Resim göstergelerini göster Uzak arama önerileri Yerel arama önerileri diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index df8ee490dfb..c6dcdbdc1e7 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -640,8 +640,6 @@ Мініатюра з попереднім переглядом на повзунку поступу Вподобано автором Позначити переглянутим - Показувати кольорові стрічки Пікассо поверх зображень із зазначенням їх джерела: червоний для мережі, синій для диска та зелений для пам’яті - Показати індикатори зображень Віддалені пропозиції пошуку Локальні пошукові пропозиції diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index efa12f11d28..e43b2f5df65 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -618,8 +618,6 @@ Bình luận đã bị tắt Đã được chủ kênh thả \"thính\" Đánh dấu là đã xem - Hiển thị các dải băng màu Picasso trên đầu các hình ảnh cho biết nguồn của chúng: màu đỏ cho mạng, màu lam cho đĩa và màu lục cho bộ nhớ - Hiện dấu chỉ hình ảnh Đề xuất tìm kiếm trên mạng Đề xuất tìm kiếm cục bộ diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index adbf2ce6448..ea92db43f36 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -618,8 +618,6 @@ 高品质(较大) 被创作者喜爱 标记为已观看 - 在图像顶部显示毕加索彩带,指示其来源:红色代表网络,蓝色代表磁盘,绿色代表内存 - 显示图像指示器 远程搜索建议 本地搜索建议 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 0dd10f1bc36..7b2ba5bb106 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -662,9 +662,7 @@ 你係咪要刪除呢個谷? 淨係顯示未成谷嘅訂閱 - 啲圖都要騷 Picasso 三色碼顯示源頭:紅碼係網絡上高落嚟,藍碼係儲存喺磁碟本地,綠碼係潛伏喺記憶體中 服務原本嘅字會騷返喺串流項目上面 - 影像要推三色碼 若果播片嘅時候窒下窒下或者黑畫面,就停用多媒體隧道啦。 點樣用 Google 匯出嚟匯入 YouTube 訂閱: \n diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 1f4bfb290ae..cca70f771d4 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -600,8 +600,6 @@ 拖動列縮圖預覽 被創作者加心號 標記為已觀看 - 在圖片頂部顯示畢卡索彩色絲帶,指示其來源:紅色代表網路、藍色代表磁碟、綠色代表記憶體 - 顯示圖片指示器 遠端搜尋建議 本機搜尋建議 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9095fe927c3..7df964aed51 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -494,8 +494,6 @@ Disable media tunneling Disable media tunneling if you experience a black screen or stuttering on video playback. Media tunneling was disabled by default on your device because your device model is known to not support it. - Show image indicators - Show Picasso colored ribbons on top of images indicating their source: red for network, blue for disk and green for memory Show \"Crash the player\" Shows a crash option when using the player Run check for new streams From 08b7da4b2bbd5bc655c20aee3b6396f41fee2204 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Fri, 30 Jan 2026 15:41:19 +0200 Subject: [PATCH 70/92] Accomodate extractor changes (EnumSet for service media capabilities) --- app/src/main/java/org/schabi/newpipe/RouterActivity.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java index d85fdf7de0b..2997f937f4c 100644 --- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java +++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java @@ -343,8 +343,7 @@ protected void onSuccess() { return; } - final List capabilities = - currentService.getServiceInfo().getMediaCapabilities(); + final var capabilities = currentService.getServiceInfo().getMediaCapabilities(); // Check if the service supports the choice if ((isVideoPlayerSelected && capabilities.contains(VIDEO)) @@ -528,8 +527,7 @@ private List getChoicesForService(final StreamingService serv final List returnedItems = new ArrayList<>(); returnedItems.add(showInfo); // Always present - final List capabilities = - service.getServiceInfo().getMediaCapabilities(); + final var capabilities = service.getServiceInfo().getMediaCapabilities(); if (linkType == LinkType.STREAM || linkType == LinkType.PLAYLIST) { if (capabilities.contains(VIDEO)) { From 63e19890bfb19bbff419f4068d7522e845588e36 Mon Sep 17 00:00:00 2001 From: tobigr Date: Sat, 21 Feb 2026 17:00:05 +0100 Subject: [PATCH 71/92] Update extractor to the 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 944a059e8a7..14246cfd010 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 = "v0.25.2" +teamnewpipe-newpipe-extractor = "824486dfdf4e9ba0fbe820bc2938f9101ae739a6" viewpager2 = "1.1.0" webkit = "1.14.0" # Newer versions require minSdk >= 23 work = "2.10.5" # Newer versions require minSdk >= 23 From caebf8461a51f88c3421629c85169455926c579b Mon Sep 17 00:00:00 2001 From: Alex Popov Date: Sat, 10 Jan 2026 01:26:10 +0300 Subject: [PATCH 72/92] Hide controls when resuming playback via double tap Remove redundant comment about hiding controls on double tap --- .../schabi/newpipe/player/gesture/BasePlayerGestureListener.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt b/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt index 8682adc4369..904e2b3f111 100644 --- a/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt +++ b/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt @@ -47,6 +47,9 @@ abstract class BasePlayerGestureListener( startMultiDoubleTap(event) } else if (portion === DisplayPortion.MIDDLE) { player.playPause() + if (player.currentState == Player.STATE_PLAYING) { + playerUi.hideControls(0, 0) + } } } From 423f95a65d9d204f7a8acec1db448d9b39755d2f Mon Sep 17 00:00:00 2001 From: Alex Popov Date: Sat, 10 Jan 2026 01:48:26 +0300 Subject: [PATCH 73/92] Refactor double tap logic to use isPlaying() method for better readability --- .../schabi/newpipe/player/gesture/BasePlayerGestureListener.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt b/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt index 904e2b3f111..52175a3bf59 100644 --- a/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt +++ b/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt @@ -47,7 +47,7 @@ abstract class BasePlayerGestureListener( startMultiDoubleTap(event) } else if (portion === DisplayPortion.MIDDLE) { player.playPause() - if (player.currentState == Player.STATE_PLAYING) { + if (player.isPlaying) { playerUi.hideControls(0, 0) } } From 8902ce867822a5f7a1b4569ad52199824908cd43 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sun, 22 Feb 2026 10:46:58 +0800 Subject: [PATCH 74/92] Update dependencies and Gradle to latest stable releases Signed-off-by: Aayush Gupta --- gradle/libs.versions.toml | 10 +++++----- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c2502581432..73e9cad0815 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,13 +7,13 @@ acra = "5.13.1" agp = "8.13.2" appcompat = "1.7.1" -assertj = "3.27.6" +assertj = "3.27.7" autoservice-google = "1.1.1" autoservice-zacsweers = "1.2.0" bridge = "v2.0.2" cardview = "1.0.0" -checkstyle = "13.0.0" -coil = "3.0.4" +checkstyle = "13.2.0" +coil = "3.3.0" constraintlayout = "2.2.1" core = "1.17.0" desugar = "2.1.5" @@ -24,8 +24,8 @@ groupie = "2.10.1" jsoup = "1.22.1" junit = "4.13.2" junit-ext = "1.3.0" -kotlin = "2.3.0" -ksp = "2.3.5" +kotlin = "2.3.10" +ksp = "2.3.6" ktlint = "1.8.0" leakcanary = "2.14" lifecycle = "2.9.4" # Newer versions require minSdk >= 23 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 44ae9537e91..41465649341 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=0d585f69da091fc5b2beced877feab55a3064d43b8a1d46aeb07996b0915e0e0 -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip +distributionSha256Sum=b266d5ff6b90eada6dc3b20cb090e3731302e553a27c5d3e4df1f0d76beaff06 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 9a292e33f99c8bca8015eaae1b9d90fe462cdd70 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 22 Feb 2026 11:32:29 +0100 Subject: [PATCH 75/92] Translated using Weblate (Albanian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 2.2% (2 of 89 strings) Translated using Weblate (Georgian) Currently translated at 55.0% (49 of 89 strings) Translated using Weblate (Latvian) Currently translated at 97.9% (748 of 764 strings) Translated using Weblate (Georgian) Currently translated at 96.5% (738 of 764 strings) Co-authored-by: Flavjo Avdiu Co-authored-by: Hosted Weblate Co-authored-by: Nikoloz Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ka/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sq/ Translation: NewPipe/Metadata --- app/src/main/res/values-ka/strings.xml | 35 +++++++++++++++++-- app/src/main/res/values-lv/strings.xml | 9 +++-- .../metadata/android/ka/changelogs/1005.txt | 4 ++- .../metadata/android/ka/changelogs/1006.txt | 27 ++++++++++++++ .../metadata/android/ka/changelogs/1008.txt | 7 ++++ .../metadata/android/sq/changelogs/1000.txt | 12 +++++++ .../metadata/android/sq/full_description.txt | 1 + 7 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 fastlane/metadata/android/ka/changelogs/1006.txt create mode 100644 fastlane/metadata/android/ka/changelogs/1008.txt create mode 100644 fastlane/metadata/android/sq/changelogs/1000.txt create mode 100644 fastlane/metadata/android/sq/full_description.txt diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 98b5e24751d..4f5fc13efdf 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -37,7 +37,7 @@ ნაგულისხმევი აუდიო ფორმატი აირჩიეთ თქვენი საყვარელი PeerTube ეგზემპლარები დაკვრის დატვირთვის ინტერვალის ზომა - შეცვალეთ დატვირთვის ინტერვალის ზომა (ამჟამად %s). დაბალმა მნიშვნელობამ შეიძლება დააჩქაროს საწყისი ვიდეოს ჩატვირთვა. ცვლილებები მოითხოვს მოთამაშის გადატვირთვას + შეცვალეთ დატვირთვის ინტერვალის ზომა (ამჟამად %s). დაბალმა მნიშვნელობამ შეიძლება დააჩქაროს საწყისი ვიდეოს ჩატვირთვა. მოითხოვეთ დადასტურება რიგის გასუფთავებამდე არაზუსტი ძიება საშუალებას აძლევს მოთამაშეს უფრო სწრაფად მოიძიოს პოზიციები შემცირებული სიზუსტით. 5, 15 ან 25 წამის ძიება ამით არ მუშაობს სწრაფი წინსვლა/-გადახვევა ძიების ხანგრძლივობა @@ -100,7 +100,7 @@ არევა Ბუფერიზაცია აუდიო - ღამის თემა + მუქი თემა ღია მუქი შავი @@ -654,7 +654,7 @@ იკითხეთ, სად უნდა ჩამოტვირთოთ თქვენ მოგეთხოვებათ სად შეინახოთ თითოეული ჩამოტვირთვა. \n ჩართეთ სისტემის საქაღალდის ამომრჩევი (SAF), თუ გსურთ ჩამოტვირთოთ გარე SD ბარათზე - ვიდეოები, რომლებიც უყურეთ დასაკრავ სიაში დამატებამდე და მის შემდეგ, წაიშლება. \n დარწმუნებული ხართ? ამის გაუქმება შეუძლებელია! + ვიდეოები, რომლებიც უყურეთ დასაკრავ სიაში დამატებამდე და მის შემდეგ, წაიშლება. \n დარწმუნებული ხართ? NewPipe არის copyleft უფასო პროგრამული უზრუნველყოფა: თქვენ შეგიძლიათ გამოიყენოთ, შეისწავლოთ, გააზიაროთ და გააუმჯობესოთ იგი სურვილისამებრ. კონკრეტულად თქვენ შეგიძლიათ გადაანაწილოთ და/ან შეცვალოთ იგი GNU-ს ზოგადი საჯარო ლიცენზიის პირობებით, როგორც ეს გამოქვეყნებულია თავისუფალი პროგრამული უზრუნველყოფის ფონდის მიერ, ლიცენზიის მე-3 ვერსიით, ან (თქვენი სურვილისამებრ) ნებისმიერი შემდგომი ვერსიით. ავტო ცარიელი გვერდი @@ -790,4 +790,33 @@ დაკვრის დროს სერვერიდან მიღებული HTTP შეცდომა 403, სავარაუდოდ, გამოწვეულია IP აკრძალვით ან სტრიმინგის URL-ის დებფუსკაციის პრობლემებით. %1$s-მა უარი თქვა მონაცემების მიწოდებაზე და ითხოვა შესვლა იმის დასადასტურებლად, რომ მომთხოვნი რობოტი არ არის.\n\nშესაძლოა, თქვენი IP მისამართი დროებით აიკრძალა %1$s-ის მიერ, შეგიძლიათ დაელოდოთ ცოტა ხანს ან გადახვიდეთ სხვა IP მისამართზე (მაგალითად, VPN-ის ჩართვით/გამორთვით, ან WiFi-დან მობილურ მონაცემებზე გადართვით). ეს კონტენტი ამჟამად არჩეული კონტენტის ქვეყნისთვის მიუწვდომელია.\n\nშეცვალეთ თქვენი არჩევანი „პარამეტრები > კონტენტი > ნაგულისხმევი კონტენტის ქვეყანა“-დან. + %1$s %2$s + ორიგინალი + გახმოვანებული + აღწერითი + მეორადი + ვიდეოები + ტრეკები + მოკლე ვიდეოები + ლაივი + არხები + დასაკრავი სიები + ალბომები + მოწონებები + შესახებ + არხის ჩანართები + რომელი ჩანართებია ნაჩვენები არხის გვერდებზე + დაკვრის რიგის გახსნა + სრულეკრანიან რეჟიმზე გადართვა + + %s პასუხი + %s პასუხები + + მეტის ჩვენება + ნაკლების ჩვენება + იმპორტირებული ექსპორტის პარამეტრები იყენებს დაუცველ ფორმატს, რომელიც მოძველებულია NewPipe 0.27.0 ვერსიიდან. დარწმუნდით, რომ იმპორტირებული ექსპორტი სანდო წყაროდან არის და მომავალში უპირატესობა მიანიჭეთ მხოლოდ NewPipe 0.27.0 ან უფრო ახალი ვერსიიდან მიღებული ექსპორტირებული პარამეტრების გამოყენებას. ამ დაუცველ ფორმატში პარამეტრების იმპორტის მხარდაჭერა მალე მთლიანად გაუქმდება და შემდეგ NewPipe-ის ძველი ვერსიები ვეღარ შეძლებენ ექსპორტირებული პარამეტრების იმპორტირებას ახალი ვერსიებიდან. + SoundCloud-ის ტოპ 50 გვერდი წაიშალა + SoundCloud-მა შეწყვიტა ორიგინალი ტოპ 50 ჩარტების გამოშვება. შესაბამისი ჩანართი წაიშალა თქვენი მთავარი გვერდიდან. + YouTube-ის კომბინირებული ტრენდული გვერდი წაშლილია + YouTube-მა 2025 წლის 21 ივლისიდან შეწყვიტა კომბინირებული ტრენდული გვერდის არსებობა. NewPipe-მა ნაგულისხმევი ტრენდული გვერდი ტრენდული პირდაპირი ტრანსლაციებით ჩაანაცვლა.\n\nასევე შეგიძლიათ აირჩიოთ სხვადასხვა ტრენდული გვერდები „პარამეტრები > მასალა > მთავარი გვერდის შინაარსი“-ში. diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index e474f606c1f..636e5efd232 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -48,7 +48,7 @@ Galvenā lapa Visvairāk Atskaņotais Pēdējais Atskaņotais - Vai jūs vēlaties izdzēst šo lietu no meklēšanas vēstures\? + Vai jūs tiešām vēlaties izdzēst šo meklējumu no vēstures? Vēsture Vēsture Izlasīt licenci @@ -195,9 +195,9 @@ Ārējā krātuve nepieejama Kļūda Meklēšanas vēsture izdzēsta - Izdzēsy visu meklēšanas vēsturi\? + Vai tiešām izdzēst visu meklēšanas vēsturi? Izdzēš meklēto vārdu vēsturi - Izdzēst skatīšanās vēsturi + Notīrīt meklēšanas vēsturi Atskaņošanas pozīcikas izdzēstas Izdzēst visas atskaņošanas pozīcijas\? Izdzēš visas atskaņošanas pozīcijas @@ -836,4 +836,7 @@ Atlasiet abonementu grupu YouTube likvidēja apvienoto pašlaik populārs “Ļaut rādīt virs citām lietotnēm” + Meklēt %1$s + Meklēt %1$s (%2$s) + SoundCloud Top 50 lapa noņemta diff --git a/fastlane/metadata/android/ka/changelogs/1005.txt b/fastlane/metadata/android/ka/changelogs/1005.txt index e08f2639fb2..dd1ccba43b6 100644 --- a/fastlane/metadata/android/ka/changelogs/1005.txt +++ b/fastlane/metadata/android/ka/changelogs/1005.txt @@ -3,13 +3,15 @@ • არხების ჯგუფების მთავარი ეკრანის ჩანართებად დაყენების დაშვება • [YouTube] გაზიარება, როგორც დროებითი დასაკრავი სია • [SoundCloud] მოწონებების არხის ჩანართი + გაუმჯობესებულია • უკეთესი მინიშნებები ძიების ზოლში • ჩამოტვირთვის თარიღის ჩვენება ჩამოტვირთვებში • Android 13-ის თითოეული აპლიკაციის ენის გამოყენება + .გამოსწორებულია • გამოსწორდა ტექსტის ფერების დარღვევა ბნელ რეჟიმში • [YouTube] გამოსწორდა დასაკრავი სიების 100-ზე მეტი ერთეულს არ აჩვენებს • [YouTube] გამოსწორდა დაკარგული რეკომენდებული ვიდეოები -• გამოსწორდა ისტორიის სიის ხედში ავარიების გამოსწორება +• გამოსწორდა ისტორიის სიის ხედში ავარიები • გამოსწორდა დროის ნიშნულები კომენტარების პასუხებში diff --git a/fastlane/metadata/android/ka/changelogs/1006.txt b/fastlane/metadata/android/ka/changelogs/1006.txt new file mode 100644 index 00000000000..800c0e86aba --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/1006.txt @@ -0,0 +1,27 @@ +# გაუმჯობესებული + +დროის ნიშნულებზე დაწკაპუნებისას მიმდინარე დამკვრელის შენარჩუნება + +შესაძლებლობის შემთხვევაში, შეეცადეთ აღადგინოთ ჩამოტვირთვის მომლოდინე მისიები + +დაემატა ჩამოტვირთვის წაშლის ვარიანტი ფაილის წაშლის გარეშე + +გადაფარვის ნებართვა: Android > R-ისთვის განმარტებითი დიალოგის ჩვენება + +მხარდაჭერა on.soundcloud ბმულის გახსნისთვის + +ბევრი მცირე გაუმჯობესება და ოპტიმიზაცია + +# გამოსწორებულია + + გასწორდა მოკლე რაოდენობის ფორმატირება Android-ის 7-ზე დაბალი ვერსიებისთვის + + გასწორდა მოჩვენებითი შეტყობინებებები + + გასწორდა SRT სუბტიტრების ფაილები + +გამოსწორებულია უამრავი ავარია + +# განვითარება + +შიდა კოდის მოდერნიზაცია diff --git a/fastlane/metadata/android/ka/changelogs/1008.txt b/fastlane/metadata/android/ka/changelogs/1008.txt new file mode 100644 index 00000000000..2a96e080046 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/1008.txt @@ -0,0 +1,7 @@ +∙ ბოლო დაკვრის პოზიციაზე სტრიმინგის განახლების პრობლემა გამოსწორდა + +∙ [YouTube] დაემატა მეტი არხის URL ფორმატების მხარდაჭერა + +∙ [YouTube] დაემატა მეტი ვიდეო მეტაინფო ფორმატების მხარდაჭერა + +∙ განახლდა თარგმანები diff --git a/fastlane/metadata/android/sq/changelogs/1000.txt b/fastlane/metadata/android/sq/changelogs/1000.txt new file mode 100644 index 00000000000..1aaab653947 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/1000.txt @@ -0,0 +1,12 @@ +Përmirësuar +• Bëni përshkrimin e listës së luajtjes të klikueshme për të treguar më shumë / më pak përmbajtje +• [PeerTube] Trajtoni lidhjet e shembujve`subscribeto.me` automatikisht +• Filloni vetëm të luani një artikull të vetëm në ekranin e historisë +Rregulluar +• U rregulla dukshmëria e butonit RS +• U rregulluan përplasjet e shikimit të shiritit +• U rregullua lista e luajtjes së një artikulli më pak tablotë +• U rregullua dalja nga dialogu i shkarkimit para se të shfaqet +• U rregulla shfaqja e radhës së listës së artikujve të lidhur +•U rregullua rendi në shtimin e dialogut të listës së luajtjes +• U rregullua paraqitja e artikullit të faqerojtësve të listës së luajtjes diff --git a/fastlane/metadata/android/sq/full_description.txt b/fastlane/metadata/android/sq/full_description.txt new file mode 100644 index 00000000000..04a94e97d47 --- /dev/null +++ b/fastlane/metadata/android/sq/full_description.txt @@ -0,0 +1 @@ +NewPipe nuk përdor ndonjë bibliotekë kornizash të Google, ose API të YouTube. Ajo vetëm analizon faqen e internetit në mënyrë që të fitojë informacionin që i nevojitet. Prandaj, ky aplikacion mund të përdoret në pajisje pa instaluar Shërbimet e google. Gjithashtu, nuk keni nevojë për një llogari në YouTube për të përdorur NewPipe, dhe është FLOSS From 06e4548c1424fcc09488616f6d4349828525f22a Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Mon, 23 Feb 2026 01:41:14 +0200 Subject: [PATCH 76/92] Add warning banner about ongoing google certification for android apps --- .../java/org/schabi/newpipe/MainActivity.java | 46 +++++++++++++++++++ .../org/schabi/newpipe/about/AboutActivity.kt | 7 +++ app/src/main/res/values-ar/strings.xml | 3 ++ app/src/main/res/values-cs/strings.xml | 3 ++ app/src/main/res/values-de/strings.xml | 3 ++ app/src/main/res/values-es/strings.xml | 3 ++ app/src/main/res/values-fr/strings.xml | 3 ++ app/src/main/res/values-hi/strings.xml | 3 ++ app/src/main/res/values-hu/strings.xml | 3 ++ app/src/main/res/values-it/strings.xml | 3 ++ app/src/main/res/values-ja/strings.xml | 3 ++ app/src/main/res/values-ko/strings.xml | 3 ++ app/src/main/res/values-pt/strings.xml | 3 ++ app/src/main/res/values-ru/strings.xml | 3 ++ app/src/main/res/values-sk/strings.xml | 3 ++ app/src/main/res/values-sv/strings.xml | 3 ++ app/src/main/res/values-tr/strings.xml | 3 ++ app/src/main/res/values/settings_keys.xml | 2 + app/src/main/res/values/strings.xml | 3 ++ 19 files changed, 103 insertions(+) diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index e4f4b5b8a28..3b9127978da 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -20,12 +20,14 @@ package org.schabi.newpipe; +import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -96,6 +98,8 @@ import org.schabi.newpipe.util.external_communication.ShareUtils; import org.schabi.newpipe.views.FocusOverlayView; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -196,6 +200,8 @@ protected void onCreate(final Bundle savedInstanceState) { UpdateSettingsFragment.askForConsentToUpdateChecks(this); } + showKeepAndroidDialog(); + MigrationManager.showUserInfoIfPresent(this); } @@ -973,4 +979,44 @@ private boolean bottomSheetHiddenOrCollapsed() { || sheetState == BottomSheetBehavior.STATE_COLLAPSED; } + private void showKeepAndroidDialog() { + final var prefs = PreferenceManager.getDefaultSharedPreferences(this); + + final var now = Instant.now(); + final var kaoLastCheck = Instant.ofEpochMilli(prefs.getLong( + getString(R.string.kao_last_checked_key), + 0 + )); + + final var kaoURI = Uri.parse("https://keepandroidopen.org"); + final var solutionURI = Uri.parse( + "https://github.com/woheller69/FreeDroidWarn?tab=readme-ov-file#solutions"); + + if (kaoLastCheck.plus(30, ChronoUnit.DAYS).isBefore(now)) { + final var dialog = new AlertDialog.Builder(this) + .setTitle("Keep Android Open") + .setCancelable(false) + .setMessage(this.getString(R.string.kao_dialog_warning)) + .setPositiveButton(this.getString(android.R.string.ok), (d, w) -> { + prefs.edit() + .putLong( + getString(R.string.kao_last_checked_key), + now.toEpochMilli() + ) + .apply(); + }) + .setNeutralButton(this.getString(R.string.kao_solution), null) + .setNegativeButton(this.getString(R.string.kao_dialog_more_info), null) + .show(); + + // If we use setNeutralButton and etc. dialog will close after pressing the buttons + // but we want it to close only when positive button is pressed + dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(v -> + this.startActivity(new Intent(Intent.ACTION_VIEW, kaoURI)) + ); + dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> + this.startActivity(new Intent(Intent.ACTION_VIEW, solutionURI)) + ); + } + } } diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt index ed5951f0440..0cdf4029cca 100644 --- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt @@ -254,6 +254,13 @@ class AboutActivity : AppCompatActivity() { "ByteHamster", "https://github.com/ByteHamster/SearchPreference", StandardLicenses.MIT + ), + SoftwareComponent( + "FreeDroidWarn", + "2026", + "woheller69", + "https://github.com/woheller69/FreeDroidWarn", + StandardLicenses.APACHE2 ) ) } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 8a840f82825..fd5f91553a0 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -903,4 +903,7 @@ تم تلقي خطأ HTTP 403 من الخادم أثناء التشغيل، ويرجح أن يكون السبب هو حظر عنوان IP أو مشكلات في إزالة التعتيم عن عنوان URL للبث رفض %1$s تقديم البيانات، وطلب تسجيل الدخول للتأكد من أن الطالب ليس روبوتًا.\n\nربما تم حظر عنوان IP الخاص بك مؤقتًا من قبل %1$s، يمكنك الانتظار بعض الوقت أو التبديل إلى عنوان IP مختلف (على سبيل المثال عن طريق تشغيل/إيقاف تشغيل VPN، أو التبديل من WiFi إلى بيانات الهاتف المحمول). هذا المحتوى غير متاح للبلد المحدد حاليًا.\n\nقم بتغيير اختيارك من ”الإعدادات > المحتوى > البلد الافتراضي للمحتوى“. + أعلنت Google أنه ابتداءً من عام 2026/2027، ستتطلب جميع التطبيقات على الأجهزة المعتمدة من Android من المطورين تقديم معلومات هويتهم الشخصية مباشرةً إلى Google. بما أن مطوري هذا التطبيق لا يوافقون على هذا الشرط، فلن يعمل هذا التطبيق على أجهزة Android المعتمدة بعد ذلك الوقت. + تفاصيل + حل diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 283fb8a7d34..e51fa355c3f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -861,4 +861,7 @@ Chyba HTTP 403 obdržená od serveru během přehrávání, pravděpodobně způsobená zákazem IP adresy nebo problémy s deobfuskací streamovací adresy URL %1$s odmítl poskytnout data, žádá o přihlášení k potvrzení, že žadatel není bot.\n\nVaše IP adresa mohla být dočasně zakázána %1$s, můžete nějakou dobu počkat nebo přepnout na jinou IP adresu (například zapnutím/vypnutím VPN nebo přepnutím z WiFi na mobilní data). Tento obsah není pro aktuálně vybranou zemi obsahu dostupný.\n\nZměňte výběr v nabídce \"Nastavení > Obsah > Výchozí země obsahu\". + Společnost Google oznámila, že od roku 2026/2027 budou všechny aplikace na certifikovaných zařízeních Android vyžadovat, aby vývojář odeslal své osobní identifikační údaje přímo společnosti Google. Jelikož vývojáři této aplikace s tímto požadavkem nesouhlasí, aplikace po tomto datu přestane na certifikovaných zařízeních Android fungovat. + Podrobnosti + Řešení diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b19314f939c..cedef9e14de 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -847,4 +847,7 @@ HTTP-Fehler 403 vom Server während der Wiedergabe erhalten, wahrscheinlich verursacht durch eine IP-Sperre oder Probleme beim Entschlüsseln der Streaming-URL %1$s hat die Datenbereitstellung verweigert und verlangt eine Anmeldung, um zu bestätigen, dass es sich bei dem Anfragenden nicht um einen Bot handelt.\n\nDeine IP-Adresse wurde möglicherweise vorübergehend von %1$s gesperrt. Du kannst einige Zeit warten oder zu einer anderen IP-Adresse wechseln (z. B. durch Ein- und Ausschalten eines VPNs oder durch Wechseln von WLAN zu mobilen Daten). Dieser Inhalt ist für das aktuell ausgewählte Land des Inhalts nicht verfügbar.\n\nÄndere die Auswahl unter „Einstellungen > Inhalt > Bevorzugtes Land des Inhalts“. + Google hat angekündigt, dass ab 2026/2027 alle Apps auf zertifizierten Android-Geräten nur noch funktionieren, wenn die Entwickler ihre persönlichen Identitätsdaten direkt an Google übermitteln. Da die Entwickler dieser App dieser Anforderung nicht zustimmen, wird diese App ab diesem Zeitpunkt auf zertifizierten Android-Geräten nicht mehr funktionieren. + Details + Lösung diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 051d90d3434..c1a0deefe9a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -851,4 +851,7 @@ %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. + Google ha anunciado que, a partir de 2026/2027, todas las aplicaciones en dispositivos Android certificados requerirán que los desarrolladores envíen sus datos personales de identidad directamente a Google. Como los desarrolladores de esta aplicación no están de acuerdo con este requisito, la aplicación dejará de funcionar en dispositivos Android certificados después de esa fecha. + Detalles + Solución diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 85ec148de54..585989b8333 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -863,4 +863,7 @@ Erreur HTTP 403 reçue du serveur pendant la lecture, probablement causée par un bannissement d\'IP ou des problèmes de désobfuscation de l\'URL de streaming %1$s a refusé de fournir des données et a demandé un identifiant pour confirmer que le demandeur n\'est pas un robot.\n\nVotre adresse IP a peut-être été temporairement bannie par %1$s. Vous pouvez patienter un peu ou changer d\'adresse IP (par exemple en activant/désactivant un VPN, ou en passant du Wi-Fi aux données mobiles). Ce contenu n\'est pas disponible pour le pays actuellement sélectionné.\n\nModifiez votre sélection dans « Paramètres > Contenu > Pays par défaut ». + Google a annoncé qu’à partir de 2026/2027, toutes les applications sur les appareils Android certifiés exigeront que les développeurs transmettent leurs informations d’identité personnelles directement à Google. Comme les développeurs de cette application n’acceptent pas cette exigence, l’application cessera de fonctionner sur les appareils Android certifiés après cette date. + Détails + Solution diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index eb04149c66c..b01125060ab 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -847,4 +847,7 @@ पले करते समय सर्वर से HTTP error 403 मिला, जो शायद IP बैन या स्ट्रीमिंग URL डीओबफस्केशन की दिक्कतों की वजह से हुआ है %1$s ने डेटा देने से मना कर दिया, और यह कन्फर्म करने के लिए लॉगिन मांगा कि रिक्वेस्ट करने वाला बोट नहीं है।\n\nहो सकता है कि %1$s ने आपके IP को कुछ समय के लिए बैन कर दिया हो, आप कुछ समय इंतज़ार कर सकते हैं या किसी दूसरे IP पर स्विच कर सकते हैं (जैसे VPN ऑन/ऑफ करके, या WiFi से मोबाइल डेटा पर स्विच करके)। यह कंटेंट अभी चुने गए देश के कंटेंट के लिए उपलब्ध नहीं है।\n\n\"सेटिंग्स > कंटेंट > डिफ़ॉल्ट कंटेंट देश\" से अपना चुनाव बदलें। + Google ने घोषणा की है कि 2026/2027 से, प्रमाणित Android डिवाइसों पर सभी ऐप्स के लिए डेवलपर्स को अपनी व्यक्तिगत पहचान संबंधी जानकारी सीधे Google को जमा करनी होगी। चूँकि इस ऐप के डेवलपर्स इस आवश्यकता से सहमत नहीं हैं, यह ऐप उस समय के बाद प्रमाणित Android डिवाइसों पर काम नहीं करेगा। + विवरण + समाधान diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 691e31567cd..b6bf5198fd7 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -818,4 +818,7 @@ HTTP 403-as hiba érkezett a kiszolgálótól a lejátszás közben, valószínűleg IP-tiltás vagy a közvetítési hivatkozás feloldási problémák miatt %1$s visszautasította az adatok szolgáltatását, és bejelentkezést kér annak megerősítésére, hogy a kérés nem robot által érkezik.\n\nElőfordulhat, hogy az IP-címét ideiglenesen letiltotta %1$s, várhat egy keveset, vagy váltson egy másik IP-címre (például VPN be-/kikapcsolásával, vagy Wi-Fi-ről mobiladat-forgalomra váltva). Ez a tartalom a jelenleg kiválasztott tartalom országában nem elérhető.\n\nVáltoztassa meg a „Beállítások > Tartalom >Tartalom alapértelmezett országa” menüpontban. + A Google bejelentette, hogy 2026/2027-től minden alkalmazás a hitelesített Android-eszközökön meg fogja követelni, hogy a fejlesztők személyes azonosító adataikat közvetlenül a Google-nek adják át. Mivel ennek az alkalmazásnak a fejlesztői nem értenek egyet ezzel a követelménnyel, az alkalmazás ezen időpont után nem fog működni a hitelesített Android-eszközökön. + Részletek + Megoldás diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c3e513079ee..ea5d596f779 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -861,4 +861,7 @@ Errore HTTP 403 ricevuto dal server durante la riproduzione, probabilmente causato da un divieto dell\'IP o problemi di de-offuscamento dell\'URL in streaming %1$s ha rifiutato di fornire i dati, chiedendo un accesso per confermare che il richiedente non sia un bot.\n\nIl tuo IP potrebbe essere stato temporaneamente vietato da %1$s, puoi aspettare un po\' di tempo o passare ad un IP diverso (ad esempio accendendo/spegnendo una VPN, o passando dal WiFi ai dati mobili). Questo contenuto non è disponibile per il Paese dei contenuti attualmente selezionato.\n\nModifica la selezione da \"Impostazioni > Contenuti > Paese dei contenuti predefinito\". + Google ha annunciato che, a partire dal 2026/2027, tutte le app sui dispositivi Android certificati richiederanno agli sviluppatori di fornire i propri dati personali di identità direttamente a Google. Poiché gli sviluppatori di questa app non accettano tale requisito, l’app smetterà di funzionare sui dispositivi Android certificati dopo quella data. + Dettagli + Soluzione diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index b0be8529246..eeab299971b 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -804,4 +804,7 @@ インポートされているエクスポートの設定は、NewPipe 0.27.0以降は非推奨であった脆弱な形式を使用します。 インポートされているエクスポートは信頼できる情報源からであり、将来的にはNewPipe 0.27.0かこれより新しいバージョンから得られるエクスポートのみを優先して使用します。 この脆弱な形式で設定をインポートするための対応はすぐに完全に削除され、新しいバージョンからエクスポートの設定をインポートすることは出来ません。 YouTubeの一時的なプレイリストとして共有 二次的 + Google は、2026/2027 年から、認定 Android デバイス上のすべてのアプリについて、開発者が個人の身元情報を直接 Google に提出することを必須にすると発表しました。本アプリの開発者はこの要件に同意していないため、このアプリはその時点以降、認定 Android デバイス上で動作しなくなります。 + 詳細 + 解決 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 079dc45b4d6..71ea138283c 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -833,4 +833,7 @@ 재생 중 서버에서 HTTP 403 오류를 수신했으며, 스트리밍 URL 역난독화 문제나 IP 차단 때문일 수 있습니다 %1$s에서 데이터 제공을 거부하고, 요청자가 봇이 아닌지 확인하기 위해 로그인을 요청하고 있습니다.\n\n아마 IP가 %1$s에서 임시 차단되었을 것이며, 잠시 기다리거나 다른 IP로 전환할 수 있습니다 (예를 들자면 VPN을 켜/끄거나, WiFi를 모바일 데이터로 바꾸세요). 이 콘텐츠는 현재 선택한 콘텐츠 지역에서 이용할 수 없습니다.\n\n\"설정 > 콘텐츠 > 기본 콘텐츠 국가\"에서 지역을 바꾸세요. + Google은 2026/2027년부터 인증된 Android 기기에서 모든 앱이 개발자가 본인의 개인 신원 정보를 Google에 직접 제출해야 한다고 발표했습니다. 이 앱의 개발자들은 해당 요구 사항에 동의하지 않으므로, 이 앱은 그 시점 이후 인증된 Android 기기에서 더 이상 작동하지 않습니다. + 자세히 + 해결책 diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index b3d8fe7b414..8d2d369e38a 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -861,4 +861,7 @@ Este conteúdo não está disponível para o país de conteúdo atualmente selecionado.\n\nAltere a sua seleção de \"Configurações > Conteúdo > País predefinido de conteúdo\". Erro HTTP 403 recebido do servidor durante a reprodução, provavelmente causado pela URL de streaming expirado ou IP banido Erro HTTP 403 recebido do servidor durante a reprodução, provavelmente causado por um bloqueio de IP ou problemas de desofuscação da URL de streaming + O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android certificados exigirão que os desenvolvedores forneçam seus dados pessoais de identidade diretamente ao Google. Como os desenvolvedores deste aplicativo não concordam com esse requisito, o aplicativo deixará de funcionar em dispositivos Android certificados após essa data. + Detalhes + Solução diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b3f92f16790..f32b69d746d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -866,4 +866,7 @@ Во время воспроизведения получена ошибка HTTP 403 от сервера, вероятно, вызванная блокировкой IP-адреса или проблемами деобфускации URL-адреса потоковой передачи %1$s отказался предоставить данные, запросив логин для подтверждения, что запросчик не бот.\n\nВозможно, ваш IP-адрес временно заблокирован %1$s. Вы можете подождать некоторое время или переключиться на другой IP-адрес (например, включив/выключив VPN или переключившись с Wi-Fi на мобильный интернет). Этот контент недоступен для выбранной страны контента.\n\nИзмените свой выбор в разделе «Настройки > Контент > Страна контента по умолчанию». + Google объявила, что начиная с 2026/2027 года все приложения на сертифицированных устройствах Android будут требовать от разработчиков предоставления своих личных данных для идентификации напрямую Google. Так как разработчики этого приложения не согласны с этим требованием, приложение перестанет работать на сертифицированных устройствах Android после этого времени. + Подробнее + Решение diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 27f34c9db3a..6b5728d7d47 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -862,4 +862,7 @@ Chyba HTTP 403 prijatá zo servera počas prehrávania, pravdepodobne spôsobená zákazom IP adresy alebo problémami s deobfuskáciou streamingovej URL adresy %1$s odmietol poskytnúť údaje, žiada o prihlásenie na potvrdenie, že žiadateľ nie je bot.\n\nVaša IP adresa mohla byť dočasne zakázaná %1$s, môžete nejaký čas počkať alebo prejsť na inú IP adresu (napríklad zapnutím/vypnutím VPN alebo prepnutím z WiFi na mobilné dáta). Tento obsah nie je dostupný pre aktuálne zvolenú krajinu obsahu.\n\nZmeňte výber v ponuke \"Nastavenia > Obsah > Predvolená krajina obsahu\". + Google oznámil, že od roku 2026/2027 budú všetky aplikácie na certifikovaných zariadeniach s Androidom vyžadovať, aby vývojári odovzdali svoje osobné identifikačné údaje priamo Googlu. Keďže vývojári tejto aplikácie s touto požiadavkou nesúhlasia, aplikácia po tomto termíne na certifikovaných zariadeniach s Androidom prestane fungovať. + Podrobnosti + Riešenie diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 1e58d2184c0..28099ef5bb1 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -847,4 +847,7 @@ HTTP-fel 403 mottogs från servern under spelning, troligen orsakat av en IP-avstängning eller problem med deobfuskering av streaming-URL:er %1$s vägrade att tillhandahålla data och bad om en inloggning för att bekräfta att den som begärde detta inte är en bot.\n\nDin IP-adress kan ha blivit tillfälligt avstängd av %1$s. Du kan vänta en stund eller byta till en annan IP-adress (till exempel genom att slå på/av ett VPN eller genom att byta från WiFi till mobildata). Detta innehåll är inte tillgängligt för det valda innehållslandet.\n\nÄndra ditt val från \"Inställningar > Innehåll > Standardinnehållsland\". + Google har meddelat att från och med 2026/2027 kommer alla appar på certifierade Android-enheter att kräva att utvecklarna lämnar sina personliga identitetsuppgifter direkt till Google. Eftersom utvecklarna av denna app inte accepterar detta krav kommer appen inte längre att fungera på certifierade Android-enheter efter den tiden. + Detaljer + Lösning diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 76215fa0d96..a223548fe66 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -847,4 +847,7 @@ Oynatırken sunucudan HTTP 403 hatası alındı, IP engeli ya da akış URL’si çözme sorunları olabilir %1$s veri sağlamayı geri çevirdi, istekçinin robot olmadığını doğrulaması için oturum açmasını istiyor.\n\n%1$s, IP adresinizi geçici olarak engellemiş olabilir, bir süre bekleyebilir ya da başka IP\'ye geçebilirsiniz (örneğin VPN\'i açıp/kapatarak ya da WiFi\'den mobil veriye geçerek). Bu içerik şu anda seçili içerik ülkesinde kullanılamıyor.\n\nSeçiminizi \"Ayarlar > İçerik > Öntanımlı içerik ülkesi\"nden değiştirin. + Google, 2026/2027 yılından itibaren sertifikalı Android cihazlardaki tüm uygulamaların, geliştiricilerin kişisel kimlik bilgilerini doğrudan Google’a göndermesini gerektireceğini duyurdu. Bu uygulamanın geliştiricileri bu gerekliliği kabul etmediğinden, uygulama bu tarihten sonra sertifikalı Android cihazlarda çalışmayacaktır. + Detaylar + Çözüm diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index d8592b90500..7875c1e846c 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -10,6 +10,8 @@ saved_tabs_key + kao_last_checked + download_path download_path_audio diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7df964aed51..5ecdb5e97ec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -880,4 +880,7 @@ HTTP error 403 received from server while playing, likely caused by an IP ban or streaming URL deobfuscation issues %1$s refused to provide data, asking for a login to confirm the requester is not a bot.\n\nYour IP might have been temporarily banned by %1$s, you can wait some time or switch to a different IP (for example by turning on/off a VPN, or by switching from WiFi to mobile data). This content is not available for the currently selected content country.\n\nChange your selection from \"Settings > Content > Default content country\". + In August 2025, Google announced that as of September 2026, installing apps will require developer verification for all Android apps on certified devices, including those installed outside of the Play Store. Since the developers of NewPipe do not agree to this requirement, NewPipe will no longer work on certified Android devices after that time. + Details + Solution From 195a76bb083a0da9a959775238ce18ee281e7483 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Thu, 26 Feb 2026 01:08:20 +0200 Subject: [PATCH 77/92] Correctly retrieve menu item inside download dialog --- .../main/java/org/schabi/newpipe/download/DownloadDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java index 91fac7d7b51..178fcefe16f 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java @@ -344,7 +344,7 @@ private void initToolbar(final Toolbar toolbar) { toolbar.setNavigationOnClickListener(v -> dismiss()); toolbar.setNavigationContentDescription(R.string.cancel); - okButton = toolbar.findViewById(R.id.okay); + okButton = toolbar.getMenu().findItem(R.id.okay); okButton.setEnabled(false); // disable until the download service connection is done toolbar.setOnMenuItemClickListener(item -> { From 66237abb3c15181e1bfe5d062acae34861d71d9b Mon Sep 17 00:00:00 2001 From: tobigr Date: Thu, 26 Feb 2026 01:27:36 +0100 Subject: [PATCH 78/92] KeepAndroidOpen: Choose website language from list of supported languages --- .../java/org/schabi/newpipe/MainActivity.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index 3b9127978da..ebb6dd792d7 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -988,7 +988,21 @@ private void showKeepAndroidDialog() { 0 )); - final var kaoURI = Uri.parse("https://keepandroidopen.org"); + final var supportedLannguages = List.of("fr", "de", "ca", "es", "id", "it", "pl", + "pt", "cs", "sk", "fa", "ar", "tr", "el", "th", "ru", "uk", "ko", "zh", "ja"); + final var locale = Localization.getAppLocale(); + final String kaoBaseUrl = "https://keepandroidopen.org/"; + final String kaoURIString; + if (supportedLannguages.contains(locale.getLanguage())) { + if ("zh".equals(locale.getLanguage())) { + kaoURIString = kaoBaseUrl + ("TW".equals(locale.getCountry()) ? "zh-TW" : "zh-CN"); + } else { + kaoURIString = kaoBaseUrl + locale.getLanguage(); + } + } else { + kaoURIString = kaoBaseUrl; + } + final var kaoURI = Uri.parse(kaoURIString); final var solutionURI = Uri.parse( "https://github.com/woheller69/FreeDroidWarn?tab=readme-ov-file#solutions"); @@ -1009,7 +1023,7 @@ private void showKeepAndroidDialog() { .setNegativeButton(this.getString(R.string.kao_dialog_more_info), null) .show(); - // If we use setNeutralButton and etc. dialog will close after pressing the buttons + // If we use setNeutralButton and etc. dialog will close after pressing the buttons, // but we want it to close only when positive button is pressed dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(v -> this.startActivity(new Intent(Intent.ACTION_VIEW, kaoURI)) From 042f9460b0843a20b13af82fcdf1a7933b6cb0f0 Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Thu, 26 Feb 2026 11:34:52 +0200 Subject: [PATCH 79/92] Don't show Keep Android Open popup on debug builds --- app/src/main/java/org/schabi/newpipe/MainActivity.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index ebb6dd792d7..479f80db31f 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -200,7 +200,11 @@ protected void onCreate(final Bundle savedInstanceState) { UpdateSettingsFragment.askForConsentToUpdateChecks(this); } - showKeepAndroidDialog(); + // ReleaseVersionUtil.INSTANCE.isReleaseApk() will be true only for main official build + // We want every release build (nightly, nightly-refactor) to show the popup + if (!DEBUG) { + showKeepAndroidDialog(); + } MigrationManager.showUserInfoIfPresent(this); } From e22b046326a13f1567d20a905289e3f645ff1676 Mon Sep 17 00:00:00 2001 From: Stypox Date: Thu, 26 Feb 2026 15:59:52 +0100 Subject: [PATCH 80/92] Fix inconsistency in getQuantity and add docs `getQuantity()` was being called in a couple of places with `zeroCaseStringId=0`, but that wasn't documented anywhere, and if `count==0` then `getString(zeroCaseStringId /* == 0 */)` would be returned which doesn't make sense --- .../java/org/schabi/newpipe/util/Localization.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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 49e27d1082e..23dd6b2c761 100644 --- a/app/src/main/java/org/schabi/newpipe/util/Localization.java +++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java @@ -426,12 +426,24 @@ private static double round(final double value, final int scale) { return new BigDecimal(value).setScale(scale, RoundingMode.HALF_UP).doubleValue(); } + /** + * A wrapper around {@code context.getResources().getQuantityString()} with some safeguard. + * + * @param context the Android context + * @param pluralId the ID of the plural resource + * @param zeroCaseStringId the resource ID of the string to use in case {@code count=0}, + * or 0 if the plural resource should be used in the zero case too + * @param count the number that should be used to pick the correct plural form + * @param formattedCount the formatting parameter to substitute inside the plural resource, + * ideally just {@code count} converted to string + * @return the formatted string with the correct pluralization + */ private static String getQuantity(@NonNull final Context context, @PluralsRes final int pluralId, @StringRes final int zeroCaseStringId, final long count, final String formattedCount) { - if (count == 0) { + if (count == 0 && zeroCaseStringId != 0) { return context.getString(zeroCaseStringId); } From 6dddcf3805eb933c3313210c32abab3aa620038c Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 28 Feb 2026 10:03:02 +0100 Subject: [PATCH 81/92] Translated using Weblate (French) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Greek) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Czech) Currently translated at 100.0% (89 of 89 strings) Translated using Weblate (Greek) Currently translated at 99.8% (764 of 765 strings) Translated using Weblate (Polish) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Estonian) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Swedish) Currently translated at 96.6% (86 of 89 strings) Co-authored-by: Agnieszka C Co-authored-by: Fjuro Co-authored-by: Hosted Weblate Co-authored-by: Mickaël Binos Co-authored-by: Mona Lisa Co-authored-by: Priit Jõerüüt Co-authored-by: Vasilis K. Co-authored-by: delvani Co-authored-by: 大王叫我来巡山 Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/cs/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sv/ Translation: NewPipe/Metadata --- app/src/main/res/values-el/strings.xml | 3 +++ app/src/main/res/values-et/strings.xml | 3 +++ app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 3 +++ app/src/main/res/values-pt-rBR/strings.xml | 3 +++ app/src/main/res/values-zh-rCN/strings.xml | 3 +++ fastlane/metadata/android/cs/changelogs/1007.txt | 12 +++++++++++- fastlane/metadata/android/sv/changelogs/1008.txt | 4 ++++ 8 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/sv/changelogs/1008.txt diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 17edecb59e0..e1bf4dc040c 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -847,4 +847,7 @@ Σφάλμα HTTP 403 ελήφθη από τον διακομιστή κατά την αναπαραγωγή, πιθανώς λόγω αποκλεισμού IP ή προβλημάτων απεμπλοκής URL ροής Ο %1$s αρνήθηκε να παράσχει δεδομένα, ζητώντας σύνδεση για να επιβεβαιώσει ότι ο αιτών δεν είναι bot.\n\nΗ IP σας ενδέχεται να έχει αποκλειστεί προσωρινά από τον %1$s. Μπορείτε να περιμένετε λίγο ή να αλλάξετε IP (για παράδειγμα, ενεργοποιώντας/απενεργοποιώντας ένα VPN ή αλλάζοντας από WiFi σε δεδομένα κινητής τηλεφωνίας). Αυτό το περιεχόμενο δεν είναι διαθέσιμο για την τρέχουσα επιλεγμένη χώρα περιεχομένου.\n\nΑλλάξτε την επιλογή σας από \"Ρυθμίσεις > Περιεχόμενο > Προεπιλεγμένη χώρα περιεχομένου\". + Λεπτομέρειες + Λύση + Τον Αύγουστο του 2025, η Google ανακοίνωσε ότι από τον Σεπτέμβριο του 2026, η εγκατάσταση εφαρμογών θα απαιτεί επαλήθευση προγραμματιστή για όλες τις εφαρμογές Android σε πιστοποιημένες συσκευές, συμπεριλαμβανομένων εκείνων που είναι εγκατεστημένες εκτός του Play Store. Δεδομένου ότι οι προγραμματιστές του NewPipe δεν συμφωνούν με αυτήν την απαίτηση, το NewPipe δεν θα λειτουργεί πλέον σε πιστοποιημένες συσκευές Android μετά από αυτό το χρονικό διάστημα. diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 66c7a715125..262bacaa5a5 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -832,4 +832,7 @@ Esitamise ajal lisas server andmevoogu HTTP oleku 403 ning tavaliselt tähendab see, et sinu seadme IP-aadress on keelatud või voogedastuse võrguaadressi hägustamisvastastes meetmetes on viga See sisu pole saadaval hetkel kehtvas riigis.\n\nRiiki saad muuta: Seadistused > Sisu > Sisu vaikimisi riik. %1$s keeldus andmete edastamisest ning eeldab sisselogimist tuvastamaks, et tegemist pole robotiga.\n\nLisaks võib olla juhtunud, et %1$s on lisanud sinu seadme ip-aadressi ajutisse keelunimekirja. Sa võid oodata natuke aega või vahetada võrguühendus viisi (näiteks lülitades VPN sisse/välja või kasutades WiFi asemel mobiilset internetiühendust). + 2025. aasta augustis teatas Google, et alates septembrist 2026 uute rakenduste paigaldamine kõikides uutes Androidi seadmetes eeldab arendajate verifitseerimist, sealhulgas juhtudel, kui selline rakendus on paigaldatud väljastpoolt Google Play rakendustepoodi. Kuna NewPipe\'i arendajad pole sellise nõudmisega nõus, siis sellise aja saabumisel NewPipe enam ei toimi sertifitseeritud Androidi seadmetes. + Üksikasjad + Lahendus diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 585989b8333..c83ce3c9990 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -863,7 +863,7 @@ Erreur HTTP 403 reçue du serveur pendant la lecture, probablement causée par un bannissement d\'IP ou des problèmes de désobfuscation de l\'URL de streaming %1$s a refusé de fournir des données et a demandé un identifiant pour confirmer que le demandeur n\'est pas un robot.\n\nVotre adresse IP a peut-être été temporairement bannie par %1$s. Vous pouvez patienter un peu ou changer d\'adresse IP (par exemple en activant/désactivant un VPN, ou en passant du Wi-Fi aux données mobiles). Ce contenu n\'est pas disponible pour le pays actuellement sélectionné.\n\nModifiez votre sélection dans « Paramètres > Contenu > Pays par défaut ». - Google a annoncé qu’à partir de 2026/2027, toutes les applications sur les appareils Android certifiés exigeront que les développeurs transmettent leurs informations d’identité personnelles directement à Google. Comme les développeurs de cette application n’acceptent pas cette exigence, l’application cessera de fonctionner sur les appareils Android certifiés après cette date. + En août 2025, Google a annoncé qu\'à compter de septembre 2026, l\'installation d\'applications nécessiterait une vérification par le développeur pour toutes les applications Android sur les appareils certifiés, y compris celles installées en dehors du Play Store. Les développeurs de NewPipe refusant cette exigence, NewPipe ne fonctionnera plus sur les appareils Android certifiés après cette date. Détails Solution diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 60dab077d3f..cf45f92fd43 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -870,4 +870,7 @@ Podczas odtwarzania otrzymano od serwera błąd HTTP 403, prawdopodobnie spowodowany blokadą adresu IP lub problemami z odszyfrowaniem adresu URL strumienia. %1$s odmówił dostarczenia danych, prosząc o zalogowanie się w celu potwierdzenia, że nie jest się botem.\n\nTwoje IP mogło zostać tymczasowo zablokowane przez %1$s. Możesz chwilę poczekać lub zmienić adres IP (na przykład włączając/wyłączając VPN lub przełączając się z sieci Wi-Fi na dane komórkowe). Ta treść nie jest dostępna dla aktualnie wybranego kraju treści.\n\nZmień swój wybór w „Ustawienia > Zawartość > Domyślny kraj treści”. + W sierpniu 2025 r. Google ogłosił, że od września 2026 r. instalowanie aplikacji będzie wymagać weryfikacji ich twórców w przypadku wszystkich aplikacji na Androida na certyfikowanych urządzeniach, w tym tych zainstalowanych poza sklepem Google Play. Ponieważ programiści NewPipe nie zgadzają się z tym wymogiem, NewPipie nie będzie już działać na certyfikowanych urządzeniach z Androidem po tym czasie. + Szczegóły + Rozwiązanie diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 595fa961319..056551d3f71 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -861,4 +861,7 @@ Erro HTTP 403 recebido do servidor durante a reprodução, provavelmente causado por um banimento de IP ou problemas de desofuscação de URL de streaming %1$s se recusou a fornecer dados, solicitando um login para confirmar que o solicitante não é um bot.\n\nSeu IP pode ter sido temporariamente banido por %1$s. Você pode esperar um pouco ou mudar para um IP diferente (por exemplo, ativando/desativando uma VPN ou alternando de Wi-Fi para dados móveis). Este conteúdo não está disponível para o país selecionado atualmente.\n\nAltere sua seleção acessando “Configurações > Conteúdo > País padrão do conteúdo”. + Em agosto de 2025, o Google anunciou que, a partir de setembro de 2026, a instalação de aplicativos exigirá a verificação do desenvolvedor para todos os aplicativos Android em dispositivos certificados, incluindo aqueles instalados fora da Play Store. Como os desenvolvedores do NewPipe não concordam com esse requisito, o NewPipe não funcionará mais em dispositivos Android certificados após essa data. + Detalhes + Solução diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ea92db43f36..53f0f1d06cd 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -833,4 +833,7 @@ 播放时从服务器收到 HTTP 403 错误,可能因 IP 封锁或串流 URL 解密问题导致 %1$s 拒绝提供数据, 要求登录确认请求方不是机器人。\n\n你的 IP 可能已经暂时被 %1$s 封禁,你可以等待一段时间或切换到不同 IP (比如开/关 VPN, 或者从 WiFi 连接切换到移动数据)。 此内容对当前选中的内容地区不可用。\n\n要更改选择,请前往 “设置 > 内容 > 默认内容地区”。 + 2025 年 8 月,Google 宣布自 2026 年 9 月起,在已认证设备上安装所有安卓应用都需要开发者验证身份,包括在 Play 商店之外安装的应用。由于 NewPipe 开发者反对此要求,NewPipe 在此时间点后不会再在已认证设备上工作。 + 详情 + 解决方案 diff --git a/fastlane/metadata/android/cs/changelogs/1007.txt b/fastlane/metadata/android/cs/changelogs/1007.txt index 7035a111220..1d2c6d259a6 100644 --- a/fastlane/metadata/android/cs/changelogs/1007.txt +++ b/fastlane/metadata/android/cs/changelogs/1007.txt @@ -1 +1,11 @@ -Opraveno nepřehrávání jakéhokoli streamu ve službě YouTube +Oprava chyby „Obsah není k dispozici“: videa z YouTube lze nyní opět přehrávat! + +Další opravy chyb z verze 0.28.1: +• Přetahování položek playlistu pouze na sousední pozice +• Blikání názvu/komentářů mezi aktuálním a předchozím videem +• Nefunkční možnost „Spustit hlavní přehrávač na celou obrazovku“ + +Další vylepšení: +• [YouTube] Opětovné povolení přetáčení živých přenosů až o 4 hodiny zpět +• Nepřetáčení živého videa při přehrávání na pozadí +• Nové uživatelské rozhraní pro „Odebrat zhlédnuté“ diff --git a/fastlane/metadata/android/sv/changelogs/1008.txt b/fastlane/metadata/android/sv/changelogs/1008.txt new file mode 100644 index 00000000000..2008602f5c7 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/1008.txt @@ -0,0 +1,4 @@ +∙ Åtgärdade återupptagning av strömmar vid senaste uppspelningsposition +∙ [YouTube] Lade till stöd för fler kanal-URL-format +∙ [YouTube] Lade till stöd för fler videometainfo-format +∙ Uppdaterade översättningar From 8b500c7b831e9b9b26a9b0d19bb790df8e13c793 Mon Sep 17 00:00:00 2001 From: tobigr Date: Sun, 22 Feb 2026 18:51:14 +0100 Subject: [PATCH 82/92] Add changelog for NewPipe 0.28.4 (1009) --- .../metadata/android/en-US/changelogs/1009.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/1009.txt diff --git a/fastlane/metadata/android/en-US/changelogs/1009.txt b/fastlane/metadata/android/en-US/changelogs/1009.txt new file mode 100644 index 00000000000..51cc9896da7 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/1009.txt @@ -0,0 +1,14 @@ +Important +Information on and call for action for the Keep Android Open campaign added: https://www.keepandroidopen.org/ + +Improved +[Feed] Shuffle the order outdated subscriptions are updated in +Do not stack comment pages +Do not pass click events to underlying views when clicking on video detail page + +Fixed +Comment replies header layout without avatar image +Multiple player-related UI fixes +[SoundCloud] Fix streams with long IDs + +and more fixes and improvements! From 98a883d377ffedaa82b8e926108d3fafaf901fcb Mon Sep 17 00:00:00 2001 From: tobigr Date: Sun, 22 Feb 2026 19:23:01 +0100 Subject: [PATCH 83/92] Update NewPipe Extractor to 0.26.0 --- 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 73e9cad0815..225943eeb3d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -58,7 +58,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 = "824486dfdf4e9ba0fbe820bc2938f9101ae739a6" +teamnewpipe-newpipe-extractor = "v0.26.0" viewpager2 = "1.1.0" webkit = "1.14.0" # Newer versions require minSdk >= 23 work = "2.10.5" # Newer versions require minSdk >= 23 From 1fbf9fc025825a5c9c6267e0bf6109c9eaf881fd Mon Sep 17 00:00:00 2001 From: tobigr Date: Sun, 22 Feb 2026 18:52:41 +0100 Subject: [PATCH 84/92] Bump version to 0.28.4 (1009) --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e18826c1619..5b7153ee210 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -44,9 +44,9 @@ configure { minSdk = 21 targetSdk = 35 - versionCode = System.getProperty("versionCodeOverride")?.toInt() ?: 1008 + versionCode = System.getProperty("versionCodeOverride")?.toInt() ?: 1009 - versionName = "0.28.3" + versionName = "0.28.4" System.getProperty("versionNameSuffix")?.let { versionNameSuffix = it } testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" From 8fa6f9670d36abaf16fd2f21ff8d92322bf714ab Mon Sep 17 00:00:00 2001 From: "Yevhen Babiichuk (DustDFG)" Date: Mon, 2 Mar 2026 08:42:07 +0200 Subject: [PATCH 85/92] Apply suggestion (cherry picked from commit 0020a02a28f525399c3998fe141c13b452db3f94) --- .../java/org/schabi/newpipe/MainActivity.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index 479f80db31f..00f1a62afb6 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -27,7 +27,6 @@ import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageManager; -import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -996,19 +995,18 @@ private void showKeepAndroidDialog() { "pt", "cs", "sk", "fa", "ar", "tr", "el", "th", "ru", "uk", "ko", "zh", "ja"); final var locale = Localization.getAppLocale(); final String kaoBaseUrl = "https://keepandroidopen.org/"; - final String kaoURIString; + final String kaoURI; if (supportedLannguages.contains(locale.getLanguage())) { if ("zh".equals(locale.getLanguage())) { - kaoURIString = kaoBaseUrl + ("TW".equals(locale.getCountry()) ? "zh-TW" : "zh-CN"); + kaoURI = kaoBaseUrl + ("TW".equals(locale.getCountry()) ? "zh-TW" : "zh-CN"); } else { - kaoURIString = kaoBaseUrl + locale.getLanguage(); + kaoURI = kaoBaseUrl + locale.getLanguage(); } } else { - kaoURIString = kaoBaseUrl; + kaoURI = kaoBaseUrl; } - final var kaoURI = Uri.parse(kaoURIString); - final var solutionURI = Uri.parse( - "https://github.com/woheller69/FreeDroidWarn?tab=readme-ov-file#solutions"); + final var solutionURI = + "https://github.com/woheller69/FreeDroidWarn?tab=readme-ov-file#solutions"; if (kaoLastCheck.plus(30, ChronoUnit.DAYS).isBefore(now)) { final var dialog = new AlertDialog.Builder(this) @@ -1030,10 +1028,10 @@ private void showKeepAndroidDialog() { // If we use setNeutralButton and etc. dialog will close after pressing the buttons, // but we want it to close only when positive button is pressed dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(v -> - this.startActivity(new Intent(Intent.ACTION_VIEW, kaoURI)) + ShareUtils.openUrlInBrowser(this, kaoURI) ); dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> - this.startActivity(new Intent(Intent.ACTION_VIEW, solutionURI)) + ShareUtils.openUrlInBrowser(this, solutionURI) ); } } From d497f1d88e6a740f051abee88b52a15843c11811 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 6 Mar 2026 20:30:04 +0100 Subject: [PATCH 86/92] Translated using Weblate (Latvian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 97.9% (749 of 765 strings) Translated using Weblate (Latvian) Currently translated at 97.9% (749 of 765 strings) Translated using Weblate (Latvian) Currently translated at 18.8% (17 of 90 strings) Translated using Weblate (Latvian) Currently translated at 96.9% (742 of 765 strings) Translated using Weblate (Latvian) Currently translated at 97.3% (745 of 765 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Latvian) Currently translated at 17.7% (16 of 90 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Russian) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Italian) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Armenian) Currently translated at 31.6% (242 of 765 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Slovak) Currently translated at 76.6% (69 of 90 strings) Translated using Weblate (Azerbaijani) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Japanese) Currently translated at 13.3% (12 of 90 strings) Translated using Weblate (Czech) Currently translated at 100.0% (90 of 90 strings) Translated using Weblate (Korean) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (French) Currently translated at 98.8% (89 of 90 strings) Translated using Weblate (Japanese) Currently translated at 95.5% (731 of 765 strings) Translated using Weblate (Polish) Currently translated at 56.6% (51 of 90 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (90 of 90 strings) Translated using Weblate (Tamil) Currently translated at 48.8% (44 of 90 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (German) Currently translated at 100.0% (765 of 765 strings) Translated using Weblate (German) Currently translated at 100.0% (90 of 90 strings) Co-authored-by: 439JBYL80IGQTF25UXNR0X1BG <439jbyl80igqtf25uxnr0x1bg@users.noreply.hosted.weblate.org> Co-authored-by: Agnieszka C Co-authored-by: Davit Mayilyan Co-authored-by: Erenay Co-authored-by: Femini Co-authored-by: Fjuro Co-authored-by: Ghost of Sparta Co-authored-by: Hosted Weblate Co-authored-by: Mickaël Binos Co-authored-by: Milan Co-authored-by: Random Co-authored-by: Trunars Co-authored-by: VfBFan Co-authored-by: justcontributor Co-authored-by: kuragehime Co-authored-by: ssantos Co-authored-by: தமிழ்நேரம் Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) 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/ja/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/lv/ 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/ta/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/ Translation: NewPipe/Metadata --- app/src/main/res/values-az/strings.xml | 3 + app/src/main/res/values-bg/strings.xml | 3 + app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-hy/strings.xml | 39 +++- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-lv/strings.xml | 173 +++++++++--------- app/src/main/res/values-pt-rPT/strings.xml | 5 +- app/src/main/res/values-pt/strings.xml | 4 +- app/src/main/res/values-ru/strings.xml | 4 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 11 +- .../metadata/android/cs/changelogs/1009.txt | 14 ++ .../metadata/android/de/changelogs/1009.txt | 14 ++ .../metadata/android/de/changelogs/999.txt | 6 +- .../metadata/android/fr/changelogs/1009.txt | 15 ++ .../metadata/android/ja/changelogs/1001.txt | 6 + .../metadata/android/ja/changelogs/1002.txt | 4 + .../metadata/android/lv/changelogs/1001.txt | 4 +- .../metadata/android/lv/changelogs/64.txt | 2 +- .../metadata/android/lv/changelogs/770.txt | 2 +- .../metadata/android/lv/changelogs/850.txt | 2 +- .../metadata/android/lv/changelogs/910.txt | 2 +- .../metadata/android/lv/changelogs/950.txt | 4 +- .../metadata/android/lv/changelogs/956.txt | 1 + .../metadata/android/lv/changelogs/982.txt | 1 + .../metadata/android/lv/changelogs/985.txt | 1 + .../metadata/android/lv/changelogs/989.txt | 4 +- .../metadata/android/lv/changelogs/998.txt | 2 +- .../metadata/android/pl/changelogs/1009.txt | 14 ++ .../metadata/android/sk/changelogs/1009.txt | 14 ++ .../metadata/android/ta/changelogs/1000.txt | 24 +-- .../metadata/android/ta/changelogs/1005.txt | 17 ++ .../metadata/android/ta/changelogs/1006.txt | 16 ++ .../metadata/android/ta/changelogs/1008.txt | 4 + .../metadata/android/ta/changelogs/1009.txt | 14 ++ .../metadata/android/ta/changelogs/65.txt | 46 ++--- .../metadata/android/ta/changelogs/66.txt | 44 +++-- .../metadata/android/ta/changelogs/68.txt | 50 ++--- .../metadata/android/ta/changelogs/69.txt | 32 ++-- .../metadata/android/ta/changelogs/70.txt | 46 ++--- .../metadata/android/ta/changelogs/71.txt | 18 +- .../metadata/android/ta/changelogs/740.txt | 46 ++--- .../metadata/android/ta/changelogs/750.txt | 38 ++-- .../metadata/android/ta/changelogs/760.txt | 64 +++---- .../metadata/android/ta/changelogs/780.txt | 20 +- .../metadata/android/ta/changelogs/790.txt | 24 +-- .../metadata/android/ta/changelogs/800.txt | 46 ++--- .../metadata/android/ta/changelogs/810.txt | 34 ++-- .../metadata/android/ta/changelogs/840.txt | 40 ++-- .../metadata/android/ta/changelogs/900.txt | 24 +-- .../metadata/android/ta/changelogs/930.txt | 32 ++-- .../metadata/android/ta/changelogs/940.txt | 26 +-- .../metadata/android/ta/changelogs/951.txt | 28 +-- .../metadata/android/ta/changelogs/954.txt | 14 +- .../metadata/android/ta/changelogs/957.txt | 20 +- .../metadata/android/ta/changelogs/958.txt | 26 +-- .../metadata/android/ta/changelogs/964.txt | 16 +- .../metadata/android/ta/changelogs/966.txt | 24 +-- .../metadata/android/ta/changelogs/969.txt | 16 +- .../metadata/android/ta/changelogs/970.txt | 20 +- .../metadata/android/ta/changelogs/972.txt | 24 +-- .../metadata/android/ta/changelogs/975.txt | 30 +-- .../metadata/android/ta/changelogs/976.txt | 18 +- .../metadata/android/ta/changelogs/977.txt | 18 +- .../metadata/android/ta/changelogs/980.txt | 22 +-- .../metadata/android/ta/changelogs/983.txt | 18 +- .../metadata/android/ta/changelogs/984.txt | 14 +- .../metadata/android/ta/changelogs/986.txt | 28 +-- .../metadata/android/ta/changelogs/987.txt | 20 +- .../metadata/android/ta/changelogs/990.txt | 24 +-- .../metadata/android/ta/changelogs/991.txt | 22 +-- .../metadata/android/ta/changelogs/992.txt | 30 +-- .../metadata/android/ta/changelogs/993.txt | 20 +- .../metadata/android/ta/changelogs/994.txt | 24 +-- .../metadata/android/ta/changelogs/995.txt | 28 +-- .../metadata/android/ta/changelogs/997.txt | 30 +-- .../metadata/android/ta/changelogs/999.txt | 18 +- .../android/zh-Hans/changelogs/1009.txt | 14 ++ 82 files changed, 922 insertions(+), 716 deletions(-) create mode 100644 fastlane/metadata/android/cs/changelogs/1009.txt create mode 100644 fastlane/metadata/android/de/changelogs/1009.txt create mode 100644 fastlane/metadata/android/fr/changelogs/1009.txt create mode 100644 fastlane/metadata/android/ja/changelogs/1001.txt create mode 100644 fastlane/metadata/android/ja/changelogs/1002.txt create mode 100644 fastlane/metadata/android/lv/changelogs/956.txt create mode 100644 fastlane/metadata/android/lv/changelogs/982.txt create mode 100644 fastlane/metadata/android/lv/changelogs/985.txt create mode 100644 fastlane/metadata/android/pl/changelogs/1009.txt create mode 100644 fastlane/metadata/android/sk/changelogs/1009.txt create mode 100644 fastlane/metadata/android/ta/changelogs/1005.txt create mode 100644 fastlane/metadata/android/ta/changelogs/1006.txt create mode 100644 fastlane/metadata/android/ta/changelogs/1008.txt create mode 100644 fastlane/metadata/android/ta/changelogs/1009.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/1009.txt diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 73ed98d7e78..212f9198830 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -825,4 +825,7 @@ HTTP xətası 403 oynadarkən serverdən alındı, ehtimal ki, IP qadağası və ya yayım URL-nin deobfuscation problemləri ilə bağlıdır %1$s sorğuçunun bot olmadığını təsdiqləmək üçün giriş tələb edərək data təmin etməkdən imtina etdi.\n\nIP-niz %1$s tərəfindən müvəqqəti şəkildə qadağan oluna bilər, bir müddət gözləyə və ya başqa IP-yə keçə bilərsiniz (məsələn, VPN-i açıb/qapatmaqla və ya WiFi-dan mobil dataya keçməklə). Bu məzmun hazırda seçilən məzmun ölkəsi üçün əlçatan deyil. \n\nSeçiminizi \"Tənzimləmələr > Məzmun > İlkin məzmun ölkəsi\"- dən dəyişin. + 2025 avqustunda, Google 2026-cı ilin sentyabrından etibarən tətbiqlərin quraşdırılması Play Store xaricində quraşdırılanlar daxil olmaqla, sertifikatlaşdırılan cihazlardakı bütün Android tətbiqləri üçün tərtibatçı təsdiqlənməsini tələb edəcək deyə bəyan etdi. NewPipe tərtibatçıları bu tələblə razılaşmadığı üçün NewPipe bu vaxtdan sonra artıq sertifikatlaşdırılan Android cihazlarında işləməyəcək. + Təfərrüatlar + Həll olunma diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 87eee28d94f..d809219df53 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -832,4 +832,7 @@ HTTP грешка 403, получена от сървъра по време на възпроизвеждане, вероятно причинена от забрана на IP адреса или проблеми с деобфускацията на URL адреси за стрийминг %1$s отказа да предостави данни, като поиска вход, за да потвърди, че заявителят не е бот.\n\nВашият IP адрес може да е временно забранен от %1$s. Можете да изчакате известно време или да превключите към друг IP адрес (например като включите/изключите VPN или като превключите от WiFi към мобилни данни). Това съдържание не е налично за текущо избраната държава на съдържанието.\n\nПроменете избора си от \"Настройки > Съдържание > Държава на съдържанието по подразбиране\". + През август 2025 г. Google обяви, че от септември 2026 г. инсталирането на приложения ще изисква проверка от разработчика за всички приложения за Android на сертифицирани устройства, включително тези, инсталирани извън Play Store. Тъй като разработчиците на NewPipe не са съгласни с това изискване, NewPipe вече няма да работи на сертифицирани устройства с Android след този период. + Детайли + Решение diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index cedef9e14de..a0c7f3d4375 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -847,7 +847,7 @@ HTTP-Fehler 403 vom Server während der Wiedergabe erhalten, wahrscheinlich verursacht durch eine IP-Sperre oder Probleme beim Entschlüsseln der Streaming-URL %1$s hat die Datenbereitstellung verweigert und verlangt eine Anmeldung, um zu bestätigen, dass es sich bei dem Anfragenden nicht um einen Bot handelt.\n\nDeine IP-Adresse wurde möglicherweise vorübergehend von %1$s gesperrt. Du kannst einige Zeit warten oder zu einer anderen IP-Adresse wechseln (z. B. durch Ein- und Ausschalten eines VPNs oder durch Wechseln von WLAN zu mobilen Daten). Dieser Inhalt ist für das aktuell ausgewählte Land des Inhalts nicht verfügbar.\n\nÄndere die Auswahl unter „Einstellungen > Inhalt > Bevorzugtes Land des Inhalts“. - Google hat angekündigt, dass ab 2026/2027 alle Apps auf zertifizierten Android-Geräten nur noch funktionieren, wenn die Entwickler ihre persönlichen Identitätsdaten direkt an Google übermitteln. Da die Entwickler dieser App dieser Anforderung nicht zustimmen, wird diese App ab diesem Zeitpunkt auf zertifizierten Android-Geräten nicht mehr funktionieren. + Im August 2025 gab Google bekannt, dass ab September 2026 für die Installation von Apps eine Entwicklerüberprüfung für alle Android-Apps auf zertifizierten Geräten erforderlich sein wird, einschließlich derjenigen, die außerhalb des Play Store installiert wurden. Da die Entwickler von NewPipe dieser Forderung nicht nachkommen, wird NewPipe nach diesem Zeitpunkt auf zertifizierten Android-Geräten nicht mehr funktionieren. Details Lösung diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index b6bf5198fd7..0fecf5fb43a 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -818,7 +818,7 @@ HTTP 403-as hiba érkezett a kiszolgálótól a lejátszás közben, valószínűleg IP-tiltás vagy a közvetítési hivatkozás feloldási problémák miatt %1$s visszautasította az adatok szolgáltatását, és bejelentkezést kér annak megerősítésére, hogy a kérés nem robot által érkezik.\n\nElőfordulhat, hogy az IP-címét ideiglenesen letiltotta %1$s, várhat egy keveset, vagy váltson egy másik IP-címre (például VPN be-/kikapcsolásával, vagy Wi-Fi-ről mobiladat-forgalomra váltva). Ez a tartalom a jelenleg kiválasztott tartalom országában nem elérhető.\n\nVáltoztassa meg a „Beállítások > Tartalom >Tartalom alapértelmezett országa” menüpontban. - A Google bejelentette, hogy 2026/2027-től minden alkalmazás a hitelesített Android-eszközökön meg fogja követelni, hogy a fejlesztők személyes azonosító adataikat közvetlenül a Google-nek adják át. Mivel ennek az alkalmazásnak a fejlesztői nem értenek egyet ezzel a követelménnyel, az alkalmazás ezen időpont után nem fog működni a hitelesített Android-eszközökön. + 2025 augusztusában a Google bejelentette, hogy 2026 szeptemberétől az alkalmazások telepítéséhez fejlesztői ellenőrzésre lesz szükség a tanúsított eszközökön található összes Android-alkalmazáshoz, beleértve a Play Áruházon kívül telepített alkalmazásokat is. Mivel a NewPipe fejlesztői nem értenek egyet ezzel a követelménnyel, a NewPipe ezután nem fog működni a tanúsított Android-eszközökön. Részletek Megoldás diff --git a/app/src/main/res/values-hy/strings.xml b/app/src/main/res/values-hy/strings.xml index 3be44ba7304..4eaf853dfb8 100644 --- a/app/src/main/res/values-hy/strings.xml +++ b/app/src/main/res/values-hy/strings.xml @@ -16,7 +16,7 @@ Լավ Ջնջել Սկսել - Հավանում եմ + Հավանումներ Չեմ հավանում Մաքրել Հրապարակվել է %1$s @@ -228,7 +228,7 @@ Դասավորել Գամված մեկնաբանություն Հաշիվը կասեցված է - + Մասին Ալբոմներ Այո Ոչ @@ -243,4 +243,39 @@ Անհայտ Նկատի ունե՞ս «%1$s» Բարձրություն + Լուծում + Մանրամասներ + + %s պատասխան + %s պատասխաններ + + Կիսվել նվագացանկով + Առաջ տանել + Նվագել + Տևողություն + Հետ տանել + Բացել նվագացանկը + Հավանումներ + Կարճեր + Մասնակի դիտված + Ամբողչովին դիտված + Միացված + Անջատված + Բաժանորդագրվածներ + Ներքին + Անձնական + Հարցնել որտեղ ներբեռնել + Կամայական ցանցով + Նվագացանկը ստեղծվեց + Նոր նվագացանկ + Ալբոմներ + Արվեստագետներ + Նվիրել + Անտեսել + %sՀզր + %sՄլն + %sԲլն + Ազդարարել + Այդպիսի պանակ չկա + Նվագացանկեր diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index ea5d596f779..86b9c382a9d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -861,7 +861,7 @@ Errore HTTP 403 ricevuto dal server durante la riproduzione, probabilmente causato da un divieto dell\'IP o problemi di de-offuscamento dell\'URL in streaming %1$s ha rifiutato di fornire i dati, chiedendo un accesso per confermare che il richiedente non sia un bot.\n\nIl tuo IP potrebbe essere stato temporaneamente vietato da %1$s, puoi aspettare un po\' di tempo o passare ad un IP diverso (ad esempio accendendo/spegnendo una VPN, o passando dal WiFi ai dati mobili). Questo contenuto non è disponibile per il Paese dei contenuti attualmente selezionato.\n\nModifica la selezione da \"Impostazioni > Contenuti > Paese dei contenuti predefinito\". - Google ha annunciato che, a partire dal 2026/2027, tutte le app sui dispositivi Android certificati richiederanno agli sviluppatori di fornire i propri dati personali di identità direttamente a Google. Poiché gli sviluppatori di questa app non accettano tale requisito, l’app smetterà di funzionare sui dispositivi Android certificati dopo quella data. + Ad agosto 2025, Google ha annunciato che a partire da settembre 2026, l\'installazione di app richiederà la verifica dello sviluppatore per tutte le app Android su dispositivi certificati, compresi quelli installati al di fuori del Play Store. Poiché gli sviluppatori di NewPipe non sono d\'accordo con questo requisito, NewPipe non funzionerà più su dispositivi Android certificati dopo quel mese. Dettagli Soluzione diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index eeab299971b..e915bb80939 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -807,4 +807,5 @@ Google は、2026/2027 年から、認定 Android デバイス上のすべてのアプリについて、開発者が個人の身元情報を直接 Google に提出することを必須にすると発表しました。本アプリの開発者はこの要件に同意していないため、このアプリはその時点以降、認定 Android デバイス上で動作しなくなります。 詳細 解決 + %sB diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 71ea138283c..b94258e766c 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -833,7 +833,7 @@ 재생 중 서버에서 HTTP 403 오류를 수신했으며, 스트리밍 URL 역난독화 문제나 IP 차단 때문일 수 있습니다 %1$s에서 데이터 제공을 거부하고, 요청자가 봇이 아닌지 확인하기 위해 로그인을 요청하고 있습니다.\n\n아마 IP가 %1$s에서 임시 차단되었을 것이며, 잠시 기다리거나 다른 IP로 전환할 수 있습니다 (예를 들자면 VPN을 켜/끄거나, WiFi를 모바일 데이터로 바꾸세요). 이 콘텐츠는 현재 선택한 콘텐츠 지역에서 이용할 수 없습니다.\n\n\"설정 > 콘텐츠 > 기본 콘텐츠 국가\"에서 지역을 바꾸세요. - Google은 2026/2027년부터 인증된 Android 기기에서 모든 앱이 개발자가 본인의 개인 신원 정보를 Google에 직접 제출해야 한다고 발표했습니다. 이 앱의 개발자들은 해당 요구 사항에 동의하지 않으므로, 이 앱은 그 시점 이후 인증된 Android 기기에서 더 이상 작동하지 않습니다. + 2025년 8월, Google은 2026년 9월부터 인증된 기기에 앱을 설치하려면 Play 스토어 외 앱을 포함한 모든 Android 앱에 대해 개발자 인증을 받아야 한다고 발표했습니다. NewPipe 개발자는 이 요구 사항에 동의하지 않으므로, 이 이후 NewPipe는 더 이상 인증된 Android 기기에서 동작하지 않을 것입니다. 자세히 해결책 diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 636e5efd232..8a3d8dc90bb 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -30,7 +30,7 @@ Top 50 Nevarēja ielādēt komentārus Vai jūs vēlaties ievietot arī iestatījumus? - Šis pārrakstīt jūsu tagadējo uzstādījumu. + Pašreizējie dati tiks aizstāti. Uzmanību: Ne visas datnes varēja ievietot. Nav derīgs ZIP fails Ievietošana pabeigta @@ -47,16 +47,15 @@ Kādas cilnes rādīt galvenajā lapā Galvenā lapa Visvairāk Atskaņotais - Pēdējais Atskaņotais - Vai jūs tiešām vēlaties izdzēst šo meklējumu no vēstures? + Pēdējais atskaņotais + Vai jūs tiešām vēlaties izdzēst šo vaicājumu no meklēšanas vēstures? Vēsture Vēsture Izlasīt licenci Newpipe ir bezmaksas programmatūra: jūs varat izmantot, izpētīt, dalīties un uzlabot to jebkurā brīdī. Tieši jūs varat kopīgot un/ vai modificēt to saskaņā ar GNU Vispārējās Publiskās Licences noteikumiem, ko publicējusi Brīvās Programmatūras Fonds, vai nu 3. licences versija, vai (pēc jūsu izvēles) jebkura vēlāka versija. NewPipe Licence Izslasīt privātuma politiku - NewPipe projekts uztver jūsu privātumu ļoti nopietni . Tāpēc lietotne nesavāc datus bez jūsu piekrišanas. -\nNewPipe privātuma politika sīki izskaidro, kādi dati tiek nosūtīti un uzglabāti, nosūtot kļūdas ziņojumu. + Datu aizsardzība ir ļoti svarīga NewPipe projektam. Tāpēc lietotne neapkopo datus bez jūsu piekrišanas.\nNewPipe konfidencialitātes politika sīki izskaidro, kādi dati tiek nosūtīti un uzglabāti, kad nosūtiet avārijas ziņojumu. NewPipe Privātuna Politika Apmeklēt NewPipe mājaslapu, lai iegūtu vairāk informācijas un ziņu. Mājaslapa @@ -69,7 +68,7 @@ Libre, viegla atskaņošana uz Android. Licences Par un BUJ - Trešo pušu Licences + Trešo pušu licences Par NewPipe Lielākā daļa īpašo rakstzīmju Burti un cipari @@ -154,10 +153,10 @@ Kas:\nRequest:\nContent Valoda:\nContent Valsts:\nApp Valoda:\nService:\nGMT Laiks:\nPackage:\nVersion:\nOS versija: Paziņojumi video apstrādes progresam Video haša paziņojums - Atcerēties pēdējo uznirstošā loga izmēru un pozīciju + Atceras pēdējo uznirstošā loga izmēru un pozīciju Atcerēties uznirstošā loga īpašības - Uznirstošā loga noklusējuma izšķirtspēja - Uznirstošs logs + Noklusējuma uznirstošā loga izšķirtspēja + Skatīt uznirstošā logā Atvērt uznirstošā logā Kas notika: Informācija: @@ -169,13 +168,13 @@ Ziņojiet pa e-pastu Piedotiet, tam nevajadzēja notikt. Dot atļauju rādīt pāri citām aplikācijām - Vai jūs vēlaties atjaunot noklusējumus\? - Atjaunot noklusējumus + Vai jūs tiešām vēlaties atjaunot noklusējuma vērtības? + Atjaunot noklusējuma vērtības Nevarēja nolasīt saglabātās cilnes, tādēļ izmanto noklusējuma Neviens video nav pieejams lejupielādei Notika kļūda: %1$s Faila nosaukums nevar būt tukšs - Fails neeksistē, vai atļauja to lasīt vai rakstīt, nav dota + Datne neeksistē vai nav dota atļauja to lasīt vai rakstīt Tāds fails/saturs neeksistē Tāda mape neeksistē Fails pārvietots vai izdzēsts @@ -281,17 +280,7 @@ NewPipe šo saturu vēl neatbalsta. \n \nCerams, ka to atbalstīs nākamajā versijā. - Vai jūs domājat, ka plūsmas atjaunināšana ir pārāk lēna\? Ja tā, mēģiniet iespējot ātro atjaunināšanu (to var mainīt iestatījumos vai nospiežot pogu zemāk). -\n -\nNewPipe piedāvā divas plūsmas atjaunināšanas stratēģijas: -\n• Notiek visa abonēšanas kanāla iegūšana, kas ir lēna, bet pabeigta. -\n• izmantojot īpašu servisu, kas ir ātrs, bet parasti nav pilnīgs. -\n -\nAtšķirība starp abiem ir tā, ka ātrajā parasti trūkst informācijas, piemēram, video ilgums vai veids (nevar atšķirt tiešraides video no parastajiem), un tas var atgriezt mazāk vienumu. -\n -\nYouTube ir pakalpojuma piemērs, kas piedāvā šo ātro metodi ar savu RSS plūsmu. -\n -\nTātad izvēle sakrīt ar vēlamo: ātrums vai precīza informācija. + Vai jūs domājat, ka plūsmas atjaunināšana ir pārāk lēna? Ja tā, mēģiniet iespējot ātro atjaunināšanu (to var mainīt iestatījumos vai nospiežot pogu zemāk). \n \nNewPipe piedāvā divas plūsmas atjaunināšanas stratēģijas: \n• Notiek visa abonēšanas kanāla iegūšana, kas ir lēna, bet pabeigta. \n• izmantojot īpašu servisu, kas ir ātrs, bet parasti nav pilnīgs. \n \nAtšķirība starp abiem ir tā, ka ātrajā parasti trūkst informācijas, piemēram, video ilgums vai veids (nevar atšķirt tiešraides video no parastajiem), un tas var atgriezt mazāk vienumu. \n \nYouTube ir pakalpojuma piemērs, kas piedāvā šo ātro metodi ar savu RSS plūsmu. \n \nTātad izvēle sakrīt ar vēlamo: ātrums vai precīza informācija. Izslēgt ātro režīmu Ieslēgt ātro režīmu Pieejams dažos pakalpojumos, tas parasti ir daudz ātrāk, taču var atgriezt ierobežotu daudzumu informācijas un bieži arī nepilnīgu informāciju (piemēram, nav video ilguma, vienuma veida, nav tiešraides statusa) @@ -314,7 +303,7 @@ Notiek plūsmas apstrāde … Notiek plūsmas ielāde… Nav ielādēts: %d - Plūsma pēdējoreiz atjaunināta: %s + Atjaunināta: %s Abonementu grupas Kas jauns @@ -337,9 +326,9 @@ %d sekundi %d sekundes - ExoPlayer ierobežojumu dēļ meklēšanas ilgums tika iestatīts uz %d sekundēm - Jā, un daļēji skatītos video - Tiešraides, kas pirms tam skatītas un pēc tam pievienotas atskaņošanas sarakstam, tiks noņemtas. \nVai tiešām turpināt? + ExoPlayer ierobežojumu dēļ tīšanas solis tika iestatīts uz %d sekundēm + Jā, un daļēji skatītos + Tiešraides, kas iepriekš noskatītas un pēc tam pievienotas atskaņošanas sarakstam, tiks noņemtas. \nVai tiešām turpināt? Vai tiešām noņemt skatītās tiešraides? Noņemt skatīto System default @@ -380,7 +369,7 @@ Rādīt kļūdu Ir gaidāma lejupielāde ar šo nosaukumu Notiek lejupielāde ar šo nosaukumu - nevar pārrakstīt failu + nevar pārrakstīt datni Lejupielādēts fails ar šo nosaukumu jau pastāv Fails ar šo nosaukumu jau pastāv Pārrakstīt @@ -394,7 +383,7 @@ Darbība, pārslēdzoties uz citu lietotni no galvenā video atskaņotāja — %s Minimizēt, pārslēdzot aplikāciju Solis - Klusuma laikā patīt uz priekšu + Klusuma brīžos patīt uz priekšu Atvienot (var izraisīt traucējumus) Paturiet prātā, ka šī darbība var pieprasīt lielu datu daudzumu \n @@ -446,8 +435,7 @@ Nav ierobežojuma Nepiekrist Piekrist - Lai ievērotu Eiropas Vispārējās datu aizsardzības regulu (GDPR), mēs pievēršam jūsu uzmanību NewPipe privātuma politikai. Lūdzu, rūpīgi izlasiet to. -\nJums ir ta jāpieņem, lai nosūtītu mums kļūdas ziņojumu. + Lai ievērotu Eiropas Vispārīgo datu aizsardzības regulu (GDPR), mēs vēršam jūsu uzmanību NewPipe konfidencialitātes politikai. Lūdzu, rūpīgi izlasiet to.\nJums tā ir jāpieņem, lai nosūtītu mums kļūdas ziņojumu. Atiestatīt Tonis Temps @@ -470,40 +458,40 @@ Pielāgot Noklusējuma satura valoda Noklusējuma satura valsts - Nevarēja atpazīt saites URL. Atvērt ar citu aplikāciju\? + Nevarēja atpazīt saites URL. Vai atvērt citā lietotnē? Neatbalstīts saites URL Rādīt padomu, kad nospiežat fona vai popup pogu pie video \"Informācija:\" Rādīt \"Nospiediet, lai pievienotu\" padomu Automātiski atskaņot Lejupielādēt - Turpināt atskaņošanu pēc pārtraukumiem (piemēram, telefona zvana) + Turpina atskaņot video pēc pārtraukumiem (piemēram, telefona zvana) Turpināt atskaņošanu - Uzglabāt skatīto video vēsturi - Dzēst datus - Rādīt atskaņošanas pozīcijas indikatoru sarakstos + Uzglabā skatīto video vēsturi + Notīrīt datus + Rāda atskaņošanas pozīcijas indikatoru sarakstos Atskaņošanas pozīcija sarakstos Saglabāt pēdējo atskaņošanas pozīciju Atsākt atskaņošanu Skatīšanās vēsture Glabāt meklēšanas vēsturi lokāli (ierīces krātuvē) Meklēšanas vēsture - Izvēlieties, kādus ieteikumus rādīt, rakstot meklēšanas joslā + Atlasīt, kādus ieteikumus rādīt, ievadot vaicājumu meklēšanas joslā Meklēšanas ieteikumi - Automātiski atskaņot - Turpināt atskaņot videoklipus, automātiski pievienojot līdzīgus videoklipus - Automātiski atskaņot nākošo videoklipu - Kešatmiņas metadati notīrīti + Automātiski pievienot + Pievieno līdzīgus video atskaņošanas rindai, kad atskaņo pēdējo video, ja vien nav iespējota atkārtotā, malt uz riņķi, atskaņošana + Automātiski pievienot nākamo video + Metadatu kešatmiņa notīrīta Izdzēš visus kešatmiņā glabātos vietnes datus - Notīrīt kešatmiņas metadatus + Notīrīt kešatmiņā saglabātos metadatus Attēlu kešatmiņa notīrīta - Izslēdziet, lai paslēptu papildus informācijas laukus par video autoru, video saturu vai meklēšanas vaicājuma rezultātu + Izslēdziet, ja nevēlaties redzēt papildus informācijas laukus - video autoru, video saturu vai meklēšanas vaicājuma rezultātu Rādīt papildus informāciju Izslēdziet, ja nevēlaties redzēt video aprakstu un papildus informāciju Rādīt video aprakstu - Rādīt \'Nākošos\' un \'Līdzīgos\' videoklipus - Izslēdziet, lai paslēptu komentārus + Rādīt \'Nākamos\' un \'Līdzīgos\' video + Izslēdziet, ja vēlaties paslēpt komentārus Rādīt komentārus - Tagadējā atskaņošanas rinda tiks aizvietota + Pašreizējā atskaņošanas rinda tiks aizstāta/pārrakstīta Mainot vienu atskaņotāju uz citu, jūsu atskaņošanas rinda var tikt aizstāta/pārrakstīta Prasīt apstiprinājumu, pirms notīrīt atskaņošanas rindu Ātrās uz priekšu/atpakaļ tīšanas solis @@ -516,61 +504,61 @@ Noklusējuma video formāts Noklusējuma audio formāts Audio - Ļaut Android pielāgot paziņojuma krāsu atbilstoši galvenajai krāsai video attēlā (ņemiet vērā, ka tas nav pieejams visās ierīcēs) + Ļauj Android pielāgot paziņojuma krāsu atbilstoši galvenajai krāsai video attēlā (ņemiet vērā, ka tas nav pieejams visās ierīcēs) Kopīgot Atvērt ar Atvērt pārlūkā Atcelt Uzstādīt Netika atrasts video atskaņotājs (jūs variet uzstādīt VLC, lai to atskaņotu). - Netika atrasts video atskaņotājs. Uzstādīt VLC? + Netika atrasts video atskaņotājs. Vai uzstādīt VLC? Publicēts %1$s - Nospiediet uz meklēšanas ikonas, lai sāktu. + Nospiediet uz meklēšanas ikonas, lai atrastu vēlamo saturu. Pielāgot paziņojumu krāsu - Nekas + Neko Ielādējas Sajaukt Atkārtot - Jūs varat izvēlēties ne vairāk kā 3 darbības, kuras rādīs kompaktajā paziņojumā! - Rediģējiet katru paziņojuma darbību, pieskaroties tai. Izvēlieties trīs darbības, kuras rādīs kompaktā paziņojumā, izmantojot rūtiņas labajā pusē. + Jūs variet atlasīt ne vairāk kā 3 darbības, ko rādīt kompaktajā paziņojumā! + Rediģējiet katru zemāk redzamo paziņojuma darbību, pieskaroties tai. Atķeksējiet izvēles rūtiņas labajā pusē, lai atlasītu līdz pat trīm darbībām, kuras rādīt kompaktajā paziņojumā. Piektā darbības poga Ceturtā darbības poga Trešā darbības poga Otrā darbības poga Pirmā darbības poga - Apgriezt video attēlu, kuru rāda paziņojumā, no 16:9 uz 1:1 proporciju (iespējams, attēls būs izstiepts) - Apgriezt video attēlu uz 1:1 proporciju - Rādīt opciju atskaņot video ar Kodi mediju centru - Rādīt \"Atskaņot ar Kodi\" opciju - Uzstādīt trūkstošo Kore lietotni? - Atskaņot ar Kodi - Tikai dažas ierīcas var atskaņot 2K/4K videoklipus + Apgriež paziņojumā redzamo video sīkattēlu no 16:9 uz 1:1 malu attiecību (iespējams, attēls būs izstiepts) + Apgriezt video sīkattēlu uz 1:1 malu attiecību + Rādīt opciju atskaņot video Kodi mediju centrā + Rādīt \"Atskaņot Kodi\" opciju + Uzstādīt trūkstošo Kore, tālvadības pults, lietotni? + Atskaņot Kodi + Ne visas ierīcas var atskaņot 2K/4K izšķirtspējas video Rādīt augstākas izšķirtspējas Noklusējuma izšķirtspēja - Izvēlieties lejupielādes mapi priekš audio failiem - Lejupielādētie audio faili tiek glabāti šeit + Atlasīt lejupielādes mapi, kur glabāt audio datnes + Lejupielādētās audio datnes tiek glabātas šeit Audio lejupielādes mape - Izvēlaties lejupielādes mapi priekš video failiem + Atlasīt lejupielādes mapi, kur glabāt video datnes Lejupielādētās video datnes tiek glabātas šeit Video lejupielādes mape Pievienot - Klausīties fonā + Klausīt fonā Atlasiet cilni Saglabātie saraksti Abonementi Rādīt informāciju Abonementu nevarēja atjaunināt - Nevarēja mainīt abonementu + Abonementu nevarēja mainīt Atcelts kanāla abonements Atcelt abonementu Abonēts Abonēt Izmantot ārējo audio atskaņotāju - Noņem skaņu dažās izšķirtspējās + Dažās izšķirtspējās nav pieejami skaņas celiņi Izmantot ārējo video atskaņotāju Kopīgot ar Tiek rādīti %s rezultāti - Vai jūs domājāt \"%1$s\"\? + Varbūt jūs gribējāt meklēt \"%1$s\"? Iestatījumi Meklēt Lejupielādēt video datni @@ -613,9 +601,9 @@ Izslēgt multivides tuneļošanu Izslēdziet multivides tuneļošanu, ja jums video atskaņošanas laikā parādās melns ekrāns vai aizķeršanās. Ieslēgt teksta atlasīšanu video aprakstā - Lejupielādes mape vēl nav iestatīta, izvēlieties noklusējuma lejupielādes mapi + Lejupielādes mape vēl nav iestatīta, atlasiet noklusējuma lejupielādes mapi tagad Pavelciet atlasīto elementu pa kreisi vai labi, lai to aizvāktu - Lokālie meklēšanas ieteikumi + Lokālos meklēšanas ieteikumus Augstas kvalitātes (lielāks) Pārbaudīt atjauninājumus Pašrocīgi pārbaudīt jaunas versijas pieejamību @@ -635,7 +623,7 @@ Privātums Sarakstā neiekļauts Uzņēmums - Servera meklēšanas ieteikumi + Servera meklēšanas ieteikumus Atzīmēt kā noskatītu Apstrādā... Var aizņemt kādu laiku @@ -666,7 +654,7 @@ Kļūdas ziņojuma paziņojums Atskaņošanas ielādes intervāla lielums NewPipe radās kļūdu, pieskarieties, lai ziņotu - Kreisā žesta darbība + Kreisās puses žesta darbība Neizdevās kopēt starpliktuvē Noņemt pastāvīgo sīktēlu Pārbaudīt, vai nav jaunas tiešraides @@ -678,20 +666,20 @@ Izveidot kļūdas paziņojumu Jebkurš tīkls Jums ir jaunākā NewPipe versija - Noderīgi, piemēram, lietojot austiņas ar bojātām pogām - Atskaņos skaņu celiņu ar audio aprakstiem vājredzīgajiem, ja tāds ir pieejams - Ignorēt ierīces multimēdiju pogas + Noder, piemēram, kad lietojiet austiņas ar bojātām pogām + Atskaņos skaņas celiņu ar audio aprakstiem vājredzīgajiem, ja tāds ir pieejams + Ignorēt pieslēgtās ierīces multimēdiju pogas Izdzēst visus lejupielādētos failus\? Jaunumi kanālā Dot priekšroku oriģinālajai skaņai - Atskaņos oriģinālo skaņu celiņu neatkarīgi no valodas + Atskaņos oriģinālo skaņas celiņu neatkarīgi no iestatītās valodas Dot priekšroku skaņu celiņam ar audio aprakstu - Izvēlēties žestu kreisajai atskaņotāja ekrāna pusei - Izvēlēties žestu labajai atskaņotāja ekrāna pusei - Labējā žesta darbība - Spilgtums - Skaļums - Nekā + Atlasiet žestu atskaņotāja ekrāna kreisajai pusei + Atlasiet žestu atskaņotāja ekrāna labajai pusei + Labās puses žesta darbība + Regulēt spilgtumu + Regulēt skaļumu + Darīt neko Abonementus var ievietot vai izgūt, izmantojot 3-punktoto izvēlni augšējā labajā ekrāna stūrī Ja Jums rodas problēmas ar lietotni, noteikti apskatiet šīs atbildes bieži uzdotiem jautājumiem! Skatīt tīkla vietnē @@ -706,13 +694,13 @@ Vai vēlaties dzēst visus tiešraižu dublikātus šajā sarakstā\? Rādīt/slēpt tiešraides Ātrais režīms - Paziņot par jaunām tiešraidēm no abonementiem + Informē par jaunām abonementu tiešraidēm Procenti Pustonis Paziņojumi par jaunām tiešraidēm Pārbaužu biežums Galvenās cilnes atlasītāja pārvietošana uz apakšu - Rediģējiet katru turpmāk norādīto paziņojuma darbību, pieskaroties tai. Pirmās trīs darbības (atskaņošana/pauze, iepriekšējais un nākamais) ir iestatītas sistēmā, un tās nevar pielāgot. + Rediģējiet katru zemāk redzamo paziņojuma darbību, pieskaroties tai. Pirmās trīs darbības (atskaņot/pauze, iepriekšējais un nākamais) ir sistēmas iestatītas, un tās nevar pielāgot. Mainīt progresīvā satura ielādes intervāla lielumu (pašlaik %s). Mazāka vērtība var paātrināt to sākotnējo ielādi @@ -726,12 +714,12 @@ Par Sīkattēli Kārtot - NewPipe var pati automātiski pārbaudīt jaunas versijas pieejamību laiku pa laikam un informēt jūs, kad tā ir pieejama.\nVai jūs tiešām gribiet ieslēgt šo funkciju? + NewPipe pati var automātiski pārbaudīt jaunas versijas pieejamību laiku pa laikam un informēt jūs, kad tā ir pieejama.\nVai jūs tiešām gribiet ieslēgt šo funkciju? Netika atrasts atbilstošs failu pārvaldnieks šai darbībai. \nLūdzu instalējiet failu pārvaldnieku vai pamēģiniet atspējot \'%s\' lejuplādēšanas iestatījumos oriģinālais Nepieciešams tīkla savienojums - Atiestatīt visus iestatījumus uz to sākotnējām vērtībām + Atiestata visus iestatījumus uz to sākotnējām vērtībām Atiestatīt iestatījumus Visu iestatījumu atiestatošana atmetīs visus jūsu izvēlētos iestatījumus un restartēs aplikāciju. \n @@ -760,7 +748,7 @@ Rādīt kļūdas paziņojumu Piegādāt kanālu cilnes Cilnes, kuras piegādāt, atjaunojot jauninājumus. Šai opcijai nav nekādas iedarbības, ja kanāls tiek atjaunots ātrajā režīmā. - Multivides tuneļošana tika atspēkota pēc noklusējuma tādēļ, ka ir zināms, ka jūsu ierīces modelis to neatbalsta. + Multivides tunelēšana tika atspējota pēc noklusējuma tādēļ, ka ir zināms, ka jūsu ierīces modelis to neatbalsta. Izvēlēties kvalitāti ārējiem atskaņotājiem ExoPlayer iestatījumi Kanālu cilnes @@ -771,8 +759,8 @@ Apakškanālu avatāri Augšuplādētāju avatāri Ilgums - Attīt - Patīt + Attīt - tīt atpakaļ + Tīt uz priekšu Izvēlēties attēlu kvalitāti un vai vispār ielādēt attēlus, lai samazinātu datu un atmiņas lietojumu. Izmaiņas iztīra iekšējās atmiņas un diska attēlu kešatmiņu — %s %s atbildes @@ -838,5 +826,14 @@ “Ļaut rādīt virs citām lietotnēm” Meklēt %1$s Meklēt %1$s (%2$s) - SoundCloud Top 50 lapa noņemta + SoundCloud Top 50 lapa likvidēta + Vēl nav izveidota neviena abonementu grupa + Konts slēgts\n\n%1$s norāda, ka iemesls kādēļ: %2$s + Atskaņošanas laikā no servera saņemta HTTP 403 kļūda, ko, iespējams, izraisīja straumēšanas URL derīguma beigu termiņš vai IP aizliegums + Atskaņošanas laikā no servera saņemta HTTP %1$s kļūda + Atskaņošanas laikā no servera saņemta HTTP 403 kļūda, ko, iespējams, izraisīja IP aizliegums vai straumēšanas URL atšifrēšanas (deobfuskācijas) problēmas + 2025. gada augustā Google paziņoja, ka, sākot ar 2026. gada septembri, lai uzstādītu lietotnes, būs nepieciešama izstrādātāja verifikācija visām Android lietotnēm sertificētajās ierīcēs, tostarp arī tām, kuras uzstādītas ārpus Play veikala. Tā kā NewPipe izstrādātāji nepiekrīt un negrib pieņemt šo prasību, pēc šī datuma NewPipe vairs nedarbosies sertificētajās Android ierīcēs. + Detalizētāka informācija + Risinājums + SoundCloud likvidēja oriģinālos Top 50 topus. Atbilstošā cilne noņemta no jūsu galvenās lapas. diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index f14d2e40208..8bee327f302 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -144,7 +144,7 @@ Eliminar ficheiros descarregados Idioma da aplicação Utilizadores - Os vídeos que tenham sido vistos antes e depois de serem adicionados à lista de reprodução serão removidos. \nTem a certeza? Esta ação não pode ser revertida! + Os vídeos que tenham sido vistos antes e após serem adicionados à lista de reprodução serão removidos. \nTem a certeza? %s a ver %s a ver @@ -861,4 +861,7 @@ Este conteúdo não está disponível para o país de conteúdo atualmente selecionado.\n\nAltere a sua seleção de \"Configurações > Conteúdo > País predefinido de conteúdo\". Erro HTTP 403 recebido do servidor durante a reprodução, provavelmente causado pela URL de streaming expirado ou IP banido Erro HTTP 403 recebido do servidor durante a reprodução, provavelmente causado por um bloqueio de IP ou problemas de desofuscação da URL de streaming + Em agosto de 2025, o Google anunciou que, a partir de setembro de 2026, a instalação de apps exigirá a verificação do programador para todas as apps Android em dispositivos certificados, incluindo aqueles instalados fora da Play Store. Como os programadores do NewPipe não concordam com este requisito, o NewPipe já não funcionará em dispositivos Android certificados após essa data. + Pormenores + Solução diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 8d2d369e38a..a8d6ff26a82 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -517,7 +517,7 @@ Este vídeo está restringido a adultos. \n \nPara o poder ver, tem que ativar \"%1$s\" nas definições. - Os vídeos que tenham sido vistos antes e depois de serem adicionados à lista de reprodução serão removidos. \nTem a certeza? Esta ação não pode ser revertida! + Os vídeos que tenham sido vistos antes e após serem adicionados à lista de reprodução serão removidos. \nTem a certeza? Sim e também os vídeos parcialmente vistos Remover transmissões vistas? Remover visualizados @@ -861,7 +861,7 @@ Este conteúdo não está disponível para o país de conteúdo atualmente selecionado.\n\nAltere a sua seleção de \"Configurações > Conteúdo > País predefinido de conteúdo\". Erro HTTP 403 recebido do servidor durante a reprodução, provavelmente causado pela URL de streaming expirado ou IP banido Erro HTTP 403 recebido do servidor durante a reprodução, provavelmente causado por um bloqueio de IP ou problemas de desofuscação da URL de streaming - O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android certificados exigirão que os desenvolvedores forneçam seus dados pessoais de identidade diretamente ao Google. Como os desenvolvedores deste aplicativo não concordam com esse requisito, o aplicativo deixará de funcionar em dispositivos Android certificados após essa data. + Em agosto de 2025, o Google anunciou que, a partir de setembro de 2026, a instalação de apps exigirá a verificação do programador para todas as apps Android em dispositivos certificados, incluindo aqueles instalados fora da Play Store. Como os programadores do NewPipe não concordam com este requisito, o NewPipe já não funcionará em dispositivos Android certificados após essa data. Detalhes Solução diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f32b69d746d..5bacb22ef7c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -633,7 +633,7 @@ Ошибка загрузки подписки Открыть веб-сайт Аккаунт отключён - Начиная с Android 10 поддерживается только «Storage Access Framework» + Начиная с Android 10, поддерживается только \"Storage Access Framework\" Спрашивать, куда сохранять каждую загрузку Папка для загрузки ещё не выбрана, укажите папку для загрузки сейчас Отключить @@ -866,7 +866,7 @@ Во время воспроизведения получена ошибка HTTP 403 от сервера, вероятно, вызванная блокировкой IP-адреса или проблемами деобфускации URL-адреса потоковой передачи %1$s отказался предоставить данные, запросив логин для подтверждения, что запросчик не бот.\n\nВозможно, ваш IP-адрес временно заблокирован %1$s. Вы можете подождать некоторое время или переключиться на другой IP-адрес (например, включив/выключив VPN или переключившись с Wi-Fi на мобильный интернет). Этот контент недоступен для выбранной страны контента.\n\nИзмените свой выбор в разделе «Настройки > Контент > Страна контента по умолчанию». - Google объявила, что начиная с 2026/2027 года все приложения на сертифицированных устройствах Android будут требовать от разработчиков предоставления своих личных данных для идентификации напрямую Google. Так как разработчики этого приложения не согласны с этим требованием, приложение перестанет работать на сертифицированных устройствах Android после этого времени. + В августе 2025 года, Google анонсировала, что с сентября 2026 года, установка приложений потребует верификации разработчика для всех Android приложений на сертифицированных устройствах, включая те, которые были установлены не через Play Store. Поскольку разработчики NewPipe не согласны с этим требованием, NewPipe перестанет работать на сертифицированных Android устройствах после этой даты. Подробнее Решение diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 6b5728d7d47..f3839749754 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -862,7 +862,7 @@ Chyba HTTP 403 prijatá zo servera počas prehrávania, pravdepodobne spôsobená zákazom IP adresy alebo problémami s deobfuskáciou streamingovej URL adresy %1$s odmietol poskytnúť údaje, žiada o prihlásenie na potvrdenie, že žiadateľ nie je bot.\n\nVaša IP adresa mohla byť dočasne zakázaná %1$s, môžete nejaký čas počkať alebo prejsť na inú IP adresu (napríklad zapnutím/vypnutím VPN alebo prepnutím z WiFi na mobilné dáta). Tento obsah nie je dostupný pre aktuálne zvolenú krajinu obsahu.\n\nZmeňte výber v ponuke \"Nastavenia > Obsah > Predvolená krajina obsahu\". - Google oznámil, že od roku 2026/2027 budú všetky aplikácie na certifikovaných zariadeniach s Androidom vyžadovať, aby vývojári odovzdali svoje osobné identifikačné údaje priamo Googlu. Keďže vývojári tejto aplikácie s touto požiadavkou nesúhlasia, aplikácia po tomto termíne na certifikovaných zariadeniach s Androidom prestane fungovať. + V auguste 2025 spoločnosť Google oznámila, že od septembra 2026 bude inštalácia aplikácií vyžadovať overenie vývojára pre všetky aplikácie Android na certifikovaných zariadeniach, vrátane tých, ktoré sú inštalované mimo obchodu Play Store. Keďže vývojári NewPipe s touto požiadavkou nesúhlasia, NewPipe po tomto termíne nebude na certifikovaných zariadeniach Android fungovať. Podrobnosti Riešenie diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a223548fe66..84590e255f3 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -847,7 +847,7 @@ Oynatırken sunucudan HTTP 403 hatası alındı, IP engeli ya da akış URL’si çözme sorunları olabilir %1$s veri sağlamayı geri çevirdi, istekçinin robot olmadığını doğrulaması için oturum açmasını istiyor.\n\n%1$s, IP adresinizi geçici olarak engellemiş olabilir, bir süre bekleyebilir ya da başka IP\'ye geçebilirsiniz (örneğin VPN\'i açıp/kapatarak ya da WiFi\'den mobil veriye geçerek). Bu içerik şu anda seçili içerik ülkesinde kullanılamıyor.\n\nSeçiminizi \"Ayarlar > İçerik > Öntanımlı içerik ülkesi\"nden değiştirin. - Google, 2026/2027 yılından itibaren sertifikalı Android cihazlardaki tüm uygulamaların, geliştiricilerin kişisel kimlik bilgilerini doğrudan Google’a göndermesini gerektireceğini duyurdu. Bu uygulamanın geliştiricileri bu gerekliliği kabul etmediğinden, uygulama bu tarihten sonra sertifikalı Android cihazlarda çalışmayacaktır. + Google, Eylül 2026\'dan itibaren sertifikalı Android cihazlardaki Play Store harici olmak üzere tüm uygulamaların, geliştiricilerin kişisel kimlik bilgilerini doğrudan Google’a göndermesini gerektireceğini duyurdu. NewPipe geliştiricileri bu zorunluluğu kabul etmediğinden, NewPipe bu tarihten sonra sertifikalı Android cihazlarda çalışmayacaktır. Detaylar Çözüm diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index c6dcdbdc1e7..c3595ebece1 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -491,7 +491,7 @@ Звичайний режим Швидкий режим Доступно для деяких служб, швидке, але може повертати не весь вміст каналу і часто неповну інформацію (тривалість, тип елемента, статус трансляції) - Оновлення з RSS, коли воно є + Отримувати з виділеної стрічки, коли доступно Оновлювати постійно Період актуальності підписок після поновлення — %s Поріг оновлення підписок @@ -510,8 +510,8 @@ Останнє оновлення: %s Через обмеження ExoPlayer точність перемотування становить %d секунд Так, а також частково переглянуті відео - Відео, які Ви переглядали до та після додавання в добірку, вилучатимуться. \nВи впевнені? Це незворотна дія! - Видалити переглянуті відео? + Потоки, які були переглянуті до та після додавання в добірку, будуть видалені. \nВи впевнені? + Видалити переглянуті потоки? Видалити переглянуті Створено автоматично (автора не знайдено) ∞ вiдео @@ -604,7 +604,7 @@ Обрізати мініатюру відео показувану в сповіщенні з пропорцій 16: 9 до 1:1 Вимкнення тунелювання медіаданих за наявності чорного екрана або гальмування під час відтворення відео. Вимкнути тунелювання медіа - «Фреймворк доступу до сховища» (SAF) підтримується лише починаючи з Android 10 + Починаючи з Android 10, підтримується тільки \"Storage Access Framework\" Вас питатиме, куди зберігати кожне завантаження Не вказано теки завантаження, оберіть типову теку завантаження зараз Відкрити вебсайт @@ -866,4 +866,7 @@ Під час відтворення від сервера отримано помилку HTTP 403, ймовірно, через заборону IP-адреси або проблеми з деобфускацією URL-адреси потокової передачі %1$s відмовився надати дані, запитуючи логін для підтвердження того, що запитувач не є ботом.\n\nВаша IP-адреса могла бути тимчасово заблокована %1$s. Ви можете почекати деякий час або перейти на іншу IP-адресу (наприклад, увімкнувши/вимкнувши VPN або переключившись з Wi-Fi на мобільні дані). Цей контент недоступний для вибраної країни контенту.\n\nЗмініть свій вибір у розділі \"Налаштування > Контент > Країна контенту за замовчуванням\". + У серпні 2025 року, Google анонсувала, що з вересня 2026 року, для встановлення застосунків буде потрібна верифікація розробника для всіх Android застосунків на сертифікованих пристроях, включаючи ті, що були встановлені не через Play Store. Оскільки розробники NewPipe не згодні з цією вимогою, NewPipe перестане працювати на сертифікованих Android пристроях після цієї дати. + Детальніше + Вирішення diff --git a/fastlane/metadata/android/cs/changelogs/1009.txt b/fastlane/metadata/android/cs/changelogs/1009.txt new file mode 100644 index 00000000000..7c430938787 --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/1009.txt @@ -0,0 +1,14 @@ +Důležité +Přidány informace a výzva k akci v rámci kampaně Keep Android Open: https://www.keepandroidopen.org/ + +Vylepšeno +[Feed] Změna pořadí aktualizace starších odběrů +Zrušeno kupení stránek s komentáři +Nepředávání události kliknutí podkladovým zobrazením při kliknutí na stránku s podrobnostmi o videu + +Opraveno +Rozložení záhlaví odpovědí na komentáře bez avataru +Několik oprav rozhraní souvisejících s přehrávačem +[SoundCloud] Oprava streamů s dlouhými ID + +a další opravy a vylepšení! diff --git a/fastlane/metadata/android/de/changelogs/1009.txt b/fastlane/metadata/android/de/changelogs/1009.txt new file mode 100644 index 00000000000..31d65bc86c9 --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/1009.txt @@ -0,0 +1,14 @@ +Wichtig +Informationen zur Kampagne „Keep Android Open“: https://keepandroidopen.org/de/ + +Verbessert +[Feed] Die Reihenfolge, in der veraltete Abos aktualisiert werden +Kommentarseiten nicht stapeln +Beim Klicken auf die Videodetailseite keine Klickereignisse an darunterliegende Ansichten weiterleiten + +Behoben +Layout der Kommentarantworten ohne Profilbild +Mehrere Player-bezogene Korrekturen der Bedienoberfläche +[SoundCloud] Streams mit langen IDs + +und weitere Korrekturen und Verbesserungen! diff --git a/fastlane/metadata/android/de/changelogs/999.txt b/fastlane/metadata/android/de/changelogs/999.txt index 059b4e0811e..770017d0682 100644 --- a/fastlane/metadata/android/de/changelogs/999.txt +++ b/fastlane/metadata/android/de/changelogs/999.txt @@ -7,6 +7,6 @@ Verbessert • [Bandcamp] Anzeige zusätzlicher Informationen im Radio-Kiosk Behoben -• [YouTube] Behebung gelegentlicher HTTP-403-Fehler am Anfang oder in der Mitte von Videos -• [YouTube] Extrahieren von Avataren und Banner aus mehr Kanal-Header-Typen -• [Bandcamp] Verschiedene Fehler behoben und HTTPS wird stets verwendet +• [YouTube] Gelegentliche HTTP-403-Fehler am Anfang oder in der Mitte von Videos +• [YouTube] Extrahieren von Profilbildern und Banner aus mehr Kanal-Header-Typen +• [Bandcamp] Verschiedene Fehler behoben und HTTPS wird immer verwendet diff --git a/fastlane/metadata/android/fr/changelogs/1009.txt b/fastlane/metadata/android/fr/changelogs/1009.txt new file mode 100644 index 00000000000..468ab4cec1d --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/1009.txt @@ -0,0 +1,15 @@ +Important +Informations et appel à l'action pour la campagne Keep Android Open ajoutés : https://www.keepandroidopen.org/ + +Améliorations +[Flux] Ordre de mise à jour des abonnements obsolètes aléatoire +Pages de commentaires non empilées +Événements de clic désactivés sur la page de détails d'une vidéo + + +Corrections +Affichage de l'en-tête des réponses aux commentaires sans image d'avatar +Corrections d'interface utilisateur pour plusieurs lecteurs +[SoundCloud] Correction des flux avec des identifiants longs + +Et bien d'autres corrections et améliorations ! diff --git a/fastlane/metadata/android/ja/changelogs/1001.txt b/fastlane/metadata/android/ja/changelogs/1001.txt new file mode 100644 index 00000000000..4f89e86bcda --- /dev/null +++ b/fastlane/metadata/android/ja/changelogs/1001.txt @@ -0,0 +1,6 @@ +改善策 +・Android 13以降ではプレーヤーの通知設定の変更を常に許可してください + +修正済 +・データベース/登録チャンネルのエクスポートで既存のファイルが切り捨てられず、エクスポートが破損する可能性がある問題を修正 +・タイムスタンプをクリックするとプレーヤーが最初から再開される問題を修正 diff --git a/fastlane/metadata/android/ja/changelogs/1002.txt b/fastlane/metadata/android/ja/changelogs/1002.txt new file mode 100644 index 00000000000..78cf732a692 --- /dev/null +++ b/fastlane/metadata/android/ja/changelogs/1002.txt @@ -0,0 +1,4 @@ +YouTubeでストリームが再生されない問題を修正しました。 + +このリリースでは、YouTubeの動画の詳細が読み込まれないという最も深刻なエラーのみを修正しています。 +他にも問題があることを認識しており、近日中に別のリリースで解決する予定です。 diff --git a/fastlane/metadata/android/lv/changelogs/1001.txt b/fastlane/metadata/android/lv/changelogs/1001.txt index 4525874fdcf..39fab6e790e 100644 --- a/fastlane/metadata/android/lv/changelogs/1001.txt +++ b/fastlane/metadata/android/lv/changelogs/1001.txt @@ -1,6 +1,6 @@ Uzlabojumi -• Vienmēr atļauj nomainīt atskaņotāja paziņojumu iestatījumus uz ierīcēm ar Android 13+ +• Vienmēr atļauj nomainīt atskaņotāja paziņojumu iestatījumus uz Android 13+ ierīcēm Salabots -• Datubāzes/abonementu izgūšana vairs neapcērp iepriekš eksistējošo datni, kas, iespējams, izraisīja bojātu datni +• Datubāzes/abonementu izgūšana vairs neapcērp iepriekš eksistējošo datni, kas, iespējams, radīja bojātu datni • Novērsta atskaņotāja atsākšana no paša sākuma, kad noklikšķina uz laika zīmoga diff --git a/fastlane/metadata/android/lv/changelogs/64.txt b/fastlane/metadata/android/lv/changelogs/64.txt index 9a362aa95a3..fc5d297642c 100644 --- a/fastlane/metadata/android/lv/changelogs/64.txt +++ b/fastlane/metadata/android/lv/changelogs/64.txt @@ -5,4 +5,4 @@ - pievienots (darbojošs) multimediju sesijas atbalsts #1433 ### Salabots -- Salabota lietotnes nobrukšana, kad atvēra Lejupielādes (labojums pieejams relīzes laidienos) #1441 +- Salabota lietotnes nobrukšana, kad atvēra Lejupielādes (labojums pieejams izlaiduma laidienos) #1441 diff --git a/fastlane/metadata/android/lv/changelogs/770.txt b/fastlane/metadata/android/lv/changelogs/770.txt index a46cda84a83..b4b97028058 100644 --- a/fastlane/metadata/android/lv/changelogs/770.txt +++ b/fastlane/metadata/android/lv/changelogs/770.txt @@ -1,4 +1,4 @@ Izmaiņas 0.17.2 versijā Salabots -• Novērsta problēma, ka videoklips bija nepieejams +• Novērsta problēma, ka video bija nepieejams diff --git a/fastlane/metadata/android/lv/changelogs/850.txt b/fastlane/metadata/android/lv/changelogs/850.txt index 20c79661b88..cc8e048ac76 100644 --- a/fastlane/metadata/android/lv/changelogs/850.txt +++ b/fastlane/metadata/android/lv/changelogs/850.txt @@ -1 +1 @@ -Šī versijas relīze iekļauj atjaunināto YouTube vietnes versiju. Vecās vietnes versijas atbalsts tiks pārtraukta martā, un tāpēc jums ir nepieciešams atjaunināt NewPipe. +Šis versijas izlaidums iekļauj atjaunināto YouTube vietnes versiju. Vecās vietnes versijas pieejamība tiks pārtraukta martā, un tāpēc jums ir nepieciešams atjaunināt NewPipe. diff --git a/fastlane/metadata/android/lv/changelogs/910.txt b/fastlane/metadata/android/lv/changelogs/910.txt index 8e7b9d2273a..06eecc81ac7 100644 --- a/fastlane/metadata/android/lv/changelogs/910.txt +++ b/fastlane/metadata/android/lv/changelogs/910.txt @@ -1 +1 @@ -Salabota datu bāzes migrācija, kas retos gadījumos neļāva NewPipe palaisties. +Salabota datubāzes migrācija, kas retos gadījumos neļāva NewPipe palaisties. diff --git a/fastlane/metadata/android/lv/changelogs/950.txt b/fastlane/metadata/android/lv/changelogs/950.txt index f9a82fe2028..699bd8a4632 100644 --- a/fastlane/metadata/android/lv/changelogs/950.txt +++ b/fastlane/metadata/android/lv/changelogs/950.txt @@ -1,4 +1,4 @@ -Šajā versijā ir veikti tikai trīs nelieli labojumi: +Šajā versijā veikti tikai trīs nelieli labojumi: • Salabota piekļuve krātuvei Android 10+ operētājsistēmās • Salabota kiosku atvēršana -• Salabota ilguma noteikšana ilgiem videoklipiem +• Salabota ilguma noteikšana ilgiem video diff --git a/fastlane/metadata/android/lv/changelogs/956.txt b/fastlane/metadata/android/lv/changelogs/956.txt new file mode 100644 index 00000000000..eafb4c727d4 --- /dev/null +++ b/fastlane/metadata/android/lv/changelogs/956.txt @@ -0,0 +1 @@ +[YouTube] Novērsta lietotnes avarēšana pie jebkuras video ielādes diff --git a/fastlane/metadata/android/lv/changelogs/982.txt b/fastlane/metadata/android/lv/changelogs/982.txt new file mode 100644 index 00000000000..a775fd35b71 --- /dev/null +++ b/fastlane/metadata/android/lv/changelogs/982.txt @@ -0,0 +1 @@ +Novērsta problēma, kuras dēļ YouTube nevarēja atskaņot nevienu straumi. diff --git a/fastlane/metadata/android/lv/changelogs/985.txt b/fastlane/metadata/android/lv/changelogs/985.txt new file mode 100644 index 00000000000..0ad24abc45f --- /dev/null +++ b/fastlane/metadata/android/lv/changelogs/985.txt @@ -0,0 +1 @@ +Novērsta problēma, kuras dēļ YouTube nevarēja atskaņot nevienu straumi diff --git a/fastlane/metadata/android/lv/changelogs/989.txt b/fastlane/metadata/android/lv/changelogs/989.txt index f680eced4f0..c131df9e4e6 100644 --- a/fastlane/metadata/android/lv/changelogs/989.txt +++ b/fastlane/metadata/android/lv/changelogs/989.txt @@ -1,3 +1,3 @@ -• [YouTube] Novērsta bezgalīgā video ielāde pie jebkuru video atskaņošanu -• [YouTube] Novērsta dažu videoklipu lēnā ielāde (straumēšanas ierobežošanas problēma) +• [YouTube] Novērsta bezgalīgi ilgā video ielāde pie jebkuru video atskaņošanu +• [YouTube] Novērsta dažu video lēnā ielāde (straumēšanas ierobežošanas problēma) • Atjaunināta jsoup bibliotēka uz 1.15.3 versiju, kas ietver drošības labojumus diff --git a/fastlane/metadata/android/lv/changelogs/998.txt b/fastlane/metadata/android/lv/changelogs/998.txt index 79e4f31629d..f69425343e7 100644 --- a/fastlane/metadata/android/lv/changelogs/998.txt +++ b/fastlane/metadata/android/lv/changelogs/998.txt @@ -1,4 +1,4 @@ Salabota YouTube nespēja atskaņot jebkādu straumi HTTP 403 kļūdu dēļ. Nejaušas HTTP 403 kļūdas YouTube video skatīšanās laikā vēl nav novērstas. -Konkrētā problēma tiks atrisināta nākamajā labojumfailu laidienā, cik drīz vien iespējams. +Konkrētā problēma tiks atrisināta cik drīz vien iespējama nākamajā labojumfailu izlaidumā. diff --git a/fastlane/metadata/android/pl/changelogs/1009.txt b/fastlane/metadata/android/pl/changelogs/1009.txt new file mode 100644 index 00000000000..7f99742a73d --- /dev/null +++ b/fastlane/metadata/android/pl/changelogs/1009.txt @@ -0,0 +1,14 @@ +Ważne +- Dodano informację i wezwanie do działania w ramach kampanii Keep Android Open: https://www.keepandroidopen.org/ + +Ulepszone +- [Kanał] Losowa kolejność aktualizacji nieaktualnych subskrypcji +- Nienakładanie się stron komentarzy +- Nieprzekazywanie naciśnięć do przesłoniętych widoków przy naciskaniu strony szczegółów wideo + +Naprawione +- Układ nagłówka odpowiedzi na komentarze bez awatara +- Wiele poprawek UI związanych z odtwarzaczem +- [SoundCloud] Strumienie z długimi ID + +i wiele innych! diff --git a/fastlane/metadata/android/sk/changelogs/1009.txt b/fastlane/metadata/android/sk/changelogs/1009.txt new file mode 100644 index 00000000000..de262999430 --- /dev/null +++ b/fastlane/metadata/android/sk/changelogs/1009.txt @@ -0,0 +1,14 @@ +Dôležité +Pridané informácie a výzva k akcii v rámci kampane Keep Android Open: https://www.keepandroidopen.org/ + +Vylepšené +[Feed] Prehodenie poradia, v ktorom sa aktualizujú neaktuálne odbery +Nehromadenie stránok s komentármi +Pri kliknutí na stránku s podrobnosťami o videu sa neprenášajú udalosti kliknutia do podkladových zobrazení + +Opravené +Rozloženie záhlavia odpovedí na komentáre bez avataru +Viacero opráv používateľského rozhrania súvisiacich s prehrávačom +[SoundCloud] Oprava streamov s dlhými ID + +a ďalšie opravy a vylepšenia! diff --git a/fastlane/metadata/android/ta/changelogs/1000.txt b/fastlane/metadata/android/ta/changelogs/1000.txt index 43842685fa5..5377ef633d2 100644 --- a/fastlane/metadata/android/ta/changelogs/1000.txt +++ b/fastlane/metadata/android/ta/changelogs/1000.txt @@ -1,13 +1,13 @@ -மேம்படுத்தப்பட்டது - / மேலும் / குறைவான உள்ளடக்கத்தைக் காட்ட பிளேலிச்ட் விளக்கத்தைச் சொடுக்கு செய்யவும் - • [PEERTUBE] `charbisto.me` உதாரணமாக இணைப்புகளைத் தானாகவே கையாளவும் - The வரலாற்றுத் திரையில் ஒற்றை உருப்படியை மட்டுமே இயக்கத் தொடங்குங்கள் +மேம்படுத்தப்பட்டது +• அதிகமான / குறைவான உள்ளடக்கத்தைக் காட்ட, பிளேலிச்ட் விளக்கத்தை சொடுக்கு செய்யக்கூடியதாக மாற்றவும் +• [PeerTube] தானாகவே `subscribeto.me` நிகழ்வு இணைப்புகளைக் கையாளவும் +• வரலாற்றுத் திரையில் ஒற்றை உருப்படியை மட்டும் இயக்கத் தொடங்குங்கள் - சரி - RS RSS பொத்தான் தெரிவுநிலையை சரிசெய்யவும் - See gaekbar முன்னோட்ட செயலிழப்புகளை சரிசெய்யவும் - Play ஒரு சிறுபடம் இல்லாத உருப்படியைப் பிளேலிச்டிங் சரிசெய்யவும் - The பதிவிறக்க உரையாடல் தோன்றுவதற்கு முன்பு வெளியேறுவதை சரிசெய்யவும் - Tied தொடர்புடைய உருப்படிகளைச் சரிசெய்யவும் பட்டியல் enqueue பாப்அப் - Plale பிளேலிச்ட் உரையாடலில் கூட்டு இல் ஆர்டரை சரிசெய்யவும் - Plale பிளேலிச்ட் புத்தகக்குறி உருப்படி தளவமைப்பை சரிசெய்யவும் +சரி செய்யப்பட்டது +• RSS பொத்தான் தெரிவுநிலையை சரிசெய்யவும் +• சீக்பார் முன்னோட்ட செயலிழப்புகளை சரிசெய்யவும் +• சிறுபடம் இல்லாத உருப்படியை பிளேலிச்ட் செய்வதை சரிசெய்யவும் +• பதிவிறக்க உரையாடல் தோன்றும் முன் அதிலிருந்து வெளியேறுவதைச் சரிசெய்யவும் +• தொடர்புடைய உருப்படிகளின் பட்டியல் என்கியூ பாப்அப்பை சரிசெய்யவும் +• பிளேலிச்ட் உரையாடலில் சேர்க்கும் வரிசையை சரிசெய்யவும் +• பிளேலிச்ட் புத்தகக்குறி உருப்படி தளவமைப்பைச் சரிசெய்யவும் diff --git a/fastlane/metadata/android/ta/changelogs/1005.txt b/fastlane/metadata/android/ta/changelogs/1005.txt new file mode 100644 index 00000000000..2d3b17a1938 --- /dev/null +++ b/fastlane/metadata/android/ta/changelogs/1005.txt @@ -0,0 +1,17 @@ +புதியது +• ஆண்ட்ராய்டு Autoக்கான ஆதரவைச் சேர்க்கவும் +• ஊட்ட குழுக்களை முதன்மையான திரை தாவல்களாக அமைக்க அனுமதிக்கவும் +• [YouTube] தற்காலிக பிளேலிச்ட்டாகப் பகிரவும் +• [SoundCloud] சேனல் தாவலை விரும்புகிறது + +மேம்படுத்தப்பட்டது +• சிறந்த தேடல் பட்டி குறிப்புகள் +• பதிவிறக்கங்களில் பதிவிறக்க தேதியைக் காட்டு +• ஒவ்வொரு ஆப்ச் மொழிக்கும் ஆண்ட்ராய்டு 13ஐப் பயன்படுத்தவும் + +சரி செய்யப்பட்டது +• உடைந்த உரை வண்ணங்களை இருண்ட பயன்முறையில் சரிசெய்யவும் +• [YouTube] 100 உருப்படிகளுக்கு மேல் ஏற்றப்படாமல் இருக்கும் பிளேலிச்ட்களை சரிசெய்யவும் +• [YouTube] விடுபட்ட பரிந்துரைக்கப்பட்ட வீடியோக்களை சரிசெய்யவும் +• வரலாறு பட்டியல் காட்சியில் சிதைவுகளைச் சரிசெய்யவும் +• கருத்து பதில்களில் நேர முத்திரைகளை சரிசெய்யவும் diff --git a/fastlane/metadata/android/ta/changelogs/1006.txt b/fastlane/metadata/android/ta/changelogs/1006.txt new file mode 100644 index 00000000000..98d1b4756d6 --- /dev/null +++ b/fastlane/metadata/android/ta/changelogs/1006.txt @@ -0,0 +1,16 @@ +# மேம்படுத்தப்பட்டது +நேர முத்திரைகளைக் சொடுக்கு செய்யும் போது தற்போதைய பிளேயரை வைத்திருங்கள் +முடிந்தால், நிலுவையிலுள்ள பதிவிறக்கப் பணிகளை மீட்டெடுக்க முயற்சிக்கவும் +கோப்பை நீக்காமல் பதிவிறக்கத்தை நீக்க விருப்பத்தைச் சேர்க்கவும் +மேலடுக்கு அனுமதி: Android > R க்கான விளக்க உரையாடலைக் காண்பி +உதவி on.soundcloud இணைப்பு திறப்பு +நிறைய சிறிய மேம்பாடுகள் மற்றும் மேம்படுத்தல்கள் + +# சரி செய்யப்பட்டது +7க்குக் கீழே உள்ள ஆண்ட்ராய்டு பதிப்புகளுக்கான குறுகிய எண்ணிக்கை வடிவமைப்பைச் சரிசெய்யவும் +பேய் அறிவிப்புகளை சரிசெய்யவும் +SRT வசனக் கோப்புகளுக்கான திருத்தங்கள் +நிலையான டன் விபத்துக்கள் + +#வளர்ச்சி +உள் குறியீடு நவீனமயமாக்கல் diff --git a/fastlane/metadata/android/ta/changelogs/1008.txt b/fastlane/metadata/android/ta/changelogs/1008.txt new file mode 100644 index 00000000000..e25981458f8 --- /dev/null +++ b/fastlane/metadata/android/ta/changelogs/1008.txt @@ -0,0 +1,4 @@ +∙ கடைசி பிளேபேக் நிலையில் நிலையான ரெச்யூமிங் ச்ட்ரீம்கள் +∙ [YouTube] மேலும் சேனல் முகவரி வடிவங்களுக்கான உதவி சேர்க்கப்பட்டது +∙ [YouTube] மேலும் வீடியோ metainfo வடிவங்களுக்கான உதவி சேர்க்கப்பட்டது +∙ புதுப்பிக்கப்பட்ட மொழிபெயர்ப்புகள் diff --git a/fastlane/metadata/android/ta/changelogs/1009.txt b/fastlane/metadata/android/ta/changelogs/1009.txt new file mode 100644 index 00000000000..da35a071b5f --- /dev/null +++ b/fastlane/metadata/android/ta/changelogs/1009.txt @@ -0,0 +1,14 @@ +முக்கியமானது +Keep ஆண்ட்ராய்டு திற பிரச்சாரத்திற்கான செய்தி மற்றும் நடவடிக்கைக்கான அழைப்பு சேர்க்கப்பட்டது: https://www.keepandroidopen.org/ + +மேம்படுத்தப்பட்டது +[Feed] ஆர்டர் காலாவதியான சந்தாக்கள் புதுப்பிக்கப்பட்டதை மாற்றவும் +கருத்துப் பக்கங்களை அடுக்க வேண்டாம் +வீடியோ விவரம் பக்கத்தில் சொடுக்கு செய்யும் போது, சொடுக்கு நிகழ்வுகளை அடிப்படை பார்வைகளுக்கு அனுப்ப வேண்டாம் + +சரி செய்யப்பட்டது +அவதார் படம் இல்லாமல் தலைப்பு தளவமைப்பை கருத்து பதிலளிக்கிறது +பல பிளேயர் தொடர்பான இடைமுகம் திருத்தங்கள் +[SoundCloud] நீண்ட ஐடிகளுடன் ச்ட்ரீம்களை சரிசெய்யவும் + +மேலும் திருத்தங்கள் மற்றும் மேம்பாடுகள்! diff --git a/fastlane/metadata/android/ta/changelogs/65.txt b/fastlane/metadata/android/ta/changelogs/65.txt index 05fd375e6ed..ebea2e29d37 100644 --- a/fastlane/metadata/android/ta/changelogs/65.txt +++ b/fastlane/metadata/android/ta/changelogs/65.txt @@ -1,26 +1,26 @@ -### மேம்பாடுகள் +### மேம்பாடுகள் -- பர்கர்மெனு ஐகான் அனிமேஷன் முடக்கு #1486 -- பதிவிறக்கங்கள் நீக்க #1472 செயல்தவிர்க்கவும் -- பங்கு மெனுவில் விருப்பத்தைப் பதிவிறக்கவும் #1498 -- நீண்ட குழாய் மெனு # 1454 பங்கு விருப்பத்தை சேர்க்கப்பட்டது -- வெளியேறும் #1354 இல் முக்கிய வீரரைக் குறைக்கவும் -- நூலக பதிப்பு மேம்படுத்தல் மற்றும் தரவுத்தள காப்பு திருத்தம் #1510 -- ExoPlayer 2.8.2 மேம்படுத்தல் #1392 - - வேகமான வேக மாற்றத்திற்கான வெவ்வேறு படி அளவுகளை ஆதரிக்க பின்னணி வேகக் கட்டுப்பாட்டு உரையாடலை மறுவேலை செய்தது. - - பின்னணி வேக கட்டுப்பாடு மௌனங்கள் போது வேகமாக முன்னோக்கி ஒரு நிலைமாற்றி சேர்க்கப்பட்டது. இது ஆடியோபுக்குகள் மற்றும் சில இசை வகைகளுக்கு உதவியாக இருக்க வேண்டும், மேலும் உண்மையான தடையற்ற அனுபவத்தைக் கொண்டுவர முடியும் (மேலும் நிறைய மௌனங்களுடன் ஒரு பாடலை உடைக்க முடியும் =). - - மெட்டாடேட்டாவை கைமுறையாக செய்வதை விட, பிளேயரில் உள்நாட்டில் மீடியாவுடன் மெட்டாடேட்டாவை அனுப்ப அனுமதிக்க மறுசீரமைக்கப்பட்ட ஊடக மூல தீர்மானம். இப்போது எங்களிடம் மெட்டாடேட்டாவின் ஒற்றை ஆதாரம் உள்ளது மற்றும் பிளேபேக் தொடங்கும் போது நேரடியாக கிடைக்கும். - - நிலையான தொலை பிளேலிஸ்ட் மெட்டாடேட்டா பிளேலிஸ்ட் துண்டு திறக்கப்படும் போது புதிய மெட்டாடேட்டா கிடைக்கும் போது புதுப்பிக்கப்படவில்லை. - - பல்வேறு UI திருத்தங்கள்: #1383, பின்னணி பிளேயர் அறிவிப்பு கட்டுப்பாடுகள் இப்போது எப்போதும் வெள்ளை, எளிதாக ஃப்ளிங்கிங் மூலம் பாப்அப் பிளேயர் மூட எளிதாக -- மல்டிசர்வீஸிற்கான மறுசீரமைக்கப்பட்ட கட்டமைப்புடன் புதிய பிரித்தெடுத்தலைப் பயன்படுத்தவும் +- பர்கர்மெனு படவுரு அனிமேசனை முடக்கு #1486 +- பதிவிறக்கங்களின் நீக்குதலை செயல்தவிர்க்கவும் #1472 +- சேர் பட்டியல் #1498 இல் பதிவிறக்க விருப்பம் +- நீண்ட தட்டு பட்டியல் #1454 இல் பகிர்வு விருப்பம் சேர்க்கப்பட்டது +- வெளியேறும் #1354 இல் முதன்மையான வீரரைக் குறைக்கவும் +- நூலக பதிப்பு புதுப்பித்தல் மற்றும் தரவுத்தள காப்புப்பிரதி திருத்தம் #1510 +- ExoPlayer 2.8.2 மேம்படுத்தல் #1392 +- வேகமான வேக மாற்றத்திற்காக வெவ்வேறு படி அளவுகளை ஆதரிக்க, பிளேபேக் வேகக் கட்டுப்பாட்டு உரையாடலை மீண்டும் உருவாக்கியது. +- பிளேபேக் வேகக் கட்டுப்பாட்டில் நிசப்தத்தின் போது வேகமாக முன்னோக்கிச் செல்வதற்கான நிலைமாற்றம் சேர்க்கப்பட்டது. இது ஆடியோபுக்குகள் மற்றும் சில இசை வகைகளுக்கு உதவியாக இருக்க வேண்டும், மேலும் ஒரு உண்மையான தடையற்ற அனுபவத்தைக் கொண்டு வர முடியும் (மேலும் நிறைய அமைதியுடன் ஒரு பாடலை உடைக்க முடியும் =\\). +- மீடியா மூலத் தெளிவுத்திறன் மறுவடிவமைக்கப்பட்ட மீடியாவை கைமுறையாகச் செய்வதை விட, பிளேயரில் உள்ள மீடியாவுடன் சேர்த்து அனுப்ப அனுமதிக்கிறது. இப்போது எங்களிடம் மெட்டாடேட்டாவின் ஒற்றை சான்று உள்ளது மற்றும் பிளேபேக் தொடங்கும் போது நேரடியாகக் கிடைக்கும். +- பிளேலிச்ட் துண்டு திறக்கப்படும்போது புதிய மேனிலை தரவு கிடைக்கும்போது நிலையான ரிமோட் பிளேலிச்ட் மேனிலை தரவு புதுப்பிக்கப்படாது. +- பல்வேறு இடைமுகம் திருத்தங்கள்: #1383, பின்னணி பிளேயர் அறிவிப்புக் கட்டுப்பாடுகள் இப்போது எப்போதும் வெண்மையாக இருக்கும், மேல்தோன்றல் பிளேயரை ஃபிலிங் செய்வதன் மூலம் மூடுவது எளிது +- பல சேவைகளுக்கு மறுசீரமைக்கப்பட்ட கட்டமைப்புடன் புதிய பிரித்தெடுக்கும் கருவியைப் பயன்படுத்தவும் -### திருத்தங்கள் +### திருத்தங்கள் -- #1440 உடைந்த வீடியோ தகவல் தளவமைப்பு #1491 சரி -- வரலாறு திருத்தம் #1497 பார்க்க - - #1495, பயனர் பிளேலிஸ்ட்டை அணுகியவுடன் மெட்டாடேட்டாவை (சிறுபடம், தலைப்பு மற்றும் வீடியோ எண்ணிக்கை) புதுப்பிப்பதன் மூலம். - - #1475, பயனர் விவரம் துண்டு வெளிப்புற பிளேயர் ஒரு வீடியோ தொடங்கும் போது தரவுத்தளத்தில் ஒரு பார்வை பதிவு மூலம். -- பாப்அப் பயன்முறையில் க்ரீன் டைம்அவுட்டை சரிசெய்யவும். #1463 (நிலையான #640) -- முக்கிய வீடியோ பிளேயர் திருத்தம் #1509 - - [#1412] பிளேயர் செயல்பாடு பின்னணியில் இருக்கும்போது புதிய நோக்கம் பெறும்போது பிளேயர் NPE ஐ ஏற்படுத்தும் நிலையான மீண்டும் பயன்முறை. - - பாப்அப் செய்ய நிலையான வீரர் குறைக்க பாப்அப் அனுமதி வழங்கப்படாதபோது வீரர் அழிக்க முடியாது. +- சரி #1440 உடைந்த வீடியோ செய்தி தளவமைப்பு #1491 +- சரித்திர சரித்திரத்தைக் காண்க #1497 +- #1495, பயனர் பிளேலிச்ட்டை அணுகியவுடன் மெட்டாடேட்டாவை (சிறுபடம், தலைப்பு மற்றும் வீடியோ எண்ணிக்கை) புதுப்பித்தல். +- #1475, விவரத் துண்டில் வெளிப்புற பிளேயரில் பயனர் வீடியோவைத் தொடங்கும் போது தரவுத்தளத்தில் பார்வையைப் பதிவு செய்வதன் மூலம். +- மேல்தோன்றல் பயன்முறையில் திரையின் காலக்கெடுவை சரிசெய்யவும். #1463 (நிலையான #640) +- முதன்மை வீடியோ பிளேயர் திருத்தம் #1509 +- [#1412] பிளேயர் செயல்பாடு பின்னணியில் இருக்கும்போது புதிய எண்ணம் பெறப்படும்போது பிளேயர் NPEயை ஏற்படுத்தும் நிலையான ரிப்பீட் பயன்முறை. +- மேல்தோன்றல் இசைவு வழங்கப்படாதபோது பிளேயரை பாப்அப்பிற்குக் குறைப்பது நிலையானது பிளேயரை அழிக்காது. diff --git a/fastlane/metadata/android/ta/changelogs/66.txt b/fastlane/metadata/android/ta/changelogs/66.txt index ba6cfae1cd8..b3076700d77 100644 --- a/fastlane/metadata/android/ta/changelogs/66.txt +++ b/fastlane/metadata/android/ta/changelogs/66.txt @@ -1,21 +1,33 @@ -# v0.13.7 இன் சேஞ்ச் +v0.13.7 இன் # சேஞ்ச்லாக் -### சரி செய்யப்பட்டது -- v0.13.6 வரிசை வடிகட்டி சிக்கல்களை சரிசெய்யவும் +### சரி செய்யப்பட்டது +- v0.13.6 இன் வரிசை வடிகட்டி சிக்கல்களை சரிசெய்யவும் -# v0.13.6 இன் சேஞ்ச் +# சேஞ்ச்லாக் இன் v0.13.6 -### மேம்பாடுகள் +### மேம்பாடுகள் -- பர்கர்மெனு ஐகான் அனிமேஷன் முடக்கு #1486 -- பதிவிறக்கங்கள் நீக்க #1472 செயல்தவிர்க்கவும் -- பங்கு மெனுவில் விருப்பத்தைப் பதிவிறக்கவும் #1498 -- நீண்ட குழாய் மெனு # 1454 பங்கு விருப்பத்தை சேர்க்கப்பட்டது -- வெளியேறும் #1354 இல் முக்கிய வீரரைக் குறைக்கவும் -- நூலக பதிப்பு மேம்படுத்தல் மற்றும் தரவுத்தள காப்பு திருத்தம் #1510 +- பர்கர்மெனு படவுரு அனிமேசனை முடக்கு #1486 +- பதிவிறக்கங்களின் நீக்குதலை செயல்தவிர்க்கவும் #1472 +- சேர் பட்டியல் #1498 இல் பதிவிறக்க விருப்பம் +- நீண்ட தட்டு பட்டியல் #1454 இல் பகிர்வு விருப்பம் சேர்க்கப்பட்டது +- வெளியேறும் #1354 இல் முதன்மையான வீரரைக் குறைக்கவும் +- நூலக பதிப்பு புதுப்பித்தல் மற்றும் தரவுத்தள காப்புப்பிரதி திருத்தம் #1510 +- ExoPlayer 2.8.2 மேம்படுத்தல் #1392 +- வேகமான வேக மாற்றத்திற்காக வெவ்வேறு படி அளவுகளை ஆதரிக்க, பிளேபேக் வேகக் கட்டுப்பாட்டு உரையாடலை மீண்டும் உருவாக்கியது. +- பிளேபேக் வேகக் கட்டுப்பாட்டில் நிசப்தத்தின் போது வேகமாக முன்னோக்கிச் செல்வதற்கான நிலைமாற்றம் சேர்க்கப்பட்டது. இது ஆடியோபுக்குகள் மற்றும் சில இசை வகைகளுக்கு உதவியாக இருக்க வேண்டும், மேலும் ஒரு உண்மையான தடையற்ற அனுபவத்தைக் கொண்டு வர முடியும் (மேலும் நிறைய அமைதியுடன் ஒரு பாடலை உடைக்க முடியும் =\\). +- மீடியா மூலத் தெளிவுத்திறன் மறுவடிவமைக்கப்பட்ட மீடியாவை கைமுறையாகச் செய்வதை விட, பிளேயரில் உள்ள மீடியாவுடன் சேர்த்து அனுப்ப அனுமதிக்கிறது. இப்போது எங்களிடம் மெட்டாடேட்டாவின் ஒற்றை சான்று உள்ளது மற்றும் பிளேபேக் தொடங்கும் போது நேரடியாகக் கிடைக்கும். +- பிளேலிச்ட் துண்டு திறக்கப்படும்போது புதிய மேனிலை தரவு கிடைக்கும்போது நிலையான ரிமோட் பிளேலிச்ட் மேனிலை தரவு புதுப்பிக்கப்படாது. +- பல்வேறு இடைமுகம் திருத்தங்கள்: #1383, பின்னணி பிளேயர் அறிவிப்புக் கட்டுப்பாடுகள் இப்போது எப்போதும் வெண்மையாக இருக்கும், மேல்தோன்றல் பிளேயரை ஃபிலிங் செய்வதன் மூலம் மூடுவது எளிது +- பல சேவைகளுக்கு மறுசீரமைக்கப்பட்ட கட்டமைப்புடன் புதிய பிரித்தெடுக்கும் கருவியைப் பயன்படுத்தவும் -- ExoPlayer 2.8.2 மேம்படுத்தல் #1392 - - வேகமான வேக மாற்றத்திற்கான வெவ்வேறு படி அளவுகளை ஆதரிக்க பின்னணி வேகக் கட்டுப்பாட்டு உரையாடலை மறுவேலை செய்தது. - - பின்னணி வேக கட்டுப்பாடு மௌனங்கள் போது வேகமாக முன்னோக்கி ஒரு நிலைமாற்றி சேர்க்கப்பட்டது. இது ஆடியோபுக்குகள் மற்றும் சில இசை வகைகளுக்கு உதவியாக இருக்க வேண்டும், மேலும் உண்மையான தடையற்ற அனுபவத்தைக் கொண்டுவர முடியும் (மேலும் நிறைய மௌனங்களுடன் ஒரு பாடலை உடைக்க முடியும் =). - - மெட்டாடேட்டாவை கைமுறையாக செய்வதை விட, பிளேயரில் உள்நாட்டில் மீடியாவுடன் மெட்டாடேட்டாவை அனுப்ப அனுமதிக்க மறுசீரமைக்கப்பட்ட ஊடக மூல தீர்மானம். இப்போது எங்களிடம் மெட்டாடேட்டாவின் ஒற்றை ஆதாரம் உள்ளது மற்றும் பிளேபேக் தொடங்கும் போது நேரடியாக கிடைக்கும். - - நிலையான தொலை பிளேலிஸ்ட் மெட்டாடேட்டா இல்லை +### திருத்தங்கள் + +- சரி #1440 உடைந்த வீடியோ செய்தி தளவமைப்பு #1491 +- சரித்திர சரித்திரத்தைக் காண்க #1497 +- #1495, பயனர் பிளேலிச்ட்டை அணுகியவுடன் மெட்டாடேட்டாவை (சிறுபடம், தலைப்பு மற்றும் வீடியோ எண்ணிக்கை) புதுப்பித்தல். +- #1475, விவரத் துண்டில் வெளிப்புற பிளேயரில் பயனர் வீடியோவைத் தொடங்கும் போது தரவுத்தளத்தில் பார்வையைப் பதிவு செய்வதன் மூலம். +- மேல்தோன்றல் பயன்முறையில் திரையின் காலக்கெடுவை சரிசெய்யவும். #1463 (நிலையான #640) +- முதன்மை வீடியோ பிளேயர் திருத்தம் #1509 +- [#1412] பிளேயர் செயல்பாடு பின்னணியில் இருக்கும்போது புதிய எண்ணம் பெறப்படும்போது பிளேயர் NPEயை ஏற்படுத்தும் நிலையான ரிப்பீட் பயன்முறை. +- மேல்தோன்றல் இசைவு வழங்கப்படாதபோது பிளேயரை பாப்அப்பிற்குக் குறைப்பது நிலையானது பிளேயரை அழிக்காது. diff --git a/fastlane/metadata/android/ta/changelogs/68.txt b/fastlane/metadata/android/ta/changelogs/68.txt index 9bada1861d0..1d0b6ca1a09 100644 --- a/fastlane/metadata/android/ta/changelogs/68.txt +++ b/fastlane/metadata/android/ta/changelogs/68.txt @@ -1,31 +1,31 @@ -# v0.14.1 மாற்றங்கள் +v0.14.1 இன் # மாற்றங்கள் -### சரி செய்யப்பட்டது -- வீடியோ url #1659 மறைகுறியாக்க சரி தோல்வி -- நிலையான விளக்கம் இணைப்பு நன்றாக பிரித்தெடுக்க இல்லை #1657 +### சரி செய்யப்பட்டது +- வீடியோ முகவரி #1659 ஐ மறைகுறியாக்குவதில் தோல்வி சரி செய்யப்பட்டது +- நிலையான விளக்கம் இணைப்பு நன்றாக பிரித்தெடுக்கப்படவில்லை #1657 -# v0.14.0 மாற்றங்கள் +v0.14.0 இன் # மாற்றங்கள் -### புதியது -- புதிய அலமாரியின் வடிவமைப்பு #1461 -- புதிய வாடிக்கையாளர்களின் முன் பக்கம் #1461 +### புதியது +- புதிய டிராயர் வடிவமைப்பு #1461 +- புதிய தனிப்பயனாக்கக்கூடிய முதல் பக்கம் #1461 -### மேம்பாடுகள் +### மேம்பாடுகள் - மறுவேலை செய்யப்பட்ட சைகை கட்டுப்பாடுகள் #1604 -- பாப்அப் பிளேயர் #1597 மூட புதிய வழி +- மேல்தோன்றல் பிளேயரை மூடுவதற்கான புதிய வழி #1597 - -### சரி செய்யப்பட்டது -- சந்தா எண்ணிக்கை கிடைக்காதபோது பிழையை சரிசெய்யவும். #1649 ஐ மூடுகிறது. - - அந்த சந்தர்ப்பங்களில் "சந்தாதாரர் எண்ணிக்கை கிடைக்கவில்லை" என்பதைக் காட்டு -- YouTube பிளேலிஸ்ட் காலியாக இருக்கும்போது NPE ஐ சரிசெய்யவும் -- SoundCloud இல் கியோஸ்க்குகளுக்கான விரைவான திருத்தம் -- Refactor மற்றும் பிழைத்திருத்தம் #1623 - - சுழற்சி தேடல் விளைவாக #1562 சரி - - சரி சீக் பட்டி நிலையாக இடப்படவில்லை - - YT பிரீமியம் வீடியோ சரியாக தடுக்கப்படவில்லை என்பதை சரிசெய்யவும் - - சில நேரங்களில் ஏற்றப்படாத வீடியோக்களை சரிசெய்யவும் (DASH பாகுபடுத்தல் காரணமாக) - - வீடியோ விளக்கத்தில் இணைப்புகளை சரிசெய்யவும் - - யாராவது வெளிப்புற SDCARD க்கு பதிவிறக்க முயற்சிக்கும்போது எச்சரிக்கையைக் காட்டு - - எதுவும் காட்டப்படவில்லை விதிவிலக்கு தூண்டுதல்கள் அறிக்கை சரி - - சிறு அண்ட்ராய்டு பின்னணி பிளேயர் காட்டப்படவில்லை 8.1 [இங்கே பார்க்கவும்](https://github.com/TeamNewPip +### சரி செய்யப்பட்டது +- சந்தா எண்ணிக்கை கிடைக்காதபோது பிழையை சரிசெய்யவும். மூடுகிறது #1649. +- அந்த சந்தர்ப்பங்களில் "சந்தாதாரர் எண்ணிக்கை கிடைக்கவில்லை" என்பதைக் காட்டு +- YouTube பிளேலிச்ட் காலியாக இருக்கும்போது NPEஐ சரிசெய்யவும் +- SoundCloud இல் உள்ள கியோச்க்குகளை விரைவாக சரிசெய்தல் +- ரீஃபாக்டர் மற்றும் பிழைத்திருத்தம் #1623 +- சுழற்சி தேடல் முடிவை சரிசெய்யவும் #1562 +- ஃபிக்ச் சீக் பட்டி நிலையானதாக இல்லை +- ஃபிக்ச் YT காப்பீடு வீடியோ சரியாகத் தடுக்கப்படவில்லை +- சில நேரங்களில் ஏற்றப்படாமல் இருக்கும் வீடியோக்களை சரிசெய்யவும் (DASH பாகுபடுத்தல் காரணமாக) +- வீடியோ விளக்கத்தில் இணைப்புகளை சரிசெய்யவும் +- வெளிப்புற sdcard க்கு யாராவது பதிவிறக்க முயற்சிக்கும்போது எச்சரிக்கையைக் காட்டு +- எதுவும் காட்டப்படாத விதிவிலக்கு தூண்டுதல் அறிக்கையை சரிசெய்யவும் +- ஆண்ட்ராய்டு 8.1க்கான பின்னணி பிளேயரில் சிறுபடம் காட்டப்படவில்லை [இங்கே பார்க்கவும்](https://github.com/TeamNewPipe/NewPipe/issues/943) +- ஒளிபரப்பு பெறுநரின் பதிவை சரிசெய்தல். மூடுகிறது #1641. diff --git a/fastlane/metadata/android/ta/changelogs/69.txt b/fastlane/metadata/android/ta/changelogs/69.txt index 0c2c47e48cf..e5e5ab606d7 100644 --- a/fastlane/metadata/android/ta/changelogs/69.txt +++ b/fastlane/metadata/android/ta/changelogs/69.txt @@ -1,19 +1,19 @@ -### புதியது - - சந்தாக்களில் #1516 இல் நீண்ட-தட்டுதல் நீக்கவும் பகிரவும் - - டேப்லெட் யுஐ மற்றும் கட்டம் பட்டியல் தளவமைப்பு #1617 +### புதியது +- நீண்ட நேரம் நீக்கு மற்றும் சந்தாக்கள் #1516 இல் பகிரவும் +- டேப்லெட் இடைமுகம் மற்றும் கட்டம் பட்டியல் தளவமைப்பு #1617 - ### மேம்பாடுகள் - - கடைசியாக பயன்படுத்தப்பட்ட விகித விகிதத்தை #1748 சேமித்து மீண்டும் ஏற்றவும் - - முழு வீடியோ பெயர்களுடன் பதிவிறக்கங்களின் செயல்பாட்டில் நேரியல் தளவமைப்பை இயக்கவும் #1771 - - சந்தாக்கள் தாவல் #1516 க்குள் இருந்து நேரடியாக சந்தாக்களை நீக்கி பகிரவும் - - நாடக வரிசை ஏற்கனவே #1783 முடிந்துவிட்டால், இப்போது வீடியோ விளையாடுவதைத் தூண்டுகிறது - - தொகுதி மற்றும் ஒளி சைகைகளுக்கான தனி அமைப்புகள் #1644 - - உள்ளூர்மயமாக்கலுக்கான ஆதரவைச் சேர்க்கவும் #1792 +### மேம்பாடுகள் +- கடைசியாகப் பயன்படுத்திய #1748 விகிதத்தை சேமித்து மீண்டும் ஏற்றவும் +- முழு வீடியோ பெயர்கள் #1771 உடன் பதிவிறக்கங்கள் செயல்பாட்டில் நேரியல் தளவமைப்பை இயக்கவும் +- சந்தாக்கள் தாவல் #1516 இலிருந்து நேரடியாக சந்தாக்களை நீக்கி பகிரவும் +- ப்ளே வரிசை ஏற்கனவே #1783 முடிவடைந்திருந்தால், இப்போது வரிசைப்படுத்துவது வீடியோவை இயக்கத் தூண்டுகிறது +- தொகுதி மற்றும் பிரகாச சைகைகளுக்கான தனி அமைப்புகள் #1644 +- உள்ளூர்மயமாக்கல் #1792க்கான ஆதரவைச் சேர்க்கவும் - ### திருத்தங்கள் - - நேர பாகுபடுத்தும் நேரத்தை சரிசெய்யவும். வடிவம், எனவே புதிய பக்கத்தை பின்லாந்தில் பயன்படுத்தலாம் - - சந்தா எண்ணிக்கையை சரிசெய்யவும் - - பநிஇ 28+ சாதனங்களுக்கான முன் பணி அனுமதியை #1830 சேர்க்கவும் +### திருத்தங்கள் +- க்கு நேரம் பாகுபடுத்துதல். வடிவம், எனவே நியூபைப்பை ஃபின்லாந்தில் பயன்படுத்தலாம் +- சந்தா எண்ணிக்கையை சரிசெய்யவும் +- பநிஇ 28+ சாதனங்களுக்கு முன்புற பணி அனுமதியைச் சேர்க்கவும் #1830 - ### அறியப்பட்ட பிழைகள் - - அண்ட்ராய்டு பி இல் பிளேபேக் நிலையை சேமிக்க முடியாது +### தெரிந்த பிழைகள் +- பிளேபேக் நிலையை Android P இல் சேமிக்க முடியாது diff --git a/fastlane/metadata/android/ta/changelogs/70.txt b/fastlane/metadata/android/ta/changelogs/70.txt index a314d7ac9de..747ee2f1622 100644 --- a/fastlane/metadata/android/ta/changelogs/70.txt +++ b/fastlane/metadata/android/ta/changelogs/70.txt @@ -1,25 +1,25 @@ -கவனம்: இந்த பதிப்பு கடைசியாக இருப்பதைப் போலவே ஒரு பிழைத்திருத்தமாகும். இருப்பினும் 17 முதல் முழு பணிநிறுத்தம் காரணமாக. உடைந்த பதிப்பு சிறந்தது, பின்னர் பதிப்பு இல்லை. சரி? ¯ \ _ (ツ) _/ +கவனம்: கடந்த பதிப்பைப் போலவே இந்தப் பதிப்பும் ஒரு பக்ஃபெச்டாக இருக்கலாம். எனினும் 17 முதல் முழு பணிநிறுத்தம் காரணமாக. உடைந்த பதிப்பு சிறந்த பதிப்பு இல்லை. சரியா? ¯\_(ツ)_/¯ - ### மேம்பாடுகள் - * பதிவிறக்கம் செய்யப்பட்ட கோப்புகளை இப்போது ஒரு சொடுக்கு #1879 உடன் திறக்கலாம் - * ஆண்ட்ராய்டு 4.1 - 4.3 #1884 க்கான ஆதரவை கைவிடவும் - * பழைய பிளேயரை அகற்று #1884 - * தற்போதைய நாடக வரிசையில் இருந்து ச்ட்ரீம்களை வலதுபுறமாக ச்வைப் செய்வதன் மூலம் அகற்றவும் #1915 - * ஒரு புதிய ச்ட்ரீம் கைமுறையாக #1878 - * பதிவிறக்கங்களுக்கான போச்ட்ரோசெசிங் மற்றும் காணாமல் போன அம்சங்களை செயல்படுத்துதல் #1759 bykapodamy - * பிந்தைய செயலாக்க உள்கட்டமைப்பு - * சரியான பிழை "உள்கட்டமைப்பு" (பதிவிறக்கத்திற்கு) - * பல பதிவிறக்கங்களுக்கு பதிலாக வரிசை - * பயன்பாட்டு தரவுக்கு சீரியலைச் நிலுவையில் உள்ள பதிவிறக்கங்களை (`.கிகா` கோப்புகள்) நகர்த்தவும் - * அதிகபட்ச பதிவிறக்க மீண்டும் முயற்சிக்கவும் - * சரியான மல்டி-த்ரெட் பதிவிறக்கம் இடைநிறுத்தம் - * மொபைல் நெட்வொர்க்கிற்கு மாறும்போது பதிவிறக்கங்களை நிறுத்துங்கள் (ஒருபோதும் செயல்படாது, 2 வது புள்ளியைப் பார்க்கவும்) - * அடுத்த பதிவிறக்கங்களுக்கான நூல் எண்ணிக்கையைச் சேமிக்கவும் - * நிறைய முரண்பாடுகள் சரி செய்யப்பட்டன +### மேம்பாடுகள் +பதிவிறக்கம் செய்யப்பட்ட கோப்புகளை இப்போது ஒரே கிளிக்கில் திறக்கலாம் #1879 +* ஆண்ட்ராய்டு 4.1 - 4.3 #1884க்கான ஆதரவை கைவிடவும் +* பழைய பிளேயரை அகற்றவும் #1884 +* ச்ட்ரீம்களை வலது #1915 க்கு ச்வைப் செய்வதன் மூலம் தற்போதைய பிளே வரிசையிலிருந்து அகற்றவும் +* ஒரு புதிய ச்ட்ரீம் கைமுறையாக #1878 வரிசைப்படுத்தப்படும் போது தானாக வரிசைப்படுத்தப்பட்ட ச்ட்ரீமை அகற்றவும் +* பதிவிறக்கங்களுக்கான பின்செயலாக்குதல் மற்றும் @kapodamy ஆல் விடுபட்ட நற்பொருத்தங்கள் #1759 செயல்படுத்துதல் +* செயலாக்கத்திற்குப் பின் உள்கட்டமைப்பு +* சரியான பிழை கையாளுதல் "உள்கட்டமைப்பு" (பதிவிறக்குபவருக்கு) +* பல பதிவிறக்கங்களுக்குப் பதிலாக வரிசை +* வரிசைப்படுத்தப்பட்ட நிலுவையிலுள்ள பதிவிறக்கங்களை (`.giga` கோப்புகள்) பயன்பாட்டுத் தரவுக்கு நகர்த்தவும் +* அதிகபட்ச பதிவிறக்க மறு முயற்சியை செயல்படுத்தவும் +* முறையான பல நூல் பதிவிறக்கம் இடைநிறுத்தம் +* மொபைல் நெட்வொர்க்கிற்கு மாறும்போது பதிவிறக்கங்களை நிறுத்துங்கள் (ஒருபோதும் வேலை செய்யாது, 2வது புள்ளியைப் பார்க்கவும்) +* அடுத்த பதிவிறக்கங்களுக்கு நூல் எண்ணிக்கையைச் சேமிக்கவும் +* பல முரண்பாடுகள் சரி செய்யப்பட்டன - ### சரி செய்யப்பட்டது - * இயல்புநிலை தெளிவுத்திறனுடன் செயலிழப்பை சரிசெய்யவும் சிறந்த மற்றும் வரையறுக்கப்பட்ட மொபைல் தரவு தீர்மானம் #1835 - * பாப்-அப் பிளேயர் செயலிழப்பு சரி #1874 - * பின்னணி பிளேயரைத் திறக்க முயற்சிக்கும்போது NPE #1901 - * ஆட்டோ வரிசை இயக்கப்பட்டிருக்கும் போது புதிய ச்ட்ரீம்களைச் செருகுவதை சரிசெய்யவும் #1878 - * டெசிபரிங் சட்டவுன் சிக்கல் சரி செய்யப்பட்டது +### சரி செய்யப்பட்டது +* சிறந்த மற்றும் வரையறுக்கப்பட்ட மொபைல் டேட்டா தெளிவுத்திறன் #1835க்கு அமைக்கப்பட்ட இயல்புநிலை தெளிவுத்திறனுடன் செயலிழப்பை சரிசெய்யவும் +* பாப்-அப் பிளேயர் செயலிழப்பு சரி செய்யப்பட்டது #1874 +* NPE பின்னணி பிளேயர் #1901 ஐ திறக்க முயற்சிக்கும்போது +* தானாக வரிசைப்படுத்துதல் #1878 இயக்கப்பட்டிருக்கும் போது புதிய ச்ட்ரீம்களைச் செருகுவதை சரிசெய்யவும் +* டிசைப்பரிங் சட்டவுன் சிக்கல் சரி செய்யப்பட்டது diff --git a/fastlane/metadata/android/ta/changelogs/71.txt b/fastlane/metadata/android/ta/changelogs/71.txt index 278cb41c070..4c677d3a087 100644 --- a/fastlane/metadata/android/ta/changelogs/71.txt +++ b/fastlane/metadata/android/ta/changelogs/71.txt @@ -1,10 +1,10 @@ -### மேம்பாடுகள் - * அறிவிலிமையம் பில்டிற்கான பயன்பாட்டு புதுப்பிப்பு அறிவிப்பை சேர்க்கவும் (#1608 bykrtkush) - * பதிவிறக்கத்தின் பல்வேறு மேம்பாடுகள் (#1944 bykapodamy): - * காணாமல் போன வெள்ளை ஐகான்களைச் சேர்த்து, படவுரு வண்ணங்களை மாற்ற ஆர்ட்கோர்டு வழியைப் பயன்படுத்தவும் - * ஐடரேட்டர் துவக்கப்பட்டதா என்பதை சரிபார்க்கவும் (திருத்தங்கள் #2031) - * புதிய மக்சரில் "பிந்தைய செயலாக்க தோல்வியுற்ற" பிழையுடன் மீண்டும் பதிவிறக்கங்களை மீண்டும் எடுக்க அனுமதிக்கவும் - * புதிய MPEG-4 மக்சர் ஒத்திசைவு அல்லாத வீடியோ மற்றும் ஆடியோ ச்ட்ரீம்களை சரிசெய்கிறது (#2039) +### மேம்பாடுகள் +* GitHub உருவாக்கத்திற்கான பயன்பாட்டு புதுப்பிப்பு அறிவிப்பைச் சேர்க்கவும் (#1608 by @krtkush) +* டவுன்லோடருக்கு பல்வேறு மேம்பாடுகள் (#1944 by @kapodamy): +* விடுபட்ட வெள்ளை ஐகான்களைச் சேர்த்து, படவுரு வண்ணங்களை மாற்ற ஆர்ட்கோர்டு வழியைப் பயன்படுத்தவும் +* இடிரேட்டர் துவக்கப்பட்டதா என சரிபார்க்கவும் (சரிசெய்தல் #2031) +* புதிய muxer இல் "பிந்தைய செயலாக்கம் தோல்வியடைந்தது" பிழையுடன் மீண்டும் பதிவிறக்கங்களை அனுமதிக்கவும் +* புதிய MPEG-4 muxer ஒத்திசைவற்ற வீடியோ மற்றும் ஆடியோ ச்ட்ரீம்களை சரிசெய்கிறது (#2039) - ### சரி செய்யப்பட்டது - * யூடியூப் லைவ் ச்ட்ரீம்கள் குறுகிய காலத்திற்குப் பிறகு விளையாடுவதை நிறுத்துகின்றன (#1996 @yausername) +### சரி செய்யப்பட்டது +* YouTube லைவ் ச்ட்ரீம்கள் சிறிது நேரத்திற்குப் பிறகு இயங்குவதை நிறுத்துகின்றன (#1996 by @yausername) diff --git a/fastlane/metadata/android/ta/changelogs/740.txt b/fastlane/metadata/android/ta/changelogs/740.txt index f3c18d5bc57..ce8085728e7 100644 --- a/fastlane/metadata/android/ta/changelogs/740.txt +++ b/fastlane/metadata/android/ta/changelogs/740.txt @@ -1,23 +1,23 @@ -

மேம்பாடுகள்

-
    -
  • கருத்துக்களில் இணைப்புகளை சொடுக்கு செய்யக்கூடியது, உரை அளவை அதிகரிக்கவும்
  • -
  • கருத்துகளில் நேர முத்திரை இணைப்புகளைக் சொடுக்கு செய்வதைத் தேடுங்கள்
  • -
  • அண்மைக் காலத்தில் தேர்ந்தெடுக்கப்பட்ட நிலையின் அடிப்படையில் விருப்பமான தாவலைக் காட்டு
  • -
  • ' பின்னணி ' பிளேலிச்ட் சாளரத்தில்
  • -
  • பகிரப்பட்ட உரையை முகவரி இல்லாதபோது தேடுங்கள்
  • -
  • சேர் & quot; தற்போதைய நேரத்தில் பகிரவும் & quot; முதன்மையான வீடியோ பிளேயருக்கு பொத்தான்
  • -
  • வீடியோ வரிசை முடிந்ததும் முதன்மையான பிளேயருக்கு மூடு பொத்தானைச் சேர்க்கவும்
  • -
  • & quot; பின்னணியில் நேரடியாக விளையாடுங்கள் & quot; வீடியோ பட்டியல் உருப்படிகளுக்கான லாங் பிரச் மெனுவுக்கு
  • -
  • விளையாட்டு/enqueue கட்டளைகளுக்கான ஆங்கில மொழிபெயர்ப்புகளை மேம்படுத்தவும்
  • -
  • சிறிய செயல்திறன் மேம்பாடுகள்
  • -
  • பயன்படுத்தப்படாத கோப்புகளை அகற்று
  • -
  • எக்சோப்ளேயரை 2.9.6 க்கு புதுப்பிக்கவும்
  • -
  • வன்கவர்வு இணைப்புகளுக்கு ஆதரவைச் சேர்க்கவும்
  • -
-

சரி செய்யப்பட்டது

-
    -
  • நிலையான சுருள் w/ கருத்துகள் மற்றும் தொடர்புடைய ச்ட்ரீம்கள் முடக்கப்பட்டன -
  • நிலையான CheckFornewAppversionTask அது செய்யப்படும்போது செயல்படுத்தப்படும் ' t
  • -
  • நிலையான YouTube சந்தா இறக்குமதி: தவறான முகவரி உடன் புறக்கணித்து, வெற்று தலைப்பைக் கொண்டு வைக்கவும்
  • -
  • தவறான YouTube முகவரி ஐ சரிசெய்யவும்: கையொப்பம் குறிச்சொல் பெயர் எப்போதும் ச்ட்ரீம்களை ஏற்றுவதைத் தடுக்கும் "கையொப்பம்"
  • -
+

மேம்பாடுகள்

+
    +
  • கருத்துகளில் இணைப்புகளைக் சொடுக்கு செய்யக்கூடியதாக ஆக்குங்கள், உரை அளவை அதிகரிக்கவும்
  • +
  • கருத்துகளில் நேரமுத்திரை இணைப்புகளைக் சொடுக்கு செய்வதைத் தேடுங்கள்
  • +
  • சமீபத்தில் தேர்ந்தெடுக்கப்பட்ட மாநிலத்தின் அடிப்படையில் விருப்பமான தாவலைக் காட்டு
  • +'பின்னணி' பிளேலிச்ட் சாளரத்தில் +
  • பகிர்ந்த உரை முகவரி இல்லாவிடில் தேடவும்
  • +
  • சேர் "தற்போதைய நேரத்தில் பகிர்" முக்கிய வீடியோ பிளேயருக்கான பொத்தான்
  • +
  • வீடியோ வரிசை முடிந்ததும் மெயின் பிளேயருக்கு மூடு பட்டனைச் சேர்க்கவும்
  • +
  • சேர் "பின்னணியில் நேரடியாக விளையாடு" வீடியோ பட்டியல் உருப்படிகளுக்கான மெனுவை நீண்ட அழுத்தவும்
  • +
  • Play/Enqueue கட்டளைகளுக்கான ஆங்கில மொழிபெயர்ப்புகளை மேம்படுத்தவும்
  • +
  • சிறிய செயல்திறன் மேம்பாடுகள்
  • +
  • பயன்படுத்தாத கோப்புகளை அகற்று
  • +
  • ExoPlayerஐ 2.9.6க்கு புதுப்பிக்கவும்
  • +
  • Invidious இணைப்புகளுக்கான ஆதரவைச் சேர்க்கவும்
  • +
+

நிலையானது

+
    +
  • நிலையான ச்க்ரோல் w/ கருத்துகள் மற்றும் தொடர்புடைய ச்ட்ரீம்கள் முடக்கப்பட்டன
  • +
  • நிச்சயமான CheckForNewAppVersionTask செயல்படாத போது செயல்படுத்தப்படுகிறது
  • +
  • நிலையான யூடியூப் சந்தா இறக்குமதி: தவறான முகவரி உள்ளவற்றைப் புறக்கணித்து, வெற்று தலைப்பில் உள்ளவற்றை வைத்திருங்கள்
  • +
  • தவறான YouTube முகவரி ஐ சரிசெய்யவும்: கையொப்ப குறிச்சொல் பெயர் எப்போதும் ச்ட்ரீம்களை ஏற்றுவதைத் தடுக்கும் "கையொப்பம்" அல்ல
  • +
diff --git a/fastlane/metadata/android/ta/changelogs/750.txt b/fastlane/metadata/android/ta/changelogs/750.txt index 08631498c46..f975f7b71f3 100644 --- a/fastlane/metadata/android/ta/changelogs/750.txt +++ b/fastlane/metadata/android/ta/changelogs/750.txt @@ -1,22 +1,22 @@ -புதியது - பிளேபேக் விண்ணப்பம் #2288 - Last கடைசியாக நீங்கள் நிறுத்திய இடத்தில் நீரோடைகளை மீண்டும் தொடங்குங்கள் - பதிவிறக்க மேம்பாடுகள் #2149 - St வெளிப்புற எச்டி-கார்டுகளில் பதிவிறக்கங்களை சேமிக்க சேமிப்பக அணுகல் கட்டமைப்பைப் பயன்படுத்தவும் - Mp புதிய எம்பி 4 மக்சர் - பதிவிறக்கம் பதிவிறக்கத்தைத் தொடங்குவதற்கு முன் பதிவிறக்க கோப்பகத்தை விருப்பமாக மாற்றவும் - Meade மீட்டெடுக்கப்பட்ட நெட்வொர்க்குகளை மரியாதை +புதியது +பிளேபேக் ரெச்யூம் #2288 +• கடைசியாக நீங்கள் நிறுத்திய ச்ட்ரீம்களை மீண்டும் தொடங்கவும் +டவுன்லோடர் மேம்பாடுகள் #2149 +• வெளிப்புற SD கார்டுகளில் பதிவிறக்கங்களைச் சேமிக்க சேமிப்பக அணுகல் கட்டமைப்பைப் பயன்படுத்தவும் +• புதிய mp4 muxer +• பதிவிறக்கத்தைத் தொடங்கும் முன் பதிவிறக்க கோப்பகத்தை விருப்பமாக மாற்றவும் +• மீட்டர் நெட்வொர்க்குகளை மதிக்கவும் - மேம்படுத்தப்பட்டது - • அகற்றப்பட்ட செமா சரங்கள் #2295 - Life செயல்பாட்டு வாழ்க்கை சுழற்சி #2444 இன் போது கையாளுதல் (ஆட்டோ) சுழற்சி மாற்றங்கள் - Long நீண்ட அழுத்த மெனுக்களை சீரானதாக மாற்றவும் #2368 +மேம்படுத்தப்பட்டது +• நீக்கப்பட்ட செமா சரங்கள் #2295 +• செயல்பாட்டு வாழ்க்கைச் சுழற்சியின் போது (தானியங்கு) சுழற்சி மாற்றங்களைக் கையாளவும் #2444 +• நீண்ட அழுத்த மெனுக்களை சீரான #2368 ஆக்குங்கள் - சரி - • நிலையான தேர்ந்தெடுக்கப்பட்ட வசன பாதை பெயர் காண்பிக்கப்படவில்லை #2394 - பயன்பாடு பயன்பாட்டு புதுப்பிப்பு தோல்வியுற்றால் செயலிழக்க வேண்டாம் (கிதுப் பதிப்பு) #2423 - • நிலையான பதிவிறக்கங்கள் 99.9% #2440 இல் சிக்கியுள்ளன - Play ப்ளே வரிசை மேனிலை தரவு #2453 ஐப் புதுப்பிக்கவும் - • [சவுண்ட்க்ளூட்] பிளேலிச்ட்கள் டீம்நியூபைப்/நியூபிபீக்ச்ட்ராக்டர்#170 ஐ ஏற்றும்போது நிலையான செயலிழப்பு - • [YouTube] நிலையான கால அளவு paresd teamnewpipe/newPipeextractor#177 ஆக இருக்க முடியாது +சரி செய்யப்பட்டது +• நிலையான தேர்ந்தெடுக்கப்பட்ட வசன டிராக் பெயர் #2394 காட்டப்படவில்லை +• ஆப்ச் புதுப்பிப்பு தோல்வியுற்றால் செயலிழக்க வேண்டாம் (GitHub பதிப்பு) #2423 +• நிலையான பதிவிறக்கங்கள் 99.9% #2440 இல் சிக்கியுள்ளன +• பிளே வரிசை மேனிலை தரவு #2453ஐப் புதுப்பிக்கவும் +• [SoundCloud] பிளேலிச்ட்களை ஏற்றும்போது நிலையான செயலிழப்பு TeamNewPipe/NewPipeExtractor#170 +• [YouTube] நிலையான கால அளவு TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/ta/changelogs/760.txt b/fastlane/metadata/android/ta/changelogs/760.txt index b2252d1795b..2ef083c0066 100644 --- a/fastlane/metadata/android/ta/changelogs/760.txt +++ b/fastlane/metadata/android/ta/changelogs/760.txt @@ -1,43 +1,43 @@ -0.17.1 இல் மாற்றங்கள் +0.17.1 இல் மாற்றங்கள் - புதியது - • தாய் உள்ளூர்மயமாக்கல் +புதியது +• தாய் உள்ளூர்மயமாக்கல் - மேம்படுத்தப்பட்டது - The பிளேலிச்ட்களுக்கான லாங்-பிரச் மெனுக்களில் மீண்டும் விளையாடத் தொடங்குங்கள் #2518 - SAF SAF / மரபு கோப்பு பிக்கர் #2521 க்கு சுவிட்சைச் சேர்க்கவும் +மேம்படுத்தப்பட்டது +• பிளேலிச்ட்களுக்கான நீண்ட அழுத்த மெனுக்களில் மீண்டும் விளையாடத் தொடங்கும் செயலைச் சேர்க்கவும் #2518 +• SAF / மரபு கோப்பு தேர்வி #2521க்கான சுவிட்சைச் சேர்க்கவும் - சரி - இடு பயன்பாடுகளை மாற்றும்போது பதிவிறக்கங்களில் காணாமல் போகும் பொத்தான்களை சரிசெய்யவும் #2487 - Watch வாட்ச் வரலாறு முடக்கப்பட்டிருந்தாலும் பிளேபேக் நிலை சேமிக்கப்படுகிறது - Tiews பட்டியல் காட்சிகள் #2517 இல் பிளேபேக் நிலையால் ஏற்படும் குறைக்கப்பட்ட செயல்திறனை சரிசெய்யவும் - • [பிரித்தெடுத்தல்] recaptchaactivity #2527, TeamNewPipe/NewPipeextractor #186 ஐ சரிசெய்யவும் - • [பிரித்தெடுத்தல்] [YouTube] பிளேலிச்ட்கள் முடிவுகளில் இருக்கும்போது சாதாரண தேடல் பிழையை சரிசெய்யவும் teamnewpipe/newPipeextractor#185 +சரி செய்யப்பட்டது +• பயன்பாடுகள் #2487 ஐ மாற்றும்போது பதிவிறக்கங்கள் பார்வையில் மறைந்து வரும் பொத்தான்களை சரிசெய்யவும் +• பார்வை வரலாறு முடக்கப்பட்டிருந்தாலும், ஃபிக்ச் பிளேபேக் நிலை சேமிக்கப்படும் +• பட்டியல் காட்சிகள் #2517 இல் பிளேபேக் நிலை காரணமாக குறைக்கப்பட்ட செயல்திறனை சரிசெய்யவும் +• [எக்ச்ட்ராக்டர்] ReCaptchaActivity #2527, TeamNewPipe/NewPipeExtractor#186 +• [எக்ச்ட்ராக்டர்] [YouTube] பிளேலிச்ட்கள் முடிவுகளில் இருக்கும்போது சாதாரண தேடல் பிழையை சரிசெய்யவும் TeamNewPipe/NewPipeExtractor#185 - 0.17.0 இல் மாற்றங்கள் +0.17.0 இல் மாற்றங்கள் - புதியது - பிளேபேக் விண்ணப்பம் #2288 - Last கடைசியாக நீங்கள் நிறுத்திய இடத்தில் நீரோடைகளை மீண்டும் தொடங்குங்கள் - பதிவிறக்க மேம்பாடுகள் #2149 - St வெளிப்புற எச்டி-கார்டுகளில் பதிவிறக்கங்களை சேமிக்க சேமிப்பக அணுகல் கட்டமைப்பைப் பயன்படுத்தவும் - Mp புதிய எம்பி 4 மக்சர் - பதிவிறக்கம் பதிவிறக்கத்தைத் தொடங்குவதற்கு முன் பதிவிறக்க கோப்பகத்தை விருப்பமாக மாற்றவும் - Meade மீட்டெடுக்கப்பட்ட நெட்வொர்க்குகளை மரியாதை +புதியது +பிளேபேக் ரெச்யூம் #2288 +• கடைசியாக நீங்கள் நிறுத்திய ச்ட்ரீம்களை மீண்டும் தொடங்கவும் +டவுன்லோடர் மேம்பாடுகள் #2149 +• வெளிப்புற SD கார்டுகளில் பதிவிறக்கங்களைச் சேமிக்க சேமிப்பக அணுகல் கட்டமைப்பைப் பயன்படுத்தவும் +• புதிய mp4 muxer +• பதிவிறக்கத்தைத் தொடங்கும் முன் பதிவிறக்க கோப்பகத்தை விருப்பமாக மாற்றவும் +• மீட்டர் நெட்வொர்க்குகளை மதிக்கவும் - மேம்படுத்தப்பட்டது - • அகற்றப்பட்ட செமா சரங்கள் #2295 - Life செயல்பாட்டு வாழ்க்கை சுழற்சி #2444 இன் போது கையாளுதல் (ஆட்டோ) சுழற்சி மாற்றங்கள் - Long நீண்ட அழுத்த மெனுக்களை சீரானதாக மாற்றவும் #2368 +மேம்படுத்தப்பட்டது +• நீக்கப்பட்ட செமா சரங்கள் #2295 +• செயல்பாட்டு வாழ்க்கைச் சுழற்சியின் போது (தானியங்கு) சுழற்சி மாற்றங்களைக் கையாளவும் #2444 +• நீண்ட அழுத்த மெனுக்களை சீரான #2368 ஆக்குங்கள் - சரி - • நிலையான தேர்ந்தெடுக்கப்பட்ட வசன பாதை பெயர் காண்பிக்கப்படவில்லை #2394 - பயன்பாடு பயன்பாட்டு புதுப்பிப்பு தோல்வியுற்றால் செயலிழக்க வேண்டாம் (கிதுப் பதிப்பு) #2423 - • நிலையான பதிவிறக்கங்கள் 99.9% #2440 இல் சிக்கியுள்ளன - Play ப்ளே வரிசை மேனிலை தரவு #2453 ஐப் புதுப்பிக்கவும் - • [சவுண்ட்க்ளூட்] பிளேலிச்ட்கள் டீம்நியூபைப்/நியூபிபீக்ச்ட்ராக்டர்#170 ஐ ஏற்றும்போது நிலையான செயலிழப்பு - • [YouTube] நிலையான கால அளவு paresd teamnewpipe/newPipeextractor#177 ஆக இருக்க முடியாது +சரி செய்யப்பட்டது +• நிலையான தேர்ந்தெடுக்கப்பட்ட வசன டிராக் பெயர் #2394 காட்டப்படவில்லை +• ஆப்ச் புதுப்பிப்பு தோல்வியுற்றால் செயலிழக்க வேண்டாம் (GitHub பதிப்பு) #2423 +• நிலையான பதிவிறக்கங்கள் 99.9% #2440 இல் சிக்கியுள்ளன +• பிளே வரிசை மேனிலை தரவு #2453ஐப் புதுப்பிக்கவும் +• [SoundCloud] பிளேலிச்ட்களை ஏற்றும்போது நிலையான செயலிழப்பு TeamNewPipe/NewPipeExtractor#170 +• [YouTube] நிலையான கால அளவு TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/ta/changelogs/780.txt b/fastlane/metadata/android/ta/changelogs/780.txt index 7d6d57a1c61..56e6bcfe720 100644 --- a/fastlane/metadata/android/ta/changelogs/780.txt +++ b/fastlane/metadata/android/ta/changelogs/780.txt @@ -1,12 +1,12 @@ -0.17.3 இல் மாற்றங்கள் +0.17.3 இல் மாற்றங்கள் - மேம்படுத்தப்பட்டது - The பிளேபேக் நிலைகளை அழிக்க விருப்பம் சேர்க்கப்பட்டது #2550 - The கோப்பு பிக்கர் #2591 இல் மறைக்கப்பட்ட கோப்பகங்களைக் காட்டு - புதிய NewPipe #2488 உடன் திறக்கப்பட வேண்டிய `invidio.us` நிகழ்வுகளிலிருந்து முகவரி களை ஆதரிக்கவும் - `Music.youtube.com` urls teamnewpipe/newPipeextractor#194 க்கான ஆதரவைச் சேர்க்கவும் +மேம்படுத்தப்பட்டது +• பிளேபேக் நிலைகளை அழிக்க விருப்பம் சேர்க்கப்பட்டது #2550 +• கோப்பு தேர்வி #2591 இல் மறைக்கப்பட்ட கோப்பகங்களைக் காட்டு +• NewPipe #2488 உடன் திறக்கப்பட வேண்டிய `invidio.us` நிகழ்வுகளின் உதவி URLகள் +• `music.youtube.com` URLகளுக்கான ஆதரவைச் சேர்க்கவும் TeamNewPipe/NewPipeExtractor#194 - சரி - • [YouTube] நிலையான 'java.lang.ilegalargumentexception #192 - • [YouTube] நிலையான நேரடி ச்ட்ரீம்கள் டீம்நியூபைப்/நியூபிபீக்ச்ட்ராக்டர்#195 வேலை செய்யாது - And ஆண்ட்ராய்டு பை ஒரு ச்ட்ரீம் பதிவிறக்கும்போது நிலையான செயல்திறன் சிக்கல் #2592 +சரி செய்யப்பட்டது +• [YouTube] நிலையான 'java.lang.IllegalArgumentException #192 +• [YouTube] நிலையான நேரடி ச்ட்ரீம்கள் வேலை செய்யவில்லை TeamNewPipe/NewPipeExtractor#195 +• ச்ட்ரீம் #2592 ஐப் பதிவிறக்கும் போது ஆண்ட்ராய்டு பையில் செயல்திறன் சிக்கல் சரி செய்யப்பட்டது diff --git a/fastlane/metadata/android/ta/changelogs/790.txt b/fastlane/metadata/android/ta/changelogs/790.txt index 1c9236d44a9..20ddb787cc7 100644 --- a/fastlane/metadata/android/ta/changelogs/790.txt +++ b/fastlane/metadata/android/ta/changelogs/790.txt @@ -1,14 +1,14 @@ -மேம்படுத்தப்பட்டது - Bland பார்வையற்றவர்களுக்கான அணுகலை மேம்படுத்த கூடுதல் தலைப்புகளைச் சேர்க்கவும் #2655 - பதிவிறக்கம் பதிவிறக்க கோப்புறையின் மொழியை மிகவும் சீரானதாகவும், தெளிவற்றதாகவும் மாற்றவும் #2637 +மேம்படுத்தப்பட்டது +• பார்வையற்றவர்களுக்கான அணுகலை மேம்படுத்த மேலும் தலைப்புகளைச் சேர்க்கவும் #2655 +• பதிவிறக்க கோப்புறை அமைப்பை மிகவும் சீரானதாகவும் தெளிவற்றதாகவும் மாற்றவும் #2637 - சரி - The தொகுதியில் கடைசி பைட் பதிவிறக்கம் செய்யப்பட்டதா என்று சரிபார்க்கவும் #2646 - ஒளிதோற்றம் வீடியோ விவரம் துண்டு #2672 இல் நிலையான ச்க்ரோலிங் - Teark இரட்டை தேடல் தெளிவான பெட்டி அனிமேசன்களை ஒரு #2695 க்கு அகற்று - • [சவுண்ட்க்ளூட்] கிளையன்ட்_ஐடி பிரித்தெடுத்தல் #2745 ஐ சரிசெய்யவும் +சரி செய்யப்பட்டது +• பிளாக்கில் கடைசி பைட் #2646 பதிவிறக்கம் செய்யப்பட்டுள்ளதா எனச் சரிபார்க்கவும் +• வீடியோ விவரத் துண்டு #2672 இல் ச்க்ரோலிங் சரி செய்யப்பட்டது +• இரட்டை தேடல் தெளிவான பெட்டி அனிமேசன்களை #2695 க்கு அகற்றவும் +• [SoundCloud] கிளையன்ட்_ஐடி பிரித்தெடுத்தலை சரிசெய்யவும் #2745 - வளர்ச்சி - புதிய நியூபிபீக்ச்ட்ராக்டரிடமிருந்து பெறப்பட்ட காணாமல் போன சார்புகளை நியூபைப் #2535 இல் சேர்க்கவும் - And Androidx #2685 க்கு இடம்பெயர்வு - Ex எக்சோப்ளேயருக்கு புதுப்பிப்பு 2.10.6 #2697, #2736 +வளர்ச்சி +• NewPipeExtractor இலிருந்து பெறப்பட்ட விடுபட்ட சார்புகளை NewPipe #2535 இல் சேர்க்கவும் +• AndroidX #2685க்கு மாற்றவும் +• ExoPlayer 2.10.6 #2697, #2736 க்கு புதுப்பிக்கவும் diff --git a/fastlane/metadata/android/ta/changelogs/800.txt b/fastlane/metadata/android/ta/changelogs/800.txt index 9108f0dea96..e67680227ca 100644 --- a/fastlane/metadata/android/ta/changelogs/800.txt +++ b/fastlane/metadata/android/ta/changelogs/800.txt @@ -1,27 +1,27 @@ -புதியது - P பி 2 பி (#2201) இல்லாமல் PEERTUBE உதவி [பீட்டா]: - ஒப்பி Peertube நிகழ்வுகளிலிருந்து வீடியோக்களைப் பார்த்து பதிவிறக்கவும் - Per முழுமையான PEERTUBE உலகத்தை அணுக அமைப்புகளில் நிகழ்வுகளைச் சேர்க்கவும் - And ஆண்ட்ராய்டு 4.4 மற்றும் 7.1 இல் எச்எச்எல் ஏண்ட்சேக்குகளில் சிக்கல்கள் இருக்கலாம், இதன் விளைவாக பிணைய பிழையின் விளைவாக சில நிகழ்வுகளை அணுகலாம். +புதியது +• P2P இல்லாமல் PeerTube உதவி (#2201) [பீட்டா]: +◦ PeerTube நிகழ்வுகளில் இருந்து வீடியோக்களைப் பார்க்கவும் பதிவிறக்கவும் +◦ முழுமையான PeerTube உலகத்தை அணுக அமைப்புகளில் நிகழ்வுகளைச் சேர்க்கவும் +◦ ஆண்ட்ராய்டு 4.4 மற்றும் 7.1 இல் SSL ஏண்ட்சேக்குகளில் சிக்கல்கள் இருக்கலாம், சில நிகழ்வுகளை அணுகும்போது பிணையப் பிழை ஏற்படலாம். - • பதிவிறக்குபவர் (#2679): - பதிவிறக்கம் பதிவிறக்க ETA ஐக் கணக்கிடுங்கள் - OP OGG ஆக OPUS (WEBM கோப்புகள்) பதிவிறக்கவும் - Pac நீண்ட இடைநிறுத்தத்திற்குப் பிறகு பதிவிறக்கங்களை மீண்டும் தொடங்குவதற்கான காலாவதியான பதிவிறக்க இணைப்புகளை மீட்டெடுக்கவும் +• பதிவிறக்குபவர் (#2679): +◦ பதிவிறக்க ETAஐக் கணக்கிடவும் +◦ ஓபசை (வெப்எம் கோப்புகள்) ogg ஆகப் பதிவிறக்கவும் +◦ நீண்ட இடைநிறுத்தத்திற்குப் பிறகு பதிவிறக்கங்களை மீண்டும் தொடங்க, காலாவதியான பதிவிறக்க இணைப்புகளை மீட்டெடுக்கவும் - மேம்படுத்தப்பட்டது - Contase விருப்பமான உள்ளடக்க நாட்டில் ஏற்படும் மாற்றங்கள் குறித்து கியோச்கிராக்மென்ட்டை அறிந்து கொள்ளுங்கள் மற்றும் அனைத்து முக்கிய தாவல்களின் செயல்திறனை மேம்படுத்தவும் #2742 - Tract பிரித்தெடுத்தல் #2713 இலிருந்து புதிய உள்ளூர்மயமாக்கல் மற்றும் பதிவிறக்க செயலாக்கங்களைப் பயன்படுத்தவும் - • "இயல்புநிலை கியோச்க்" சரத்தை மொழிபெயர்க்கக்கூடியதாக மாற்றவும் - • கருப்பு கருப்பொருள் #2569 க்கான கருப்பு வழிசெலுத்தல் பட்டி +மேம்படுத்தப்பட்டது +• விருப்பமான உள்ளடக்க நாட்டில் ஏற்படும் மாற்றங்கள் குறித்து கியோச்க் ஃபிராக்மென்ட்டுக்கு தெரியப்படுத்தவும் மற்றும் அனைத்து முக்கிய தாவல்களின் செயல்திறனை மேம்படுத்தவும் #2742 +• எக்ச்ட்ராக்டர் #2713 இலிருந்து புதிய உள்ளூர்மயமாக்கல் மற்றும் டவுன்லோடர் செயலாக்கங்களைப் பயன்படுத்தவும் +• "இயல்புநிலை கியோச்க்" சரத்தை மொழிபெயர்க்கலாம் +• கருப்பு கருப்பொருள் #2569க்கான கருப்பு வழிசெலுத்தல் பட்டி - சரி - Pop பாப்அப் பிளேயரை நகர்த்தும்போது பாப்அப் பிளேயரை நகர்த்த முடியாத ஒரு பிழை சரி செய்யப்பட்டது, பாப்அப் பிளேயரை நகர்த்தும்போது #2772 - Allial ஒரு பதிவேற்றியைக் காணாமல் பிளேலிச்ட்களை அனுமதிக்கவும், இந்த சிக்கல் தொடர்பான செயலிழப்புகளை சரிசெய்யவும் #2724, டீம்நியூபைப்/நியூபிபீக்ச்ட்ராக்டர் #219 - And ஆண்ட்ராய்டு 4.4 சாதனங்களில் (API 19/KITKAT) TLS1.1/1.2 ஐ இயக்குதல் TLS ஏண்ட்சேக்கை MEDIACCC மற்றும் சில PEERTUBE நிகழ்வுகள் #2792 - • [சவுண்ட்க்ளூட்] நிலையான கிளையண்ட்_ஐடி பிரித்தெடுத்தல் டீம்நியூபைப்/நியூபிபீக்ச்ட்ராக்டர்#217 - • [சவுண்ட்க்ளூட்] ஆடியோ ச்ட்ரீம் பிரித்தெடுத்தலை சரிசெய்யவும் +சரி செய்யப்பட்டது +• மேல்தோன்றல் பிளேயரை நகர்த்தும்போது மற்றொரு விரலை வைத்தால் மேல்தோன்றல் பிளேயரை நகர்த்த முடியாத பிழை சரி செய்யப்பட்டது #2772 +• பதிவேற்றியவரைக் காணாத பிளேலிச்ட்களை அனுமதிக்கவும் மேலும் இந்தச் சிக்கல் தொடர்பான செயலிழப்புகளைச் சரிசெய்யவும் #2724, TeamNewPipe/NewPipeExtractor#219 +• MediaCCC மற்றும் சில PeerTube நிகழ்வுகளுடன் TLS ஏண்ட்சேக்கை சரிசெய்ய Android 4.4 சாதனங்களில் (API 19/KitKat) TLS1.1/1.2 ஐ இயக்குகிறது #2792 +• [SoundCloud] நிலையான கிளையன்ட்_ஐடி பிரித்தெடுத்தல் TeamNewPipe/NewPipeExtractor#217 +• [SoundCloud] ஆடியோ ச்ட்ரீம் பிரித்தெடுத்தலை சரிசெய்யவும் - வளர்ச்சி - Ex எக்சோப்ளேயரை 2.10.8 #2791, #2816 க்கு புதுப்பிக்கவும் - • கிரேடில் 3.5.1 ஆகப் புதுப்பித்து, கோட்லின் உதவி #2714 ஐச் சேர்க்கவும் +வளர்ச்சி +• ExoPlayer ஐ 2.10.8 #2791, #2816 க்கு புதுப்பிக்கவும் +• Gradleஐ 3.5.1க்கு புதுப்பித்து, Kotlin ஆதரவைச் சேர்க்கவும் #2714 diff --git a/fastlane/metadata/android/ta/changelogs/810.txt b/fastlane/metadata/android/ta/changelogs/810.txt index b4a697b6e7b..205cc5b8e7d 100644 --- a/fastlane/metadata/android/ta/changelogs/810.txt +++ b/fastlane/metadata/android/ta/changelogs/810.txt @@ -1,19 +1,19 @@ -புதியது - The பின்னணியில் விளையாடும்போது பூட்டுத் திரையில் வீடியோ சிறுபடத்தைக் காட்டுங்கள் +புதியது +• பின்னணியில் விளையாடும்போது பூட்டுத் திரையில் வீடியோ சிறுபடத்தைக் காட்டு - மேம்படுத்தப்பட்டது - Fact பின்னணி / பாப்அப் பொத்தானை நீண்ட நேரம் அழுத்தும்போது வரிசைப்படுத்த உள்ளக பிளேலிச்ட்டைச் சேர்க்கவும் - Page முதன்மையான பக்க தாவல்களை உருட்டலாம் மற்றும் ஒரு தாவல் மட்டுமே இருக்கும்போது மறைக்கவும் - Player பின்னணி பிளேயரில் அறிவிப்பு சிறு புதுப்பிப்புகளின் அளவைக் கட்டுப்படுத்துங்கள் - Local வெற்று உள்ளக பிளேலிச்ட்களுக்கு போலி சிறு உருவத்தைச் சேர்க்கவும் - *. - Dopstion பதிவிறக்கம் செய்யப்பட்ட கோப்புகளை நீக்க பொத்தானைச் சேர்க்கவும் அல்லது வரலாற்றை "பதிவிறக்கங்களில்" பதிவிறக்கவும் - • [YouTube] /c /groldened_url சேனல் இணைப்புகளுக்கு ஆதரவைச் சேர்க்கவும் +மேம்படுத்தப்பட்டது +• பின்னணி / மேல்தோன்றல் பட்டனை நீண்ட நேரம் அழுத்தும் போது உள்ளக பிளேலிச்ட்டை வரிசையில் சேர்க்கவும் +• முதன்மையான பக்க தாவல்களை ச்க்ரோல் செய்யக்கூடியதாக மாற்றவும் மற்றும் ஒரே ஒரு தாவல் இருக்கும் போது மறைக்கவும் +• பின்னணி பிளேயரில் அறிவிப்பு சிறுபட புதுப்பிப்புகளின் வரம்பு +• காலியான உள்ளக பிளேலிச்ட்களுக்கு போலி சிறுபடத்தைச் சேர்க்கவும் +• *.webm க்குப் பதிலாக *.opus கோப்பு நீட்டிப்பைப் பயன்படுத்தவும், பதிவிறக்க கீழ்தோன்றும் இடத்தில் "WebM Opus" என்பதற்குப் பதிலாக வடிவமைப்பு லேபிளில் "opus" என்பதைக் காட்டவும் +• "பதிவிறக்கங்களில்" பதிவிறக்கப்பட்ட கோப்புகள் அல்லது பதிவிறக்க வரலாற்றை நீக்க பொத்தானைச் சேர்க்கவும் +• [YouTube] /c/shortened_url சேனல் இணைப்புகளுக்கு ஆதரவைச் சேர்க்கவும் - சரி - புழம்பு நியூ பைப்பிற்கு ஒரு வீடியோவைப் பகிர்ந்துகொண்டு அதன் ச்ட்ரீம்களை நேரடியாக பதிவிறக்கும் போது பல சிக்கல்கள் சரி செய்யப்பட்டன - • நிலையான பிளேயர் அதன் உருவாக்கும் நூலில் இருந்து அணுகல் - • நிலையான தேடல் முடிவு பேசிங் - • [YouTube] NPE ஐ ஏற்படுத்தும் பூச்யத்தில் நிலையான மாறுதல் - • [YouTube] ஒரு Invidio.us முகவரி ஐத் திறக்கும்போது நிலையான பார்வை கருத்துகள் - • [சவுண்ட்க்ளூட்] புதுப்பிக்கப்பட்ட கிளையண்ட்_ஐடி +சரி செய்யப்பட்டது +• நியூபைப்பில் வீடியோவைப் பகிரும்போதும் அதன் ச்ட்ரீம்களை நேரடியாகப் பதிவிறக்கும்போதும் பல சிக்கல்கள் சரி செய்யப்பட்டன +• அதன் உருவாக்கத் தொடரிலிருந்து நிலையான பிளேயர் அணுகல் +• நிலையான தேடல் முடிவு பக்கமாக்கல் +• [YouTube] NPE க்கு காரணமான பூச்யத்தில் மாறுதல் நிலையானது +• [YouTube] invidio.us urlஐத் திறக்கும்போது கருத்துகளைப் பார்ப்பது நிலையானது +• [SoundCloud] updated client_id diff --git a/fastlane/metadata/android/ta/changelogs/840.txt b/fastlane/metadata/android/ta/changelogs/840.txt index 44eed054d94..50f999f871f 100644 --- a/fastlane/metadata/android/ta/changelogs/840.txt +++ b/fastlane/metadata/android/ta/changelogs/840.txt @@ -1,22 +1,22 @@ -புதியது - பயன்பாடு பயன்பாட்டு மொழியை மாற்ற மொழி தேர்வாளரைச் சேர்த்தது - Mally பிளேயர் மடக்கக்கூடிய மெனுவுக்கு கோடி பொத்தானை அனுப்பவும் - Press நீண்ட பத்திரிகையில் கருத்துகளை நகலெடுக்கும் திறன் சேர்க்கப்பட்டது +புதியது +• பயன்பாட்டு மொழியை மாற்ற, மொழி தேர்வி சேர்க்கப்பட்டது +• பிளேயர் மடிக்கக்கூடிய பட்டியலில் 'கோடிக்கு அனுப்பு' பட்டன் சேர்க்கப்பட்டது +• நீண்ட அழுத்தத்தில் கருத்துகளை நகலெடுக்கும் திறன் சேர்க்கப்பட்டது - மேம்படுத்தப்பட்டது - Rececaptaca செயல்பாட்டை சரிசெய்து, பெறப்பட்ட குக்கீகளை சரியாக சேமிக்கவும் - பெறுநர் டி டாட்-மெனுவை அலமாரிக்கு ஆதரவாக மற்றும் மறைக்க வரலாறு பொத்தானை அமைப்புகளில் வாட்ச் வரலாறு இயக்கப்படாதபோது - And ஆண்ட்ராய்டு 6 மற்றும் அதற்குப் பிறகு அமைப்புகளில் மற்ற பயன்பாடுகளின் இசைவு மீது காட்சி கேட்கவும் - Bouk புக்மார்க்கெட் பிராக்மென்ட்டில் நீண்ட காலமாக சொடுக்கு செய்வதன் மூலம் உள்ளக பிளேலிச்ட்டை மறுபெயரிடுங்கள் - Per பல்வேறு PEERTUBE மேம்பாடுகள் - • பல ஆங்கில மூல சரங்களை மேம்படுத்தியது +மேம்படுத்தப்பட்டது +• ReCaptcha செயல்பாட்டைச் சரிசெய்து, பெறப்பட்ட குக்கீகளை சரியாகச் சேமிக்கவும் +• டிராயருக்கு ஆதரவாக புள்ளி-மெனு அகற்றப்பட்டது மற்றும் அமைப்புகளில் பார்வை வரலாறு இயக்கப்படாதபோது வரலாற்றை மறைக்கும் பட்டன் +• ஆண்ட்ராய்டு 6 மற்றும் அதற்குப் பிந்தைய பதிப்பில் உள்ள அமைப்புகளில், பிற ஆப்சைக் காட்ட இசைவு கேட்கவும் +• புத்தகக்குறி ஃபிராக்மென்ட்டில் நீண்ட நேரம் சொடுக்கு செய்வதன் மூலம் உள்ளக பிளேலிச்ட்டின் பெயரை மாற்றவும் +• பல்வேறு PeerTube மேம்பாடுகள் +• பல ஆங்கில மூல சரங்கள் மேம்படுத்தப்பட்டது - சரி - • நிலையான பிளேயர் மீண்டும் தொடங்குகிறது, இருப்பினும் இது "பயன்பாட்டு சுவிட்சைக் குறைத்தல்" இயக்கப்பட்டிருக்கும்போது, புதிய அளவைக் குறைக்கும்போது அது இடைநிறுத்தப்படுகிறது - The சைகைக்கு ஆரம்ப பிரகாச மதிப்பை சரிசெய்யவும் - • நிலையான .SRT வசன பதிவிறக்கங்கள் அனைத்து வரி இடைவெளிகளும் இல்லை - And சில ஆண்ட்ராய்டு 5 சாதனங்கள் CTF இணக்கமானவை அல்ல என்பதால் SD கார்டுக்கு நிலையான பதிவிறக்கம் தோல்வியடைகிறது - And ஆண்ட்ராய்டு Kitkat இல் நிலையான பதிவிறக்குதல் - • நிலையான ஊழல் வீடியோ .mp4 கோப்பு ஆடியோ கோப்பாக அங்கீகரிக்கப்பட்டுள்ளது - சீன மொழி குறியீடுகள் உட்பட பல உள்ளூர்மயமாக்கல் சிக்கல்கள் நிலையானவை - • [YouTube] விளக்கத்தில் உள்ள நேர முத்திரைகள் மீண்டும் சொடுக்கு செய்யக்கூடியவை +சரி செய்யப்பட்டது +• ஃபிக்ச்டு பிளேயர் மீண்டும் தொடங்கும், இருப்பினும் "மினிமைச் ஆன் ஆப் ஆப் ச்விட்ச்" விருப்பம் இயக்கப்பட்டு, நியூபைப் சிறிதாக்கப்பட்டால் அது இடைநிறுத்தப்பட்டது. +• சைகைக்கான ஆரம்ப பிரகாச மதிப்பை சரிசெய்யவும் +• நிலையான .srt வசனப் பதிவிறக்கங்கள் அனைத்து வரி முறிவுகளையும் கொண்டிருக்கவில்லை +• சில Android 5 சாதனங்கள் CTF இணங்காததால் SD கார்டில் நிலையான பதிவிறக்கம் தோல்வியடைந்தது +• ஆண்ட்ராய்டு KitKat இல் பதிவிறக்குவது நிலையானது +• நிலையான சிதைந்த வீடியோ .mp4 கோப்பு ஆடியோ கோப்பாக அங்கீகரிக்கப்படுகிறது +• தவறான சீன மொழி குறியீடுகள் உட்பட பல உள்ளூர்மயமாக்கல் சிக்கல்கள் சரி செய்யப்பட்டன +• [YouTube] விளக்கத்தில் உள்ள நேர முத்திரைகள் மீண்டும் சொடுக்கு செய்யலாம் diff --git a/fastlane/metadata/android/ta/changelogs/900.txt b/fastlane/metadata/android/ta/changelogs/900.txt index 5cd4788ddc6..d2e534eec47 100644 --- a/fastlane/metadata/android/ta/changelogs/900.txt +++ b/fastlane/metadata/android/ta/changelogs/900.txt @@ -1,14 +1,14 @@ -புதியது - • சந்தா குழுக்கள் மற்றும் வரிசைப்படுத்தப்பட்ட ஊட்டங்கள் - • வீரர்களில் முடக்கு பொத்தான் +புதியது +• சந்தா குழுக்கள் மற்றும் வரிசைப்படுத்தப்பட்ட ஊட்டங்கள் +• பிளேயர்களில் முடக்கு பொத்தான் - மேம்படுத்தப்பட்டது - Music இசை.youtube.com மற்றும் media.ccc.de இணைப்புகளை நியூபைப்பில் திறக்க அனுமதிக்கவும் - Settements தோற்றத்திலிருந்து உள்ளடக்கத்திற்கு இரண்டு அமைப்புகளை இடமாற்றம் செய்யுங்கள் - Seecediveditional 5, 15, 25 நொடி தேடு விருப்பங்களை மறைக்கவும். +மேம்படுத்தப்பட்டது +• NewPipe இல் music.youtube.com மற்றும் media.ccc.de இணைப்புகளைத் திறக்க அனுமதிக்கவும் +• தோற்றத்தில் இருந்து உள்ளடக்கத்திற்கு இரண்டு அமைப்புகளை மாற்றவும் +• inexact search இயக்கப்பட்டிருந்தால், 5, 15, 25 second தேடல் விருப்பங்களை மறை - சரி - விரலிடைத் தோல் சில வெப்எம் வீடியோக்கள் தேட முடியாது - And ஆண்ட்ராய்டில் தரவுத்தள காப்புப்பிரதி ப - பதிவிறக்கம் செய்யப்பட்ட கோப்பைப் பகிரும்போது செயலிழப்பு - You டன் யூடியூப் பிரித்தெடுத்தல் சிக்கல் மற்றும் பல ... +சரி செய்யப்பட்டது +• சில WebM வீடியோக்களை தேட முடியாது +• ஆண்ட்ராய்டு P இல் தரவுத்தள காப்புப்பிரதி +• பதிவிறக்கம் செய்யப்பட்ட கோப்பைப் பகிரும்போது செயலிழக்கும் +• டன் YouTube பிரித்தெடுத்தல் சிக்கல் மற்றும் பல ... diff --git a/fastlane/metadata/android/ta/changelogs/930.txt b/fastlane/metadata/android/ta/changelogs/930.txt index 7635500bd87..5cb7a842579 100644 --- a/fastlane/metadata/android/ta/changelogs/930.txt +++ b/fastlane/metadata/android/ta/changelogs/930.txt @@ -1,19 +1,19 @@ -புதியது - You யூடியூப் இசையில் தேடுங்கள் - And அடிப்படை ஆண்ட்ராய்டு டிவி ஆதரவு +புதியது +• YouTube Music இல் தேடவும் +• அடிப்படை ஆண்ட்ராய்டு TV உதவி - மேம்படுத்தப்பட்டது - அனைத்தும் உள்ளக பிளேலிச்ட்டிலிருந்து பார்த்த அனைத்து வீடியோக்களையும் அகற்றும் திறனைச் சேர்த்தது - Contence விபத்துக்கு பதிலாக உள்ளடக்கம் இன்னும் ஆதரிக்கப்படாதபோது செய்தியைக் காட்டு - Pop மேம்பட்ட பாப்அப் பிளேயர் பிஞ்ச் சைகைகளுடன் மறுஅளவிடுகிறது - Sananment சேனலில் பின்னணி மற்றும் பாப்அப் பொத்தான்களில் நீண்ட அழுத்தத்தில் உள்ள ச்ட்ரீம்கள் - Tra டிராயர் தலைப்பு தலைப்பின் மேம்பட்ட அளவு கையாளுதல் +மேம்படுத்தப்பட்டது +• உள்ளக பிளேலிச்ட்டில் இருந்து பார்த்த அனைத்து வீடியோக்களையும் அகற்றும் திறன் சேர்க்கப்பட்டது +• செயலிழப்பதற்குப் பதிலாக உள்ளடக்கம் இன்னும் ஆதரிக்கப்படாதபோது செய்தியைக் காட்டு +• பிஞ்ச் சைகைகள் மூலம் மேம்படுத்தப்பட்ட மேல்தோன்றல் பிளேயர் அளவு +• சேனலில் பின்னணி மற்றும் மேல்தோன்றல் பொத்தான்களில் நீண்ட நேரம் அழுத்தினால் ச்ட்ரீம்களை என்கியூவில் வைக்கவும் +• டிராயர் எடர் தலைப்பின் மேம்படுத்தப்பட்ட அளவு கையாளுதல் - சரி - Age நிலையான அகவை தடைசெய்யப்பட்ட உள்ளடக்க அமைப்பு செயல்படவில்லை - • சில வகையான ரெக்காப்டாக்கள் சரி செய்யப்பட்டன - B புக்மார்க்குகளைத் திறக்கும்போது நிலையான செயலிழப்பு பிளேலிச்ட் `NULL` - பிணையம் பிணையம் தொடர்பான விதிவிலக்குகளின் நிலையான கண்டறிதல் - Sub சந்தாக்கள் துண்டில் குழு வரிசை பொத்தானின் நிலையான தெரிவுநிலை +சரி செய்யப்பட்டது +• நிர்ணயிக்கப்பட்ட அகவை வரம்பிடப்பட்ட உள்ளடக்க அமைப்பு வேலை செய்யவில்லை +• குறிப்பிட்ட வகையான reCAPTCHAகள் சரி செய்யப்பட்டன +• பிளேலிச்ட் `பூச்யமாக' இருக்கும் போது புக்மார்க்குகளைத் திறக்கும்போது நிலையான செயலிழப்பு +• பிணையம் தொடர்பான விதிவிலக்குகளை நிலையான கண்டறிதல் +• சந்தாத் துண்டில் குழு வரிசை பட்டனின் நிலையான தெரிவுநிலை - மேலும் +மேலும் diff --git a/fastlane/metadata/android/ta/changelogs/940.txt b/fastlane/metadata/android/ta/changelogs/940.txt index 738a70d1b71..cea749c098c 100644 --- a/fastlane/metadata/android/ta/changelogs/940.txt +++ b/fastlane/metadata/android/ta/changelogs/940.txt @@ -1,16 +1,16 @@ -புதியது - Chound சவுண்ட்க்ளூட் கருத்துகளுக்கான ஆதரவைச் சேர்க்கவும் - You யூடியூப் தடைசெய்யப்பட்ட பயன்முறை அமைப்பைச் சேர்க்கவும் - The Peretube பெற்றோர் சேனல் விவரங்களைக் காட்டு +புதியது +• SoundCloud கருத்துகளுக்கான ஆதரவைச் சேர்க்கவும் +• YouTube கட்டுப்படுத்தப்பட்ட பயன்முறை அமைப்பைச் சேர்க்கவும் +• PeerTube பெற்றோர் சேனல் விவரங்களைக் காட்டு - மேம்படுத்தப்பட்டது - Surects உதவி சேவைகளுக்கு மட்டுமே கோர் பொத்தானைக் காட்டு - Navigational வழிசெலுத்தல் பார் அல்லது ச்டேட்டச்பாரில் தொடங்கும் பிளேயர் சைகைகள் - Retry பணி வண்ணத்தின் அடிப்படையில் மீண்டும் மீண்டும் மாற்றவும் மற்றும் குழுசேர் பொத்தான்கள் பின்னணி வண்ணம் +மேம்படுத்தப்பட்டது +• ஆதரிக்கப்படும் சேவைகளுக்கு மட்டும் கோர் பட்டனைக் காட்டு +• NavigationBar அல்லது StatusBar இல் தொடங்கும் பிளேயர் சைகைகளைத் தடுக்கவும் +• பணி நிறத்தின் அடிப்படையில் மீண்டும் முயற்சிக்கவும் & குழுசேரவும் பொத்தான்களின் பின்னணி நிறத்தை மாற்றவும் - சரி - The பதிவிறக்கம் உரையாடல் முடக்கம் சரிசெய்யவும் - • உலாவி பொத்தானைத் திறக்கவும் இப்போது உலாவியில் உண்மையில் திறக்கிறது - வீடியோக்களைத் திறப்பதில் விபத்தை சரிசெய்யவும், "இந்த ச்ட்ரீமை இயக்க முடியவில்லை" +சரி செய்யப்பட்டது +• பதிவிறக்க உரையாடல் முடக்கத்தை சரிசெய்யவும் +• உலாவியில் திற பொத்தான் இப்போது உண்மையில் உலாவியில் திறக்கும் +• வீடியோக்களைத் திறப்பதில் ஏற்படும் செயலிழப்பு மற்றும் "இந்த ச்ட்ரீமை இயக்க முடியவில்லை" - மேலும் +மேலும் diff --git a/fastlane/metadata/android/ta/changelogs/951.txt b/fastlane/metadata/android/ta/changelogs/951.txt index 5059ce78a94..edb9c6c74a7 100644 --- a/fastlane/metadata/android/ta/changelogs/951.txt +++ b/fastlane/metadata/android/ta/changelogs/951.txt @@ -1,17 +1,17 @@ -புதியது - குழு ஊட்டக் குழு உரையாடலில் சந்தா தேர்வாளருக்கான தேடலைச் சேர்க்கவும் - குழு குழுவாகக் காட்ட ஊட்டக் குழு உரையாடலில் வடிகட்டியைச் சேர்க்கவும் - Page முதன்மையான பக்கத்தில் பிளேலிச்ட் தாவலைச் சேர்க்கவும் - Pact பின்னணி/பாப்-அப் பிளேயர் வரிசையில் வேகமாக முன்னோக்கி/முன்னாடி - தேடல் தேடல் ஆலோசனையைக் காண்பி: நீங்கள் சொல்வது மற்றும் முடிவைக் காட்டினீர்களா? +புதியது +• ஊட்டக் குழு உரையாடலில் சந்தா தேர்விக்கான தேடலைச் சேர்க்கவும் +• தொகுக்கப்படாத சந்தாக்களை மட்டும் காட்ட ஊட்டக் குழு உரையாடலில் வடிப்பானைச் சேர்க்கவும் +• முதன்மைப் பக்கத்தில் பிளேலிச்ட் தாவலைச் சேர்க்கவும் +• பின்னணி/பாப்-அப் பிளேயர் வரிசையில் வேகமாக முன்னோக்கி/ரீவைண்ட் +• தேடல் பரிந்துரையைக் காட்டு: அதற்கான முடிவைக் காட்டுகிறீர்களா? - மேம்படுத்தப்பட்டது - Application மக்சட் கோப்புகளில் பயன்பாட்டு மெட்டாடேட்டாவை எழுதுவதை விடுங்கள் - தோல்வியுற்ற நீரோடைகளை வரிசையில் இருந்து அகற்ற வேண்டாம் - பெறுநர் கருவிப்பட்டி வண்ணத்துடன் பொருந்தக்கூடிய நிலை பட்டி வண்ணத்தைப் புதுப்பிக்கவும் +மேம்படுத்தப்பட்டது +• கலவையான கோப்புகளில் பயன்பாட்டு மெட்டாடேட்டாவை எழுதுவதை கைவிடவும் +• தோல்வியுற்ற ச்ட்ரீம்களை வரிசையில் இருந்து அகற்ற வேண்டாம் +• கருவிப்பட்டியின் நிறத்துடன் பொருந்த, நிலைப் பட்டியின் நிறத்தைப் புதுப்பிக்கவும் - சரி - • மிதக்கும் புள்ளி ஒட்டுமொத்த பிழைகள் காரணமாக நிலையான ஆடியோ/வீடியோ டிசின்க் - • [PEERTUBE] நீக்கப்பட்ட கருத்துகளைக் கையாளவும் +சரி செய்யப்பட்டது +• ஃப்ளோட்டிங் பாயின்ட் க்யூமுலேட்டிவ் பிழைகளால் ஏற்படும் நிலையான ஆடியோ/வீடியோ ஒத்திசைவு +• [PeerTube] நீக்கப்பட்ட கருத்துகளைக் கையாளவும் - மேலும் +மேலும் diff --git a/fastlane/metadata/android/ta/changelogs/954.txt b/fastlane/metadata/android/ta/changelogs/954.txt index 5943b457e34..c902e7a5b89 100644 --- a/fastlane/metadata/android/ta/changelogs/954.txt +++ b/fastlane/metadata/android/ta/changelogs/954.txt @@ -1,9 +1,9 @@ -Applic புதிய பயன்பாட்டு பணிப்பாய்வு: விவரம் பக்கத்தில் வீடியோக்களை இயக்கவும், பிளேயரைக் குறைக்க ச்வைப் செய்யவும் - • மீடியாச்டைல் அறிவிப்புகள்: அறிவிப்புகள், செயல்திறன் மேம்பாடுகள் ஆகியவற்றில் தனிப்பயனாக்கக்கூடிய செயல்கள் - பூச்சி டெச்க்டாப் பயன்பாடாக நியூபிப்பைப் பயன்படுத்தும் போது அடிப்படை மறுஅளவிடுதல் +• புதிய பயன்பாட்டுப் பணிப்பாய்வு: விவரப் பக்கத்தில் வீடியோக்களை இயக்கவும், பிளேயரைக் குறைக்க கீழே ச்வைப் செய்யவும் +• MediaStyle அறிவிப்புகள்: அறிவிப்புகளில் தனிப்பயனாக்கக்கூடிய செயல்கள், செயல்திறன் மேம்பாடுகள் +• டெச்க்டாப் பயன்பாடாக NewPipe ஐப் பயன்படுத்தும் போது அடிப்படை மறுஅளவிடுதல் - ஆதரிக்கப்படாத முகவரி சிற்றுண்டி விசயத்தில் திறந்த விருப்பங்களுடன் உரையாடலைக் காட்டு - Re தொலைதூரங்களை பெற முடியாதபோது தேடல் பரிந்துரை அனுபவத்தை மேம்படுத்தவும் - இயல்புநிலை இயல்புநிலை வீடியோ தகுதி 720p60 (பயன்பாட்டில் உள்ள பிளேயர்) மற்றும் 480p (பாப்-அப் பிளேயர்) ஆக அதிகரித்தது +• ஆதரிக்கப்படாத URL டோச்ட்டின் போது திறந்த விருப்பங்களுடன் உரையாடலைக் காட்டு +• தொலைவில் உள்ளவற்றைப் பெற முடியாதபோது, தேடல் பரிந்துரை அனுபவத்தை மேம்படுத்தவும் +• இயல்புநிலை வீடியோ தகுதி 720p60 (இன்-ஆப் பிளேயர்) மற்றும் 480p (பாப்-அப் பிளேயர்) ஆக அதிகரிக்கப்பட்டது - • டன் பிழை திருத்தங்கள் மற்றும் பல +• பல பிழை திருத்தங்கள் மற்றும் பல diff --git a/fastlane/metadata/android/ta/changelogs/957.txt b/fastlane/metadata/android/ta/changelogs/957.txt index 3b4c1ea7e2b..c9e57658dd9 100644 --- a/fastlane/metadata/android/ta/changelogs/957.txt +++ b/fastlane/metadata/android/ta/changelogs/957.txt @@ -1,10 +1,10 @@ -என் குறிப்பிட்ட enqueue செயல்களை ஒன்றில் ஒன்றிணைக்கவும் - Player வீரரை மூடி இரண்டு விரல் சைகை - Rec ரெகாப்ட்சா குக்கீகளை அழிக்க அனுமதிக்கவும் - அறிவிப்பை வண்ணமயமாக்காத விருப்பம் - புதிய நியூபைப் மற்றும் பிற முரண்பாடுகளைப் பகிரும்போது எல்லையற்ற இடையக, தரமற்ற நடத்தை ஆகியவற்றை சரிசெய்ய வீடியோ விவரங்கள் எவ்வாறு திறக்கப்படுகின்றன என்பதை மேம்படுத்தவும் - You யூடியூப் வீடியோக்களை விரைவுபடுத்தி, அகவை தடைசெய்யப்பட்டவற்றை சரிசெய்யவும் - Ford வேகமான முன்னோக்கி/முன்னோடிகளில் செயலிழப்பை சரிசெய்யவும் - Promang சிறு உருவங்களை இழுப்பதன் மூலம் பட்டியல்களை மறுசீரமைக்க வேண்டாம் - Pop எப்போதும் பாப்அப் பண்புகளை நினைவில் கொள்ளுங்கள் - Sandandali மொழியைச் சேர்க்கவும் +• குறிப்பிட்ட வரிசை செயல்களை ஒன்றாக இணைக்கவும் +• பிளேயரை மூட இரண்டு விரல் சைகை +• reCAPTCHA குக்கீகளை அழிக்க அனுமதிக்கவும் +• அறிவிப்பை வண்ணமாக்காத விருப்பம் +• நியூபைப்பில் பகிரும் போது எல்லையற்ற பஃபரிங், தரமற்ற நடத்தை மற்றும் பிற முரண்பாடுகளை சரிசெய்ய வீடியோ விவரங்கள் எவ்வாறு திறக்கப்படுகின்றன என்பதை மேம்படுத்தவும் +• YouTube வீடியோக்களை விரைவுபடுத்துங்கள் மற்றும் அகவை வரம்புக்குட்பட்டவற்றை சரிசெய்யவும் +• வேகமாக முன்னோக்கி/முன்னோக்கிச் செல்லும் போது செயலிழப்பை சரிசெய்யவும் +• சிறுபடங்களை இழுத்து பட்டியல்களை மறுசீரமைக்க வேண்டாம் +• மேல்தோன்றல் பண்புகளை எப்போதும் நினைவில் கொள்ளுங்கள் +• சந்தாலி மொழியைச் சேர்க்கவும் diff --git a/fastlane/metadata/android/ta/changelogs/958.txt b/fastlane/metadata/android/ta/changelogs/958.txt index 6d9b9e041ea..71f673627f9 100644 --- a/fastlane/metadata/android/ta/changelogs/958.txt +++ b/fastlane/metadata/android/ta/changelogs/958.txt @@ -1,15 +1,15 @@ -புதிய மற்றும் மேம்பட்ட: - The பூட்டுத் திரையில் சிறுபடத்தை மறைக்க மீண்டும் சேர்க்கப்பட்ட விருப்பம் - தீவனம் தீவனத்தை புதுப்பிக்க இழுக்கவும் - Lical உள்ளக பட்டியல்களைப் பெறும்போது மேம்பட்ட செயல்திறன் +புதியது மற்றும் மேம்படுத்தப்பட்டது: +• பூட்டுத் திரையில் சிறுபடத்தை மறைக்க விருப்பம் மீண்டும் சேர்க்கப்பட்டது +• ஊட்டத்தைப் புதுப்பிக்க இழுக்கவும் +• உள்ளக பட்டியல்களைப் பெறும்போது மேம்படுத்தப்பட்ட செயல்திறன் - சரி: - Bipe நியூபைப் ராமில் இருந்து அகற்றப்பட்ட பிறகு அதைத் தொடங்கும்போது நிலையான செயலிழப்பு - இணைய இணைப்பு இல்லாதபோது தொடக்கத்தில் நிலையான செயலிழப்பு - • நிலையான மரியாதைக்குரிய பிரகாசம்- மற்றும் தொகுதி-குறிப்பிட்ட அமைப்புகள் - • [YouTube] நிலையான நீண்ட பிளேலிச்ட்கள் +சரி செய்யப்பட்டது: +• RAM இலிருந்து அகற்றப்பட்ட பிறகு NewPipe ஐத் தொடங்கும் போது நிலையான செயலிழப்பு +• இணைய இணைப்பு இல்லாதபோது தொடக்கத்தில் நிலையான செயலிழப்பு +• ஒளி மற்றும் வால்யூம் சைகை அமைப்புகளைப் பொறுத்து சரி செய்யப்பட்டது +• [YouTube] நிலையான நீண்ட பிளேலிச்ட்கள் - மற்றவை: - • குறியீடு தூய்மைப்படுத்தல் மற்றும் பல உள் மேம்பாடுகள் - • சார்பு புதுப்பிப்புகள் - • மொழிபெயர்ப்பு புதுப்பிப்புகள் +மற்றவை: +• குறியீடு தூய்மை மற்றும் பல உள் மேம்பாடுகள் +• சார்பு மேம்படுத்தல்கள் +• மொழிபெயர்ப்பு புதுப்பிப்புகள் diff --git a/fastlane/metadata/android/ta/changelogs/964.txt b/fastlane/metadata/android/ta/changelogs/964.txt index da068f948e8..be6de6f0615 100644 --- a/fastlane/metadata/android/ta/changelogs/964.txt +++ b/fastlane/metadata/android/ta/changelogs/964.txt @@ -1,8 +1,8 @@ -Player பிளேயர் கட்டுப்பாடுகளில் அத்தியாயங்களுக்கான உதவி சேர்க்கப்பட்டது - • [PEERTUBE] செபியா தேடலைச் சேர்த்தது - Wideed வீடியோ விவரம் பார்வையில் மீண்டும் சேர்க்கப்பட்ட பகிர்வு பொத்தானை மற்றும் ச்ட்ரீம் விளக்கத்தை தாவல் தளவமைப்பில் நகர்த்தியது - • ஒளி சைகை முடக்கப்பட்டிருந்தால் பிரகாசத்தை மீட்டெடுப்பதை முடக்கு - கோடியில் வீடியோவை இயக்க பட்டியல் உருப்படியைச் சேர்த்தது - Star சில சாதனங்களில் இயல்புநிலை உலாவி அமைக்கப்படும்போது நிலையான செயலிழப்பு மற்றும் பங்கு உரையாடல்களை மேம்படுத்தவும் - Full முழு அளவிலான பிளேயரில் வன்பொருள் விண்வெளி பொத்தானைக் கொண்டு நாடகம்/இடைநிறுத்துங்கள் - • [Media.ccc.de] பல்வேறு திருத்தங்கள் மற்றும் மேம்பாடுகள் +• பிளேயர் கட்டுப்பாடுகளில் அத்தியாயங்களுக்கான உதவி சேர்க்கப்பட்டது +• [PeerTube] Sepia தேடல் சேர்க்கப்பட்டது +• வீடியோ விவரக் காட்சியில் பகிர்வு பொத்தான் மீண்டும் சேர்க்கப்பட்டு, தாவல் தளவமைப்பிற்கு ச்ட்ரீம் விளக்கம் நகர்த்தப்பட்டது +• ஒளி சைகை முடக்கப்பட்டிருந்தால், பிரகாசத்தை மீட்டெடுப்பதை முடக்கவும் +• கோடியில் வீடியோவை இயக்க பட்டியல் உருப்படி சேர்க்கப்பட்டது +• சில சாதனங்களில் இயல்புநிலை உலாவி அமைக்கப்படாதபோது நிலையான செயலிழப்பு மற்றும் பகிர்வு உரையாடல்களை மேம்படுத்தலாம் +• முழுத்திரை பிளேயரில் ஆர்டுவேர் ச்பேச் பட்டன் மூலம் பிளே/இடைநிறுத்தத்தை நிலைமாற்று +• [media.ccc.de] பல்வேறு திருத்தங்கள் மற்றும் மேம்பாடுகள் diff --git a/fastlane/metadata/android/ta/changelogs/966.txt b/fastlane/metadata/android/ta/changelogs/966.txt index e7f22ff4411..6e1ca232244 100644 --- a/fastlane/metadata/android/ta/changelogs/966.txt +++ b/fastlane/metadata/android/ta/changelogs/966.txt @@ -1,14 +1,14 @@ -புதியது: - பணி ஒரு புதிய சேவையைச் சேர்க்கவும்: பேண்ட்கேம்ப் +புதிய: +• புதிய சேவையைச் சேர்க்கவும்: Bandcamp - மேம்படுத்தப்பட்டது: - பயன்பாடு பயன்பாட்டைப் பெற ஒரு விருப்பத்தைச் சேர்க்கவும் சாதனத்தின் கருப்பொருளைப் பின்தொடரவும் - Ever மேம்பட்ட பிழை பேனலைக் காண்பிப்பதன் மூலம் சில செயலிழப்புகளைத் தடுக்கவும் - Contentance கிடைக்காத உள்ளடக்கம் ஏன் பற்றிய கூடுதல் தகவலைக் காட்டுங்கள் - • வன்பொருள் விண்வெளி பொத்தான் விளையாட்டு/இடைநிறுத்தத்தைத் தூண்டுகிறது - பெறுநர் சிற்றுண்டி "பதிவிறக்கம்" சிற்றுண்டியைக் காட்டு +மேம்படுத்தப்பட்டது: +• சாதனத்தின் கருப்பொருளை ஆப்சைப் பின்பற்றுவதற்கான விருப்பத்தைச் சேர்க்கவும் +• மேம்படுத்தப்பட்ட பிழை பேனலைக் காண்பிப்பதன் மூலம் சில செயலிழப்புகளைத் தடுக்கவும் +• உள்ளடக்கம் ஏன் கிடைக்கவில்லை என்பது பற்றிய கூடுதல் தகவலைக் காட்டு +• ஆர்டுவேர் ச்பேச் பட்டன் பிளே/இடைநிறுத்தத்தை தூண்டுகிறது +• "பதிவிறக்கம் தொடங்கியது" டோச்ட்டைக் காட்டு - சரி: - The பின்னணியில் விளையாடும்போது வீடியோ விவரங்களில் மிகச் சிறிய சிறுபடத்தை சரிசெய்யவும் - The குறைக்கப்பட்ட பிளேயரில் வெற்று தலைப்பை சரிசெய்யவும் - Rest கடைசி மறுசீரமைப்பு பயன்முறையை சரியாக மீட்டெடுக்கவில்லை +சரி செய்யப்பட்டது: +• பின்னணியில் விளையாடும் போது வீடியோ விவரங்களில் மிகச் சிறிய சிறுபடத்தைச் சரிசெய்யவும் +• குறைக்கப்பட்ட பிளேயரில் வெற்று தலைப்பை சரிசெய்யவும் +• சரியாக மீட்டெடுக்கப்படாத கடைசி மறுஅளவிடுதல் பயன்முறையைச் சரிசெய்யவும் diff --git a/fastlane/metadata/android/ta/changelogs/969.txt b/fastlane/metadata/android/ta/changelogs/969.txt index 93e0a695db2..e1496df7c16 100644 --- a/fastlane/metadata/android/ta/changelogs/969.txt +++ b/fastlane/metadata/android/ta/changelogs/969.txt @@ -1,8 +1,8 @@ -Storage வெளிப்புற சேமிப்பகத்தில் நிறுவலை அனுமதிக்கவும் - • [பேண்ட்கேம்ப்] முதல் மூன்று கருத்துகளை ச்ட்ரீமில் காண்பிப்பதற்கான ஆதரவைச் சேர்த்தது - பதிவிறக்கம் பதிவிறக்கம் தொடங்கும் போது 'பதிவிறக்கம் தொடங்கியது' சிற்றுண்டியைக் காட்டுங்கள் - Cook குக்கீ சேமிக்கப்படாதபோது ரெக்காப்ட்சா குக்கீயை அமைக்க வேண்டாம் - • [பிளேயர்] கேச் செயல்திறனை மேம்படுத்தவும் - • [பிளேயர்] நிலையான பிளேயர் தானாகவே விளையாடுவதில்லை - பதிவிறக்கம் பதிவிறக்கங்களை நீக்கும்போது முந்தைய சிற்றுண்டிகளை நிராகரிக்கவும் - • பட்டியலில் இல்லாத பொருளை நீக்க முயற்சித்தது +• வெளிப்புற சேமிப்பகத்தில் நிறுவலை அனுமதிக்கவும் +• [Bandcamp] ச்ட்ரீமில் முதல் மூன்று கருத்துகளைக் காண்பிப்பதற்கான உதவி சேர்க்கப்பட்டது +• பதிவிறக்கம் தொடங்கும் போது 'பதிவிறக்கம் தொடங்கியது' டோச்ட்டை மட்டும் காட்டவும் +• குக்கீகள் சேமிக்கப்படாதபோது reCaptcha குக்கீயை அமைக்க வேண்டாம் +• [பிளேயர்] கேச் செயல்திறனை மேம்படுத்தவும் +• [பிளேயர்] நிலையான பிளேயர் தானாகவே விளையாடுவதில்லை +• பதிவிறக்கங்களை நீக்கும் போது முந்தைய ச்நாக்பார்களை நிராகரிக்கவும் +• பட்டியலில் இல்லாத பொருளை நீக்க முயற்சிப்பது சரி செய்யப்பட்டது diff --git a/fastlane/metadata/android/ta/changelogs/970.txt b/fastlane/metadata/android/ta/changelogs/970.txt index 6db5c681014..c3b3e414742 100644 --- a/fastlane/metadata/android/ta/changelogs/970.txt +++ b/fastlane/metadata/android/ta/changelogs/970.txt @@ -1,11 +1,11 @@ -புதியது - Met உள்ளடக்க மெட்டாடேட்டாவைக் காண்பி (குறிச்சொற்கள், வகைகள், உரிமம், ...) விளக்கத்திற்கு கீழே - (தொலைநிலை (உள்ளூர் அல்லாத) பிளேலிச்ட்களில் "சேனல் விவரங்களைக் காட்டு" விருப்பத்தை சேர்த்தது - Lang நீண்ட அழுத்த பட்டியலில் "உலாவியில் திறக்கவும்" விருப்பத்தை சேர்க்கவும் +புதியது +• விளக்கத்திற்குக் கீழே உள்ளடக்க மெட்டாடேட்டாவை (குறிச்சொற்கள், வகைகள், உரிமம், ...) காட்டு +• ரிமோட் (உள்ளூர் அல்லாத) பிளேலிச்ட்களில் "சேனல் விவரங்களைக் காட்டு" விருப்பம் சேர்க்கப்பட்டது +• பட்டியலில் "உலாவியில் திற" விருப்பம் சேர்க்கப்பட்டது - சரி - ஒளிதோற்றம் வீடியோ விவரம் பக்கத்தில் நிலையான சுழற்சி செயலிழப்பு - • நிலையான "கோடி உடன் விளையாடுங்கள்" பொத்தானை பிளேயரில் எப்போதும் கோரை நிறுவத் தூண்டுகிறது - • நிலையான மற்றும் மேம்படுத்தப்பட்ட அமைப்பு இறக்குமதி மற்றும் ஏற்றுமதி பாதைகள் - • [YouTube] எண்ணிக்கை போன்ற நிலையான கருத்து - மேலும் பல +சரி செய்யப்பட்டது +• வீடியோ விவரம் பக்கத்தில் நிலையான சுழற்சி செயலிழப்பு +• பிளேயரில் நிலையான "கோடியுடன் விளையாடு" பொத்தான் எப்போதும் கோரை நிறுவும்படி கேட்கும் +• நிலையான மற்றும் மேம்படுத்தப்பட்ட அமைப்பு இறக்குமதி மற்றும் ஏற்றுமதி பாதைகள் +• [YouTube] எண்ணிக்கை போன்ற நிலையான கருத்து +மேலும் பல diff --git a/fastlane/metadata/android/ta/changelogs/972.txt b/fastlane/metadata/android/ta/changelogs/972.txt index e89986f6a99..30f6ef86f44 100644 --- a/fastlane/metadata/android/ta/changelogs/972.txt +++ b/fastlane/metadata/android/ta/changelogs/972.txt @@ -1,14 +1,14 @@ -புதியது - நேர முத்திரைகள் மற்றும் ஏச்டேக்குகளை விளக்கத்தில் அங்கீகரிக்கவும் - கையேடு டேப்லெட் பயன்முறை அமைப்பு சேர்க்கப்பட்டது - ஒரு ஊட்டத்தில் விளையாடிய பொருட்களை மறைக்கும் திறன் சேர்க்கப்பட்டது +புதியது +விளக்கத்தில் நேர முத்திரைகள் மற்றும் ஏச்டேக்குகளை அங்கீகரிக்கவும் +கைமுறை டேப்லெட் பயன்முறை அமைப்பு சேர்க்கப்பட்டது +விளையாடிய பொருட்களை ஊட்டத்தில் மறைக்கும் திறன் சேர்க்கப்பட்டது - மேம்படுத்தப்பட்டது - சேமிப்பக அணுகல் கட்டமைப்பை சரியாக ஆதரிக்கவும் - கிடைக்காத மற்றும் நிறுத்தப்பட்ட சேனல்களின் சிறந்த பிழை - ஆண்ட்ராய்டு 10+ பயனர்களுக்கான ஆண்ட்ராய்டு பகிர்வு தாள் இப்போது உள்ளடக்க தலைப்பைக் காட்டுகிறது. - புதுப்பிக்கப்பட்ட நிகழ்வுகள் மற்றும் குழாய் இணைப்புகளை ஆதரிக்கின்றன. +மேம்படுத்தப்பட்டது +சேமிப்பக அணுகல் கட்டமைப்பை சரியாக ஆதரிக்கவும் +கிடைக்காத மற்றும் நிறுத்தப்பட்ட சேனல்களின் சிறந்த பிழை கையாளுதல் +Android 10+ பயனர்களுக்கான ஆண்ட்ராய்டு பகிர்வுத் தாள் இப்போது உள்ளடக்கத் தலைப்பைக் காட்டுகிறது. +இன்வைடியச் நிகழ்வுகள் மற்றும் உதவி பைப் இணைப்புகள் புதுப்பிக்கப்பட்டன. - சரி - [YouTube] அகவை தடைசெய்யப்பட்ட உள்ளடக்கம் - தேர்வு உரையாடலைத் திறக்கும்போது கசிந்த சாளர விதிவிலக்கைத் தடுக்கவும் +சரி செய்யப்பட்டது +[YouTube] அகவை வரம்பிடப்பட்ட உள்ளடக்கம் +தேர்வு உரையாடலைத் திறக்கும்போது கசிந்த சாளர விதிவிலக்கைத் தடுக்கவும் diff --git a/fastlane/metadata/android/ta/changelogs/975.txt b/fastlane/metadata/android/ta/changelogs/975.txt index 30cef49657a..fa19c8dbc61 100644 --- a/fastlane/metadata/android/ta/changelogs/975.txt +++ b/fastlane/metadata/android/ta/changelogs/975.txt @@ -1,17 +1,17 @@ -புதியது - Sting தேடும் போது சிறு முன்னோட்டத்தைக் காட்டு - Abable ஊனமுற்ற கருத்துகளைக் கண்டறிதல் - தீவனம் பார்த்தபடி தீவன உருப்படியைக் குறிக்க அனுமதிக்கவும் - The கருத்து இதயங்களைக் காட்டு +புதியது +• தேடும் போது சிறுபட மாதிரிக்காட்சியைக் காட்டு +• முடக்கப்பட்ட கருத்துகளைக் கண்டறியவும் +• ஊட்டப் பொருளைப் பார்த்ததாகக் குறிக்க அனுமதிக்கவும் +• கருத்து இதயங்களைக் காட்டு - மேம்படுத்தப்பட்டது - Met மேனிலை தரவு மற்றும் குறிச்சொற்கள் தளவமைப்பை மேம்படுத்தவும் - உ இடைமுகம் கூறுகளுக்கு பணி வண்ணத்தைப் பயன்படுத்துங்கள் +மேம்படுத்தப்பட்டது +• மேனிலை தரவு மற்றும் குறிச்சொற்களின் தளவமைப்பை மேம்படுத்தவும் +• இடைமுகம் கூறுகளுக்கு பணி வண்ணத்தைப் பயன்படுத்துங்கள் - சரி - Min மினி பிளேயரில் சிறு உருவத்தை சரிசெய்யவும் - The நகல் வரிசை உருப்படிகளில் முடிவற்ற இடையகத்தை சரிசெய்யவும் - Player சில பிளேயர் சுழற்சி மற்றும் வேகமாக மூடுவது போன்ற திருத்தங்கள் - • பின்னணியில் ஏற்றப்பட்ட மீதமுள்ள ரெக்காப்ட்சாவை சரிசெய்யவும் - தீவனம் ஊட்டத்தை புதுப்பிக்கும்போது கிளிக்குகளை முடக்கு - பதிவிறக்கம் சில பதிவிறக்க செயலிழப்புகளை சரிசெய்யவும் +சரி செய்யப்பட்டது +• மினி பிளேயரில் சிறுபடத்தை சரிசெய்யவும் +• நகல் வரிசை உருப்படிகளில் முடிவற்ற இடையகத்தை சரிசெய்யவும் +• சுழற்சி மற்றும் வேகமாக மூடுவது போன்ற சில பிளேயர் திருத்தங்கள் +• பின்னணியில் மீதமுள்ள ReCAPTCHA ஐ சரிசெய்யவும் +• ஊட்டத்தைப் புதுப்பிக்கும்போது கிளிக்குகளை முடக்கவும் +• சில டவுன்லோடர் செயலிழப்புகளை சரிசெய்யவும் diff --git a/fastlane/metadata/android/ta/changelogs/976.txt b/fastlane/metadata/android/ta/changelogs/976.txt index fa27c4036f9..d6644fea812 100644 --- a/fastlane/metadata/android/ta/changelogs/976.txt +++ b/fastlane/metadata/android/ta/changelogs/976.txt @@ -1,10 +1,10 @@ -Full முழு திரையில் நேரடியாக பிளேயரைத் திறக்க விருப்பம் சேர்க்கப்பட்டது - தேடல் எந்த வகையான தேடல் பரிந்துரைகளைக் காட்ட வேண்டும் என்பதைத் தேர்ந்தெடுக்க அனுமதிக்கவும் - • இருண்ட கருப்பொருள் இப்போது இருண்ட + இருண்ட ச்பிளாச் திரை சேர்க்கப்பட்டது - Un தேவையற்ற கோப்புகளை சாம்பல் நிறமாக்குவதற்கு மேம்படுத்தப்பட்ட கோப்பு பிக்கர் - You நிலையான இறக்குமதி YouTube சந்தாக்கள் - • ச்ட்ரீம் மீண்டும் இயக்க மீண்டும் மறுதொடக்கம் பொத்தானைத் தட்டவும் தேவைப்படுகிறது - Auldion நிலையான இறுதி ஆடியோ அமர்வு - • [Android TV] DPAD ஐப் பயன்படுத்தும் போது நிலையான நீண்ட சீக்பார் தாவல்கள் +• பிளேயரை முழுத்திரையில் நேரடியாகத் திறக்க விருப்பம் சேர்க்கப்பட்டது +• எந்த வகையான தேடல் பரிந்துரைகளைக் காட்ட வேண்டும் என்பதைத் தேர்ந்தெடுக்க அனுமதிக்கவும் +• டார்க் கருப்பொருள் இப்போது டார்க் + டார்க் ச்பிளாச் திரை சேர்க்கப்பட்டது +• தேவையற்ற கோப்புகளை சாம்பல் நிறமாக்க மேம்படுத்தப்பட்ட கோப்பு தேர்வி +• YouTube சந்தாக்களை இறக்குமதி செய்வது சரி செய்யப்பட்டது +• ச்ட்ரீமை மீண்டும் இயக்க, ரீப்ளே பட்டனை மீண்டும் தட்ட வேண்டும் +• நிலையான நிறைவு ஆடியோ அமர்வு +• [Android TV] DPad ஐப் பயன்படுத்தும் போது நிலையான நீண்ட சீக்பார் சம்ப்கள் - மேலும் மாற்றங்களைக் காண, கீழேயுள்ள இணைப்புகள் தாவலில் இருந்து சேஞ்ச்லாக் (மற்றும் வலைப்பதிவு இடுகை) காண்க. +மேலும் மாற்றங்களைப் பார்க்க, கீழே உள்ள இணைப்புகள் தாவலில் இருந்து சேஞ்ச்லாக் (மற்றும் வலைப்பதிவு இடுகை) பார்க்கவும். diff --git a/fastlane/metadata/android/ta/changelogs/977.txt b/fastlane/metadata/android/ta/changelogs/977.txt index 9c4aba10fdf..3cc1a787329 100644 --- a/fastlane/metadata/android/ta/changelogs/977.txt +++ b/fastlane/metadata/android/ta/changelogs/977.txt @@ -1,10 +1,10 @@ -Press நீண்ட அழுத்த பட்டியலில் "அடுத்து விளையாடுங்கள்" பொத்தானைச் சேர்த்துள்ளார் - You நோக்கம் வடிப்பானில் யூடியூப் சார்ட்ச் பாதை முன்னொட்டு சேர்க்கப்பட்டது - • நிலையான அமைப்புகள் இறக்குமதி - The வரிசை திரையில் பிளேயர் பொத்தான்களுடன் ச்வாப் சீக்பார் நிலையை மாற்றவும் - Metiase மீடியாசெசன் மேனேசர் தொடர்பான பல்வேறு திருத்தங்கள் - Videed வீடியோ முடிவுக்குப் பிறகு நிலையான சீக்பார் முடிக்கப்படவில்லை - Re ரியல் டெக்டிவியில் மீடியா சுரங்கப்பாதை - • விரிவாக்கப்பட்ட குறைக்கப்பட்ட பிளேயர் பொத்தான்கள் சொடுக்கு செய்யக்கூடிய பகுதி +• நீண்ட அழுத்த பட்டியலில் "அடுத்து விளையாடு" பொத்தான் சேர்க்கப்பட்டது +• யூடியூப் சார்ட்ச் பாதை முன்னொட்டு இன்டென்ட் ஃபில்டரில் சேர்க்கப்பட்டது +• நிலையான அமைப்புகள் இறக்குமதி +• வரிசை திரையில் பிளேயர் பட்டன்களுடன் சீக்பார் நிலையை மாற்றவும் +• MediasessionManager தொடர்பான பல்வேறு திருத்தங்கள் +• வீடியோ முடிந்த பிறகு நிலையான சீக்பார் முடிக்கப்படவில்லை +• RealtekATV இல் முடக்கப்பட்ட மீடியா டன்னலிங் +• விரிவாக்கப்பட்ட குறைக்கப்பட்ட பிளேயர் பொத்தான்கள் சொடுக்கு செய்யக்கூடிய பகுதி - மேலும் மாற்றங்களைக் காண, கீழேயுள்ள இணைப்புகள் தாவலில் இருந்து சேஞ்ச்லாக் (மற்றும் வலைப்பதிவு இடுகை) காண்க. +மேலும் மாற்றங்களைப் பார்க்க, கீழே உள்ள இணைப்புகள் தாவலில் இருந்து சேஞ்ச்லாக் (மற்றும் வலைப்பதிவு இடுகை) பார்க்கவும். diff --git a/fastlane/metadata/android/ta/changelogs/980.txt b/fastlane/metadata/android/ta/changelogs/980.txt index 3c5d3864746..482d345f4e9 100644 --- a/fastlane/metadata/android/ta/changelogs/980.txt +++ b/fastlane/metadata/android/ta/changelogs/980.txt @@ -1,13 +1,13 @@ -புதியது - Men மெனுவைப் பகிர "பிளேலிச்ட்டில் சேர்" விருப்பத்தை சேர்க்கப்பட்டது - 2 Y2U.BE மற்றும் PEERTUBE குறுகிய இணைப்புகளுக்கான உதவி சேர்க்கப்பட்டது +புதியது +• மெனுவைப் பகிர "பிளேலிச்ட்டில் சேர்" விருப்பம் சேர்க்கப்பட்டது +• y2u.be மற்றும் PeerTube குறுகிய இணைப்புகளுக்கான உதவி சேர்க்கப்பட்டது - மேம்படுத்தப்பட்டது - Flaple பிளேபேக்-ச்பீட்-கட்டுப்பாடுகள் மிகவும் கச்சிதமானவை - • ஃபீட் இப்போது புதிய உருப்படிகளை எடுத்துக்காட்டுகிறது - • "பார்த்த உருப்படிகளைக் காட்டு" விருப்பம் இப்போது சேமிக்கப்படுகிறது +மேம்படுத்தப்பட்டது +• பிளேபேக்-வேக-கட்டுப்பாடுகள் மிகவும் கச்சிதமானவை +• தீவனம் இப்போது புதிய உருப்படிகளை முன்னிலைப்படுத்துகிறது +• ஊட்டத்தில் "பார்த்த பொருட்களைக் காட்டு" விருப்பம் இப்போது சேமிக்கப்பட்டது - சரி - You நிலையான YouTube லைக்குகள் மற்றும் பிரித்தெடுத்தல் ஆகியவற்றை விரும்புகிறது - The பின்னணியில் இருந்து திரும்பிய பிறகு நிலையான தானியங்கி மறுபதிப்பு - மேலும் பல +சரி செய்யப்பட்டது +• நிலையான YouTube விருப்பு வெறுப்புகள் பிரித்தெடுத்தல் +• பின்புலத்தில் இருந்து திரும்பிய பிறகு, தானியங்கி ரீப்ளே சரி செய்யப்பட்டது +மேலும் பல diff --git a/fastlane/metadata/android/ta/changelogs/983.txt b/fastlane/metadata/android/ta/changelogs/983.txt index e6093309609..46f1a6e3589 100644 --- a/fastlane/metadata/android/ta/changelogs/983.txt +++ b/fastlane/metadata/android/ta/changelogs/983.txt @@ -1,9 +1,9 @@ -புதிய இரட்டை-தட்டு-க்கு-தேடு இடைமுகம் மற்றும் நடத்தை சேர்க்கவும் - அமைப்புகளைத் தேடச் செய்யுங்கள் - பின் செய்யப்பட்ட கருத்துகளை முன்னிலைப்படுத்தவும் - FSFE இன் PEERTUBE நிகழ்வுக்கு திறந்த-பயன்பாட்டுடன் திறந்த நிலையில் சேர்க்கவும் - பிழை அறிவிப்புகளைச் சேர்க்கவும் - பிளேயர் மாற்றத்தில் முதல் வரிசை உருப்படியின் மறுபயன்பாட்டை சரிசெய்யவும் - தோல்வியுற்றதற்கு முன் லைவ்ச்ட்ரீம்களின் போது இடையகப்படுத்தும்போது அதிக நேரம் காத்திருங்கள் - உள்ளக தேடல் முடிவுகளின் வரிசையை சரிசெய்யவும் - விளையாட்டு வரிசையில் வெற்று உருப்படி புலங்களை சரிசெய்யவும் +புதிய இருமுறை தட்டுவதன் மூலம் தேடும் இடைமுகம் மற்றும் நடத்தையைச் சேர்க்கவும் +தேடக்கூடிய அமைப்புகளை உருவாக்கவும் +பின் செய்யப்பட்ட கருத்துகளை முன்னிலைப்படுத்தவும் +FSFE இன் PeerTube நிகழ்விற்கு திறந்த பயன்பாட்டு ஆதரவைச் சேர்க்கவும் +பிழை அறிவிப்புகளைச் சேர்க்கவும் +பிளேயரை மாற்றும்போது முதல் வரிசை உருப்படியை மீண்டும் இயக்குவதை சரிசெய்யவும் +லைவ்ச்ட்ரீம்களின் போது இடையீடு செய்யும் போது, தோல்வியடையும் முன் அதிக நேரம் காத்திருக்கவும் +உள்ளக தேடல் முடிவுகளின் வரிசையை சரிசெய்யவும் +விளையாட்டு வரிசையில் வெற்று உருப்படி புலங்களை சரிசெய்யவும் diff --git a/fastlane/metadata/android/ta/changelogs/984.txt b/fastlane/metadata/android/ta/changelogs/984.txt index f05c88884c4..86f73d14056 100644 --- a/fastlane/metadata/android/ta/changelogs/984.txt +++ b/fastlane/metadata/android/ta/changelogs/984.txt @@ -1,7 +1,7 @@ -முழு திரையையும் நிரப்பவும், டேப்லெட்டுகள் மற்றும் டிவிகளில் ச்க்ரோலிங் சரிசெய்யவும் போதுமான ஆரம்ப உருப்படிகளை பட்டியல்களில் ஏற்றவும் - பட்டியல்கள் மூலம் ச்க்ரோலிங் செய்யும் போது சீரற்ற செயலிழப்புகளை சரிசெய்யவும் - கணினி இடைமுகம் இன் கீழ் பிளேயர் விரைவாக மேலடுக்கு வளைவைத் தேடுங்கள் - மல்டி சாளரத்தில் விளையாடும்போது கட்அவுட்களில் மாற்றங்களை மாற்றவும், சில தொலைபேசிகளில் தவறாக இடம்பிடித்த வீரர் பின்னடைவை ஏற்படுத்துகிறது - CompileSDK ஐ 30 முதல் 31 வரை அதிகரிக்கவும் - பிழை அறிக்கையிடல் நூலகத்தைப் புதுப்பிக்கவும் - பிளேயரில் சில குறியீட்டை மறுபரிசீலனை செய்யுங்கள் +முழுத் திரையையும் நிரப்பவும், டேப்லெட்டுகள் மற்றும் டிவிகளில் ச்க்ரோலிங் செய்வதை சரிசெய்யவும் போதுமான ஆரம்ப உருப்படிகளை பட்டியல்களில் ஏற்றவும் +பட்டியல்கள் மூலம் ச்க்ரோலிங் செய்யும் போது சீரற்ற செயலிழப்புகளை சரிசெய்யவும் +பிளேயர் ஃபாச்ட் சீக் ஓவர்லே ஆர்க் சிச்டம் யுஐயின் கீழ் செல்ல வேண்டும் +மல்டி விண்டோவில் விளையாடும் போது கட்அவுட்களுக்கு மாற்றங்களை மாற்றவும், இதனால் சில ஃபோன்களில் பிளேயரின் தவறான பின்னடைவு ஏற்படுகிறது +compileSdk ஐ 30 இலிருந்து 31 ஆக அதிகரிக்கவும் +பிழை அறிக்கையிடல் நூலகத்தைப் புதுப்பிக்கவும் +பிளேயரில் சில குறியீட்டை மறுவடிவமைக்கவும் diff --git a/fastlane/metadata/android/ta/changelogs/986.txt b/fastlane/metadata/android/ta/changelogs/986.txt index 0ab07442f9b..8b73c2dfa2b 100644 --- a/fastlane/metadata/android/ta/changelogs/986.txt +++ b/fastlane/metadata/android/ta/changelogs/986.txt @@ -1,16 +1,16 @@ -புதியது - Streams புதிய ச்ட்ரீம்களுக்கான அறிவிப்புகள் - Procetion பின்னணி மற்றும் வீடியோ பிளேயர்களுக்கு இடையில் தடையற்ற மாற்றம் - சே செமிடோன்களால் சுருதியை மாற்றவும் - Player முக்கிய பிளேயர் வரிசையை பிளேலிச்ட்டில் சேர்க்கவும் +புதியது +• புதிய ச்ட்ரீம்களுக்கான அறிவிப்புகள் +• பின்னணி மற்றும் வீடியோ பிளேயர்களுக்கு இடையே தடையற்ற மாற்றம் +• செமிடோன்கள் மூலம் சுருதியை மாற்றவும் +• பிளேலிச்ட்டில் முதன்மையான பிளேயர் வரிசையைச் சேர்க்கவும் - மேம்படுத்தப்பட்டது - விரைவு வேகம்/சுருதி படி அளவை நினைவில் கொள்ளுங்கள் - ஒளிதோற்றம் வீடியோ பிளேயரில் ஆரம்ப நீண்ட இடையகத்தைத் தணித்தல் - And ஆண்ட்ராய்டு டிவிக்கு பிளேயர் இடைமுகம் ஐ மேம்படுத்தவும் - பதிவிறக்கம் செய்யப்பட்ட அனைத்து கோப்புகளையும் நீக்குவதற்கு முன் உறுதிப்படுத்தவும் +மேம்படுத்தப்பட்டது +• வேகம்/சுருதி படி அளவை நினைவில் கொள்ளுங்கள் +• வீடியோ பிளேயரில் ஆரம்ப நீண்ட இடையகத்தைத் தணிக்கவும் +• ஆண்ட்ராய்டு TVக்கான பிளேயர் UIஐ மேம்படுத்தவும் +• பதிவிறக்கம் செய்யப்பட்ட அனைத்து கோப்புகளையும் நீக்கும் முன் உறுதிப்படுத்தவும் - சரி - ஊடகம் மீடியா பொத்தானை சரிசெய்யவும் பிளேயர் கட்டுப்பாடுகளை மறைக்கவில்லை - Player பிளேயர் வகை மாற்றத்தில் பிளேபேக் மீட்டமைப்பை சரிசெய்யவும் - Plale பிளேலிச்ட் உரையாடலை சுழற்றுவதை சரிசெய்யவும் +சரி செய்யப்பட்டது +• பிளேயர் கட்டுப்பாடுகளை மறைக்காத மீடியா பொத்தான்களை சரிசெய்யவும் +• பிளேயரின் வகை மாற்றத்தில் பிளேபேக் மீட்டமைப்பை சரிசெய்யவும் +• பிளேலிச்ட் உரையாடலைச் சுழற்றுவதைச் சரிசெய்யவும் diff --git a/fastlane/metadata/android/ta/changelogs/987.txt b/fastlane/metadata/android/ta/changelogs/987.txt index bad021dc255..9506125e33a 100644 --- a/fastlane/metadata/android/ta/changelogs/987.txt +++ b/fastlane/metadata/android/ta/changelogs/987.txt @@ -1,12 +1,12 @@ -புதியது - Provelive முற்போக்கான HTTP ஐத் தவிர வேறு உதவி விநியோக முறைகள்: வேகமான பின்னணி ஏற்றுதல் நேரம், PEERTUBE மற்றும் SoundCloud க்கான திருத்தங்கள், அண்மைக் காலத்தில் முடிவடைந்த யூடியூப் லைவ்ச்ட்ரீம்களின் பின்னணி - ரிமோட் பிளேலிச்ட்டை உள்ளக ஒன்றில் சேர்க்க பொத்தானைச் சேர்க்கவும் - And ஆண்ட்ராய்டு 10+ பகிர்வு தாளில் பட முன்னோட்டம் +புதியது +• முற்போக்கான HTTPயைத் தவிர வேறு டெலிவரி முறைகள்: வேகமான பிளேபேக் ஏற்றுதல் நேரம், PeerTube மற்றும் SoundCloudக்கான திருத்தங்கள், அண்மைக் காலத்தில் முடிவடைந்த YouTube லைவ்ச்ட்ரீம்களின் பிளேபேக் +• உள்ளக ஒன்றில் ரிமோட் பிளேலிச்ட்டைச் சேர்க்க பொத்தானைச் சேர்க்கவும் +• ஆண்ட்ராய்டு 10+ பகிர்வு தாளில் பட முன்னோட்டம் - மேம்படுத்தப்பட்டது - Flaple பிளேபேக் அளவுருக்கள் உரையாடலை மேம்படுத்தவும் - The சந்தா இறக்குமதி/ஏற்றுமதி பொத்தான்களை மூன்று-டாட் மெனுவுக்கு நகர்த்தவும் +மேம்படுத்தப்பட்டது +• பிளேபேக் அளவுருக்கள் உரையாடலை மேம்படுத்தவும் +• சந்தா இறக்குமதி/ஏற்றுமதி பொத்தான்களை மூன்று-புள்ளி மெனுவிற்கு நகர்த்தவும் - சரி - Plale பிளேலிச்ட்டில் இருந்து முழுமையாகப் பார்த்த வீடியோக்களை அகற்றுவதை சரிசெய்யவும் - இடை, சராசரி பகிர்வு பட்டியல் கருப்பொருள் மற்றும் "பிளேலிச்ட்டில் சேர்" உள்ளீட்டை சரிசெய்யவும் +சரி செய்யப்பட்டது +• பிளேலிச்ட்டில் இருந்து முழுமையாகப் பார்த்த வீடியோக்களை அகற்றுவதைச் சரிசெய்யவும் +• பகிர்வு பட்டியல் கருப்பொருள் மற்றும் "பிளேலிச்ட்டில் சேர்" உள்ளீட்டைச் சரிசெய்தல் diff --git a/fastlane/metadata/android/ta/changelogs/990.txt b/fastlane/metadata/android/ta/changelogs/990.txt index 089a2717dbe..52c6bd0e8b8 100644 --- a/fastlane/metadata/android/ta/changelogs/990.txt +++ b/fastlane/metadata/android/ta/changelogs/990.txt @@ -1,15 +1,15 @@ -இந்த வெளியீடு ஆண்ட்ராய்டு 4.4 KITKAT க்கான ஆதரவைக் குறைக்கிறது, இப்போது குறைந்தபட்ச பதிப்பு ஆண்ட்ராய்டு 5 Lollipop! +இந்த வெளியீடு ஆண்ட்ராய்டு 4.4 KitKat க்கான ஆதரவைக் குறைக்கிறது, இப்போது குறைந்தபட்ச பதிப்பு ஆண்ட்ராய்டு 5 Lollipop! - புதியது - Long நீண்ட அழுத்த மெனுவிலிருந்து பதிவிறக்கவும் - Voor எதிர்கால வீடியோக்களை தீவனத்தில் மறைக்கவும் - Lal உள்ளக பிளேலிச்ட்களைப் பகிரவும் +புதியது +• நீண்ட அழுத்த மெனுவிலிருந்து பதிவிறக்கவும் +• எதிர்கால வீடியோக்களை ஊட்டத்தில் மறைக்கவும் +• உள்ளக பிளேலிச்ட்களைப் பகிரவும் - மேம்படுத்தப்பட்டது - Play பிளேயர் குறியீட்டை சிறிய கூறுகளாக மாற்றியமைத்தல்: குறைவான ரேம் பயன்படுத்தப்பட்டது, குறைவான பிழைகள் - Prum சிறுபடங்களின் அளவிலான பயன்முறையை மேம்படுத்தவும் - • வெக்டர்-ஐச் பட ஒதுக்கிடங்கள் +மேம்படுத்தப்பட்டது +• பிளேயர் குறியீட்டை சிறிய கூறுகளாக மாற்றவும்: குறைவான ரேம் பயன்படுத்தப்பட்டது, குறைவான பிழைகள் +• சிறுபடங்களின் அளவு பயன்முறையை மேம்படுத்தவும் +• வெக்டார்-ஐச் பட பிளேச்ஓல்டர்கள் - சரி - Player பிளேயர் அறிவிப்புடன் பல்வேறு சிக்கல்களை சரிசெய்யவும்: காலாவதியான/காணாமல் போன ஊடகத் செய்தி, சிதைந்த சிறுபடம் - 1/4 திரையைப் பயன்படுத்தி முழுத்திரை சரிசெய்யவும் +சரி செய்யப்பட்டது +• பிளேயர் அறிவிப்பில் உள்ள பல்வேறு சிக்கல்களைச் சரிசெய்யவும்: காலாவதியான/காணாமல் போன மீடியா செய்தி, சிதைந்த சிறுபடம் +• 1/4 திரையைப் பயன்படுத்தி முழுத்திரையை சரிசெய்யவும் diff --git a/fastlane/metadata/android/ta/changelogs/991.txt b/fastlane/metadata/android/ta/changelogs/991.txt index bab6d806e4e..6e4a24723c8 100644 --- a/fastlane/metadata/android/ta/changelogs/991.txt +++ b/fastlane/metadata/android/ta/changelogs/991.txt @@ -1,13 +1,13 @@ -புதியது - Banel பிழை பேனலில் "உலாவியில் திறக்க" பொத்தானைச் சேர்க்கவும் - Carges சேனல் குழுக்களை பட்டியலாகக் காண்பிக்க விருப்பத்தைச் சேர்க்கவும் - Time [YouTube] நேர முத்திரை முகவரி ஐப் பகிர்ந்து கொள்ள ச்ட்ரீம் பிரிவுகளில் நீண்ட சொடுக்கு செய்யவும் - Min மினி பிளேயரில் பிளே வரிசை பொத்தானைச் சேர்க்கவும் +புதியது +• பிழை பேனலில் "உலாவியில் திற" பொத்தானைச் சேர்க்கவும் +• சேனல் குழுக்களை பட்டியலாகக் காண்பிக்க விருப்பத்தைச் சேர்க்கவும் +• [YouTube] நேர முத்திரை URLஐப் பகிர, ச்ட்ரீம் பிரிவுகளில் நீண்ட சொடுக்கு செய்யவும் +• மினி பிளேயரில் பிளே வரிசை பொத்தானைச் சேர்க்கவும் - மேம்படுத்தப்பட்டது - Ic ஐச்லாந்திய உள்ளூர்மயமாக்கலைச் சேர்த்து, பல மொழிபெயர்ப்புகளைப் புதுப்பித்தது - • பல உள் மேம்பாடுகள் +மேம்படுத்தப்பட்டது +• ஐச்லாண்டிக் உள்ளூர்மயமாக்கலைச் சேர்க்கவும் மற்றும் பல பிற மொழிபெயர்ப்புகளைப் புதுப்பிக்கவும் +• பல உள் மேம்பாடுகள் - சரி - The பல விபத்துக்களை சரிசெய்யவும் - • [YouTube] சில நாடுகளில் சேனல்கள், அர்ப்பணிப்பு அல்லாத தீவனம் மற்றும் பணித்தொகுப்பு பின்னணி சிக்கல்களை சரிசெய்யவும் +சரி செய்யப்பட்டது +• பல செயலிழப்புகளைச் சரிசெய்யவும் +• [YouTube] சில நாடுகளில் ஏற்றப்படும் சேனல்கள், பிரத்யேகமற்ற ஊட்டம் மற்றும் தீர்விற்கான பின்னணி சிக்கல்களை சரிசெய்யவும் diff --git a/fastlane/metadata/android/ta/changelogs/992.txt b/fastlane/metadata/android/ta/changelogs/992.txt index 482d4bcf54a..d2c02d1d36e 100644 --- a/fastlane/metadata/android/ta/changelogs/992.txt +++ b/fastlane/metadata/android/ta/changelogs/992.txt @@ -1,17 +1,17 @@ -புதியது - ஒளிதோற்றம் வீடியோ விவரங்களில் சந்தாதாரர் எண்ணிக்கை - The வரிசையிலிருந்து பதிவிறக்கவும் - • நிரந்தரமாக ஒரு பிளேலிச்ட் சிறுபடத்தை அமைக்கவும் - • நீண்ட அழுத்த ஏச்டேக்குகள் மற்றும் இணைப்புகள் - பார்வை அட்டை பார்வை பயன்முறை +புதியது +• வீடியோ விவரங்களில் சந்தாதாரர் எண்ணிக்கை +• வரிசையில் இருந்து பதிவிறக்கவும் +• பிளேலிச்ட் சிறுபடத்தை நிரந்தரமாக அமைக்கவும் +• ஏச்டேக்குகள் மற்றும் இணைப்புகளை நீண்ட நேரம் அழுத்தவும் +• அட்டை பார்வை முறை - மேம்படுத்தப்பட்டது - Ming பெரிய மினி-பிளேயர் மூடு பொத்தான் - • மென்மையான சிறுபடம் கீழ்நோக்கி - And இலக்கு ஆண்ட்ராய்டு 13 (API 33) - • தேடுவது இனி வீரரை இடைநிறுத்தாது +மேம்படுத்தப்பட்டது +• பெரிய மினி பிளேயர் மூடும் பொத்தான் +• மென்மையான சிறுபடம் குறைத்தல் +• இலக்கு ஆண்ட்ராய்டு 13 (API 33) +• தேடுவது இனி வீரர் இடைநிறுத்தப்படாது - சரி - Tex டெக்ச்/மவுசில் மேலடுக்கை சரிசெய்யவும் - Adio தனி ஆடியோ ச்ட்ரீம்கள் இல்லாத பின்னணி பிளேயரை அனுமதிக்கவும் - You பல்வேறு யூடியூப் திருத்தங்கள் மற்றும் பல… +சரி செய்யப்பட்டது +• DeX/mouse மீது மேலடுக்கை சரிசெய்யவும் +• தனி ஆடியோ ச்ட்ரீம்கள் இல்லாமல் பின்னணி பிளேயரை அனுமதிக்கவும் +• பல்வேறு YouTube திருத்தங்கள் மற்றும் பல… diff --git a/fastlane/metadata/android/ta/changelogs/993.txt b/fastlane/metadata/android/ta/changelogs/993.txt index cafc30ad152..165d547c8fa 100644 --- a/fastlane/metadata/android/ta/changelogs/993.txt +++ b/fastlane/metadata/android/ta/changelogs/993.txt @@ -1,12 +1,12 @@ -புதியது - Play பிளேலிச்ட் நகல்களைச் சேர்க்கும்போது எச்சரிக்கையைச் சேர்க்கவும், அவற்றை அகற்ற பொத்தானைச் சேர்க்கவும் - Ward வன்பொருள் பொத்தான்களை புறக்கணிக்க அனுமதிக்கவும் - Fient ஓரளவு பார்த்த வீடியோக்களை தீவனத்தில் மறைக்க அனுமதிக்கவும் +புதியது +• பிளேலிச்ட் நகல்களைச் சேர்க்கும்போது எச்சரிக்கையைச் சேர்க்கவும், அவற்றை அகற்ற பொத்தானைச் சேர்க்கவும் +• வன்பொருள் பொத்தான்களைப் புறக்கணிப்பதை அனுமதிக்கவும் +• ஊட்டத்தில் ஓரளவு பார்த்த வீடியோக்களை மறைக்க அனுமதிக்கவும் - மேம்படுத்தப்பட்டது - Scree பெரிய திரைகளில் மேலும் கட்டம் நெடுவரிசைகளைப் பயன்படுத்தவும் - Sigsters அமைப்புகளுடன் முன்னேற்ற குறிகாட்டிகளை ஒத்துப்போகச் செய்யுங்கள் +மேம்படுத்தப்பட்டது +• பெரிய திரைகளில் அதிக கட்ட நெடுவரிசைகளைப் பயன்படுத்தவும் +• முன்னேற்றக் குறிகாட்டிகளை அமைப்புகளுடன் ஒத்துப்போகச் செய்யவும் - சரி - ஆண்ட்ராய்டு ஆண்ட்ராய்டு 11+ இல் உலாவி முகவரி கள், பதிவிறக்கங்கள் மற்றும் வெளிப்புற பிளேயர்களைத் திறப்பதை சரிசெய்யவும் - Mi மியுய் மீது இரண்டு தட்டுகள் தேவைப்படும் முழுத்திரை மூலம் தொடர்புகொள்வதை சரிசெய்யவும் +சரி செய்யப்பட்டது +• ஆண்ட்ராய்டு 11+ இல் திறக்கும் உலாவி URLகள், பதிவிறக்கங்கள் மற்றும் வெளிப்புற பிளேயர்களைச் சரிசெய்யவும் +• MIUI இல் இரண்டு தட்டுகள் தேவைப்படும் முழுத்திரையுடன் தொடர்புகொள்வதை சரிசெய்யவும் diff --git a/fastlane/metadata/android/ta/changelogs/994.txt b/fastlane/metadata/android/ta/changelogs/994.txt index b68d3db8525..4c4930ffcaa 100644 --- a/fastlane/metadata/android/ta/changelogs/994.txt +++ b/fastlane/metadata/android/ta/changelogs/994.txt @@ -1,15 +1,15 @@ -புதியது - Adio பல ஆடியோ தடங்கள்/மொழிகளை ஆதரிக்கவும் - The திரையின் எந்த பக்கத்திலும் தொகுதி மற்றும் ஒளி சைகைகளை அமைப்பதை அனுமதிக்கவும் - The திரையின் அடிப்பகுதியில் முதன்மையான பாடல்களைக் காண்பிப்பதற்கான ஆதரவு +புதியது +• பல ஆடியோ டிராக்குகள்/மொழிகளை ஆதரிக்கவும் +• திரையின் எந்தப் பக்கத்திலும் ஒலியளவு மற்றும் பிரகாச சைகைகளை அமைக்க அனுமதிக்கவும் +• திரையின் அடிப்பகுதியில் முதன்மையான தாவல்களைக் காண்பிப்பதற்கான உதவி - மேம்படுத்தப்பட்டது - • [பேண்ட்கேம்ப்] ஊதியச் சுவருக்குப் பின்னால் தடங்களைக் கையாளவும் +மேம்படுத்தப்பட்டது +• [பேண்ட்கேம்ப்] பே சுவரின் பின்னால் டிராக்குகளைக் கையாளவும் - சரி - • [YouTube] ச்ட்ரீம்களுக்கான 403 HTTP பிழைகள் - Play பிளேலிச்ட் பார்வையில் இருந்து முதன்மையான பிளேயருக்கு மாறும்போது கருப்பு பிளேயர் - பணி பிளேயர் பணி நினைவக கசிவு - • [PEERTUBE] பதிவேற்றியவர் மற்றும் துணைப்பிரிவு அவதாரங்கள் மாற்றப்பட்டன +சரி செய்யப்பட்டது +• [YouTube] ச்ட்ரீம்களுக்கான 403 HTTP பிழைகள் +• பிளேலிச்ட் பார்வையில் இருந்து மெயின் பிளேயருக்கு மாறும்போது பிளாக் பிளேயர் +• பிளேயர் பணி நினைவகம் கசிவு +• [PeerTube] பதிவேற்றி மற்றும் துணை சேனல் அவதாரங்கள் மாற்றப்பட்டன - மேலும் +மேலும் diff --git a/fastlane/metadata/android/ta/changelogs/995.txt b/fastlane/metadata/android/ta/changelogs/995.txt index 321e1144093..587a75c59c6 100644 --- a/fastlane/metadata/android/ta/changelogs/995.txt +++ b/fastlane/metadata/android/ta/changelogs/995.txt @@ -1,16 +1,16 @@ -புதியது - வாய்க்கால் சேனல் தாவல்களை ஆதரிக்கவும் - • படத் தரத்தைத் தேர்ந்தெடுக்கவும் - அனைத்தும் அனைத்து படங்களுக்கும் முகவரி களைப் பெறுங்கள் +புதியது +• உதவி சேனல் தாவல்கள் +• படத்தின் தரத்தைத் தேர்ந்தெடுக்கவும் +• அனைத்து படங்களுக்கும் URLகளைப் பெறுங்கள் - மேம்படுத்தப்பட்டது - Player பிளேயர் இடைமுகங்களின் அணுகல் - ஒளிதோற்றம் வீடியோ-மட்டும் பதிவிறக்கங்களுக்கான சிறந்த ஆடியோ தேர்வு - Play பிளேலிச்ட் மற்றும் வீடியோ பெயர்களை பகிரப்பட்ட பிளேலிச்ட் உள்ளடக்கத்தில் சேர்க்க விருப்பம் +மேம்படுத்தப்பட்டது +• பிளேயர் இடைமுகங்களின் அணுகல் +• வீடியோ மட்டும் பதிவிறக்கம் செய்ய சிறந்த ஆடியோ தேர்வு +• பகிரப்பட்ட பிளேலிச்ட் உள்ளடக்கத்தில் பிளேலிச்ட் மற்றும் வீடியோ பெயர்களைச் சேர்ப்பதற்கான விருப்பம் - சரி - • [YouTube] எண்ணிக்கை போல - Pop பாப்அப்கள் மற்றும் செயலிழப்புகளுக்கு பதிலளிக்காத பிளேயரை சரிசெய்யவும் - Pill மொழி பிக்கரில் தவறான மொழிகளைத் தேர்ந்தெடுப்பது - • பிளேயர் ஆடியோ கவனம் ஊமையை மதிக்கவில்லை - • பிளேலிச்ட் உருப்படி கூடுதலாக எப்போதாவது வேலை செய்யவில்லை +சரி செய்யப்பட்டது +• [YouTube] லைக் எண்ணிக்கையை சரிசெய்தல் +• பாப்அப்கள் மற்றும் செயலிழப்புகளுக்கு பதிலளிக்காத பிளேயரை சரிசெய்யவும் +• மொழித் தேர்வில் தவறான மொழிகளின் தேர்வு +• பிளேயர் ஆடியோ கவனம் முடக்கத்தை மதிக்கவில்லை +• பிளேலிச்ட் உருப்படி சேர்த்தல் எப்போதாவது வேலை செய்யாது diff --git a/fastlane/metadata/android/ta/changelogs/997.txt b/fastlane/metadata/android/ta/changelogs/997.txt index a85000d8498..9ba9cd46277 100644 --- a/fastlane/metadata/android/ta/changelogs/997.txt +++ b/fastlane/metadata/android/ta/changelogs/997.txt @@ -1,17 +1,17 @@ -புதியது - கருத்து கருத்து பதில்களைச் சேர்க்கவும் - Blay பிளேலிச்ட்களை மறுவரிசைப்படுத்த அனுமதிக்கவும் - Play பிளேலிச்ட் விளக்கம் மற்றும் கால அளவைக் காட்டு - Settets அமைப்புகளை மீட்டமைக்க அனுமதிக்கவும் +புதியது +• கருத்து பதில்களைச் சேர்க்கவும் +• பிளேலிச்ட்களை மறுவரிசைப்படுத்த அனுமதிக்கவும் +• பிளேலிச்ட் விளக்கம் மற்றும் கால அளவைக் காட்டு +• அமைப்புகளை மீட்டமைக்க அனுமதிக்கவும் - மேம்படுத்தப்பட்டது - • [Android 13+] தனிப்பயன் அறிவிப்பு செயல்களை மீட்டெடுங்கள் - புதுப்பிப்பு புதுப்பிப்பு சோதனைக்கு ஒப்புதல் கோருங்கள் - • பஃபர் செய்யும் போது அறிவிப்பு நாடகம்/இடைநிறுத்தத்தை அனுமதிக்கவும் - Settents சில அமைப்புகளை மறுவரிசைப்படுத்தவும் +மேம்படுத்தப்பட்டது +• [Android 13+] தனிப்பயன் அறிவிப்பு செயல்களை மீட்டெடுக்கவும் +• புதுப்பிப்பு சரிபார்ப்புக்கு ஒப்புதல் கோரவும் +• இடையகத்தின் போது அறிவிப்பை இயக்க/இடைநிறுத்த அனுமதிக்கவும் +• சில அமைப்புகளை மறுவரிசைப்படுத்தவும் - சரி - • [YouTube] கருத்துக்களை ஏற்றாத கருத்துக்கள், மற்றும் பிற திருத்தங்கள் மற்றும் மேம்பாடுகள் - Settrimation அமைப்புகள் இறக்குமதியில் பாதிப்பைத் தீர்க்கவும், சாதொபொகு க்கு மாறவும் - பதிவிறக்கம் பல்வேறு பதிவிறக்க திருத்தங்கள் - தேடல் உரையை ஒழுங்கமைக்கவும் +சரி செய்யப்பட்டது +• [YouTube] கருத்துகள் ஏற்றப்படாமல் இருப்பதை சரிசெய்தல், மேலும் பிற திருத்தங்கள் மற்றும் மேம்பாடுகள் +• அமைப்புகள் இறக்குமதியில் உள்ள பாதிப்பைத் தீர்த்து, JSONக்கு மாறவும் +• பல்வேறு பதிவிறக்க திருத்தங்கள் +• தேடல் உரையை ஒழுங்கமைக்கவும் diff --git a/fastlane/metadata/android/ta/changelogs/999.txt b/fastlane/metadata/android/ta/changelogs/999.txt index ea8e7f6d02e..f588170c7a5 100644 --- a/fastlane/metadata/android/ta/changelogs/999.txt +++ b/fastlane/metadata/android/ta/changelogs/999.txt @@ -1,12 +1,12 @@ -இந்த ஆட்ஃபிக்ச் வெளியீடு YouTube வீடியோக்களின் நடுவில் HTTP 403 பிழைகளை சரிசெய்கிறது. +இந்த ஆட்ஃபிக்ச் வெளியீடு YouTube வீடியோக்களின் நடுவில் HTTP 403 பிழைகளை சரிசெய்கிறது. - புதியது - • [SoundCloud] on.soundcloud.com முகவரி களுக்கு ஆதரவைச் சேர்க்கவும் +புதியது +• [SoundCloud] on.soundcloud.com URLகளுக்கான ஆதரவைச் சேர்க்கவும் - மேம்படுத்தப்பட்டது - • [பேண்ட்கேம்ப்] ரேடியோ கியோச்கில் கூடுதல் தகவலைக் காட்டுங்கள் +மேம்படுத்தப்பட்டது +• [பேண்ட்கேம்ப்] ரேடியோ கியோச்கில் கூடுதல் தகவலைக் காட்டு - சரி - • [YouTube] அவ்வப்போது HTTP 403 பிழைகளை ஆரம்பத்தில் அல்லது வீடியோக்களின் நடுவில் சரிசெய்யவும் - • [YouTube] மேலும் சேனல் தலைப்பு வகைகளிலிருந்து அவதார் மற்றும் பேனரை பிரித்தெடுக்கவும் - • [பேண்ட்கேம்ப்] பல்வேறு பிழைகளை சரிசெய்து எப்போதும் https ஐப் பயன்படுத்துங்கள் +சரி செய்யப்பட்டது +• [YouTube] வீடியோக்களின் தொடக்கத்திலோ அல்லது நடுவிலோ அவ்வப்போது HTTP 403 பிழைகளைச் சரிசெய்யவும் +• [YouTube] அதிக சேனல் தலைப்பு வகைகளிலிருந்து அவதார் மற்றும் பேனரைப் பிரித்தெடுக்கவும் +• [Bandcamp] பல்வேறு பிழைகளை சரிசெய்து எப்போதும் HTTPS ஐப் பயன்படுத்தவும் diff --git a/fastlane/metadata/android/zh-Hans/changelogs/1009.txt b/fastlane/metadata/android/zh-Hans/changelogs/1009.txt new file mode 100644 index 00000000000..1d3fc413a5f --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/1009.txt @@ -0,0 +1,14 @@ +新增 +Keep Android Open 运动的重要信息及采取行动的请求:https://www.keepandroidopen.org/ + +改进 +[Feed] 打乱过期订阅更新顺序 +不堆叠评论页 +单击视频详情页时不把单击事件传递到底层视图。 + +修复 +评论回复标题布局没有头像图 +多个播放器相关 UI 修复 +[SoundCloud] 修福长 ID 音频流 + +以及更多修复和改进! From 816f5f9abac62b8087e4d1270527e0133b331fe5 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 8 Mar 2026 18:57:35 +0100 Subject: [PATCH 87/92] Translated using Weblate (Vietnamese) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 70.0% (63 of 90 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (765 of 765 strings) Co-authored-by: Hosted Weblate Co-authored-by: Nicolás Pérez Co-authored-by: Quý Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/vi/ Translation: NewPipe/Metadata --- app/src/main/res/values-es/strings.xml | 2 +- .../metadata/android/vi/changelogs/1000.txt | 24 +++++++++---------- .../metadata/android/vi/changelogs/1003.txt | 10 ++++---- .../metadata/android/vi/changelogs/1005.txt | 24 +++++++++---------- .../metadata/android/vi/changelogs/1006.txt | 16 +++++++++++++ .../metadata/android/vi/changelogs/1007.txt | 12 +++++++++- .../metadata/android/vi/changelogs/1008.txt | 4 ++++ .../metadata/android/vi/changelogs/1009.txt | 13 ++++++++++ 8 files changed, 75 insertions(+), 30 deletions(-) create mode 100644 fastlane/metadata/android/vi/changelogs/1006.txt create mode 100644 fastlane/metadata/android/vi/changelogs/1008.txt create mode 100644 fastlane/metadata/android/vi/changelogs/1009.txt diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c1a0deefe9a..43d34e91cd0 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -851,7 +851,7 @@ %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. - Google ha anunciado que, a partir de 2026/2027, todas las aplicaciones en dispositivos Android certificados requerirán que los desarrolladores envíen sus datos personales de identidad directamente a Google. Como los desarrolladores de esta aplicación no están de acuerdo con este requisito, la aplicación dejará de funcionar en dispositivos Android certificados después de esa fecha. + En Agosto de 2025, Google ha anunciado que, a partir de 2026/2027, todas las aplicaciones en dispositivos Android certificados requerirán que los desarrolladores envíen sus datos personales de identidad directamente a Google. Como los desarrolladores de NewPipe no están de acuerdo con este requisito, la aplicación dejará de funcionar en dispositivos Android certificados después de esa fecha. Detalles Solución diff --git a/fastlane/metadata/android/vi/changelogs/1000.txt b/fastlane/metadata/android/vi/changelogs/1000.txt index e812a4feadc..bc376259043 100644 --- a/fastlane/metadata/android/vi/changelogs/1000.txt +++ b/fastlane/metadata/android/vi/changelogs/1000.txt @@ -1,13 +1,13 @@ -Những cải thiện -• Làm cho mô tả của danh sách phát có thể nhấp vào để hiển thị nhiều / ít nội dung hơn -• [PeerTube] Tự động xử lý các liên kết như 'subscribeto.me' -• Chỉ bắt đầu phát một mục trong màn hình lịch sử +Cải thiện +• Chạm mô tả danh sách phát để xem thêm / thu gọn +• [PeerTube] Tự xử lý liên kết `subscribeto.me` +• Chỉ phát một mục trong màn hình lịch sử -Đã sửa các lỗi trước đó -• Sửa lỗi khả năng hiển thị nút RSS -• Khắc phục sự cố xem trước thanh tìm kiếm -• Sửa danh sách phát một mục không có hình xem trước -• Sửa lỗi việc thoát khỏi hộp thoại tải xuống trước khi nó xuất hiện -• Sửa cửa sổ bật lên cho danh sách các mục liên quan khi xếp hàng. -• Sửa thứ tự trong hộp thoại được thêm vào danh sách phát -• Đã điều chỉnh bố cục của mục đánh dấu trong danh sách phát +Đã sửa +• Hiển thị nút RSS +• Crash xem trước thanh tua +• Tạo danh sách phát với mục không có thumbnail +• Thoát hộp thoại "Tải xuống" trước khi hiển thị +• Popup thêm mục liên quan vào hàng chờ +• Thứ tự trong hộp thoại "Thêm vào danh sách phát" +• Bố cục mục đánh dấu danh sách phát diff --git a/fastlane/metadata/android/vi/changelogs/1003.txt b/fastlane/metadata/android/vi/changelogs/1003.txt index 3f32949c507..982a79efc98 100644 --- a/fastlane/metadata/android/vi/changelogs/1003.txt +++ b/fastlane/metadata/android/vi/changelogs/1003.txt @@ -1,4 +1,6 @@ -Đã sửa lỗi YouTube không phát bất kỳ luồng nào. - -Bản phát hành này chỉ giải quyết lỗi cấp bách nhất khiến video YouTube không tải thông tin chi tiết về video. -Chúng tôi biết có những vấn đề khác và chúng tôi sẽ sớm đưa ra một bản phát hành riêng để giải quyết những vấn đề đó. +Đây là bản vá khẩn sửa lỗi YouTube: +• [YouTube] Sửa lỗi không tải thông tin video, lỗi HTTP 403 khi phát và khôi phục phát một số video giới hạn độ tuổi +• Cỡ chữ phụ đề không thay đổi +• Tải thông tin hai lần khi mở stream +• [SoundCloud] Loại bỏ stream DRM không thể phát +• Cập nhật bản dịch diff --git a/fastlane/metadata/android/vi/changelogs/1005.txt b/fastlane/metadata/android/vi/changelogs/1005.txt index 7eeb567b77e..86a38a38d5b 100644 --- a/fastlane/metadata/android/vi/changelogs/1005.txt +++ b/fastlane/metadata/android/vi/changelogs/1005.txt @@ -1,17 +1,17 @@ Mới -• Hỗ trợ cho Android Auto -• Cho phép đặt nhóm nguồn cấp dữ liệu làm tab màn hình chính -• [YouTube] Chia sẻ dưới dạng danh sách phát tạm thời -• [SoundCloud] Tab kênh thích +• Hỗ trợ Android Auto +• Cho phép đặt nhóm feed làm tab màn hình chính +• [YouTube] Chia sẻ dạng danh sách phát tạm thời +• [SoundCloud] Tab kênh đã thích Cải thiện -• Gợi ý thanh tìm kiếm tốt hơn -• Hiển thị ngày tải xuống trong mục Tải xuống -• Sử dụng cài đặt ngôn ngữ cho từng ứng dụng (Android 13+) +• Gợi ý thanh tìm kiếm rõ hơn +• Hiển thị ngày tải trong Tải xuống +• Dùng ngôn ngữ riêng cho ứng dụng (Android 13) Đã sửa -• Màu chữ bị hỏng ở chế độ tối -• [YouTube] Danh sách phát không tải được hơn 100 mục -• [YouTube] Thiếu video được đề xuất -• Sập trong Lịch sử -• Dấu thời gian trong phần trả lời bình luận +• Màu chữ lỗi trong chế độ tối +• [YouTube] Playlist không tải quá 100 mục +• [YouTube] Thiếu video đề xuất +• Crash trong danh sách Lịch sử +• Timestamp trong phản hồi bình luận diff --git a/fastlane/metadata/android/vi/changelogs/1006.txt b/fastlane/metadata/android/vi/changelogs/1006.txt new file mode 100644 index 00000000000..baf2ab52bc8 --- /dev/null +++ b/fastlane/metadata/android/vi/changelogs/1006.txt @@ -0,0 +1,16 @@ +Cải thiện +• Giữ trình phát hiện tại khi nhấn timestamp +• Thử khôi phục các tác vụ tải xuống đang chờ +• Tùy chọn xóa bản tải mà không xóa tệp +• Quyền Overlay: hiển thị hộp thoại giải thích (Android > R) +• Hỗ trợ mở liên kết on.soundcloud +• Nhiều cải thiện và tối ưu nhỏ + +Đã sửa +• Định dạng số rút gọn cho Android < 7 +• Thông báo "ma" +• Lỗi phụ đề SRT +• Nhiều crash + +Phát triển +• Hiện đại hóa mã nội bộ diff --git a/fastlane/metadata/android/vi/changelogs/1007.txt b/fastlane/metadata/android/vi/changelogs/1007.txt index d2086b62c1f..6265fcf52f1 100644 --- a/fastlane/metadata/android/vi/changelogs/1007.txt +++ b/fastlane/metadata/android/vi/changelogs/1007.txt @@ -1 +1,11 @@ -Đã sửa lỗi YouTube không phát bất kỳ luồng nào +Bản vá khẩn sửa lỗi "Nội dung không khả dụng": video YouTube đã phát lại bình thường. + +Cũng sửa một số lỗi từ 0.28.1: +• Kéo mục trong playlist chỉ sang được vị trí liền kề +• Tiêu đề/bình luận nhấp nháy giữa video hiện tại và trước đó +• Tùy chọn "Mở trình phát chính toàn màn hình" không hoạt động + +Cải thiện khác: +• [YouTube] Có thể tua lại livestream tối đa 4 giờ +• Không tải video livestream khi phát nền +• Giao diện mới cho "Xóa đã xem" diff --git a/fastlane/metadata/android/vi/changelogs/1008.txt b/fastlane/metadata/android/vi/changelogs/1008.txt new file mode 100644 index 00000000000..ee92a2384ee --- /dev/null +++ b/fastlane/metadata/android/vi/changelogs/1008.txt @@ -0,0 +1,4 @@ +• Đã sửa lỗi phát lại livestreams tại điểm phát cuối +• [Youtube] hỗ trợ thêm nhiều dạng URL kênh +• [Youtube] hỗ trợ thêm nhiều format cho video metainfo +• Đã cải thiện các bản dịch diff --git a/fastlane/metadata/android/vi/changelogs/1009.txt b/fastlane/metadata/android/vi/changelogs/1009.txt new file mode 100644 index 00000000000..f47bddcd7f2 --- /dev/null +++ b/fastlane/metadata/android/vi/changelogs/1009.txt @@ -0,0 +1,13 @@ +Quan trọng +Đã bổ sung thông tin kêu gọi hành động cho chiến dịch Keep Android Open: https://www.keepandroidopen.org/ + +Đã cải thiện +[Feed] Cập nhật các đăng ký cũ theo thứ tự ngẫu nhiên +Các trang bình luận không còn chồng lên nhau +Không truyền sự kiện nhấn xuống view bên dưới trên trang chi tiết video + +Đã sửa +Lỗi không hiện ảnh avatar ở phần comment +Những lỗi liên quan đến UI của phần trình phát +[SoundCloud] các luồng phát có ID dài +Và nhiều sửa lỗi, cải thiện khác From dc2e4aaea5c1043ed3810a93377ac3a865591a9b Mon Sep 17 00:00:00 2001 From: AbsurdlyLongUsername <22662897+absurdlylongusername@users.noreply.github.com> Date: Fri, 6 Mar 2026 11:56:41 +0000 Subject: [PATCH 88/92] Add Sign in confirm not a bot issue URL to the exception error message Make error panel and error activity exception message URLs clickable via extension method Change ErrorMessage.getString to getText and return CharSequence, and use getText with formatArgs to preserve styling (i.e. URLs) (cherry picked from commit e173bf425207be58e24f0994e0d9ae502072b867) --- .../org/schabi/newpipe/error/ErrorActivity.kt | 3 +- .../org/schabi/newpipe/error/ErrorInfo.kt | 20 ++++++++----- .../schabi/newpipe/error/ErrorPanelHelper.kt | 5 ++-- .../MediaBrowserPlaybackPreparer.kt | 4 +-- .../newpipe/util/text/TextViewExtensions.kt | 29 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 +- 6 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/org/schabi/newpipe/util/text/TextViewExtensions.kt diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt index 5dd0755c59a..c68a2cfd1e1 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.kt @@ -25,6 +25,7 @@ import org.schabi.newpipe.databinding.ActivityErrorBinding import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.ThemeHelper import org.schabi.newpipe.util.external_communication.ShareUtils +import org.schabi.newpipe.util.text.setTextWithLinks /** * This activity is used to show error details and allow reporting them in various ways. @@ -100,7 +101,7 @@ class ErrorActivity : AppCompatActivity() { // normal bugreport buildInfo(errorInfo) - binding.errorMessageView.text = errorInfo.getMessage(this) + binding.errorMessageView.setTextWithLinks(errorInfo.getMessage(this)) binding.errorView.text = formErrorText(errorInfo.stackTraces) // print stack trace once again for debugging: diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt index cd48fb2984b..1b0d1d322d9 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt @@ -29,6 +29,7 @@ import org.schabi.newpipe.extractor.exceptions.YoutubeMusicPremiumContentExcepti import org.schabi.newpipe.ktx.isNetworkRelated import org.schabi.newpipe.player.mediasource.FailedMediaSource import org.schabi.newpipe.player.resolver.PlaybackResolver +import org.schabi.newpipe.util.text.getText /** * An error has occurred in the app. This class contains plain old parcelable data that can be used @@ -135,8 +136,8 @@ class ErrorInfo private constructor( return getServiceName(serviceId) } - fun getMessage(context: Context): String { - return message.getString(context) + fun getMessage(context: Context): CharSequence { + return message.getText(context) } companion object { @@ -146,20 +147,23 @@ class ErrorInfo private constructor( private val stringRes: Int, private vararg val formatArgs: String ) : Parcelable { - fun getString(context: Context): String { + fun getText(context: Context): CharSequence { + // Ensure locale aware context via ContextCompat.getContextForLanguage() (just in case context is not AppCompatActivity) + val ctx = ContextCompat.getContextForLanguage(context) return if (formatArgs.isEmpty()) { - // use ContextCompat.getString() just in case context is not AppCompatActivity - ContextCompat.getString(context, stringRes) + ctx.getText(stringRes) } else { // ContextCompat.getString() with formatArgs does not exist, so we just // replicate its source code but with formatArgs - ContextCompat.getContextForLanguage(context).getString(stringRes, *formatArgs) + ctx.resources.getText(stringRes, *formatArgs) } } } const val SERVICE_NONE = "" + const val SIGN_IN_CONFIRM_NOT_BOT_ISSUE_URL = "https://github.com/TeamNewPipe/NewPipe/issues/11139" + private fun getServiceName(serviceId: Int?) = // not using getNameOfServiceById since we want to accept a nullable serviceId and we // want to default to SERVICE_NONE ServiceList.all().firstOrNull { it.serviceId == serviceId }?.serviceInfo?.name @@ -247,7 +251,9 @@ class ErrorInfo private constructor( ErrorMessage(R.string.youtube_music_premium_content) throwable is SignInConfirmNotBotException -> - ErrorMessage(R.string.sign_in_confirm_not_bot_error, getServiceName(serviceId)) + ErrorMessage(R.string.sign_in_confirm_not_bot_error, + getServiceName(serviceId), + SIGN_IN_CONFIRM_NOT_BOT_ISSUE_URL) throwable is ContentNotAvailableException -> ErrorMessage(R.string.content_not_available) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt index 023d13e9d8d..8136c78d813 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt @@ -16,6 +16,7 @@ import org.schabi.newpipe.MainActivity import org.schabi.newpipe.R import org.schabi.newpipe.ktx.animate import org.schabi.newpipe.util.external_communication.ShareUtils +import org.schabi.newpipe.util.text.setTextWithLinks class ErrorPanelHelper( private val fragment: Fragment, @@ -64,7 +65,7 @@ class ErrorPanelHelper( fun showError(errorInfo: ErrorInfo) { ensureDefaultVisibility() - errorTextView.text = errorInfo.getMessage(context) + errorTextView.setTextWithLinks(errorInfo.getMessage(context)) if (errorInfo.recaptchaUrl != null) { showAndSetErrorButtonAction(R.string.recaptcha_solve) { @@ -109,7 +110,7 @@ class ErrorPanelHelper( fun showTextError(errorString: String) { ensureDefaultVisibility() - errorTextView.text = errorString + errorTextView.setTextWithLinks(errorString) setRootVisible() } diff --git a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserPlaybackPreparer.kt b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserPlaybackPreparer.kt index 890c83cfa8e..c0a2f966818 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserPlaybackPreparer.kt +++ b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserPlaybackPreparer.kt @@ -49,7 +49,7 @@ import org.schabi.newpipe.util.NavigationHelper */ class MediaBrowserPlaybackPreparer( private val context: Context, - private val setMediaSessionError: BiConsumer, // error string, error code + private val setMediaSessionError: BiConsumer, // error string, error code private val clearMediaSessionError: Runnable, private val onPrepare: Consumer ) : PlaybackPreparer { @@ -118,7 +118,7 @@ class MediaBrowserPlaybackPreparer( private fun onPrepareError(throwable: Throwable) { setMediaSessionError.accept( - ErrorInfo.getMessage(throwable, null, null).getString(context), + ErrorInfo.getMessage(throwable, null, null).getText(context), PlaybackStateCompat.ERROR_CODE_APP_ERROR ) } diff --git a/app/src/main/java/org/schabi/newpipe/util/text/TextViewExtensions.kt b/app/src/main/java/org/schabi/newpipe/util/text/TextViewExtensions.kt new file mode 100644 index 00000000000..d2efbf5411a --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/text/TextViewExtensions.kt @@ -0,0 +1,29 @@ +package org.schabi.newpipe.util.text + +import android.content.res.Resources +import android.text.SpannableString +import android.text.method.LinkMovementMethod +import android.text.util.Linkify +import android.util.Patterns +import android.widget.TextView +import androidx.annotation.StringRes +import androidx.core.text.parseAsHtml +import androidx.core.text.toHtml +import androidx.core.text.toSpanned + +/** + * Takes in a CharSequence [text] + * and makes raw HTTP URLs and HTML anchor tags clickable + */ +fun TextView.setTextWithLinks(text: CharSequence) { + val spanned = SpannableString(text) + // Using the pattern overload of addLinks since the one with the int masks strips all spans from the text before applying new ones + Linkify.addLinks(spanned, Patterns.WEB_URL, null) + this.text = spanned + this.movementMethod = LinkMovementMethod.getInstance() +} + +/** + * Gets text from string resource with [id] while preserving styling and allowing string format value substitution of [formatArgs] + */ +fun Resources.getText(@StringRes id: Int, vararg formatArgs: Any?): CharSequence = getText(id).toSpanned().toHtml().format(*formatArgs).parseAsHtml() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5ecdb5e97ec..e3e15b7766c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -878,7 +878,7 @@ HTTP error 403 received from server while playing, likely caused by streaming URL expiration or an IP ban HTTP error %1$s received from server while playing HTTP error 403 received from server while playing, likely caused by an IP ban or streaming URL deobfuscation issues - %1$s refused to provide data, asking for a login to confirm the requester is not a bot.\n\nYour IP might have been temporarily banned by %1$s, you can wait some time or switch to a different IP (for example by turning on/off a VPN, or by switching from WiFi to mobile data). + %1$s refused to provide data, asking for a login to confirm the requester is not a bot.\n\nYour IP might have been temporarily banned by %1$s, you can wait some time or switch to a different IP (for example by turning on/off a VPN, or by switching from WiFi to mobile data).\n\nPlease see Issue 11139 for more information This content is not available for the currently selected content country.\n\nChange your selection from \"Settings > Content > Default content country\". In August 2025, Google announced that as of September 2026, installing apps will require developer verification for all Android apps on certified devices, including those installed outside of the Play Store. Since the developers of NewPipe do not agree to this requirement, NewPipe will no longer work on certified Android devices after that time. Details From d9fd1bf003d64c6d0a5e001d621b799657627884 Mon Sep 17 00:00:00 2001 From: AbsurdlyLongUsername <22662897+absurdlylongusername@users.noreply.github.com> Date: Fri, 6 Mar 2026 12:55:09 +0000 Subject: [PATCH 89/92] Maybe this fix ktlint errors? (cherry picked from commit b8ec9bf41290cfd5aa80e603d2f1d4dbd5e74268) --- app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt index 1b0d1d322d9..36793143509 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt @@ -251,9 +251,11 @@ class ErrorInfo private constructor( ErrorMessage(R.string.youtube_music_premium_content) throwable is SignInConfirmNotBotException -> - ErrorMessage(R.string.sign_in_confirm_not_bot_error, + ErrorMessage( + R.string.sign_in_confirm_not_bot_error, getServiceName(serviceId), - SIGN_IN_CONFIRM_NOT_BOT_ISSUE_URL) + SIGN_IN_CONFIRM_NOT_BOT_ISSUE_URL + ) throwable is ContentNotAvailableException -> ErrorMessage(R.string.content_not_available) From 93f9a52e3eafa8d532a9ad3fbc81f527ff8aae35 Mon Sep 17 00:00:00 2001 From: AbsurdlyLongUsername <22662897+absurdlylongusername@users.noreply.github.com> Date: Sat, 7 Mar 2026 19:13:02 +0000 Subject: [PATCH 90/92] Change URL to FAQ (cherry picked from commit 521f60af8557b602f7f8edf04eebc716aacbc9a5) --- app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt | 4 ++-- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt index 36793143509..82f7d84bf45 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt @@ -162,7 +162,7 @@ class ErrorInfo private constructor( const val SERVICE_NONE = "" - const val SIGN_IN_CONFIRM_NOT_BOT_ISSUE_URL = "https://github.com/TeamNewPipe/NewPipe/issues/11139" + const val YOUTUBE_IP_BAN_FAQ_URL = "https://newpipe.net/FAQ/#ip-banned-youtube" private fun getServiceName(serviceId: Int?) = // not using getNameOfServiceById since we want to accept a nullable serviceId and we // want to default to SERVICE_NONE @@ -254,7 +254,7 @@ class ErrorInfo private constructor( ErrorMessage( R.string.sign_in_confirm_not_bot_error, getServiceName(serviceId), - SIGN_IN_CONFIRM_NOT_BOT_ISSUE_URL + YOUTUBE_IP_BAN_FAQ_URL ) throwable is ContentNotAvailableException -> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e3e15b7766c..e5e5687964f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -878,7 +878,7 @@ HTTP error 403 received from server while playing, likely caused by streaming URL expiration or an IP ban HTTP error %1$s received from server while playing HTTP error 403 received from server while playing, likely caused by an IP ban or streaming URL deobfuscation issues - %1$s refused to provide data, asking for a login to confirm the requester is not a bot.\n\nYour IP might have been temporarily banned by %1$s, you can wait some time or switch to a different IP (for example by turning on/off a VPN, or by switching from WiFi to mobile data).\n\nPlease see Issue 11139 for more information + %1$s refused to provide data, asking for a login to confirm the requester is not a bot.\n\nYour IP might have been temporarily banned by %1$s, you can wait some time or switch to a different IP (for example by turning on/off a VPN, or by switching from WiFi to mobile data).\n\nPlease see the FAQ for more information This content is not available for the currently selected content country.\n\nChange your selection from \"Settings > Content > Default content country\". In August 2025, Google announced that as of September 2026, installing apps will require developer verification for all Android apps on certified devices, including those installed outside of the Play Store. Since the developers of NewPipe do not agree to this requirement, NewPipe will no longer work on certified Android devices after that time. Details From 7c88f061961030a1650ee8e6359d51d364dfd7e4 Mon Sep 17 00:00:00 2001 From: AbsurdlyLongUsername <22662897+absurdlylongusername@users.noreply.github.com> Date: Sat, 7 Mar 2026 23:38:51 +0000 Subject: [PATCH 91/92] Change to FAQ entry instead (cherry picked from commit 3b3348e7a1baf377a85a590acb55a05dfa83190b) --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e5e5687964f..b7ad216b3db 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -878,7 +878,7 @@ HTTP error 403 received from server while playing, likely caused by streaming URL expiration or an IP ban HTTP error %1$s received from server while playing HTTP error 403 received from server while playing, likely caused by an IP ban or streaming URL deobfuscation issues - %1$s refused to provide data, asking for a login to confirm the requester is not a bot.\n\nYour IP might have been temporarily banned by %1$s, you can wait some time or switch to a different IP (for example by turning on/off a VPN, or by switching from WiFi to mobile data).\n\nPlease see the FAQ for more information + %1$s refused to provide data, asking for a login to confirm the requester is not a bot.\n\nYour IP might have been temporarily banned by %1$s, you can wait some time or switch to a different IP (for example by turning on/off a VPN, or by switching from WiFi to mobile data).\n\nPlease see this FAQ entry for more information This content is not available for the currently selected content country.\n\nChange your selection from \"Settings > Content > Default content country\". In August 2025, Google announced that as of September 2026, installing apps will require developer verification for all Android apps on certified devices, including those installed outside of the Play Store. Since the developers of NewPipe do not agree to this requirement, NewPipe will no longer work on certified Android devices after that time. Details From 54021a96ea7b1bf8806d1756ffbf72554e86e3a4 Mon Sep 17 00:00:00 2001 From: tobigr Date: Sun, 8 Mar 2026 18:54:56 +0100 Subject: [PATCH 92/92] Complete sentence. (cherry picked from commit 47624a575a3c483592bffc41173ac2d4ee8f1f42) --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b7ad216b3db..99dd1a74cdb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -878,7 +878,7 @@ HTTP error 403 received from server while playing, likely caused by streaming URL expiration or an IP ban HTTP error %1$s received from server while playing HTTP error 403 received from server while playing, likely caused by an IP ban or streaming URL deobfuscation issues - %1$s refused to provide data, asking for a login to confirm the requester is not a bot.\n\nYour IP might have been temporarily banned by %1$s, you can wait some time or switch to a different IP (for example by turning on/off a VPN, or by switching from WiFi to mobile data).\n\nPlease see this FAQ entry for more information + %1$s refused to provide data, asking for a login to confirm the requester is not a bot.\n\nYour IP might have been temporarily banned by %1$s, you can wait some time or switch to a different IP (for example by turning on/off a VPN, or by switching from WiFi to mobile data).\n\nPlease see this FAQ entry for more information. This content is not available for the currently selected content country.\n\nChange your selection from \"Settings > Content > Default content country\". In August 2025, Google announced that as of September 2026, installing apps will require developer verification for all Android apps on certified devices, including those installed outside of the Play Store. Since the developers of NewPipe do not agree to this requirement, NewPipe will no longer work on certified Android devices after that time. Details