Skip to content

chore(inbox): web-parity interaction (dismiss, auto-hide, relative dates, no-template skip, hovering panel)#751

Open
mahmoud-elmorabea wants to merge 1 commit into
feat/overlay-inboxfrom
inbox-web-parity
Open

chore(inbox): web-parity interaction (dismiss, auto-hide, relative dates, no-template skip, hovering panel)#751
mahmoud-elmorabea wants to merge 1 commit into
feat/overlay-inboxfrom
inbox-web-parity

Conversation

@mahmoud-elmorabea

@mahmoud-elmorabea mahmoud-elmorabea commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Web-parity follow-up for the Android visual notification inbox overlay: tap-to-dismiss (Jist dismiss action), auto-hide the panel/bell when the list empties, web-aligned relative dates, skip messages with no template, JistMode.Auto dark mode, 0.32 scrim, and a hovering-card panel (margins on all sides, rounded corners, max width 480dp).

Deferred (not in this PR): real-url / deep-link navigation (#12), host action callback API (#13), full chrome theming from branding.patterns.inbox (#17), custom/SVG bell asset.

🤖 Generated with Claude Code


Note

Medium Risk
Touches user-visible inbox UI and message deletion paths with dedupe guards; deep-link handling remains deferred, limiting scope but changes how dismiss and empty-state behave in production.

Overview
Brings the Android visual notification inbox overlay closer to web/iOS for interaction and chrome.

Dismiss & lifecycle: Jist actions with behavior: "dismiss" (plus demo fallbacks) call new VisualInboxController.dismissMessage, which deletes via VisualInbox.markMessageDeleted with the same dedupe/in-flight guards as mark-opened. When the list empties or visibility drops, a LaunchedEffect auto-collapses the panel and hides the bell.

Rendering: InboxJistDecoder.formatRelativeDate feeds Jist’s formatDate hook (OS-localized relative time). Rows without a decoded template are skipped and logged. JistView uses JistMode.Auto for system light/dark.

UI: Drops Compose Material (custom bell, badge, spinner, text/dividers). Panel is a hovering card (margins, 12dp corners, 480dp max width, lighter 0.32 scrim), top-aligned slide-in, no in-panel header/close. Theme colors resolve from Android theme attributes with dark-mode fallbacks.

Reviewed by Cursor Bugbot for commit 79a919b. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

Copy link
Copy Markdown

Sample app builds 📱

Below you will find the list of the latest versions of the sample apps. It's recommended to always download the latest builds of the sample apps to accurately test the pull request.


@codecov

codecov Bot commented Jun 23, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 5.62500% with 151 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (feat/overlay-inbox@1155d88). Learn more about missing BASE report.

Files with missing lines Patch % Lines
...ustomer/messaginginbox/NotificationInboxOverlay.kt 0.00% 143 Missing ⚠️
...ava/io/customer/messaginginbox/InboxJistDecoder.kt 0.00% 6 Missing and 1 partial ⚠️
...customer/messaginginbox/VisualInboxOverlayState.kt 90.00% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@                  Coverage Diff                  @@
##             feat/overlay-inbox     #751   +/-   ##
=====================================================
  Coverage                      ?   66.71%           
  Complexity                    ?      995           
=====================================================
  Files                         ?      170           
  Lines                         ?     5567           
  Branches                      ?      793           
=====================================================
  Hits                          ?     3714           
  Misses                        ?     1569           
  Partials                      ?      284           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

Copy link
Copy Markdown
  • java_layout: inbox-web-parity (1782232014)

@github-actions

Copy link
Copy Markdown
  • kotlin_compose: inbox-web-parity (1782232013)

@github-actions

Copy link
Copy Markdown

📏 SDK Binary Size Comparison Report

No changes detected in SDK binary size ✅

@github-actions

Copy link
Copy Markdown

Build available to test
Version: inbox-web-parity-SNAPSHOT
Repository: https://central.sonatype.com/repository/maven-snapshots/

@github-actions

Copy link
Copy Markdown
  • kotlin_compose: inbox-web-parity (1782238686)

@github-actions

Copy link
Copy Markdown
  • java_layout: inbox-web-parity (1782238746)

@github-actions

Copy link
Copy Markdown
  • kotlin_compose: inbox-web-parity (1782246227)

@github-actions

Copy link
Copy Markdown
  • java_layout: inbox-web-parity (1782246236)

…es, no-template skip, hovering panel)

Brings the Android visual notification inbox overlay closer to the web/iOS
reference model:

- onAction-driven dismiss: a Jist `dismiss` action (name == "dismiss" or data
  url == "#dismiss") removes the message via the data layer; other real urls
  are a logged no-op (real-url nav deferred).
- Auto-close the panel + hide the bell when the inbox becomes non-visible or
  the message list empties (e.g. after the last dismiss).
- Relative dates: a Jist formatDate hook renders web-aligned relative time
  ("just now", "2h ago", "3d ago", ...); the decoder still feeds raw dates.
- No-template fallback: skip + error-log a message whose type has no decoded
  template (was rendering a blank row).
- Dark mode: pass JistMode.Auto for content dark-mode support.
- Scrim parity: dim to 0.32 black (matches iOS).
- Hovering-card panel: margins on all sides (16dp top/horizontal, 88dp bottom
  to clear the bell), max width 480dp, 12dp rounded corners.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
  • kotlin_compose: inbox-web-parity (1782293653)

@github-actions

Copy link
Copy Markdown
  • java_layout: inbox-web-parity (1782293644)

@mahmoud-elmorabea mahmoud-elmorabea changed the title feat(inbox): web-parity interaction (dismiss, auto-hide, relative dates, no-template skip, hovering panel) chore(inbox): web-parity interaction (dismiss, auto-hide, relative dates, no-template skip, hovering panel) Jun 24, 2026
@mahmoud-elmorabea mahmoud-elmorabea marked this pull request as ready for review June 24, 2026 13:28
@mahmoud-elmorabea mahmoud-elmorabea requested a review from a team as a code owner June 24, 2026 13:28

@cursor cursor Bot 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 79a919b. Configure here.

LaunchedEffect(state.isVisible, state.messages.isEmpty()) {
if (!state.isVisible || state.messages.isEmpty()) {
panelExpanded = false
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Blank panel after template filter

Medium Severity

This change skips inbox rows whose type has no Jist template, but auto-hide and empty UI still key off state.messages from the data layer. If every message lacks a template, the bell stays visible, the panel can stay open with a blank list (not EmptyState), and nothing is dismissible from the overlay.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 79a919b. Configure here.

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.

1 participant