Commit Graph
868 Commits
Author SHA1 Message Date
MaxsTechReview 727dcd45d9 Merge branch 'main' into fix/gamespace-launcher 2026-10-22 16:41:22 -04:00
The412Banner 32c85dfba1 fix(xbox): put the helper's sign-in failure code in the shared log (#1342)
A user's log (#1300) showed "the Xbox helper stopped with exit code 1", but
not why. Before it asks for the Microsoft page the helper can only fail while
opening the credential store or registering the device, and it prints a code
for that (NEXUS_CREDENTIAL_ERROR_V1 keyring-unavailable, device-
authentication, ...). Sign-in runs in its own process, where
StoresState.logLine writes no file, so that line only reached logcat. The
sign-in window now writes the helper's known diagnostics to the stores log
itself, and the credential bridge writes why it refused the helper there too.
Lines are stamped by a shared StoreLogFiles.stamped.
2026-10-22 15:56:09 -04:00
Kurt Himebauch fac51b3400 fix: make the default launcher entry a real activity so Red Magic Game Space can add the app 2026-10-22 15:08:16 -04:00
Kurt Himebauch f61525162d feat: games show their logo, and store games get one from the store (#999) 2026-10-22 14:48:23 -04:00
The412BannerandxXJsonDeruloXx 58f0f27f39 fix(xbox): show why Microsoft sign-in fails, and the gamertag instead of the email (#1322)
Sign-in sat on a black "Preparing Microsoft sign-in…" screen while the Xbox
components downloaded and the helper started, then only said "did not
complete" (#1300). The window now names each step (with download progress),
and a failure says which step failed and why. Our own messages are shown as
written; anything else is named by its exception type only. The line also goes
to the stores log, which the shared log zip carries.

The Stores page showed the account's sign-in email. It now shows the Xbox
gamertag, read with `xodus-cli profile` after the library sync on its own
thread (75 s limit: the command allows itself 45 s, plus PRoot start-up), once
per signed-in account. Until it is known the email is shown masked, and only
the store label while credentials are temporarily unreadable. The account key
used for caches and launches is unchanged.

Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
2026-10-22 14:30:38 -04:00
xXJSONDeruloXx 13249402ad Merge main and share GPU busy reads 2026-10-22 13:31:17 -04:00
Kurt Himebauch a50f7333ea fix: latch kgsl GPU busy windows so MangoHud's GPU load stops reading 0% (#1327) 2026-10-22 13:28:24 -04:00
Kurt Himebauch 3c3f550e96 Merge current main into PR #1326 2026-10-22 12:13:54 -04:00
Kurt Himebauch 3501d13d29 Merge current main into PR #1327 2026-10-22 12:13:54 -04:00
Kurt Himebauch e8a8de1b22 Merge current main into PR #1317 2026-10-22 12:13:54 -04:00
Kurt Himebauch de4b778bd1 Merge current main into PR #999 2026-10-22 12:13:48 -04:00
angelrenefm 6c22248d77 fix: feeds that share a reader also share a failed read 2026-10-22 17:44:34 +02:00
Kurt Himebauch 701e70bd3e fix: the emulated Steam Controller reports the firmware build Steam ships (#1323)
* fix: the emulated Steam Controller reports the firmware build Steam ships

* fix Triton firmware lookup for Steam root binary
2026-10-22 11:43:05 -04:00
Kurt Himebauch c3f3c04fc5 fix: latch kgsl GPU busy windows so MangoHud's GPU load stops reading 0% 2026-10-22 11:39:50 -04:00
angelrenefm 2dc2a44115 fix: the performance overlay shows the GPU load on Adreno phones whose kgsl busy percentage is unreadable
GpuStatsComponent read kgsl's gpubusy once per feed, so the msm reader path
(perf_now), read second, got the empty read and showed 0 %. Feeds that share a
reader now share one read, and one empty read between gpubusy windows keeps the
last load.
2026-10-22 17:35:05 +02:00
Kurt Himebauchandzooluis e49557a02d fix: register Android CJK fonts with fontconfig (#1319)
* fix: write CJK fontconfig as valid Kotlin

* fix: choose CJK fonts for requested language

* fix: prefer exact Chinese fontconfig locales

---------

Co-authored-by: zooluis <150430329+zooluis@users.noreply.github.com>
2026-10-22 10:47:12 -04:00
3c622a9323 feat: the unfolded controls can stay while a controller is connected (#996)
On foldables the unfolded-screen controls panel hides whenever a
controller is connected (#829). Phones held in a telescopic controller
still want its trackpads and back grips, so a new setting under
"Controls on the unfolded screen" keeps the panel with a controller.
It is off by default and appears in the launcher settings and the
in-session menu while unfolded controls are on.

The visibility decision moves into SessionDisplay.unfoldedControlsWanted
with unit tests.

Closes #861

Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
2026-10-22 10:43:41 -04:00
Kurt Himebauch 8ed98b570b Keep visible external-display sessions running (#1320)
Track visibility on the activity display

Separate activity visibility from the compositor display so a powered external screen keeps the session visible when the handset is locked. Notify the service as the activity moves between displays and avoid reporting a removed host display before Android moves the activity.
2026-10-22 10:42:57 -04:00
xXJsonDeruloXx e6265c1262 Merge current main while preserving subscription access and game logos 2026-10-22 10:41:17 -04:00
xXJsonDeruloXx e163b4fdba Preserve newer sleep requests when a freeze is cancelled 2026-10-22 10:32:29 -04:00
4513940717 a11y: give the button-like clickables a Button role for screen readers (#891)
* a11y: give the button-like clickables a Button role for screen readers

33 clickable / combinedClickable modifiers on buttons, tiles, list rows and
rail items had no semantic role, so TalkBack could not announce them as
buttons. Pass role = Role.Button on those. Scrims and pointer-consuming
backdrops are left alone. No visual or focus change.

* a11y: expose selection state for the drawer tabs, driver rows and suggested icons

The three selectable items (drawer page tabs, driver radio rows, suggested app icons) were given a plain Button role. Use selectable with Role.Tab or Role.RadioButton and the selected value so a screen reader announces which one is chosen.

* a11y: the rail's top tabs expose selection to screen readers

The tab cells were plain buttons, so a screen reader could not tell which
section was open. Tabs use selectable with Role.Tab; the link cells keep
the Button role.

* fix: expose selected store header tabs

* Group selectable accessibility controls

---------

Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
2026-10-22 10:30:55 -04:00
3d9f200a7e feat: add SDK-free 3DoF tracking for VITURE Pro 2 (#1115)
* feat: itch.io store, library and installs for DRM-free Windows builds (#1064)

* feat: add experimental SDK-free VITURE Pro 2 tracking

* docs: record full-app Pro 2 hardware validation

* docs: record successful Pro 2 user game test

* fix: translate Pro 2 tracking notice for all supported locales

* fix: respect model capabilities for glasses controls

* fix: handle fold configuration during glasses probe

---------

Co-authored-by: kingokksa <47888451+kingokksa@users.noreply.github.com>
Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
2026-10-22 10:28:14 -04:00
FX1922andxXJsonDeruloXx 7482f797c7 feat: custom Gradient theme with primary and secondary colors (#1309)
* feat: a custom Gradient theme with a primary and a secondary colour, picked with a wheel, sliders and a hex box

* Gradient theme: OK waits for a valid hex, deep blues are made paler, button text suits the worse gradient colour

* Gradient theme: nudge only the gradient colour that button text cannot read on

* fix: meet readable contrast across gradient themes

* fix: preserve contrast through gradient interpolation

---------

Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
2026-10-22 10:26:53 -04:00
Danbro007 d2abaef2a3 fix: recognize SM8975 and mark Adreno 850 support experimental (#1249)
* fix: recognize SM8975 and mark Adreno 850 support experimental

* fix: retain A850 experimental status with spoofed Vulkan names
2026-10-22 10:19:23 -04:00
Kurt HimebauchandDelete228 0577a22459 fix: keep Steam shortcuts out of desktop controls (#1318)
* Enable existing second-screen controls in desktop sessions

* Keep controller drawer navigation consistent in desktop sessions

* Cover desktop and Steam second-screen controls with regression tests

* fix: hide Steam shortcuts in desktop controls

---------

Co-authored-by: Delete228 <31237303+Delete228@users.noreply.github.com>
2026-10-22 10:16:25 -04:00
de8b5568c1 Fix: Keep Android library names visible in diagnostic logs (#1063)
* Preserve Android shared-library names in logs

* Restrict library redaction exceptions to loader diagnostics

---------

Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com>
Co-authored-by: Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com>
2026-10-22 10:12:57 -04:00
87e4b42ed8 fix: third-party GitHub mirrors only serve downloads with a trusted digest (#1057)
fix: a third-party GitHub mirror can only serve downloads that carry a trusted digest

Downloads without an expected SHA-256 were still sent through gh-proxy,
ghfast and other mirrors, and the first answer was accepted, so a mirror
could swap an AppImage or a Windows component. Downloader.downloadFile
now tries only the original URL when there is no digest. UserApps passes
GitHub's own asset digest, and WinComponents passes the snapshot's
archive digest, so those large files keep their mirror fallback.

Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
Co-authored-by: Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com>
2026-10-22 10:12:33 -04:00
xXJsonDeruloXx 1b14939731 fix: suspend page-out waits for each handler's ack and can be cancelled 2026-10-22 10:01:49 -04:00
kingokksa eb0eecda7a fix: let a connected controller keep the first player slot (#1304) 2026-10-22 09:37:01 -04:00
Resul Övürandovurrsl 4361182b0e fix(ui): stop touch-blocking dialog and drawer containers from merging descendant semantics (#1145)
Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
2026-10-22 09:35:11 -04:00
Resul Övürandovurrsl 0444b3eff9 l10n: Turkish for the Storage page, GPU driver mode and the other untranslated screens (#989)
l10n(tr): translate the Storage page, GPU driver mode and other missing strings

Adds 213 strings and 9 plurals that were missing from values-tr, so the
new Storage page, GPU driver mode UI, SteamGridDB art, downloads source,
VR and latency toggles no longer fall back to English on Turkish devices.

Co-authored-by: ovurrsl <ovurrsl@users.noreply.github.com>
2026-10-22 09:34:17 -04:00
xXJsonDeruloXx 240b7fcce6 feat: page the session out to zram before suspending it, and zram is always on where supported 2026-10-22 09:02:37 -04:00
Kurt Himebauch 22f7d5b909 feat: make desktop mode easy to uninstall safely (#1311) 2026-10-22 08:17:14 -04:00
Kurt Himebauch d012a1f5b6 fix: pause Steam Controller BLE reconnects while the session is suspended (#1312) 2026-10-22 12:05:17 +00:00
The412Banner aaa2e40def feat: DroidDeck's linux-nightly components, with a Stable/Nightly switch (#1284)
The component catalog also reads the linux-nightly release of
Droid-Deck/DroidDeck-Components (hourly builds of DXVK, VKD3D-Proton and
FEX for glibc Protons). That release holds all three components, so each
file goes to its list by name: DD-dxvk-, DD-vkd3d-proton-, DD-FEXCore-.

A nightly that matches a stable build (same flavor and version, e.g.
DD-dxvk-3.1.1+153-nightly and dxvk-3.1.1-linux) has no row of its own;
if two nightlies match, the newer one is used. On the components page
the stable row gets a Stable | Nightly switch before Get, styled like
the Get button, one focus stop that flips with A or a tap and reports
its state as a switch. In the in-session drawer's download menus the
row gets Stable and Nightly tabs beside it (the existing TabStrip, now
with optional bumpers/compact), each its own focus stop. Get or A on the
row downloads whichever channel is selected. A nightly without a stable
counterpart keeps its own row, listed below the stable ones.

Downloads are allowed from that repository's releases too. A failed
nightly download says the file may have been replaced and asks for a
refresh. Strings in all locales.
2026-10-22 04:23:46 -04:00
Tomasz Kloc 593014fe8c Let GOG and Epic installs pick a game language (#1199) 2026-10-22 00:38:01 -04:00
Kurt Himebauch 138d313b7f Default Deck controls to both trackpads (#1295) 2026-10-22 00:35:46 -04:00
Resul Övür e0b3f928a6 fix: auto-driver trial rolls back when the display driver crashes at startup (#1031) 2026-10-21 23:56:43 -04:00
Resul Övür e865fa6b62 fix: Steam Controller (Triton) output/feature reports are no longer overwritten unread (#1032) 2026-10-21 23:55:00 -04:00
Resul Övür 37535a3d38 fix: a full disk no longer crashes the app during cover art fetches (#1030) 2026-10-21 23:52:35 -04:00
kingokksa 60043873f2 Switch the GOG store to GOG's official listing endpoint: fewer requests, the tab now opens in seconds (#786) 2026-10-21 23:51:16 -04:00
The412Banner cd18e87864 Return to the launcher when a front-end game closes (#395) 2026-10-21 23:20:18 -04:00
Resul Övür ec5a08ddf1 fix: in-app update works on Android 9 and 10 (#1066) 2026-10-21 23:18:02 -04:00
Kurt Himebauch 0de6413914 Revert dedicated second-screen activity (#1288) 2026-10-22 02:53:35 +00:00
Moroni Granja 4cae235154 fix: Xbox search results open with their metadata and Game Pass installs (#1279) 2026-10-21 22:43:51 -04:00
Kurt Himebauch 1251e9d3ee Default session orientation to landscape (#1287) 2026-10-21 21:27:25 -04:00
kingokksa 2b0c55f72e feat: let the built-in controller be turned off (#1207) 2026-10-21 19:49:31 -04:00
MaxsTechReview ed29f77fc2 fix: Chromium browsers start on the desktop (#1280)
A process's status read for another process is served read-only, so
Chromium's ReadOnlyFile check no longer kills the browser. Chromium-based
AppImages without chrome-sandbox get --no-sandbox, and Flathub Chromium and
Electron apps skip zypak's spawn portal, which cannot work here.
2026-10-21 18:17:07 -04:00
kingokksa 400325fa8f fix: some games never loaded their own Steam touch layout, and the sticks could not be placed (#1058) 2026-10-21 17:39:05 -04:00
Resul Övür 2f4fe2c5be fix: manual cloud-save upload/download no longer reports a skipped sync as success (#1068) 2026-10-21 17:32:28 -04:00