Skip to content

Polish sample apps: new icon, splash screen, bottom bar#6422

Draft
andremion wants to merge 5 commits intodevelopfrom
chore/sample-app-polish
Draft

Polish sample apps: new icon, splash screen, bottom bar#6422
andremion wants to merge 5 commits intodevelopfrom
chore/sample-app-polish

Conversation

@andremion
Copy link
Copy Markdown
Contributor

@andremion andremion commented May 7, 2026

Goal

Three SDK Testing Feedback items, all in the sample apps:

Implementation

App icon — both Compose and XML samples

  • New launcher artwork (Stream V plus the platform badge) in WebPs across all 5 density buckets, replacing the legacy PNGs.
  • Adaptive icon: foreground on transparent, background @color/ic_launcher_background (solid black, per Figma).
  • ic_launcher-playstore.png regenerated.
  • Drop the obsolete drawable/ic_launcher_foreground.xml VectorDrawable (no longer referenced).

Splash screen — both samples

  • Add androidx.core:core-splashscreen and a dedicated Theme.App.Splash extending Theme.SplashScreen.
  • windowSplashScreenBackground = @color/ic_launcher_background, windowSplashScreenAnimatedIcon = @mipmap/ic_launcher, postSplashScreenTheme = AppTheme.
  • Each launcher activity (StartupActivity × demo + e2e in the Compose sample, HostActivity in the XML sample) calls installSplashScreen() before super.onCreate().

Bottom bar — Compose sample

  • AppBottomBar wraps its Row in a Column with a 1.dp borderCoreSubtle HorizontalDivider above.
  • AppBottomBarOptionTile takes selectedIcon + unselectedIcon and picks based on isSelected. Chats: ic_message_bubble_fill / ic_message_bubble. Threads: ic_thread_fill / ic_thread.
  • Mentions tab dropped from the bar — see decision below.

Important

Decisions worth flagging for review

  • Splash via AndroidX back-port, not the framework attribute. android:windowSplashScreenBackground is API 31+. With minSdk = 21, the AndroidX library is required to deliver a consistent splash across all supported devices. Setup is forward-compatible with future animated splashes (only windowSplashScreenAnimatedIcon would change).
  • Mentions tab removed from the bottom bar. SwiftUI demo (stream-chat-swiftui/DemoAppSwiftUI/DemoAppSwiftUIApp.swift) renders only Chats + Threads. The Mentions feature itself stays public in the SDK (ChatListContentMode.Mentions is still exported); only the sample's bottom-bar entry is removed. ChatsActivity's reverse mapping collapses ChatListContentMode.Mentions and .Channels into AppBottomBarOption.CHATS as a graceful fallback.
  • No tab-switch animation. SwiftUI's default TabView swaps tab content instantly, as does Android's native BottomNavigationView. Adding Crossfade / AnimatedContent would diverge from both platforms' baselines.
  • Monochrome adaptive layer omitted. The themed-icon variant needs a single-color silhouette asset. Lint flags MonochromeLauncherIcon as informational; non-blocking. Trivial follow-up once the silhouette is exported.

🎨 UI Changes

XML Compose
Screen_recording_20260507_084830.webm
Screen_recording_20260507_090617.webm

Testing

  1. Install the Compose sample on a device.
    • Expected: home screen shows the new brand artwork on a black mask, no clipping on any launcher shape.
  2. Install the XML sample.
    • Expected: same icon treatment, with the Android-platform badge instead of the Compose badge.
  3. Cold-start the Compose sample on an API 31+ device.
    • Expected: black splash with the brand icon centered, then routes to login or chats list.
  4. Repeat step 3 on an API 21–30 device or emulator.
    • Expected: same splash — the AndroidX back-port covers older API levels.
  5. Repeat steps 3–4 for the XML sample.
  6. In the Compose sample channel list (ChannelsActivity).
    • Expected: a 1 dp subtle divider above the bottom bar (same token as the divider under the top header).
  7. Tap between Chats and Threads tabs.
    • Expected: only two tabs visible (no Mentions). The active tab uses the filled icon variant; the inactive uses the line variant.

