NewPipe 0.20.0 released: A new major version, a new unified player, a new notification experience... A lot is new this time!

post image By Schabi

Hey there! Guess who is back? We are. Admittedly, we’re quite a bit late with this release. But there is a very good reason for that. Are you ready for it? Sit down, grab some popcorn and a beverage of your choice. This is going to be long.

A new unified player

“What in the name of the coronavirus is the unified player?” you ask. Well, first of all, that’s a very weird expression. Where did you even get that one from… - you know what? Save it. We don’t want to know. You just keep on using that, we’ll keep on talking about the new player.

A new player it indeed is. Up until now, NewPipe had three different players bundled in its code: the main, pop-up and background players. All three had separate code and separate playing queues. When you switched from one player to another, in the background, the old player and its queue closed itself, while a new player was created, along with a new queue, which took over then. If that sounds complicated and cumbersome, that’s because it is. Moreover, if you accidentally switched using the player buttons below the thumbnail instead of the ones in the drop down menu inside the player, the stream would start from the beginning instead of carrying on from where you left, and you would lose your (possibly carefully built) queue.

Well, no more! The buttons in the player drop down menu have been removed and the action buttons below the thumbnail work like they’re supposed to, so now you’re at no risk whatsoever of losing your playing position or queue. Whew!

This was made possible by rewriting the code so that all players run on one common service. When you switch from one player to another, this service remains running, preserving the stream data, and the new player just picks up from where the old one left off. Everything remains the same, including the queue. Ah, serendipity.

Video details page

A more unified experience is not the only feature this change brought you. There is one which is immediately noticeable once you open a video in the new version: the video details page. Earlier, when you opened the video details, you were shown a thumbnail, video description, comments, etc. Tapping the thumbnail would open the player in full-screen, hiding the rest of these elements. Now, when you’re in portrait mode, the video plays right in the video details page - just like YouTube! There is even a new ‘Autoplay’ setting which plays the video automatically when you open video details - also just like YouTube! This setting will be turned on by default for Wi-Fi. Of course, you can turn it off if you prefer the behaviour of the previous versions.

Video orientation

Previously, the main video player would always play videos in full-screen regardless of your selected orientation. This was fine for landscape videos in landscape mode and portrait videos in portrait mode, but it resulted in a lot of wasted space if the video’s orientation didn’t match the player’s. No more! There is now a full-screen button which replaces the orientation switch button, and it is smart. It will detect if the video is landscape or portrait, and will ensure the player is in the correct orientation when you enter full-screen! How’s that for convenience and usability? Not only that, but if auto-rotate is enabled, and the video is a landscape one, the button will disappear because you don’t need it! (In portrait mode, you still need the button to go into full-screen from the video details.)

Minimized player

You can now swipe down on the video in the video details page to minimize it - just like YouTu… wait no. It’s better. You get a minimized player at the bottom, and you can play/pause or even close it from there. How cool is that? The video will keep playing (or stay paused, if you prefer that) while you browse NewPipe at your leisure! No more having to finish a video before browsing mindlessly! Yay distractions! (In landscape mode, you can swipe down on the title to minimize as well. The swipe area is confined to that region because the rest is used for the existing volume and brightness gestures, as you know.)

Since the player can now be minimized instead of closed, this means you get to retain your opened video queue! Let us go through an example: You watch a video, minimize it, then browse the trending page (you insane person), watch a video from there, quickly minimize it, browse for some calming music, and finally watch a video about pandas. As long as the minimized player isn’t closed (by using the cross button or swiping down on it), you can tap back to go through those videos in reverse order! This allows you to browse a whole bunch of videos and quickly build up a video queue before you start watching them. You were able do this earlier, but you had to use the background or popup player queues as a workaround, since the main player’s queue isn’t accessible outside of the player.

Thumbnail progress bar

You can only see this when you play the video in the background or pop-up, but there is now a shiny new progress bar underneath the thumbnail! It updates in real time, gets a little counter and a red bar - it’s great, really.

All of what you’ve read above was made possible by the lean and mean coding machine, the one and only - (drumroll) - @avently! Seriously, you should all sacrifice your first born child in his name. Or just say thank you, whatever works out for ya (that would be kind of boring, though).


On a serious note, this was a massive, massive change to not only the code, but also the app’s workflow, so this PR was tested, reviewed and modified lots of times, over a long period of time, before it was allowed to see the light of day with this release. A huge thank you to you, @avently, for having the patience and dedication to keep adding features and bug fixes until everyone was satisfied! A different person probably would have gone insane. And a big thank you to the maintainers for doggedly reviewing this gigantic PR repeatedly. Those ~6600 additions and ~5600 removals must have felt intimidating!

