Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
180 commits
Select commit Hold shift + click to select a range
f58a536
reanimated v4 and worklets
Rohit3523 Oct 12, 2025
23ec327
some alignment
Rohit3523 Oct 12, 2025
abab68f
remove unused
Rohit3523 Oct 12, 2025
1514c7e
runOnJs is now scheduleOnRN
Rohit3523 Oct 12, 2025
5f28192
jest update
Rohit3523 Oct 12, 2025
c0a4d25
chore: format code with Prettier [skip ci]
Rohit3523 Oct 12, 2025
f27e9f5
let me trigger ci
Rohit3523 Oct 12, 2025
14ecf41
revert
Rohit3523 Oct 12, 2025
58b5141
Using gorhom bottomsheet
Rohit3523 Oct 12, 2025
a624049
jest and test changes
Rohit3523 Oct 12, 2025
00af6b8
remove patch
Rohit3523 Oct 12, 2025
d181c65
fix type
Rohit3523 Oct 12, 2025
d3f516b
fix import, idk why they did this
Rohit3523 Oct 12, 2025
b2c221d
Project upgrade
Rohit3523 Jan 3, 2026
5e48723
added worklet, more package upgrade and ios changes
Rohit3523 Jan 3, 2026
261b939
react native patch for installing pod
Rohit3523 Jan 3, 2026
b64c1eb
downgrade typescript
Rohit3523 Jan 4, 2026
e1eaf31
extend tsconfig for react native
Rohit3523 Jan 4, 2026
1998f31
patch changes
Rohit3523 Jan 4, 2026
7e7f3d0
chore: format code and fix lint issues [skip ci]
Rohit3523 Jan 4, 2026
64a72f6
Remove ts extends
Rohit3523 Jan 4, 2026
998504c
Merge branch 'react-native-81' of https://github.com/RocketChat/Rocke…
Rohit3523 Jan 4, 2026
691fb63
metro config fix
Rohit3523 Jan 4, 2026
caedf9e
Merge remote-tracking branch 'upstream/develop' into reanimated-v4
Rohit3523 Jan 17, 2026
cbfe560
lint fix
Rohit3523 Jan 17, 2026
8f89ea2
chore: format code and fix lint issues [skip ci]
Rohit3523 Jan 17, 2026
65be6cf
feat: basic setup react-native-true-sheet
OtavioStasiak Feb 6, 2026
08056fb
fix: scroll height
OtavioStasiak Feb 6, 2026
b4a596f
fix: inconsistentaction sheet openning
OtavioStasiak Feb 6, 2026
76cc834
feat: add min height
OtavioStasiak Feb 6, 2026
e13c5a4
revert the bottom sheet changes
Rohit3523 Mar 6, 2026
4fe2c97
revert version
Rohit3523 Mar 6, 2026
64f4dd9
Merge branch 'develop' into reanimated-v4
Rohit3523 Mar 6, 2026
1dba726
lock fix
Rohit3523 Mar 6, 2026
caf9d5a
chore: format code and fix lint issues
Rohit3523 Mar 6, 2026
b0d5d9f
Merge branch 'develop' into test.poc-a11y-bottom-shet
OtavioStasiak Mar 6, 2026
e3ccc64
chore: use Touch instead of pressable
OtavioStasiak Mar 5, 2026
2f535e3
cleanup
OtavioStasiak Mar 6, 2026
3776737
fix: padding on list and custom actionSheet content
OtavioStasiak Mar 6, 2026
7f04181
fix: actionsheet + gesture handler compatibility
OtavioStasiak Mar 6, 2026
40d9fb9
rollback Pressable
OtavioStasiak Mar 6, 2026
f868d6d
fix: pressable emoji
OtavioStasiak Mar 6, 2026
504d378
chore: comment
OtavioStasiak Mar 6, 2026
54698cb
fix: action sheet custom content height
OtavioStasiak Mar 6, 2026
9ed2a82
fix: directory test
OtavioStasiak Mar 6, 2026
baca611
fix: emoji picker
OtavioStasiak Mar 6, 2026
fd97518
fix: close action sheet
OtavioStasiak Mar 9, 2026
deb038d
fix: bottom sheet emoji picker scroll and padding
OtavioStasiak Mar 9, 2026
6afa789
chore: format code and fix lint issues
OtavioStasiak Mar 9, 2026
3937eec
fix: bottomSheet iOS weird padding
OtavioStasiak Mar 9, 2026
acd8675
Merge branch 'develop' into test.poc-a11y-bottom-shet
OtavioStasiak Mar 9, 2026
854b508
fix: add sleep to pass tests
OtavioStasiak Mar 10, 2026
9feee82
fix: e2e tests
OtavioStasiak Mar 10, 2026
b5aaff9
Merge branch 'develop' into reanimated-v4
Rohit3523 Mar 10, 2026
6413650
conflict fix
Rohit3523 Mar 10, 2026
d0f3d39
Merge branch 'develop' into reanimated-v4
Rohit3523 Mar 10, 2026
a8cdebd
Move worklet plugin to last
Rohit3523 Mar 10, 2026
ebe4419
Merge branch 'reanimated-v4' of https://github.com/RocketChat/Rocket.…
Rohit3523 Mar 10, 2026
b054ed4
fix: roomView test
OtavioStasiak Mar 10, 2026
bcbc7fe
fix: e2e tests
OtavioStasiak Mar 10, 2026
8a0d12c
Merge branch 'develop' into test.poc-a11y-bottom-shet
OtavioStasiak Mar 10, 2026
02cd74f
fix: code improvements
OtavioStasiak Mar 11, 2026
e50f3ad
fix: update required height
OtavioStasiak Mar 11, 2026
af3098d
Update patches/@lodev09+react-native-true-sheet+3.7.3.patch
OtavioStasiak Mar 11, 2026
b7c2b2f
code improvements
OtavioStasiak Mar 11, 2026
22ff512
fix: style
OtavioStasiak Mar 11, 2026
cc271ef
chore: format code and fix lint issues
OtavioStasiak Mar 11, 2026
eb37e68
remove unused style
OtavioStasiak Mar 11, 2026
b5a87b7
clean patch package
OtavioStasiak Mar 12, 2026
a0a6854
fix: remove border rounded and fixing padding issues
OtavioStasiak Mar 12, 2026
ebd8f88
fix: list padding
OtavioStasiak Mar 12, 2026
f4defa6
adjust bottom padding
OtavioStasiak Mar 12, 2026
d66c812
fix: android Directory view Actionsheet click and Servers List render
OtavioStasiak Mar 12, 2026
7662c7f
fix: orientation and unit test
OtavioStasiak Mar 12, 2026
88e8b42
Merge branch 'develop' into test.poc-a11y-bottom-shet
OtavioStasiak Mar 12, 2026
c19cadf
chore: format code and fix lint issues
OtavioStasiak Mar 12, 2026
7946eb4
fix: remve highlight of handle
OtavioStasiak Mar 12, 2026
d6a3237
cleanup
OtavioStasiak Mar 13, 2026
6fc21de
more bottom sheet changes
Rohit3523 Mar 14, 2026
7d1f242
adjustment for android
Rohit3523 Mar 15, 2026
301b0c3
chore: format code and fix lint issues
Rohit3523 Mar 15, 2026
8daab95
rerun
Rohit3523 Mar 15, 2026
d23a7e0
revert
Rohit3523 Mar 15, 2026
7c02045
Merge branch 'test.poc-a11y-bottom-shet' of https://github.com/Rocket…
Rohit3523 Mar 15, 2026
38cd2c9
test update
Rohit3523 Mar 15, 2026
930c88a
some improvements
Rohit3523 Mar 16, 2026
d0d218b
fix test
Rohit3523 Mar 16, 2026
3bab462
test fix
Rohit3523 Mar 16, 2026
cd35041
Remove unused bottomSheet prop
Rohit3523 Mar 16, 2026
35b55df
memorise bottom sheet handle
Rohit3523 Mar 16, 2026
50e1ffc
remove unused import
Rohit3523 Mar 16, 2026
ec14b28
ios test fix
Rohit3523 Mar 16, 2026
28d9062
clear timeout
Rohit3523 Mar 16, 2026
fb40b8b
wait for animation to close
Rohit3523 Mar 16, 2026
ae5df9f
Merge branch 'develop' into test.poc-a11y-bottom-shet
Rohit3523 Mar 16, 2026
fdaf544
lint fix
Rohit3523 Mar 16, 2026
05c7b5a
chore: format code and fix lint issues
Rohit3523 Mar 16, 2026
5064359
add comment for extra style
Rohit3523 Mar 16, 2026
650104e
tap on point to hide sheet
Rohit3523 Mar 16, 2026
7144138
Merge branch 'test.poc-a11y-bottom-shet' of https://github.com/Rocket…
Rohit3523 Mar 16, 2026
8db5f90
suggested changes by copilot and copilot
Rohit3523 Mar 17, 2026
d3f23e7
chore: format code and fix lint issues
Rohit3523 Mar 17, 2026
c03938c
revert the test
Rohit3523 Mar 17, 2026
4e7cc2b
Merge branch 'test.poc-a11y-bottom-shet' of https://github.com/Rocket…
Rohit3523 Mar 17, 2026
0e45349
Change sheet min height
Rohit3523 Mar 17, 2026
dbffe97
disable content panning for android
Rohit3523 Mar 17, 2026
d33a796
chore: format code and fix lint issues
Rohit3523 Mar 17, 2026
719c192
rerun
Rohit3523 Mar 17, 2026
1e6da08
revert
Rohit3523 Mar 17, 2026
e8abcf1
test update
Rohit3523 Mar 17, 2026
8b410dc
correct cancel button height
Rohit3523 Mar 19, 2026
b81a3ae
Remove timeout to present sheet
Rohit3523 Mar 19, 2026
4a7a9fb
Merge branch 'develop' into react-native-81
Rohit3523 Mar 19, 2026
709d7d8
chore: format code and fix lint issues
Rohit3523 Mar 19, 2026
9e60c47
Remove space
Rohit3523 Mar 19, 2026
449360a
ios fix
Rohit3523 Mar 19, 2026
9b1713c
Merge branch 'react-native-81' of https://github.com/RocketChat/Rocke…
Rohit3523 Mar 19, 2026
3dc77ca
package align
Rohit3523 Mar 19, 2026
9c25b88
Added bottom sheet in dev because of storybook
Rohit3523 Mar 19, 2026
9ff7576
snap update
Rohit3523 Mar 19, 2026
28d8d4e
Test fix
Rohit3523 Mar 19, 2026
1ddf1c6
test fix
Rohit3523 Mar 5, 2026
54c2e9d
Merge branch 'develop' into reanimated-v4
Rohit3523 Mar 19, 2026
a367e02
chore: format code and fix lint issues
Rohit3523 Mar 19, 2026
2b3e51a
lock file fixed
Rohit3523 Mar 19, 2026
5756896
Merge branch 'develop' into test.poc-a11y-bottom-shet
Rohit3523 Mar 19, 2026
45d1292
increase reaction open time
Rohit3523 Mar 20, 2026
ac20a76
Merge branch 'test.poc-a11y-bottom-shet' of https://github.com/Rocket…
Rohit3523 Mar 20, 2026
cdda960
increase timeout
Rohit3523 Mar 20, 2026
cf08b03
Upgrade to RN 0.81.6
Rohit3523 Mar 20, 2026
cff02b6
Removed deprecated addWhitelistedNativeProps
Rohit3523 Mar 21, 2026
c48a040
Merge branch 'test.poc-a11y-bottom-shet' into reanimated-v4
Rohit3523 Mar 23, 2026
175bd53
Merge branch 'reanimated-v4' into react-native-81
Rohit3523 Mar 23, 2026
1d7d89d
revert to rn 0.81.5
Rohit3523 Mar 23, 2026
bf5c915
snap update
Rohit3523 Mar 23, 2026
5042da6
remove worklet from jest
Rohit3523 Mar 23, 2026
912278c
Replace thumb button with touch
Rohit3523 Mar 23, 2026
2f1ba4a
update expo-file-system import to legacy
Rohit3523 Mar 23, 2026
59cae3a
ts fix
Rohit3523 Mar 23, 2026
1529a23
patch for webview
Rohit3523 Mar 23, 2026
4ed67ee
remove rn web 13.15.0 patch
Rohit3523 Mar 23, 2026
0232059
use custom snapshot serializer
Rohit3523 Mar 23, 2026
01552c7
snapshot update
Rohit3523 Mar 23, 2026
a603042
chore: format code and fix lint issues
Rohit3523 Mar 23, 2026
e9590e3
prettier ;-;
Rohit3523 Mar 23, 2026
063ce88
Merge branch 'react-native-81' of https://github.com/RocketChat/Rocke…
Rohit3523 Mar 23, 2026
f80ab8e
pod update
Rohit3523 Mar 23, 2026
53d9751
fix for expo-file-system in android
Rohit3523 Mar 24, 2026
cdf85b0
Merge branch 'develop' into reanimated-v4
Rohit3523 Mar 24, 2026
4ff6637
pod update
Rohit3523 Mar 24, 2026
c2a6ca4
Merge branch 'develop' into react-native-81
Rohit3523 Mar 24, 2026
31d5e63
lock file fix
Rohit3523 Mar 24, 2026
cfc5f2e
enable liquid glass ui
Rohit3523 Mar 24, 2026
2116a2d
list item are not accessible for e2e, so maestro can interact with sw…
Rohit3523 Mar 24, 2026
c8a5cce
chore: format code and fix lint issues
Rohit3523 Mar 24, 2026
291143b
Merge branch 'develop' into react-native-81
Rohit3523 Mar 24, 2026
bdf46e7
Merge branch 'develop' into react-native-81
Rohit3523 Mar 24, 2026
21f08c8
revert last change
Rohit3523 Mar 24, 2026
fd24f10
Merge branch 'react-native-81' of https://github.com/RocketChat/Rocke…
Rohit3523 Mar 24, 2026
8048a08
improve logic...
Rohit3523 Mar 24, 2026
fbe735c
A temp change
Rohit3523 Mar 24, 2026
05cacf5
use rect button
Rohit3523 Mar 25, 2026
be81a47
test update
Rohit3523 Mar 25, 2026
f3c0d50
use match like in accessibility test
Rohit3523 Mar 25, 2026
6929797
ios profile test fix
Rohit3523 Mar 25, 2026
d327896
test fix
Rohit3523 Mar 25, 2026
09d63d8
Added test id in directory
Rohit3523 Mar 25, 2026
951558d
chore: format code and fix lint issues
Rohit3523 Mar 25, 2026
b4cd9b5
path fix ;-;
Rohit3523 Mar 25, 2026
ee7133d
Merge branch 'react-native-81' of https://github.com/RocketChat/Rocke…
Rohit3523 Mar 25, 2026
7f5e04d
coderabbit suggestion
Rohit3523 Mar 25, 2026
88be3cd
coderabbit suggestion
Rohit3523 Mar 25, 2026
6bb597e
Merge branch 'develop' into reanimated-v4
Rohit3523 Mar 25, 2026
03e0ae0
seekbar improvement
Rohit3523 Mar 25, 2026
a130cd1
Replace more runOnJS to scheduleOnRN
Rohit3523 Mar 25, 2026
a541660
Merge branch 'reanimated-v4' of https://github.com/RocketChat/Rocket.…
Rohit3523 Mar 25, 2026
6e35a0b
update seekbar
Rohit3523 Mar 25, 2026
49eb0d8
Merge branch 'reanimated-v4' into react-native-81
Rohit3523 Mar 25, 2026
6d0ef3a
trying to use RectButton in handle
Rohit3523 Mar 25, 2026
4688922
chore: format code and fix lint issues
Rohit3523 Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ tags:
# Show alerts as Toasts
- tapOn: 'Menu'
- tapOn: 'Accessibility & appearance'
- tapOn: 'Show alerts as. Toasts'
- tapOn: '.*Show alerts as.*'
- assertVisible: 'Toasts. Dismissed automatically. Checked'
- assertVisible: 'Dialogs. Require manual dismissal. Unchecked'
- tapOn:
Expand All @@ -37,7 +37,7 @@ tags:

