Note
After half a year of work, this is perhaps one of our biggest releases ever (more than 500 commits), including
- a full app redesign using Material 3 Expressive
- Edge to Edge support
- proper predictive back support
- and a lot more: see the detailed list below
Thanks to all contributors that made this release possible!
For those who want to financially support the development, it's now also possible to donate via crypto currencies
- Monero (XMR): 47jAx7jMFo5iqy9VgDH98qL1bSK4kr6Pxi7HKWcRwsxbVYJdjxJtyrwXeAUa5MutvcQUmWMBfvAKnPAutDHvWEymUgLm5v8
- Ethereum (ETH): 0x599909f54CdC18B997Be8F032341d1Fb14BF4F39
Enjoy the new app version!
Major new features
- feat: update ui components to material 3 expressive by @Bnyro in #7444
- feat: add support for viewing downloaded playlists by @Bnyro in #7810
- feat: support for trending categories (gaming, trailers, ...) by @Bnyro in #7592
- feat: use system default animations by @Pittvandewitt in #7053
- feat: display search suggestion / typo correction in results page by @Bnyro in #7780
- feat: support edge to edge by @Bnyro in #7507
- feat: new semitone mode in playback options sheet by @dhanuarf in #7579
- feat: filter members-only videos from channel tab by @FineFindus in #7677
- feat: keep queue history when opening new video by @Bnyro in #7676
Small new features / Quality of Life changes
- feat: add 'change region' button in TrendsFragment by @dhanuarf in #7816
- feat: add delays between subscription imports to avoid rate limits by @Bnyro in #7693
- feat: add toggle to include timestamp in playlists/subscriptions expo… by @Bnyro in #7691
- feat: allow drag-to-seek like YouTube by @osamasayed585 in #7757
- feat: automatically pause downloads when network changes to metered by @Bnyro in #7696
- feat: display title of downloading video by @FineFindus in #7578
- feat: show download playlist name by @Elolcol in #7768
- feat: dynamically scale landscape player based on screen size by @Bnyro in #7477
- feat: enable edge-to-edge in bottom sheets by @FineFindus in #7574
- feat: extract playlist name from filename at YouTube CSV imports by @Bnyro in #7481
- feat: disable video track when minimized while PiP is off by @dhanuarf in #7601
- feat: list all added custom instances in link share dialog by @Bnyro in #7652
- feat: load cached and downloaded images even if data saver mode disabled by @Bnyro in #7396
- feat: logarithmic brightness scaling by @Bnyro in #7536
- feat: request user confirmation before clearing playback queue by @Bnyro in #7752
- feat: separate 'clone' and 'create' when creating a new playist by @dhanuarf in #7597
- feat(subscriptions sheet): filter list by currently selected group by @dhanuarf in #7702
- feat: support for setting locale in Android settings for app (A13+) by @Bnyro in #7512
- feat: show snackbar when unsubscribing by @FineFindus in #7679
- feat: show toolbar when scrolling up in subscriptions feed for better accessibility by @dhanuarf in #7673
Layout changes
- feat: improve channel row layout by @Elolcol in #7769
- feat: improve comments row, replies and sheet styles and layout by @Elolcol in #7774
- feat: improve dialogs buttons style by @Elolcol in #7726
- feat: improve filter sort sheet ux by @Elolcol in #7775
- feat: improve description style and layout by @Elolcol in #7782
- feat: library text style and layout by @Elolcol in #7784
- feat: improve playlist layout by @Elolcol in #7766
- feat: improve playlist thumnail card by @Elolcol in #7724
- feat: replace image buttons with material 3 expressive icon buttons by @Bnyro in #7709
- feat: style of the sort button for download content by @Elolcol in #7733
- feat: subscription layout by @Elolcol in #7783
Bug Fixes
- fix: disable 'Add to playlist' button and spinner when there is no playlist available by @dhanuarf in #7603
- fix(player): move screenshot writing task to background thread by @dhanuarf in #7735
- fix(player ui): better control overlays visibility by @dhanuarf in #7636
- fix: appbar and bottom navigation paddings not properly applied by @dhanuarf in #7623
- fix: audio player autoplay doesn't work if autoplay countdown enabled by @Bnyro in #7480
- fix: auth api not immediately updated after selecting instance by @Bnyro in #7566
- fix: auto-fullscreen on shorts stopped working by @Bnyro in #7638
- fix: autoplay countdown appears when manually skipping to next video by @Bnyro in #7674
- fix: channel page scroll position reset when entering fullscreen by @Bnyro in #7811
- fix: collapse description when loading new video by @FineFindus in #7553
- fix(Comments): decrease intensity of creator badge by @FineFindus in #7809
- fix: comments sheet not dismissed when next video starts by @Bnyro in #7437
- fix: comment time not localized by @Bnyro in #7509
- fix: crash in trends when uploader url is unknown by @Bnyro in #7750
- fix: crash when deleting subsequent downloads by @Bnyro in #7567
- fix: crash when loading dearrow in search result by @dhanuarf in #7717
- fix: crash when opening app with no internet connection by @dhanuarf in #7718
- fix: crash when opening other video while in background player by @Bnyro in #7455
- fix: crash when setting video title with dearrow by @Bnyro in #7778
- Fix crash when streams size > 1MB by @Pittvandewitt in #7530
- fix: create playlist dialog shows URL instead of name text input field by default by @Bnyro in #7621
- fix: display
ContentItems withUNKNOWNavailability by @FineFindus in #7813 - fix: don't cancel subscriptions import if some channels can't be imported by @Bnyro in #7692
- fix: filter only
StreamInfoItems for availability by @FineFindus in #7684 - Fix: floating buttons by @Elolcol in #7725
- fix: hide channel avatar if there's none by @Bnyro in #7751
- fix(Home): hide Trending category by @FineFindus in #7675
- fix: home screen error not shown if homepage fails to load by @Bnyro in #7776
- fix: icon color of subscriptions toggle button by @Bnyro in #7777
- fix: image loading issues when scrolling too fast on a list by @dhanuarf in #7649
- Fix initial video player margin issue in PlayerFragment by @101paul in #7753
- fix: instance selection dialog not updated after modifying custom instances by @Bnyro in #7565
- fix: keyboard showing up in player screen by @dhanuarf in #7662
- fix: last selected playlist is not remembered in AddToPlaylistDialog by @Bnyro in #7527
- fix: library buttons overflowing in some languages by @Bnyro in #7747
- fix: localization of comment time by @Bnyro in #7748
- fix: location category is empty on A13+ by @Bnyro in #7688
- fix: offline player video title not updating when playing next video by @Bnyro in #7439
- fix: PiP button not working as intended by @dhanuarf in #7622
- fix(player): clear current stream when closing player by @FineFindus in #7429
- fix: player not paused when switching to other apps while pauseOnQuit is on by @dhanuarf in #7615
- fix(player ui): seek and skip buttons appear at opposite side in rtl mode by @dhanuarf in #7635
- fix: playlist/subscription imports don't complete for larger data by @Bnyro in #7440
- fix: prevent accidential navigation to the uploader instead of video by @Bnyro in #7817
- fix: queue missing when playing playlist video in background by @Bnyro in #7456
- fix: remove HLS message by @FineFindus in #7564
- fix: repeat mode doesn't work in offline player by @Bnyro in #7438
- fix: reset to previous pitch value if input is empty by @dhanuarf in #7606
- fix: screen turns off while player active after switching to video mode by @Bnyro in #7479
- fix: seek buttons always visible if double tap to seek disabled by @Bnyro in #7573
- fix: seek buttons still visible when player locked by @Bnyro in #7639
- fix: select main video language in download dialog by default by @Bnyro in #7510
- fix: Show a blank video when transitioning to a new video, just to inform the user that the new video is being loaded by @dhanuarf in #7526
- fix: 'show in seekbar' sponsorblock option causes app to crash by @Bnyro in #7388
- fix: shuffling downloads leaves queue empty if insertRelatedStreams disabled by @Bnyro in #7593
- fix: SponsorBlock segments skipped even if temporarily allowed by @Bnyro in #7395
- fix(sponsorblock): segment time not properly parsed if exceeds 1 hour by @dhanuarf in #7637
- fix(SubscriptionsFragment): reset scroll position when switching Chan… by @FineFindus in #7808
- fix(trending): 'Trailers' and 'Podcasts' content got swapped by @dhanuarf in #7758
- fix: trends fragment contains only first 10 items by @Bnyro in #7695
- fix(UI/Comments): only show creator reply indicator for the initial comment by @FineFindus in #7613
- fix: videos added to watch history even though history is disabled by @Bnyro in #7760
- fix: enable legacy TTML subtitle decoding support in Media3 by @Bilal-Ahmad123 in #7492
- fix: improve landscape player UI by @bermount in #7475
- fix: fetch dearrow via background thread in VideoCardsAdapter by @dhanuarf in #7795
Refactor
- refactor: provide service type via startForeground compat method by @Pittvandewitt in #7739
- refactor: refactor comments logic by @Pittvandewitt in #7076
- refactor: improve sizes in home layout by @Elolcol in #7767
- refactor: load deArrow when video gets visible for better loading times by @Bnyro in #7694
- refactor: make feed notifications more robust against subscription changes by @Bnyro in #7376
- refactor: merge general and advanced settings categories by @Bnyro in #7687
- refactor: move player related sub-views to its own binding by @Bnyro in #7550
- refactor(Preferences): use
MIGRATIONlength as version by @FineFindus in #7442 - refactor: re-use cached home page trends in trends fragment for faster load times by @Bnyro in #7600
- refactor: slightly simplify usages of onScrollStateChanged by @Bnyro in #7812
- refactor: some small padding changes by @Elolcol in #7785
- refactor: unify error handling to be more robust by @Bnyro in #7618
- refactor: use enum for top-level destinations by @osamasayed585 in #7762
- refactor: use
videoIdfor storing downloaded files by @FineFindus in #7576 - revert: downgrade media3 by @FineFindus in #7595
- refactor(Preferences/SponsorBlock): drop
VISIBLEoption by @FineFindus in #7434 - refactor: remove download title by @FineFindus in #7575
- refactor: remove legacy subscription view by @FineFindus in #7406
Chores
- build: keep NewPipeExtractor auto-generated proto classes by @FineFindus in #7571
- build: update NewPipeExtractor by @FineFindus in #7458
- chore: fix images in readme by @Bnyro in #7738
- chore: remove accidentially commited file by @Bnyro in #7518
- Chore: Remove context parameter from InstanceRepository by @SEKI-YUTA in #7466
- chore: remove hls over dash preference by @Bnyro in #7508
- Chore: Remove unused imports whole application by @SEKI-YUTA in #7468
- chore: revert Improve landscape UI by @Bnyro in #7476
- chore: update media3 to v1.7.1 by @Bnyro in #7617
- chore: update newpipeextractor to latest version by @Bnyro in #7779
- chore: update npe fork by @Bnyro in #7568
- chore: use ListAdapter#currentList instead of manual items impl by @Bnyro in #7452
- chore: use sentence case in settings and remove ampersand by @Bnyro in #7435
- ci: replace deprecated wrapper-validation action by @Bnyro in #7511
New Contributors
- @SEKI-YUTA made their first contribution in #7466
- @Bilal-Ahmad123 made their first contribution in #7492
- @dhanuarf made their first contribution in #7526
- @Elolcol made their first contribution in #7726
- @osamasayed585 made their first contribution in #7762
- @101paul made their first contribution in #7753
Full Changelog: v0.28.1...v29.0