Skip to content

feat(navigation): floating 3+1 chrome, lighter type, App Links - #949

Merged
ashwkun merged 1 commit into
masterfrom
feat/floating-3-plus-1-navbar
Jul 25, 2026
Merged

feat(navigation): floating 3+1 chrome, lighter type, App Links#949
ashwkun merged 1 commit into
masterfrom
feat/floating-3-plus-1-navbar

Conversation

@ashwkun

@ashwkun ashwkun commented Jul 25, 2026

Copy link
Copy Markdown
Member

Closes #944

Summary

  • Replaces the classic four-tab bottom bar with a Google Photos–style floating chrome: Home / Explore / Library live in one connected pill, and Lore is a separate circular action with a gentle aurora when Home content is ready.
  • Softens Google Sans Flex app-wide so bold UI no longer feels heavy, defaults lettering to Round, and keeps Crisp / Soft / Round under Appearance.
  • Makes HTTPS share App Links verify cleanly with Play (HTTPS-only autoVerify), after fixing Digital Asset Links on aswin.cx with the Play App signing certificate.
  • Drops Roborazzi from the merge CI gate (goldens remain local-optional).

Motivation

Listeners spend most of their time moving between Home, Explore, Library, and Lore. The old equal-weight tab bar treated Lore like every other destination and competed with the mini-player for space. We want navigation that feels modern, leaves more room for content, and still lets people who prefer the classic bar switch back.

Typography was reading too heavy on many screens (especially on HyperOS), and share links from the web were failing Play domain ownership checks, so tapping a share URL often opened a browser or app picker instead of boxlore.

What changed

Navigation & shell

  • New Floating bottom chrome (default): 3-tab pill + Lore FAB.
  • Classic navbar remains available in Settings → Appearance → Navigation.
  • Mini-player geometry follows the selected navigation style so collapsed player and nav don’t clash.
  • Tab stack / padding updated so content clears the floating chrome.

Typography & lettering

  • Central GoogleSansWeight scale: lighter emphasis (roughly 400 / 400 / 500 / 600 instead of heavy Medium/SemiBold/Bold).
  • Native Flex typeface caching so weights stay distinct on OEM skins (e.g. HyperOS).
  • Default lettering preset: Round (was Soft). Existing saved Soft/Crisp choices are kept.

Briefing / playback polish

  • Briefing playback/duration helpers tightened so story playback behaves more predictably.

App Links

  • Manifest App Links are HTTPS-only for aswin.cx /boxlore/share and /boxcast/share.
  • Live https://aswin.cx/.well-known/assetlinks.json updated with Play App signing (+ upload) SHA-256 for cx.aswin.boxlore (deployed separately on Firebase Hosting).

CI / maintainer

  • Removed :feature:home:verifyRoborazziDebug from unit-tests.yml.
  • Detekt cleanups around nav chrome / player geometry helpers.

Behavior & compatibility

Area Before After
Bottom nav Four equal tabs Floating 3+1 (default); Classic optional
Pref N/A navigation_style: floating (default) / classic
Lettering default Soft (ROND 50) Round (ROND 100); stored Soft/Crisp unchanged
Share App Links http + https autoVerify; DAL fingerprints mismatched Play HTTPS-only autoVerify; DAL includes Play App signing cert
Roborazzi CI gate Local optional only

Older clients keep working; users need an updated install for verified App Links opens and the new chrome. Play Console may still show stale boxcast activity rows until a store build with this manifest is published.

Impact (required)

User impact — pick exactly one

  • user-impact-high
  • user-impact-medium
  • user-impact-low
  • no-user-impact

Listener impact — required when user-impact-high or user-impact-medium

What changes in the user’s life:

Opening boxlore now feels different at the bottom of the screen. Instead of four same-looking tabs, Home, Explore, and Library sit together in a floating pill, while Lore stands alone as its own circular button—closer to how people already think about “browse vs Lore.” There’s more breathing room above the chrome, and the mini-player lines up with whichever navigation style you pick.

If you like the old bar, nothing is forced forever: Settings → Appearance → Navigation still offers Classic.

Text across the app is calmer. Titles and buttons don’t shout as hard; the default lettering is a rounder Google Sans Flex look (you can still choose Crisp or Soft). On phones that used to flatten bold vs regular (some HyperOS devices), weights should finally look different again.

Sharing an episode or show link should open straight into boxlore more often after this version is on the store and Play re-checks the domain—fewer “open in browser / pick an app” dead ends for https://aswin.cx/boxlore/share… links.

Daily Briefing playback is a bit more reliable when starting or scrubbing stories.

Backend — optional

  • backend-change

(Hosting DAL on aswin.cx was updated outside this Android PR; no boxlore backend/API change.)

Test plan

  • Built / installed locally (./gradlew installDebug) when UI or app behavior changed
  • Local CI-equivalent suite green without Roborazzi (arch guards, detekt, unit tests, Kover, lint, dependencyGuard)
  • Manual: Floating nav — switch Home / Explore / Library / Lore; confirm Lore aurora after Home settles
  • Manual: Appearance → Navigation → Classic, then back to Floating; mini-player shape matches
  • Manual: Appearance → Lettering Crisp / Soft / Round; cold start with no pref shows Round
  • Manual: open a share URL https://aswin.cx/boxlore/share… on a device with this build (and after Play re-verify)
  • After Play upload: Console Web links / domain ownership for aswin.cx + /boxlore/share
  • Required checks green before merge

Notes (optional)

  • Review PNGs floating-nav-review.png / legacy-navbar-review.png left untracked on purpose.
  • Firebase Hosting deploy for assetlinks.json already live on aswin.cx; Play may need a new store build before Web links rows refresh away from legacy cx.aswin.boxcast.MainActivity.
  • Roborazzi goldens under screenshots/baselines/ can still be recorded locally; they are no longer merge-blocking.

Ship Google Photos-style Home/Explore/Library pill + Lore FAB with a Classic fallback, soften Google Sans Flex emphasis and default lettering to Round, and make share App Links HTTPS-only so Play domain verification matches the live DAL.
@ashwkun ashwkun added the user-impact-high Listeners clearly notice this change — prioritize README and notification label Jul 25, 2026
@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 1e93d680-c037-493e-b6b5-a08e936c1d4a

📥 Commits

Reviewing files that changed from the base of the PR and between 3da34fe and ea2712b.

