Cases Android Automotive
Case study / Rotary navigation & focus

Why a rotary controller loses its place after a screen update

A button can look unchanged while its focus target disappears. AOSP's rotary guidance separates input-mode handover, navigation regions and view replacement, with different fixes for each.

Yahagu Research · Published 2026-10-28 · Sources checked 2026-10-28 · 6 min read

Case scope

AOSP Android Automotive OS rotary documentation checked on 27 October 2026. View-based Car UI navigation, not Android Auto phone projection or a verified OEM implementation.

The button returns; the focus does not

Consider a media screen with a refresh button. A driver reaches it with the rotary controller and presses Center. The button becomes a loading indicator, then returns. Touching it still works, but the next turn of the controller no longer continues from the same place. This is a hypothetical failure scenario, not a report from a tested vehicle.

The useful comparison is between the views before and after that update. Did the focused view survive, or did the application remove it and insert a visually identical replacement? AOSP's troubleshooting guidance identifies both replacement and disabling of a focused button as possible reasons for losing focus. A passing touch test does not distinguish them. [1]

For this refresh interaction, I would preserve the focus target while changing its content and busy state, then verify the next rotary action. That recommendation is narrower than keeping every control enabled. An unavailable action must remain blocked, including repeated activation while work is pending.

Rule out a touch-to-rotary handover first

The AOSP overview describes three normal actions: nudge moves between FocusAreas, rotation visits focusable views within an area in Tab order, and Center acts on the focused view. If touch was the last input, the first nudge, rotation or Center press starts rotary mode by focusing a view and is typically otherwise ignored. The word typically matters: this is not a universal rule that every first press must be discarded. [2]

Run the hypothetical refresh sequence once entirely with rotary input, and once after touching the screen. Record when the highlight appears and which view receives the next action. A first press that restores a highlight after touch is different from a highlight disappearing during an already-active rotary sequence. Only the latter directly matches the refresh problem described here.

Android's older Touch Mode explanation warns against treating focus as persistent selection and describes exceptions for text-input widgets. It supplies framework background, not a modern AAOS release contract. Do not set focusableInTouchMode across a screen merely to keep a selection visible. [5]

This analysis concerns View-based AAOS navigation. It does not establish behavior for Android Auto projection, a particular vehicle, or every current Android build. The developer guide retains explicit Android 11 QPR3, Android 11 Car and Android 12 labels on several helpers and attributes. Match those features to the actual platform and Car UI library before adopting them. [1]

A list and a toolbar need different routes

AOSP diagram of two FocusAreas with a list, floating action button and nudge shortcut
AOSP Figure 3: Nudge shortcut. The arrows explain a navigation route, not recorded input events. Open the original-size image to inspect the labels. Android Open Source Project, Apache 2.0 documentation license. Reproduced without modification.

A refresh button that requires dozens of turns to reach may have a region problem rather than a lifecycle problem. AOSP recommends separating toolbars, navigation elements and large lists into appropriate FocusAreas. Without explicit areas, the root acts as one implicit area: rotation can traverse the focusable views, but nudging cannot navigate between regions within the app. Nested FocusAreas are also prohibited because navigation becomes undefined. [1]

The official diagram below shows a different choice: a nudge shortcut reaches a floating action button within the same area, avoiding a trip through the whole list. Such a shortcut can mean one nudge reaches the button and another reaches the adjacent area. It should not be mistaken for a failed first nudge. Shortcut attributes differ between the Android versions listed in the guide. [1]

For the media example, put the long content list and the persistent toolbar in distinct areas unless there is a deliberate reason to use a shortcut. Test reaching Refresh from the middle of a long list, then returning to that list. This is a proposed interaction choice, not a claim about an OEM's layout.

A busy state should not erase the user's place

Proposed refresh sequence preserving target A through ready, pending and completed states while guarding repeated activation
Original proposed refresh interaction. A stable target still needs a visible highlight, guarded activation and verification on the target build. Yahagu, Original Yahagu illustration. Hypothetical design, not a captured vehicle trace.

