Skip to content

Conversation

@vishal2005025
Copy link
Contributor

This PR implements the behavior requested in #16660.
It hides the Android status bar when the user is in a conference and the device is in landscape mode.

Immersive mode is not reintroduced (it was removed in #16513 due to Android 15 edge-to-edge issues).
Only the status bar is hidden, and gesture navigation remains fully functional.


Changes

  • Added isInCall flag to track whether a conference is active.
  • Added updateStatusBarVisibility() helper to JitsiMeetActivity.
  • Hides the status bar only when:
    • isInCall == true, and
    • orientation == ORIENTATION_LANDSCAPE.
  • Restores the status bar when:
    • orientation becomes portrait,
    • the conference ends (onConferenceTerminated / onReadyToClose),
    • or the activity resumes outside a call.
  • Triggered updateStatusBarVisibility() from:
    • onConferenceJoined
    • onConferenceTerminated
    • onReadyToClose
    • onConfigurationChanged
    • onResume
  • Uses modern APIs:
    • WindowInsetsControllerCompat
    • WindowInsetsCompat.Type.statusBars()

@vishal2005025
Copy link
Contributor Author

@saghul please review and let me know if any changes are required.

@jitsi-jenkins
Copy link

Hi, thanks for your contribution!
If you haven't already done so, could you please make sure you sign our CLA (https://jitsi.org/icla for individuals and https://jitsi.org/ccla for corporations)? We would unfortunately be unable to merge your patch unless we have that piece :(.

@saghul
Copy link
Member

saghul commented Nov 19, 2025

I think this should be done in JS using the StatusBar component.

@vishal2005025
Copy link
Contributor Author

@saghul I’ve made the suggested changes.

  • Removed the native Android implementation from JitsiMeetActivity.

  • Moved the logic to the React Native layer as requested.

  • The StatusBar component is now used to hide the status bar only on Android, only during a conference, and only in landscape mode, matching the guidance.

Updated the PR accordingly.

Please let me know if anything else needs to be adjusted!

_toolboxVisible: isToolboxVisible(state)
_toolboxVisible: isToolboxVisible(state),
// true when the conference object exists (we are in a joined conference)
_inConference: Boolean(state['features/base/conference'].conference)
Copy link
Member

Choose a reason for hiding this comment

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

You can leave this out, since this component is k ly rendered when we are joining a conference.

_brandingStyles
] }>
{/* Control the native status bar on Android only: hide when in a call and in landscape */}
{ isAndroid
Copy link
Member

Choose a reason for hiding this comment

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

Why not do it for iOS too?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I limited it to Android because the original request focused on Android’s immersive changes, so I assumed it was Android-specific. But you're right - StatusBar works on iOS too, so I’ve updated it to apply on both platforms.

@vishal2005025
Copy link
Contributor Author

@saghul I’ve addressed both review notes:

  • Removed the Android-only condition and now use StatusBar on both iOS and Android.

  • Removed _inConference since the component only renders once the conference is joined.

Updated the code accordingly. Let me know if anything else should be refined!

Copy link
Member

@saghul saghul left a comment

Choose a reason for hiding this comment

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

@Calinteodor can you PTAL?

styles.conference,
_brandingStyles
] }>
{/* Control the native status bar on Android only: hide when in a call and in landscape */}
Copy link
Member

Choose a reason for hiding this comment

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

Update the commend about Android.

@vishal2005025
Copy link
Contributor Author

@saghul i have updated the comment.
please let me know if any changes are required!

@vishal2005025 vishal2005025 requested a review from saghul November 20, 2025 11:26
@Calinteodor
Copy link
Contributor

Calinteodor commented Nov 20, 2025

I don't think this is consistent because there are UI differences between Android and iOS. Please test on multiple iOS/Android devices.

@vishal2005025
Copy link
Contributor Author

@Calinteodor I’ve updated the logic so the StatusBar behavior applies to both Android and iOS, using a simple Platform.OS === 'android' || Platform.OS === 'ios' guard. This keeps the behavior consistent across both platforms while avoiding unintended effects on other React Native targets.
If you notice any layout issues on specific Android and iOS devices, I’m happy to adjust the logic further or make it more platform-specific.

@saghul
Copy link
Member

saghul commented Nov 21, 2025

Platform.OS cannot have any other value than android or ios in our native side of the code base, so that change is a NoOp.

@vishal2005025
Copy link
Contributor Author

@saghul Since the immersive-mode removal was tied to Android (as mentioned earlier), I’d prefer to keep this update scoped to Android only for now. To avoid introducing any unverified UI changes on iOS, I’m leaving iOS behavior untouched in this PR.
If needed, I can follow up with a separate change for iOS once its behavior is confirmed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants