Skip to content

Conversation

JPKribs
Copy link
Member

@JPKribs JPKribs commented Mar 15, 2025

Summary

The goal of this PR is to make a Menu Button, similar to ListRowButton or ChevronButton. This way, the style of our tvOS Menus. This led me to create a ListRowMenu. The goal will be to use this Menu in place of our existing menus.

Below are a video example of the new button next to existing buttons for comparison. I think the animation is just barely off but it's very very close to native. I've also replaced the Menus in the 3 locations that I know they exist in tvOS. If there are any I'm missing please let me know!

Video

In this video is a Chevron Button, this new ListRowMenu, and our previous Menu that we were using. I've tried to exactly match our animations to default .card buttons but I still have a bit of work to do.

Simulator.Screen.Recording.-.Apple.TV.4K.3rd.generation.-.2025-03-14.at.19.51.09.mp4

AppSettingsView


Before

Simulator.Screen.Recording.-.Apple.TV.4K.3rd.generation.-.2025-03-14.at.20.51.34.mp4

After

I also changed the SignOutIntervalSection to use a ChevronButton to route to Duration.

Simulator.Screen.Recording.-.Apple.TV.4K.3rd.generation.-.2025-03-14.at.20.48.15.mp4

PlaybackQualitySettingsView


Bitrate Picker

This wasn't a menu before but this was an Inline picker which looks great but is very hard to use with this many selections. It's very easy to click past an option.

Simulator.Screen.Recording.-.Apple.TV.4K.3rd.generation.-.2025-03-14.at.21.10.25.mp4

@JPKribs JPKribs added the enhancement New feature or request label Mar 15, 2025
@JPKribs JPKribs marked this pull request as ready for review March 15, 2025 03:13
Copy link
Member

@LePips LePips left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm glad that you were able to mimic the native focused styling.

If you think there is more work to do or you would like to remove InlineEnumToggle here that would be just fine. We can also implement the functionality to pass in a binding to a CaseIterable value and it will automatically implement a Picker.

@JPKribs
Copy link
Member Author

JPKribs commented Mar 17, 2025

We can also implement the functionality to pass in a binding to a CaseIterable value and it will automatically implement a Picker.

I've added this to my latest commit and used this for the PlaybackQualitySettingsView. It works right but let me know if those inits weren't what you were expecting. The init<ItemType> is pretty new to me so no hard feelings if I'm completely wrong there.

As for the InlineEnumToggle, I actually think those are better for MOST enums. I think the only enums where it's worse are ones like PlaybackQualitySettingsView where there are 10+ bitrate options so cycling through and potentially missing one is greater. That being said, I think the dropdown mirrors iOS better so I can go either way. I think we only have 3 menu/large enums in tvOS settings.

@LePips
Copy link
Member

LePips commented Mar 17, 2025

I would very much like to get rid of InlineEnumToggle - Menu will become our most basic data selector above Toggle. For selections that require more detail we can still use the current EnumPickerView, like for fonts where we would like to show the actual font with the name.

@JPKribs
Copy link
Member Author

JPKribs commented Mar 17, 2025

Haha sounds good. I've made that update on my end! Here is what this looks like now for things likes Player selection:

Simulator.Screen.Recording.-.Apple.TV.4K.3rd.generation.-.2025-03-17.at.09.01.52.mp4

Let me know if there is anything else that would be good to add here! I'm 99% happy with that menu button. I've pinpointed what is off. The focus looks fine but the defocus, the text seems to defocus at a slower rate than the rest of the button. You really have to be staring at it to notice it but I think that's the only point that looks off to me.

@LePips
Copy link
Member

LePips commented Mar 17, 2025

I noticed something subtle as well and we're now in the uncanny valley. I'm overall good with this design but improvements are always welcome.

@LePips LePips merged commit a0a20ca into jellyfin:main Mar 17, 2025
4 checks passed
@JPKribs JPKribs deleted the tvOSMenuButton branch March 17, 2025 16:31
This was referenced Apr 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants