# [Feature] 在流体云 / Live Updates 中显示 AI 运行进度 ## 需求描述 在 Android 16 (API 36) 及支持 Live Updates 的设备上,希望 Operit 的 AI 运行状态能够利用系统的 **Live Updates(OPPO / ColorOS 称之为「流体云」)** 能力,在状态栏胶囊 / 灵动岛区域直接显示当前 AI 进度 (待机 / 处理中 / 已暂停),而不需要用户下拉通知栏。 ## 场景 - AI 正在思考或连续调用工具时,用户切到其它应用,希望仍能看到进度。 - 语音唤醒 / 外部录音 / 悬浮全屏等「暂停」状态下,能直观反映状态。 ## 现状 `AIForegroundService` 已有常驻通知(`NOTIFICATION_ID = 1`),但: 1. Manifest 未声明 `POST_PROMOTED_NOTIFICATIONS`; 2. 通知未使用标准样式(`ProgressStyle`),也未调用 `setRequestPromotedOngoing(true)`; 3. 因此该通知不满足 `hasPromotableCharacteristics()`,不会被 SystemUI 提升为实时活动。 ## 期望 1. 声明 `POST_PROMOTED_NOTIFICATIONS`; 2. 使用标准 `NotificationCompat.ProgressStyle` 并调用 `setRequestPromotedOngoing(true)`; 3. 在设置中提供开关(默认开启)。 ## 关于 `targetSdk`(重要澄清) 本需求**不需要**提升 `targetSdk`。早期版本的补丁曾包含 `targetSdk 34 -> 36` 的改动,理由是 「`POST_PROMOTED_NOTIFICATIONS` 的 appop 默认模式随 `targetSdk >= 36` 变为 allow」。经 AOSP 源码核对, 该理由不成立: - `AppOpsManager` 中该 op 的构造未调用 `setDefaultMode`,保持 `MODE_DEFAULT`; - 其权限声明为 `android:protectionLevel="normal|appop"`,属安装即授予的权限; - 官方 Javadoc 明确:app-op permissions 在 `MODE_DEFAULT` 下按**权限授予状态**判定,仅当 app-op 被显式设为 `MODE_ALLOWED` / `MODE_IGNORED` 时才改查 app-op 状态; - 因此「已声明权限」+「保持 `MODE_DEFAULT`」即等价于 allow,与 `targetSdk` 无关; - 该特性实际由平台 flag `android.app.ui_rich_ongoing`(Android 16 QPR1 引入)门控。 故本补丁**只包含权限声明与通知侧改动**,不触碰 `targetSdk`。 ## 备注 - 该能力为 Android 16 / QPR1 新增,低版本设备完全无影响(`Build.VERSION.SDK_INT >= 36` 门控)。 - 已准备可用的补丁 / PR。 > 对应实现 PR:https://github.com/AAswordman/Operit/pull/1367
Activity