# Show alerts as Dialogs
- tapOn: 'Accessibility & appearance'
- tapOn: 'Show alerts as. Toasts'
- tapOn: '.*Show alerts as.*'
- assertVisible: 'Toasts. Dismissed automatically. Checked'
- tapOn: 'Dialogs. Require manual dismissal. Unchecked'
- tapOn: 'Menu'
Expand Down
8 changes: 4 additions & 4 deletions .maestro/tests/assorted/join-from-directory.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,10 @@ tags:
id: 'directory-view-filter'
- extendedWaitUntil:
visible:
text: 'Users unselected'
id: 'directory-switch-users'
timeout: 60000
- tapOn:
text: 'Users unselected'
id: 'directory-switch-users'
- tapOn:
id: 'directory-view-search'
- inputText: ${output.otherUser.username}
Expand Down Expand Up @@ -145,10 +145,10 @@ tags:
id: 'directory-view-filter'
- extendedWaitUntil:
visible:
text: 'Teams unselected'
id: 'directory-switch-teams'
timeout: 60000
- tapOn:
text: 'Teams unselected'
id: 'directory-switch-teams'
- tapOn:
id: 'directory-view-search'
- inputText: ${output.team}
Expand Down
8 changes: 4 additions & 4 deletions .maestro/tests/assorted/profile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,8 @@ tags:
env:
id: 'profile-view-username'
- inputText: ${output.user.username + 'username'}
- tapOn: '.*Username.*' #hidekeyboard on iOS
- runFlow:
file: '../../helpers/hide-keyboard.yaml'
- scrollUntilVisible:
element:
id: 'profile-view-submit'
Expand All @@ -111,9 +112,8 @@ tags:
- tapOn:
id: 'profile-view-nickname'
- inputText: ${output.user.username + 'newnickname'}
- tapOn:
text: '.*Nickname.*'
index: 0
- runFlow:
file: '../../helpers/hide-keyboard.yaml'
- assertVisible:
id: 'profile-view-bio'
- tapOn:
Expand Down
4 changes: 2 additions & 2 deletions .maestro/tests/room/room-actions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,8 @@ tags:
from:
id: action-sheet-handle
direction: UP
- extendedWaitUntil:
visible:
- scrollUntilVisible:
element:
text: 'Star'
timeout: 60000
- tapOn:
Expand Down
9 changes: 0 additions & 9 deletions android/app/src/debug/AndroidManifest.xml

This file was deleted.

1 change: 1 addition & 0 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="${usesCleartextTraffic}"
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for usesCleartextTraffic definition in all relevant Gradle files

echo "=== Checking gradle.properties files ==="
find . -name "gradle.properties" -type f | xargs grep -l "usesCleartextTraffic" 2>/dev/null || echo "Not found in gradle.properties"

echo -e "\n=== Checking build.gradle files ==="
find . -name "build.gradle*" -type f | xargs grep -n "usesCleartextTraffic" 2>/dev/null || echo "Not found in build.gradle"

echo -e "\n=== Checking AndroidManifest.xml ==="
find . -name "AndroidManifest.xml" -type f | xargs grep -n "usesCleartextTraffic" 2>/dev/null

echo -e "\n=== Checking build.gradle files for manifestPlaceholders ==="
find . -name "build.gradle*" -type f | xargs grep -n "manifestPlaceholders" 2>/dev/null || echo "Not found"

echo -e "\n=== Listing all gradle.properties files ==="
find . -name "gradle.properties" -type f

Repository: RocketChat/Rocket.Chat.ReactNative

Length of output: 596


🏁 Script executed:

#!/bin/bash
# Examine the build.gradle file around the manifestPlaceholders definition

echo "=== Full android/app/build.gradle snippet around manifestPlaceholders ==="
sed -n '85,105p' android/app/build.gradle

