Skip to content

[Feature] 在流体云 / Live Updates 中显示 AI 运行进度 #1368

Open

Description

@YiTuoXiang-OvO

[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:#1367

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions