Skip to content

Jetpack Compose + Material 3 Expressive#160

Draft
raresvanca wants to merge 41 commits intoslowscript:masterfrom
raresvanca:master
Draft

Jetpack Compose + Material 3 Expressive#160
raresvanca wants to merge 41 commits intoslowscript:masterfrom
raresvanca:master

Conversation

@raresvanca
Copy link
Copy Markdown
Contributor

@raresvanca raresvanca commented Mar 27, 2026

My testing seem to indicate that this port is done, but additional eyes are appreciated to catch anything that may have been overlooked.

@slowscript if this PR is too large in scope, let me know so I can unfork or split the commits into multiple prs. if not, could you please create a separate branch?

Notes

This Kotlin + coroutines rewrite also seems to improve the performance of transfers. I noticed the average transfer speeds increased by ~5 MB/s in local testing.

Fixes

fixes #158, fixes #134

* Add compose dependencies
* Clean all UI legacy code and files
* Add base App
Key Changes:
- **Language Migration**: Converted all core models, network services, and utils from Java to Kotlin.
- **Architecture**: Introduced `WarpinatorRepository` as the single source of truth, exposing `StateFlow` for Remotes and Transfers.
- **Concurrency**: Replaced blocking I/O, Threads, and Timers with Kotlin Coroutines and Flow.
- **Service Layer**: Decoupled logic from `MainService`.
  - Created `RemotesManager` to handle discovery and connection lifecycles.
  - Created `TransfersManager` to handle active file transfer jobs.
  - Created `WarpinatorNotificationManager` to handle system notifications.
- **Networking**:
  - Rewrote `Server`, `CertServer`, and `Authenticator` to be coroutine-friendly.
  - Implemented `RemoteWorker` and `TransferWorker` to handle individual connections and streams.
  - Updated gRPC service implementation to use Kotlin Coroutine stubs.
- **State Management**:
  - `Remote` and `Transfer` are now immutable data classes.
  - Added `WarpinatorViewModel` to bridge the Repository to the UI.
  - Centralized shared preferences logic in `PreferenceManager`.

Breaking Changes:
- Deleted legacy `MainService` static singleton pattern.
- Removed all legacy Java Model and Network classes.
- Now with links for helping users find important pages
- Some basic unit tests for some utility classes to check for regression
- Added auto-scrolling to the latest message in `MessagesPane` when the list is at the top or a new message is sent.
- Updated `MessagesPane` top bar to display connection status
- Refined message sending logic to ensure it is only enabled when the remote is connected and supports text messages.
- Improved `MessageBubble` interaction by isolating the ripple effect to the bubble itself and adding a context menu offset.
- Adjusted `DropdownMenuPopup` properties to prevent it from unfocusing the keyboard when opened.
- Updated `ShareDialog` to support menu actions.
- Refined the file/text preview section with animated transitions and dynamic horizontal segmented shapes.
- Improved the file name display logic to handle multiple URIs with a "more" count.
- Filtered the remote device list based on status and text message support.
This update includes:
- Added `MessageListItem` component for displaying and interacting with messages.
- Added `SendMessageDialog` for composing and sending text messages.
- Integrated messages directly into `TransfersPane` based on user preference.
- Updated `WarpinatorRepository` and `WarpinatorViewModel` to support clearing individual messages.
- Conditional visibility of the standalone messages pane in `HomeScreen`.
- Improved FAB menu behavior and connection status card to reflect message counts.
- Notifications for messages
- Intent handling for notifications
- App navigation to relevant panes
- Notification inhibitors for current open remote/message pane
- Clearing notifications when a page is open
…op mode

- Added keyboard shortcuts and shortcut labels when a keyboard is connected
- Add drag-and-drop support for sending files and setting the profile picture
- Support Ctrl+Enter to send messages
- Enhance list items with hover and focus states to show contextual actions
- Adjacent opening of links on large devices
- Update the manifest to better handle desktop-style interactions and window resizing
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Device without a back key Clarify/clean up UI

1 participant