Serenity for Android
Design tips for making your App work well on
Android TV devices
Gplus: David Carver or Serenity for Android
What is Serenity
● Plex Media Server Client for Androd TV
Devices, Game consoles, and tablets.
● Optimized for Remote and D-Pad navigation
● Open Source project available on github
● Available in the Google Play store.
● MIT Licensed
I had an Itch that Needed Scratched
● Plex App was constantly crashing
● The UI was frustrating to use with a Remote
● Wanted to learn Android Development and
seemed like a good thing to do at the time.
● Tired of TV Apps getting second class
● Wanted a more Media Center layout for Plex.
● Apps designed for TV don't need to SUCK!!
Android TV apps suck because
Developers let them suck!
Myth: A Tablet App will work fine on
An app designed for Landscape mode on a tablet
may work, but the user experience will probably
● The app may run, but will probably provide a
frustrating user experience.
● These apps are designed for Touch and
typically do not take into account other ways to
interact with the app.
● Using a Mouse is frustrating on the TV. If the
user has to use the mouse pointer, it is a design
● Need to design with the TV environment or
Accessibility in mind.
Why not just Chromecast
● You need a Phone/Tablet/PC that supports it.
● Not everybody likes having to use a
Phone/Tablet as a second screen device.
● Not everybody has a supported Chromecast
● Some prefer using a Remote. It's familiar.
● Limited to very basic playback or interaction.
Not designed for more complicated
applications and interactions.
We don't need no stinking
Google TV/Amazon Fire TV/OUYA
● Design for D-PAD not for Touch interface
● Avoid the use of the Mouse or Touchpad.
● Emphasize obvious items that can be selected
or interacted with.
● Back Button should exit or take back to
● Give visual indicators when more information
is provided off screen (i.e. scrolling required)
● Compensate for Overscan on TVs
● Design with Visual Appeal
– Apps are going to be in people's living rooms.
– TVs are ment to be visual displays
– You want the wow factor to help bring people
– However it needs to be simple and functional.
● Limit the number of clicks that a person has to
get to anything on the screen.
– The fewer the clicks the better.
● Prefer darker themes.
– Lighter themes tend to be to bright and harder to
– TV Brightness varies greatly, and depends on
● Holo themes and color schemes work well.
Create Quick Navigation Keys
● Provide ways to Navigate quickly through long
● Provide ways to get back to the top of a list
● To get to the bottom quickly.
● Break Long Lists into separate screens.
● Provide Filtering/Search to narrow scope of
● Devices may have Bluethooth enabled
keyboards or remotes with keybads connected.
Focus will be the most important and time
consuming aspect of your app. Getting
Focus and the navigation around on screen
focusable items is just as important if not
more important than the look of the app.
That great tablet embeddable card layout may
not work as well with a Remote or D-Pad.
Avoid the Card Design with
Embeddable Clickable Items.
Avoid the Embedded Clickable Item
If you do this, make sure
a person can navigate to
it! There is no touch
screen, and if they have
to resort to a mouse
pointer you have failed in
your design and user
Avoid Horizontal Scroll with Side
Menu (There is an exception)
Avoid Search at top of Page, Place
it in Left Nav Bar or Sliding Menu
Use Vertical Scroll Grid View with
Side Menu / Left Nav Bar
Fewer clicks to get to the Side Content
Avoid Vertical and Horizontal Scrolling
When in Content Zone don't scroll both
Top Items Hard to get too. Due to
Vertical scrolling center content.
Left Nav Bar hard to get to due to
Horizontal Scrolling content
New Plex has same issue.
Horizontal and Vertical Scroll
Text and Icons
● Provide large readable fonts.
● Screen space is at a premium. Even at
– User is sitting about 10ft away so need to make
text and fonts legible from that distance.
– Set up your Google TV development device from
" android:required="false" />
● Allows for the Play Store to allow the app to be
installed on a Android TV device.
● <uses-sdk android:minSdkVersion="13"/>
– For Honeycomb Google TV devices.
General UI Consideration
● TVs are always at least layout-large and layout-
● Drawables are HDPI resolution or higher.
● TV's are always Landscape.
● Darker themes are easier to view than lighter.
● TV Apps should be Full Screen Apps. The app will be
used on the largest most popular device in the house.
Give it that special treatment.
● Keep your design consistent. Stick with either Vertical
or Horizontal pattern throughout the app. Easier for
user to learn. If changing the pattern make it a user
choice to do so (i.e. multiple layouts)
Use a Nexus 7 screen resolution. Also use
the Google TV Add On.
You may want to use a Nexus 10 emulator
to test for XLarge displays.
Use Intel Images (Much faster)
Enable D-Pad with Google TV Add On.
Remember to Focus
● View.requestFocus(int direction)
● Remember to specifically set focus when hiding
and showing off screen views (i.e Sliding Menu
Dog Food your App
● Get an Android Smart TV, Amazon Fire TV, or
OUYA device and test your app there.
– Screen resolutions will vary due to Overscan
● Use your own App. If you get frustrated,
● Test both for Touch and for various controller
inputs. Remote, Game Controller, Voice
– Not all Remotes are created equal
– Not all Game Controllers are mapped the same.
Avoid Proprietary Extensions
● Avoid using undocumented APIs. You'll
back yourself into a corner.
● Consider supporting older Google TV
devices. You can survive in Honeycomb.
– You require NDK support. Then target at least
– Compatibility library works well when needed.
Most native Android views D-Pad friendly.
– Plenty of Open source widgets and libraries
that can be used. Adds negligible size. If
necessary use ProGuard to remove
● Android supports a wide variety of Media Key
– Play, Skip Forward, Pause, Stop, Skip Back
● Channel Up and Channel Down make good
Page Up and Page Down alternatives for quick
● Remember many Android TVs do have
keyboards in the remote. Provide keyboard
short cuts for your app.
● Use Context Menus to provide context sensitive
– Don't use the Action Bar especially with Grid or
Scrollable contentl. Prefer LeftNav pattern.
– Beware of the dreaded onItemLongClick bug with
Remotes and Game Controllers. It'll fire both Click
and Long Click events.
● Give option to map Menu key to context menu
● Provide alternatives to bring up context menu
● Don't embed your context menus into clickable
drop down menus in cards or list items!!!
– Users need to reach for mouse or touch pad.
Automatic failure at this point.
● Use Animations sparingly
– TV Devices are typically slower than Phones/Tablets
– Can appear to slow down the app.
● Becareful of views that always fire an OnSelect
event. Design views that can ignore on select
during fling operations.
● Network is always on, less concern about wifi
usage and consumption.
● Do implement caches, devices still have limited
Helps with Cache Images and Loading
Images in the Background
Provides a horizontal scrolling grid.
Child views don't get focus. Minor bug.
● Position along all four edges.
● Supports attaching an always visible, non-
draggable menu (i.e. Left Nav Bar)
● Can wrap entire window or specific content
● Allows the drawer to be opened by dragging the
edge, the entire screen or not at all.
● Can be used in XML layouts.
● Indicator that shows which screen is currently
● Spiderfly Studios – for Logo and some graphic
● Google TV Friends for initial promotion of the
app and helping get the word out.
● Stackoverflow community for the many helpful