chore: visual inbox view (FAB, badge, slide-out panel) + sample wiring#737
Open
mahmoud-elmorabea wants to merge 8 commits into
Open
chore: visual inbox view (FAB, badge, slide-out panel) + sample wiring#737mahmoud-elmorabea wants to merge 8 commits into
mahmoud-elmorabea wants to merge 8 commits into
Conversation
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 Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## feat/overlay-inbox #737 +/- ##
=====================================================
Coverage ? 67.51%
Complexity ? 890
=====================================================
Files ? 157
Lines ? 4966
Branches ? 681
=====================================================
Hits ? 3353
Misses ? 1365
Partials ? 248 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
📏 SDK Binary Size Comparison ReportNo changes detected in SDK binary size ✅ |
|
|
Build available to test |
|
|
|
|
|
|
|
|
Introduce a public Compose NotificationInboxView that renders a floating button with an unread badge and a slide-out panel listing inbox messages as placeholder rows, driven by the headless inbox API (initial fetch plus live change-listener updates removed on dispose). Hidden when empty. Mount it on the kotlin_compose sample dashboard for the M1 demo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add messaginginbox to both the local-project and published-snapshot dependency branches in samples/sample-app.gradle (mirroring messaging-in-app-compose) and drop the direct project dependency from the kotlin_compose sample. Consuming the module as a local project while the rest of the SDK resolves to published snapshot artifacts put messaginginapp on the classpath twice, failing minifyReleaseWithR8 with a duplicate-class error in the AGP build matrix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ines dep Use ModuleMessagingInApp.instance().inbox() (public @JvmStatic entry point in the in-app module) instead of CustomerIO.instance().inAppMessaging().inbox(). CustomerIO lives in :datapipelines, so the visual-inbox module no longer needs to depend on it — the module now depends only on :messaginginapp, mirroring the iOS module's use of MessagingInApp.shared.inbox. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sponsive panel, java_layout wiring - Drop internal MessagingInbox placeholder object; the public composable is the module API - Rename NotificationInboxView -> NotificationInboxOverlay (file + composable + KDoc + call sites) - Panel uses responsive width (fill - 16dp margins, capped at 480dp) instead of fixed 300dp - Mount NotificationInboxOverlay as a ComposeView overlay on the java_layout dashboard Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add JVM unit tests for the overlay's pure logic — unread badge count
(unreadInboxCount) and placeholder row title derivation (inboxTitle) —
extracting both as internal functions. The headless NotificationInbox is a
final class with an internal constructor, so the Compose/UI behavior is not
unit-tested here (no fakeable seam without a UI-test runtime); this mirrors
the iOS module's coverage depth.
Also: swap the FAB Text("Inbox") for a bell icon to match iOS (adds
material-icons-core), add accessibility content descriptions to the button,
badge, and row indicator, and add a usage KDoc snippet. Adds an internal
inbox-injection overload, keeping the public composable signature unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The empty-module placeholder object was replaced by NotificationInboxOverlay in this branch; its placeholder unit test (carried in from the merged skeleton) no longer compiles and is superseded by NotificationInboxOverlayTest. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fa47a0f to
5ddf5cd
Compare
|
|
Render the floating button regardless of inbox contents so the inbox stays reachable when empty. The unread badge remains conditional on unread count; an empty inbox opens to an empty panel. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
|
Replace Icons.Filled.Notifications (which required androidx.compose.material:material-icons-core — no longer transitive via material 1.7+) with a bundled vector drawable for the FAB bell, and remove the dependency. Temporary placeholder icon until the final asset lands. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
mahmoud-elmorabea
added a commit
that referenced
this pull request
Jun 18, 2026
|
|
Contributor
Author
|
The CI failure is caused by issues not related to inbox, I apply a fix for them here #743 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
MBL-1796: Build floating entry button
Note
Not the final inbox UI. This overlay is a temporary developer utility — a visual surface over the headless inbox API used to manually exercise and validate Jist rendering in the following PRs. The layout, placeholder text rows, and temporary bell icon are intentionally minimal and are not the final inbox experience.
Adds a public Compose
NotificationInboxView(floating button, unread badge, animated slide-out panel of placeholder message rows) driven by the headless inbox API, and mounts it on the kotlin_compose sample dashboard for the M1 demo.Screenshot — java_layout sample
🤖 Generated with Claude Code
Note
Low Risk
New opt-in UI module and sample wiring only; inbox data still comes from the existing headless API with no auth or persistence changes.
Overview
Introduces a public Compose
NotificationInboxOverlayin:messaginginbox, replacing the internal skeleton with a Milestone 1 visual layer on the headlessNotificationInboxAPI (getMessages, change listeners with optionaltopic, listener cleanup on dispose).The overlay adds a floating action button (placeholder bell drawable), an unread badge driven by
unreadInboxCount, and an animated slide-out panel with placeholder text rows (inboxTitlefrom message properties). Gradle picks up full Compose UI/Material dependencies; the module API surface is recorded inmessaginginbox.api. Placeholder module tests are swapped for unit tests on the pure helpers.Sample apps depend on
messaginginboxviasample-app.gradle: kotlin_compose mounts the composable on the dashboard; java_layout adds a full-screenComposeViewplusNotificationInboxOverlayView.mount()for Java interop.Reviewed by Cursor Bugbot for commit 743f5ee. Bugbot is set up for automated code reviews on this repo. Configure here.