📒 Files selected for processing (155)
  • .cursor/rules/pr-impact-labels.mdc
  • .github/PULL_REQUEST_TEMPLATE.md
  • .github/workflows/unit-tests.yml
  • AGENTS.md
  • ARCHITECTURE.md
  • app/README.md
  • app/src/main/AndroidManifest.xml
  • app/src/main/java/cx/aswin/boxlore/navigation/NavGraphLibrarySettingsDestinations.kt
  • app/src/main/java/cx/aswin/boxlore/navigation/NavGraphTabDestinations.kt
  • app/src/main/java/cx/aswin/boxlore/navigation/NavGraphWiring.kt
  • app/src/main/java/cx/aswin/boxlore/surveys/internal/ui/ConfirmationScreen.kt
  • app/src/main/java/cx/aswin/boxlore/surveys/internal/ui/NumberRating.kt
  • app/src/main/java/cx/aswin/boxlore/surveys/internal/ui/QuestionHeader.kt
  • app/src/main/java/cx/aswin/boxlore/ui/BoxLoreAppRoot.kt
  • app/src/main/java/cx/aswin/boxlore/ui/LoreQueueConflictDialog.kt
  • app/src/main/java/cx/aswin/boxlore/ui/announcement/AnnouncementBodyParser.kt
  • app/src/main/java/cx/aswin/boxlore/ui/announcement/FeatureAnnouncementOverlay.kt
  • app/src/main/java/cx/aswin/boxlore/ui/announcement/InAppAnnouncementDialog.kt
  • app/src/main/java/cx/aswin/boxlore/ui/libraryimport/OpmlAskCompletedContent.kt
  • app/src/main/java/cx/aswin/boxlore/ui/libraryimport/OpmlImportProgressContent.kt
  • app/src/test/java/cx/aswin/boxlore/navigation/BottomNavPresentationTest.kt
  • core/designsystem/README.md
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/component/BoxLoreNavigationBar.kt
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/components/ExpressivePlayButton.kt
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/components/NewEpisodeBadge.kt
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/components/PrivacyConsentDialog.kt
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/components/ShareBottomSheet.kt
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/components/SleepTimerPopup.kt
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/theme/FontRoundness.kt
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/theme/GoogleSansFlexTypeface.kt
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/theme/Theme.kt
  • core/designsystem/src/main/java/cx/aswin/boxlore/core/designsystem/theme/Typography.kt
  • core/designsystem/src/test/java/cx/aswin/boxlore/core/designsystem/component/FloatingNavigationChromeTest.kt
  • core/designsystem/src/test/java/cx/aswin/boxlore/core/designsystem/theme/GoogleSansFlexTypefaceTest.kt
  • core/designsystem/src/test/java/cx/aswin/boxlore/core/designsystem/theme/TypographyFlexFamilyTest.kt
  • core/prefs/README.md
  • core/prefs/src/main/java/cx/aswin/boxlore/core/prefs/FontRoundnessAxis.kt
  • core/prefs/src/main/java/cx/aswin/boxlore/core/prefs/UserPreferenceKeys.kt
  • core/prefs/src/main/java/cx/aswin/boxlore/core/prefs/UserPreferencesRepository.kt
  • core/prefs/src/test/java/cx/aswin/boxlore/core/prefs/FontRoundnessAxisTest.kt
  • core/prefs/src/test/java/cx/aswin/boxlore/core/prefs/NavigationStylePreferenceTest.kt
  • core/prefs/src/test/java/cx/aswin/boxlore/core/prefs/UserPreferencesRepositoryTest.kt
  • docs/TESTING.md
  • docs/screenshots/README.md
  • feature/briefing/README.md
  • feature/briefing/src/main/java/cx/aswin/boxlore/feature/briefing/BriefingPlaybackLogic.kt
  • feature/briefing/src/main/java/cx/aswin/boxlore/feature/briefing/BriefingRelatedEpisodes.kt
  • feature/briefing/src/main/java/cx/aswin/boxlore/feature/briefing/BriefingScreen.kt
  • feature/briefing/src/main/java/cx/aswin/boxlore/feature/briefing/BriefingStoryCard.kt
  • feature/briefing/src/main/java/cx/aswin/boxlore/feature/briefing/BriefingStoryComponents.kt
  • feature/briefing/src/main/java/cx/aswin/boxlore/feature/briefing/BriefingViewModel.kt
  • feature/briefing/src/test/java/cx/aswin/boxlore/feature/briefing/BriefingPlaybackLogicTest.kt
  • feature/briefing/src/test/java/cx/aswin/boxlore/feature/briefing/BriefingStoryTextTest.kt
  • feature/explore/README.md
  • feature/explore/src/main/java/cx/aswin/boxlore/feature/explore/CuriosityCardStack.kt
  • feature/explore/src/main/java/cx/aswin/boxlore/feature/explore/ExploreScreen.kt
  • feature/explore/src/main/java/cx/aswin/boxlore/feature/explore/LearnHistoryScreen.kt
  • feature/explore/src/main/java/cx/aswin/boxlore/feature/explore/LearnScreen.kt
  • feature/explore/src/main/java/cx/aswin/boxlore/feature/explore/components/ExploreBrowseHeaders.kt
  • feature/explore/src/main/java/cx/aswin/boxlore/feature/explore/components/ExploreCards.kt
  • feature/explore/src/main/java/cx/aswin/boxlore/feature/explore/components/ExploreEmptyStates.kt
  • feature/explore/src/main/java/cx/aswin/boxlore/feature/explore/components/ExploreTabSelectors.kt
  • feature/home/README.md
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/AdaptiveLearnerDebugSection.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/DebugScreen.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/HomeScreen.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/BecauseYouLikeSection.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/ChangeRecommendationPodcastSheet.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/CuratedEpisodeCard.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/DailyBriefingCard.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/DenseEpisodeRows.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/FeaturedCuratedCard.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/ForYouSection.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/HeroGridCard.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/HomeSectionHeaders.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/LibrarySection.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/LibrarySectionMixtape.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/PodcastCard.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/components/ReviewSheet.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/settings/SettingsScreen.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/settings/components/SettingsRows.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/settings/components/SettingsScaffold.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/settings/dialogs/ResetAnalyticsDialog.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/settings/pages/AboutSettingsPage.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/settings/pages/AppearanceSettingsPage.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/settings/pages/LibrarySettingsPage.kt
  • feature/home/src/main/java/cx/aswin/boxlore/feature/home/settings/pages/PrivacySettingsPage.kt
  • feature/info/README.md
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/CrossPromotionCard.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/EpisodeDescriptionCard.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/EpisodeInfoScreen.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/PodcastInfoScreen.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/EpisodeActionRail.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/EpisodeInfoHero.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/EpisodeListItem.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/EpisodeOptionsSheet.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/EpisodeRecommendationSection.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/EpisodeToolbar.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/PodcastInfoChrome.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/PodcastInfoMetadataChips.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/PodcastPlaybackSettingsSheet.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/components/PodcastTrailerCards.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/sections/EpisodeInfoRecommendationCards.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/sections/PodcastInfoDescriptionSection.kt
  • feature/info/src/main/java/cx/aswin/boxlore/feature/info/sections/PodcastInfoHeroSection.kt
  • feature/library/README.md
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/AutoDownloadSettingsScreen.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/HistoryScreen.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/LibraryScreen.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/LikedEpisodesScreen.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/PlayAllFab.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/SmartDownloadsSettingsScreen.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/SubscriptionsScreen.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/downloads/DownloadModels.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/downloads/DownloadedEpisodesListScreen.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/downloads/DownloadedShowEpisodesScreen.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/downloads/SmartDownloadsDashboard.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/history/HistoryActivityGraphs.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/history/HistoryEmptyState.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/history/HistoryInsightCarousel.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/history/HistoryListItems.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/history/HistoryStatsCards.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/history/HistorySuccessList.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/subscriptions/SubscriptionRows.kt
  • feature/library/src/main/java/cx/aswin/boxlore/feature/library/subscriptions/SubscriptionTabs.kt
  • feature/onboarding/README.md
  • feature/onboarding/src/main/java/cx/aswin/boxlore/feature/onboarding/AiChatInputPanel.kt
  • feature/onboarding/src/main/java/cx/aswin/boxlore/feature/onboarding/AiChatOnboardingScreen.kt
  • feature/onboarding/src/main/java/cx/aswin/boxlore/feature/onboarding/AiOnboardingComponents.kt
  • feature/onboarding/src/main/java/cx/aswin/boxlore/feature/onboarding/AiSuggestionCards.kt
  • feature/onboarding/src/main/java/cx/aswin/boxlore/feature/onboarding/AiSuggestionRowCard.kt
  • feature/onboarding/src/main/java/cx/aswin/boxlore/feature/onboarding/AiSuggestionsScreen.kt
  • feature/onboarding/src/main/java/cx/aswin/boxlore/feature/onboarding/GenreOnboardingScreen.kt
  • feature/onboarding/src/main/java/cx/aswin/boxlore/feature/onboarding/OnboardingScreen.kt
  • feature/onboarding/src/main/java/cx/aswin/boxlore/feature/onboarding/SearchOnboardingScreen.kt
  • feature/player/README.md
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/ChaptersSheet.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/QueueScreen.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/SeekDurationIcon.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/TranscriptView.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/ControlDeck.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/ControlDeckQuickActions.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/FullPlayerTopBar.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/FullPlayerV2Content.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/FullPlayerVideoOverlay.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/InlineTranscriptHero.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/MiniPlayerV2.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/NotesPreviewCard.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/PlayerSeekbar.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/PlayerSheetScaffold.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/UpNextCard.kt
  • feature/player/src/main/java/cx/aswin/boxlore/feature/player/v2/logic/PlayerLayoutLogic.kt
  • feature/player/src/test/java/cx/aswin/boxlore/feature/player/v2/logic/PlayerLayoutLogicTest.kt
  • maestro/README.md
  • maestro/smoke_home_visible.yaml

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added Floating and Classic navigation styles, configurable in Appearance settings.
    • Improved navigation, mini-player, and bottom-sheet spacing across layouts.
    • Added smoother Lore launch animation after Home content loads.
    • Enhanced briefing playback controls, including story seeking and pause/resume behavior.
    • HTTPS-only app links are now supported.
  • Style

    • Updated typography throughout the app with consistent Google Sans Flex weights.
    • Refined floating navigation and mini-player visuals, sizing, and animations.
    • Changed the default lettering roundness to Round.
  • Documentation

    • Clarified navigation, deep-linking, typography, and optional local screenshot verification guidance.

