Skip to content

chore: Merge develop into feat.voip-lib-new#7129

Merged
diegolmello merged 64 commits into
feat.voip-lib-newfrom
chore.develop-into-voip
Apr 10, 2026
Merged

chore: Merge develop into feat.voip-lib-new#7129
diegolmello merged 64 commits into
feat.voip-lib-newfrom
chore.develop-into-voip

Conversation

@diegolmello

@diegolmello diegolmello commented Apr 10, 2026

Copy link
Copy Markdown
Member

Proposed changes

Issue(s)

How to test or reproduce

Screenshots

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • Improvement (non-breaking change which improves a current function)
  • New feature (non-breaking change which adds functionality)
  • Documentation update (if none of the other choices apply)

Checklist

  • I have read the CONTRIBUTING doc
  • I have signed the CLA
  • Lint and unit tests pass locally with my changes
  • I have added tests that prove my fix is effective or that my feature works (if applicable)
  • I have added necessary documentation (if applicable)
  • Any dependent changes have been merged and published in downstream modules

Further comments

Summary by CodeRabbit

  • Documentation

    • Added Storybook stories for the in-app notifier showing direct and channel messages and dark/black theme variants.
  • Tests

    • Added snapshot tests generated from the new notifier stories.
  • Chores

    • Updated iOS build/project configuration and CocoaPods integration for the app.

Rohit3523 and others added 30 commits January 16, 2026 13:04
* fix: formatting base64 images wrong

* chore: add base64 avatar storybook case

* chore: improve unit tests of getAvatarUrl

* chore: format code and fix lint issues [skip ci]

* fix: unit test

* cleanup

---------

Co-authored-by: OtavioStasiak <OtavioStasiak@users.noreply.github.com>
* fix: hide elements instead of conditional render

* chore: update snapshot test

* fix: remove useMemo

* chore: add case on storybook

* fix: snapshot test

* chore: format code and fix lint issues [skip ci]

---------

Co-authored-by: OtavioStasiak <OtavioStasiak@users.noreply.github.com>
* fix: collapsible attachment with text duplicating the content

* fix: ktex breaking the app

* fix: snapshot test

* chore: format code and fix lint issues [skip ci]

* cleanup

* cleanup

* cleanup

* chore: format code and fix lint issues [skip ci]

---------

Co-authored-by: OtavioStasiak <OtavioStasiak@users.noreply.github.com>
Co-authored-by: Rohit Bansal <40559587+Rohit3523@users.noreply.github.com>
* fix: collapsible attachment with text duplicating the content

* fix: nested attachment does not render

* chore: storybook nested reply

* fix: update snapshot test

* chore: format code and fix lint issues [skip ci]

* code improvements

* fix: forward message between channels not rendering image

* update snapshot test

* fix: collapsible attachment with text duplicating the content

* fix: snapshot test

---------

Co-authored-by: OtavioStasiak <OtavioStasiak@users.noreply.github.com>
* chore: type of getAvatarSuggestion

* chore: add getAvatarSuggestion endpoint and backward compatibility

* chore: format code and fix lint issues [skip ci]

---------

Co-authored-by: OtavioStasiak <OtavioStasiak@users.noreply.github.com>
* fix: collapsible attachment with text duplicating the content

* chore: format code and fix lint issues [skip ci]

* fix: unit test

* code improvements

* chore: format code and fix lint issues

* fix: collapsible attachment with text duplicating the content

* fix: snapshot test

* chore: format code and fix lint issues

