Commits by Nikka
9 subscribers
164 links
Owned by @NikkaGameS
Download Telegram
🔨 2 new commits to ComuCompose:master:

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 connectivity

Signed-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
🔨 1 new commit to ComuCompose:master:

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 (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
🔨 1 new commit to ComuServer:main:

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 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 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 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
🔨 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 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
🔨 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
🔨 1 new commit to ComuCompose:master:

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
🔨 1 new commit to ComuCompose:master:

6cf5b28: Implement photo replies and improve media viewer interactions

ChatActivity
- Implement rendering for photo replies (photo: prefix), including dynamic aspect ratio calculation, loading indicators, and retry logic.
- Update media viewer behavior: single tap now toggles the top app bar with an animation instead of closing the viewer.
- Move saveToGallery operations to Dispatchers.IO to prevent blocking the UI.
- Add animation for blur radius transitions.

Handlers
- Prevent duplicate chat items from being added by checking if the path already exists.
- Ensure updates to MainActivity.items are posted to the main thread.

Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuCompose:master:

7873422: Implement custom call audio and scroll-to-reply features

- Add DelayedLooperSound in Utils to handle looping ringtones and audio routing (Speaker/Earpiece).
- update Handlers and CallActivity to trigger sound playback and cessation based on call states (Outgoing, Incoming, Active, Ended).
- Replace default system sounds with custom resources for calls and notifications; update notification channel configurations.
- specific keep-alive logic in ComuFirebaseService and Handlers to monitor incoming call validity.
- Implement scroll-to-reply functionality in ChatActivity: clicking a reply preview now scrolls to the original message.
- Add a pulse highlight animation for messages targeted by the scroll-to-reply action.

Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuCompose:master:

18915b3: Add new audio resources for call notifications and ringtones

Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuCompose:master:

75e8715: Generate a deterministic GUID from file content for image uploads

A new utility function guidFromUri has been added to Utils.kt which calculates a UUID based on the SHA-256 hash of the file content at a given URI. This ensures that the same file results in the same GUID.

This logic is applied in ProfileActivity and ChatActivity when picking images: instead of generating a random UUID immediately, the app now attempts to derive the GUID from the file content first.

Additionally, Handlers.uploadImage now accepts a randGuid parameter, which is passed as a new header X-Upload-Randguid. In ChatActivity, the message ID for photo messages is updated to a composite format (guid:randGuid) to distinguish identical images sent as separate messages while maintaining the content-based GUID for the upload itself.

Specific changes:
* Utils.kt: Added guidFromUri to generate content-based UUIDs.
* ProfileActivity.kt: Use guidFromUri for profile picture uploads.
* Handlers.kt: Update uploadImage signature to accept randGuid and send X-Upload-Randguid header.
* ChatActivity.kt: Use guidFromUri for image messages; generate a separate randGuid for the message ID composite to allow re-sending identical images. Update message handling to parse the composite ID.

Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuServer:main:

cd9d5f9: Prevent media content duplication by NikkaGames
🔨 1 new commit to ComuCompose:master:

c79459d: Implement horizontal swipe navigation for expanded media

- Add logic to extract distinct media GUIDs from chat messages.
- Update gesture detector to distinguish between vertical dismiss and horizontal paging.
- Add animation logic for sliding transitions between images.
- Implement openGuid to load adjacent media without closing the viewer.

Signed-off-by: NikkaGames <[email protected]> by NikkaGames
🔨 1 new commit to ComuCompose:master:

80e03ee: Fix message reply scrolling and optimize profile update logic

* ChatActivity: Update the logic for finding a replied-to message. Instead of an exact match (==), check if the message ID contains the replyGuid, and use the found message's ID for highlighting. This improves the reliability of scrolling to a specific message.
* ProfileActivity: Refactor the conditional check for showing the save button. Combine logic to ensure the name or bio has changed and that the name meets validation requirements (not empty, length >= 4) in a cleaner expression.

Signed-off-by: NikkaGames <[email protected]> by NikkaGames