Version 0.20 of the Android TV app is coming. To read more about the release process and follow updates, please see the release plan discussion.
This initial beta will not be released on the app store beta channels.
If you appreciate my work, you can show your support with a donation through Buy Me a Coffee or GitHub sponsors. Your support helps me continue improving and growing the app. Thank you!
🐛 Beta information
Beta versions are not guaranteed to work as expected. We encourage users to create detailed bug reports if any problems arise. Read our blog post for more information about our Android beta programs.
🌟 Highlights
- Add option to always burn in subtitles when transcoding #4459, by @GertSallaerts
- Require Android 6 at minimum (API 23) #4836, by @nielsvanvelzen
- Use Jellyfin 10.11 based SDK #5037, by @nielsvanvelzen
- Support Advanced SubStation Alpha direct play #5121, by @nielsvanvelzen
- Add new settings UI #5198, by @nielsvanvelzen
- Allow selecting external video player app #5280, by @nielsvanvelzen
- Add user-defined AVC/HEVC codec level override #5520, by @johnpc
- Add photo player presentation delay to settings as user preference #5722, by @hraabis
- Add user preferences to force enable or disable common HDR formats #5743, by @clowncracker
🏗️ Enhancements
- Change seekbar seeking to be relative to the current position #4937, by @Syquel
- Show placeholder thumbnail while Trickplay thumbnail loads #4946, by @tal-sarid
- Fix issue playing multiple items remotely #5017, by @flip-dots
- Add support for multiple badges for media with hybrid HDR or HDR with fallback #5038, by @hwneh
- Enable Proguard for release builds #5053, by @nielsvanvelzen
- Add badge composable #5143, by @nielsvanvelzen
- Update issue templates #5180, by @nielsvanvelzen
- Add navigation support to settings #5205, by @nielsvanvelzen
- Migrate telemetry settings to compose #5215, by @nielsvanvelzen
- Add ability to unblur backdrops #5216, by @akhilmulpurii
- Migrate developer settings to compose #5222, by @nielsvanvelzen
- Migrate licenses to compose #5225, by @nielsvanvelzen
- Migrate authentication settings to compose #5226, by @nielsvanvelzen
- Migrate server/user settings to compose #5231, by @nielsvanvelzen
- Use new settings from login screen #5232, by @nielsvanvelzen
- Remove account manager migration #5233, by @nielsvanvelzen
- Add ListControl as base for ListButton #5247, by @nielsvanvelzen
- Add RangeControl composable and use color tokens for Seekbar #5248, by @nielsvanvelzen
- Remove brief descriptions from settings screens #5251, by @nielsvanvelzen
- Migrate playback settings to compose #5252, by @nielsvanvelzen
- Use dedicated screen for about section in settings #5262, by @nielsvanvelzen
- Add FMP4 support for transcodes #5269, by @nielsvanvelzen
- Migrate subtitle customization settings to compose #5270, by @nielsvanvelzen
- Add option to not advertise software codecs as supported #5275, by @luca-schlecker
- Update README build instructions #5279, by @nielsvanvelzen
- Remove shortcut preferences #5281, by @nielsvanvelzen
- Migrate screensaver customization settings to compose #5282, by @nielsvanvelzen
- Remove premieresEnabled and mediaManagementEnabled preferences #5285, by @nielsvanvelzen
- Add design tokens #5289, by @nielsvanvelzen
- Remove profile picture from ClockUserView #5290, by @nielsvanvelzen
- Migrate customization settings to compose #5292, by @nielsvanvelzen
- Migrate home settings to compose #5295, by @nielsvanvelzen
- Use ListMessage for errors and remove unused server/user preferences UI #5298, by @nielsvanvelzen
- Migrate library display settings to compose #5299, by @nielsvanvelzen
- Migrate live tv guide settings to compose #5301, by @nielsvanvelzen
- Add explanation about branches to README #5302, by @nielsvanvelzen
- Add animations to settings UI #5304, by @nielsvanvelzen
- Add shared transitions to RouterContent #5307, by @nielsvanvelzen
- Migrate advanced playback settings to compose #5309, by @nielsvanvelzen
- Remove old preference UI #5310, by @nielsvanvelzen
- Show progress and duration in video player #5311, by @nielsvanvelzen
- Use color tokens for settings UI #5313, by @nielsvanvelzen
- Use space tokens in settings UI #5315, by @nielsvanvelzen
- Update to AGP 9 #5340, by @nielsvanvelzen
- Recreate LegacyImageCardView with compose #5343, by @nielsvanvelzen
- Add media toasts to new video player #5353, by @nielsvanvelzen
- Update progress styling in NowPlayingView #5364, by @nielsvanvelzen
- Update badge styling in ItemCardBaseItemOverlay #5365, by @nielsvanvelzen
- Remove unused defaultRatingType setting #5378, by @nielsvanvelzen
- Specify JDK version for CI in .tools-versions file #5381, by @nielsvanvelzen
- Add media type API to set proper content type in audio attributes #5385, by @nielsvanvelzen
- Fix item names not showing when showCardInfoOverlay is set #5390, by @nielsvanvelzen
- Remove unused NumberSpinnerView #5395, by @nielsvanvelzen
- Show additional parts for episodes #5408, by @galaterro
- Add timed events API for playback #5440, by @nielsvanvelzen
- Refactor PlayerBackendEventListener to abstract class #5449, by @nielsvanvelzen
- Add timed event blocks and support for negative positions #5450, by @nielsvanvelzen
- Add next media preloading #5452, by @nielsvanvelzen
- Fix - Season cards always showing series poster instead of season image #5479, by @WizardOfYendor1
- Refactor MainActivity to use compose as basis #5495, by @nielsvanvelzen
- Improve interaction management for in-app screensaver #5503, by @nielsvanvelzen
- Add configurable playback buffer size setting #5515, by @GeiserX
- Remember subtitle language between videos #5519, by @johnpc
- Add playback info overlay to display codec, bitrate, and play method #5521, by @johnpc
- Return state from rememberPlayerProgress #5541, by @nielsvanvelzen
- Add playback completion verification in external players #5556, by @RealGreenDragon
- Actually enable R8 minification #5559, by @LTe
- Move Live TV row click handling to HomeRowsFragment #5570, by @nielsvanvelzen
- Promote some developer settings #5587, by @nielsvanvelzen
- Add VIMU external subtitles support #5602, by @dieselw0w
- Refactor: Extract MediaCodecQuery interface and AVC codec module #5604, by @johnpc
- Update naming in some places #5605, by @nielsvanvelzen
- Add stricter external video player API implementations #5625, by @nielsvanvelzen
- Move around various settings #5633, by @nielsvanvelzen
- Refactor: Extract HEVC and AV1 codec modules #5646, by @johnpc
- Allow Shield Dolby Vision Profile 7 direct playback #5652, by @ps-kl
- InfoRow badges: differentiate between EAC3 and TrueHD Atmos, fix DTS-HD check #5665, by @854562
- sort person items chronologically (latest release first) #5666, by @Mehvix
- Add AndroidVersion helper for readable, mockable SDK version checks #5672, by @johnpc
- Declutter JellyfinApplication #5675, by @nielsvanvelzen
- Add new button to shuffle all songs #5694, by @vladski-i
- Show server splash screen on launch. #5697, by @DerrickDW
- Add TV show sort by latest episode #5707, by @Charlie284
- Add focus restoration to router #5719, by @nielsvanvelzen
- Remove contributors file #5753, by @nielsvanvelzen
- Build release assets before publishing #5759, by @nielsvanvelzen
- Bump compile SDK to 37 (Android 17) #5763, by @nielsvanvelzen
- Add triage workflow to add pull requests to review project #5764, by @nielsvanvelzen
- Press up to close player overlay #5773, by @nielsvanvelzen
- Add PopOverMenu composable #5784, by @nielsvanvelzen
- Automatically focus on selected option in settings #5797, by @nielsvanvelzen
💥 Crash fixes
- Use android plugin for AboutLibraries generation #5206, by @nielsvanvelzen
- Fix missing focus in new player UI #5513, by @nielsvanvelzen
- Fix NullPointerException when display.getHdrCapabilities() returns null #5718, by @nielsvanvelzen
🔧 Bugfixes
- Remove redundant TargetApi annotations #5142, by @nielsvanvelzen
- Fix range control calculation when minimum is not 0 #5263, by @nielsvanvelzen
- Remove value override from RangeControl #5264, by @nielsvanvelzen
- Don't overwrite displayPreferencesId in ItemRowAdapterHelper.retrieveUserViews #5296, by @nielsvanvelzen
- Fix rememberPreference not saving for AsyncPreferenceStore #5297, by @nielsvanvelzen
- Use DialogBase for InAppScreensaver #5305, by @nielsvanvelzen
- Fix initial focus on visibility change in DialogBase #5306, by @nielsvanvelzen
- Remove drop shadows from BrowseGridFragment #5370, by @TheMejmun
- Correct video start delay setting not showing decimal values in settings #5376, by @JagerSprinkles
- Fix non-enum preferences not persisting to server #5406, by @skalthoff
- Fix dismissing in-app screensaver with remote #5493, by @nielsvanvelzen
- Change heading from 'Refresh Switching' to 'Resume Preroll' #5498, by @bin101
- Fix interaction tracking in popover composable #5512, by @nielsvanvelzen
- Fix back button only working once #5540, by @johnpc
- Fix missing GH_TOKEN environment variable #5545, by @nielsvanvelzen
- Persist router backstack #5627, by @nielsvanvelzen
- Fix presenter focus on old Android versions #5639, by @nielsvanvelzen
- Fix contextmenu on new item cards #5708, by @nielsvanvelzen
- fix favorites order #5720, by @BlackstormFirst
- Migrate to GH_PROJECTS_TOKEN #5795, by @nielsvanvelzen
- Only show played progress for video and book items #5805, by @nielsvanvelzen
🔃 Refactoring
- Use compose dialog for DialogBase #5204, by @nielsvanvelzen
- Clean up settings UI #5243, by @nielsvanvelzen
- Cleanup navigation destinations #5496, by @nielsvanvelzen
- Replace deprecated bundleOf() usages #5626, by @nielsvanvelzen
💡 Everything else
- Update pull request template #5112, by @nielsvanvelzen
📈 Dependency updates
- Update androidx.window:window by renovate[bot] v1.5.1 #5170, v1.5.0 #4965
- Update aboutlibraries by renovate[bot] v15.2.0 #5768, v15 #5663, v14.2.1 #5603, v14.2.0 #5583, v14 (major) #5516, v13.2.1 #5258, v13 (major) #5007
- Update androidx.work:work-runtime by renovate[bot] v2.11.2 #5487, v2.11.1 #5371, v2.11.0 #5043
- Update Gradle by renovate[bot] v9.7.0 #5742, v9.6.1 #5662, v9.5.1 #5591, v9.5.0 #5558, v9.4.1 #5477, v9.4.0 #5455, v9.3.1 #5374, v9.3.0 #5339, v9.2.1 #5165, v9.2.0 #5065
- Update github/codeql-action action by renovate[bot] v4.37.9 #5770, v4.37.7 #5758, v4.37.6 #5737, v4.37.4 #5728, v4.36.1 #5615, v4.35.5 #5592, v4.35.4 #5581, v4.35.3 #5565, v4.35.2 #5531, v4.35.1 #5492, v4.35.0 #5478, v4.33.0 #5472, v4.32.6 #5457, v4.32.5 #5451, v4.32.4 #5433, v4.32.2 #5391, v4.32.1 #5383, v4.31.10 #5327, v4.31.9 #5250, v4.31.8 #5241, v4.31.7 #5218, v4.31.6 #5203, v4.31.5 #5167, v4.31.3 #5144, v4.31.2 #5072
- Update appleboy/ssh-action action by renovate[bot] v1.2.4 #5192, v1.2.3 #5108
- Update com.android.tools.build:gradle by renovate[bot] v8.13.2 #5235, v8.13.1 #5131
- Update actions/checkout action by renovate[bot] v7 - autoclosed #5661, v6.0.1 #5209, v6 #5175, v5.0.1 #5163
- Update org.jellyfin.sdk:jellyfin-core by renovate[bot] v1.8.12 #5713, v1.8.10 #5606, v1.8.9 #5601, v1.8.8 #5514, v1.8.7 #5501, v1.8.6 #5344, v1.8.5 #5244, v1.8.4 #5202, v1.8.3 #5164
- Update kotest by renovate[bot] v6.2.4 #5752, v6.2.3 #5701, v6.2.2 #5686, v6.2.1 #5653, v6.1.11 #5508, v6.1.10 #5497, v6.1.9 #5484, v6.1.8 #5483, v6.1.7 #5469, v6.1.6 #5463, v6.1.4 - autoclosed #5443, v6.1.3 #5388, v6.1.2 #5367, v6.1.1 #5351, v6.1.0 #5345, v6.0.7 #5201, v6.0.5 - autoclosed #5166
- Update androidx.compose by renovate[bot] v1.12.0 #5760, v1.11.4 #5676, v1.11.3 #5657, v1.11.2 #5598, v1.11.1 #5580, v1.11.0 #5552, v1.10.6 #5486, v1.10.5 #5466, v1.10.4 #5442, v1.10.3 #5410, v1.10.2 #5372, v1.10.1 #5336, v1.10.0 #5214, v1.9.5 #5169
- Update androidx.activity by renovate[bot] v1.13.0 #5467, v1.12.4 #5409, v1.12.2 #5254, v1.12.1 #5213, v1.12.0 #5171
- Update androidx.lifecycle by renovate[bot] v2.11.0 #5659, v2.10.0 #5172
- Update actions/stale action by renovate[bot] v11 #5721, v10.1.1 #5211
- Update actions/setup-java action by renovate[bot] v6 #5792, v6 #5775, v5.4.0 #5655, v5.1.0 #5217
- Update io.mockk:mockk by renovate[bot] v1.14.11 #5612, v1.14.9 #5360, v1.14.7 #5224
- Update actions/upload-artifact action by renovate[bot] v7.0.1 #5525, v7 #5445, v6 #5242
- Update Kotlin by renovate[bot] v2.4.20 #5803, v2.4.10 #5695, v2.4.0 #5622, v1.11.0 #5584, v2.3.21 #5553, v2.3.20 #5471, v2.3.10 #5389, v2.3.0 #5246
- Update androidx.media3 by renovate[bot] v1.11.0 #5741, v1.10.1 #5590, v1.10.0 #5491, v1.9.3 #5473, v1.9.2 #5393, v1.9.1 #5359, v1.9.0 #5255
- Update dependency org.jellyfin.media3:media3-ffmpeg-decoder to v1.9.0+1 #5288, by renovate[bot]
- Update org.jetbrains.kotlinx:kotlinx-serialization-json by renovate[bot] v1.11.0 #5524, v1.10.0 #5347
- Update dependency androidx.activity:activity to v1.12.3 #5373, by renovate[bot]
- Update androidx.navigation3:navigation3-ui by renovate[bot] v1.1.7 #5778, v1.1.6 #5757, v1.1.5 #5727, v1.1.4 #5678, v1.1.3 #5658, v1.1.2 #5599, v1.1.1 #5551, v1.1.0 #5522, v1.0.1 #5412
- Update android.gradle by renovate[bot] v9.4.0 #5698, v9.2.1 #5578, v9.2.0 #5549, v9.1.1 #5529, v9.1.0 #5453, v9.0.1 #5416
- Update gradle/actions action by renovate[bot] v6 #5631, v5.0.2 #5437
- Update coil by renovate[bot] v3.6.2 #5793, v3.6.1 #5779, v3.5.0 #5643, v3.4.0 #5441
- Update dependency androidx.core:core-ktx to v1.18.0 #5468, by renovate[bot]
- Update koin by renovate[bot] v4.2.2 #5650, v4.2.1 #5523, v4.2.0 #5474
- Update dependency com.mikepenz:aboutlibraries-core to v14.1.0 #5566, by renovate[bot]
- Update CI dependencies by renovate[bot] v6.2.0 #5640, v4.36.2 #5624, v6.0.3 #5617
- Update jellyfin.sdk to v1.8.11 #5629, by renovate[bot]
- Update io.github.peerless2012:ass-media by renovate[bot] v0.5.1 #5750, v0.5.0 #5723
- Update dependency androidx.constraintlayout:constraintlayout to v2.2.2 #5726, by renovate[bot]
- Update androidx.fragment to v1.9.0 #5761, by renovate[bot]
- Update dependency androidx.appcompat:appcompat to v1.8.0 #5762, by renovate[bot]
- Update CI dependencies #5348, by renovate[bot]
- Update CI dependencies #5355, by renovate[bot]
- Update CI dependencies #5415, by renovate[bot]
- Update CI dependencies #5600, by renovate[bot]
- Update CI dependencies #5677, by renovate[bot]
- Update CI dependencies #5690, by renovate[bot]
- Update CI dependencies #5730, by renovate[bot]
Contributors
- @nielsvanvelzen
- @johnpc
- @GertSallaerts
- @Syquel
- @tal-sarid
- @flip-dots
- @hwneh
- @akhilmulpurii
- @luca-schlecker
- @TheMejmun
- @JagerSprinkles
- @skalthoff
- @galaterro
- @WizardOfYendor1
- @bin101
- @GeiserX
- @RealGreenDragon
- @LTe
- @dieselw0w
- @ps-kl
- @854562
- @Mehvix
- @vladski-i
- @DerrickDW
- @Charlie284
- @BlackstormFirst
- @hraabis
- @clowncracker