🔨 4 new commits to ComuCompose:master:
2857331: Revamp Call UI and persist UID
- Update CallActivity with a new layout, including a TopAppBar and Scaffold
- Expand call banner visibility in MainActivity and ChatActivity to include incoming and outgoing states
- Persist Singleton UID using SharedPreferences
- Fix blocking pointer input loop in MainActivity
- Remove explicit cleanup call in SocketService
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
4ada7dd: Implement SharedPreferences persistence for Singleton properties
- Update getters and setters to read and write values (UIDs, names, bio, notification settings) using SharedPreferences.
- Ensure
- Refactor field declarations to single lines and convert simple getters to expression bodies.
- Reorder methods for logical grouping.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
1a636cb: Load profile icon and average color asynchronously in ProfileActivity
* ProfileActivity.kt:
* Convert
* Implement
* Update UI to show a shimmer placeholder while the profile icon is loading.
* Use the fetched icon bitmap instead of the cached low-res version.
* Handlers.kt:
* Update
* Improve
* LoginActivity.kt:
* Add a check for
* Fix context usage for cache directory access when loading the user's own profile picture.
* .idea/deploymentTargetSelector.xml: Update deployment target configuration.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
9366551: Implement expandable profile header and update service startup
- ProfileActivity: Add expanding animation to the profile image when pulling down. Refactor header offset, avatar scaling, and name positioning logic. Move back and edit buttons in the layout hierarchy to ensure proper layering.
- UdpCallService: Move
- LoginActivity: Change debug logging level to Info.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
2857331: Revamp Call UI and persist UID
- Update CallActivity with a new layout, including a TopAppBar and Scaffold
- Expand call banner visibility in MainActivity and ChatActivity to include incoming and outgoing states
- Persist Singleton UID using SharedPreferences
- Fix blocking pointer input loop in MainActivity
- Remove explicit cleanup call in SocketService
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
4ada7dd: Implement SharedPreferences persistence for Singleton properties
- Update getters and setters to read and write values (UIDs, names, bio, notification settings) using SharedPreferences.
- Ensure
cleanUp() resets persisted values.- Refactor field declarations to single lines and convert simple getters to expression bodies.
- Reorder methods for logical grouping.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
1a636cb: Load profile icon and average color asynchronously in ProfileActivity
* ProfileActivity.kt:
* Convert
avgProfileColor to a mutableState to trigger recompositions on update.* Implement
LaunchedEffect to fetch the full resolution profile icon and calculate its average color asynchronously.* Update UI to show a shimmer placeholder while the profile icon is loading.
* Use the fetched icon bitmap instead of the cached low-res version.
* Handlers.kt:
* Update
getIconLink to support fetching the full-size image link via a boolean flag, parsing the result from a JSON object.* Improve
getIcon by setting connection timeouts and user-agent headers.* LoginActivity.kt:
* Add a check for
Handlers.isReconnected loop during login to ensure socket stability.* Fix context usage for cache directory access when loading the user's own profile picture.
* .idea/deploymentTargetSelector.xml: Update deployment target configuration.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
9366551: Implement expandable profile header and update service startup
- ProfileActivity: Add expanding animation to the profile image when pulling down. Refactor header offset, avatar scaling, and name positioning logic. Move back and edit buttons in the layout hierarchy to ensure proper layering.
- UdpCallService: Move
startForegroundCall to onCreate to ensure immediate foreground promotion.- LoginActivity: Change debug logging level to Info.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuServer:main:
bbc6611: Refactor presence handling; add status subscriptions
Replaced
status updates, subscriptions, and unsubscriptions. Added
Implemented
and
Added
changes. Updated disconnection logic to clean up statuses
and subscriptions. Ensured subscribers are notified when a
user's status is cleared. by NikkaGames
bbc6611: Refactor presence handling; add status subscriptions
Replaced
presence handlers with stat handlers to managestatus updates, subscriptions, and unsubscriptions. Added
ConcurrentDictionary structures for statusSubs andstreamIndex to track subscriptions and streams.Implemented
HandleStatusSetAsync, HandleStatusSubAsync,and
HandleStatusUnsubAsync methods for status management.Added
NotifyStatus helper to notify subscribers of statuschanges. Updated disconnection logic to clean up statuses
and subscriptions. Ensured subscribers are notified when a
user's status is cleared. by NikkaGames
🔨 1 new commit to ComuCompose:master:
8d3ef6c: Refactor user status to subscription model and enhance Profile UI
- Switch user status handling from polling to a subscription-based event system in
- Remove
- Handle
- Add top and bottom vertical gradient fades to the profile image in
- Animate navigation icon tint brightness based on the profile expansion progress.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
8d3ef6c: Refactor user status to subscription model and enhance Profile UI
- Switch user status handling from polling to a subscription-based event system in
Handlers and ChatActivity.- Remove
startStatusPolling and implement subscribeStatus and unsubscribeStatus methods.- Handle
EVENT_STATUS_RECV events to update UI status asynchronously.- Add top and bottom vertical gradient fades to the profile image in
ProfileActivity when expanded.- Animate navigation icon tint brightness based on the profile expansion progress.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuServer:main:
0d0ee2c: Add secure key exchange mechanism for call setup
Introduced
0d0ee2c: Add secure key exchange mechanism for call setup
Introduced
xorKey field in CallRegistry for cryptographic key storage. Updated TCPServer to generate a 32-byte random key during call acceptance, Base64-encode it, and distribute it securely to the caller and callee. Ensured messages are sent only to authenticated SSL streams. Added state checks to activate calls only when in Ringing state. Enhanced security of call setup process. by NikkaGames🔨 2 new commits to ComuServer:main:
9778646: Update TCPServer to notify on non-Ringing call state
Enhanced the
would simply return
The new logic sends a message to the stream via
including an object with
property. This ensures additional feedback is provided for
non-Ringing call states before returning
02d47ca: Refactor call handling and encapsulate call termination
Centralized call termination logic in
improve maintainability and reduce duplication. Updated methods
in
call states. Removed redundant code and ensured consistent
handling of call termination across the codebase. by NikkaGames
9778646: Update TCPServer to notify on non-Ringing call state
Enhanced the
TCPServer class to send a notification whencall.state is not CallState.Ringing. Previously, the methodwould simply return
DispatchResult.Continue in this case.The new logic sends a message to the stream via
SendObj,including an object with
name: "call.taken" and the callIdproperty. This ensures additional feedback is provided for
non-Ringing call states before returning
DispatchResult.Continue. by NikkaGames02d47ca: Refactor call handling and encapsulate call termination
Centralized call termination logic in
CallRegistry.EndCall toimprove maintainability and reduce duplication. Updated methods
in
TCPServer to use EndCall instead of direct calls toUdpServer.CloseRoom. Refined IsUserInCall logic to checkcall states. Removed redundant code and ensured consistent
handling of call termination across the codebase. by NikkaGames
🔨 1 new commit to ComuCompose:master:
1f3a6b3: Implement XOR encryption for voice calls and handle 'taken' state
- Add XOR-based payload obfuscation in
- Implement key exchange logic in
- Introduce
- Remove redundant
- Reset encryption keys and call state properly upon service destruction.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
1f3a6b3: Implement XOR encryption for voice calls and handle 'taken' state
- Add XOR-based payload obfuscation in
UdpCallService for incoming and outgoing audio packets.- Implement key exchange logic in
Handlers via call.accepted and call.handsh events.- Introduce
State.TAKEN in CallWrapper to handle calls answered on other devices, closing the activity when received.- Remove redundant
incoming boolean from CallWrapper.- Reset encryption keys and call state properly upon service destruction.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 3 new commits to ComuCompose:master:
4712b7a: Handle call reset event and fix call state transitions
- In
- In
- Add
- Reset
- Reset
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
52c16a5: Implement incoming call notifications and avatar display
* Add
* Show peer avatar and name in
* Pass peer
* Create dedicated notification channel for calls
* Refactor
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
03ba109: Implement mTLS HTTP client for call rejection and handle call notifications
This commit introduces a new mTLS-secured HTTP client (
Specific changes:
* Added
* Added
* Updated
* Refactored
* Updated
* Modified
* Bumped okhttp dependency to 4.12.0.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
4712b7a: Handle call reset event and fix call state transitions
- In
CallActivity.kt, remove the redundant CallWrapper.reset() call when state is TAKEN.- In
Handlers.kt:- Add
EVENT_CALL_RESET constant and handle it to reset the CallWrapper and stop the timer.- Reset
CallWrapper on EVENT_CALL_INCOMING if the state is not idle.- Reset
CallWrapper on EVENT_CALL_TAKEN before setting the state to TAKEN.Signed-off-by: NikkaGames <[email protected]> by NikkaGames
52c16a5: Implement incoming call notifications and avatar display
* Add
CallActionReceiver for call notification actions (Accept/Reject)* Show peer avatar and name in
CallActivity with dynamic background color* Pass peer
uid and name via intents in ChatActivity, ProfileActivity, and UdpCallService* Create dedicated notification channel for calls
* Refactor
EVENT_CALL_INCOMING handling in Handlers and ComuFirebaseServiceSigned-off-by: NikkaGames <[email protected]> by NikkaGames
03ba109: Implement mTLS HTTP client for call rejection and handle call notifications
This commit introduces a new mTLS-secured HTTP client (
ComuMtlsHttp) to handle call rejection requests securely via a REST API endpoint. It also refactors the call handling logic, including improved notification management and auto-acceptance capabilities.Specific changes:
* Added
ComuMtlsHttp helper object to build an OkHttp client with custom SSL configuration (CA cert, client PFX) for secure communication.* Added
comuhttp.crt and comuclient.pfx (binary) resources for mTLS.* Updated
CallActivity to support auto-accepting calls via intent extras and handling reconnection logic in onResume.* Refactored
CallActionReceiver to reject calls via the new mTLS HTTP endpoint instead of the socket service.* Updated
Handlers to support extended rejection logic (rejectExt), proper notification channel management, and updated call event handling (SYNC, TAKEN, REJECTED).* Modified
Utils.createCallChannel to recreate the notification channel to ensure settings persist correctly.* Bumped okhttp dependency to 4.12.0.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 2 new commits to ComuCompose:master:
0d24a8d: Implement image uploading and refactor icon retrieval
- Add
- Integrate visual media picker and legacy content picker in
- Add
- Update
- Refactor
- Add UI controls for initiating image uploads in chat and profile screens
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
cfd53c2: Implement real-time profile picture updates with disk caching and version tracking
- Handle
- Refactor avatar loading in
- Revamp
- Add
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
0d24a8d: Implement image uploading and refactor icon retrieval
- Add
uploadImage and uploadProfilePictures functions to Handlers- Integrate visual media picker and legacy content picker in
ChatActivity and ProfileActivity- Add
centerCropSquare bitmap utility function- Update
getIcon signature to fetch directly from media server using uid and quality parameters- Refactor
getIcon calls across MainActivity, LoginActivity, CallActivity, and ChatActivity to include uid- Add UI controls for initiating image uploads in chat and profile screens
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
cfd53c2: Implement real-time profile picture updates with disk caching and version tracking
- Handle
EVENT_USER_PICTURE_UPDATE in ComuFirebaseService and Handlers to trigger icon refreshes- Refactor avatar loading in
ProfileActivity, ChatActivity, and MainActivity to observe iconVersion state- Revamp
ProfileActivity UI: add "Upload a new photo" section, improve header animations, and implement dynamic name sizing- Add
Utils.isOnline helper method checks for service and socket connectivitySigned-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuServer:main:
fbe6a28: Push latest changes
* Implemented file server request and event handlers
* Finalize file server for profile media uploading by NikkaGames
fbe6a28: Push latest changes
* Implemented file server request and event handlers
* Finalize file server for profile media uploading by NikkaGames
🔨 1 new commit to ComuCompose:master:
03fa8a5: Implement profile picture upload progress tracking
- Add
- Update
- Modify
- Implement waiting for
- Handle upload lifecycle events (
- Pre-calculate thumbnail size by compressing to memory stream before upload.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
03fa8a5: Implement profile picture upload progress tracking
- Add
UploadStore and UploadAcks in Handlers to manage upload states and server acknowledgments.- Update
ProfileActivity to show a CircularProgressIndicator during uploads using real-time progress data.- Modify
uploadProfilePictures and uploadImage to send Content-Length and X-Upload-Guid headers.- Implement waiting for
upload.begin acknowledgment before starting file transfer.- Handle upload lifecycle events (
upload.ack, upload.progress, upload.done, upload.failed) in Handlers.- Pre-calculate thumbnail size by compressing to memory stream before upload.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 3 new commits to ComuCompose:master:
d13c826: Refactor profile image handling and optimize color calculation
- Remove Bitmap storage (
- Update
- Optimize
- Change
- Add
- Rename state variables for profile icons in
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
ddefa27: Refactor chat input to combine send and image buttons with animations
Implement image scaling and compression logic for uploads
Prevent initiating a new call if one is already active
Add clipping and fade animations to call control buttons
Update message insertion key and optimize icon cache handling
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
2999b11: Implement image sending and viewing in chat
- Add Coil Compose dependency and configure
- Implement image picking, compression (JPEG/PNG/WebP), and uploading logic in
- Update
- Render
- Add "Save to gallery" action to the message options bottom sheet and adjust available actions for media/stickers.
- Update
- Clear upload store when
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
d13c826: Refactor profile image handling and optimize color calculation
- Remove Bitmap storage (
icon, profileIcon, myimg) and associated accessors from Singleton to reduce memory usage and coupling.- Update
LoginActivity, MainActivity, ChatActivity, ProfileActivity, and CallActivity to manage profile images via Handlers.icons or local state instead of the singleton.- Optimize
Utils.getAverageColor to use pixel downsampling for faster performance.- Change
Handlers.icons map to ConcurrentHashMap for thread safety.- Add
EVENT_UPLOAD_BEGIN constant in Handlers.- Rename state variables for profile icons in
ProfileActivity.Signed-off-by: NikkaGames <[email protected]> by NikkaGames
ddefa27: Refactor chat input to combine send and image buttons with animations
Implement image scaling and compression logic for uploads
Prevent initiating a new call if one is already active
Add clipping and fade animations to call control buttons
Update message insertion key and optimize icon cache handling
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
2999b11: Implement image sending and viewing in chat
- Add Coil Compose dependency and configure
ComuImageLoader with custom OkHttp client and caching.- Implement image picking, compression (JPEG/PNG/WebP), and uploading logic in
ChatActivity and Handlers.- Update
Handlers to dispatch upload events (progress, success, failure) to the main thread.- Render
photo: messages in ChatActivity using AsyncImage with support for upload progress indicators and size animations.- Add "Save to gallery" action to the message options bottom sheet and adjust available actions for media/stickers.
- Update
AppVisibility to prevent service termination while uploads are active.- Clear upload store when
SocketService is stopped.Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuServer:main:
230ac6c: Push latest changes
* Implement chat media uploads and fetching. by NikkaGames
230ac6c: Push latest changes
* Implement chat media uploads and fetching. by NikkaGames
🔨 1 new commit to ComuServer:main:
2cab26f: Notify target client about incoming media message from File Server, directly. by NikkaGames
2cab26f: Notify target client about incoming media message from File Server, directly. by NikkaGames
🔨 1 new commit to ComuCompose:master:
65133a0: Implement media saving, fix image rotation, and update permissions
- Add
- Integrate "Save to gallery" option in
- Fix image orientation issues by normalizing EXIF data before upload in
- Update
- Refactor
- Correct
- Optimize upload event handlers by removing unnecessary main thread posting.
- Adjust message options menu to conditionally show Copy, Save, and Delete actions based on message type and ownership.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
65133a0: Implement media saving, fix image rotation, and update permissions
- Add
saveToGallery functionality in Handlers to download and save images to MediaStore.- Integrate "Save to gallery" option in
ChatActivity`'s `OptionsBottomSheet.- Fix image orientation issues by normalizing EXIF data before upload in
Utils and Handlers.- Update
AndroidManifest.xml permissions to support Android 13+ (replace legacy storage permissions with READ_MEDIA_*).- Refactor
SocketService to wait for connection readiness (waitUntilReady) before sending messages.- Correct
isOnline logic in Utils and update reconnection state handling in Handlers.- Optimize upload event handlers by removing unnecessary main thread posting.
- Adjust message options menu to conditionally show Copy, Save, and Delete actions based on message type and ownership.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuCompose:master:
4559e16: Implement CallForegroundService and image download progress tracking
- Create
- Update
- Configure the "calls" notification channel with ringtone, vibration, and DND bypass settings in
- Implement
- Bind image loading progress to the UI in
- Update
- Add checks in
- Register the new service and update permission attributes in
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
4559e16: Implement CallForegroundService and image download progress tracking
- Create
CallForegroundService to handle incoming call notifications using NotificationCompat.CallStyle and full-screen intents.- Update
CallActivity, Handlers, and CallActionReceiver to manage the lifecycle of the new foreground service instead of raw notifications.- Configure the "calls" notification channel with ringtone, vibration, and DND bypass settings in
Utils.- Implement
ProgressInterceptor in ComuImageLoader to track and expose image download progress.- Bind image loading progress to the UI in
ChatActivity.- Update
Singleton to use lateinit for context and introduce googleAuth state.- Add checks in
SocketService to stop the service if unauthenticated and handle reconnection logic.- Register the new service and update permission attributes in
AndroidManifest.xml.Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuCompose:master:
1749d40: Replace CallForegroundService with direct NotificationManager usage
- Delete
- Move incoming call notification construction logic to
- Update
- Refactor call state event handlers (
- Update
- Pass context to
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
1749d40: Replace CallForegroundService with direct NotificationManager usage
- Delete
CallForegroundService.kt and remove its declaration from AndroidManifest.xml.- Move incoming call notification construction logic to
Handlers.kt as buildIncomingCall.- Update
handleCall to display notifications using NotificationManagerCompat instead of starting a foreground service.- Refactor call state event handlers (
EVENT_CALL_REJECTED, EVENT_CALL_ENDED, etc.) in Handlers.kt and CallActionReceiver to cancel notifications by ID directly.- Update
CallActivity to remove service start/stop logic and use notification cancellation.- Pass context to
handleCall in ComuFirebaseService.Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuServer:main:
619743b: Per-device TCP/FCM delivery: prevent duplicate push and keep multi-device state consistent
Route outbound events per device: TCP to authenticated sessions, FCM only to devices without TCP
Update all existing FCM fallback paths to use device-level online/offline filtering (msg.send, SendMessageAsync, user.pictureup, call.incoming)
Add callee-side FCM delivery for call.taken, call.rejected, call.ended, call.reset when the target device is TCP-offline
Preserve existing behavior for all other server logic; only adjust delivery selection logic by NikkaGames
619743b: Per-device TCP/FCM delivery: prevent duplicate push and keep multi-device state consistent
Route outbound events per device: TCP to authenticated sessions, FCM only to devices without TCP
Update all existing FCM fallback paths to use device-level online/offline filtering (msg.send, SendMessageAsync, user.pictureup, call.incoming)
Add callee-side FCM delivery for call.taken, call.rejected, call.ended, call.reset when the target device is TCP-offline
Preserve existing behavior for all other server logic; only adjust delivery selection logic by NikkaGames
🔨 1 new commit to ComuCompose:master:
b91adef: Refactor permissions, token usage, and call logic
- Implement coroutine-based permission wrappers in Utils and enforce Audio permission before calls
- Remove
- Handle additional call events (ended, rejected, taken) in ComuFirebaseService
- Dispatch socket message sending to
- Optimize LoginActivity startup routing and MainActivity back press handling
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
b91adef: Refactor permissions, token usage, and call logic
- Implement coroutine-based permission wrappers in Utils and enforce Audio permission before calls
- Remove
Singleton.rpk and standardize token retrieval across activities and services- Handle additional call events (ended, rejected, taken) in ComuFirebaseService
- Dispatch socket message sending to
handlerScope- Optimize LoginActivity startup routing and MainActivity back press handling
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuServer:main:
1ba13c6: Persistence: one document per (uid, device) by upserting token/ts instead of inserting on every reconnect by NikkaGames
1ba13c6: Persistence: one document per (uid, device) by upserting token/ts instead of inserting on every reconnect by NikkaGames
🔨 1 new commit to ComuCompose:master:
af87380: Enable multiple image selection and improve handler threading
- Update image picker to allow selecting up to 20 items in ChatActivity
- Implement retry logic with backoff and cache busting for failed image loads
- Ensure socket event handlers (status, upload progress) execute on the main thread
- Update call rejection API to include X-Uid, X-Token, and X-Device headers
- Remove legacy incoming call notification logic from Handlers
- Initialize LoginActivity UI content immediately to prevent startup delay
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
af87380: Enable multiple image selection and improve handler threading
- Update image picker to allow selecting up to 20 items in ChatActivity
- Implement retry logic with backoff and cache busting for failed image loads
- Ensure socket event handlers (status, upload progress) execute on the main thread
- Update call rejection API to include X-Uid, X-Token, and X-Device headers
- Remove legacy incoming call notification logic from Handlers
- Initialize LoginActivity UI content immediately to prevent startup delay
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuCompose:master:
834825c: Implement interactive full-screen media viewer
- Add
- Implement animated transitions expanding media from chat thumbnails to the full viewport.
- Add "Save to Gallery" functionality within the media viewer toolbar.
- Update
- Add logic to auto-scroll to the latest message when an upload completes.
- Simplify context retrieval logic for message drafts.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames
834825c: Implement interactive full-screen media viewer
- Add
FullscreenMediaOverlay composable supporting pinch-to-zoom, pan, and vertical drag-to-dismiss gestures.- Implement animated transitions expanding media from chat thumbnails to the full viewport.
- Add "Save to Gallery" functionality within the media viewer toolbar.
- Update
Handlers.kt to increase the maximum image scaling size limit from 700mp to 1mp.- Add logic to auto-scroll to the latest message when an upload completes.
- Simplify context retrieval logic for message drafts.
Signed-off-by: NikkaGames <[email protected]> by NikkaGames