Naturally, since this was such a massive change, several bugs also slipped through. But @avently, with the help of @blackbox87, @Stypox and @TobiGr fixed them rapidly as they were reported.

The Notification is dead, long live the Notification!

If you care about such things, you have likely noticed that NewPipe’s notification looks quite different from most media player apps these days. It has a progress bar, buttons in odd places, and a permanent grey colour. This is because NewPipe uses an old API for notifications called RemoteView. This allowed for a lot of customisation, and that was good at the time it was in vogue. However, it has been deprecated and superseded by a more modern API.

Enter the Age of MediaStyle notification:

This is a special notification type which has been available for media apps to use since Android Lollipop. In Oreo, it gained the ability to be coloured to match the colour theme of the cover art of the music playing. And since Android 10, it has a seekbar built right into it! It is a powerful API that removes the need to use a whole bunch of custom code to achieve what we had so far. This will make it far easier to maintain and improve NewPipe’s notification. Win for development! So let’s get on with what is new and what has changed.

Android 9

First of all, we say “sorry” to our users on Android 9 and below. The progress bar is gone. As we’ve said above, it will only be shown on Android 10 and above. We’re a small team and can’t maintain code for the old and new types of notifications simultaneously, so the old one has to go. And not just that; the old notification isn’t even supported Android 11 onwards. Bye-bye RemoteView notifications. We shall miss you! :’(

But you get a lot in exchange for that sacrifice!

New features

You get five CUSTOMISABLE - you read it right! - CUSTOMISABLE action buttons to control playback. There is a new notification category in the app settings, and you can choose which button should perform which player action. Play/pause, forward/rewind, previous/next, shuffle, repeat, close, or even nothing!

Then, you can choose which three of these five buttons show in the compact notification (remember that little arrow you use to expand/contract the notification?).

For users on Android 8+: Colours! Warm colours. Cool colours. All the colours! As we’ve noted above, MediaStyle notifications adapt to the colours of the cover art, which looks just plain awesome.

For users on Android 10+: Seekbar! The old notification had a progress bar, but that was just a visual indicator. Now you can actually seek from the notification itself. Marvel at the massive boost in convenience, and have fun seeking!

For users on Android 11: Congratulations! You get a notification now! NewPipe’s media session will show up in the notification shade and in Quick Settings just as advertised.

This cool contribution was brought to us in its original form by @cool-student. Sadly, we couldn’t get in touch with them when we were ready to focus on this PR, so @wb9688 and @Stypox swooped in to save the day! @wb9688 updated the code to conform to our standards and coding style, and @Stypox did the (painstaking!) work of rebasing the code after the unified player PR was merged into the development branch.

Ultimately, he took over the responsibility for this PR. He updated and polished the UI, fixed bugs, got everyone and their grandfather to test the changes, and pulled us to the finish line!

Improvements

We are not done yet with what this release brings you (you may want to take a few sips of that beverage now). If you use an environment where resizing an app is possible, NewPipe can do this now as well, thanks to @TobiGr.

Have you ever shared a URL to NewPipe, just to be greeted with a little “Unsupported URL” toast? Well, the app still doesn’t support those kinds of URLs with this release, but at least we show you a way better error message now! It allows you to reshare the URL or just offers to open it in a browser instead. All this, thanks to @Stypox and to @webber-naut for bringing our attention to this in the first place.

Talking about sharing, when you share a live stream with someone, NewPipe doesn’t add a timestamp to the URL any more. This was done by @nmurali94. Thanks.

The header layout has been improved: the alignment on the sides is consistent now and longer headings can fit themselves on two lines instead of just one.

If you ever tried to search something and then lost connection to the internet, or just tried to search while being offline, you would have noticed that NewPipe didn’t let you type your search term. Instead it kept on rudely interrupting you with a network error. That is fixed now. You can type all you want, and it will only fail if you actually hit enter or press the search button. Both of these changes were brought to you by @Stypox. Thanks!

In order to save some of that valuable mobile data, you were already able to turn off video thumbnails and profile pictures for comments. Now even the black placeholders which replaced them are gone and comments can comfortably take up the space left behind. Thanks, @4D17Y4!

@TobiGr brought two more improvements into this release: the setting to remember pop-up size and position has a less redundant description, and when you switch to another app, the main player now minimizes to background audio by default to allow for a more seamless transition. Swoosh.

It’s 2020, and our default resolutions also realized this. Instead of having 360p everywhere, main player videos are opened in 720p at 60FPS now, and pop-up ones in 480p. Thank you, @B0pol. NewPipe now also remembers what kind of media you downloaded the last time, and will auto-select it when you hit download on a new video. This was done by @vmazoyer.

Since ‘Autoplay’ is a new configurable setting in this release, @opusforlife2 changed the ‘Autoplay’ toggle in the video details to say “Auto-queue” instead. Now it’s clearer what that toggle does without leaving room for any confusion.

More Translation updates and improvements

Apart from the language improvements mentioned above, some other interesting localization changes happened in this release. @comradekingu, a frequent contributor to and language checker of NewPipe and other open source projects, has once again taken a close look at our strings. There was, as always, a lot of room for improvement. Our wonderful translators rushed to help and immediately implemented his suggestions.

We are also happy to provide new localizations in this release: Sardinian, Bengali, Portuguese (Portugal), Neapolitan and Berber.

If you are missing a translation or think a phrase needs adjustment, head over to Weblate and help us improve NewPipe’s translation even more!

Fixes

If you noticed that next to offline search input now working, the actual text of the suggestions look better now, you are correct. @TobiGr changed the colours used to the default ones.

An empty error report in certain kinds of crashes is not empty anymore, since @Stypox took care of properly calling code. Yay, code! He also fixed a crash when NewPipe encounters an empty comment. Now it will be displayed just as empty as it is.

Thanks to @wb9688, you can open a video in the local playlist tab (and potentially other locations), whereas earlier, the app would crash. And thanks to @BoFFire, if you open the app in the Taqbaylit language, its called Taqbaylit now and not Tamaziɣt Taqbaylit.

The license pop-up doesn’t disappear when you change orientation now. This was introduced by @nmurali94. And @budde92 ensured that you can now delete a file you just downloaded and then try to re-download it without the app crashing. We are not sure why you’d want to do this, but now you can do so without any worries.

@mhmdanas changed a code call because its origin was redundant. Yay for less redundancy. When auto-queue is enabled, Newpipe wants to add a stream to the queue the moment you open a video. But if there are no video suggestions on that page, it causes a crash. This has been fixed by @wb9688.

Development

Development. Where all the magic which keeps this app running happens. It saw some improvements in this release: (Warning: Nerd talk ahead)

  • The extractor will ignore OTF streams now, since they don’t work with progressive HTTP, and the extractor can’t work with DASH just yet. This has been a major point of inconvenience for a lot of users (and us, too!) so we’re eager to mitigate the problem until the proper fix sometime later. (@wb9688)

  • A Checkstyle rule was added so it would show an error when a local variable which could be final wasn’t declared as such. (@XiangRongLin)

  • A library we use, PrettyTime, has been updated to a newer version so that a workaround can be removed from NewPipe’s code. We get a performance improvement as a bonus! (@B0pol)

  • Numbers and uppercase letters are now allowed in the application ID. (@Stypox)

  • Contributors need to discuss their contributions now prior to opening a PR. (@gkeegan)

  • Some deprecations as well as a lot of code cleanup happened. (@TacoTheDank)

  • The code now prevents the YouTube website from accessing the available Java packages from NewPipe’s parser. This removes a possible attack surface. (@wb9688)

Where to get this brand-new version

NewPipe notifies you about new versions. You can download them when you press the notification. An alternative is the GitHub release page. If you use the F-Droid app, it notifies you as well about an update for NewPipe - please keep in mind that it can take F-Droid a while to update their repository. If you have problems installing you may need to uninstall NewPipe then reinstall (make sure to backup data).

If you already had NewPipe installed through F-Droid’s repository, to get this version of NewPipe you can do one of the following:

  • Wait for them to update or
  • Switch to the NewPipe repository by following the directions in the announcement (if you had previously installed NewPipe from GitHub releases you will not have to uninstall NewPipe to switch)

Now that you’ve updated, please let us know what your experience of the latest release is, especially bugs in need of fixing. As usual, you can reach out to us via IRC (#newpipe on freenode), open issues on GitHub or, ideally, use our built-in crash reporter to send us machine-readable issue reports. You can even send in fixes yourself. If you have any other questions feel free to send them in the comments here and someone will reply to you.

See also:  pinned  release

Let us know what you think!