Skip to content

0.28.0.0#1302

Merged
Valkirie merged 358 commits intomainfrom
0.28.0.0
Oct 7, 2025
Merged

0.28.0.0#1302
Valkirie merged 358 commits intomainfrom
0.28.0.0

Conversation

@Valkirie
Copy link
Owner

@Valkirie Valkirie commented Oct 7, 2025

Summary by CodeRabbit

  • New Features
    • Added EA Desktop platform support and unified game platform selection.
    • New “Button Commands” hotkey to simulate gamepad buttons with configurable press delay.
    • Auto-deploy device-specific default hotkeys on first launch.
  • Improvements
    • Faster, smoother motion/axis processing and input shaping.
    • Ambilight/LED updates optimized with rate limiting; LED default level set to 1.
    • Controller support expanded (incl. ASUS Xbox Adaptive Controller); rumble behavior refined.
    • QuickTools navigation and focus handling improved.
  • Bug Fixes
    • More robust hotkey/profile migration and legacy data handling.
    • Ignore keyboard input when Windows session is locked.
  • Chores
    • Version bump to 0.28.0.0; updated dependencies.

BassemMohsen and others added 30 commits July 12, 2025 18:57
Signed-off-by: Bassem Mohsen <bassem.nomany@gmail.com>
Signed-off-by: Bassem Mohsen <bassem.nomany@gmail.com>
Signed-off-by: Bassem Mohsen <bassem.nomany@gmail.com>
Controller page progressbar
Fixed an issue where clicking on a control within SettingsCard (when IsClickable) would trigger the SettingsCard click.
Fix MainWindow Glyph ForegroundProperty
The bigger the interval, the lower the CPU usage.
- DualSense
- DualShock4
- Nintendo Switch Pro
- MSI Claw (DInput)
Fix Enum following our transition to SDL for a few controllers
* (Tentative) Fix TDP/Fan issues

* Misc: migrate powerProfile management to IDevice

* update lib
* Improved: Controller management

* Improved: Per-device hotkeys
* Tentative fix buttons RGB control

* Fixed: Hotkey deserialization with old ButtonFlags
* Improved: HC won't wait until session is ready anymore, except for keyboard input management

* Fixed: Device management asynchronous refresh

* Fixed: Device management asynchronous refresh

* oups

* Revert "Fixed: Profile update when resolution or refresh rate is changed"

This reverts commit 0fa4512.

* only update if necessary
@Valkirie Valkirie merged commit 9859909 into main Oct 7, 2025
1 check failed
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 7, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

Broad refactor introduces delta-aware input execution, restructures input states (buttons/axes/gyro) to array-backed storage, replaces PlatformType with flags-based GamePlatform and adds EA Desktop. Adds device default hotkeys, new XboxAdaptiveController, extensive manager updates (layouts, hotkeys, lighting, motion), new ButtonCommands, utilities, project/package updates, installer/version bump, and localization changes.

Changes

