From aa75a1449f16db356af3b21e95639b7b1d7fccd7 Mon Sep 17 00:00:00 2001 From: Diana Victoria Furrer Date: Sun, 15 Jun 2025 02:19:56 +0200 Subject: [PATCH 1/8] use MimeTypeMap from android webkit to check if the json MimeType is unsupported --- .../local/subscription/SubscriptionFragment.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt index 7288d9103..077d69622 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt @@ -13,6 +13,7 @@ import android.view.MenuItem import android.view.SubMenu import android.view.View import android.view.ViewGroup +import android.webkit.MimeTypeMap import android.widget.Toast import androidx.activity.result.ActivityResult import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult @@ -460,6 +461,14 @@ class SubscriptionFragment : BaseStateFragment() { } companion object { - const val JSON_MIME_TYPE = "application/json" + val JSON_MIME_TYPE = getMimeType() + + private fun getMimeType(): String { + val mimeTypeJson = MimeTypeMap.getSingleton().getMimeTypeFromExtension("json") + return if (mimeTypeJson.isNullOrBlank()) + "application/octet-stream" + else + mimeTypeJson + } } } From 0c9f5ddcaf1c4d0667de07eb73b5c00fbaef96ee Mon Sep 17 00:00:00 2001 From: Diana Victoria Furrer Date: Tue, 17 Jun 2025 15:42:01 +0200 Subject: [PATCH 2/8] change according to Isira-Seneviratne suggestion --- .../local/subscription/SubscriptionFragment.kt | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt index 077d69622..8e758adef 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt @@ -461,14 +461,7 @@ class SubscriptionFragment : BaseStateFragment() { } companion object { - val JSON_MIME_TYPE = getMimeType() - - private fun getMimeType(): String { - val mimeTypeJson = MimeTypeMap.getSingleton().getMimeTypeFromExtension("json") - return if (mimeTypeJson.isNullOrBlank()) - "application/octet-stream" - else - mimeTypeJson - } + val JSON_MIME_TYPE = MimeTypeMap.getSingleton() + .getMimeTypeFromExtension("json") ?: "application/octet-stream" } } From d048bca8b44c5f8ca2a2ef36a02b9eb18aa8ced2 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 28 Jun 2025 15:17:18 +0200 Subject: [PATCH 3/8] Temporarily disable sonarcloud CI step --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 54415858e..f6708fa83 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -111,6 +111,7 @@ jobs: path: app/build/reports/androidTests/connected/** sonar: + if: ${{ false }} # the key has expired and needs to be regenerated by the sonar admins runs-on: ubuntu-latest permissions: From a0adeb009930449cff2b3582b8d37a9a94643014 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sun, 6 Jul 2025 13:51:59 +0200 Subject: [PATCH 4/8] Fix "Get it on F-Droid" appearing giant in README --- README.md | 2 +- doc/README.ar.md | 2 +- doc/README.asm.md | 2 +- doc/README.de.md | 2 +- doc/README.es.md | 2 +- doc/README.fr.md | 2 +- doc/README.hi.md | 2 +- doc/README.it.md | 2 +- doc/README.ja.md | 2 +- doc/README.ko.md | 2 +- doc/README.pa.md | 2 +- doc/README.pl.md | 2 +- doc/README.pt_BR.md | 2 +- doc/README.ro.md | 2 +- doc/README.ru.md | 2 +- doc/README.ryu.md | 2 +- doc/README.so.md | 2 +- doc/README.sr.md | 2 +- doc/README.tr.md | 2 +- doc/README.zh_TW.md | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 3cd7927af..095c3c43a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@

NewPipe

A libre lightweight streaming front-end for Android.

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.ar.md b/doc/README.ar.md index 8747d3e2c..f005050c7 100644 --- a/doc/README.ar.md +++ b/doc/README.ar.md @@ -2,7 +2,7 @@

NewPipe

.Android واجهة أمامية متدفقة خفيفة الوزن لنظام

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.asm.md b/doc/README.asm.md index c2d919d09..37d0949b7 100644 --- a/doc/README.asm.md +++ b/doc/README.asm.md @@ -2,7 +2,7 @@

NewPipe

এণ্ড্ৰইডৰ বাবে এটা লিব্ৰে লাইটৱেট ষ্ট্ৰীমিং ফ্ৰন্ট-এণ্ড।

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.de.md b/doc/README.de.md index 03dd2b364..5cbb4e6dd 100644 --- a/doc/README.de.md +++ b/doc/README.de.md @@ -5,7 +5,7 @@

NewPipe

Eine freie, offene und leichtgewichtige Streaming App für Android.

-

Hole es dir auf F-Droid

+

Hole es dir auf F-Droid

diff --git a/doc/README.es.md b/doc/README.es.md index 338b3242a..4a08cba08 100644 --- a/doc/README.es.md +++ b/doc/README.es.md @@ -2,7 +2,7 @@

NewPipe

Una interfaz de streaming ligera y libre para Android.

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.fr.md b/doc/README.fr.md index ee3621e27..cfebcb2a6 100644 --- a/doc/README.fr.md +++ b/doc/README.fr.md @@ -5,7 +5,7 @@

NewPipe

Un front-end de streaming libre et léger pour Android.

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.hi.md b/doc/README.hi.md index ed56fca14..6098c6c26 100644 --- a/doc/README.hi.md +++ b/doc/README.hi.md @@ -2,7 +2,7 @@

NewPipe

Android के लिए एक ओपन सोर्स, हल्का YouTube ऐप।

-

इसे F-Droid पर पाएँ

+

इसे F-Droid पर पाएँ

diff --git a/doc/README.it.md b/doc/README.it.md index 930959c77..d926db6bc 100644 --- a/doc/README.it.md +++ b/doc/README.it.md @@ -2,7 +2,7 @@

NewPipe

Un frontend di streaming libero e leggero per Android.

-

Scaricalo su F-Droid

+

Scaricalo su F-Droid

diff --git a/doc/README.ja.md b/doc/README.ja.md index 19902d57e..1e751855b 100644 --- a/doc/README.ja.md +++ b/doc/README.ja.md @@ -2,7 +2,7 @@

NewPipe

自由で軽量な Android 向けストリーミングフロントエンド

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.ko.md b/doc/README.ko.md index 3c2f9f39e..39fb7e11c 100644 --- a/doc/README.ko.md +++ b/doc/README.ko.md @@ -2,7 +2,7 @@

NewPipe

A libre lightweight streaming frontend for Android.

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.pa.md b/doc/README.pa.md index 2dbc94c14..9b84ded18 100644 --- a/doc/README.pa.md +++ b/doc/README.pa.md @@ -2,7 +2,7 @@

NewPipe

ਐਂਡਰੌਇਡ ਲਈ ਇੱਕ ਮੁਫ਼ਤ ਹਲਕਾ-ਫੁਲਕਾ ਸਟ੍ਰੀਮਿੰਗ ਯੂਟਿਊਬ ਫਰੰਟ-ਐਂਡ।

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.pl.md b/doc/README.pl.md index 9d216c590..9574491c7 100644 --- a/doc/README.pl.md +++ b/doc/README.pl.md @@ -2,7 +2,7 @@

NewPipe

Wolny, lekki streamingowy frontend na Androida.

-

Pobierz z F-Droid

+

Pobierz z F-Droid

diff --git a/doc/README.pt_BR.md b/doc/README.pt_BR.md index d65fa9790..b73da2de1 100644 --- a/doc/README.pt_BR.md +++ b/doc/README.pt_BR.md @@ -6,7 +6,7 @@

NewPipe

Uma interface de streaming leve e gratuita para Android.

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.ro.md b/doc/README.ro.md index 5363ef7bc..3f146f7e4 100644 --- a/doc/README.ro.md +++ b/doc/README.ro.md @@ -2,7 +2,7 @@

NewPipe

Un front-end de streaming „uşor” liber, pentru Android.

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.ru.md b/doc/README.ru.md index 894e5f2e0..8a9955707 100644 --- a/doc/README.ru.md +++ b/doc/README.ru.md @@ -2,7 +2,7 @@

NewPipe

Свободный и легковесный клиент потоковых сервисов для Android.

-

Скачать на F-Droid

+

Скачать на F-Droid

diff --git a/doc/README.ryu.md b/doc/README.ryu.md index 8676f1bfd..f3ca31af0 100644 --- a/doc/README.ryu.md +++ b/doc/README.ryu.md @@ -2,7 +2,7 @@

NewPipe

じゆーいっしけいりょうなAndroidんきーストリーミングフロントエンド

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.so.md b/doc/README.so.md index 82e544d93..843bed749 100644 --- a/doc/README.so.md +++ b/doc/README.so.md @@ -2,7 +2,7 @@

NewPipe

App bilaash ah oo fudud looguna talagalay in Android-ka wax loogu daawado.

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.sr.md b/doc/README.sr.md index d8b0fe435..21e4d857c 100644 --- a/doc/README.sr.md +++ b/doc/README.sr.md @@ -5,7 +5,7 @@

NewPipe

Бесплатна и лагана апликација за стримовање за Android.

-

Набавите на F-Droid

+

Набавите на F-Droid

diff --git a/doc/README.tr.md b/doc/README.tr.md index c6610d97d..6e95e54de 100644 --- a/doc/README.tr.md +++ b/doc/README.tr.md @@ -2,7 +2,7 @@

NewPipe

Android için hafif ve özgür bir akış arayüzü.

-

Get it on F-Droid

+

Get it on F-Droid

diff --git a/doc/README.zh_TW.md b/doc/README.zh_TW.md index 04a8355cb..05518624f 100644 --- a/doc/README.zh_TW.md +++ b/doc/README.zh_TW.md @@ -2,7 +2,7 @@

NewPipe

輕巧的 Android 串流前端

-

Get it on F-Droid

+

Get it on F-Droid

From 834c93f22add0046470583625d788518a0553fe2 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sun, 6 Jul 2025 14:49:09 +0200 Subject: [PATCH 5/8] Fix thumbnails appearing on Android Auto even if disabled --- .../player/mediabrowser/MediaBrowserImpl.kt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserImpl.kt b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserImpl.kt index 3108da80f..c52f78250 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserImpl.kt +++ b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserImpl.kt @@ -8,6 +8,7 @@ import android.support.v4.media.MediaBrowserCompat import android.support.v4.media.MediaDescriptionCompat import android.util.Log import androidx.annotation.DrawableRes +import androidx.core.net.toUri import androidx.media.MediaBrowserServiceCompat import androidx.media.MediaBrowserServiceCompat.Result import androidx.media.utils.MediaConstants @@ -185,7 +186,7 @@ class MediaBrowserImpl( builder .setMediaId(createMediaIdForInfoItem(playlist is PlaylistRemoteEntity, playlist.uid)) .setTitle(playlist.orderingName) - .setIconUri(playlist.thumbnailUrl?.let { Uri.parse(it) }) + .setIconUri(imageUriOrNullIfDisabled(playlist.thumbnailUrl)) val extras = Bundle() extras.putString( @@ -212,7 +213,7 @@ class MediaBrowserImpl( } ImageStrategy.choosePreferredImage(item.thumbnails)?.let { - builder.setIconUri(Uri.parse(it)) + builder.setIconUri(imageUriOrNullIfDisabled(it)) } return MediaBrowserCompat.MediaItem( @@ -258,7 +259,7 @@ class MediaBrowserImpl( builder.setMediaId(createMediaIdForPlaylistIndex(false, playlistId, index)) .setTitle(item.streamEntity.title) .setSubtitle(item.streamEntity.uploader) - .setIconUri(Uri.parse(item.streamEntity.thumbnailUrl)) + .setIconUri(imageUriOrNullIfDisabled(item.streamEntity.thumbnailUrl)) return MediaBrowserCompat.MediaItem( builder.build(), @@ -277,7 +278,7 @@ class MediaBrowserImpl( .setSubtitle(item.uploaderName) ImageStrategy.choosePreferredImage(item.thumbnails)?.let { - builder.setIconUri(Uri.parse(it)) + builder.setIconUri(imageUriOrNullIfDisabled(it)) } return MediaBrowserCompat.MediaItem( @@ -316,7 +317,7 @@ class MediaBrowserImpl( builder.setMediaId(mediaId) .setTitle(streamHistoryEntry.streamEntity.title) .setSubtitle(streamHistoryEntry.streamEntity.uploader) - .setIconUri(Uri.parse(streamHistoryEntry.streamEntity.thumbnailUrl)) + .setIconUri(imageUriOrNullIfDisabled(streamHistoryEntry.streamEntity.thumbnailUrl)) return MediaBrowserCompat.MediaItem( builder.build(), @@ -395,5 +396,13 @@ class MediaBrowserImpl( companion object { private val TAG: String = MediaBrowserImpl::class.java.getSimpleName() + + fun imageUriOrNullIfDisabled(url: String?): Uri? { + return if (ImageStrategy.shouldLoadImages()) { + url?.toUri() + } else { + null + } + } } } From a4d457b2b2eac7ca9a0b30b430327c05cc61cb8c Mon Sep 17 00:00:00 2001 From: Stypox Date: Sun, 6 Jul 2025 14:49:49 +0200 Subject: [PATCH 6/8] Use Kotlin's .toUri() instead of Uri.parse() --- .../org/schabi/newpipe/player/mediabrowser/MediaBrowserImpl.kt | 2 +- .../player/mediabrowser/MediaBrowserPlaybackPreparer.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserImpl.kt b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserImpl.kt index c52f78250..f15d7ab08 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserImpl.kt +++ b/app/src/main/java/org/schabi/newpipe/player/mediabrowser/MediaBrowserImpl.kt @@ -104,7 +104,7 @@ class MediaBrowserImpl( private fun onLoadChildren(parentId: String): Single> { try { - val parentIdUri = Uri.parse(parentId) + val parentIdUri = parentId.toUri() val path = ArrayList(parentIdUri.pathSegments) if (path.isEmpty()) { 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 f34677a29..a3791e2e7 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 @@ -6,6 +6,7 @@ import android.os.Bundle import android.os.ResultReceiver import android.support.v4.media.session.PlaybackStateCompat import android.util.Log +import androidx.core.net.toUri import com.google.android.exoplayer2.Player import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector.PlaybackPreparer import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers @@ -137,7 +138,7 @@ class MediaBrowserPlaybackPreparer( private fun extractPlayQueueFromMediaId(mediaId: String): Single { try { - val mediaIdUri = Uri.parse(mediaId) + val mediaIdUri = mediaId.toUri() val path = ArrayList(mediaIdUri.pathSegments) if (path.isEmpty()) { throw parseError(mediaId) From 79084568f2d827588b963a246e623830ebdca4d1 Mon Sep 17 00:00:00 2001 From: Stypox Date: Mon, 7 Jul 2025 15:07:46 +0200 Subject: [PATCH 7/8] Fix fullscreen eliciting "clear queue" prompt --- .../org/schabi/newpipe/player/helper/PlayerHolder.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 20a0f3766..97f2d6717 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 @@ -159,6 +159,11 @@ public final class PlayerHolder { private boolean playAfterConnect = false; + /** + * @param playAfterConnection Sets the value of `playAfterConnect` to pass to the {@link + * PlayerServiceExtendedEventListener#onPlayerConnected(Player, boolean)} the next time it + * is called. The value of `playAfterConnect` will be reset to false after that. + */ public void doPlayAfterConnect(final boolean playAfterConnection) { this.playAfterConnect = playAfterConnection; } @@ -183,7 +188,6 @@ public final class PlayerHolder { playerService = localBinder.getService(); if (listener != null) { listener.onServiceConnected(playerService); - getPlayer().ifPresent(p -> listener.onPlayerConnected(p, playAfterConnect)); } startPlayerListener(); // ^ will call listener.onPlayerConnected() down the line if there is an active player @@ -357,6 +361,8 @@ public final class PlayerHolder { listener.onPlayerDisconnected(); } else { listener.onPlayerConnected(player, serviceConnection.playAfterConnect); + // reset the value of playAfterConnect: if it was true before, it is now "consumed" + serviceConnection.playAfterConnect = false; player.setFragmentListener(internalListener); } } From f0b26e208bef1b0b1710d219f8eb5ac8ffaa00b5 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sun, 6 Jul 2025 14:00:54 +0200 Subject: [PATCH 8/8] Update notice about rewrite in the README --- README.md | 4 ++-- doc/README.de.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 095c3c43a..c19144064 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -

We are planning to rewrite large chunks of the codebase, to bring about a new, modern and stable NewPipe!

-

Please do not open pull requests for new features now, only bugfix PRs will be accepted.

+

We are rewriting large chunks of the codebase, to bring about a modern and stable NewPipe! You can download nightly builds here.

+

Please work on the refactor branch if you want to contribute new features. The current codebase is in maintenance mode and will only receive bugfixes.

NewPipe

diff --git a/doc/README.de.md b/doc/README.de.md index 5cbb4e6dd..34ad94ab1 100644 --- a/doc/README.de.md +++ b/doc/README.de.md @@ -1,5 +1,5 @@ -

Wir planen große Teile des Quellcodes neu zu schreiben, um NewPipe neu, modern und stabiler zu machen!

-

Öffne keine neuen Pull Requests für neue Features, es werden nur Fehlerbehebungen akzeptiert.

+

Wir sind im Prozess, größere Teile unseres Codes neuzuschreiben, um eine moderne und stabile NewPipe App zu kreieren! Du kannst nightly builds hier herunterladen.

+

Bitte nutze den refactor branch als Arbeitsgrundlage, wenn du neue Funktionen beitragen willst. Die aktuelle Codebase ist im reinen Maintenance mode und bekommt nur noch Fehlerbehebungen.

NewPipe