From refreshed user interface elements to playback improvements, there are many changes across the board in this update of Jellyfin for Android TV. Read about all the highlights on our blog post or have a look through the full changelog below.
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!
🌟 Highlights
- Add button to report device profile to server for troubleshooting #4482, by @nielsvanvelzen
- Add Rewind & FastForward buttons to AudioNowPlayingFragment #4503, by @conihorse
- Add still watching feature #4509, by @ConnorS1110
- New search design #4698, by @nielsvanvelzen
🏗️ Enhancements
- Display media runtime in hour minute format #4253, by @dtrexler
- Run LeanbackHelper onStop() to refresh home screen #4347, by @hdweiss
- update issue forms #4369, by @BotBlake
- Fix codec keys in new playback module #4411, by @dtrexler
- Subtitles background opacity #4423, by @owochle
- Update reported client name #4428, by @nielsvanvelzen
- Decouple external video playback from internal playback code #4438, by @nielsvanvelzen
- Rewrite PlaybackManager with SDK #4455, by @nielsvanvelzen
- Remove legacy Java ApiClient #4457, by @nielsvanvelzen
- fix: set max resolution for common video codecs #4470, by @ferrarimarco
- Add codec features, color formats and profile levels to device profile report #4508, by @nielsvanvelzen
- Rewrite media stream resolvers to be device profile based #4512, by @nielsvanvelzen
- Replace androidx.tv with own theme implementation #4523, by @nielsvanvelzen
- Add Button composable #4530, by @nielsvanvelzen
- Rewrite NextUpFragment with Compose #4531, by @nielsvanvelzen
- Directplay VobSub and DVDSub #4550, by @nielsvanvelzen
- Add season and episode numbers for Live TV programs #4558, by @vahtos
- Use OkHttp for networking in media3 #4560, by @nielsvanvelzen
- Rewrite toolbar in compose #4562, by @nielsvanvelzen
- Add ButtonColors and colorScheme #4563, by @nielsvanvelzen
- Move activity opening out of navigation code #4591, by @nielsvanvelzen
- Add hearing impaired indicator for subtitles (SDH) #4593, by @nielsvanvelzen
- Use playback launcher for launching audio #4595, by @nielsvanvelzen
- Drop leanback implementation of search #4605, by @nielsvanvelzen
- Replace leanback animations with our own definitions in CustomPlaybackOverlayFragment #4615, by @nielsvanvelzen
- Change screensaver to cycle through random selection and avoid repeats #4619, by @claireratigan
- Add experimental ASS direct play using libass #4630, by @nielsvanvelzen
- Add intermediate model for image information #4635, by @nielsvanvelzen
- Use new intermediate model in most places #4638, by @nielsvanvelzen
- Improve status bar hiding behavior #4650, by @cani1see
- Change/Fix Resume Button Behaviour on Series #4679, by @osiris86
- Use overlay rendering for experimental SSA support #4685, by @nielsvanvelzen
- Display cover art of currently playing music via compose #4694, by @nielsvanvelzen
- Update SDK to 1.7.0-beta.3 #4710, by @nielsvanvelzen
- Keep same audio language while binge watching a series #4713, by @bin101
- Add option for bold subtitles (#4559) #4724, by @EMohlin7
- Add option to disable PGS direct play #4729, by @linkandzelda91
- Replace DefaultCardView with UserCard(View) #4738, by @nielsvanvelzen
- Rewrite ServerButtonView using compose #4751, by @nielsvanvelzen
- Start Live TV player when activating channel header #4777, by @kylep09
- Support removing items from playback queue #4780, by @nielsvanvelzen
- Refetch server information on authenticate when cached server version is unsupported #4783, by @nielsvanvelzen
- Redesign main toolbar #4792, by @nielsvanvelzen
- Differentiate client name for debug version in API authorization #4802, by @nielsvanvelzen
- Remove WebSocket subscriptions when process is inactive #4804, by @nielsvanvelzen
- Finer subtitle size control #4821, by @RubenTeixeira
- Add preference for subtitle position offset #4825, by @RubenTeixeira
- Update app build script for Gradle 9 compatibility #4832, by @nielsvanvelzen
- Use audio API for audio playback #4834, by @nielsvanvelzen
- Target Android 16 (API 36) #4835, by @nielsvanvelzen
- Remove Jellyfin logo from screensaver #4837, by @nielsvanvelzen
- Add scrubbing API to PlayerState #4843, by @nielsvanvelzen
- Add seekbar to music playback #4844, by @nielsvanvelzen
- Add display information to playback report #4861, by @nielsvanvelzen
- Add display HDR capabilities to device profile #4862, by @nielsvanvelzen
- Add new video player UI #4865, by @nielsvanvelzen
- Remove libass preference in non-development builds #4876, by @nielsvanvelzen
- Add popover composable #4878, by @nielsvanvelzen
- Trim whitespace from search query #4885, by @mkst
- Rewrite picture viewer in compose #4889, by @nielsvanvelzen
- Use transparent buttons in player controls #4891, by @nielsvanvelzen
- Disable BlurHash on low memory devices #4918, by @nielsvanvelzen
- Add HDR capability checks for codecs in device profile #4942, by @clams4shoes
- Update client name for crash reports #4950, by @nielsvanvelzen
- Remove libass library #5032, by @nielsvanvelzen
💥 Crash fixes
- Query based on seriesId in FullDetailsFragmentHelper.getNextUpEpisode #4785, by @nielsvanvelzen
- Avoid NPE in JellyfinImage helpers #4909, by @nielsvanvelzen
- Don't show exception message as toast #5019, by @nielsvanvelzen
- Add back lifecycle check in response callbacks #5022, by @nielsvanvelzen
🔧 Bugfixes
- Fix watch next row ordering, Change watch next row meta data #4298, by @hdweiss
- Use media3 MimeTypes in deviceProfile #4481, by @nielsvanvelzen
- Fix logo in next up too large #4532, by @nielsvanvelzen
- Fix missing coroutines dependency in playback:jellyfin module #4545, by @nielsvanvelzen
- Fix toolbar profile picture & time formatting #4565, by @nielsvanvelzen
- Always create boxset queues with default sorting instead of using sort names of individual items #4652, by @nielsvanvelzen
- Add missing action for AndroidMediaService to manifest #4664, by @nielsvanvelzen
- Fix screensaver request loop when there are no items to showcase #4688, by @nielsvanvelzen
- Fix URL generation for user profile pictures #4697, by @nielsvanvelzen
- Use getEpisodes API for series/seasons in SdkPlaybackHelper #4727, by @nielsvanvelzen
- Don't attempt to load logo in screensaver when there is none #4737, by @nielsvanvelzen
- Create channels if they are missing in LeanbackChannelWorker #4740, by @nielsvanvelzen
- Fix LiveTV Guide Issue #2144 #4761, by @kylep09
- Fix retrieveAndPlay incorrectly using ticks instead of milliseconds as start position #4765, by @nielsvanvelzen
- Remove testStream parameter from MediaStreamResolver.getStream #4779, by @nielsvanvelzen
- Fix DreamViewModel retrieving showcase items over main thread #4784, by @nielsvanvelzen
- Fix AsyncImageView.load showing incorrect images on rapid changes #4786, by @nielsvanvelzen
- Catch API issues in StartupActivity when opening a library #4798, by @nielsvanvelzen
- Run Detekt from root module only #4814, by @nielsvanvelzen
- Fix wrong Trickplay thumbnail displayed while seeking #4819, by @tal-sarid
- Fix scaling of profile pictures in UserCardView #4869, by @nielsvanvelzen
- Fix seekbar getting stuck in seek mode #4875, by @nielsvanvelzen
- Only show music entries in now screensaver now playing #4877, by @nielsvanvelzen
- Fix focus always forced to first queue item in AudioNowPlayingFragment #4882, by @nielsvanvelzen
- Fix navigation issues in AudioNowPlayingFragment #4883, by @nielsvanvelzen
- Use JellyfinTheme in full compose fragments #4890, by @nielsvanvelzen
- Fix home navigation from rows to toolbar on older Android versions #4903, by @nielsvanvelzen
- Fix some languages using wrong code #4907, by @nielsvanvelzen
- Remove duplicate hebrew translations #4908, by @nielsvanvelzen
- Fix voice search cancellation showing error toast #4919, by @nielsvanvelzen
- Fix switching between baked and non-baked subtitles #4920, by @nielsvanvelzen
- Fix wrongly-cropped Trickplay images when video is vertical #4924, by @tal-sarid
- Improve focus switching between Compose and RowsSupportFragment #4927, by @nielsvanvelzen
- Avoid stopping speech recognizer when not active #4932, by @nielsvanvelzen
- Fix truncated labels under buttons in media view UI #4941, by @tal-sarid
- Fix logo constraints in DreamContentLibraryShowcase #4981, by @nielsvanvelzen
- Remove disableDirectPlay option from device profile #4982, by @nielsvanvelzen
- Only use 10.11 video range types on 10.11 servers #4983, by @nielsvanvelzen
- Fix DoVi/HDR10+ playback on certain Fire TV devices #4995, by @clams4shoes
- Fix direct play of external video sources like Live TV #4998, by @nielsvanvelzen
- Fix direct play and direct stream swapped in PlaybackController retry mechanic #4999, by @nielsvanvelzen
- Revert "Add Google TV Streamer to modelsWithDoViHdr10PlusBug" #5001, by @nielsvanvelzen
- Fix "shuffle all" not working for music album/artist #5018, by @nielsvanvelzen
- Flatten HDR codec profile conditions #5021, by @nielsvanvelzen
- Fix Live TV timers loaded on main thread #5030, by @nielsvanvelzen
- Refactor audio night mode implementation #5031, by @nielsvanvelzen
- Reset still watching state on confirmation #5052, by @nielsvanvelzen
- Refactor still watching behavior #5056, by @nielsvanvelzen
🔃 Refactoring
- Centralize requested item fields #4341, by @nielsvanvelzen
- Replace Icons.Default.Done with ic_check in ConnectHelpAlertFragment #4355, by @nielsvanvelzen
- Use color type in OptionsColorList #4480, by @nielsvanvelzen
- Fix a lot of networking on main thread issues #4548, by @nielsvanvelzen
- Fix some more API calls being made on main thread #4551, by @nielsvanvelzen
- Fix nullability issues in presenter usages #4667, by @nielsvanvelzen
- Fix compose focus deprecations #4668, by @nielsvanvelzen
- KGP: replace kotlinOptions with compilerOptions #4745, by @nielsvanvelzen
- Prefer imageVector painting for icon drawables #4797, by @nielsvanvelzen
📈 Dependency updates
- Update aboutlibraries by renovate[bot] v12.2.4 #4766, v12.2.3 #4717, v12.2.1 #4707, v12.2.0 #4693, v12.1.2 #4642, v12.1.1 #4641, v12.1.0 #4637, v12.0.1 #4620, v12 (major) #4602, v11.6.3 #4469, v11.6.2 #4419, v11.4.0 #4374
- Update com.android.tools.build:gradle by renovate[bot] v8.13.0 #4896, v8.12.2 #4888, v8.12.1 #4870, v8.12.0 #4830, v8.11.1 #4746, v8.10.1 #4689, v8.10.0 - autoclosed #4609, v8.9.1 #4542, v8.9.0 #4499, v8.8.2 - autoclosed #4485, v8.8.1 #4456, v8.8.0 #4392
- Update io.mockk:mockk by renovate[bot] v1.14.6 #4979, v1.14.5 #4793, v1.14.4 #4742, v1.14.2 #4629, v1.14.0 #4573, v1.13.17 #4490, v1.13.16 #4395
- Update androidx.activity:activity by renovate[bot] v1.10.1 #4484, v1.10.0 #4406
- Update dependency androidx.recyclerview:recyclerview to v1.4.0 #4407, by renovate[bot]
- Update koin by renovate[bot] v4.1.1 #4900, v4.1.0 #4712, v4.0.4 #4557, v4.0.3 #4546, v4.0.2 #4414
- Update gradle by renovate[bot] v9 #4831, v8.14.3 #4769, v8.14.2 #4708, v8.14.1 #4678, v8.14 #4622, v8.13 #4478, v8.12.1 #4418
- Update androidx.compose.foundation:foundation by renovate[bot] v1.8.3 #4732, v1.8.2 #4676, v1.7.8 #4452, v1.7.7 #4429
- Update androidx.compose.ui:ui-tooling by renovate[bot] v1.8.3 #4730, v1.8.2 #4670, v1.7.8 #4453, v1.7.7 #4430
- Update androidx.fragment by renovate[bot] v1.8.8 #4700, v1.8.7 #4669, v1.8.6 #4451
- Update appleboy/ssh-action action to v1.2.1 #4468, by renovate[bot]
- Update dependency io.gitlab.arturbosch.detekt to v1.23.8 #4473, by renovate[bot]
- Update dependency com.android.tools:desugar_jdk_libs to v2.1.5 #4479, by renovate[bot]
- Update dependency androidx.constraintlayout:constraintlayout to v2.2.1 #4486, by renovate[bot]
- Update org.jellyfin.sdk:jellyfin-core by renovate[bot] v1.7.1 #4993, v1.7.0 #4968, v1.7.0-beta.6 #4901, v1.7.0-beta.5 #4863, v1.7.0-beta.4 #4858, v1.6.7 #4556
- Update androidx.tvprovider:tvprovider by renovate[bot] v1.1.0 #4645, v1.1.0-beta01 #4575
- Update androidx.core:core-ktx by renovate[bot] v1.17.0 #4857, v1.16.0 #4576
- Update github/codeql-action action by renovate[bot] v4.31.0 #5024, v4.30.8 #5009, v4 #5000, v3.30.6 #4974, v3.30.5 #4967, v3.30.3 #4928, v3.30.1 #4904, v3.30.0 #4895, v3.29.11 #4874, v3.29.10 #4868, v3.29.9 #4845, v3.29.8 #4842, v3.29.5 #4824, v3.29.4 #4813, v3.29.3 #4809, v3.29.2 #4764, v3.29.1 #4753, v3.28.19 #4699, v3.28.17 #4639, v3.28.16 #4611
- Update androidx.leanback to v1.2.0 #4613, by renovate[bot]
- Update androidx.work:work-runtime by renovate[bot] v2.10.5 - autoclosed #4964, v2.10.4 #4926, v2.10.3 #4826, v2.10.2 #4733, v2.10.1 #4616
- Update androidx.compose by renovate[bot] v1.9.4 #5042, v1.9.3 #5004, v1.9.2 #4963, v1.9.1 #4925, v1.9.0 #4854, v1.8.1 #4644, v1.8.0 #4618
- Update androidx.lifecycle by renovate[bot] v2.9.4 #4943, v2.9.3 #4887, v2.9.2 #4795, v2.9.1 #4701, v2.9.0 #4646
- Update coil by renovate[bot] v3.3.0 #4810, v3.2.0 #4657
- Update dependency androidx.window:window to v1.4.0 #4671, by renovate[bot]
- Update dependency androidx.appcompat:appcompat to v1.7.1 #4702, by renovate[bot]
- Update Kotlin by renovate[bot] v2.2.21 #5044, v2.2.20 #4923, v2.2.10 #4856, v2.2.0 #4744
- Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.9.0 #4754, by renovate[bot]
- Update gradle/actions action by renovate[bot] v5 #4980, v4.4.2 #4840
- Update actions/checkout action to v5 #4846, by renovate[bot]
- Update dependency androidx.fragment:fragment-ktx to v1.8.9 #4853, by renovate[bot]
- Update dependency io.github.peerless2012:ass-media to v0.3.0-rc03 - autoclosed #4855, by renovate[bot]
- Update kotest by renovate[bot] v6.0.4 #5020, v6.0.3 #4916, v6.0.2 #4898, v6.0.1 #4879, v6 (major) #4867
- Update actions/setup-java action to v5 #4873, by renovate[bot]
- Update actions/stale action by renovate[bot] v10.1.0 #4992, v10 #4902
- Update androidx.activity to v1.11.0 #4929, by renovate[bot]
- Update Gradle to v9.1.0 #4945, by renovate[bot]
- Update acra to v5.13.1 #4971, by renovate[bot]
- Update actions/upload-artifact action to v5 #5048, by renovate[bot]
- Update Kotlin #4250, by renovate[bot]
- Update CI dependencies #4386, by renovate[bot]
- Update CI dependencies #4413, by renovate[bot]
- Update CI dependencies #4425, by renovate[bot]
- Update CI dependencies #4431, by renovate[bot]
- Update CI dependencies #4474, by renovate[bot]
- Update CI dependencies #4506, by renovate[bot]
- Update CI dependencies #4529, by renovate[bot]
- Update CI dependencies #4541, by renovate[bot]
- Update CI dependencies #4570, by renovate[bot]
- Update CI dependencies #4661, by renovate[bot]
- Update CI dependencies #4719, by renovate[bot]
- Update androidx.media3 #4817, by renovate[bot]
- Update CI dependencies #4917, by renovate[bot]