A view must be focusable, enabled, visible and have nonzero dimensions to be eligible for RotaryService focus. Disabling a button during a request therefore changes more than its appearance. Replacing it with a spinner also removes the original target. The guide suggests updating the existing button's icon or text, or keeping a focusable container around changing content. For the container approach, its click listener belongs on the container. [1]

For a temporary loading state, compare those two designs against wholesale button replacement. Keep the request pending for long enough to inspect focus during the update, then test both success and failure. Capture the focused view and its eligibility before activation, during loading and after completion. A screenshot of the final button alone cannot establish continuity.

AOSP also describes a custom visual state that leaves a view eligible for focus while changing how activation behaves. Use that only with an explicit action guard and an explanation of unavailability. Do not remove a genuine permission, driving restriction or other safety condition to retain a highlight. Preserving navigation and authorizing the action are separate decisions.

Avoid making both a wrapper and its child focusable for a single action: the documented result can be two rotary stops for one visible control. Each window also needs the prescribed FocusParkingView outside its FocusAreas, first in focus order. The Car UI base layout already provides one; adding another is not a general focus-loss fix. [1]

Five symptoms, five different checks

These comparisons describe proposed diagnostics, not measured failure rates or confirmed defects. Retain the same build and input sequence while changing one condition.

Diagnostic distinctions for the hypothetical media screen.
Observed symptomFirst comparisonConclusion to avoid
First press after touch only highlightsTouch-to-rotary handover versus uninterrupted rotary useThe controller lost the press
Refresh needs a turn through the entire listFocusArea boundaries and intended nudge shortcutsThe encoder is too slow
Focus disappears while Refresh loadsView identity and focus eligibility across the updateThe identical-looking button is the same target
One control takes two rotary stopsWrapper and child focusabilityThe input driver duplicated a detent
Rotation still edits after leaving a controlDirect-manipulation exit and actual screen lifecycleBack handling alone covers every exit

Leaving an edit mode is another transition

A focused slider can enter direct manipulation when Center is pressed. Rotation then edits its value rather than moving focus; Back exits that mode. A map can use rotation for zoom and nudges for pan. That is a distinct input state, so a stationary focus highlight is not sufficient evidence that navigation is stuck. [2]

For advanced direct manipulation, the developer guide requires leaving the mode when the owning Fragment or Activity is no longer interactive. Its sample uses onPause. Android's lifecycle guide distinguishes a partially visible paused Activity from a stopped one; visibility alone does not establish the lifecycle state. Verify the lifecycle actually reached on the target screen; do not assume every overlay invokes onPause. Record mode entry, mode exit and the visible cue as well as the focused view. [1][4]

Accept the refresh design only when the next intended rotary action has a visible, reachable target after success, failure and interruption, without re-enabling an unavailable operation. For an editing control, also require a verified return to navigation. Those observations justify a UI fix. If focus and mode remain correct but input is absent, investigate delivery with matching event records; the documentation alone cannot identify a hardware fault.

Open questions

Reproduction
Was the preceding action touch, navigation or direct manipulation?
Update
Which eligible view owns focus before, during and after loading?
Acceptance
Can the next rotary action reach its intended target without bypassing an unavailable action?

Sources & scope

No vehicle or emulator test. Helper APIs and attributes in the cited guide carry Android 11 QPR3, Android 11 Car or Android 12 labels; verify the target build and Car UI library before implementation.

  1. AOSP: Develop rotary-enabled appsEnglish original · Checked 27 October 2026
  2. AOSP: Rotary controllerEnglish original · Checked 27 October 2026
  3. AOSP: Content licenseEnglish original · Checked 27 October 2026
  4. Android Developers: The activity lifecycleEnglish original · Checked 27 October 2026
  5. Android Developers Blog: Touch Mode (2008)English original · Historical framework background; checked 27 October 2026
Contact the editor

What would you add?

Share a different implementation, flag a correction, or tell us where this analysis helps with your work. A public source link is welcome.

Your message and email are stored privately for handling this request. Do not include confidential product information.