Summary by CodeRabbit

  • New Features

    • Added animated splash screen on app startup.
  • Style

    • Updated app icon launcher background color from blue to black.
  • Refactor

    • Removed mentions tab from bottom navigation; now displays only Chats and Threads options.
    • Updated app icon branding and references.
  • Chores

    • Added AndroidX core splash screen library dependency.

Replace legacy launcher PNGs with WebPs across all density buckets and refresh
the adaptive-icon foreground / Play Store icon to match the latest brand
artwork. The adaptive background stays solid black to align with the Figma
spec. Drop the obsolete VectorDrawable foreground that's no longer referenced
now that the foreground is a WebP at every density.

The monochrome layer is intentionally left out for now; can be added later
when a single-color silhouette asset is produced.
@andremion andremion added the pr:improvement Improvement label May 7, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

PR checklist ✅

All required conditions are satisfied:

  • Title length is OK (or ignored by label).
  • At least one pr: label exists.
  • Sections ### Goal, ### Implementation, and ### Testing are filled (or ignored for dependabot PRs).

🎉 Great job! This PR is ready for review.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

SDK Size Comparison 📏

SDK Before After Difference Status
stream-chat-android-client 5.82 MB 5.82 MB 0.00 MB 🟢
stream-chat-android-ui-components 11.02 MB 11.02 MB 0.00 MB 🟢
stream-chat-android-compose 12.37 MB 12.38 MB 0.00 MB 🟢

@andremion andremion force-pushed the chore/sample-app-polish branch from 42c08e2 to ec2dd2c Compare May 7, 2026 08:23
@andremion
Copy link
Copy Markdown
Contributor Author

@CodeRabbit review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 7, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 7, 2026

Review Change Stack

Walkthrough

This PR integrates AndroidX core splash screen support into two sample applications, removes the mentions feature from the compose-sample bottom navigation bar, and updates the launcher icon assets to use the mipmap namespace with a black background color instead of blue.

Changes

Splash Screen Integration & Bottom Navigation Refactoring

Layer / File(s) Summary
Dependencies & Version Catalog
gradle/libs.versions.toml, stream-chat-android-compose-sample/build.gradle.kts, stream-chat-android-ui-components-sample/build.gradle.kts
AndroidX core splash screen library version 1.0.1 is added to the version catalog and declared as a dependency alias; both sample apps declare the dependency.
Splash Screen Theming
stream-chat-android-compose-sample/src/main/res/values/themes.xml, stream-chat-android-ui-components-sample/src/main/res/values/themes.xml
New Theme.App.Splash style extends Theme.SplashScreen and configures splash window background, animated icon, and post-splash theme for both samples.
Manifest & Splash Installation
stream-chat-android-compose-sample/src/main/AndroidManifest.xml, stream-chat-android-compose-sample/src/demo/java/...StartupActivity.kt, stream-chat-android-compose-sample/src/e2e/java/...StartupActivity.kt, stream-chat-android-ui-components-sample/src/main/AndroidManifest.xml, stream-chat-android-ui-components-sample/src/main/kotlin/...HostActivity.kt
Launch activities assign Theme.App.Splash; installSplashScreen() is called at the start of onCreate before super.onCreate() in all startup activities.
Bottom Navigation Refactoring
stream-chat-android-compose-sample/src/main/java/...feature/channel/list/ChannelsActivity.kt, stream-chat-android-compose-sample/src/main/java/...ui/chats/ChatsActivity.kt, stream-chat-android-compose-sample/src/main/java/...ui/component/AppBottomBar.kt, stream-chat-android-compose-sample/src/main/res/values/strings.xml
Mentions option removed: AppBottomBarOption enum narrowed to {CHATS, THREADS}; AppBottomBar now renders only two tiles; MentionsContent() composable deleted; AppBottomBarOptionTile signature changed to accept selectedIcon and unselectedIcon; related imports and viewmodel references removed.
Launcher Icon Assets
stream-chat-android-compose-sample/src/main/res/drawable/ic_launcher_foreground.xml (deleted), stream-chat-android-compose-sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml, stream-chat-android-compose-sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml, stream-chat-android-compose-sample/src/main/res/values/ic_launcher_background.xml, stream-chat-android-ui-components-sample/src/main/res/drawable/ic_launcher_foreground.xml (deleted), stream-chat-android-ui-components-sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml, stream-chat-android-ui-components-sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml, stream-chat-android-ui-components-sample/src/main/res/values/ic_launcher_background.xml
Drawable ic_launcher_foreground.xml files deleted from both samples; adaptive icon references migrated from @drawable/ic_launcher_foreground to @mipmap/ic_launcher_foreground; launcher background color changed from #005FFF to #000000 in both samples.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Poem

