Skip to content

applib: put system action bars on the button side in left-hand mode - #1856

Open
myNameArnav wants to merge 7 commits into
coredevices:mainfrom
myNameArnav:applib/left-handed-action-bar
Open

applib: put system action bars on the button side in left-hand mode#1856
myNameArnav wants to merge 7 commits into
coredevices:mainfrom
myNameArnav:applib/left-handed-action-bar

Conversation

@myNameArnav

@myNameArnav myNameArnav commented Aug 12, 2026

Copy link
Copy Markdown

Justice for ~10% of the people in the world :)

Summary

  • In Left-Handed Mode, system and kernel/modal ActionBarLayers move to the left so on-screen hints sit next to the physical buttons. Third-party apps stay on the right so existing layouts do not break.
  • Shared dialogs (actionable / expandable / number_window) and first-party screens that hardcoded a right-hand strip (Music, Workout, factory reset, speaker volume, phone UI, Bluetooth pairing) inset content with firmware-only helpers.
  • Timeline's pin strip, relationship bars, and the pin-card action-button nub follow the button side as well.
  • Firmware update no longer drops orientation, so the progress UI stays upright in Left-Handed Mode.
  • QEMU emery gets CONFIG_ORIENTATION_MANAGER plus accel/mag rotation stubs so this can be tested in the emulator. SDK export of the helpers for custom apps is intentionally out of scope (applib: export action bar left-hand helpers to the SDK #1858).

Fixes #1464

Screenshots

All captured on qemu_emery (Pebble Time 2) with Settings → Display → Orientation → Left-Handed. Action bars sit on the left.

Music

Music action bar on the left

Workout (Health enable dialog)

Workout dialog action bar on the left

Health

Health enable dialog action bar on the left

Alarms (Smart Alarm first-use)

Smart Alarm expandable dialog action bar on the left

Settings → Sounds & Haptics → Volume

Speaker volume action bar on the left

Settings → System → Factory Reset

Factory reset confirm action bar on the left

Settings → System → Shut Down

Shut down confirm action bar on the left

Timeline pin-strip (button-side sidebar) was verified on a Pebble Time 2; QEMU emery has no pins so the list view could not be captured there. Firmware update progress is the same: it stays rotated with Left-Handed Mode instead of flipping upright mid-install.

Round 2 / 2 Duo share this firmware path but were not screenshot in QEMU (qemu_gabbro / qemu_flint do not enable orientation yet).

Test plan

  • ./pbl test -M '.*action_bar.*' — system/kernel move left; third-party stays right
  • On hardware or qemu_emery: Settings → Display → Orientation → Left-Handed
  • Confirm action bar is on the left in Music, Workout/Health enable dialog, Alarms Smart Alarm first-use, Settings volume, Shut Down, Factory Reset (decline, do not confirm)
  • Confirm Timeline pin strip (and pin-card select nub) is on the left
  • Confirm firmware update progress stays in Left-Handed orientation (does not flip)
  • Confirm a third-party app with an action bar is unchanged (still on the right)
  • Toggle back to Default and confirm system bars and Timeline return to the right

myNameArnav and others added 3 commits August 13, 2026 20:33
ActionBarLayer was always drawn on the right, so after Left-Handed Mode
rotates the watch the on-screen hints no longer sit next to the physical
buttons. Move the bar for system apps and kernel/modal UI only; third-party
apps keep the right edge so existing layouts do not break.

Firmware-only helpers inset content beside the bar. Shared dialogs and
first-party screens that hardcoded a right-hand strip now use them.

Fixes coredevices#1464

Co-authored-by: Cursor Grok 4.6 <noreply@cursor.com>
Signed-off-by: Arnav Jain <arnjain3@gmail.com>
Orientation manager calls accel_set_rotated and mag_set_rotated, which
QEMU did not implement, so the feature could not be turned on in the
emulator. Add no-op stubs and enable CONFIG_ORIENTATION_MANAGER on
qemu_emery so Left-Handed Mode can be exercised there.

Co-authored-by: Cursor Grok 4.6 <noreply@cursor.com>
Signed-off-by: Arnav Jain <arnjain3@gmail.com>
Firmware update dropped orientation, so the progress UI looked inverted
in Left-Handed Mode. Timeline's pin strip also stayed on the right after
rotation. Keep rotation during the FirmwareUpdate runlevel and put the
timeline sidebar and action-button nub on the button side.

Co-authored-by: Cursor Grok 4.6 <noreply@cursor.com>
Signed-off-by: Arnav Jain <arnjain3@gmail.com>
@myNameArnav
myNameArnav force-pushed the applib/left-handed-action-bar branch from 64548c7 to 433c18c Compare August 13, 2026 15:04
@myNameArnav
myNameArnav marked this pull request as draft August 13, 2026 15:14
myNameArnav and others added 3 commits August 13, 2026 22:50
Icons sat on the bezel and pin text used the 9px left margin beside the
sidebar instead of the 14px gap used on the right-hand strip.

Co-authored-by: Cursor Grok 4.6 <noreply@cursor.com>
Signed-off-by: Arnav Jain <arnjain3@gmail.com>
Pin text (time, title, subtitle, all-day) stayed left-aligned beside the
left-hand sidebar instead of mirroring to the screen's right edge like the
right-hand strip. Align the text to the right when the sidebar sits on the
left.

Co-authored-by: opencode <noreply@opencode.ai>
Signed-off-by: Arnav Jain <arnjain3@gmail.com>
… used

The timeline, compositor, and action-button code call
action_bar_layer_is_on_right() but only included the public header, which
does not declare the firmware-only left-hand helpers. Include the private
header so these compile.

Co-authored-by: opencode <noreply@opencode.ai>
Signed-off-by: Arnav Jain <arnjain3@gmail.com>
@myNameArnav
myNameArnav marked this pull request as ready for review August 14, 2026 16:30
Correct remaining left-hand layouts in shared dialogs and Timeline relationship bars.

Correct phone and pairing UI; add orientation preference stubs for PRF QEMU builds.

Co-authored-by: GPT-5.6 Terra <noreply@openai.com>
Signed-off-by: Arnav Jain <arnjain3@gmail.com>
@myNameArnav
myNameArnav force-pushed the applib/left-handed-action-bar branch from 6bb6d98 to e2338ce Compare August 14, 2026 16:34
@myNameArnav

Copy link
Copy Markdown
Author

@jplexer tested on obelix, can you have a look.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Several of the core apps (Music, Health, Workout, Stopwatch) don't respect Left-Handed Mode

1 participant