echo -e "\n=== Check entire defaultConfig block ==="
sed -n '/defaultConfig/,/}/p' android/app/build.gradle | head -50

Repository: RocketChat/Rocket.Chat.ReactNative

Length of output: 1441


Add usesCleartextTraffic to manifestPlaceholders in android/app/build.gradle.

The placeholder ${usesCleartextTraffic} is used in AndroidManifest.xml but is not defined in the manifestPlaceholders map. Update android/app/build.gradle line 95 to include this variable:

manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String, usesCleartextTraffic: "false"]

Without this definition, the build will fail or the placeholder will remain unexpanded in the manifest.

🤖 Prompt for AI Agents
In android/app/src/main/AndroidManifest.xml around line 31 the placeholder
${usesCleartextTraffic} is referenced but not defined; update
android/app/build.gradle (around line 95) to add usesCleartextTraffic to the
manifestPlaceholders map so the placeholder is defined (e.g., add
usesCleartextTraffic: "false" alongside the existing BugsnagAPIKey entry) and
re-run the build.

android:hardwareAccelerated="true"
tools:replace="android:allowBackup">
<activity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ import android.content.res.Configuration
import com.facebook.react.PackageList
import com.facebook.react.ReactApplication
import com.facebook.react.ReactHost
import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative
import com.facebook.react.ReactInstanceEventListener
import com.facebook.react.ReactNativeHost
import com.facebook.react.ReactPackage
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
import com.facebook.react.bridge.ReactContext
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
import com.facebook.react.defaults.DefaultReactNativeHost
import com.facebook.react.soloader.OpenSourceMergedSoMapping
import com.facebook.soloader.SoLoader
import com.nozbe.watermelondb.jsi.WatermelonDBJSIPackage;
import com.bugsnag.android.Bugsnag
import expo.modules.ApplicationLifecycleDispatcher
Expand Down Expand Up @@ -61,15 +62,14 @@ open class MainApplication : Application(), ReactApplication {

override fun onCreate() {
super.onCreate()
SoLoader.init(this, OpenSourceMergedSoMapping)
Bugsnag.start(this)

// Initialize MMKV encryption - reads existing key or generates new one
// Must run before React Native starts to avoid race conditions
MMKVKeyManager.initialize(this)

// Load the native entry point for the New Architecture
load()
loadReactNative(this)

ApplicationLifecycleDispatcher.onApplicationCreate(this)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import java.util.concurrent.TimeUnit;

import com.reactnativecommunity.webview.RNCWebViewManager;
import expo.modules.filesystem.FileSystemModule;
import expo.modules.filesystem.legacy.FileSystemLegacyModule;
import chat.rocket.reactnative.networking.ExpoImageClient;

public class SSLPinningTurboModule extends NativeSSLPinningSpec implements KeyChainAliasCallback {
Expand Down Expand Up @@ -107,7 +107,7 @@ public void setCertificate(String name, Promise promise) {
RNCWebViewManager.setCertificateAlias(name);

// Expo File System network layer
FileSystemModule.setOkHttpClient(client);
FileSystemLegacyModule.setOkHttpClient(client);
// Expo Image network layer
ExpoImageClient.setOkHttpClient(client);
ExpoImageClient.applyToGlide(this.reactContext);
Expand Down
8 changes: 4 additions & 4 deletions android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
buildscript {
ext {
buildToolsVersion = "35.0.0"
buildToolsVersion = "36.0.0"
minSdkVersion = 24
compileSdkVersion = 35
targetSdkVersion = 35
compileSdkVersion = 36
targetSdkVersion = 36
ndkVersion = "27.1.12297006"
kotlinVersion = "2.0.21"
kotlinVersion = "2.1.20"
Comment on lines +3 to +8
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check React Native version in package.json
echo "=== React Native Version ==="
if [ -f "package.json" ]; then
  rg '"react-native":\s*"[^"]*"' package.json -o
else
  echo "package.json not found"
fi

# Check for Android-related configuration
echo -e "\n=== Android Configuration Files ==="
fd -e gradle . --max-depth 3 | head -20

Repository: RocketChat/Rocket.Chat.ReactNative

Length of output: 238


🌐 Web query:

Android SDK 36 release status and stability January 2026

💡 Result:

Short answer: As of January 4, 2026, Android SDK 36 (Android 16 / "Baklava") is a stable, production SDK (Platform Stability reached; SDK Platform Revision 1 released). Google continues to ship quarterly minor updates (QPRs) and beta builds (QPR1–QPR3 betas/QPR images) but API 36 is stable for targeting and production use; developers should test against the latest QPR/beta images for device-specific fixes and large‑screen behavior changes. [1][2][3]

Sources

  • SDK platform/revision and stability notes (Android Studio / SDK Platforms). [1]
  • Android 16 release notes and QPR beta timeline. [2]
  • Android Developers blog summary of app-impacting behavior changes for Android 16 (targeting/API expectations and opt‑outs for large screens). [3]

🌐 Web query:

Kotlin 2.1.20 release status and compatibility with React Native

💡 Result:

Short answer

  • Kotlin 2.1.20 is a released tooling update (released March 20, 2025). [1][2]
  • React Native itself has no single enforced Kotlin runtime version; compatibility depends on the Android native modules you use (many RN modules and Compose-related libraries enforce or expect specific Kotlin/Compose-compiler metadata), so moving to 2.1.20 can work but may break some native dependencies until those libraries are updated. Common workarounds are pinning a Kotlin version in android/build.gradle or waiting/upgrading native modules that require newer Kotlin. Test your app and native modules after upgrading. [1][2][3][4]

Sources

  • Kotlin 2.1.20 “What’s new” and releases. [1][2]
  • Examples of React Native Android module issues caused by Kotlin-version mismatches (GitHub/issues and community threads). [3][4]

🌐 Web query:

React Native 0.81 Android SDK 36 compileSdkVersion compatibility requirements

💡 Result:

Short answer

  • React Native 0.81 defaults to targeting Android 16 (API level 36). Set targetSdkVersion = 36. [1]
  • Your project must compile against API 36 (compileSdkVersion >= 36) if you use libraries that require API 36. [1][2]
  • To compile with API 36 you must use an Android Gradle Plugin that supports API 36 (AGP 8.10+ / AGP releases that list API 36 support) and a compatible Gradle/JDK per AGP docs. Install Android SDK Platform 36 in SDK Manager. [2][3]

Practical checklist

  1. android/app/build.gradle (or build.gradle.kts): set compileSdk = 36 and targetSdk = 36. [1]
  2. Upgrade AGP to a version that supports API 36 (e.g. AGP 8.10+), and upgrade Gradle/JDK to the versions AGP requires. [2][3]
  3. In Android Studio SDK Manager install "Android API 36 (Android 16)" platform. [1][2]
  4. Rebuild and test for Android‑16 behavior changes (edge-to-edge, back gesture, SafeAreaView deprecation). [1]

Sources

  • React Native 0.81 release notes (Android 16 / API 36 defaults). [1]
  • Android Gradle Plugin 8.10.0 compatibility (supports API 36). [2]
  • Android Developers AGP/API-level compatibility table. [3]

Verify Kotlin 2.1.20 compatibility with third-party native modules before merging.

Android SDK 36 with compileSdkVersion and targetSdkVersion 36 is officially required and stable for React Native 0.81. However, Kotlin 2.1.20 may break native module dependencies—many Android libraries and React Native modules have not yet been updated to support this version. Before proceeding, test your build and native modules with Kotlin 2.1.20, or pin an earlier Kotlin version in android/build.gradle until dependent libraries are updated.

🤖 Prompt for AI Agents
In android/build.gradle around lines 3 to 8, Kotlin is set to 2.1.20 which may
break third-party native modules; either validate compatibility by building the
app and running all native-module integration tests (clean build,
assembleRelease/Debug, and run on devices/emulators) and fix any module
compilation errors, or pin kotlinVersion to a proven-compatible release (for RN
0.81 ecosystems prefer e.g. 1.8.22) until dependents are updated; if pinning,
change kotlinVersion in this file to the chosen version and re-run Gradle sync
and full builds to confirm all native modules compile.

kotlin_version = kotlinVersion
glideVersion = "4.11.0"
supportLibVersion = "28.0.0"
Expand Down
7 changes: 6 additions & 1 deletion android/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,9 @@ BugsnagAPIKey=""

# Use this property to enable or disable the Hermes JS engine.
# If set to false, you will be using JSC instead.
hermesEnabled=true
hermesEnabled=true

# Use this property to enable edge-to-edge display support.
# This allows your app to draw behind system bars for an immersive UI.
# Note: Only works with ReactActivity and should not be used with custom Activity.
edgeToEdgeEnabled=false
Binary file modified android/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

Gradle 8.14.3 compatibility Android SDK 36

💡 Result:

Short answer: Yes — Gradle 8.14.3 can be used with Android API/SDK 36, provided you use a compatible Android Gradle Plugin (AGP) release (AGP 8.13.x is the AGP line that documents support for API level 36). Update the Gradle wrapper to 8.14.3 and use AGP 8.13.x (or a later AGP that lists API 36 support). [1][2]

References:

  • Gradle 8.14.3 release notes (upgrade the wrapper to 8.14.3). [1]
  • Android Gradle Plugin compatibility / notes (AGP 8.13 supports maximum API level 36 and pairs with Gradle 8.13+). [2]

🌐 Web query:

Gradle 8.14.3 Kotlin 2.1.20 compatibility

💡 Result:

Short answer: Kotlin 2.1.20 is not officially supported on Gradle 8.14.3. Kotlin 2.1.20’s documented “fully supported” Gradle range ends at ~8.12.1, so Gradle 8.14.3 is newer than the officially supported maximum — it may work, but you can encounter deprecation warnings or breakage. [1][2]

Recommendation: upgrade the Kotlin Gradle plugin to a 2.2.x (or later) KGP that lists Gradle 8.14 as supported (e.g., 2.2.20+ / 2.3.0 for fuller support), or use a Gradle version ≤ 8.12.1 if you must stay on Kotlin 2.1.20. [2][3]

Sources:

  • Kotlin 2.1.20 release notes (states full support through Gradle 8.11 and notes about newer Gradle possibly producing warnings). [1]
  • Kotlin Gradle plugin compatibility table (shows KGP 2.1.20–2.1.21 fully supported on Gradle 7.6.3–8.12.1). [2]
  • Gradle compatibility / Kotlin guidance (shows which Gradle / Kotlin ranges are tested; use newer KGP for Gradle 8.14). [3]

Gradle 8.14.3 requires Kotlin 2.2.x or later — current Kotlin 2.1.20 is not officially supported.

Gradle 8.14.3 is compatible with Android SDK 36 when using AGP 8.13.x or later. However, Kotlin 2.1.20 is only officially supported up to Gradle 8.12.1; using it with Gradle 8.14.3 may produce deprecation warnings or build failures. Either upgrade Kotlin to 2.2.x+ (which supports Gradle 8.14) or downgrade Gradle to 8.12.1 if staying on Kotlin 2.1.20.

🤖 Prompt for AI Agents
In android/gradle/wrapper/gradle-wrapper.properties around line 3, the project
currently pins Gradle to 8.14.3 which is incompatible with Kotlin 2.1.20; either
upgrade the Kotlin plugin to 2.2.x or later or change the distributionUrl to a
Gradle version supported by Kotlin 2.1.20 (e.g., 8.12.1). To fix, choose one: A)
update the Kotlin version in your Gradle settings/build.gradle(.kts) to 2.2.x+
(bump the kotlin plugin and any Kotlin stdlib/native deps) and rebuild; or B)
edit distributionUrl in this file to use
https://services.gradle.org/distributions/gradle-8.12.1-bin.zip to remain on
Kotlin 2.1.20. Ensure you run a clean build after making the change and update
any CI config that pins Gradle or Kotlin versions.

networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
4 changes: 2 additions & 2 deletions android/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 7 additions & 2 deletions android/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion app.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"name": "RocketChatRN"
"name": "RocketChatRN",
"plugins": ["@react-native-community/datetimepicker", "expo-web-browser"]
}
8 changes: 4 additions & 4 deletions app/containers/ActionSheet/Handle.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import { View } from 'react-native';
import { Pressable } from 'react-native-gesture-handler';
import { RectButton } from 'react-native-gesture-handler';

import styles from './styles';
import { themes } from '../../lib/constants/colors';
Expand All @@ -11,16 +11,16 @@ export const Handle = ({ onPress }: { onPress: () => void }) => {

const { theme } = useTheme();

// We should use Pressable from gesture-handler to avoid issues with the keyboard
// We should use RectButton from gesture-handler to avoid issues with the keyboard
return (
<Pressable
<RectButton
onPress={onPress}
style={styles.handle}
testID='action-sheet-handle'
accessibilityRole='button'
accessibilityLabel='Close action sheet'
accessibilityHint='Dismisses the action sheet'>
<View style={[styles.handleIndicator, { backgroundColor: themes[theme].fontSecondaryInfo }]} />
</Pressable>
</RectButton>
);
};
44 changes: 24 additions & 20 deletions app/containers/AudioPlayer/Seek.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
import React from 'react';
import { type LayoutChangeEvent, View, TextInput, type TextInputProps, TouchableNativeFeedback } from 'react-native';
import { PanGestureHandler, type PanGestureHandlerGestureEvent } from 'react-native-gesture-handler';
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
import Animated, {
type SharedValue,
runOnJS,
useAnimatedGestureHandler,
useAnimatedProps,
useAnimatedStyle,
useDerivedValue,
useSharedValue
useSharedValue,
withTiming
} from 'react-native-reanimated';
import { scheduleOnRN } from 'react-native-worklets';

import styles from './styles';
import { useTheme } from '../../theme';
import { SEEK_HIT_SLOP, THUMB_SEEK_SIZE, ACTIVE_OFFSET_X, DEFAULT_TIME_LABEL } from './constants';

Animated.addWhitelistedNativeProps({ text: true });
const AnimatedTextInput = Animated.createAnimatedComponent(TextInput);

interface ISeek {
Expand Down Expand Up @@ -50,6 +49,7 @@ const Seek = ({ currentTime, duration, loaded = false, onChangeTime }: ISeek) =>
const timeLabel = useSharedValue(DEFAULT_TIME_LABEL);
const scale = useSharedValue(1);
const isPanning = useSharedValue(false);
const contextX = useSharedValue(0);

const styleLine = useAnimatedStyle(() => ({
width: translateX.value
Expand All @@ -64,21 +64,25 @@ const Seek = ({ currentTime, duration, loaded = false, onChangeTime }: ISeek) =>
maxWidth.value = width;
};

const onGestureEvent = useAnimatedGestureHandler<PanGestureHandlerGestureEvent, { offsetX: number }>({
onStart: (_event, ctx) => {
const panGesture = Gesture.Pan()
.enabled(loaded)
.activeOffsetX([-ACTIVE_OFFSET_X, ACTIVE_OFFSET_X])
.onStart(() => {
isPanning.value = true;
ctx.offsetX = translateX.value;
},
onActive: ({ translationX }, ctx) => {
translateX.value = clamp(ctx.offsetX + translationX, 0, maxWidth.value);
scale.value = 1.3;
},
onFinish() {
scale.value = 1;
contextX.value = translateX.value;
scale.value = withTiming(1.3, { duration: 150 });
})
.onUpdate(event => {
const newX = contextX.value + event.translationX;
translateX.value = clamp(newX, 0, maxWidth.value);
})
Comment on lines +75 to +78
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Scale animation triggers repeatedly on every pan update.

The withTiming(1.3, ...) call inside .onUpdate() executes on every gesture update event (potentially 60+ times per second), restarting the 150ms animation each time. This is inefficient and may cause visual jitter.

Move the scale-up animation to .onStart() where it runs once when the gesture begins.

🔧 Proposed fix
 .onStart(() => {
   contextX.value = translateX.value;
+  scale.value = withTiming(1.3, { duration: 150 });
 })
 .onUpdate(event => {
   const newX = contextX.value + event.translationX;
   translateX.value = clamp(newX, 0, maxWidth.value);
-  scale.value = withTiming(1.3, { duration: 150 });
 })
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/containers/AudioPlayer/Seek.tsx` around lines 76 - 80, The scale
animation is being restarted on every gesture update because withTiming(1.3,
...) is called inside the .onUpdate handler; move the scale-up call into the
gesture's .onStart handler so it runs once when the gesture begins (e.g., call
scale.value = withTiming(1.3, { duration: 150 }) in .onStart), keep
translateX.value and clamp logic inside .onUpdate using contextX and maxWidth,
and ensure you restore scale (e.g., scale.value = withTiming(1) or appropriate
reset) in .onEnd/.onFinalize so the knob returns to normal after the gesture.

.onEnd(() => {
scheduleOnRN(onChangeTime, Math.round(currentTime.value * 1000));
})
.onFinalize(() => {
isPanning.value = false;
runOnJS(onChangeTime)(Math.round(currentTime.value * 1000));
}
});
scale.value = withTiming(1, { duration: 150 });
});

useDerivedValue(() => {
if (isPanning.value) {
Expand Down Expand Up @@ -118,9 +122,9 @@ const Seek = ({ currentTime, duration, loaded = false, onChangeTime }: ISeek) =>
<View style={[styles.line, { backgroundColor: colors.strokeLight }]}>
<Animated.View style={[styles.line, styleLine, { backgroundColor: colors.buttonBackgroundPrimaryDefault }]} />
</View>
<PanGestureHandler enabled={loaded} onGestureEvent={onGestureEvent} activeOffsetX={[-ACTIVE_OFFSET_X, ACTIVE_OFFSET_X]}>
<GestureDetector gesture={panGesture}>
<Animated.View hitSlop={SEEK_HIT_SLOP} style={[styles.thumbSeek, { backgroundColor: thumbColor }, styleThumb]} />
</PanGestureHandler>
</GestureDetector>
</View>
</View>
</TouchableNativeFeedback>
Expand Down
Loading