政策概念

什么是政策?

Fuchsia Settings API 协议相当静态,其行为 进行自定义有些接口的参数可以在以下位置进行配置: 特定产品的构建时间,但均无法动态调整。

Fuchsia 设置通过政策的概念提供此功能。政策 用于在运行时修改 Fuchsia 设置的行为。由于调整后 政策是通过 FIDL API 修改的。

Policy API 可由任何具有适当 政策权限。能够控制政策是一项单独的权限 因为 Policy API 客户端可能会影响所有 Fuchsia Settings API 的行为 例如,将最小和最大亮度值设置为 相同的值。

Policy API 剖析

政策是根据转换定义的,转换会修改已发送的请求 添加到 Fuchsia Settings API。转换示例为 亮度限制。

亮度设置很简单,并且只需设定一个亮度值 但假定设备有多个显示屏,每个显示屏都有自己的显示屏 亮度值。在这种情况下,Policy API 的客户端需要指定 以及最低亮度限制所适用的显示屏Policy API 将此标识符称为目标,用于指定设置的某一方面。

Policy API 示例

library fuchsia.settings.policy;

alias PolicyId = uint32;

@discoverable
protocol VolumePolicyController {
    GetProperties() -> (struct {
        properties vector<Property>:MAX;
    });

    AddPolicy(struct {
        target Target;
        parameters PolicyParameters;
    }) -> (struct {
        policy_id PolicyId;
    }) error Error;

    RemovePolicy(struct {
        policy_id PolicyId;
    }) -> () error Error;
};

type Property = table {
    1: target Target;
    2: available_transforms vector<Transform>:MAX;
    3: active_policies vector<Policy>:MAX;
};

type Target = strict union {
    1: stream fuchsia.media.AudioRenderUsage;
};

type Transform = strict enum : uint8 {
    MAX = 1;
    MIN = 2;
};

type Policy = table {
    1: policy_id PolicyId;
    2: parameters PolicyParameters;
};

type PolicyParameters = strict union {
    1: min Volume;
    2: max Volume;
};

type Volume = table {
    1: volume float32;
};

Policy API 看起来与 Fuchsia Settings API 类似, 一些显著差异

添加和移除(而非“设置”)

政策 API 提供的不是单一 Set 方法,而是 AddPolicyRemovePolicy。Fuchsia Settings API 仅提供 Set,因为设置 值始终存在。例如,始终有一个默认值 即使客户从未设置过此亮度也无妨。客户永远不需要 “移除”亮度,只能修改。相比之下,政策转换 是要对 Fuchsia Settings API 的输入执行的操作,因此 可针对特定目标启用任意数量的有效政策(包括无政策)。

获取,而非观看

Fuchsia Settings API 通过实现 挂起 get 模式。政策仅提供简单的GetProperties 来提供有关政策目标的信息,包括可能的 和有效政策Policy API 客户端预计不会响应 更改政策,因此没有必要进行挂起。客户只需要 了解有效的政策,然后再尝试添加或移除政策。

每个政策都有一个在添加时生成的唯一标识符,可以是 用于稍后移除它。要添加政策,客户端需要提供 及其用于政策的参数。

其他命名空间

Policy API 位于 fuchsia.settings.policy 命名空间,而不是 Fuchsia Settings API 所在的 fuchsia.settings 命名空间。使用 不同的命名空间需要不同的客户端权限 使用 Fuchsia Settings API 不会自动授予 使用 Policy API。

卷政策界面示例中,任何客户端 可以对任何目标应用最大音量限制。这允许多个政策 无论是来自同一客户端还是来自多个客户端,都会应用于同一目标。 除非存在逻辑错误(例如 必须高于上限。

Policy API 将尝试遵循所有有效政策,并应用 政策的交集在这种情况下,系统将设置最严格的 是有效政策中的最小最大音量。如果 已移除当前的最低音量限制,下一最低音量政策将采用 效果。

政策概念定义

下面简要介绍了 Policy API 概念:

  • 目标:设置中可控制方面的唯一标识符。

    例如,音量政策中的目标是单个音频流

  • 转换:对设置目标的值执行的操作。

    政策客户端可以为转换指定可自定义的参数,例如最大值 音量限制

  • 政策:客户端指定的转换及其参数。

    每个政策都有一个全局唯一 ID,用于识别它们

  • 属性:有关政策目标的一系列信息。

    属性包含给定上可以进行哪些转换的相关信息 目标以及有效的政策