🐰 Splash screens bloom at startup's gate,
Mentions fade, but CHATS await,
Icons shift from blue to black,
Theme and tiles don't look back!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically summarizes the three main changes: new icon, splash screen, and bottom bar polish.
Description check ✅ Passed The description includes all required template sections: Goal, Implementation with detailed subsections, UI Changes with videos, Testing steps, and Contributor Checklist with items marked appropriately.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/sample-app-polish

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@gradle/libs.versions.toml`:
- Line 16: Update the core splashscreen dependency entry by changing the version
string for the key androidxCoreSplashScreen in gradle/libs.versions.toml from
"1.0.1" to "1.2.0" so the project uses androidx.core:core-splashscreen:1.2.0;
ensure no other references to the old version remain and run a build to verify
compatibility.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: c36f9a41-013b-4dab-a8c0-134ed16646d0

📥 Commits

Reviewing files that changed from the base of the PR and between 75cafde and ec2dd2c.

⛔ Files ignored due to path filters (22)
  • stream-chat-android-compose-sample/src/main/ic_launcher-playstore.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-hdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-hdpi/ic_launcher_round.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-mdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-mdpi/ic_launcher_round.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-xhdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-xhdpi/ic_launcher_round.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxhdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/ic_launcher-playstore.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-hdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-hdpi/ic_launcher_round.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-mdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-mdpi/ic_launcher_round.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xhdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xhdpi/ic_launcher_round.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxhdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png is excluded by !**/*.png
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png is excluded by !**/*.png
📒 Files selected for processing (52)
  • gradle/libs.versions.toml
  • stream-chat-android-compose-sample/build.gradle.kts
  • stream-chat-android-compose-sample/src/demo/java/io/getstream/chat/android/compose/sample/ui/StartupActivity.kt
  • stream-chat-android-compose-sample/src/e2e/java/io/getstream/chat/android/compose/sample/ui/StartupActivity.kt
  • stream-chat-android-compose-sample/src/main/AndroidManifest.xml
  • stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt
  • stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt
  • stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/component/AppBottomBar.kt
  • stream-chat-android-compose-sample/src/main/res/drawable/ic_launcher_foreground.xml
  • stream-chat-android-compose-sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  • stream-chat-android-compose-sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  • stream-chat-android-compose-sample/src/main/res/mipmap-hdpi/ic_launcher.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-hdpi/ic_launcher_round.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-mdpi/ic_launcher.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-mdpi/ic_launcher_round.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-xhdpi/ic_launcher.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxhdpi/ic_launcher.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
  • stream-chat-android-compose-sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
  • stream-chat-android-compose-sample/src/main/res/values/ic_launcher_background.xml
  • stream-chat-android-compose-sample/src/main/res/values/strings.xml
  • stream-chat-android-compose-sample/src/main/res/values/themes.xml
  • stream-chat-android-ui-components-sample/build.gradle.kts
  • stream-chat-android-ui-components-sample/src/main/AndroidManifest.xml
  • stream-chat-android-ui-components-sample/src/main/kotlin/io/getstream/chat/ui/sample/feature/HostActivity.kt
  • stream-chat-android-ui-components-sample/src/main/res/drawable/ic_launcher_foreground.xml
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-hdpi/ic_launcher.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-hdpi/ic_launcher_round.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-mdpi/ic_launcher.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-mdpi/ic_launcher_round.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xhdpi/ic_launcher.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxhdpi/ic_launcher.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
  • stream-chat-android-ui-components-sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
  • stream-chat-android-ui-components-sample/src/main/res/values/ic_launcher_background.xml
  • stream-chat-android-ui-components-sample/src/main/res/values/themes.xml
💤 Files with no reviewable changes (4)
  • stream-chat-android-ui-components-sample/src/main/res/drawable/ic_launcher_foreground.xml
  • stream-chat-android-compose-sample/src/main/res/values/strings.xml
  • stream-chat-android-compose-sample/src/main/res/drawable/ic_launcher_foreground.xml
  • stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt

Comment thread gradle/libs.versions.toml Outdated
andremion added 4 commits May 7, 2026 09:45
Add a dedicated Theme.App.Splash extending Theme.SplashScreen so the new
brand splash works on every supported API level (minSdk = 21) instead of
only API 31+. Background uses ic_launcher_background and the animated icon
points at the launcher mipmap; postSplashScreenTheme hands control back to
AppTheme once the splash dismisses. Both demo and e2e StartupActivity
flavors call installSplashScreen() before super.onCreate().

This mirrors the pattern the team plans to use for the upcoming Lottie
splash animation: only the windowSplashScreenAnimatedIcon needs to swap,
the rest of the wiring stays.
Replace legacy launcher PNGs with WebPs across all density buckets and
refresh the adaptive-icon foreground / Play Store icon to match the latest
brand artwork (V + Android-platform badge). The adaptive background stays
solid black to align with the Figma spec. Drop the obsolete VectorDrawable
foreground that's no longer referenced now that the foreground is a WebP
at every density.

The monochrome layer is intentionally left out for now; can be added later
when a single-color silhouette asset is produced.
Add a dedicated Theme.App.Splash extending Theme.SplashScreen so the new
brand splash works on every supported API level (minSdk = 21) instead of
only API 31+. Background uses ic_launcher_background and the animated icon
points at the launcher mipmap; postSplashScreenTheme hands control back to
AppTheme once the splash dismisses. HostActivity calls installSplashScreen()
before super.onCreate().

Mirrors the wiring already in place for the Compose sample so both samples
share the same splash treatment for the upcoming Lottie animation.
Three changes to AppBottomBar (and consumers):

- Add a 1.dp borderCoreSubtle top border above the bottom bar (Notion #1).
  Bar now has the same divider treatment as the top header.
- Switch icon variants on selection (Notion #2). Active tab uses the filled
  icon variant (e.g. ic_message_bubble_fill, ic_thread_fill); inactive uses
  the line variant. AppBottomBarOptionTile gains a selectedIcon /
  unselectedIcon pair instead of a single icon.
- Drop the Mentions tab to mirror the SwiftUI demo app's two-tab layout
  (Chats + Threads). Mentions feature stays available in the SDK; only the
  sample's bottom-bar entry is removed. ChannelsActivity loses the now-dead
  MentionsContent / mentionListViewModel and four imports. ChatsActivity's
  reverse mapping collapses ChatListContentMode.Mentions and .Channels into
  AppBottomBarOption.CHATS as a graceful fallback.

No tab-switch animation — matches SwiftUI's default TabView behaviour and
native Android BottomNavigationView, keeping the two SDKs feeling the same.
@andremion andremion force-pushed the chore/sample-app-polish branch from ec2dd2c to ffa84f8 Compare May 7, 2026 08:45
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented May 7, 2026

@andremion
Copy link
Copy Markdown
Contributor Author

andremion commented May 7, 2026

Warning

The icon is being revisited by the design team.
Keeping this PR as a draft for now

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

Labels

pr:improvement Improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant