Skip to content

regression: black empty status bar on Android 14 - #7749

Merged
diegolmello merged 1 commit into
developfrom
diegolmello/android-statusbar
Oct 1, 2026
Merged

diegolmello merged 1 commit into
developfrom
diegolmello/android-statusbar

Conversation

@diegolmello

@diegolmello diegolmello commented Sep 30, 2026 •

Copy link
Copy Markdown
Member

Proposed changes

On Android 14 the status bar showed as a black strip with no clock or icons, and content started below it instead of drawing edge-to-edge.

This is a regression from the React Native 0.86 / Expo SDK 57 upgrade (#7691):

  • expo-status-bar 3.0.9 rendered the React Native StatusBar with translucent defaulting to true and forwarded backgroundColor, which the app set to surfaceNeutral.
  • expo-status-bar 57 no longer passes translucent or backgroundColor, and the upgrade removed the backgroundColor prop from the app's StatusBar wrapper.
  • React Native then falls back to its defaults and sends setTranslucent(false) and a black setColor to the native StatusBar module.
  • React Native's own module ignores both under edge-to-edge, but react-native-keyboard-controller replaces that module while KeyboardProvider is mounted and applies them: it adds a status-bar-height top margin to the content and paints the bar black.

The StatusBar container now renders the React Native StatusBar directly with translucent, a transparent background and the matching bar style.

Issue(s)

https://rocketchat.atlassian.net/browse/NATIVE-1701

How to test or reproduce

  1. Open the app on an Android 14 (API 34) device or emulator and log in.
  2. Check the top of the rooms list: the header draws behind the status bar, and the clock and icons are visible.
  3. Open the drawer, then Profile, and check the same.
  4. Repeat on Android 16 (API 36).

Screenshots

Before, Android 14 (API 34):

Black empty status bar on Profile, Android 14

After, Android 14 (API 34), launch from splash to the rooms list:

statusbar-launch-api34.mp4

After, Android 16 (API 36), launch from splash to the rooms list:

statusbar-launch-api36.mp4

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

expo-status-bar is no longer imported by the app after this change.

On Android 16 (API 36) the status bar looked the same before and after this change, so the black bar is visible only on Android 14.

Summary by CodeRabbit

  • Style
    • Updated the status bar to use a transparent background and translucent display, allowing app content to extend behind it.
    • Status bar content now uses light or dark styling to match the existing appearance setting.

@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: cc4181ba-1bbe-412f-a06c-c961b086ad41

📥 Commits

Reviewing files that changed from the base of the PR and between 86ff7e5 and 1cd1990.

📒 Files selected for processing (1)
  • app/containers/StatusBar.tsx

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 7 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: ESLint and Test / run-eslint-and-test
  • GitHub Check: E2E Shard Preflight
🔇 Additional comments (1)
app/containers/StatusBar.tsx (1)

1-1: LGTM!

Also applies to: 17-17


Walkthrough

StatusBar now imports from react-native. It keeps the animated setting and uses a translucent, transparent status bar with the selected barStyle suffixed by -content.

Changes

Status Bar

Layer / File(s) Summary
React Native status bar props
app/containers/StatusBar.tsx
The component now imports StatusBar from react-native. It uses translucent, a transparent background, and a barStyle value suffixed with -content instead of the Expo style prop.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~5 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 1cd19

The status-bar change preserves the prior Android translucency behavior. No actionable merge-blocking risk remains.

Security Architecture Review

Security architecture risk: 🔵 Low · up to 1cd19

The change is limited to status-bar appearance, with no demonstrated new attacker access or weakened security control. Its effect extends across the app, and restoration of shared appearance state during navigation remains unverified.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The demonstrated exposure is application-wide native appearance while the root component is mounted, with an additional writer on the password-change screen. The changed function is a UI component, not a demonstrated remotely invocable entrypoint.

Trust Boundaries and Controls

  • inferred — The reviewed flow changes how application-selected appearance reaches the native status-bar implementation. It does not demonstrate attacker-controlled input crossing into credential access or authorization; visual composition uncertainty alone does not establish control bypass.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main change: fixing the black, empty status bar on Android 14. It is concise and specific.
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.

Warning

Errors were encountered while retrieving linked issues.

Errors (1)
  • JIRA integration encountered authorization issues. Please disconnect and reconnect the integration in the CodeRabbit UI.

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.

@diegolmello
diegolmello deployed to approve_e2e_testing September 30, 2026 20:47 — with GitHub Actions Active
@diegolmello
diegolmello deployed to android_build September 30, 2026 20:49 — with GitHub Actions Active
@diegolmello diegolmello changed the title fix: black empty status bar on Android 14 regression: black empty status bar on Android 14 Sep 30, 2026

@OtavioStasiak OtavioStasiak 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.

LGTM

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown

iOS Build Available

Rocket.Chat 4.78.0.109841

@diegolmello
diegolmello force-pushed the diegolmello/android-statusbar branch from 1cd1990 to 028d715 Compare October 1, 2026 13:16
@diegolmello
diegolmello merged commit 0eb94b2 into develop Oct 1, 2026
6 of 7 checks passed
@diegolmello
diegolmello deleted the diegolmello/android-statusbar branch October 1, 2026 13:17

This branch is waiting to be deployed

3 waiting deployments
ios_build — 028d715a Waiting Oct 1, 2026 by diegolmello via Build iOS / Hold #6913
android_build — 028d715a Waiting Oct 1, 2026 by diegolmello via Build Android / Hold #6913
approve_e2e_testing — 028d715a Waiting Oct 1, 2026 by diegolmello via E2E Hold #6913
upload_android — 1cd19900 Deployed Oct 1, 2026 by diegolmello via Build Android / Upload Hold #6905
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.

2 participants