* fix: forwarding a message twice does not render the attachment (#6960)

* fix: collapsible attachment with text duplicating the content

* fix: nested attachment does not render

* chore: storybook nested reply

* fix: update snapshot test

* chore: format code and fix lint issues [skip ci]

* code improvements

* fix: forward message between channels not rendering image

* update snapshot test

* fix: collapsible attachment with text duplicating the content

* fix: snapshot test

---------

Co-authored-by: OtavioStasiak <OtavioStasiak@users.noreply.github.com>

* fix: remove getAvatarSuggestion deprecated method (#6948)

* chore: type of getAvatarSuggestion

* chore: add getAvatarSuggestion endpoint and backward compatibility

* chore: format code and fix lint issues [skip ci]

---------

Co-authored-by: OtavioStasiak <OtavioStasiak@users.noreply.github.com>

* fix: snapshot test

* fix: snapshot test

---------

Co-authored-by: OtavioStasiak <OtavioStasiak@users.noreply.github.com>
Rohit3523 and others added 9 commits April 4, 2026 03:28
Co-authored-by: Otávio Stasiak <91474186+OtavioStasiak@users.noreply.github.com>
# Conflicts:
#	CLAUDE.md
#	android/app/build.gradle
#	android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt
#	app/containers/Header/components/HeaderButton/__snapshots__/HeaderButtons.test.tsx.snap
#	app/containers/UIKit/__snapshots__/UiKitMessage.test.tsx.snap
#	app/sagas/login.js
#	app/views/DiscussionsView/__snapshots__/Item.test.tsx.snap
#	app/views/RoomView/LoadMore/__snapshots__/LoadMore.test.tsx.snap
#	app/views/ThreadMessagesView/__snapshots__/Item.test.tsx.snap
#	ios/Podfile.lock
#	ios/RocketChatRN.xcodeproj/project.pbxproj
#	package.json
#	yarn.lock
@coderabbitai

coderabbitai Bot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9207af6f-4c31-45f3-8b73-4e0094fb6f32

📥 Commits

Reviewing files that changed from the base of the PR and between f55507d and 43bd8d2.

📒 Files selected for processing (1)
  • ios/RocketChatRN.xcodeproj/project.pbxproj
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: format
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 7046
File: app/containers/InAppNotification/NotifierComponent.stories.tsx:46-75
Timestamp: 2026-03-10T15:21:45.098Z
Learning: In `app/containers/InAppNotification/NotifierComponent.tsx` (React Native, Rocket.Chat), `NotifierComponent` is exported as a Redux-connected component via `connect(mapStateToProps)`. The `isMasterDetail` prop is automatically injected from `state.app.isMasterDetail` and does not need to be passed explicitly at call sites or in Storybook stories that use the default (connected) export.
📚 Learning: 2026-02-05T13:55:06.688Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6930
File: package.json:101-101
Timestamp: 2026-02-05T13:55:06.688Z
Learning: The RocketChat/Rocket.Chat.ReactNative repository uses a fork of react-native-image-crop-picker (RocketChat/react-native-image-crop-picker) with custom Android edge-to-edge fixes, not the upstream ivpusic/react-native-image-crop-picker package. Dependencies should reference commit pins from the RocketChat fork.

Applied to files:

  • ios/RocketChatRN.xcodeproj/project.pbxproj
📚 Learning: 2026-03-31T11:59:31.061Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6875
File: android/build.gradle:3-8
Timestamp: 2026-03-31T11:59:31.061Z
Learning: In the RocketChat/Rocket.Chat.ReactNative repository, the React Native upgrade helper (https://react-native-community.github.io/upgrade-helper/?from=0.79.4&to=0.81.5) recommends kotlinVersion = "2.1.20", compileSdkVersion = 36, targetSdkVersion = 36, and buildToolsVersion = "36.0.0" in android/build.gradle for the RN 0.79.4 → 0.81.5 upgrade. These are the sanctioned values for this upgrade path and should not be flagged as compatibility concerns.

Applied to files:

  • ios/RocketChatRN.xcodeproj/project.pbxproj
🔇 Additional comments (4)
ios/RocketChatRN.xcodeproj/project.pbxproj (4)

291-377: CocoaPods framework regeneration looks internally consistent.

The new Pods_defaults_* file references and framework-phase entries line up cleanly for RocketChatRN, Rocket.Chat, and NotificationService.

Also applies to: 479-668, 689-732, 1268-1270


1290-1400: [CP] phase rewiring matches the renamed target support files.

The regenerated manifest/check/resources/frameworks script phases all point at the corresponding Pods-defaults-* support paths for each target.

Also applies to: 1574-2056


1572-1573: Good portability fix in the RN bundle phase.

Switching NODE_BINARY to node removes a developer-local path assumption and brings this target in line with the other app target.


2477-2542: Base xcconfig references are wired correctly after the defaults-target regen.

The updated baseConfigurationReference entries match the new Pods-defaults-* xcconfig files present in the Pods group.

Also applies to: 2957-3010, 3060-3126


Walkthrough

Added Storybook stories and snapshot tests for NotifierComponent; updated the iOS Xcode project (CocoaPods) project.pbxproj with regenerated Pods defaults, new framework references, and updated build phase entries/UUIDs.

Changes

Cohort / File(s) Summary
NotifierComponent Stories & Tests
app/containers/InAppNotification/NotifierComponent.stories.tsx, app/containers/InAppNotification/NotifierComponent.test.tsx
New Storybook stories for NotifierComponent (DirectMessage, ChannelMessage, WithDarkTheme, WithBlackTheme) with Theme and ResponsiveLayout providers; added snapshot test that generates snapshots from the stories.
iOS Build Configuration (Xcode / CocoaPods)
ios/RocketChatRN.xcodeproj/project.pbxproj
Regenerated CocoaPods/Xcode project entries: replaced Pods-defaults xcconfig references, added/updated PBXFileReference and PBXBuildFile entries for Pods frameworks, swapped framework links in frameworks build phases, and replaced several shell script build phases and UUIDs (bundle step now uses node).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Suggested labels

type: chore

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'chore: Merge develop into feat.voip-lib-new' accurately describes the primary action of merging the develop branch into the feat.voip-lib-new branch, matching the changeset's actual purpose.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
app/containers/InAppNotification/NotifierComponent.stories.tsx (1)

42-44: Consider adding Storybook metadata for better organization.

While the current default export is valid, adding CSF3 metadata would improve the Storybook experience.

📚 Suggested enhancement with additional metadata
 export default {
-	title: 'InAppNotification'
+	title: 'InAppNotification',
+	component: NotifierComponent,
+	tags: ['autodocs']
 };

This would enable automatic documentation generation and better component discovery in Storybook.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/containers/InAppNotification/NotifierComponent.stories.tsx` around lines
42 - 44, Update the default Storybook export to CSF3 metadata: replace the
simple export default { title: 'InAppNotification' } with a metadata object that
includes the actual component (NotifierComponent), useful parameters (e.g.,
layout or docs), and tags like "autodocs" to enable automatic docs generation
and better discovery; ensure the exported name still defaults to the story meta
so Storybook picks up the component metadata and docs.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@app/containers/InAppNotification/NotifierComponent.stories.tsx`:
- Around line 42-44: Update the default Storybook export to CSF3 metadata:
replace the simple export default { title: 'InAppNotification' } with a metadata
object that includes the actual component (NotifierComponent), useful parameters
(e.g., layout or docs), and tags like "autodocs" to enable automatic docs
generation and better discovery; ensure the exported name still defaults to the
story meta so Storybook picks up the component metadata and docs.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c6743554-e6de-4b53-96c3-95598fc34ae9

📥 Commits

Reviewing files that changed from the base of the PR and between 7b7866d and f55507d.

⛔ Files ignored due to path filters (4)
  • app/containers/Header/components/HeaderButton/__snapshots__/HeaderButtons.test.tsx.snap is excluded by !**/*.snap
  • app/containers/InAppNotification/__snapshots__/NotifierComponent.test.tsx.snap is excluded by !**/*.snap
  • ios/Podfile.lock is excluded by !**/*.lock
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (3)
  • app/containers/InAppNotification/NotifierComponent.stories.tsx
  • app/containers/InAppNotification/NotifierComponent.test.tsx
  • ios/RocketChatRN.xcodeproj/project.pbxproj
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: ESLint and Test / run-eslint-and-test
  • GitHub Check: format
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{js,jsx,ts,tsx,json}

📄 CodeRabbit inference engine (CLAUDE.md)

Configure Prettier with tabs, single quotes, 130 character width, no trailing commas, arrow parens avoid, and bracket same line

Files:

  • app/containers/InAppNotification/NotifierComponent.test.tsx
  • app/containers/InAppNotification/NotifierComponent.stories.tsx
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Use ESLint with @rocket.chat/eslint-config base configuration including React, React Native, TypeScript, and Jest plugins

Files:

  • app/containers/InAppNotification/NotifierComponent.test.tsx
  • app/containers/InAppNotification/NotifierComponent.stories.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Use TypeScript with strict mode enabled and configure baseUrl to app/ for import resolution

**/*.{ts,tsx}: Use TypeScript for type safety; add explicit type annotations to function parameters and return types
Prefer interfaces over type aliases for defining object shapes in TypeScript
Use enums for sets of related constants rather than magic strings or numbers

Files:

  • app/containers/InAppNotification/NotifierComponent.test.tsx
  • app/containers/InAppNotification/NotifierComponent.stories.tsx
app/containers/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Place reusable UI components in app/containers/ directory

Files:

  • app/containers/InAppNotification/NotifierComponent.test.tsx
  • app/containers/InAppNotification/NotifierComponent.stories.tsx
**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{js,ts,jsx,tsx}: Use descriptive names for functions, variables, and classes that clearly convey their purpose
Write comments that explain the 'why' behind code decisions, not the 'what'
Keep functions small and focused on a single responsibility
Use const by default, let when reassignment is needed, and avoid var
Prefer async/await over .then() chains for handling asynchronous operations
Use explicit error handling with try/catch blocks for async operations
Avoid deeply nested code; refactor complex logic into helper functions

Files:

  • app/containers/InAppNotification/NotifierComponent.test.tsx
  • app/containers/InAppNotification/NotifierComponent.stories.tsx
🧠 Learnings (9)
📓 Common learnings
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 7046
File: app/containers/InAppNotification/NotifierComponent.stories.tsx:46-75
Timestamp: 2026-03-10T15:21:45.098Z
Learning: In `app/containers/InAppNotification/NotifierComponent.tsx` (React Native, Rocket.Chat), `NotifierComponent` is exported as a Redux-connected component via `connect(mapStateToProps)`. The `isMasterDetail` prop is automatically injected from `state.app.isMasterDetail` and does not need to be passed explicitly at call sites or in Storybook stories that use the default (connected) export.
📚 Learning: 2026-03-10T15:21:45.098Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 7046
File: app/containers/InAppNotification/NotifierComponent.stories.tsx:46-75
Timestamp: 2026-03-10T15:21:45.098Z
Learning: In `app/containers/InAppNotification/NotifierComponent.tsx` (React Native, Rocket.Chat), `NotifierComponent` is exported as a Redux-connected component via `connect(mapStateToProps)`. The `isMasterDetail` prop is automatically injected from `state.app.isMasterDetail` and does not need to be passed explicitly at call sites or in Storybook stories that use the default (connected) export.

Applied to files:

  • app/containers/InAppNotification/NotifierComponent.test.tsx
  • app/containers/InAppNotification/NotifierComponent.stories.tsx
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to index.js : Register app entry point in index.js with conditional Storybook loading

Applied to files:

  • app/containers/InAppNotification/NotifierComponent.test.tsx
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/index.tsx : Configure Redux provider, theme, navigation, and notifications in app/index.tsx

Applied to files:

  • app/containers/InAppNotification/NotifierComponent.stories.tsx
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/lib/hooks/useResponsiveLayout/**/*.{ts,tsx} : Use responsive layout with master-detail on tablets and single stack on phones via useResponsiveLayout hook

Applied to files:

  • app/containers/InAppNotification/NotifierComponent.stories.tsx
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/theme.tsx : Configure theming context in app/theme.tsx

Applied to files:

  • app/containers/InAppNotification/NotifierComponent.stories.tsx
📚 Learning: 2026-03-15T13:55:42.038Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6911
File: app/containers/markdown/Markdown.stories.tsx:104-104
Timestamp: 2026-03-15T13:55:42.038Z
Learning: In Rocket.Chat React Native, the markdown parser requires a space between the underscore wrapping italic text and a mention sigil (_ mention _ instead of _mention_). Ensure stories and tests that include italic-wrapped mentions follow this form to guarantee proper parsing. Specifically, for files like app/containers/markdown/Markdown.stories.tsx, and any test/content strings that exercise italic-mentions, use the pattern _ mention _ (with spaces) to prevent the mention from being treated as plain text. Validate any test strings or story content accordingly.

Applied to files:

  • app/containers/InAppNotification/NotifierComponent.stories.tsx
📚 Learning: 2026-03-05T06:06:19.755Z
Learnt from: divyanshu-patil
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6957
File: ios/RCTWatchModule.mm:19-24
Timestamp: 2026-03-05T06:06:19.755Z
Learning: In the Rocket.Chat React Native iOS app, `WCSession` (WatchConnectivity) is activated with its delegate in `ios/RocketChat Watch App/Loaders/WatchSession.swift`, not in `RCTWatchModule.mm`. Since `WCSession.defaultSession` is a singleton, activating it once in `WatchSession.swift` is sufficient; `RCTWatchModule.mm` does not need to re-activate or re-set the delegate.

Applied to files:

  • ios/RocketChatRN.xcodeproj/project.pbxproj
📚 Learning: 2026-02-05T13:55:06.688Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6930
File: package.json:101-101
Timestamp: 2026-02-05T13:55:06.688Z
Learning: The RocketChat/Rocket.Chat.ReactNative repository uses a fork of react-native-image-crop-picker (RocketChat/react-native-image-crop-picker) with custom Android edge-to-edge fixes, not the upstream ivpusic/react-native-image-crop-picker package. Dependencies should reference commit pins from the RocketChat fork.

Applied to files:

  • ios/RocketChatRN.xcodeproj/project.pbxproj
🔇 Additional comments (7)
ios/RocketChatRN.xcodeproj/project.pbxproj (1)

1-3425: CocoaPods project configuration regenerated correctly.

The changes to this Xcode project file are auto-generated by CocoaPods and align with the abstract_target 'defaults' structure defined in ios/Podfile. The naming pattern Pods-defaults-{target} for xcconfig files, framework references, and shell script phases is the expected output when CocoaPods processes an abstract target containing concrete targets (RocketChatRN, Rocket.Chat, NotificationService).

All references are internally consistent:

  • Framework fileRef IDs match their PBXFileReference declarations
  • Shell scripts point to correct Pods-defaults-* paths
  • Build configurations reference matching .xcconfig files for Debug/Release

No issues detected.

app/containers/InAppNotification/NotifierComponent.stories.tsx (5)

1-11: LGTM! Clean imports and proper dependencies.

The imports are well-organized and include all necessary dependencies for the stories: theme context, responsive layout context, the component under test, and required types.


13-21: LGTM! Appropriate test fixture for responsive layout context.

The responsiveLayoutProviderValue provides sensible fixed values for testing, including the required row heights from the responsive layout constants.


23-34: LGTM! Well-structured notification fixture.

The baseNotification object properly matches the expected notification prop structure defined in INotifierComponent interface, including all required fields (text, payload with sender/type/message metadata, title, and avatar).


36-40: LGTM! Proper context provision for isolated story rendering.

The Wrapper component correctly provides both ThemeContext and ResponsiveLayoutContext to ensure the stories render with all necessary dependencies. The use of TSupportedThemes type ensures theme safety.


46-76: LGTM! Comprehensive story coverage.

The four stories provide excellent coverage:

  • DirectMessage and ChannelMessage test different subscription types
  • WithDarkTheme and WithBlackTheme verify theme support

The notification prop structure is correctly populated for each scenario. Per retrieved learnings, the isMasterDetail prop is automatically injected by the Redux-connected component and does not need to be passed explicitly in these stories.

app/containers/InAppNotification/NotifierComponent.test.tsx (1)

1-4: LGTM! Standard snapshot test pattern.

This follows the established pattern for generating snapshot tests from Storybook stories using the project's generateSnapshots utility. The test will automatically create snapshots for all four stories (DirectMessage, ChannelMessage, WithDarkTheme, WithBlackTheme) defined in the stories file.

@diegolmello diegolmello temporarily deployed to experimental_android_build April 10, 2026 18:52 — with GitHub Actions Inactive
@diegolmello diegolmello had a problem deploying to official_android_build April 10, 2026 18:52 — with GitHub Actions Error
@diegolmello diegolmello temporarily deployed to experimental_ios_build April 10, 2026 18:52 — with GitHub Actions Inactive
@diegolmello diegolmello temporarily deployed to experimental_ios_build April 10, 2026 19:37 — with GitHub Actions Inactive
@diegolmello diegolmello temporarily deployed to experimental_android_build April 10, 2026 19:37 — with GitHub Actions Inactive
@diegolmello diegolmello had a problem deploying to official_android_build April 10, 2026 19:37 — with GitHub Actions Failure
@diegolmello diegolmello had a problem deploying to upload_experimental_android April 10, 2026 20:47 — with GitHub Actions Failure
@github-actions

Copy link
Copy Markdown

Android Build Available

Rocket.Chat Experimental 4.72.0.108525

Internal App Sharing: https://play.google.com/apps/test/RQVpXLytHNc/ahAO29uNSLwBbJRuxmE7jTPvQG_2LP66l8-7AKCDYnJ-UHcpLFMpcQP8XEPMF4pxmkih6Gy_3UcqldFnK3cuyBYtXO

@github-actions

Copy link
Copy Markdown

iOS Build Available

Rocket.Chat Experimental 4.72.0.108526

@diegolmello diegolmello merged commit 2e9831c into feat.voip-lib-new Apr 10, 2026
11 of 16 checks passed
@diegolmello diegolmello deleted the chore.develop-into-voip branch April 10, 2026 20:57
diegolmello added a commit that referenced this pull request Apr 22, 2026
…/Decline (#7215)

* merge feat.voip-lib

* feat(voip): enhance call handling with UUID mapping and event listeners

* Base call UI

* feat(voip): integrate Zustand for call state management and enhance CallView UI

* feat(voip): add simulateCall function for mock call handling in UI development

* refactor(CallView): update button handlers and improve UI responsiveness

* Add pause-shape-unfilled icon

* Base CallHeader

* toggleFocus

* collapse buttons

* Header components

* Hide header when no call

* Timer

* Add use memo

* Add voice call item on sidebar

* cleanup

* Temp use @rocket.chat/media-signaling from .tgz

* cleanup

* Check module and permissions to enable voip

* Refactor stop method to use optional chaining for media signal listeners

* voip push first test

* Add VoIP call handling with pending call management

- Implemented VoIP push notification handling in index.js, including storing call info for later processing.
- Added CallKeep event handlers for answering and ending calls from a cold start.
- Introduced a new CallIdUUID module to convert call IDs to deterministic UUIDs for compatibility with CallKit.
- Created a pending call store to manage incoming calls when the app is not fully initialized.
- Updated deep linking actions to include VoIP call handling.
- Enhanced MediaSessionInstance to process pending calls and manage call states effectively.

* Remove pending store and create getInitialEvents on app/index

* Attempt to make iOS calls work from cold state

* lint and format

* Patch callkeep ios

* Temp send iOS voip push token on gcm

* Temp fix require cycle

* chore: format code and fix lint issues [skip ci]

* CallIDUUID module on android and voip push

* Add setCallUUID on useCallStore to persist calls accepted on native Android

* remove callkeep from notification

* Android Incoming Call UI POC

* Refactor VoIP handling: Migrate VoIP-related classes to a new package structure, removing deprecated modules and consolidating functionality. Update imports in MainApplication and NotificationIntentHandler to reflect changes. This cleanup enhances code organization and prepares for future VoIP feature enhancements.

* Remove VoipForegroundService

* cleanup and use caller instead of callerName

* Cleanup and make iOS build again

* Refactor VoIP handling: Remove unused event emissions for call answered and declined, switch from SharedPreferences to in-memory storage for pending VoIP call data, and update method signatures for better clarity. This cleanup enhances performance and prepares for future VoIP feature improvements.

* Refactor VoIP handling: Introduce a new VoipPayload class to encapsulate call data, streamline notification processing, and enhance method signatures across the VoIP module. This update improves code clarity and prepares for future feature enhancements.

* Migrate react-native-voip-push-notifications to VoipModule

* Refactor VoIP module: Update package structure by moving VoipTurboPackage to the main package and removing the obsolete NativeVoipSpec class. Adjust imports in MainApplication and VoipModule to reflect these changes, enhancing code organization and maintainability.

* Unify emitters

* Move CallKeep listeners from MediaSessionInstance to getInitialEvents

* Clear callkeep on endcall

* Unify getInitialEvents logic

* getInitialEvents -> MediaCallEvents

* chore: format code and fix lint issues [skip ci]

* feat(Android): Add full screen incoming call (#6977)

* feat: Update call UI (#6990)

* feat: Handle audio routing, e.g., Bluetooth headset vs. internal speaker switching (#6992)

* fix: empty space when not on call (#6993)

* feat: Dialpad (#7000)

* action: organized translations

* feat: start call (#7024)

* chore: format code and fix lint issues

* feat: Pre flight (#7038)

* action: organized translations

* feat: Receive voip push notifications from backend (#7045)

* feat: Refactor media session handling and improve disconnect logic (#7065)

* feat: Control incoming call from native (#7066)

* feat: Voice message blocks (#7057)

* feat: native accept success event (#7068)

* feat(voip): call waiting, busy detection, and videoconf blocking (#7077)

* action: organized translations

* feat(voip): tap-to-hide call controls with animations (#7078)

* feat(voip): navigate to call DM from message button and header (#7082)

* feat(voip): tablet and landscape layout (#7110)

* chore: develop into feat.voip-lib-new (RN 81 + Expo 54 + reanimated 4 + true-sheet + iOS 26) (#7114)

* chore: format code and fix lint issues

* feat(voip): android landscape layout for IncomingCallActivity (#7116)

* Update agents files

* feat(voip): Support a11y (#7106)

* Fix content cutting on iOS on some edge cases

* pods

* Ignore .worktrees on jest

* chore: Merge develop into feat.voip-lib-new (#7129)

* fix(voip): show CallKit UI when call is active in background (#7128)

* chore: Update media-signaling to 0.2.0 (#7153)

* feat(voip): migrate iOS accept/reject from DDP to REST (#7124)

* Fix icons

* feat(voip): migrate Android accept/reject from DDP to REST (#7127)

* test(voip): integration tests for CallView pipeline (#7161)

* feat(voip): display video conf provider as subtitle (#7160)

* fix(voip): CallView button grid and correct landscape/dialpad layouts (#7164)

* fix(voip): prevent stale MMKV cache on Android first-install accept

MMKVKeyManager.initialize ran in MainApplication.onCreate before the JS
engine started and opened the default MMKV file via the Tencent 1.2 JAR
when it was still empty. Tencent caches instances per-ID in a singleton
registry, so that empty-state view was held for the rest of the process.
JS later wrote credentials through react-native-mmkv (MMKV Core 2.0),
which has its own separate registry. When a VoIP push arrived,
Ejson.getMMKV() got the cached empty Tencent instance and reported
"No userId found in MMKV for server". Closing and reopening the app
cleared the cache, which is why only the very first call after install
failed.

Drop the open/verify block — the encryption key is already cached from
SecureKeystore, so no MMKV handle is needed here. The first Tencent
instance is now created inside Ejson.getMMKV() after JS has written,
so it scans the file fresh.

* fix(voip): prevent duplicate ringtone on Android incoming call (#7158)

* fix(voip): set explicit snaps for NewMediaCall bottom sheet (#7165)

* Update app/lib/services/voip/MediaSessionStore.ts

Co-authored-by: Pierre Lehnen <55164754+pierre-lehnen-rc@users.noreply.github.com>

* fix: make startVoipFork reactive to permissions-changed (#7151)

* fix(android): remove MediaProjectionService from merged manifest (#7190)

* fix(voip): Phone account creation (#7170)

* feat: add Enable Mobile Ringing toggle in user preferences (#7155)

* fix(voip): ship blockers for PushKit, licensing, outbound calls, push tokens (#7167)

* fix(android): Play Store mic discoverability, safer FCM logs, avatar auth via headers (#7171)

* fix(ios): serialize VoipService bridge statics (#7169)

* fix(voip): Android DDP thread safety and VoipPayload bundle parity (#7168)

* chore(voip): dead-code and hygiene sweep (#7174)

* refactor(voip): decouple navigateToCallRoom from Redux and backfill REST/connect tests (#7176)

* test(voip): tighten ringing endCall assertion and add VideoConf VoIP-lock saga coverage (#7177)

* fix(ios): harden VoIP DDP WebSocket client on receive failures and TLS (#7173)

* refactor(voip): MediaCallEvents Redux adapters and resetVoipState (#7178)

* refactor(voip): decouple peer autocomplete from Redux; simplify NewMediaCall (#7175)

* fix(ios): add NS_SWIFT_NAME to Challenge.runChallenge for Swift 6.2 compatibility

Swift 6.2 (Xcode 26.x / macos-26 runner) auto-renames the Objective-C
method runChallenge:didReceiveChallenge:completionHandler: to
run(_:didReceive:completionHandler:) when imported into Swift.

Add NS_SWIFT_NAME to explicitly pin the Swift import name, preventing
the compiler from applying its heuristics. This keeps the existing
Swift call site in DDPClient.swift working without changes.

* fix(ios): cancel old URLSession/webSocketTask before reconnecting in DDPClient.connect (#7197)

* fix(ios): add NSLock to nativeAcceptHandledCallIds and 10s REST timeout to handleNativeAccept (#7198)

* feat(android): create VoipCallService with FOREGROUND_SERVICE_MICROPHONE (#7199)

* fix(android): start VoipCallService on accept, stop on hangup/timeout, install end-call listener (#7200)

* fix(voip): enable DM nav for users with SIP extension (#7203)

* fix(android): handle null VoiceConnection in answerIncomingCall, notify JS (#7201)

* fix(voip): resolve closure capture ordering in handleNativeAccept (#7209)

* fix(android): integrate VoIP modules with SSL-pinned OkHttpClient (#7208)

* fix(push): gate id and voipToken behind server version checks, fix VideoConf caller extra (#7210)

* fix(voip): remove sensitive data from production logs (#7207)

* fix(android): remove isRunning guard + add double-tap guard on Accept/Decline

- VoipCallService: remove if (!isRunning) guard, call startForeground unconditionally
  (idempotent on Android, fixes Android 14+ foreground service requirement)
- IncomingCallActivity: add AtomicBoolean guard on handleAccept/handleDecline
  to prevent double-tap from triggering multiple service starts

---------

Co-authored-by: diegolmello <diegolmello@users.noreply.github.com>
Co-authored-by: Pierre Lehnen <55164754+pierre-lehnen-rc@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants