feat(conversationlist): support foldables, tablets, and wide screens - #6782
rapterjet2004 wants to merge 2 commits into
Conversation
…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>
📱 QA build
The QA build installs alongside a released Nextcloud app, so you can keep Downloading the file requires a GitHub account, so open this link on the |
There was a problem hiding this comment.
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
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.
| private fun isAnotherRoomCurrent(): Boolean { | ||
| val currentRoomToken = ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken | ||
| return !currentRoomToken.isNullOrEmpty() && currentRoomToken != roomToken |
| @Composable | ||
| private fun ChatPlaceholder() { |
|
i had some issues with this PR when testing, but it might be a combination with the user handling before #6787 on first login i saw this. It was solved when clicking on other conversations:
appbar is overlayed:
dialogs pop up on the left (thats okay for now, maybe something for followups later)
Whenever i click into the message input field the chat jumps down: Screen_recording_20261001_151329.webm |
|
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:
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 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. |





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.
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
🏁 Checklist
/backport to stable-xx.x🤖 AI (if applicable)