Skip to content

Develop - bug fixes and efficiency improvements - #146

Merged
sameerasw merged 14 commits into
mainfrom
develop
Aug 13, 2026
Merged

Develop - bug fixes and efficiency improvements#146
sameerasw merged 14 commits into
mainfrom
develop

Conversation

@sameerasw

Copy link
Copy Markdown
Owner

This pull request introduces several new features and improvements to BLE (Bluetooth Low Energy) connection management, user preferences, and documentation. The most significant changes include enhanced BLE manual disconnect handling, new user preferences for excluding media apps from sync, and improvements to the discovery system. Additionally, the documentation and UI have been updated to reflect new features and permissions.

BLE Connection Management and Manual Disconnect:

  • Added user manual disconnect handling for BLE: BLE server now respects a user-initiated disconnect, pausing advertising and persisting the state, with a new method to restart the server if needed. BLE authentication state is now managed with an atomic flag for thread safety. [1] [2] [3] [4] [5] [6] [7] [8]
  • Added sendManualDisconnect() to BleTransportBridge to notify remote devices of manual disconnects.

User Preferences and Media Sync:

  • Introduced a new user preference to exclude specific media packages from sync, with corresponding methods in DataStoreManager and AirSyncRepository. Updated UiState to include excludedMediaPackages. [1] [2] [3] [4] [5]

Discovery System Improvements:

  • Refactored device discovery from UDPDiscoveryManager to DiscoveryOrchestrator for improved modularity and maintainability. [1] [2]

Documentation and UI Updates:

  • Updated README.md to document new features: cellular network monitoring and enhanced auto-start support for various OEMs.
  • Updated permission explanations in the help section to include location and phone state for cellular network sync.

General Code Maintenance:

  • Suppressed deprecation warnings in several UI component files for cleaner builds. [1] [2] [3]
  • Updated Compose import for LocalLifecycleOwner to use the correct package.
  • Bumped versionCode to 30 in build.gradle.kts.

These changes collectively improve BLE connection reliability, user customization, and prepare the app for new features and future expansion.

DinanathDash and others added 14 commits June 30, 2026 12:05
…ss restarts

Fixes #136 and #137.

Plain action buttons (#136)

WebSocketMessageHandler read the optional "text" field with optString(),
which returns "" when the field is absent. performNotificationAction()
branched on `replyText != null`, so an absent text was still treated as an
inline reply: every plain action button went down the reply path, failed the
remoteInputs check and returned false. Any client that omits "text" for
non-reply actions could never invoke a button. The guard now tests for a
non-empty string, and the handler normalizes an absent field to null.

BleTransportBridge also dropped the optional reply text entirely, so inline
replies never worked over BLE. It now forwards it, treating empty as "no
reply" for consistency with the WebSocket path.

Actions after a process restart (#137)

activeNotifications was only populated from onNotificationPosted, so after a
process restart nothing already in the shade was actionable — clients got
"not found" for notifications that were still visible. onListenerConnected()
now re-registers what is currently posted.

Re-registering alone is not enough: generated IDs embed postTime, and during
a session the first-seen ID is preserved across updates via keyToId. Once
that in-memory map is gone, regenerating from the current postTime produces a
different ID than the one the client holds, so its requests would still miss.
The key -> id mapping is therefore persisted (sbn.key is stable across
updates and restarts) and consulted when re-registering, so IDs a client
obtained before the restart keep resolving. Stale entries are pruned against
the currently active notifications on each listener connect.

Verified on a Galaxy Z Fold7 (Android 16) against the macOS client: invoking
a plain button now reaches pendingIntent.send() and the app-side effect
happens, and an ID held by the client before a force-stop is restored
identically afterwards.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
fix(notifications): make action buttons work and keep IDs stable across restarts
fix: assorted bug fixes, QuickShare adjustments, and minor UI updates
…er, and improved connection state handling in tile service.
@sameerasw sameerasw self-assigned this Aug 13, 2026
@sameerasw sameerasw added bug Something isn't working enhancement New feature or request labels Aug 13, 2026
@sameerasw
sameerasw merged commit ab5d2a9 into main Aug 13, 2026
1 check passed
@github-project-automation github-project-automation Bot moved this from Backlog to Done in AirSync Features and Bugs Aug 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working enhancement New feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants