NewPipe 0.20.0 released: Reworked UI, Unified Player, MediaStyle Notifications

post image

Hey there, NewPipers! It’s been quite long since the last release. But for good reason: This release comes with quite major changes to the way NewPipe works, visibly as well as under the hood.

Reworked UI

Embedded Playback in Portrait orientation

  • Videos will now play in the details page when in portrait orientation.

  • By default, playback will start automatically upon opening.

To accommodate this change and make it more palatable for users who prefer to initiate video playback themselves (“How dare you start the video without asking me!” shakes fist), there is a new ‘Autoplay’ setting to control playback. Autoplay will be turned on by default for Wi-Fi, but you can always turn it off completely if you want.

Correct Video Orientation

The gist: The player now automatically assumes the correct orientation when you enter full screen.

The details:

In the previous version, if auto-rotate was off, the main video player would just play videos in whatever orientation you last used. You would have to manually rotate the screen if you encountered a video with the opposite orientation. 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 right when you enter full-screen! How’s that for convenience and usability?

Not just that; if auto-rotate is enabled, rotating the device to landscape will automatically play the video in fullscreen.

Minimized Player

The gist: A minimized player that lets you browse NewPipe during playback, and stores your opened videos in a temporary queue.

The details:

In the previous version, you could either watch a video in the main player or browse NewPipe. No browsing while watching. And you sort of had to keep track of where you were in terms of navigation in the app. (We’ve all been down the “Related Videos” rabbit hole.)

Now you can swipe down on the video in the embedded player, or swipe down from the title area when in full screen, to collapse the video to a ‘mini player’. You can pause and resume the video from the mini player, or close the video entirely.

Moreover, if you open, say, ten video pages in a row, the mini player will keep all of those pages in memory until you close it (kind of like a browser tab). So you can pause a video, browse Newpipe, queue up a few more, and resume the video, all without losing your place. No more having to finish a video before browsing mindlessly – yay distractions!

Thumbnail progress bar

Look at this screenshot!

Nice, isn’t it? You get this shiny new progress bar underneath the thumbnail when you play a video in the background or pop-up players. It updates in real time, gets a little counter and is coloured red - it’s great, really.

The Unified Player

The gist: The three players (main, pop-up, and audio), which were completely separate earlier, have been welded on top of one common player service so they can share the current stream state.

The details:

Up until now, NewPipe had three separate players: main, pop-up and audio. All three had separate stream states and separate playing queues. When you switched from one player to another, the old player and its queue closed in the background, while a new player and queue were created, after which they took over playback. If that sounds complicated and cumbersome, that’s because it is.

Now, the code has been rewritten so that all players run using one common service. When you switch from one player to another, this service remains running, preserving the stream state, and the new player just picks up from where the old one left off. Less work for the app, which means faster switching between players!

Some side effects of this change:

  • There is only one common queue now. So no matter how you enqueue a video, it will be added to the same queue instead of creating a new one. We would like feedback on whether this change is welcome or not.

  • The app will always show a notification when a stream is playing. This is so that Android doesn’t kill playback whenever it feels like it.

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 you, you boring people. Try to be more adventurous in life.

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 a large number of them. More will be addressed by further point releases.

The Notification is dead, long live the Notification!

The gist: New notification! Very colour-y! Very button-y!

The details:

The old notification was based on a very old API (‘RemoteView’, which was pre-Lollipop!). Now we have a new one, which should be familiar to you if you’ve used other popular media apps. Does the cover art - based theming ring a bell?

Enter the Age of the MediaStyle notification:

Pros:

  • 5 action buttons, customisable from the new Notification menu
  • 3 customisable action buttons for the compact notification
  • Android 8 and above: Theme matches the cover art
  • Android 10 and above: Seekbar right in the notification
  • Android 11 support!
  • The code is easier to maintain

Con:

  • Android 9 and below: Loss of the progress bar.

Do the pros outweigh the con? (Hint: This is a rhetorical question.)

Some background:

The old notification API doesn’t work on Android 11. Users don’t see a notification at all. So the newer API had to be used no matter what. Since maintaining the code for two notification styles would double the burden, the old one has been removed entirely.

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, @Stypox 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. @TobiGr

  • If you have ever encountered the “Unsupported URL” toast when sharing to NewPipe, it is handled better now. You can choose to further share to another app, or open it in a browser. @Stypox

  • NewPipe doesn’t generate a timestamped link when sharing a live stream anymore. @nmurali94

  • The playlist 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. @Stypox

  • Typing in the search bar now works even when internet connection is lost or turned off. Earlier, NewPipe would interrupt by closing the keyboard on every letter/word input and try to send the search query to the service, showing a useless network error each time. Now it waits until you tap the search button. @Stypox

  • 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. @4D17Y4

  • The ‘Minimize on app switch’ setting has been changed to switch to the background player by default, to accompany the unified player changes above. @TobiGr

  • The ‘Remember popup size and position’ setting has a less redundant name now. @TobiGr

  • It is 2020, everyone. Really, the only good change that came about this year is higher resolution. The default video resolution has been set to 720p at 60FPS, and 480p for the pop-up player. @B0pol

  • NewPipe now remembers what kind of media you downloaded the last time, and will auto-select it when you hit download on a new video. @vmazoyer

  • “Autoplay” has been changed to “Auto-queue” in the video page. This is to prevent confusion with the new “Autoplay” setting which controls whether videos automatically start in the embedded player. @opusforlife2

Translations

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

  • “Did you mean” and “Showing results for” now have a dark text colour in the light theme, so they can be seen without squinting. @TobiGr

  • Sometimes error reports did not contain the actual code that caused the error. This is now fixed. @Stypox

  • NewPipe would crash if it encountered an empty comment. No more! (Why would anyone leave empty comments, though?) @Stypox

  • If you added a local playlist as a main page tab, playing any video in it would cause a crash. Fixed now. @wb9688

  • If you open the app in the Taqbaylit language, its called Taqbaylit now and not Tamaziɣt Taqbaylit. @BoFFire

  • The license pop-up doesn’t disappear anymore upon rotation. @nmurali94

  • If you download a file, delete it from your file explorer, then redownload it without restarting NewPipe, it doesn’t cause a crash anymore. @budde92

  • Some redundant code related to subtitles was removed. @mhmdanas

  • When auto-queue is enabled, NewPipe tries to add a stream to the queue the moment you open a video. But if there happen to be no video suggestions on that page, it causes a crash. This has been fixed. @wb9688

    Development

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

  • YouTube serves several stream types: progressive HTTP, OTF and DASH. The app can only play the first, but the extractor can fetch both progressive HTTP and OTF. So the extractor will now ignore OTF streams instead of showing them but not being able to play them (endlessly spinning loading indicator, know that you are hated by one and all). 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 a proper fix sometime later, which will add DASH support. (@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, which will take you to the GitHub release page.

If you use the F-Droid app, it, too, notifies you about updates 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 and then install it afresh. (Make sure to backup data by exporting your database from the Content settings menu.)

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

Note: If you installed NewPipe from GitHub Releases you will not have to uninstall NewPipe to switch to our custom repo. Just let it update your current version.

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 Libera.Chat), 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!

Please read our rules before leaving a comment!

→ Feature requests or bug reports need to be reported on GitHub! ←