Cohort / File(s) Summary
Installer & Settings
HandheldCompanion.iss, HandheldCompanion/App.config, HandheldCompanion/Properties/Settings.*
Version 0.28.0.0; adds Defender exclusions routine post-install; updates QuickToolsLocation and LEDSettingsLevel defaults.
Project & Dependencies
HandheldCompanion/HandheldCompanion.csproj, HandheldCompanion/SecretKeys.cs
Bumps packages; adds GameLib/protobuf/YamlDotNet refs; clears secret constants.
Input Actions API (delta-aware, typed outputs)
HandheldCompanion/Actions/*.cs
Adds float delta to Execute methods; seals several classes; replaces Value/Vector with outBool/outVector; tweaks gyro default sensitivity; refactors per-action logic; introduces timers/flags changes in IActions.
Input State Core (array-backed)
HandheldCompanion/Inputs/ButtonState.cs, HandheldCompanion/Inputs/AxisState.cs, HandheldCompanion/Inputs/GyroState.cs, HandheldCompanion/Inputs/ButtonFlags.cs, HandheldCompanion/Inputs/AxisFlags.cs
Replace ConcurrentDictionary with arrays plus JSON bridges; add All* enumerations; new GyroState APIs; expand ButtonFlags (B12–B15, HOTKEY_RESERVED/USER); remove HOTKEY_START; adjust Max.
Utilities
HandheldCompanion/Utils/InputUtils.cs, HandheldCompanion/Utils/WPFUtils.cs
Adds extensive public input/math/deadzone utilities and enums; enhances WPF focus helpers with ignore filters and furthest-control lookup.
Managers: Layout/Hotkeys/Motion
HandheldCompanion/Managers/LayoutManager.cs, .../HotkeysManager.cs, .../MotionManager.cs
Layouts nullable, new LayoutChanged event, delta propagation; hotkeys first-run deployment from device defaults, legacy migration and sanitization; motion uses new GyroState APIs and inline helpers.
Managers: Platforms/Processes
HandheldCompanion/Managers/PlatformManager.cs, .../ProcessManager.cs, HandheldCompanion/Misc/ProcessEx.cs, .../Misc/Profile.cs, HandheldCompanion/Platforms/IPlatform.cs
Replace PlatformType with [Flags] GamePlatform; GetPlatform now uses ProcessEx; GetGames filters by platform; add EADesktop member; API signatures updated.
Platforms (Launchers)
HandheldCompanion/Platforms/Games/*
Assign GamePlatform values; add EADesktop platform; filter games via BlacklistIds across Steam/Epic/GOG/Riot/Rockstar/Ubisoft/BattleNet/Origin; Steam adds public BlacklistIds.
Commands
HandheldCompanion/Commands/FunctionCommands.cs, .../Functions/HC/ButtonCommands.cs, .../Functions/Multitasking/DesktopCommands.cs, .../Functions/Windows/ActionCenterCommands.cs, .../Functions/Windows/GameBarCommands.cs, HandheldCompanion/Simulators/KeyboardSimulator.cs
Introduces ButtonCommands; swaps GuideCommands reference; replaces key-sim with Process launches for some commands; KeyboardSimulator KeyPress gains async delay parameter.
Devices: Hotkeys & Power Profiles
HandheldCompanion/Devices/IDevice.cs, .../ASUS/AsusACPI.cs, device-specific .../*/*.cs hotkey blocks
Adds DeviceHotkeys dictionary and power-profile hooks; many devices preconfigure OEM/Special hotkeys; ASUS adds Manual mode; several devices switch to override-based PowerProfile handling and LED state caching (MSI Claw).
Controllers
HandheldCompanion/Controllers/*
Add Controllers/Asus/XboxAdaptiveController.cs; broaden SDL/XInput/Dummy mapping to
Managers: Dynamic Lighting & Performance/System
HandheldCompanion/Managers/DynamicLightingManager.cs, .../PerformanceManager.cs, .../SystemManager.cs, .../InputsManager.cs
Ambilight optimized (sampling, throttling, locking); fan control removed from PerformanceManager flows; expose IsSessionLocked and guard keyboard hook during lock; simplify system routine logic.
Library
HandheldCompanion/Managers/LibraryManager.cs
Use cleanedName for IGDB/SteamGrid; minor cast cleanup.
Misc & UI
HandheldCompanion/Misc/Hotkey.cs, .../Layout.cs, .../UI/UIGamepad.cs, .../Utils/WPFUtils.cs, .../ViewModels/*
Hotkey API adds file name, chord helpers, press type; FillInherit uses AllButtons/AllAxisLayoutFlags; UI navigation respects ignore lists and QuickTools; AxisMapping adds derived visibility properties; HotkeyViewModel supports ButtonCommands mapping/delay.
Targets/DSU
HandheldCompanion/DSU/DSUServer.cs, HandheldCompanion/Targets/DualShock4Target.cs
Switch to new GyroState getters instead of dictionary access for gyro/accel.
Localization
HandheldCompanion/Properties/Resources*.resx, .../Resources.Designer.cs
Rename Hotkey_Guide* to Hotkey_ButtonCommands*; add LayoutPage_* and ControllerPage_RelatedSupport keys; update default device profile text; regenerate designer accordingly.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant Controller as Controller (tick)
  participant LayoutMgr as LayoutManager
  participant Actions as Actions (IActions & derived)
  participant Outputs as Outputs

  Note over Controller,Outputs: Per-frame input processing with delta
  User->>Controller: Physical input
  Controller->>LayoutMgr: Tick(state, delta)
  LayoutMgr->>Actions: Execute(..., delta) per binding
  alt Axis/Button/Mouse/Keyboard/Trigger
    Actions-->>Actions: Update outVector/outBool, timers
  end
  Actions->>Outputs: Emit mapped state
  Outputs-->>User: Resulting behavior
Loading
sequenceDiagram
  autonumber
  participant App as App Startup
  participant Device as IDevice.GetCurrent()
  participant Hotkeys as HotkeysManager
  participant Storage as JSON Profiles

  Note over App,Hotkeys: First-run hotkey deployment
  App->>Hotkeys: Start()
  Hotkeys->>Device: Read DeviceHotkeys
  Hotkeys->>Storage: Load existing hotkeys
  Hotkeys-->>Hotkeys: Skip duplicates/conflicts
  Hotkeys->>Storage: Persist created hotkeys
Loading
sequenceDiagram
  autonumber
  participant OS as Device Arrival/Suspend/Resume
  participant CtrlMgr as ControllerManager
  participant XAC as XboxAdaptiveController
  Note over CtrlMgr,XAC: ASUS Xbox Adaptive handling
  OS->>CtrlMgr: USB arrival (VID 0x0B05, PID 0x1B4C)
  CtrlMgr->>XAC: Instantiate/Attach
  OS->>CtrlMgr: Suspend request
  CtrlMgr->>XAC: Disable()
  OS->>CtrlMgr: Resume request
  CtrlMgr->>XAC: Enable()
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120+ minutes

Possibly related PRs

  • EA to public #1070 — Similar core API shifts (platform enums, controller update flow, gyro/actions plumbing).
  • 0.26.0.2 #1284 — Touches TriggerActions Execute signature and value handling akin to this refactor.
  • 0.27.0.6 #1293 — Updates installer version macro in HandheldCompanion.iss, matching this version bump.

Poem

A rabbit taps with careful paws,
New deltas glide through input laws.
Hotkeys bloom on OEM breeze,
Platforms flag like forest trees.
Gyros spin in tidy arrays,
LEDs blush in sampled rays.
0.28—hip hop, hoorays! 🐇✨

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 0.28.0.0

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1e1b77e and 10dc391.

⛔ Files ignored due to path filters (13)
  • HandheldCompanion/PresentationCore.dll is excluded by !**/*.dll
  • HandheldCompanion/SDL3.dll is excluded by !**/*.dll
  • Resources/GameLib.Core.dll is excluded by !**/*.dll
  • Resources/GameLib.Plugin.BattleNet.dll is excluded by !**/*.dll
  • Resources/GameLib.Plugin.EA.dll is excluded by !**/*.dll
  • Resources/GameLib.Plugin.Epic.dll is excluded by !**/*.dll
  • Resources/GameLib.Plugin.Gog.dll is excluded by !**/*.dll
  • Resources/GameLib.Plugin.Origin.dll is excluded by !**/*.dll
  • Resources/GameLib.Plugin.RiotGames.dll is excluded by !**/*.dll
  • Resources/GameLib.Plugin.Rockstar.dll is excluded by !**/*.dll
  • Resources/GameLib.Plugin.Steam.dll is excluded by !**/*.dll
  • Resources/GameLib.Plugin.Ubisoft.dll is excluded by !**/*.dll
  • Resources/GameLib.dll is excluded by !**/*.dll
📒 Files selected for processing (107)
  • HandheldCompanion.iss (2 hunks)
  • HandheldCompanion/Actions/AxisActions.cs (1 hunks)
  • HandheldCompanion/Actions/ButtonActions.cs (1 hunks)
  • HandheldCompanion/Actions/GyroActions.cs (1 hunks)
  • HandheldCompanion/Actions/IActions.cs (3 hunks)
  • HandheldCompanion/Actions/InheritActions.cs (1 hunks)
  • HandheldCompanion/Actions/KeyboardActions.cs (2 hunks)
  • HandheldCompanion/Actions/MouseActions.cs (5 hunks)
  • HandheldCompanion/Actions/ShiftActions.cs (1 hunks)
  • HandheldCompanion/Actions/TriggerActions.cs (2 hunks)
  • HandheldCompanion/App.config (2 hunks)
  • HandheldCompanion/Commands/FunctionCommands.cs (1 hunks)
  • HandheldCompanion/Commands/Functions/HC/ButtonCommands.cs (1 hunks)
  • HandheldCompanion/Commands/Functions/Multitasking/DesktopCommands.cs (2 hunks)
  • HandheldCompanion/Commands/Functions/Windows/ActionCenterCommands.cs (1 hunks)
  • HandheldCompanion/Commands/Functions/Windows/GameBarCommands.cs (2 hunks)
  • HandheldCompanion/Controllers/Asus/XboxAdaptiveController.cs (1 hunks)
  • HandheldCompanion/Controllers/ControllerState.cs (0 hunks)
  • HandheldCompanion/Controllers/DInputController.cs (3 hunks)
  • HandheldCompanion/Controllers/Dummies/DummyDualShock4Controller.cs (2 hunks)
  • HandheldCompanion/Controllers/Dummies/DummyXbox360Controller.cs (1 hunks)
  • HandheldCompanion/Controllers/Lenovo/LegionControllerS.cs (1 hunks)
  • HandheldCompanion/Controllers/MSI/DClawController.cs (4 hunks)
  • HandheldCompanion/Controllers/SDLController.cs (3 hunks)
  • HandheldCompanion/Controllers/Steam/GordonController.cs (1 hunks)
  • HandheldCompanion/Controllers/Steam/NeptuneController.cs (4 hunks)
  • HandheldCompanion/Controllers/XInputController.cs (1 hunks)
  • HandheldCompanion/DSU/DSUServer.cs (1 hunks)
  • HandheldCompanion/Devices/AOKZOE/AOKZOEA1.cs (2 hunks)
  • HandheldCompanion/Devices/ASUS/AsusACPI.cs (2 hunks)
  • HandheldCompanion/Devices/ASUS/ROGAlly.cs (6 hunks)
  • HandheldCompanion/Devices/AYANEO/AYANEODeviceCEc.cs (2 hunks)
  • HandheldCompanion/Devices/AYANEO/AYANEODeviceCEii.cs (2 hunks)
  • HandheldCompanion/Devices/Ayn/AynLoki.cs (2 hunks)
  • HandheldCompanion/Devices/GPD/GPDWinMax2.cs (2 hunks)
  • HandheldCompanion/Devices/GPD/GPDWinMini-7840U.cs (2 hunks)
  • HandheldCompanion/Devices/IDevice.cs (10 hunks)
  • HandheldCompanion/Devices/Lenovo/LegionGo.cs (3 hunks)
  • HandheldCompanion/Devices/Lenovo/LegionGoSZ1.cs (1 hunks)
  • HandheldCompanion/Devices/Lenovo/LegionGoTablet.cs (1 hunks)
  • HandheldCompanion/Devices/MSI/ClawA1M.cs (11 hunks)
  • HandheldCompanion/Devices/Minisforum/MinisforumV3.cs (1 hunks)
  • HandheldCompanion/Devices/OneXPlayer/OneXPlayer2.cs (2 hunks)
  • HandheldCompanion/Devices/OneXPlayer/OneXPlayerMini.cs (2 hunks)
  • HandheldCompanion/Devices/OneXPlayer/OneXPlayerOneXFly.cs (2 hunks)
  • HandheldCompanion/Devices/OneXPlayer/OneXPlayerX1.cs (2 hunks)
  • HandheldCompanion/Devices/Valve/SteamDeck.cs (2 hunks)
  • HandheldCompanion/Devices/Zotac/GamingZone.cs (6 hunks)
  • HandheldCompanion/HandheldCompanion.csproj (5 hunks)
  • HandheldCompanion/Inputs/AxisFlags.cs (1 hunks)
  • HandheldCompanion/Inputs/AxisState.cs (2 hunks)
  • HandheldCompanion/Inputs/ButtonFlags.cs (1 hunks)
  • HandheldCompanion/Inputs/ButtonState.cs (2 hunks)
  • HandheldCompanion/Inputs/GyroState.cs (2 hunks)
  • HandheldCompanion/Inputs/InputsChord.cs (1 hunks)
  • HandheldCompanion/Managers/ControllerManager.cs (6 hunks)
  • HandheldCompanion/Managers/DynamicLightingManager.cs (11 hunks)
  • HandheldCompanion/Managers/HotkeysManager.cs (6 hunks)
  • HandheldCompanion/Managers/InputsManager.cs (1 hunks)
  • HandheldCompanion/Managers/LayoutManager.cs (16 hunks)
  • HandheldCompanion/Managers/LibraryManager.cs (1 hunks)
  • HandheldCompanion/Managers/MotionManager.cs (5 hunks)
  • HandheldCompanion/Managers/PerformanceManager.cs (0 hunks)
  • HandheldCompanion/Managers/PlatformManager.cs (4 hunks)
  • HandheldCompanion/Managers/PowerProfileManager.cs (1 hunks)
  • HandheldCompanion/Managers/ProcessManager.cs (1 hunks)
  • HandheldCompanion/Managers/ProfileManager.cs (18 hunks)
  • HandheldCompanion/Managers/SystemManager.cs (3 hunks)
  • HandheldCompanion/Misc/Hotkey.cs (3 hunks)
  • HandheldCompanion/Misc/Layout.cs (2 hunks)
  • HandheldCompanion/Misc/ProcessEx.cs (1 hunks)
  • HandheldCompanion/Misc/ProcessWindow.cs (1 hunks)
  • HandheldCompanion/Misc/Profile.cs (1 hunks)
  • HandheldCompanion/Platforms/Games/BattleNet.cs (3 hunks)
  • HandheldCompanion/Platforms/Games/EADesktop.cs (1 hunks)
  • HandheldCompanion/Platforms/Games/Epic.cs (3 hunks)
  • HandheldCompanion/Platforms/Games/GOGGalaxy.cs (3 hunks)
  • HandheldCompanion/Platforms/Games/Origin.cs (3 hunks)
  • HandheldCompanion/Platforms/Games/RiotGames.cs (3 hunks)
  • HandheldCompanion/Platforms/Games/Rockstar.cs (3 hunks)
  • HandheldCompanion/Platforms/Games/Steam.cs (3 hunks)
  • HandheldCompanion/Platforms/Games/UbisoftConnect.cs (3 hunks)
  • HandheldCompanion/Platforms/IPlatform.cs (5 hunks)
  • HandheldCompanion/Platforms/Misc/RTSS.cs (0 hunks)
  • HandheldCompanion/Processors/AMDProcessor.cs (1 hunks)
  • HandheldCompanion/Properties/Resources.Designer.cs (5 hunks)
  • HandheldCompanion/Properties/Resources.de-DE.resx (3 hunks)
  • HandheldCompanion/Properties/Resources.es-ES.resx (3 hunks)
  • HandheldCompanion/Properties/Resources.fr-FR.resx (3 hunks)
  • HandheldCompanion/Properties/Resources.it-IT.resx (3 hunks)
  • HandheldCompanion/Properties/Resources.ja-JP.resx (3 hunks)
  • HandheldCompanion/Properties/Resources.ko-KR.resx (3 hunks)
  • HandheldCompanion/Properties/Resources.pt-BR.resx (2 hunks)
  • HandheldCompanion/Properties/Resources.resx (3 hunks)
  • HandheldCompanion/Properties/Resources.ru-RU.resx (3 hunks)
  • HandheldCompanion/Properties/Resources.zh-Hans.resx (3 hunks)
  • HandheldCompanion/Properties/Resources.zh-Hant.resx (2 hunks)
  • HandheldCompanion/Properties/Settings.Designer.cs (2 hunks)
  • HandheldCompanion/Properties/Settings.settings (2 hunks)
  • HandheldCompanion/SecretKeys.cs (1 hunks)
  • HandheldCompanion/Simulators/KeyboardSimulator.cs (2 hunks)
  • HandheldCompanion/Targets/DualShock4Target.cs (1 hunks)
  • HandheldCompanion/UI/UIGamepad.cs (10 hunks)
  • HandheldCompanion/Utils/InputUtils.cs (1 hunks)
  • HandheldCompanion/Utils/WPFUtils.cs (3 hunks)
  • HandheldCompanion/ViewModels/HotkeyViewModel.cs (2 hunks)
  • HandheldCompanion/ViewModels/Layout/Mappings/AxisMappingViewModel.cs (1 hunks)
⛔ Files not processed due to max files limit (21)
  • HandheldCompanion/ViewModels/Layout/Mappings/ButtonMappingViewModel.cs
  • HandheldCompanion/ViewModels/Layout/Mappings/GyroMappingViewModel.cs
  • HandheldCompanion/ViewModels/Pages/ControllerPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/DevicePageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/LibraryPageViewModel.cs
  • HandheldCompanion/ViewModels/Pages/PerformancePageViewModel.cs
  • HandheldCompanion/ViewModels/ProfileViewModel.cs
  • HandheldCompanion/ViewModels/Windows/OverlayQuickToolsViewModel.cs
  • HandheldCompanion/Views/Pages/ControllerPage.xaml
  • HandheldCompanion/Views/Pages/DevicePage.xaml.cs
  • HandheldCompanion/Views/Pages/LibraryPage.xaml
  • HandheldCompanion/Views/Pages/Profiles/SettingsMode0.xaml.cs
  • HandheldCompanion/Views/Pages/ProfilesPage.xaml.cs
  • HandheldCompanion/Views/QuickPages/QuickApplicationsPage.xaml
  • HandheldCompanion/Views/QuickPages/QuickHomePage.xaml
  • HandheldCompanion/Views/QuickPages/QuickKeyboardPage.xaml.cs
  • HandheldCompanion/Views/QuickPages/QuickProfilesPage.xaml.cs
  • HandheldCompanion/Views/Windows/MainWindow.xaml.cs
  • HandheldCompanion/Views/Windows/OverlayModel.xaml.cs
  • HandheldCompanion/Views/Windows/OverlayQuickTools.xaml.cs
  • Shared/Shared.csproj

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 and usage tips.

@Valkirie Valkirie deleted the 0.28.0.0 branch October 7, 2025 17:16
@coderabbitai coderabbitai bot mentioned this pull request Oct 27, 2025
This was referenced Feb 1, 2026
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.

3 participants