Showcase
可删除的 Showcase tab 和 purchase-gated developer guides。
Showcase tab 是可删除的 demo catalog。它方便买家检查 starter 的能力,但正式 app 可以删掉它,同时保留核心功能。
提供什么
| Surface | 状态 | 实现 |
|---|---|---|
| Showcase tab | Removable demo | feature/showcase/ |
| Capability catalog | Removable demo | core/showcase/CapabilityCatalog.kt |
| Developer guides | Removable demo | feature/guide/ |
| Shell seams | Removable demo | 标记为 removable leaf 的代码行 |
依赖规则
feature/showcase/README.md 中的模块规则是:
Core may not name Showcase. Showcase may name core.实际含义:
| 规则 | 含义 |
|---|---|
core/ 避免 import Showcase | 删除 Showcase 后,core services、data、UI 和 feature screens 仍然工作 |
core/showcase/ 属于 leaf | 它只保存 catalog data,会跟 Showcase tab 一起删除 |
| Showcase 只 launch 现有 screens | Todos、upload、refer、paywall、permissions、account security 都保留 canonical homes |
| Leaf routes 位于 leaf 内 | ShowcaseRoutes.kt 拥有 Showcase 的 @Serializable destinations |
Todos 是边界的好例子。它的 canonical app route 是 Home stack 里的 AppRoutes.Todos。Showcase 只是把它作为第二个 demo entry 推进自己的 nested graph。
Leaf inventory
| 路径 | 角色 |
|---|---|
core/showcase/ | TemplateCapability、CapabilityCategory、CapabilityStatus、CapabilityCatalog |
feature/showcase/ | Catalog screen、nested graph、Showcase routes、bespoke demos |
feature/guide/ | Purchase-gated setup、architecture、feature、deployment guides |
src/test/.../core/showcase/ | Catalog tests |
src/test/.../feature/showcase/ | Route tests |
src/test/.../feature/guide/ | Guide content tests |
Catalog 内容
CapabilityCatalog.all 按 Foundation、Authentication、Backend Data、Commerce、Growth、Operations 分组。
| Capability | Route status | 说明 |
|---|---|---|
| Theming | Live demo | 立即给 sample surface 换色 |
| Onboarding | Live demo | 重播真实 onboarding flow |
| Haptics | Live demo | 触发各类 haptic helper |
| Guides | Live demo | 打开 purchase-gated guide index |
| Supabase auth | Live demo | Session inspector |
| Biometric lock | Device-only | Catalog 中没有直接 route |
| Account security | Live demo | 复用 AccountSecurityRoute |
| Todos | Live demo | 复用 TodosRoute |
| Storage upload | Live demo | 复用 UploadRoute |
| Paywall | Requires keys | 复用 PaywallRoute |
| Redeem code | Requires keys | 复用 RedeemCodeScreen |
| Manage subscription | Requires keys | 复用 ManageSubscriptionRoute |
| Deep links | Live demo | 通过 app 的 deep-link handler 走真实路由 |
| Referrals | Live demo | 复用 ReferScreen |
| Push notifications | Device-only | Catalog 中没有直接 route |
| App rating | Live demo | 触发 Play In-App Review flow |
| Permissions | Live demo | 复用 PermissionsScreen |
| Update gate | Configured | Catalog 中没有直接 route |
| Observability | Requires keys | Catalog 中没有直接 route |
代码里的 CapabilityStatus 是 app 内 catalog 的标签。在 hub docs 里,整个 tab 和 bundled guides 都应视为 Removable demo。
Nested graph
showcaseGraph(...) 从 shell 的一个 fenced block 中挂载。复用的 feature screens 会被推入 Showcase stack;没有自带 top bar 的 Todos 和 Permissions 会包一层 DetailScaffold。
ShowcaseGraph
-> ShowcaseHome
-> ShowcaseTheming
-> ShowcaseOnboarding
-> ShowcaseHaptics
-> ShowcaseAuthStatus
-> ShowcaseAccountSecurity
-> ShowcaseTodos
-> ShowcaseUploads
-> ShowcasePaywall
-> ShowcaseRedeemCode
-> ShowcaseManageSubscription
-> ShowcasePermissions
-> ShowcaseDeepLinks
-> ShowcaseRefer
-> ShowcaseRating
-> ShowcaseGuideIndex
-> ShowcaseGuideDocument(id)删除步骤
这是模板 Showcase README 中验证过的删除路径。
删除 leaf folders 和它们的 tests:
app/src/main/java/com/soarstarter/kotlin/core/showcase/
app/src/main/java/com/soarstarter/kotlin/feature/showcase/
app/src/main/java/com/soarstarter/kotlin/feature/guide/
app/src/test/.../core/showcase/CapabilityCatalogTest.kt
app/src/test/.../feature/showcase/ShowcaseRouteTest.kt
app/src/test/.../feature/guide/GuideContentTest.kt找到每个 seam:
grep -rn "removable leaf" app/src/main在 feature/main/MainShellScreen.kt 中,删除 Showcase imports、ShellTab.Showcase entry 和 route mapping、toShellTab arms、isShowcaseDetail()、showChrome 中的 Showcase 条件、DeepLinkDestination.Showcase case、Home 的 onOpenShowcase callback,以及 showcaseGraph(...) mount。
在 feature/main/AppDrawer.kt 中删除 ShellTab.Showcase drawer row。
在 feature/home/HomeScreen.kt 中,删除 onOpenShowcase parameters、item("inside") entry、WhatsInsideSection、CategoryTile,以及 Home-local HomeCategory / homeCategories taxonomy copy。保留 TwoColumnGrid;DemosSection 仍然会用到。
在 core/deeplink/DeepLinkResolver.kt 和 DeepLinkDestination.kt 中删除 "showcase" / Showcase case。
在 src/androidTest/.../nav/NavRouteTest.kt 中,删掉 Showcase route round-trip test 和 Showcase deep-link assertions。
可选:从 res/values/strings.xml 和 res/values-zh/strings.xml 中删掉 showcase_*、capability_*、tabs_showcase。保留 tabs_todos,因为 Todos 是 core feature。
重新构建:
./gradlew assembleDebug testDebugUnitTest删除后,tab bar 会从 Home / Component / Showcase / Me 变为 Home / Component / Me。Auth、todos、upload、paywall、refer、notifications、permissions、legal、settings 和 shared components 都会保留。
