Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
44efbf8
enable edge to edge on android
Rohit3523 Apr 15, 2026
b0cecb1
Changes
Rohit3523 Apr 15, 2026
7b24a58
chore: format code and fix lint issues
Rohit3523 Apr 15, 2026
1f3bb17
disable enableContentPanningGesture in few screen
Rohit3523 Apr 15, 2026
2489311
use safeareaview from rnsac in jitsi view
Rohit3523 Apr 28, 2026
f91620b
fix emoji scroll in reaction
Rohit3523 Apr 28, 2026
86af316
comment fix
Rohit3523 Apr 28, 2026
4aa8a96
test fix
Rohit3523 Apr 28, 2026
c6a2b16
Merge branch 'develop' into edge-to-edge
Rohit3523 Apr 28, 2026
282dba7
Added fontScale in useActionSheetDetents
Rohit3523 Apr 28, 2026
2248682
room view fix
Rohit3523 Apr 29, 2026
792526d
use padding bottom
Rohit3523 Apr 29, 2026
22dbdda
Added in build
Rohit3523 Apr 29, 2026
e03a879
Added react-native-navigation-bar
Rohit3523 Apr 29, 2026
ebb240b
enabled transparent nav bar
Rohit3523 Apr 29, 2026
8429fdd
remove expo-nav-bar
Rohit3523 Apr 29, 2026
e92e037
Merge branch 'develop' into edge-to-edge
Rohit3523 Apr 29, 2026
0db5c91
Merge branch 'develop' into edge-to-edge
Rohit3523 May 5, 2026
aa55241
bottom padding in room list
Rohit3523 May 5, 2026
5c96ced
more bottom padding
Rohit3523 May 5, 2026
6bc691b
making code rabbit happy
Rohit3523 May 5, 2026
c0f3f45
Merge branch 'develop' into edge-to-edge
Rohit3523 May 14, 2026
b7c1a13
Merge branch 'develop' into edge-to-edge
Rohit3523 May 20, 2026
c1d8c7e
lock file update
Rohit3523 May 20, 2026
1cd99f6
more changes
Rohit3523 May 20, 2026
6aeedcd
chore: format code and fix lint issues
Rohit3523 May 20, 2026
867761b
Merge branch 'develop' into edge-to-edge
Rohit3523 Jun 7, 2026
ed2e07c
sheet import fix
Rohit3523 Jun 7, 2026
5073b79
more changes
Rohit3523 Jun 17, 2026
b9430fe
Merge branch 'develop' into edge-to-edge
Rohit3523 Jun 18, 2026
cb4ff64
Merge branch 'develop' into edge-to-edge
Rohit3523 Jun 22, 2026
b1791a6
lint fix
Rohit3523 Jun 22, 2026
c02e058
more screens
Rohit3523 Jun 22, 2026
5102acb
Added edgeToEdgeEnabled in e2e build
Rohit3523 Jun 22, 2026
56e37d4
form container fixed
Rohit3523 Jun 22, 2026
8c55719
chore: format code and fix lint issues
Rohit3523 Jun 22, 2026
759655e
remove padding bottom from newServer
Rohit3523 Jun 22, 2026
2cb4ef8
chore: format code and fix lint issues
Rohit3523 Jun 22, 2026
d5b9a29
More screens
Rohit3523 Jun 22, 2026
1e47a38
Merge branch 'edge-to-edge' of https://github.com/RocketChat/Rocket.C…
Rohit3523 Jun 22, 2026
5b6e290
Merge branch 'develop' into edge-to-edge
Rohit3523 Jun 22, 2026
3d8ae42
Added hoistNonReactStatics in because title was not visible
Rohit3523 Jun 23, 2026
a5d357d
coderabbit suggestions
Rohit3523 Jun 23, 2026
34ad7f7
using bottom only
Rohit3523 Jun 23, 2026
c02e0f5
Restore room action style
Rohit3523 Jun 23, 2026
af5c0ab
Merge branch 'develop' into edge-to-edge
Rohit3523 Jun 23, 2026
83b4c4e
chore: format code and fix lint issues
Rohit3523 Jun 23, 2026
478a309
rerun ci
Rohit3523 Jun 24, 2026
db37a21
revert
Rohit3523 Jun 24, 2026
db91c47
Merge branch 'develop' into edge-to-edge
Rohit3523 Jun 24, 2026
1000c4e
navigation bar transparent on splash
Rohit3523 Jun 24, 2026
f864184
format
Rohit3523 Jun 24, 2026
47e7246
added android only
Rohit3523 Jun 24, 2026
247b91c
Change
Rohit3523 Jun 24, 2026
311a2d7
revert comment
Rohit3523 Jun 24, 2026
81713ca
Changes
Rohit3523 Jun 25, 2026
7e64fa3
More changes
Rohit3523 Jun 25, 2026
8a59eae
Fix extra space in list item
Rohit3523 Jun 25, 2026
fa1ede2
Fix logic
Rohit3523 Jun 25, 2026
550d31a
fix
Rohit3523 Jun 25, 2026
a5b7e25
Remove hoist
Rohit3523 Jun 25, 2026
5ab5c7b
chore: format code and fix lint issues
Rohit3523 Jun 25, 2026
309c04f
More changes
Rohit3523 Jun 25, 2026
f3a6cf4
removed unrelared change
Rohit3523 Jun 25, 2026
15c13e3
withSafeAreaInsets hook with hoist
Rohit3523 Jun 25, 2026
38688eb
chore: format code and fix lint issues
Rohit3523 Jun 25, 2026
5578c79
Merge branch 'develop' into edge-to-edge
Rohit3523 Jun 25, 2026
9959cbe
change...
Rohit3523 Jun 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
1 change: 1 addition & 0 deletions .github/actions/build-android/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ runs:
echo -e "reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64" >> ./gradle.properties
echo -e "newArchEnabled=true" >> ./gradle.properties
echo -e "hermesEnabled=true" >> ./gradle.properties
echo -e "edgeToEdgeEnabled=true" >> ./gradle.properties
echo -e "VERSIONCODE=${{ inputs.BUILD_VERSION }}" >> ./gradle.properties
echo -e "APPLICATION_ID=chat.rocket.android" >> ./gradle.properties
echo -e "BugsnagAPIKey=${{ inputs.BUGSNAG_KEY_OFFICIAL }}" >> ./gradle.properties
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/e2e-build-android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ jobs:
echo -e "APPLICATION_ID=chat.rocket.android" >> ./gradle.properties
echo -e "newArchEnabled=true" >> ./gradle.properties
echo -e "hermesEnabled=true" >> ./gradle.properties
echo -e "edgeToEdgeEnabled=true" >> ./gradle.properties
echo -e "VERSIONCODE=999999" >> ./gradle.properties
echo -e "KEYSTORE=release.keystore" >> ./gradle.properties
echo -e 'KEYSTORE_PASSWORD=${{ secrets.KEYSTORE_OFFICIAL_PASSWORD }}' >> ./gradle.properties
Expand Down
2 changes: 2 additions & 0 deletions android/app/src/main/res/values/styles.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<item name="android:colorEdgeEffect">#aaaaaa</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
<item name="android:enforceNavigationBarContrast">false</item>

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This makes the navigation bar transparent. Setting it to true makes the navigation bar partially transparent, resulting in a color mismatch.

</style>

<style name="BootTheme" parent="Theme.BootSplash">
Expand All @@ -11,6 +12,7 @@
<item name="postBootSplashTheme">@style/AppTheme</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:enforceNavigationBarContrast">false</item>
</style>

<!-- https://github.com/facebook/react-native/blob/d1ab03235cb4b93304150878d2b9057ab45bba77/ReactAndroid/src/main/res/views/modal/values/themes.xml#L5 -->
Expand Down
2 changes: 1 addition & 1 deletion android/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,4 @@ 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
edgeToEdgeEnabled=true
8 changes: 1 addition & 7 deletions app/containers/ActionSheet/ActionSheet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import {
findNodeHandle,
Keyboard,
type LayoutChangeEvent,
Platform,
useWindowDimensions,
type View
} from 'react-native';
Expand Down Expand Up @@ -34,10 +33,6 @@ const ActionSheet = memo(
const [contentHeight, setContentHeight] = useState(0);
const onCloseSnapshotRef = useRef<TActionSheetOptions['onClose']>(undefined);

// TrueSheet detects the bottom inset for Android 16 and iOS
// To avoid content hiding behind navigation bar on older Android versions
const isNewAndroid = isAndroid && Number(Platform.Version) >= 36;
const bottom = isIOS || isNewAndroid ? 0 : windowHeight * 0.03;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

truesheet handles the bottom insets by it's own when we have edgeToEdge enabled, so it's safe to remove it

const itemHeight = 48 * fontScale;

const handleContentLayout = ({ nativeEvent: { layout } }: LayoutChangeEvent) => {
Expand Down Expand Up @@ -107,7 +102,6 @@ const ActionSheet = memo(

const { detents, maxHeight, scrollEnabled } = useActionSheetDetents({
windowHeight,
bottomInset: bottom,
itemHeight,
optionsLength: data?.options?.length || 0,
snaps: effectiveSnaps,
Expand All @@ -118,7 +112,7 @@ const ActionSheet = memo(

const hasOptions = !!data?.options?.length;
const hasSnaps = !!effectiveSnaps?.length;
const disableContentPanning = data?.enableContentPanningGesture === false || (!scrollEnabled && isAndroid);

@Rohit3523 Rohit3523 Jun 24, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This part of the code was added for sheets with a small number of options. Without it, tapping or scrolling the sheet causes its height to shrink.

Screen.Recording.2026-06-25.at.3.24.22.AM.mov

const disableContentPanning = data?.enableContentPanningGesture === false;
Comment thread
Rohit3523 marked this conversation as resolved.
const isScrollable = hasOptions || (hasSnaps && !disableContentPanning);

const contentMinHeight =
Expand Down
3 changes: 1 addition & 2 deletions app/containers/ActionSheet/BottomSheetContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ const BottomSheetContent = memo(
const { bottom } = useSafeAreaInsets();
const { fontScale } = useWindowDimensions();
const height = 48 * fontScale;
const paddingBottom = isAndroid ? bottom + height : bottom;
const minHeightStyle = isAndroid || !contentMinHeight ? undefined : { minHeight: contentMinHeight };

const renderFooter = () =>
Expand All @@ -68,7 +67,7 @@ const BottomSheetContent = memo(
style={{ backgroundColor: colors.strokeExtraDark }}
keyboardDismissMode='interactive'
indicatorStyle='black'
contentContainerStyle={{ paddingBottom, backgroundColor: colors.surfaceLight }}
contentContainerStyle={{ paddingBottom: bottom, backgroundColor: colors.surfaceLight }}
Comment thread
Rohit3523 marked this conversation as resolved.
ItemSeparatorComponent={List.Separator}
ListHeaderComponent={List.Separator}
ListFooterComponent={renderFooter}
Expand Down
11 changes: 3 additions & 8 deletions app/containers/ActionSheet/useActionSheetDetents.test.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { renderHook } from '@testing-library/react-native';

import { HANDLE_HEIGHT, useActionSheetDetents } from './useActionSheetDetents';
import { useActionSheetDetents } from './useActionSheetDetents';

describe('useActionSheetDetents', () => {
const windowHeight = 1000;
Expand All @@ -9,7 +9,6 @@ describe('useActionSheetDetents', () => {
const { result } = renderHook(() =>
useActionSheetDetents({
windowHeight,
bottomInset: 0,
itemHeight: 0,
optionsLength: 0,
snaps: [0.3, '80%', 2],
Expand All @@ -26,7 +25,6 @@ describe('useActionSheetDetents', () => {
const { result } = renderHook(() =>
useActionSheetDetents({
windowHeight,
bottomInset: 16,
itemHeight: 50,
optionsLength: 20,
snaps: undefined,
Expand All @@ -44,7 +42,6 @@ describe('useActionSheetDetents', () => {
const { result } = renderHook(() =>
useActionSheetDetents({
windowHeight,
bottomInset: 10,
itemHeight: 20,
optionsLength: 3,
snaps: undefined,
Expand All @@ -54,14 +51,13 @@ describe('useActionSheetDetents', () => {
})
);

expect(result.current.detents).toEqual([0.108]);
expect(result.current.detents).toEqual([0.098]);
});

it('computes detent from content height when there are no options', () => {
const { result } = renderHook(() =>
useActionSheetDetents({
windowHeight,
bottomInset: 50,
itemHeight: 0,
optionsLength: 0,
snaps: undefined,
Expand All @@ -71,14 +67,13 @@ describe('useActionSheetDetents', () => {
})
);

expect(result.current.detents).toEqual([(300 + 50 + HANDLE_HEIGHT) / windowHeight]);
expect(result.current.detents).toEqual([300 / windowHeight]);
});

it('falls back to minimum height when no content or options', () => {
const { result } = renderHook(() =>
useActionSheetDetents({
windowHeight,
bottomInset: 0,
itemHeight: 0,
optionsLength: 0,
snaps: undefined,
Expand Down
16 changes: 5 additions & 11 deletions app/containers/ActionSheet/useActionSheetDetents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ function normalizeSnapsToDetents(snaps: (string | number)[]): number[] {

type UseActionSheetDetentsParams = {
windowHeight: number;
bottomInset: number;
itemHeight: number;
optionsLength?: number;
snaps?: (string | number)[];
Expand All @@ -39,7 +38,6 @@ function heightToDetent(height: number, screenHeight: number): number {

export function useActionSheetDetents({
windowHeight,
bottomInset,
itemHeight,
optionsLength = 0,
snaps,
Expand All @@ -48,17 +46,14 @@ export function useActionSheetDetents({
contentHeight
}: UseActionSheetDetentsParams): { detents: SheetDetent[]; maxHeight: number; scrollEnabled: boolean } {
const { fontScale } = useWindowDimensions();
const CANCEL_HEIGHT = 48 * fontScale;

return useMemo(() => {
const CANCEL_HEIGHT = 48 * fontScale;
Comment thread
diegolmello marked this conversation as resolved.
const maxHeight = windowHeight * ACTION_SHEET_MAX_HEIGHT_FRACTION;
const hasOptions = optionsLength > 0;

const maxSnap = hasOptions
? Math.min(
(itemHeight + 0.5) * optionsLength + HANDLE_HEIGHT + headerHeight + bottomInset + (hasCancel ? CANCEL_HEIGHT : 0),
maxHeight
)
? Math.min((itemHeight + 0.5) * optionsLength + HANDLE_HEIGHT + headerHeight + (hasCancel ? CANCEL_HEIGHT : 0), maxHeight)
Comment thread
diegolmello marked this conversation as resolved.
: 0;

let detents: SheetDetent[];
Expand All @@ -71,14 +66,13 @@ export function useActionSheetDetents({
detents = [0.5, ACTION_SHEET_MAX_HEIGHT_FRACTION];
scrollEnabled = true;
} else {
const measuredHeight =
optionsLength * itemHeight + HANDLE_HEIGHT + headerHeight + bottomInset + (hasCancel ? CANCEL_HEIGHT : 0);
const measuredHeight = optionsLength * itemHeight + HANDLE_HEIGHT + headerHeight + (hasCancel ? CANCEL_HEIGHT : 0);
Comment thread
diegolmello marked this conversation as resolved.

scrollEnabled = false;
detents = [heightToDetent(Math.round(measuredHeight), windowHeight)];
}
} else if (contentHeight > 0) {
const rawContentDetent = (contentHeight + bottomInset + HANDLE_HEIGHT) / windowHeight;
const rawContentDetent = contentHeight / windowHeight;
Comment thread
Rohit3523 marked this conversation as resolved.
const contentDetent = Math.min(
ACTION_SHEET_MAX_HEIGHT_FRACTION,
Math.max(ACTION_SHEET_MIN_HEIGHT_FRACTION, rawContentDetent)
Expand All @@ -90,5 +84,5 @@ export function useActionSheetDetents({
}

return { detents, maxHeight, scrollEnabled };
}, [bottomInset, contentHeight, hasCancel, headerHeight, itemHeight, optionsLength, snaps, windowHeight]);
}, [contentHeight, fontScale, hasCancel, headerHeight, itemHeight, optionsLength, snaps, windowHeight]);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
4 changes: 1 addition & 3 deletions app/containers/EmojiPicker/EmojiCategory.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { memo, type ReactElement } from 'react';
import { FlatList } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';

import { type ICustomEmojis, type IEmoji } from '../../definitions/IEmoji';
import scrollPersistTaps from '../../lib/methods/helpers/scrollPersistTaps';
Expand Down Expand Up @@ -55,15 +54,14 @@ const EmojiCategory = ({
bottomSheet = false
}: IEmojiCategoryProps): ReactElement | null => {
const items = useEmojis(category);
const { bottom } = useSafeAreaInsets();

if (!parentWidth) {
return null;
}

const numColumns = Math.trunc(parentWidth / EMOJI_BUTTON_SIZE);
const marginHorizontal = (parentWidth % EMOJI_BUTTON_SIZE) / 2;
const contentPaddingBottom = bottomSheet ? Math.max(0, MIN_BOTTOM_SHEET_BREATHING_ROOM - bottom) : undefined;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Screen.Recording.2026-06-25.at.3.32.21.AM.mov

const contentPaddingBottom = bottomSheet ? Math.max(0, MIN_BOTTOM_SHEET_BREATHING_ROOM) : undefined;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Removed bottom because it was making emoji hiding behind nav bar

Comment thread
Rohit3523 marked this conversation as resolved.

const renderItem = ({ item }: { item: IEmoji }) => <PressableEmoji emoji={item} onPress={onEmojiSelected} />;

Expand Down
10 changes: 6 additions & 4 deletions app/containers/FormContainer.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { type ReactElement } from 'react';
import { type ScrollViewProps, StyleSheet, View } from 'react-native';
import { KeyboardAwareScrollView } from 'react-native-keyboard-controller';
import { useSafeAreaInsets } from 'react-native-safe-area-context';

import sharedStyles from '../views/Styles';
import scrollPersistTaps from '../lib/methods/helpers/scrollPersistTaps';
Expand All @@ -17,7 +18,7 @@ interface IFormContainer extends ScrollViewProps {

const styles = StyleSheet.create({
scrollView: {
minHeight: '100%'
flexGrow: 1

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Replaced minHeight with flexGrow because minHeight triggered a layout height change after mount in NewServerScreen,

Before After
Screen.Recording.2026-06-25.at.3.46.54.AM.mov
Screen.Recording.2026-06-25.at.3.47.35.AM.mov

}
});

Expand All @@ -27,19 +28,20 @@ export const FormContainerInner = ({
}: {
children: (ReactElement | null)[];
accessibilityLabel?: string;
}) => (
}): ReactElement => (
Comment thread
diegolmello marked this conversation as resolved.
<View accessibilityLabel={accessibilityLabel} style={[sharedStyles.container, isTablet && sharedStyles.tabletScreenContent]}>
{children}
</View>
);

const FormContainer = ({ children, testID, showAppVersion = true, ...props }: IFormContainer) => {
const FormContainer = ({ children, testID, showAppVersion = true, ...props }: IFormContainer): ReactElement => {
Comment thread
diegolmello marked this conversation as resolved.
const { colors } = useTheme();
const { bottom } = useSafeAreaInsets();

return (
<KeyboardAwareScrollView
style={[sharedStyles.container, { backgroundColor: colors.surfaceRoom }]}
contentContainerStyle={[sharedStyles.containerScrollView, styles.scrollView]}
contentContainerStyle={[sharedStyles.containerScrollView, styles.scrollView, { paddingBottom: Math.max(24, bottom) }]}
bottomOffset={20}
{...scrollPersistTaps}
{...props}>
Expand Down
7 changes: 5 additions & 2 deletions app/containers/List/ListContainer.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { type ReactElement } from 'react';
import { ScrollView, type ScrollViewProps, StyleSheet } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';

import scrollPersistTaps from '../../lib/methods/helpers/scrollPersistTaps';

Expand All @@ -13,12 +14,14 @@ interface IListContainer extends ScrollViewProps {
children: (ReactElement | null)[] | ReactElement | null;
testID?: string;
}
const ListContainer = ({ children, ...props }: IListContainer) => {
const ListContainer = ({ children, contentContainerStyle, ...props }: IListContainer) => {
'use memo';

const { bottom } = useSafeAreaInsets();

return (
<ScrollView
contentContainerStyle={styles.container}
contentContainerStyle={[contentContainerStyle || styles.container, { paddingBottom: bottom }]}
scrollIndicatorInsets={{ right: 1 }} // https://github.com/facebook/react-native/issues/26610#issuecomment-539843444
{...scrollPersistTaps}
{...props}>
Expand Down
Loading
Loading