跳到主要内容

One UI 7 Android Overlay 适配器

viewcompose-overlay-oneui7-android 是 One UI Root 使用的显式、无 Material Android 呈现 Adapter。它把中立 viewcompose-overlay-android 传输与 ViewCompose 自有的 One UI Snackbar、底部对话框 Presenter 组合起来;不会新增独立的 setOneUi7UiContent API,也不会改变 Android 根 Context 的构造方式。

产物与稳定性​

dependencies {
implementation("com.viewcompose:viewcompose-oneui7:0.1.0-alpha02")
implementation("com.viewcompose:viewcompose-overlay-oneui7-android:0.1.0-alpha02")
}

下方显式装配会调用 OneUi7Theme、OneUi7ThemeDefaults 和 One UI 组件,因此应用源码需要直接 声明 viewcompose-oneui7。Overlay Adapter 仍把该模块作为 Runtime 实现依赖,Host 构造函数只暴露 UI Foundation 的共享 Token 类型;仅使用 Host 默认 Token 快照的代码不需要引用 One UI API。

  • 稳定性:Alpha。
  • 平台:Android Library,minSdk 24、compileSdk 36、Java 11 Bytecode。
  • API 依赖:UI Contract 与 UI Foundation,因为 AndroidOverlayHost 暴露共享 Overlay 契约和 Attribution 模型。
  • 实现依赖:Host Android、中立 Android Overlay 传输、Android Renderer Shape Bridge 和 viewcompose-oneui7;禁止依赖 Google Material Components 与 AppCompat。

API 质量:AndroidOverlayHost 是 Q3 Root 集成 API。规范 KDoc 与可编译 Sample 定义 Window Ownership、主线程约束、清理、Token 快照和 Attribution 契约。

显式 One UI Root 装配​

One UI 不需要在原生 View 创建前解析特定主题的 Android Context,因此应用继续使用中立 setUiContent,并传入显式 overlayHostFactory,用当前 OneUi7ThemeDefaults Token 快照构造 本模块的 AndroidOverlayHost。把 Host 的 integrationAttribution 传回 OneUi7Theme;未安装 Adapter 时,主题会把 Overlay 能力报告为 Unsupported,安装后只升级当前 Root 实际拥有的能力。 仅把产物放入 Classpath 不会改变行为。

Presenter 行为​

Adapter 保留中立 Android Dialog、PopupWindow、Toast、嵌套 Render Session 与 Session 清理,并 新增:

  • 使用随高度变化的全圆角 Pill 外形、One UI Token 快照、24dp Window Margin、Action Target、 无障碍感知 Timeout 和单次终止 Callback 的队列化原生 Snackbar;
  • 使用 One UI Surface Geometry、Scrim、System Bar 处理、嵌套 ViewCompose 内容、外部/返回关闭 策略与 Drag Handle 下滑关闭的底部 Dialog。

首个底部 Dialog Presenter 只有一个内在展开状态。它为了协议兼容接收 skipPartiallyExpanded,但不暴露中间半展开状态,因此该选项不会制造 Presenter 并未拥有的行为。

底部 Dialog 会在首次展示与每次变化的同 Key 更新时应用 Foundation 已解析的完整外观快照。容器 颜色与逻辑 Shape 会替换初始 One UI Fallback Chrome;Scrim 为零时清除过时的 Dim Flag;导航栏 策略会区分精确颜色与恢复已捕获平台默认值及 Android Q+ Contrast Enforcement。Adapter 的 Margin、 Drag Handle 与手势仍属于 One UI 自有呈现细节。

integrationAttribution 把 Dialog 与 Popup 报告为捕获的 One UI 内容,Snackbar 与 Modal Bottom Sheet 报告为 Equivalent,Android Toast 是显式的 Degraded 平台 Fallback。所有 Root、Window、 Callback 与清理都限制在 Android 主线程,Host 不得超过已附着 Render Root 的生命周期。

相关文档​

生成式参考位于 viewcompose-overlay-oneui7-android API 目录。

兼容性说明​

这是该 Adapter 的首个发布线。只使用中立 Dialog、Popup 与 Toast 的现有 One UI Root 仍然有效; 只有需要 One UI Snackbar 或底部 Dialog 呈现时,才添加本产物及显式 Host 装配。

当前检出版本的清理协议​

未发布实现会尝试清理每个拥有的句柄或委托,即使此前的关闭操作抛出异常。终态回调前先移除所有权, 完成全部尝试后抛出首个异常,其余异常放入 suppressed。重复清理不重试失败的终态回调,其他会话仍保持所有权。 瞬时反馈 Presenter 失败会释放活动队列槽;子会话释放失败时仍尝试关闭原生窗口。 该协议不保证一个失败的外部平台 API 已成功释放资源。

审查中的双浮层失败探针只尝试了第一个浮层,并遗留第二个。候选版本尝试两个且不保留任何条目 (尝试数 1→2,遗留数 1→0),结论为改进。四项 Foundation 清理回归在 854 项独立 JVM 测试中通过。 CompositeOverlayCleanupTest 和 Android Presenter 测试负责集成验证。窗口可见性和平台失败行为仍需真机验收; 后续保留这些回归,并验证子会话异常时的原生关闭行为。

最终 Gradle 集成验证通过本模块 4 项测试,失败和跳过均为零。中立实现定向执行 CompositeOverlayCleanupTest;设计系统实现包含现有 Presenter 和宿主归属测试。 这些结果补充 Foundation 异常探针的集成证据,不代表覆盖每种外部平台失败或真机窗口路径。