Skip to content

Android dual-screen: sync android-native and only enable dual-screen on a built-in second screen - #1097

Merged
zortos293 merged 5 commits into
android-dual-screenfrom
capy/android-dual-screen-sync
Oct 4, 2026
Merged

zortos293 merged 5 commits into
android-dual-screenfrom
capy/android-dual-screen-sync

Conversation

@zortos293

Copy link
Copy Markdown
Collaborator

Sync with android-native

Merges the three new android-native commits: the multi-controller gamepad input refactor and two bug-fix batches.

Two conflicts were resolved:

  • rememberPrintedWastePicker: keeps the dual-screen extraction and takes native's regional routing (printedWasteRegionalUrl with state.regions, skipping zones that have no route).
  • StreamControlsPanel: takes native's new expand-to-full-screen panel and keeps the caller-sized modifier the bottom screen relies on. The floating overlay height follows native (0.78). The expand button is hidden when the panel is hosted on the bottom screen, which it already fills; expanding there would also have changed the stream window's system bars.

Dual-screen mode only for a built-in second screen

Dual-screen mode turns on when the bottom-screen deck launches. Until now it launched on any public, non-default display that was switched on. That included an HDMI or USB-C monitor, a Miracast/cast display, or a docked handheld's TV, so a phone or an Odin plugged into a TV would have opened the deck on the TV.

selectBottomScreenDisplayId now only accepts displays without Display.FLAG_PRESENTATION. Android sets that flag on external, wireless and cast displays, but not on a second built-in panel.

  • Firmware fallback: some firmware may flag its bottom panel as a presentation display anyway. A short list of known dual-screen handhelds (isKnownDualScreenDevice: AYN Thor, AYANEO Pocket DS, Anbernic RG DS) also accepts those, preferring the lowest display id because built-in panels register at boot, before any dock.
  • Single-screen devices: with no matching display the deck never starts, so rememberBottomScreenHosting stays false and the app is the normal single-screen app. The "Bottom screen" settings section is hidden as before.

Checks

  • :app:testDebugUnitTest: 1160 tests, 0 failures. The new DualScreenTest cases cover single-screen, external-only, docked-TV-plus-bottom-panel, switched-off panel and the known-device fallback.
  • :app:assembleDebug builds
  • npm run locales:check passes

Open in Capy

Kief5555 and others added 5 commits October 3, 2026 08:33
- Introduced `PhysicalGamepadState` class to encapsulate state for each controller, improving state management and reducing redundancy.
- Added `androidGamepadConnectionBitmapForSlots` function to generate connection bitmaps for multiple controllers.
- Updated `NativeStreamClient` to utilize the new `PhysicalGamepadState` for managing physical gamepad inputs, including buttons, triggers, and stick positions.
- Enhanced controller connection handling to support multiple controllers, including updates to the gamepad state burst limiter and sending current gamepad states.
- Implemented new settings for multi-controller support in the UI, allowing users to enable multiple controller slots.
- Added tests to ensure proper functionality of multi-controller features and gamepad state management.
- Introduced `RecordingDestination` object for managing stream recording destinations, including folder permissions and file creation.
- Updated UI components for touch button appearance to support landscape layouts and improved user experience.
- Enhanced diagnostics schema to include multi-controller settings and dynamic network adjustments.
…d-dual-screen-sync

# Conflicts:
#	android/app/src/main/java/com/opencloudgaming/opennow/OpenNowCatalogControls.kt
#	android/app/src/main/java/com/opencloudgaming/opennow/OpenNowStreamControls.kt
@coderabbitai

coderabbitai Bot commented Oct 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: db657941-651a-4c44-ac94-5c8a6fc5d8a0

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@zortos293
zortos293 merged commit 0bd9564 into android-dual-screen Oct 4, 2026
11 checks passed
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.

2 participants