RocketChat / RocketChat/Rocket.Chat.ReactNative
feature request: in-app notification sound
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 2.4k
- Forks
- 1.5k
- Avg merge
- 1d 18h
- Merged PRs (30d)
- 90
Description
Feature Description
Currently, the mobile application allows users to select a notification sound (audioNotificationValue) which is successfully saved on the backend via rooms.saveNotification . However, this preference is not respected by the mobile client when in-app notifications are triggered.
This feature proposes enabling the mobile app to play the selected notification sound for in-app messages, ensuring that user preferences are fully applied.
The implementation should:
- Read the audioNotificationValue from room settings
- Map it to corresponding sound asset
- Trigger playback when a valid notification event occurs
Motivation and Use Case
Why this matters
Users expect their notification settings to actually affect behavior. Right now:
- Changing notification sound has no effect in the mobile app
- This creates confusion and inconsistency between backend settings and user experience
Use cases
- A user sets different sounds for different rooms → helps identify message source instantly
- A user prefers subtle vs loud sounds → improves usability in different environments
- Teams relying on notifications → need quick auditory distinction
Impact
- Fixes a broken UX expectation
- Aligns mobile behavior with backend/web capabilities
- Improves personalization and usability
Implementation Ideas
-
Fetch Presets — Backend returns a list of preset sound names (e.g.
["chime", "bell", "ping"]). Each name maps to a downloadable URL, either constructed on the client or returned directly by the API. -
Download on Demand — Each preset is shown with a Download button. On tap, the file is downloaded to
documentDirectory/notification_sounds/<name>.mp3viaexpo-file-system. Download is skipped if the file already exists locally. -
UI States — Each preset tracks its own state:
not downloaded→downloading→downloaded→selected. User can also preview before selecting. -
Private Storage — Files are saved to
documentDirectory, which is sandboxed to the app on both iOS and Android. Not visible to other apps or the device media library. -
Persist Selection — Active sound preference is saved to
AsyncStorageor the existing room settings store as the local file path. -
Playback — On in-app notification trigger, resolve the saved path and play via
expo-av. Falls back to a bundled default if the file is missing or not yet downloaded.
Is this feature available in the API or web version?
Available in Web Version
Rocket.Chat Server Version
No response
Rocket.Chat App Version
No response
Device Name
No response
OS Version
No response
Additional Context
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing how room settings provide audioNotificationValue from rooms.saveNotification and where in-app notifications are triggered in the mobile client. Review the existing sound assets and notification flow before deciding how presets, local downloads, selection, and playback fit together. Done means a selected room sound plays for valid in-app notifications, with a bundled fallback when needed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react-native, typescript
- Domain
- mobile
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100