tahamajs's picture
download
raw
103 kB
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidLayouts">
<shared>
<config />
</shared>
<layouts>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/avd_phone_flat_to_vertical.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/badge_new.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bg_bottom_nav.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bg_card_gradient.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bg_card_outline.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bg_coach.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bg_header.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bg_input.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bg_instruction.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bg_mini_indicator.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bg_touchpad_gradient.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/bottom_bar_gradient.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/btn_rounded_danger.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/btn_small_dark.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/circle_bg.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/circle_green.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/green_square.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_accessibility.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_air_mouse.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_air_mouse_background.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_air_mouse_pro_ultra.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_battery.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_click.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_close.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_connect.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_disconnected.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_edge_gestures.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_green_dot.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_help_gesture.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_help_network.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_home.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_log.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_notifications.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_phone.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_play.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_profile.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_proximity.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_qr_scanner.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_refresh.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_right_click.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_sensor.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_timer.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_voice.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/ic_wifi.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/status_badge.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/drawable/thumb_accent.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/activity_calibration.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/activity_calibration_compose.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/activity_gesture_studio.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/activity_main.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/activity_onboarding.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/activity_webview.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/debug_overlay.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/dialog_settings.xml">
<config>
<theme>@style/Theme.AppCompat.Light.DarkActionBar</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_about.xml">
<config>
<theme>@style/Theme.AppCompat.Light.DarkActionBar</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_accel_step.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_accessibility.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_battery.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_calibration.xml">
<config>
<theme>@style/Theme.AppCompat.Light.DarkActionBar</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_custom_gesture.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_edge_gestures.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_gesture_studio.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_gyro_step.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_help.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_home.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_mag_step.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_network_discovery.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_profiles.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_proximity.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_proximity_settings.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_sensor_visualizer.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_server_log.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_settings.xml">
<config>
<theme>@style/Theme.AppCompat.Light.DarkActionBar</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_statistics.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_themes.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_touchpad.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/fragment_voice_commands.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/item_onboarding.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/nav_header.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/progress_dialog.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/layout/view_edge_gesture.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/bottom_nav_menu.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/calibration_menu.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/drawer_menu.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/main_menu.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/nav_menu.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/menu/options_menu.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/navigation/bottom_nav_menu.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/navigation/nav_graph.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/navigation/nav_menu.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
<layout url="file://$PROJECT_DIR$/app/src/main/res/xml/preferences.xml">
<config>
<theme>@style/Theme.AirMouse</theme>
</config>
</layout>
</layouts>
</component>
<component name="AutoImportSettings">
<option name="autoReloadType" value="NONE" />
</component>
<component name="ChangeListManager">
<list default="true" id="dbb45723-6c2e-4617-97a9-1ccefe06dab5" name="Changes" comment="feat: implement gaming profiles and enhance server status visibility&#10;&#10;- **Backend (Go)**:&#10; - Add API endpoints `/api/gaming/profiles` and `/api/gaming/activate` to manage gameplay configurations.&#10; - Expand WebSocket command handler to support `game_action` and `game_button` types.&#10; - Implement comprehensive input mapping for gaming actions, translating mobile triggers into system mouse clicks and key taps (e.g., WASD for movement, Shift for sprint, Space for jump/handbrake).&#10; - Define default profiles for FPS, Racing, and RPG genres with specific control schemes.&#10;- **Android**:&#10; - **Home Screen**: Add a server architecture information card displaying active ports (TCP 9090, WS 9091, UDP 9092/9093, REST 8081) and engine version.&#10; - **Help Screen**: Enhance walkthrough navigation with directional slide-and-fade transitions between tabs.">
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/airmouse/presentation/ui/calibration/CalibrationScreen.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/airmouse/presentation/ui/calibration/CalibrationScreen.kt" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/airmouse/presentation/ui/home/HomeScreen.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/airmouse/presentation/ui/home/HomeScreen.kt" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/airmouse/presentation/ui/onboarding/OnboardingItem.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/airmouse/presentation/ui/onboarding/OnboardingItem.kt" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/airmouse/sensors/SensorService.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/airmouse/sensors/SensorService.kt" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ClangdSettings">
<option name="formatViaClangd" value="false" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="device_and_snapshot_combo_box_target[]" />
<component name="ExternalProjectsData">
<projectState path="$PROJECT_DIR$">
<ProjectState />
</projectState>
</component>
<component name="ExternalProjectsManager">
<system id="GRADLE">
<state>
<projects_view>
<tree_state>
<expand>
<path>
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
<item name="AirMouse" type="f1a62948:ProjectNode" />
</path>
</expand>
<select />
</tree_state>
</projects_view>
</state>
</system>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="layoutResourceFile" />
<option value="Kotlin File" />
<option value="Class" />
<option value="layoutResourceFile_vertical" />
<option value="resourceFile" />
<option value="Kotlin Class" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$PROJECT_DIR$/app/src/main/res/layout/activity_main.xml" root0="FORCE_HIGHLIGHTING" />
</component>
<component name="ProblemsViewState">
<option name="proportion" value="0.6656" />
<option name="selectedTabId" value="CurrentFile" />
<option name="showPreview" value="true" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 7
}</component>
<component name="ProjectId" id="3EEu6P9AnxaHlad7AzYGbKSPBf8" />
<component name="ProjectLevelVcsManager">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;ASKED_SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
&quot;Android App.app.executor&quot;: &quot;Run&quot;,
&quot;Gradle.Configure Daemon JVM Criteria.executor&quot;: &quot;Run&quot;,
&quot;Gradle.Download Sources.executor&quot;: &quot;Run&quot;,
&quot;Gradle.Upgrade Gradle wrapper.executor&quot;: &quot;Run&quot;,
&quot;GradleDaemonJvmCriteriaMigrationNotification.isNotificationDisabled&quot;: &quot;true&quot;,
&quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252&quot;: &quot;true&quot;,
&quot;RunOnceActivity.cidr.known.project.marker&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;RunOnceActivity.readMode.enableVisualFormatting&quot;: &quot;true&quot;,
&quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
&quot;SHELLCHECK.PATH&quot;: &quot;/Users/tahamajs/Library/Application Support/Google/AndroidStudio2025.3.1/plugins/Shell Script/shellcheck&quot;,
&quot;cf.first.check.clang-format&quot;: &quot;false&quot;,
&quot;cidr.known.project.marker&quot;: &quot;true&quot;,
&quot;com.google.services.firebase.aqiPopupShown&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;main&quot;,
&quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;/Users/tahamajs/Documents/uni/CPS/Files/ComputerAssignments/CA2/code/android&quot;,
&quot;memory.settings.postsync.last.time.stamp&quot;: &quot;1779857548592&quot;,
&quot;project.structure.last.edited&quot;: &quot;Modules&quot;,
&quot;project.structure.proportion&quot;: &quot;0.17&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;,
&quot;show.do.not.copy.http.proxy.settings.to.gradle&quot;: &quot;true&quot;
}
}</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/app/src/main/java/com/airmouse/presentation/ui/gesture" />
<recent name="$PROJECT_DIR$/docs" />
<recent name="$PROJECT_DIR$" />
<recent name="$PROJECT_DIR$/app/src/main/res/navigation" />
</key>
<key name="K2MoveDeclarationsDialog.RECENT_PACKAGE_KEY">
<recent name="com.airmouse.data.datasource.local.entity" />
<recent name="com.airmouse.data.datasource.local.interfaces" />
<recent name="com.airmouse.data.datasource.local.implementations" />
<recent name="com.airmouse.di" />
<recent name="com.airmouse.domain.model" />
</key>
<key name="android.template.869602143">
<recent name="com.airmouse" />
</key>
</component>
<component name="RunManager">
<configuration name="app" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="AirMouse.app" />
<option name="ANDROID_RUN_CONFIGURATION_SCHEMA_VERSION" value="1" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="ALLOW_ASSUME_VERIFIED" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="RESTORE_ENABLED" value="false" />
<option name="RESTORE_FILE" value="" />
<option name="RESTORE_FRESH_INSTALL_ONLY" value="false" />
<option name="CLEAR_LOGCAT" value="false" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Hybrid>
<Java>
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Java>
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY" value="" />
<option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
<component name="SvnConfiguration">
<configuration>$USER_HOME$/.subversion</configuration>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="dbb45723-6c2e-4617-97a9-1ccefe06dab5" name="Changes" comment="" />
<created>1779755874586</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1779755874586</updated>
</task>
<task id="LOCAL-00884" summary="fix: resolve syntax error in SensorVisualizerScreen.kt&#10;&#10;- Add missing closing brace to fix a nesting issue in the `SensorVisualizerScreen` composable.">
<option name="closed" value="true" />
<created>1782955622878</created>
<option name="number" value="00884" />
<option name="presentableId" value="LOCAL-00884" />
<option name="project" value="LOCAL" />
<updated>1782955622879</updated>
</task>
<task id="LOCAL-00885" summary="fix: resolve syntax error in SensorVisualizerScreen.kt&#10;&#10;- Add missing closing brace to fix a nesting issue in the `SensorVisualizerScreen` composable.">
<option name="closed" value="true" />
<created>1782955640264</created>
<option name="number" value="00885" />
<option name="presentableId" value="LOCAL-00885" />
<option name="project" value="LOCAL" />
<updated>1782955640264</updated>
</task>
<task id="LOCAL-00886" summary="style(ui): update AnimatedContent transition syntax in StatisticsScreen&#10;&#10;- Add parentheses to slide and fade animation combinations to clarify operator precedence for the `togetherWith` operator.&#10;- Apply these changes to the duration, total actions, and metric value counters.">
<option name="closed" value="true" />
<created>1782955737286</created>
<option name="number" value="00886" />
<option name="presentableId" value="LOCAL-00886" />
<option name="project" value="LOCAL" />
<updated>1782955737288</updated>
</task>
<task id="LOCAL-00887" summary="style: remove trailing slash in SensorVisualizerScreen.kt">
<option name="closed" value="true" />
<created>1782955758482</created>
<option name="number" value="00887" />
<option name="presentableId" value="LOCAL-00887" />
<option name="project" value="LOCAL" />
<updated>1782955758482</updated>
</task>
<task id="LOCAL-00888" summary="fix(ui): remove trailing closing brace in `SensorVisualizerScreen.kt`&#10;&#10;- Remove an extraneous closing brace at the end of the file.">
<option name="closed" value="true" />
<created>1782955808099</created>
<option name="number" value="00888" />
<option name="presentableId" value="LOCAL-00888" />
<option name="project" value="LOCAL" />
<updated>1782955808103</updated>
</task>
<task id="LOCAL-00889" summary="feat(web): add gaming mode with steering and shooter controls&#10;&#10;- Add a new &quot;Gaming Mode&quot; page to the web interface featuring a steering wheel simulator and FPS controls.&#10;- Implement visual feedback for steering animations and button presses in `app.js`.&#10;- Add keyboard shortcuts ('A', 'D', 'Space', 'R') to trigger gaming commands when the gaming page is active.&#10;- Update `syscmd_darwin.go` to map gaming commands (`steer_left`, `steer_right`, `shoot`, `reload`) to native macOS keystrokes.">
<option name="closed" value="true" />
<created>1782955911125</created>
<option name="number" value="00889" />
<option name="presentableId" value="LOCAL-00889" />
<option name="project" value="LOCAL" />
<updated>1782955911130</updated>
</task>
<task id="LOCAL-00890" summary="refactor(ui): simplify sensor selection click handling in `SensorVisualizerScreen`&#10;&#10;- Clean up the `Modifier` chain by replacing the manual `Modifier.run` block with a standard `.clickable` call.&#10;- Remove redundant intermediate variables for the click modifier.&#10;- Update imports to include `Stroke` and `clickable`.">
<option name="closed" value="true" />
<created>1782956341775</created>
<option name="number" value="00890" />
<option name="presentableId" value="LOCAL-00890" />
<option name="project" value="LOCAL" />
<updated>1782956341775</updated>
</task>
<task id="LOCAL-00891" summary="feat(control/internal/web): enhance screen mirroring with multi-display support and implement live performance monitoring&#10;&#10;- **Core/CLI**: Implement new system commands for Linux and Windows, including volume control, media playback, fullscreen toggling, and gaming inputs (steer, shoot, reload).&#10;- **Backend**:&#10; - Add native display management and high-performance screen capture using `kbinani/screenshot`.&#10; - Enhance the WebSocket mirror server to support dynamic parameters for FPS, scaling, quality presets, and display selection.&#10; - Implement an API endpoint (`/api/displays`) to list active monitors and their properties.&#10; - Expand server statistics to include total packet and byte counts.&#10;- **Frontend**:&#10; - Replace the static activity monitor with a dynamic `Chart.js` performance chart tracking latency, packet frequency, and interaction rates.&#10; - Redesign the Screen Mirroring interface with a side panel for real-time stream settings (display, quality presets, FPS, and scale).&#10; - Enhance the Gaming Simulation UI with a responsive steering wheel animation and additional command bindings.&#10; - Add presentation page keyboard shortcuts for media and navigation.">
<option name="closed" value="true" />
<created>1782956384599</created>
<option name="number" value="00891" />
<option name="presentableId" value="LOCAL-00891" />
<option name="project" value="LOCAL" />
<updated>1782956384603</updated>
</task>
<task id="LOCAL-00892" summary="refactor(presentation): refine mouse control activation and orientation logic&#10;&#10;- Update `onOrientationChanged` to verify both connection status and mouse control enablement before processing sensor data.&#10;- Refactor volume key handling to toggle `connectionManager.isMouseControlEnabled` based on the active movement source (touchpad vs. gyro).&#10;- Simplify orientation channel communication by moving the connection check to the initial sensor event filter.">
<option name="closed" value="true" />
<created>1782956778211</created>
<option name="number" value="00892" />
<option name="presentableId" value="LOCAL-00892" />
<option name="project" value="LOCAL" />
<updated>1782956778237</updated>
</task>
<task id="LOCAL-00893" summary="ui(presentation): enhance UI with custom components and improve touchpad state handling&#10;&#10;- Replace standard `CircularProgressIndicator` with `SweepGradientGlowRing` in `BluetoothMouseScreen`.&#10;- Replace standard `LinearProgressIndicator` with `GlassmorphicNeonProgressBar` in `BatteryScreen`, updating color logic and formatting.&#10;- Update `TouchpadScreen` to display a &quot;Transmission Paused&quot; state with a `SensorsOff` icon when mouse control is disabled.&#10;- Refine `TouchpadViewModel` logic to prevent processing touch events, taps, and long presses when mouse control is disabled.">
<option name="closed" value="true" />
<created>1782962877658</created>
<option name="number" value="00893" />
<option name="presentableId" value="LOCAL-00893" />
<option name="project" value="LOCAL" />
<updated>1782962877661</updated>
</task>
<task id="LOCAL-00894" summary="fix(sensors): improve orientation smoothing by handling angle wrap-around&#10;&#10;- Update `SensorService` to calculate the shortest angular delta for pitch and yaw filtering, preventing artifacts at the 0/360-degree boundary.&#10;- Normalize both the deltas and the final filtered values to the [-180, 180] degree range.&#10;- Apply consistent wrap-around logic to both the Madgwick filter and direct orientation update paths.">
<option name="closed" value="true" />
<created>1782963620922</created>
<option name="number" value="00894" />
<option name="presentableId" value="LOCAL-00894" />
<option name="project" value="LOCAL" />
<updated>1782963620924</updated>
</task>
<task id="LOCAL-00895" summary="fix(presentation): refine orientation delta calculations and increase jump threshold&#10;&#10;- Implement modular arithmetic and wrapping for yaw and pitch deltas to correctly handle 0/360-degree boundary crossings.&#10;- Increase the jump suppression threshold from 50 to 90 degrees to allow for more rapid legitimate movement while still filtering extreme noise.">
<option name="closed" value="true" />
<created>1782963793898</created>
<option name="number" value="00895" />
<option name="presentableId" value="LOCAL-00895" />
<option name="project" value="LOCAL" />
<updated>1782963793901</updated>
</task>
<task id="LOCAL-00896" summary="test(app): implement phase-wrapping logic for orientation tracking and add unit tests&#10;&#10;- Update `MainActivity` to correctly handle angle wrap-around (e.g., transitioning from 179° to -179°) when calculating yaw and pitch deltas.&#10;- Adjust the anomaly filter threshold from 50° to 90° to allow for faster legitimate movements while still filtering extreme noise.&#10;- Add `AngleMathTest` to validate the shortest delta calculation logic, covering normal rotation, phase wraps, and full rotations.">
<option name="closed" value="true" />
<created>1782963814080</created>
<option name="number" value="00896" />
<option name="presentableId" value="LOCAL-00896" />
<option name="project" value="LOCAL" />
<updated>1782963814084</updated>
</task>
<task id="LOCAL-00897" summary="build: remove manual JUnitPlatform configuration from app module&#10;&#10;- Remove explicit `useJUnitPlatform()` configuration in `build.gradle`.&#10;- Revert to using the default Android test runner.">
<option name="closed" value="true" />
<created>1782963828146</created>
<option name="number" value="00897" />
<option name="presentableId" value="LOCAL-00897" />
<option name="project" value="LOCAL" />
<updated>1782963828146</updated>
</task>
<task id="LOCAL-00898" summary="test: add unit tests for ConnectionManager and SensorService&#10;&#10;- Implement `ConnectionManagerTest` to verify protocol switching, mouse control toggling, and Bluetooth HID report generation.&#10;- Implement `SensorServiceTest` to validate sensor lifecycle management, sampling rate configuration, and device stability detection logic.&#10;- Utilize MockK and Robolectric to mock Android hardware services, including `SensorManager`, `BluetoothAdapter`, and `PreferencesManager`.&#10;- Add test coverage for simulated mouse movement and click events across different connection protocols.">
<option name="closed" value="true" />
<created>1782964236438</created>
<option name="number" value="00898" />
<option name="presentableId" value="LOCAL-00898" />
<option name="project" value="LOCAL" />
<updated>1782964236450</updated>
</task>
<task id="LOCAL-00899" summary="test: implement unit and instrumented tests for Home and Touchpad modules&#10;&#10;- Add `NavigationFlowTest` to verify navigation transitions from the Home screen to the Touchpad module.&#10;- Add `TouchpadScreenTest` to validate UI state rendering based on connection and mouse control status.&#10;- Implement `TouchpadViewModelTest` to cover connection state observation, event handling for presets, and sensitivity updates.&#10;- Implement `HomeViewModelTest` to test air mouse toggling, network configuration updates, and preference management logic.">
<option name="closed" value="true" />
<created>1782964428313</created>
<option name="number" value="00899" />
<option name="presentableId" value="LOCAL-00899" />
<option name="project" value="LOCAL" />
<updated>1782964428320</updated>
</task>
<task id="LOCAL-00900" summary="feat(web): implement touchpad simulator, gesture studio, and calibration modules&#10;&#10;- **Backend**: Fix a routing loop in the WebSocket server by manually serving `index.html` from the embedded filesystem instead of using `http.FileServer`.&#10;- **Touchpad Simulator**: Add a virtual touchpad interface that translates mouse interactions into movement, click, and scroll commands sent via WebSocket.&#10;- **Gesture Studio**:&#10; - Implement a gesture recording interface with real-time waveform visualization.&#10; - Add a simulated training workflow to optimize gesture recognition confidence.&#10; - Implement a gesture mapping system to bind specific patterns (e.g., swipes, circles, hand signs) to system actions like media control and window management.&#10;- **Voice &amp; Calibration**:&#10; - Add a voice command manager to send text-based triggers to the host.&#10; - Implement a calibration center to calculate and display sensor bias offsets for gyroscopes and accelerometers.">
<option name="closed" value="true" />
<created>1782965518429</created>
<option name="number" value="00900" />
<option name="presentableId" value="LOCAL-00900" />
<option name="project" value="LOCAL" />
<updated>1782965518430</updated>
</task>
<task id="LOCAL-00901" summary="test: refactor unit tests for improved type matching and state initialization&#10;&#10;- **SensorServiceTest**: Enhance Mockk verifications by specifying explicit class types for `SensorEventListener`, `Int`, and `Handler` parameters in `registerListener` and `unregisterListener` calls.&#10;- **HomeViewModelTest**:&#10; - Update the `ConnectionQuality` mock flow to use the refactored type from the `network` package.&#10; - Refactor `PresentationState` and `TransferState` mock flows to use default constructors instead of static idle state references.">
<option name="closed" value="true" />
<created>1782965565171</created>
<option name="number" value="00901" />
<option name="presentableId" value="LOCAL-00901" />
<option name="project" value="LOCAL" />
<updated>1782965565171</updated>
</task>
<task id="LOCAL-00902" summary="fix(web): remove redundant closing brace in `app.js`&#10;&#10;- Remove a stray closing brace in `app.js` to fix a syntax error in the device management section.">
<option name="closed" value="true" />
<created>1782965863677</created>
<option name="number" value="00902" />
<option name="presentableId" value="LOCAL-00902" />
<option name="project" value="LOCAL" />
<updated>1782965863677</updated>
</task>
<task id="LOCAL-00903" summary="docs(web): update connection guide with new default port numbers&#10;&#10;- Update the setup instructions in `index.html` to reflect the new default ports: `9091` for WebSockets, `9090` for TCP, and `9092` for UDP.&#10;- Update the troubleshooting section to recommend checking firewalls for the new port range (9090-9092).">
<option name="closed" value="true" />
<created>1782966506778</created>
<option name="number" value="00903" />
<option name="presentableId" value="LOCAL-00903" />
<option name="project" value="LOCAL" />
<updated>1782966506779</updated>
</task>
<task id="LOCAL-00904" summary="feat: refine sensor calibration, gesture detection, and network reliability&#10;&#10;- **Sensors &amp; Gestures**:&#10; - Update `GestureDetector` to use a higher click speed threshold (30 deg/s) and implement yaw-based click detection with rad/s to deg/s conversion.&#10; - Reduce required samples for calibration: Gyro (1000 to 100) and Magnetometer (500 to 200) in `CalibrationHelper`.&#10; - Adjust `MadgwickAHRS` beta value from `0.1f` to `0.041f` for smoother filtering.&#10; - Improve `SensorFusion` gyroscope input handling to conditionally convert degrees to radians.&#10; - Add `android.os.Trace` sections to `SensorService` for performance profiling of sensor reads, filtering, and communication.&#10;- **Networking**:&#10; - Update default ports: TCP to `9090` and WebSockets to `9091`.&#10; - Tighten retransmission and timeout parameters: `RETRANSMIT_INTERVAL_MS` to 500ms, `MAX_RETRANSMIT_ATTEMPTS` to 3, and `ACK_TIMEOUT_MS` to 500ms.&#10;- **Testing &amp; Tooling**:&#10; - Migrate unit tests to `RobolectricTestRunner` for better Android environment simulation.&#10; - Refactor `HomeViewModelTest` to fix mocking of context and preferences.&#10; - Clean up redundant assertions and mocks in `BatterySaverTest` and `HomeViewModelTest`.&#10; - Update `gradle.properties` with a specific `org.gradle.java.home` path.">
<option name="closed" value="true" />
<created>1785028731849</created>
<option name="number" value="00904" />
<option name="presentableId" value="LOCAL-00904" />
<option name="project" value="LOCAL" />
<updated>1785028731849</updated>
</task>
<task id="LOCAL-00905" summary="feat(pc): update default ports, implement movement filtering, and improve server stability&#10;&#10;- **Network**: Standardize default communication ports across Go and Python implementations to `9090` (TCP), `9091` (WebSocket), and `9092` (UDP/Discovery).&#10;- **Mouse Control**:&#10; - Implement a 1D Kalman Filter and a moving average Tremor Filter to reduce jitter and micro-shakes in cursor movement.&#10; - Update `MouseController` to apply these filters to movement deltas.&#10;- **Server Core**:&#10; - **Go**: Add mutex locking when accessing client properties in the TCP server to prevent race conditions during device lookups.&#10; - **Python**: Increase the connection watchdog timeout from 10 seconds to 60 seconds for improved connection stability.&#10;- **Tooling**: Update the `compute_delta` tracepoint in the Perfetto analyzer to target gesture detection events.">
<option name="closed" value="true" />
<created>1785028747520</created>
<option name="number" value="00905" />
<option name="presentableId" value="LOCAL-00905" />
<option name="project" value="LOCAL" />
<updated>1785028747520</updated>
</task>
<task id="LOCAL-00906" summary="feat(android): implement calibration wizard, onboarding flow, and core UI fragments&#10;&#10;- **Calibration**: &#10; - Add `CalibrationActivity` and `CalibrationPagerAdapter` to manage the calibration process.&#10; - Implement specialized fragments for sensor calibration: `AccelCalibrationFragment`, `GyroCalibrationFragment`, and `MagCalibrationFragment`.&#10;- **UI &amp; Navigation**:&#10; - Add `OnboardingActivity` to handle first-time user setup and persistent completion state.&#10; - Implement `HomeFragment` with `ConnectionManager` and `SensorService` integration.&#10; - Add fragments for `Profiles`, `VoiceCommands`, and `ServerLog` to expand application functionality.&#10;- **Testing**: Add a Python-based integration simulator (`test_android_integration_sim.py`) to verify the network protocol, including handshakes, sensor data streaming, and ACK-based retransmission.&#10;- **Infrastructure**: Integrate Dagger Hilt for dependency injection across all new activities and fragments.">
<option name="closed" value="true" />
<created>1785028765977</created>
<option name="number" value="00906" />
<option name="presentableId" value="LOCAL-00906" />
<option name="project" value="LOCAL" />
<updated>1785028765977</updated>
</task>
<task id="LOCAL-00907" summary="feat(pc): implement Go-based MCP server and comprehensive test suite for AirMouse&#10;&#10;- **MCP Server (Go)**:&#10; - Implement a new Model Context Protocol (MCP) server in Go to bridge LLM tools with the AirMouse system.&#10; - Add tools for mouse movement, clicking (left, right, double), scrolling, and system control commands.&#10; - Integrate with the existing PC server via TCP (port 9090) and Admin HTTP API (port 8081).&#10; - Support real-time configuration updates and server statistics retrieval via MCP tools.&#10;- **Testing &amp; Quality Assurance**:&#10; - Add `test_all_protocols_live.py` and `test_full_system.py` to verify UDP discovery and TCP protocol handshakes.&#10; - Implement `test_e2e.py` for end-to-end simulation of Android sensor data to PC cursor movement.&#10; - Add `test_mcp_server.py` to validate hook normalization, response formatting, and configuration defaults.&#10; - Add Go unit tests for mouse movement smoothing in `internal/mouse/smoothing_test.go`.&#10; - Include `coverage.out` and binary build artifacts for the Go implementation.&#10;- **Performance &amp; Diagnostics**:&#10; - Add `perfetto_queries.sql` containing SQL queries for analyzing sensor latency, CPU time in filter functions, and thread contention using Perfetto traces.&#10; - Add `airmouse.log` for initial service activity tracking.">
<option name="closed" value="true" />
<created>1785028793431</created>
<option name="number" value="00907" />
<option name="presentableId" value="LOCAL-00907" />
<option name="project" value="LOCAL" />
<updated>1785028793431</updated>
</task>
<task id="LOCAL-00908" summary="build: upgrade Java toolchain to version 17 and adjust SDK versions&#10;&#10;- **Project-wide**: Upgrade Java `sourceCompatibility`, `targetCompatibility`, and `jvmTarget` from 11 to 17 across modules.&#10;- **Network Module**: Downgrade `compileSdk` from 36 to 34.&#10;- **App Module**: &#10; - Explicitly configure `jvmToolchain(17)`.&#10; - Clean up `build.gradle` by removing redundant comments and whitespace.&#10; - Remove a commented-out local module dependency.&#10;- **Gradle**: Comment out the hardcoded `org.gradle.java.home` in `gradle.properties` to improve compatibility with local environments and IDEs.">
<option name="closed" value="true" />
<created>1785030186516</created>
<option name="number" value="00908" />
<option name="presentableId" value="LOCAL-00908" />
<option name="project" value="LOCAL" />
<updated>1785030186518</updated>
</task>
<task id="LOCAL-00909" summary="refactor(tcp): enhance client auto-approval logic and simplify message acknowledgments&#10;&#10;- **Client Approval**:&#10; - Update `autoApproveTCPClient` to permit connections automatically if `AuthEnabled` is disabled in the configuration.&#10; - Implement a fallback to use `client.ID` if the device fingerprint is missing.&#10; - Make device manager registration optional during approval to handle cases where the manager is not initialized.&#10; - Add a secondary auto-approval check within the message handler to validate clients based on authentication settings or IP trust.&#10;- **Protocol &amp; Messaging**:&#10; - Simplify acknowledgment logic to send an ACK for any incoming message containing an ID, removing the specific command type whitelist.&#10; - Update logging to reflect general auto-approval status rather than strictly &quot;trusted&quot; status.">
<option name="closed" value="true" />
<created>1785030284215</created>
<option name="number" value="00909" />
<option name="presentableId" value="LOCAL-00909" />
<option name="project" value="LOCAL" />
<updated>1785030284226</updated>
</task>
<task id="LOCAL-00910" summary="fix(android): replace non-breaking hyphen with standard hyphen in settings dialog&#10;&#10;- Update the &quot;Right-Click Tilt Angle&quot; text in `dialog_settings.xml` to use a standard hyphen instead of a non-breaking hyphen.&#10;- Update `airmouse-server` binary.">
<option name="closed" value="true" />
<created>1785030841719</created>
<option name="number" value="00910" />
<option name="presentableId" value="LOCAL-00910" />
<option name="project" value="LOCAL" />
<updated>1785030841730</updated>
</task>
<task id="LOCAL-00911" summary="feat: add monitoring API endpoints and update Android build configuration&#10;&#10;- **Backend**:&#10; - Implement new API handlers for `/api/status`, `/api/qrcode`, `/api/gestures`, and `/api/logs`.&#10; - Provide server metadata, uptime, and client connection counts via the status endpoint.&#10; - Expose connection strings and authentication tokens for QR code generation.&#10; - Add endpoints to retrieve configured gesture mappings and server logs.&#10;- **Android**: Configure the network module to use JVM toolchain 17 in `build.gradle`.">
<option name="closed" value="true" />
<created>1785031166994</created>
<option name="number" value="00911" />
<option name="presentableId" value="LOCAL-00911" />
<option name="project" value="LOCAL" />
<updated>1785031167105</updated>
</task>
<task id="LOCAL-00912" summary="feat: implement core UI components, onboarding flow, and sensor calibration wizard&#10;&#10;- **UI/Fragments**:&#10; - Implement `HomeFragment` with server connection controls (IP/Port), sensitivity adjustment, and real-time usage statistics.&#10; - Implement `ProfilesFragment` to allow saving, loading, and deleting custom sensitivity and threshold profiles.&#10; - Implement `VoiceCommandFragment` using Android's speech recognition to trigger mouse actions (click, scroll, media controls).&#10; - Implement `ServerLogFragment` with a RecyclerView to monitor system status, connection protocols, and filter activity.&#10; - Implement `OnboardingActivity` with a ViewPager2-based carousel to introduce app features to new users.&#10; - Update `nav_graph.xml` with comprehensive routing for all feature fragments and activities.&#10;&#10;- **Calibration**:&#10; - Implement `CalibrationActivity` using a tabbed ViewPager2 interface to guide users through sensor setup.&#10; - Add `GyroCalibrationFragment` with a stationary sample collection routine and variance monitoring.&#10; - Add `AccelCalibrationFragment` featuring a guided 6-position (least-squares) calibration process.&#10; - Add `MagCalibrationFragment` with a figure-8 movement requirement and sphere-fitting visualization.&#10;&#10;- **Visualizations &amp; Resources**:&#10; - Enhance `GraphCanvas` to support real-time 3-axis (X, Y, Z) waveform rendering for sensor data.&#10; - Refactor `strings.xml` and `colors.xml` to simplify brand resources and improve theme consistency.&#10; - Update `themes.xml` with Material3 support and a dedicated splash screen theme.&#10; - Register new activities in `AndroidManifest.xml`.">
<option name="closed" value="true" />
<created>1785033311857</created>
<option name="number" value="00912" />
<option name="presentableId" value="LOCAL-00912" />
<option name="project" value="LOCAL" />
<updated>1785033311881</updated>
</task>
<task id="LOCAL-00913" summary="refactor: update default server and discovery port numbers&#10;&#10;Update default ports across the application to avoid potential conflicts with common services. The new defaults are `9090` for TCP, `9091` for WebSockets, `9092` for discovery, and `9093` for UDP.&#10;&#10;- **Constants**: Update `AppConstants`, `Constants`, and `MessageTypes` with the new port range (9090-9093).&#10;- **Network &amp; Discovery**:&#10; - Update `UdpDiscovery` and `NetworkDiscoveryViewModel` to use `9092` for discovery and `9093` for UDP scanning.&#10; - Adjust fallback and protocol detection logic in `WebSocketManager` and `WebSocketDataSourceImpl` to reflect the new defaults.&#10;- **Preferences &amp; Models**: Update default port values in `UserPreferencesSystem`, `PreferencesDataSourceImpl`, `AppPreferences`, and `ConnectionModels`.&#10;- **UI &amp; Help**:&#10; - Update help documentation, troubleshooting guides, and walkthroughs in `SearchViewModel`, `AirMouseHelpScreen.md`, and `HelpViewModel`.&#10; - Refresh UI placeholders and sample logs in `HomeScreen`, `AirMouseNetworkDiscoveryScreen.md`, and `ServerLogsViewModel`.&#10;- **Utilities**: Update QR code parsing logic and validation defaults in `QRScanner` and `ValidationUtils`.">
<option name="closed" value="true" />
<created>1785033377659</created>
<option name="number" value="00913" />
<option name="presentableId" value="LOCAL-00913" />
<option name="project" value="LOCAL" />
<updated>1785033377663</updated>
</task>
<task id="LOCAL-00914" summary="feat: update default communication ports and implement dedicated UDP discovery&#10;&#10;- **Core**: Update default port numbers across the project:&#10; - TCP: `8080` -&gt; `9090`&#10; - WebSockets: `8081` -&gt; `9091`&#10; - UDP Streaming: `8082` -&gt; `9093`&#10; - UDP Discovery: `8083` -&gt; `9092`&#10;- **Backend (Go)**:&#10; - Implement a dedicated `discoveryLoop` in the UDP server to handle discovery requests on a separate port.&#10; - Add a REST Admin API listener on port `8081`.&#10; - Fix a test case in TCP integration tests to support environments with auto-approval enabled.&#10; - Clean up unused event listeners in jitter buffer tests.&#10;- **Android**:&#10; - Synchronize all default port constants and validation logic with the new port range.&#10; - Update UI components (Home, Search, Network Discovery, Help) and documentation (Markdown files) to reflect the new port defaults.&#10; - Enhance network discovery logic to scan the expanded port range (`9090-9093`).&#10; - Update QR code parsing and URI generation to support the new UDP and WebSocket port defaults.&#10;- **Docs**: Update connection guides and troubleshooting instructions regarding firewall rules for the new `9090-9093` port range.">
<option name="closed" value="true" />
<created>1785033461044</created>
<option name="number" value="00914" />
<option name="presentableId" value="LOCAL-00914" />
<option name="project" value="LOCAL" />
<updated>1785033461046</updated>
</task>
<task id="LOCAL-00915" summary="feat(android): implement UI fragments for control, settings, and network discovery&#10;&#10;- **Navigation &amp; Controls**:&#10; - Add `TouchpadFragment` with a virtual surface supporting single tap (click), double tap, long press (right click), and two-finger scroll.&#10; - Implement `GestureStudioFragment` for recording and exporting gesture datasets to CSV.&#10;- **Settings &amp; Configuration**:&#10; - Add `SettingsFragment` with comprehensive controls for sensitivity, thresholds (click, scroll, tilt), smoothing, and AI-based prediction.&#10; - Implement `ThemesFragment` and theme selection in settings with support for multiple presets (Dark, Light, High Contrast, etc.).&#10; - Implement `ProximityFragment` to manage distance-based service activation and calibration.&#10;- **Network &amp; System**:&#10; - Add `NetworkDiscoveryFragment` to scan the local network for servers via UDP.&#10; - Implement `BatteryFragment` for real-time monitoring of battery level and temperature.&#10; - Add `StatisticsFragment` to track gesture counts and session activity.&#10; - Add `HelpFragment` with an accordion-style guide and `AboutFragment` for version information.&#10;- **Resources**:&#10; - Add a suite of vector drawables for phone orientation states, status indicators, and UI feedback.&#10; - Provide a utility script (`replace_ports.py`) to automate port range migration (8080-8082 to 9090-9093).">
<option name="closed" value="true" />
<created>1785033655137</created>
<option name="number" value="00915" />
<option name="presentableId" value="LOCAL-00915" />
<option name="project" value="LOCAL" />
<updated>1785033655140</updated>
</task>
<task id="LOCAL-00916" summary="refactor(android): implement view binding in `SettingsFragment` and expand resource definitions&#10;&#10;- **SettingsFragment**: &#10; - Migrated from manual view lookups to `FragmentSettingsBinding`.&#10; - Refactored `setupViews` into modular `setupSliders` and `setupToggles` placeholders.&#10; - Added `syncConfigToServer` using `lifecycleScope` for future settings synchronization.&#10; - Simplified fragment lifecycle by cleaning up binding in `onDestroyView`.&#10;- **Resources**:&#10; - **Strings**: Added a comprehensive set of string resources for calibration, onboarding, help center, about screen, and various settings categories.&#10; - **Colors**: Defined a broad palette of functional colors (primary, error, success, surface variants) and onboarding background colors.&#10; - **Styles**: Added `ShapeAppearanceOverlay.App.CornerSize50Percent` and updated status bar color mapping in the base theme.&#10;- **Build**: Disabled KSP incremental builds in `gradle.properties` to address potential build issues.">
<option name="closed" value="true" />
<created>1785034494986</created>
<option name="number" value="00916" />
<option name="presentableId" value="LOCAL-00916" />
<option name="project" value="LOCAL" />
<updated>1785034494991</updated>
</task>
<task id="LOCAL-00917" summary="refactor(android): implement view binding in `SettingsFragment` and expand resource definitions&#10;&#10;- **SettingsFragment**: &#10; - Migrated from manual view lookups to `FragmentSettingsBinding`.&#10; - Refactored `setupViews` into modular `setupSliders` and `setupToggles` placeholders.&#10; - Added `syncConfigToServer` using `lifecycleScope` for future settings synchronization.&#10; - Simplified fragment lifecycle by cleaning up binding in `onDestroyView`.&#10;- **Resources**:&#10; - **Strings**: Added a comprehensive set of string resources for calibration, onboarding, help center, about screen, and various settings categories.&#10; - **Colors**: Defined a broad palette of functional colors (primary, error, success, surface variants) and onboarding background colors.&#10; - **Styles**: Added `ShapeAppearanceOverlay.App.CornerSize50Percent` and updated status bar color mapping in the base theme.&#10;- **Build**: Disabled KSP incremental builds in `gradle.properties` to address potential build issues.">
<option name="closed" value="true" />
<created>1785070940004</created>
<option name="number" value="00917" />
<option name="presentableId" value="LOCAL-00917" />
<option name="project" value="LOCAL" />
<updated>1785070940006</updated>
</task>
<task id="LOCAL-00918" summary="refactor(android): implement view binding in `SettingsFragment` and expand resource definitions&#10;&#10;- **SettingsFragment**: &#10; - Migrated from manual view lookups to `FragmentSettingsBinding`.&#10; - Refactored `setupViews` into modular `setupSliders` and `setupToggles` placeholders.&#10; - Added `syncConfigToServer` using `lifecycleScope` for future settings synchronization.&#10; - Simplified fragment lifecycle by cleaning up binding in `onDestroyView`.&#10;- **Resources**:&#10; - **Strings**: Added a comprehensive set of string resources for calibration, onboarding, help center, about screen, and various settings categories.&#10; - **Colors**: Defined a broad palette of functional colors (primary, error, success, surface variants) and onboarding background colors.&#10; - **Styles**: Added `ShapeAppearanceOverlay.App.CornerSize50Percent` and updated status bar color mapping in the base theme.&#10;- **Build**: Disabled KSP incremental builds in `gradle.properties` to address potential build issues.">
<option name="closed" value="true" />
<created>1785070977739</created>
<option name="number" value="00918" />
<option name="presentableId" value="LOCAL-00918" />
<option name="project" value="LOCAL" />
<updated>1785070977743</updated>
</task>
<task id="LOCAL-00919" summary="refactor(android): implement view binding in `SettingsFragment` and expand resource definitions&#10;&#10;- **SettingsFragment**: &#10; - Migrated from manual view lookups to `FragmentSettingsBinding`.&#10; - Refactored `setupViews` into modular `setupSliders` and `setupToggles` placeholders.&#10; - Added `syncConfigToServer` using `lifecycleScope` for future settings synchronization.&#10; - Simplified fragment lifecycle by cleaning up binding in `onDestroyView`.&#10;- **Resources**:&#10; - **Strings**: Added a comprehensive set of string resources for calibration, onboarding, help center, about screen, and various settings categories.&#10; - **Colors**: Defined a broad palette of functional colors (primary, error, success, surface variants) and onboarding background colors.&#10; - **Styles**: Added `ShapeAppearanceOverlay.App.CornerSize50Percent` and updated status bar color mapping in the base theme.&#10;- **Build**: Disabled KSP incremental builds in `gradle.properties` to address potential build issues.">
<option name="closed" value="true" />
<created>1785077147381</created>
<option name="number" value="00919" />
<option name="presentableId" value="LOCAL-00919" />
<option name="project" value="LOCAL" />
<updated>1785077147414</updated>
</task>
<task id="LOCAL-00920" summary="perf(android): enable hardware acceleration and reorder manifest attributes&#10;&#10;- Enable `android:hardwareAccelerated` in `AndroidManifest.xml` to improve UI rendering performance.&#10;- Reorder the `android:largeHeap` attribute within the `&lt;application&gt;` tag.">
<option name="closed" value="true" />
<created>1785077732318</created>
<option name="number" value="00920" />
<option name="presentableId" value="LOCAL-00920" />
<option name="project" value="LOCAL" />
<updated>1785077732320</updated>
</task>
<task id="LOCAL-00921" summary="feat: implement server approval flow, mouse control synchronization, and enhanced connection UI&#10;&#10;- **Network/Connection**:&#10; - Add support for a `pending_approval` status during the server handshake, introducing a new `PENDING_APPROVAL` connection state.&#10; - Synchronize mouse control state with the server by sending control packets whenever `isMouseControlEnabled` is toggled.&#10; - Expand `TYPE_CONTROL` message handling to support additional action strings: `pause_movement`, `resume_movement`, `enable`, and `disable`.&#10; - Update welcome message handling to support both `TYPE_WELCOME` and `approved` event types.&#10;- **UI/UX**:&#10; - Add dynamic status banners to the `HomeScreen` to indicate &quot;CONNECTED&quot; (green) and &quot;CONNECTING&quot; (orange) states with protocol details.&#10; - Update the connection protocol selection UI to label UDP as &quot;UDP (⚡ Auto-Best)&quot;.&#10; - Improve logging for mouse control state transitions and server communication.">
<option name="closed" value="true" />
<created>1785077855552</created>
<option name="number" value="00921" />
<option name="presentableId" value="LOCAL-00921" />
<option name="project" value="LOCAL" />
<updated>1785077855552</updated>
</task>
<task id="LOCAL-00922" summary="feat(android): refine sensor calibration parameters and quality thresholds&#10;&#10;- Increase sample requirements for gyroscope, magnetometer, and accelerometer to improve data accuracy.&#10;- Extend magnetometer calibration duration and increase accelerometer tolerance levels.&#10;- Relax variance thresholds for calibration quality levels (`EXCELLENT`, `GOOD`, `FAIR`) to better reflect real-world sensor stability.">
<option name="closed" value="true" />
<created>1785078659939</created>
<option name="number" value="00922" />
<option name="presentableId" value="LOCAL-00922" />
<option name="project" value="LOCAL" />
<updated>1785078659939</updated>
</task>
<task id="LOCAL-00923" summary="chore: update server binary and remove obsolete static assets&#10;&#10;- Update the `airmouse-server` binary executable.&#10;- Delete legacy minified JavaScript (`index-cSV8B-Pl.js`) and CSS (`index-DGH602ge.css`) files from the `web/static` directory.">
<option name="closed" value="true" />
<created>1785078925852</created>
<option name="number" value="00923" />
<option name="presentableId" value="LOCAL-00923" />
<option name="project" value="LOCAL" />
<updated>1785078925852</updated>
</task>
<task id="LOCAL-00924" summary="feat: implement web dashboard v2.0 and cross-platform desktop notifications&#10;&#10;- **Web UI**: Deploy a completely redesigned React-based dashboard with a modern dark theme and modular architecture.&#10; - **Dashboard**: Add live telemetry and frequency curves using `recharts` to track latency and interaction rates.&#10; - **Device Management**: Implement a full device lifecycle workflow including discovery, authorization requests (approve/reject), and detailed hardware/traffic statistics.&#10; - **Gesture Studio**: Add a custom gesture recording interface with waveform visualization and a simulated LSTM neural network training workflow.&#10; - **Modules**: Implement new pages for Voice Command simulation, Screen Mirroring (multi-display support), Presentation/Media controls, and Gaming presets.&#10; - **File Transfer**: Add a chunked HTTP upload manager and directory browser.&#10; - **Infrastructure**: Integrate global state management with `react-query` and a custom toast notification system.&#10;- **Backend**: Implement a new Go package `internal/notification` to dispatch native desktop alerts on macOS (osascript), Linux (notify-send), and Windows (PowerShell).&#10;- **Build**: Add `airmouse-mcp-go` executable entry points.">
<option name="closed" value="true" />
<created>1785079213551</created>
<option name="number" value="00924" />
<option name="presentableId" value="LOCAL-00924" />
<option name="project" value="LOCAL" />
<updated>1785079213552</updated>
</task>
<task id="LOCAL-00925" summary="feat(android): implement real-time preference updates for sensor and gesture settings&#10;&#10;- **SensorService**:&#10; - Add a `SharedPreferences.OnSharedPreferenceChangeListener` to reactively update gesture thresholds and gyroscope offsets when settings are modified.&#10; - Register the listener during initialization and implement a `destroy()` method to unregister it.&#10;- **PreferencesManager**: Add utility methods to register and unregister preference change listeners.">
<option name="closed" value="true" />
<created>1785079358605</created>
<option name="number" value="00925" />
<option name="presentableId" value="LOCAL-00925" />
<option name="project" value="LOCAL" />
<updated>1785079358607</updated>
</task>
<task id="LOCAL-00926" summary="fix(app): add missing `GestureType` import in `GestureDataSourceImpl.kt`">
<option name="closed" value="true" />
<created>1785079449503</created>
<option name="number" value="00926" />
<option name="presentableId" value="LOCAL-00926" />
<option name="project" value="LOCAL" />
<updated>1785079449507</updated>
</task>
<task id="LOCAL-00927" summary="refactor: simplify connection status notifications by canceling all instead of showing error/disconnected states&#10;&#10;- **NotificationManager**: Update `showDisconnectedNotification` to cancel all active notifications instead of posting a &quot;Disconnected&quot; message.&#10;- **HomeViewModel**:&#10; - Update the `DISCONNECTED` state handler to cancel all notifications via the manager.&#10; - Update the `ERROR` state handler to cancel all notifications instead of showing a specific connection error notification.">
<option name="closed" value="true" />
<created>1785079635765</created>
<option name="number" value="00927" />
<option name="presentableId" value="LOCAL-00927" />
<option name="project" value="LOCAL" />
<updated>1785079635765</updated>
</task>
<task id="LOCAL-00928" summary="feat(ui): add new navigation links to HomeScreen dropdown menu&#10;&#10;- Add dropdown menu items for Settings, Touchpad, Profiles, Gaming Mode, Voice Commands, Edge Gestures, Proximity Control, File Transfer, Server Logs, and Themes.&#10;- Map each new menu item to its corresponding route in `Destinations`.">
<option name="closed" value="true" />
<created>1785079726350</created>
<option name="number" value="00928" />
<option name="presentableId" value="LOCAL-00928" />
<option name="project" value="LOCAL" />
<updated>1785079726350</updated>
</task>
<task id="LOCAL-00929" summary="feat(android): add scroll gesture support and refine calibration and home UI&#10;&#10;- **Gesture System**: Add `SCROLL` to `GestureType` enum and suppress lint warnings for unused parameters in detector classes.&#10;- **UI - Calibration**: &#10; - Implement a scrollable layout for the calibration steps.&#10; - Add a fixed bottom action bar with a semi-transparent background.&#10; - Update button styling and labels (e.g., &quot;Record Position&quot; instead of &quot;Capture Pos&quot;).&#10;- **UI - Home**: Enhance `QuickActionButton` with a circular icon container, updated heights, and refined typography.&#10;- **Sensor Service**: Consolidate cleanup logic into the `destroy()` method, ensuring preferences are unregistered and threads are stopped correctly.&#10;- **Code Cleanup**: Remove unused delta time calculations and motion threshold variables in `HomeViewModel`.">
<option name="closed" value="true" />
<created>1785082063221</created>
<option name="number" value="00929" />
<option name="presentableId" value="LOCAL-00929" />
<option name="project" value="LOCAL" />
<updated>1785082063222</updated>
</task>
<task id="LOCAL-00930" summary="docs: add comprehensive architecture and module documentation&#10;&#10;- **Android**: Add READMEs for sensor fusion (Madgwick AHRS), network protocols (TCP/UDP/WS), gesture detection, and specialized UI modules including Calibration, Gaming, and Touchpad.&#10;- **PC Server**: Document Go-based backend internals, including motion control algorithms (Kalman prediction, adaptive smoothing), device management, and native OS input simulation.&#10;- **Web UI**: Add documentation for the React dashboard, detailing the glassmorphism design system and real-time telemetry components.">
<option name="closed" value="true" />
<created>1785082084241</created>
<option name="number" value="00930" />
<option name="presentableId" value="LOCAL-00930" />
<option name="project" value="LOCAL" />
<updated>1785082084245</updated>
</task>
<task id="LOCAL-00931" summary="feat: implement interactive dashboard tour and revamp Android onboarding&#10;&#10;- **Web UI**:&#10; - Add `InteractiveTourModal` component to provide a multi-step guided walkthrough of dashboard features.&#10; - Integrate the tour into the main layout with auto-launch logic for first-time visitors using `localStorage`.&#10; - Add a &quot;Tour&quot; action button to the header with updated styling.&#10; - Update production build assets in `index.html`.&#10;- **Android**:&#10; - Overhaul onboarding screen content in `OnboardingItem.kt` to provide detailed technical descriptions of 3D Air Mouse mode, Touchpad mode, and Gaming profiles.&#10; - Add specific feature highlights to onboarding items, including Madgwick AHRS details, gesture lists, and proximity security specs.&#10; - Update accent colors and icons across the onboarding flow.">
<option name="closed" value="true" />
<created>1785082654703</created>
<option name="number" value="00931" />
<option name="presentableId" value="LOCAL-00931" />
<option name="project" value="LOCAL" />
<updated>1785082654707</updated>
</task>
<task id="LOCAL-00932" summary="feat: implement gaming profiles and enhance server status visibility&#10;&#10;- **Backend (Go)**:&#10; - Add API endpoints `/api/gaming/profiles` and `/api/gaming/activate` to manage gameplay configurations.&#10; - Expand WebSocket command handler to support `game_action` and `game_button` types.&#10; - Implement comprehensive input mapping for gaming actions, translating mobile triggers into system mouse clicks and key taps (e.g., WASD for movement, Shift for sprint, Space for jump/handbrake).&#10; - Define default profiles for FPS, Racing, and RPG genres with specific control schemes.&#10;- **Android**:&#10; - **Home Screen**: Add a server architecture information card displaying active ports (TCP 9090, WS 9091, UDP 9092/9093, REST 8081) and engine version.&#10; - **Help Screen**: Enhance walkthrough navigation with directional slide-and-fade transitions between tabs.">
<option name="closed" value="true" />
<created>1785083145872</created>
<option name="number" value="00932" />
<option name="presentableId" value="LOCAL-00932" />
<option name="project" value="LOCAL" />
<updated>1785083145872</updated>
</task>
<option name="localTasksCounter" value="933" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State>
<option name="FILTERS">
<map>
<entry key="branch">
<value>
<list>
<option value="main" />
</list>
</value>
</entry>
</map>
</option>
</State>
</value>
</entry>
</map>
</option>
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="feat(pc): update default ports, implement movement filtering, and improve server stability&#10;&#10;- **Network**: Standardize default communication ports across Go and Python implementations to `9090` (TCP), `9091` (WebSocket), and `9092` (UDP/Discovery).&#10;- **Mouse Control**:&#10; - Implement a 1D Kalman Filter and a moving average Tremor Filter to reduce jitter and micro-shakes in cursor movement.&#10; - Update `MouseController` to apply these filters to movement deltas.&#10;- **Server Core**:&#10; - **Go**: Add mutex locking when accessing client properties in the TCP server to prevent race conditions during device lookups.&#10; - **Python**: Increase the connection watchdog timeout from 10 seconds to 60 seconds for improved connection stability.&#10;- **Tooling**: Update the `compute_delta` tracepoint in the Perfetto analyzer to target gesture detection events." />
<MESSAGE value="feat(android): implement calibration wizard, onboarding flow, and core UI fragments&#10;&#10;- **Calibration**: &#10; - Add `CalibrationActivity` and `CalibrationPagerAdapter` to manage the calibration process.&#10; - Implement specialized fragments for sensor calibration: `AccelCalibrationFragment`, `GyroCalibrationFragment`, and `MagCalibrationFragment`.&#10;- **UI &amp; Navigation**:&#10; - Add `OnboardingActivity` to handle first-time user setup and persistent completion state.&#10; - Implement `HomeFragment` with `ConnectionManager` and `SensorService` integration.&#10; - Add fragments for `Profiles`, `VoiceCommands`, and `ServerLog` to expand application functionality.&#10;- **Testing**: Add a Python-based integration simulator (`test_android_integration_sim.py`) to verify the network protocol, including handshakes, sensor data streaming, and ACK-based retransmission.&#10;- **Infrastructure**: Integrate Dagger Hilt for dependency injection across all new activities and fragments." />
<MESSAGE value="feat(pc): implement Go-based MCP server and comprehensive test suite for AirMouse&#10;&#10;- **MCP Server (Go)**:&#10; - Implement a new Model Context Protocol (MCP) server in Go to bridge LLM tools with the AirMouse system.&#10; - Add tools for mouse movement, clicking (left, right, double), scrolling, and system control commands.&#10; - Integrate with the existing PC server via TCP (port 9090) and Admin HTTP API (port 8081).&#10; - Support real-time configuration updates and server statistics retrieval via MCP tools.&#10;- **Testing &amp; Quality Assurance**:&#10; - Add `test_all_protocols_live.py` and `test_full_system.py` to verify UDP discovery and TCP protocol handshakes.&#10; - Implement `test_e2e.py` for end-to-end simulation of Android sensor data to PC cursor movement.&#10; - Add `test_mcp_server.py` to validate hook normalization, response formatting, and configuration defaults.&#10; - Add Go unit tests for mouse movement smoothing in `internal/mouse/smoothing_test.go`.&#10; - Include `coverage.out` and binary build artifacts for the Go implementation.&#10;- **Performance &amp; Diagnostics**:&#10; - Add `perfetto_queries.sql` containing SQL queries for analyzing sensor latency, CPU time in filter functions, and thread contention using Perfetto traces.&#10; - Add `airmouse.log` for initial service activity tracking." />
<MESSAGE value="build: upgrade Java toolchain to version 17 and adjust SDK versions&#10;&#10;- **Project-wide**: Upgrade Java `sourceCompatibility`, `targetCompatibility`, and `jvmTarget` from 11 to 17 across modules.&#10;- **Network Module**: Downgrade `compileSdk` from 36 to 34.&#10;- **App Module**: &#10; - Explicitly configure `jvmToolchain(17)`.&#10; - Clean up `build.gradle` by removing redundant comments and whitespace.&#10; - Remove a commented-out local module dependency.&#10;- **Gradle**: Comment out the hardcoded `org.gradle.java.home` in `gradle.properties` to improve compatibility with local environments and IDEs." />
<MESSAGE value="refactor(tcp): enhance client auto-approval logic and simplify message acknowledgments&#10;&#10;- **Client Approval**:&#10; - Update `autoApproveTCPClient` to permit connections automatically if `AuthEnabled` is disabled in the configuration.&#10; - Implement a fallback to use `client.ID` if the device fingerprint is missing.&#10; - Make device manager registration optional during approval to handle cases where the manager is not initialized.&#10; - Add a secondary auto-approval check within the message handler to validate clients based on authentication settings or IP trust.&#10;- **Protocol &amp; Messaging**:&#10; - Simplify acknowledgment logic to send an ACK for any incoming message containing an ID, removing the specific command type whitelist.&#10; - Update logging to reflect general auto-approval status rather than strictly &quot;trusted&quot; status." />
<MESSAGE value="fix(android): replace non-breaking hyphen with standard hyphen in settings dialog&#10;&#10;- Update the &quot;Right-Click Tilt Angle&quot; text in `dialog_settings.xml` to use a standard hyphen instead of a non-breaking hyphen.&#10;- Update `airmouse-server` binary." />
<MESSAGE value="feat: add monitoring API endpoints and update Android build configuration&#10;&#10;- **Backend**:&#10; - Implement new API handlers for `/api/status`, `/api/qrcode`, `/api/gestures`, and `/api/logs`.&#10; - Provide server metadata, uptime, and client connection counts via the status endpoint.&#10; - Expose connection strings and authentication tokens for QR code generation.&#10; - Add endpoints to retrieve configured gesture mappings and server logs.&#10;- **Android**: Configure the network module to use JVM toolchain 17 in `build.gradle`." />
<MESSAGE value="feat: implement core UI components, onboarding flow, and sensor calibration wizard&#10;&#10;- **UI/Fragments**:&#10; - Implement `HomeFragment` with server connection controls (IP/Port), sensitivity adjustment, and real-time usage statistics.&#10; - Implement `ProfilesFragment` to allow saving, loading, and deleting custom sensitivity and threshold profiles.&#10; - Implement `VoiceCommandFragment` using Android's speech recognition to trigger mouse actions (click, scroll, media controls).&#10; - Implement `ServerLogFragment` with a RecyclerView to monitor system status, connection protocols, and filter activity.&#10; - Implement `OnboardingActivity` with a ViewPager2-based carousel to introduce app features to new users.&#10; - Update `nav_graph.xml` with comprehensive routing for all feature fragments and activities.&#10;&#10;- **Calibration**:&#10; - Implement `CalibrationActivity` using a tabbed ViewPager2 interface to guide users through sensor setup.&#10; - Add `GyroCalibrationFragment` with a stationary sample collection routine and variance monitoring.&#10; - Add `AccelCalibrationFragment` featuring a guided 6-position (least-squares) calibration process.&#10; - Add `MagCalibrationFragment` with a figure-8 movement requirement and sphere-fitting visualization.&#10;&#10;- **Visualizations &amp; Resources**:&#10; - Enhance `GraphCanvas` to support real-time 3-axis (X, Y, Z) waveform rendering for sensor data.&#10; - Refactor `strings.xml` and `colors.xml` to simplify brand resources and improve theme consistency.&#10; - Update `themes.xml` with Material3 support and a dedicated splash screen theme.&#10; - Register new activities in `AndroidManifest.xml`." />
<MESSAGE value="refactor: update default server and discovery port numbers&#10;&#10;Update default ports across the application to avoid potential conflicts with common services. The new defaults are `9090` for TCP, `9091` for WebSockets, `9092` for discovery, and `9093` for UDP.&#10;&#10;- **Constants**: Update `AppConstants`, `Constants`, and `MessageTypes` with the new port range (9090-9093).&#10;- **Network &amp; Discovery**:&#10; - Update `UdpDiscovery` and `NetworkDiscoveryViewModel` to use `9092` for discovery and `9093` for UDP scanning.&#10; - Adjust fallback and protocol detection logic in `WebSocketManager` and `WebSocketDataSourceImpl` to reflect the new defaults.&#10;- **Preferences &amp; Models**: Update default port values in `UserPreferencesSystem`, `PreferencesDataSourceImpl`, `AppPreferences`, and `ConnectionModels`.&#10;- **UI &amp; Help**:&#10; - Update help documentation, troubleshooting guides, and walkthroughs in `SearchViewModel`, `AirMouseHelpScreen.md`, and `HelpViewModel`.&#10; - Refresh UI placeholders and sample logs in `HomeScreen`, `AirMouseNetworkDiscoveryScreen.md`, and `ServerLogsViewModel`.&#10;- **Utilities**: Update QR code parsing logic and validation defaults in `QRScanner` and `ValidationUtils`." />
<MESSAGE value="feat: update default communication ports and implement dedicated UDP discovery&#10;&#10;- **Core**: Update default port numbers across the project:&#10; - TCP: `8080` -&gt; `9090`&#10; - WebSockets: `8081` -&gt; `9091`&#10; - UDP Streaming: `8082` -&gt; `9093`&#10; - UDP Discovery: `8083` -&gt; `9092`&#10;- **Backend (Go)**:&#10; - Implement a dedicated `discoveryLoop` in the UDP server to handle discovery requests on a separate port.&#10; - Add a REST Admin API listener on port `8081`.&#10; - Fix a test case in TCP integration tests to support environments with auto-approval enabled.&#10; - Clean up unused event listeners in jitter buffer tests.&#10;- **Android**:&#10; - Synchronize all default port constants and validation logic with the new port range.&#10; - Update UI components (Home, Search, Network Discovery, Help) and documentation (Markdown files) to reflect the new port defaults.&#10; - Enhance network discovery logic to scan the expanded port range (`9090-9093`).&#10; - Update QR code parsing and URI generation to support the new UDP and WebSocket port defaults.&#10;- **Docs**: Update connection guides and troubleshooting instructions regarding firewall rules for the new `9090-9093` port range." />
<MESSAGE value="feat(android): implement UI fragments for control, settings, and network discovery&#10;&#10;- **Navigation &amp; Controls**:&#10; - Add `TouchpadFragment` with a virtual surface supporting single tap (click), double tap, long press (right click), and two-finger scroll.&#10; - Implement `GestureStudioFragment` for recording and exporting gesture datasets to CSV.&#10;- **Settings &amp; Configuration**:&#10; - Add `SettingsFragment` with comprehensive controls for sensitivity, thresholds (click, scroll, tilt), smoothing, and AI-based prediction.&#10; - Implement `ThemesFragment` and theme selection in settings with support for multiple presets (Dark, Light, High Contrast, etc.).&#10; - Implement `ProximityFragment` to manage distance-based service activation and calibration.&#10;- **Network &amp; System**:&#10; - Add `NetworkDiscoveryFragment` to scan the local network for servers via UDP.&#10; - Implement `BatteryFragment` for real-time monitoring of battery level and temperature.&#10; - Add `StatisticsFragment` to track gesture counts and session activity.&#10; - Add `HelpFragment` with an accordion-style guide and `AboutFragment` for version information.&#10;- **Resources**:&#10; - Add a suite of vector drawables for phone orientation states, status indicators, and UI feedback.&#10; - Provide a utility script (`replace_ports.py`) to automate port range migration (8080-8082 to 9090-9093)." />
<MESSAGE value="refactor(android): implement view binding in `SettingsFragment` and expand resource definitions&#10;&#10;- **SettingsFragment**: &#10; - Migrated from manual view lookups to `FragmentSettingsBinding`.&#10; - Refactored `setupViews` into modular `setupSliders` and `setupToggles` placeholders.&#10; - Added `syncConfigToServer` using `lifecycleScope` for future settings synchronization.&#10; - Simplified fragment lifecycle by cleaning up binding in `onDestroyView`.&#10;- **Resources**:&#10; - **Strings**: Added a comprehensive set of string resources for calibration, onboarding, help center, about screen, and various settings categories.&#10; - **Colors**: Defined a broad palette of functional colors (primary, error, success, surface variants) and onboarding background colors.&#10; - **Styles**: Added `ShapeAppearanceOverlay.App.CornerSize50Percent` and updated status bar color mapping in the base theme.&#10;- **Build**: Disabled KSP incremental builds in `gradle.properties` to address potential build issues." />
<MESSAGE value="perf(android): enable hardware acceleration and reorder manifest attributes&#10;&#10;- Enable `android:hardwareAccelerated` in `AndroidManifest.xml` to improve UI rendering performance.&#10;- Reorder the `android:largeHeap` attribute within the `&lt;application&gt;` tag." />
<MESSAGE value="feat: implement server approval flow, mouse control synchronization, and enhanced connection UI&#10;&#10;- **Network/Connection**:&#10; - Add support for a `pending_approval` status during the server handshake, introducing a new `PENDING_APPROVAL` connection state.&#10; - Synchronize mouse control state with the server by sending control packets whenever `isMouseControlEnabled` is toggled.&#10; - Expand `TYPE_CONTROL` message handling to support additional action strings: `pause_movement`, `resume_movement`, `enable`, and `disable`.&#10; - Update welcome message handling to support both `TYPE_WELCOME` and `approved` event types.&#10;- **UI/UX**:&#10; - Add dynamic status banners to the `HomeScreen` to indicate &quot;CONNECTED&quot; (green) and &quot;CONNECTING&quot; (orange) states with protocol details.&#10; - Update the connection protocol selection UI to label UDP as &quot;UDP (⚡ Auto-Best)&quot;.&#10; - Improve logging for mouse control state transitions and server communication." />
<MESSAGE value="feat(android): refine sensor calibration parameters and quality thresholds&#10;&#10;- Increase sample requirements for gyroscope, magnetometer, and accelerometer to improve data accuracy.&#10;- Extend magnetometer calibration duration and increase accelerometer tolerance levels.&#10;- Relax variance thresholds for calibration quality levels (`EXCELLENT`, `GOOD`, `FAIR`) to better reflect real-world sensor stability." />
<MESSAGE value="chore: update server binary and remove obsolete static assets&#10;&#10;- Update the `airmouse-server` binary executable.&#10;- Delete legacy minified JavaScript (`index-cSV8B-Pl.js`) and CSS (`index-DGH602ge.css`) files from the `web/static` directory." />
<MESSAGE value="feat: implement web dashboard v2.0 and cross-platform desktop notifications&#10;&#10;- **Web UI**: Deploy a completely redesigned React-based dashboard with a modern dark theme and modular architecture.&#10; - **Dashboard**: Add live telemetry and frequency curves using `recharts` to track latency and interaction rates.&#10; - **Device Management**: Implement a full device lifecycle workflow including discovery, authorization requests (approve/reject), and detailed hardware/traffic statistics.&#10; - **Gesture Studio**: Add a custom gesture recording interface with waveform visualization and a simulated LSTM neural network training workflow.&#10; - **Modules**: Implement new pages for Voice Command simulation, Screen Mirroring (multi-display support), Presentation/Media controls, and Gaming presets.&#10; - **File Transfer**: Add a chunked HTTP upload manager and directory browser.&#10; - **Infrastructure**: Integrate global state management with `react-query` and a custom toast notification system.&#10;- **Backend**: Implement a new Go package `internal/notification` to dispatch native desktop alerts on macOS (osascript), Linux (notify-send), and Windows (PowerShell).&#10;- **Build**: Add `airmouse-mcp-go` executable entry points." />
<MESSAGE value="feat(android): implement real-time preference updates for sensor and gesture settings&#10;&#10;- **SensorService**:&#10; - Add a `SharedPreferences.OnSharedPreferenceChangeListener` to reactively update gesture thresholds and gyroscope offsets when settings are modified.&#10; - Register the listener during initialization and implement a `destroy()` method to unregister it.&#10;- **PreferencesManager**: Add utility methods to register and unregister preference change listeners." />
<MESSAGE value="fix(app): add missing `GestureType` import in `GestureDataSourceImpl.kt`" />
<MESSAGE value="refactor: simplify connection status notifications by canceling all instead of showing error/disconnected states&#10;&#10;- **NotificationManager**: Update `showDisconnectedNotification` to cancel all active notifications instead of posting a &quot;Disconnected&quot; message.&#10;- **HomeViewModel**:&#10; - Update the `DISCONNECTED` state handler to cancel all notifications via the manager.&#10; - Update the `ERROR` state handler to cancel all notifications instead of showing a specific connection error notification." />
<MESSAGE value="feat(ui): add new navigation links to HomeScreen dropdown menu&#10;&#10;- Add dropdown menu items for Settings, Touchpad, Profiles, Gaming Mode, Voice Commands, Edge Gestures, Proximity Control, File Transfer, Server Logs, and Themes.&#10;- Map each new menu item to its corresponding route in `Destinations`." />
<MESSAGE value="feat(android): add scroll gesture support and refine calibration and home UI&#10;&#10;- **Gesture System**: Add `SCROLL` to `GestureType` enum and suppress lint warnings for unused parameters in detector classes.&#10;- **UI - Calibration**: &#10; - Implement a scrollable layout for the calibration steps.&#10; - Add a fixed bottom action bar with a semi-transparent background.&#10; - Update button styling and labels (e.g., &quot;Record Position&quot; instead of &quot;Capture Pos&quot;).&#10;- **UI - Home**: Enhance `QuickActionButton` with a circular icon container, updated heights, and refined typography.&#10;- **Sensor Service**: Consolidate cleanup logic into the `destroy()` method, ensuring preferences are unregistered and threads are stopped correctly.&#10;- **Code Cleanup**: Remove unused delta time calculations and motion threshold variables in `HomeViewModel`." />
<MESSAGE value="docs: add comprehensive architecture and module documentation&#10;&#10;- **Android**: Add READMEs for sensor fusion (Madgwick AHRS), network protocols (TCP/UDP/WS), gesture detection, and specialized UI modules including Calibration, Gaming, and Touchpad.&#10;- **PC Server**: Document Go-based backend internals, including motion control algorithms (Kalman prediction, adaptive smoothing), device management, and native OS input simulation.&#10;- **Web UI**: Add documentation for the React dashboard, detailing the glassmorphism design system and real-time telemetry components." />
<MESSAGE value="feat: implement interactive dashboard tour and revamp Android onboarding&#10;&#10;- **Web UI**:&#10; - Add `InteractiveTourModal` component to provide a multi-step guided walkthrough of dashboard features.&#10; - Integrate the tour into the main layout with auto-launch logic for first-time visitors using `localStorage`.&#10; - Add a &quot;Tour&quot; action button to the header with updated styling.&#10; - Update production build assets in `index.html`.&#10;- **Android**:&#10; - Overhaul onboarding screen content in `OnboardingItem.kt` to provide detailed technical descriptions of 3D Air Mouse mode, Touchpad mode, and Gaming profiles.&#10; - Add specific feature highlights to onboarding items, including Madgwick AHRS details, gesture lists, and proximity security specs.&#10; - Update accent colors and icons across the onboarding flow." />
<MESSAGE value="feat: implement gaming profiles and enhance server status visibility&#10;&#10;- **Backend (Go)**:&#10; - Add API endpoints `/api/gaming/profiles` and `/api/gaming/activate` to manage gameplay configurations.&#10; - Expand WebSocket command handler to support `game_action` and `game_button` types.&#10; - Implement comprehensive input mapping for gaming actions, translating mobile triggers into system mouse clicks and key taps (e.g., WASD for movement, Shift for sprint, Space for jump/handbrake).&#10; - Define default profiles for FPS, Racing, and RPG genres with specific control schemes.&#10;- **Android**:&#10; - **Home Screen**: Add a server architecture information card displaying active ports (TCP 9090, WS 9091, UDP 9092/9093, REST 8081) and engine version.&#10; - **Help Screen**: Enhance walkthrough navigation with directional slide-and-fade transitions between tabs." />
<option name="LAST_COMMIT_MESSAGE" value="feat: implement gaming profiles and enhance server status visibility&#10;&#10;- **Backend (Go)**:&#10; - Add API endpoints `/api/gaming/profiles` and `/api/gaming/activate` to manage gameplay configurations.&#10; - Expand WebSocket command handler to support `game_action` and `game_button` types.&#10; - Implement comprehensive input mapping for gaming actions, translating mobile triggers into system mouse clicks and key taps (e.g., WASD for movement, Shift for sprint, Space for jump/handbrake).&#10; - Define default profiles for FPS, Racing, and RPG genres with specific control schemes.&#10;- **Android**:&#10; - **Home Screen**: Add a server architecture information card displaying active ports (TCP 9090, WS 9091, UDP 9092/9093, REST 8081) and engine version.&#10; - **Help Screen**: Enhance walkthrough navigation with directional slide-and-fade transitions between tabs." />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="kotlin-function">
<url>file://$PROJECT_DIR$/app/src/main/java/com/airmouse/domain/repository/IProfileRepository.kt</url>
<line>17</line>
<properties class="com.airmouse.domain.repository.IProfileRepository">
<option name="WATCH_EXIT" value="false" />
</properties>
<option name="timeStamp" value="4" />
</line-breakpoint>
<line-breakpoint enabled="true" type="kotlin-line">
<url>file://$PROJECT_DIR$/app/src/main/java/com/airmouse/presentation/calibration/CalibrationScreen.kt</url>
<line>1803</line>
<option name="timeStamp" value="6" />
</line-breakpoint>
<line-breakpoint enabled="true" type="kotlin-line">
<url>file://$PROJECT_DIR$/app/src/main/java/com/airmouse/data/repository/ProximityRepositoryImpl.kt</url>
<line>267</line>
<option name="timeStamp" value="8" />
</line-breakpoint>
<line-breakpoint enabled="true" type="kotlin-line">
<url>file://$PROJECT_DIR$/app/src/main/java/com/airmouse/presentation/ui/home/HomeViewModel.kt</url>
<line>860</line>
<option name="timeStamp" value="9" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
<component name="play_dynamic_filters_status">
<option name="appIdToCheckInfo">
<map>
<entry key="com.airmouse">
<value>
<CheckInfo lastCheckTimestamp="1785031155926" />
</value>
</entry>
<entry key="com.airmouse.test">
<value>
<CheckInfo lastCheckTimestamp="1785031156784" />
</value>
</entry>
</map>
</option>
</component>
</project>

Xet Storage Details

Size:
103 kB
·
Xet hash:
ba30b4e95e910f7ee4399ef6f6bc1f534d5cdad37a24f33c8e4365cefb6cc38d

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.