Walkthrough

This pull request adds floating and classic navigation styles, persisted navigation-style preferences, centralized Google Sans typography and variable-font handling, updated player and briefing behavior, and revised CI documentation so Roborazzi screenshot verification is local and optional.

Changes

Navigation and app chrome

Layer / File(s) Summary
Navigation style contract and rendering
core/designsystem/..., core/prefs/...
Adds floating/classic navigation styles, chrome metrics, route selection helpers, persisted preference sanitization, and navigation-style-aware bottom spacing.
Application integration
app/src/main/..., feature/explore/..., feature/library/..., feature/home/...
Wires navigation style selection, Home readiness callbacks, system inset handling, route ordering, and navigation-aware player positioning through the app shell.

Typography and UI styling

Layer / File(s) Summary
Font construction and theme defaults
core/designsystem/src/main/java/.../theme/*
Adds cached Google Sans Flex typefaces with optional optical-size and width axes, centralizes weight mappings, and changes the default roundness to Round (100).
Feature typography migration
app/src/main/..., feature/*/src/main/...
Replaces many direct Compose font weights with design-system GoogleSansWeight values across surveys, Home, Explore, Briefing, Info, Library, Onboarding, and Player UI.

Briefing and player behavior

Layer / File(s) Summary
Briefing playback actions
feature/briefing/src/main/..., feature/briefing/src/test/...
Introduces explicit start, pause, resume, and seek actions, formats listen duration text, and adds unit coverage for action resolution and duration formatting.
Player geometry and controls
feature/player/src/main/..., feature/player/src/test/...
Makes mini-player geometry navigation-style-driven, replaces fixed mini-player sizing with computed geometry, and adjusts mini-player control shapes, accessibility descriptions, and interaction animation timing.

CI and documentation

Layer / File(s) Summary
Roborazzi merge-gate policy
.github/*, docs/*, AGENTS.md, ARCHITECTURE.md, feature/*/README.md
Removes Roborazzi verification from merge CI instructions and workflow execution while documenting optional local screenshot recording and comparison.
App links and smoke-flow documentation
app/README.md, app/src/main/AndroidManifest.xml, maestro/*
Documents HTTPS Digital Asset Links requirements, restricts app links to HTTPS, and expands navigation visibility assertions and selector guidance.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
  • 🛠️ update changelog

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

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
1 New issue

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@ashwkun
ashwkun merged commit b2bc49f into master Jul 25, 2026
4 of 6 checks passed
@ashwkun
ashwkun deleted the feat/floating-3-plus-1-navbar branch July 25, 2026 08:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

user-impact-high Listeners clearly notice this change — prioritize README and notification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Floating Navbar & font Picker

1 participant