Commit Graph
1317 Commits
Author SHA1 Message Date
Kurt Himebauch 4b8f63d84d feat: Mali Vulkan support through MaliBridge (#2027) 2026-11-02 20:23:21 -05:00
Kurt Himebauch 3dcb3eac42 chore: revert the Mali Vulkan squash to re-land it with history (#2026) 2026-11-02 20:22:29 -05:00
张先生 1f91283f40 feat: Mali Vulkan support through MaliBridge (#1950) 2026-11-02 20:16:48 -05:00
Kurt Himebauch 80da86a5d3 fix: resolver order is active DNS, discovered DNS, public, then gateways 2026-11-02 19:58:58 -05:00
Kurt Himebauch ece3fec8ba fix: the active network's first three DNS servers stay ahead of public fallbacks 2026-11-02 19:43:57 -05:00
Kurt Himebauch 3a4c6a4a7a fix: DNS gateway pick and public fallback slot, drop reference to an unshipped script 2026-11-02 18:56:45 -05:00
Kurt Himebauch 0a0bbb68d1 fix: a stale session's startup failure no longer stops the newer session (#1984)
* fix: a stale session's startup failure no longer stops the newer session

* fix: stale session failures and queued-launch cleanup are checked against the current session under the stop lock
2026-11-02 18:44:12 -05:00
Kurt Himebauch 34a1cbbead fix: keep PRoot out of the APK, VPN DNS first, bridge failure exits, HUD polling stays on 2026-11-02 18:17:00 -05:00
Kurt Himebauch f05e0df39e Merge remote-tracking branch 'origin/main' into review/malibridge-1950 2026-11-02 18:14:00 -05:00
Kurt Himebauch cae095ce30 fix: download monitor polls off the main thread so slow storage can't ANR the session (#2020)
* fix: download monitor polls off the main thread so slow storage can't ANR the session

* fix: cancel the queued download poll before the service shuts its executor down

* fix: ignore download monitor submissions that arrive after the service shut it down
2026-11-02 17:53:02 -05:00
Kurt Himebauch 5fe3021e5e feat: suggest Steam libraries found on internal storage and cards (#2023)
* feat: suggest Steam libraries found on internal storage and cards

* fix: add found card libraries by their readable path and drop superseded scan results
2026-11-02 17:40:55 -05:00
MaxsTechReview bc5edb81db fix(battlenet): list World of Warcraft: Forever in the Library (#2018)
Forever was missing for two reasons. Its install was not a known title,
so the scan skipped it as "not listed". And every WoW version installs
into the same World of Warcraft folder, so once one version was listed
the Library dropped the others as the same game.

- Forever is a title: launch code WoWF, product wowf, folder _forever_.
- An install whose uid is not known is matched by the product code
  product.db records for it.
- When versions share the folder, the one listed first keeps it and the
  others use their own version folder (_forever_, _classic_, ...). Each
  title's folder is remembered, so a shortcut keeps its app id when
  another version is installed or removed.

Games installed before this update are listed on the next Library scan.
They do not need to be installed again.
2026-11-02 17:05:16 -05:00
The412Banner 8d3616eccd feat(dual-screen): swap screens - game on the bottom screen, panel on top (#2006)
Swap screens for dual-screen handhelds: the game moves to the built-in
bottom screen while the top screen shows the Dashboard or the KDE desktop.
Swap button in the Dashboard and Desktop bars and a Show the game on
row in the session menu. The desktop resizes to the screen it is on,
Follow screen and Match screen sessions take the bottom screen's shape,
the keyboard opens on the top screen, and the game swaps back on session
end, picture-in-picture, glasses, or when the bottom screen is taken.
Review follow-ups cover desktop restart, refresh pacing, key and pointer
ownership, touch cancellation and bottom surface recovery.
2026-11-02 21:43:22 +00:00
Kurt Himebauch 3fbd86c89d fix: bottom screen frame graph updates smoothly and no longer looks jagged (#2013) 2026-11-02 14:29:39 -05:00
Kurt Himebauch 89a2ae87d7 fix: drop the HUD watermark and use the wordmark in headers (#2011) 2026-11-02 13:39:53 -05:00
FX1922 3583643a11 feat: Add the Game Jolt store (#1986) 2026-11-02 10:05:30 -05:00
Kurt Himebauch 0050b5eb6b fix: docked HUD tab FPS number sits between the old and halved sizes (#2003) 2026-11-02 09:23:22 -05:00
Kurt Himebauch b16b67e6c4 feat: desktop session follows the app language (#1971) 2026-11-02 09:08:48 -05:00
Kurt Himebauch 55362d68ef fix: wall scrims overhang the window so no edge pixels stay unshaded (#1994) 2026-11-02 07:03:20 -05:00
Kurt Himebauch 2bc6985ae3 feat: choose Steam or Desktop to open when DroidDeck starts (#1993) 2026-11-02 07:03:02 -05:00
The412Banner 55da0afd06 fix(hud): GPU clock and load without root on Adreno 8xx and hardware-scheduled kernels (#1981)
On phones where Android blocks the GPU's sysfs files for apps, the HUD
reads the GPU without root (#1969). On Adreno 8xx that showed no GPU
clock and only the partial load from Vulkan timing (OnePlus 13, Adreno
830, reported by iamTooShaar).

- GPU clock: the clock job used the Adreno 6xx/7xx registers. The
  register layout is now picked from the KGSL chip id: on 8xx
  CP_ALWAYS_ON_COUNTER is 0x8e7 and the RBBM cycle countable is 1.
  Unknown later generations read nothing.
- GPU load: hardware-scheduled kgsl kernels (every 8xx, and some 7xx
  such as the AYANEO Pocket FIT's) never write the memstore ringbuffer
  timestamps. When those stay 0, the reader samples the contexts' own
  memstore entries (every context that has submitted work, up to 64,
  contexts with new or running work first).
- HUD diagnostics report: a "GPU readers without root" line with the
  reason each reader works or fails, "none" instead of "null", and the
  per-core CPU % source named honestly.

Tested: iamTooShaar's OnePlus 13 shows GPU clock and load with the PR
test build (06be2c5). Pocket FIT standalone build of the final readers
against the kernel's sysfs numbers: idle 1-2 % vs 3-4 %, GPU job loop
25-29 % vs 28-30 %, clock 1050 MHz vs 1050 MHz. The review fixes after
the test build were not tested on the OnePlus 13.
2026-11-02 10:07:26 +00:00
MaxsTechReviewandKurt Himebauch 313b6a59d2 feat(dual-screen): single-screen mode on the Retroid Pocket Duo and AYN Thor while another window holds the bottom screen (#1979)
* feat(dual-screen): step aside on the Retroid Pocket Duo's bottom screen while another window holds it

When the Duo's double-Home performance panel or another app (Chrome, YouTube) is on the bottom screen, DroidDeck switches to single-screen mode: the launcher's bottom panel and the in-game bottom controls close and the top screen takes its single-screen layout. When the bottom screen is back on its home screen, dual-screen mode returns, with the in-game controls reopening in the mode they had.

The DroidDeck shortcuts accessibility service watches the bottom screen's windows on the Duo only. An app opened under DroidDeck's panel is caught by its window opening on that display; the Retroid panel and any app on top are read from the window list.

* fix(dual-screen): log the bottom screen's holders only when they change

* fix(dual-screen): the topmost window other than DroidDeck's decides who holds the bottom screen

Apps opened under DroidDeck's bottom panel are still listed beneath it, so DroidDeck's own windows are skipped and the next full-size window decides. Fallback home screens such as Settings' boot-time one no longer count as a home screen.

* fix(dual-screen): catch apps opened under the in-game bottom controls

The in-game bottom controls hide the windows beneath them from the window list, so an app opening a window on the bottom screen while only DroidDeck is listed now holds the screen until the list can see it.

* fix(dual-screen): keyboards never hold the bottom screen; watch the built-in panel only

Keyboard windows opening on the bottom screen no longer count as an app arriving, so typing with the in-game bottom keyboard keeps the controls up. Only the built-in bottom panel is watched, so an external display can't close the controls. An arrival recorded while a check runs is kept for the next check, and stopping the watcher clears the held state after any running check.

* feat(dual-screen): step aside on the AYN Thor's bottom screen too

The bottom-screen watch now runs on every handheld in DualScreen's known dual-screen models, the Retroid Pocket Duo and the AYN Thor, including model names that extend them such as AYN Thor Max.

* fix(dual-screen): only the current bottom-screen watch publishes; Thor variants match when the display type is hidden

* fix: session drawer top row scrolls and Stop stays an icon-only button

* fix: docked drawer drops the second-screen page; tapping the active mode returns to none

* fix: docked drawer drops the bottom-screen mode icons; the Mode page keeps them

* fix: restore the second-screen drawer page when docked

* feat: dual screen launcher and dual screen sessions are separate Automatic/On/Off settings

* fix: session drawer top row keeps its right alignment

---------

Co-authored-by: Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com>
2026-11-01 23:14:18 -05:00
Kurt Himebauch 92ec0929ae fix: remove the Bottom screen HUD descriptions from the HUD settings (#1988)
* fix: remove the Bottom screen HUD descriptions from the performance HUD settings

* fix: remove the telemetry blurb, speed units row and tap hint from the bottom stats page

* fix: keep steamClientLabel
2026-11-01 22:17:24 -05:00
FX1922 57b7c99b9a fix: keep games being updated in the installed list for every store (#1989) 2026-11-01 22:05:39 -05:00
DroidDeck Merge 8171bf20fd Merge latest origin/main and resolve conflicts 2026-11-02 10:44:24 +08:00
DroidDeck Merge 99dce74b09 fix: address maintainer review (restore README, revert version bump) 2026-11-02 10:43:42 +08:00
The412Banner e1d241d723 feat(dual-screen): bottom-screen HUD, Line strip, strip under every bottom tab, Bottom screen HUD settings (#1982)
- In-game stats shows a bottom-screen HUD while no game sends dashboard data: 11 styles, tap to change; it reads the game's frames and the device itself, so it works with the top-screen HUD off.
- Line strip: one line like the top HUD's Strip (API + FPS, frame-time graph, 1 / 0.1 / 0.01 % lows, GPU, CPU with temperature, VRAM, RAM, clock); default strip above a game's dashboard; numbers that do not fit are left out by importance.
- The same strip under the tabs on every other bottom page during a session.
- Bottom screen HUD settings, shown even with the top HUD off: one switch for the whole bottom HUD, strip on every tab, and which numbers the Line strip shows.
- The bottom HUD redraws about 10 times a second (was about 3) and reads device stats twice a second.
- GPU load, clock and VRAM readers also run while the bottom HUD shows them (BottomHudPresence).
- Night style stays dim instead of flickering with the FPS.
- Review fixes: slow-frame ring 2048, tab strip redraw without gamescope frames, Proton name per game, Graphs' duration from the kept readings, Fahrenheit in Tiles, Rings and Cores.
2026-11-01 19:23:31 -05:00
Kurt Himebauch 6a30a9bb4b fix: docked HUD tab FPS number is half its previous size (#1983) 2026-11-01 18:38:36 -05:00
MaxsTechReview da665bb14f feat: Auto picks DD-Turnip on Adreno 7xx (#1978)
Auto now prefers the newest DD-Turnip release on the Adreno 7xx, 710/720/722 included, and falls back to the previous Banners-Turnip pick when no DD-Turnip pair is published or the build fails to start a session on the device. The 8 Gen 2 on One UI keeps its patched Banners build and the 6xx keep Banners-Turnip.
2026-11-01 17:57:57 -05:00
Kurt Himebauch e30e722f8b feat: manage several Steam libraries beside internal and the card (#1967)
* feat: manage several Steam libraries beside internal and the card

* fix: serialize Steam library registry edits, refuse folders inside a Games root, refresh games after changes

* fix: rename refreshes games, added x86-64 libraries join redist seeding and direct mapping
2026-11-01 17:35:05 -05:00
MaxsTechReview c5577478ca chore: remove source comments and unused code, translate every missing string (#1965)
* chore(i18n): translate every missing string in all locales

Adds the 87 strings the bottom-screen Dashboard and in-game stats pages
introduced to all 32 locales, plus the 51 older settings strings Japanese
and the 50 Chinese locales were still missing. Every locale now has all
3456 translatable strings with the same placeholders as English.

Also translates 36 entries that were still English where the language
does not use the English word, and makes es-419 touch_app_id use the same
%1$s placeholder as English.

* chore(patches): drop comments from the lines downstream patches add

Removes comment lines and trailing comments from lines our patches add,
with hunk headers recounted. Lines that a later patch uses as context
and the upstream backport 0123 are left as they are.

The gamescope, FEX, proot and xodus series still apply to their pinned
sources, and the patched trees differ only in those comments.
test_hud_frames now finds the HUD writer by its first declaration.

* docs: credit Greenlight, Better xCloud, viture-v2, GameNative and DiRTTelemetryErrorFix

These were credited only in source headers and NOTICE files.

* chore: remove source comments and unused functions

Removes explanatory comments from first-party Kotlin, Java, C, C++,
Rust, TypeScript, Python, shell, Gradle, CMake and workflow files.
License and attribution headers stay, and vendored third-party trees,
generated files and license files are untouched. A shellcheck directive
is kept, and udevmon's fallthrough comments became fallthrough attributes.

Syntax trees and token streams match the previous sources apart from the
comments and Python docstrings. Module docstrings that argparse prints
are kept, and device-smoke.sh prints the same --help text from a heredoc.

Also removes 37 functions and 4 fields that nothing referenced.

* chore: remove comments from the Syncthing integration and the latest main sources

* docs: credit Syncthing and the syncthing-android fork

* chore(i18n): translate the Syncthing strings in all locales

The 107 strings the Syncthing integration added are now in all 32 locales.
sync_web_path_locked names the Syncthing tab by its label.

* docs: credit @xXJSONDeruloXx for the HUD metric readers

The CPU, GPU load, thermal and battery readers come from their
PerformanceHudView pull requests #777, #877, #991, #1406 and #1573.
The FusionHUD credit line is unchanged.

* docs: credit the HUD metric readers to @xXJSONDeruloXx's work
2026-11-01 16:27:27 -05:00
Kurt Himebauch d730f0fa8b fix: docked HUD tab follows the HUD outline setting (#1976) 2026-11-01 16:20:35 -05:00
Kurt Himebauch bf9435cd36 feat: KDE desktop on the bottom screen beside the session (#1966)
* feat: KDE desktop as a bottom-screen mode beside the top-screen session

* test: bottom-desktop launch test sets DISPLAY instead of inheriting it

* fix: drop the bottom desktop's launch when the session stops while preparing it

* fix: bottom desktop restarts on a fresh surface, trackpad/touch toggle, loading throbber, DroidDeck's display driver

* fix: bottom desktop pauses with the session and opens the keyboard for a tapped text field

* fix: no bottom desktop guest starts or keeps running unfrozen while the session is paused

* fix: bottom desktop treats a freeze in progress as paused

* fix: only the session that began a freeze clears its pausing flag

* fix: bottom desktop launch is stored and cleared only for its own session generation

* fix: a stopped session tears down the bottom desktop it started even after a newer launch is prepared

* fix: a new session's bottom desktop replaces one an earlier session left running

* fix: release the bottom desktop's keyboard watcher when its compositor dies

* fix: bottom desktop starts its guest only for the launch its compositor was attached for

* fix: bottom desktop ignores compositor replies to an earlier session's attach
2026-11-01 16:13:52 -05:00
The412Banner 8cb5c2168e feat(hud): GPU load and clock without root where Android blocks kgsl (#1969)
On some Adreno devices (the Retroid Pocket Duo) SELinux hides kgsl's sysfs
nodes from apps, so the HUD showed no GPU % and no GPU clock. Devices whose
nodes are readable keep using them; nothing changes there or on GPUs
without kgsl.

Where the nodes are blocked:

- GPU %: a native reader maps kgsl's memstore read-only (any kgsl client
  may) and samples the ringbuffer start/end timestamps once a millisecond
  while a HUD is shown. That covers all GPU work, Android's own
  composition included.
- Backup for GPU %: an implicit Vulkan layer in the guest
  (tools/gpuload) and the compositor time their own GPU work with
  timestamp queries. It runs until the memstore stamps are seen moving,
  and for the whole session if they never move.
- GPU clock: a small GPU job of our own reads the always-on and RBBM
  cycle counters (libgpuclock).

The HUD diagnostics export lists which source each GPU value came from.
tools/gpuload/build.sh takes the Vulkan headers from build_local.sh's NDK
first and keeps NDK paths with spaces intact.
2026-11-01 20:22:51 +00:00
Kurt Himebauch 6cd844ea51 feat: Follow screen resolution can be scaled down by a factor (#1964) 2026-11-01 14:51:28 -05:00
The412Banner 7eb9175def fix(dual-screen): In-game stats hint says "a game's data output", not only racing games (#1968)
War Thunder and Elite Dangerous show on this page too, so the hint no longer says racing game.
2026-11-01 19:26:03 +00:00
superboo07 8c09b2c6a8 Intergrated syncthing (#1442) 2026-11-01 12:58:09 -05:00
Kurt Himebauch 3566779895 feat: setting to turn off held-Back Steam shortcuts (#1955) 2026-11-01 11:15:59 -05:00
Kurt Himebauch 9c5f1e4df9 feat: HUD shrinks into its tab as it is dragged off an edge, and snaps to the sides (#1937) 2026-11-01 10:15:36 -05:00
DroidDeck Merge a2a5f84711 Merge origin/main into feat/malibridge-v25 2026-11-01 19:59:31 +08:00
DroidDeck Merge ddfc94d7ce local: version 25 with mscoree fallback 2026-11-01 18:29:08 +08:00
DroidDeck Merge 22a806d05a local: CPU temperature fallback from adb feeder 2026-11-01 18:22:54 +08:00
openMali e97e6b29df local: CPU clock before temperature in HUD 2026-11-01 17:54:04 +08:00
openMali 6d4961f7b6 local: session resolution and desktop HUD visibility 2026-11-01 17:32:51 +08:00
openMali e31a6eef18 local: hide unreadable Mali HUD GPU metrics 2026-11-01 17:24:06 +08:00
openMali a3d76b9a94 local: keep GPU bridge row visible after data clear 2026-11-01 16:03:31 +08:00
openMali 234b137328 local: show GPU via Mali bridge in Setup 2026-11-01 15:57:32 +08:00
openMali 9419a19c66 local: MaliBridge rc4, auto local DNS, KWin render node 2026-11-01 15:17:41 +08:00
Kurt Himebauch 09d170eb22 fix: performance HUD cycles colors with the Inner Gamer theme (#1932) 2026-11-01 01:41:42 -04:00
Kurt Himebauch 65b414df93 feat: Strip HUD size, a one-line bar across the top or bottom edge (#1935) 2026-11-01 01:26:30 -04:00