Skip to content

feat(conversationlist): support foldables, tablets, and wide screens - #6782

Open
rapterjet2004 wants to merge 2 commits into
masterfrom
support-foldable-screens
Open

rapterjet2004 wants to merge 2 commits into
masterfrom
support-foldable-screens

Conversation

@rapterjet2004

@rapterjet2004 rapterjet2004 commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Apple released a foldable so now everyone is going to want one, ios or android. Better implement support for wider screens now than later. Most of the logic is actually in main_split_config.xml and handled by the window manager library

Use Jetpack WindowManager activity embedding to split ConversationsListActivity and ChatActivity side by side when the window is at least 600dp wide (unfolded foldables, tablets). A placeholder is shown in the chat pane while no conversation is selected. Narrow and folded screens keep the single-pane flow.

  • Chat hides the navigate-up arrow and finishes on back when embedded
  • Leaving a room no longer resets shared room/signaling state once another chat has joined a different room
  • Notifications open the conversation list below the chat
  • Dialogs show up on the left, new screens on the right
  • Functionality preserved in ChatActivity, regresses to single activity layout where windowed dependency are not available

Assisted-by: Claude Code:claude-opus-5-5

🖼️ Screenshots

Wide screen functionality

Screen_recording_20260925_134418.webm

Open vs Closed

Screen_recording_20260925_134508.webm

Defaults to single activity when windowed not available

Screenshot 2026-09-25 at 1 47 36 PM

🏁 Checklist

  • ⛑️ Tests (unit and/or integration) are included or not needed
  • 🔖 Capability is checked or not needed
  • 🔙 Backport requests are created or not needed: /backport to stable-xx.x
  • 📅 Milestone is set
  • 🌸 PR title is meaningful (if it should be in the changelog: is it meaningful to users?)

🤖 AI (if applicable)

  • The content of this PR was partly or fully generated using AI

…creens

Use Jetpack WindowManager activity embedding to split
ConversationsListActivity and ChatActivity side by side when the window is
at least 600dp wide (unfolded foldables, tablets). A placeholder is shown in
the chat pane while no conversation is selected. Narrow and folded screens
keep the single-pane flow.

- Chat hides the navigate-up arrow and finishes on back when embedded
- Leaving a room no longer resets shared room/signaling state once another
  chat has joined a different room
- Notifications open the conversation list below the chat

Assisted-by: Claude Code:claude-opus-5-5

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
@github-actions

Copy link
Copy Markdown
Contributor

📱 QA build

Download app-qa-debug.apk
QR code Open the QR code for this download
Commit 906377a
Version 6782
Available until 7 days after this build

The QA build installs alongside a released Nextcloud app, so you can keep
using your existing install while testing.

Downloading the file requires a GitHub account, so open this link on the
device you want to test on, or transfer the APK to it.

@rapterjet2004 rapterjet2004 added the 3. to review Waiting for reviews label Sep 25, 2026
@mahibi
mahibi requested a balanced review from Copilot October 1, 2026 12:43

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

The room-token ownership check can invalidate a replacement chat session when reopening the same conversation.

Review effort: Balanced
Findings: 1 High severity · 1 Low severity

Open (2)
What changed in this PR

Adds wide-screen activity embedding for foldables and tablets.

Changes:

  • Adds conversation-list/chat split rules and placeholder UI.
  • Adapts chat navigation and shared room cleanup.
  • Opens notification chats with the conversation list underneath.
File Description
main_split_config.xml Defines split and placeholder rules.
strings.xml Adds placeholder text.
ChatPlaceholderActivity.kt Implements placeholder UI.
ChatToolbarState.kt Adds navigation visibility state.
ChatToolbar.kt Conditionally displays back navigation.
ChatActivity.kt Handles embedding and room cleanup.
NextcloudTalkApplication.kt Registers embedding rules.
MainActivity.kt Builds the notification activity stack.
AndroidManifest.xml Enables embedding and declares the placeholder.
build.gradle.kts Adds Jetpack WindowManager.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +3151 to +3153
private fun isAnotherRoomCurrent(): Boolean {
val currentRoomToken = ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken
return !currentRoomToken.isNullOrEmpty() && currentRoomToken != roomToken
Comment on lines +52 to +53
@Composable
private fun ChatPlaceholder() {
@mahibi

mahibi commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

i had some issues with this PR when testing, but it might be a combination with the user handling before #6787
I can revisit the PR when it's based on the changes of 6787

on first login i saw this. It was solved when clicking on other conversations:

Bildschirmfoto vom 2026-10-01 15-09-39

appbar is overlayed:

Bildschirmfoto vom 2026-10-01 15-11-01

dialogs pop up on the left (thats okay for now, maybe something for followups later)

Bildschirmfoto vom 2026-10-01 15-14-31

Whenever i click into the message input field the chat jumps down:

Screen_recording_20261001_151329.webm

@ToteMeiSter

Copy link
Copy Markdown

Thanks for this PR. I tested it on a Huawei foldable (DEL-LX9), unfolded. The split does not appear: the list and the chat open one after the other, as on a phone.

Diagnostics on that device:

  • SplitController.splitSupportStatus = SPLIT_UNAVAILABLE
  • window extensions version 1
  • Build.VERSION.SDK_INT seen by the app: 31
  • window 707×773 dp, so the 600 dp threshold of the split rules is met
  • the rules are registered, but they are silently ignored: no error, no exception, no layout change

So on devices without Activity Embedding support from the OEM, this PR has no effect.

As an example of a fallback for such devices: https://github.com/ToteMeiSter/talk-android/tree/feat/two-pane-switch-in-place
When the window is sw600dp and the split is not available, ChatActivity shows the conversation list beside the chat (two panes inside one activity). A tap on another conversation switches the chat in place; the list and its scroll position stay. The earlier prototype is on the branch https://github.com/ToteMeiSter/talk-android/tree/test/foldable-6782 (the chat activity is recreated on each switch).

Would a fallback like this be in scope, or do you prefer to keep Activity Embedding only?

AI disclosure: the diagnostics and the fallback branch were prepared with Claude Code (claude-opus-5-5) and reviewed by the author. The author tested the fallback on the same device: two panes, switching conversations in place, rotation.

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

Labels

3. to review Waiting for reviews AI assisted

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants