Skip to content

0.28.3.3#1374

Merged
Valkirie merged 555 commits intomainfrom
0.28.3.3
Feb 8, 2026
Merged

0.28.3.3#1374
Valkirie merged 555 commits intomainfrom
0.28.3.3

Conversation

@Valkirie
Copy link
Owner

@Valkirie Valkirie commented Feb 8, 2026

Summary by CodeRabbit

Release Notes

  • New Features

    • Added shift matching modes (strict and OR-based) for action customization.
    • Introduced MoveTo axis behavior for absolute mouse positioning.
    • Added automatic controller slot management with manual override option.
    • Introduced configurable update rate (125–1000 Hz).
    • Enhanced battery charge limit configuration UI.
    • Added layout editor with integrated action settings page.
  • Bug Fixes

    • Improved slot issue detection and reporting for controllers.
  • Chores

    • Updated application to version 0.28.3.3.
    • Standardized virtual controller terminology.
    • Updated controller database and dependencies.

We should move the PlatformToProfile logic to LibraryManager or PlatformManager
Valkirie and others added 27 commits December 26, 2025 15:28
…interval for start delay) (#484)

Signed-off-by: Pedro Parra Ortega <parraortega.pedro@gmail.com>
* feat: improve layout system

* fix: correct inherit and added missing configurations
* temp tests

* more work

* more work

* more work

* more work

* more work

* misc

* More work

* fix

* more work

* more work

* Misc

* Improved SteamGridDb, will now capture official artworks first

* Misc UI tweaks

* Misc fixes

* more work

* more work

* Misc UI

* Misc UI tweaks

* code cleanup

* build 0.28.3.3
@Valkirie Valkirie merged commit 1df6911 into main Feb 8, 2026
1 check failed
@Valkirie Valkirie deleted the 0.28.3.3 branch February 8, 2026 12:40
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 8, 2026

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Walkthrough

The application version is updated from 0.28.3.1 to 0.28.3.3. Changes introduce shift matching flexibility (strict vs OR-based modes), expand controller slot management to support automatic/manual issue detection and remediation, add mouse MoveTo cursor positioning, refactor action execution logic with pattern matching, create new action settings UI infrastructure, update terminology from "emulated" to "virtual controller" across localization, and update package dependencies. Settings keys MainWindowIsPaneOpen and ControllerManagement are replaced with ControllerSlotManagementMode and MasterInterval.

Changes

Cohort / File(s) Summary
Version & Package Updates
HandheldCompanion.iss, HandheldCompanion/HandheldCompanion.csproj
Bumped application version from 0.28.3.1 to 0.28.3.3; updated PixiEditor.ColorPicker (3.4.2 → 3.4.2.1) and SDL3-CS (3.3.3 → 3.3.6) package versions.
Shift Matching System
HandheldCompanion/Actions/IActions.cs
Added ShiftMatchAny field to enable OR-based shift matching (default false for strict equality). Extended IsShiftAllowed signature to accept matchAny parameter; implements OR-mode logic to check if any required shift is active when enabled.
Mouse Action Enhancements
HandheldCompanion/Actions/MouseActions.cs
Introduced ExecuteAxisMoveTo private method to handle MoveTo axis behavior with threshold detection, cursor-down state toggling, and optional previous position storage/restoration when MoveToPrevious is enabled.
Action Execution Refactoring
HandheldCompanion/Managers/LayoutManager.cs
Replaced direct casts with pattern-matching type checks across button, keyboard, mouse, trigger, and joystick mapping paths; adds null-safety guards and prevents invalid casts via conditional execution blocks.
Controller Slot Management
HandheldCompanion/Managers/ControllerManager.cs
Introduced persistent slot monitoring subsystem with SlotMonitorLoop, new ControllerSlotManagementMode enum (Manual/Automatic), HasSlotIssue/SlotIssueReason properties, SlotIssueChanged event, TriggerSlotFix method, and related toast/UI flows for detected issues and manual fixes.
Controller Query Methods
HandheldCompanion/Controllers/IController.cs
Added HasTargetButton and HasTargetAxis helper methods (overloaded) to query presence of buttons/axes in target mappings, mirroring existing HasSourceButton/HasSourceAxis pattern.
Timer & Sensor Management
HandheldCompanion/Managers/TimerManager.cs, HandheldCompanion/Managers/SensorsManager.cs
TimerManager now supports configurable MasterInterval (8/4/2/1) via settings; SensorsManager introduced Suspend method and refactored Resume with USB sensor reopening logic.
Settings Framework Updates
HandheldCompanion/App.config, HandheldCompanion/Properties/Settings.Designer.cs, HandheldCompanion/Properties/Settings.settings
Removed MainWindowIsPaneOpen and ControllerManagement settings; added ControllerSlotManagementMode (int, default 0) and MasterInterval (int, default 0) settings with corresponding designer/settings bindings.
Library & Profile Utilities
HandheldCompanion/Managers/LibraryManager.cs, HandheldCompanion/Managers/ProfileManager.cs, HandheldCompanion/Managers/SettingsManager.cs, HandheldCompanion/Managers/VirtualManager.cs, HandheldCompanion/Misc/Layout.cs, HandheldCompanion/Misc/Profile.cs
LibraryManager now selects Official-style SteamGrid visuals; ProfileManager formatting adjusted; SettingsManager uses null-safe event invocation; VirtualManager toast notifications simplified; Layout.Clone made thread-safe; Profile HID comment updated; VirtualManager toast calls simplified.
Converter Infrastructure
HandheldCompanion/Converters/ActionDisplayConverter.cs, HandheldCompanion/Converters/ActionTypeIndexToNameConverter.cs
Added ActionDisplayConverter (IMultiValueConverter) for "actionType: target" formatting and ActionTypeIndexToNameConverter to map action indices to localized names.
Mapping ViewModels Expansion
HandheldCompanion/ViewModels/Layout/Mappings/MappingViewModel.cs, HandheldCompanion/ViewModels/Layout/Mappings/AxisMappingViewModel.cs, HandheldCompanion/ViewModels/Layout/Mappings/ButtonMappingViewModel.cs, HandheldCompanion/ViewModels/Layout/Mappings/TriggerMappingViewModel.cs
MappingViewModel introduced 40+ virtual properties for UI binding (mouse/axis/trigger deadzone, shift modes, haptic, modifiers). Derived ViewModels override properties with specialized logic; added ParentStack, OpenSettingsCommand for navigation; expanded ShiftModeIndex to 4-state (0=Disabled, 1=Always, 2=Strict, 3=Any).
Mapping Stack ViewModels
HandheldCompanion/ViewModels/Layout/Mappings/AxisStackViewModel.cs, HandheldCompanion/ViewModels/Layout/Mappings/ButtonStackViewModel.cs, HandheldCompanion/ViewModels/Layout/Mappings/TriggerStackViewModel.cs
Added AddMappingAndReturn methods to capture newly created mappings and navigate to LayoutItemPage; ButtonCommand now triggers LayoutItemPage navigation with new mapping setup.
Page ViewModels
HandheldCompanion/ViewModels/Pages/DevicePageViewModel.cs, HandheldCompanion/ViewModels/Pages/ProfilesPageViewModel.cs, HandheldCompanion/ViewModels/ProfileViewModel.cs
DevicePageViewModel reworked battery charge limit UI (BatteryChargeLimit bool + BatteryChargeLimitPercent double); ProfilesPageViewModel added 8 graphics/gyro/accelero properties; ProfileViewModel added OpenLayout command.
Action Settings UI Infrastructure
HandheldCompanion/Views/Pages/ActionSettingsPage.xaml, HandheldCompanion/Views/Pages/ActionSettingsPage.xaml.cs, HandheldCompanion/Views/Pages/LayoutItemPage.xaml, HandheldCompanion/Views/Pages/LayoutItemPage.xaml.cs
New ActionSettingsPage XAML with comprehensive action configuration UI (575 lines); new LayoutItemPage XAML (50 lines) and code-behind (90 lines) for item-level mapping display and settings navigation.
Controller Page Updates
HandheldCompanion/Views/Pages/ControllerPage.xaml, HandheldCompanion/Views/Pages/ControllerPage.xaml.cs
ControllerPage.xaml: TextBlocks replaced with TextBox read-only controls for vibration values. Code-behind: added slot issue detection, UpdateSlotFixButton, ControllerManager_SlotIssueChanged handler; replaced ControllerManagement with ControllerSlotManagementMode settings handling.
Device & Performance Pages
HandheldCompanion/Views/Pages/DevicePage.xaml, HandheldCompanion/Views/Pages/PerformancePage.xaml
DevicePage: BatteryChargeLimit refactored from SettingsCard to SettingsExpander with nested items; dynamic LED brightness TextBox display added. PerformancePage: replaced TextBlock/Label displays with read-only TextBox controls for PL1/PL2/AutoTDP/CPU/GPU values.
Layout & Profile Pages
HandheldCompanion/Views/Pages/LayoutPage.xaml, HandheldCompanion/Views/Pages/LayoutPage.xaml.cs, HandheldCompanion/Views/Pages/ProfilesPage.xaml.cs, HandheldCompanion/Views/Pages/SettingsMode*.xaml
LayoutPage: added disabled L2/R2 navigation markers and separators; code-behind subscribes to ControllerSelected to update glyph displays. ProfilesPage: replaced IsChecked bindings with IsOn; added checkbox handlers for suspend/standby/profile-like toggling. Settings Mode pages: minor XAML formatting consolidation.
Settings & Profile UI
HandheldCompanion/Views/Pages/SettingsPage.xaml, HandheldCompanion/Views/Pages/SettingsPage.xaml.cs, HandheldCompanion/Views/Pages/ProfilesPage.xaml
SettingsPage: added MasterInterval update rate ComboBox (125/250/500/1000 Hz) with SelectionChanged handler. ProfilesPage: minor spacing fix in QuickProfilesPage RSR/RIS format bindings (removed extra space before %).
Main Window UI Overhaul
HandheldCompanion/Views/Windows/MainWindow.xaml, HandheldCompanion/Views/Windows/MainWindow.xaml.cs, HandheldCompanion/Views/Windows/OverlayQuickTools.xaml.cs
MainWindow: increased min size to 1280x720; switched PaneDisplayMode from Left to Top; removed pane-related events; added LayoutItemPage field; refactored gamepad button handlers (Select/Back/Toggle/More); updated About to FooterMenuItems. UIGamepad.cs: expanded multi-scope navigation tracking (window vs page NavigationView) with new helper methods.
Template & Navigation Enhancements
HandheldCompanion/Views/TemplatesDictionary.xaml, HandheldCompanion/Views/UIGamepad.cs
TemplatesDictionary: added ActionTypeIndexToNameConverter and ActionDisplayConverter resources; expanded mapping templates with action name display, settings gear button, and MouseTo/Restore sections. UIGamepad: introduced dual NavigationView references, directional navigation helpers, and page-scoped focus tracking.
Localization Updates
HandheldCompanion/Properties/Resources.Designer.cs, HandheldCompanion/Properties/Resources.resx, HandheldCompanion/Properties/Resources.de-DE.resx, HandheldCompanion/Properties/Resources.es-ES.resx, HandheldCompanion/Properties/Resources.fr-FR.resx, HandheldCompanion/Properties/Resources.it-IT.resx, HandheldCompanion/Properties/Resources.ja-JP.resx, HandheldCompanion/Properties/Resources.ko-KR.resx, HandheldCompanion/Properties/Resources.pt-BR.resx, HandheldCompanion/Properties/Resources.ru-RU.resx, HandheldCompanion/Properties/Resources.zh-Hans.resx, HandheldCompanion/Properties/Resources.zh-Hant.resx
Terminology shift from "emulated controller" to "virtual controller"; added MainWindow_Layout/Play/Toggle, ProfilesPage_LibraryDownload/Settings, ProfilesPage_SharpeningScale, ProfilesPage_WrapperDesc, ProfilesPage_SuspendOnSleepDesc, and description variants; ProfilesPage_Wrapper simplified (removed XInputPlus); ProfilesPage_ControllerLayout renamed to Controller mapping; ControllerPage_ControllerManagement_(Experimental) removed; various regional resources updated consistently.
Device & Configuration
HandheldCompanion/Devices/GPD/GPDWin5.cs, HandheldCompanion/SecretKeys.cs, HandheldCompanion/Localization/StaticExtension.cs, HandheldCompanion/gamecontrollerdb.txt
GPDWin5: custom button mappings replaced with Menu, L4, R4, Gamepad, Keyboard, Home. SecretKeys: populated 4 previously-empty secret fields with credentials. StaticExtension: minor BOM cleanup. gamecontrollerdb.txt: updated source URL and expanded controller mappings (add/remove/correct platform entries).

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant ControllerMgr as ControllerManager
    participant Monitor as SlotMonitor
    participant UI as ToastManager
    participant Fix as SlotFixWatchdog
    participant State as ControllerState

    Note over Monitor,Fix: Automatic Slot Management Flow
    Monitor->>Monitor: SlotMonitorLoop checks slots periodically
    Monitor->>State: Detects issue (occupancy/config problem)
    State->>ControllerMgr: Updates HasSlotIssue & SlotIssueReason
    ControllerMgr->>ControllerMgr: Raises SlotIssueChanged event
    ControllerMgr->>UI: ShowDetectedToast (if not debounced)
    
    alt Manual Mode
        UI-->>User: Prompt: Fix or Ignore?
        User->>UI: Click Fix
        UI->>ControllerMgr: TriggerSlotFix(resetAttempts: true)
    else Automatic Mode
        ControllerMgr->>Fix: Auto-start WatchdogLoop
    end
    
    Fix->>State: Probe & attempt remediation
    Fix->>Monitor: Re-check slot state
    Monitor->>State: Verify fix success
    State->>ControllerMgr: Update HasSlotIssue
    ControllerMgr->>UI: TrySendSlotFixStatusToast (Success/Failed)
    UI-->>User: Notify result
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

The PR spans significant logic changes in controller management (slot detection/fix loops), extensive ViewModel refactoring with new virtual properties and overrides, new action settings UI infrastructure, and widespread localization updates. While localization changes are repetitive, the heterogeneous nature of feature additions (slot management, shift matching, MoveTo, UI overhaul) and logic density in managers and ViewModels demand careful per-area reasoning.

Possibly related PRs

  • feat: correct shift logic and add support for shift combiantions #1352: Directly related via shift matching mode overhauls and ShiftModeIndex/ShiftA-D property refactoring across mapping ViewModels and IActions shift-matching logic.
  • 0.28.0.0 #1302: Related through action system refactoring (IsShiftAllowed signature, pattern-matched action execution in LayoutManager) and shift handling modifications.
  • 0.26.0.2 #1284: Related through expanded controller management subsystem, ControllerManager lifecycle changes, and new slot management/issue detection features.

Poem

🐰 A rabbit hops through shifts now flexing,
OR-matching modes and MoveTo vexing,
Slots auto-managed with toast in the air,
Virtual controllers everywhere, everywhere!
Settings stack high, versions ascend,
This refactor's one hop around the bend. 🎮

✨ 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.3.3

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.

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.

4 participants