| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Signed-off-by:xueyuanzhao<zhaoxueyuan@huawei.com> Change-Id: Ifc2886d5db9782919b33fd1b8b708dc1fd7f3e2d Signed-off-by: xueyuanzhao <zhaoxueyuan@huawei.com> | 3 个月前 | |
Signed-off-by: mr-liang2504 <liangzhicheng10@huawei.com> Co-Authored-By: Agent Change-Id: I26241b2a0b498c6aff7d0170c4dde61117c3ed9a Signed-off-by: mr-liang2504 <liangzhicheng10@huawei.com> | 1 个月前 | |
!9655 merge feat/plugin-display-change-notification into master feat: 添加Plugin显示变更通知和设备控制接口 Created-by: hellohyh001 Commit-by: hellohyh001 Merged-by: openharmony_ci Description: ### 相关的Issue #7437 ### 原因(目的、解决的问题等) Plugin框架(IPluginContext)缺少屏幕变化感知、屏幕信息查询、输入设备查询以及指定输入设备启用/禁用接口。插件在屏幕切换期间需要及时获取屏幕和设备状态,并根据 deviceId 禁用或恢复对应输入设备。 ### 描述(做了什么,变更了什么) - plugin_stage.h: IPluginContext新增DisplayChangeCallback、GetDisplayGroupInfos、GetInputDeviceInfos、RegisterDisplayChangeCallback、UnregisterDisplayChangeCallback、EnableInputDeviceForPlugin、DisableInputDeviceForPlugin - plugin_stage.h: 直接定义PluginDisplayInfo、PluginDisplayGroupInfo;GetInputDeviceInfos直接返回std::vector<std::shared_ptr<InputDevice>>,不新增PluginInputDeviceInfo - multimodal_input_plugin_manager.h/cpp: 实现显示变化回调注册/注销、Plugin注销时自动清理回调、设备查询和设备启用/禁用转发 - input_windows_manager.h/cpp: 新增GetDisplayGroupInfos(),只返回插件所需字段groupId、mainDisplayId、displayId、rsId、mode;UpdateDisplayInfo检测变化后在工作线程直接通知Plugin - input_device_manager.h/cpp: 新增GetInputDeviceInfosForPlugin、EnableInputDeviceForPlugin、DisableInputDeviceForPlugin - BUILD.gn: 新增InputWindowsManagerDisplayChangeTest,移除本需求不再需要的新增ffrt测试依赖 - UT: 补充Plugin显示回调、输入设备查询、设备启用/禁用、显示信息字段查询相关用例 ### 验证结果(新增、改动、可能影响的功能) - 新增: Plugin显示变化回调注册/注销/通知、显示组信息查询、输入设备对象查询、设备启用/禁用 - 改动: UpdateDisplayInfo在感知屏幕变化后直接通知Plugin,不再通过额外ffrt queue异步投递 - 改动: GetDisplayGroupInfos不返回OLD::DisplayInfo/OLD::DisplayGroupInfo,仅返回插件所需字段 - 改动: GetInputDeviceInfos返回InputDevice对象列表,调用方可通过deviceId选择要禁用的输入设备 - 可能影响: Plugin框架接口和显示变化通知路径,不影响非Plugin路径 - 本地执行input目标构建未进入代码编译,环境阻塞: 缺prebuilts/python、缺hvigorw,且Node.js为v20.20.0而构建期望14.21.1 ### 多模输入上库必备 checklist: - [x] 【线程安全】displayCallbacks_使用mutex保护,通知前复制回调列表并释放锁 - [x] 【响应时延】屏幕变化后在工作线程直接回调Plugin,满足屏幕切换期间及时禁用设备诉求 - [x] 【内存泄漏】回调随Plugin注销自动清理(RemoveDisplayCallbacksOf) - [x] 【避免过度设计】未新增display ffrt queue;未新增plugin_info.h;输入设备信息复用InputDevice对象 - [x] 【接口收敛】屏幕查询接口只返回插件必要字段 - [x] 【重用】复用WIN_MGR、INPUT_DEV_MGR已有接口和PostSyncTask语义 - [x] 【返回值】严格检查RET_OK/RET_ERR ### 日志规范自检: - [x] 【规则】高频代码的正常流程中禁止打印日志 - [x] 【规则】在基本不可能发生的点必须要打印日志 - [x] 【规则】事件记录的日志使用 who do what 主谓宾的形式打印 - [x] 【规则】状态变化的日志打印使用 state_name:s1->s2, reason:msg 的形式打印 - [x] 【规则】参数值的日志打印使用 name1=value1, name2=value2… 的形式打印 - [x] 【规则】代码运行成功的日志使用 xxx successful 的形式打印 - [x] 【规则】代码运行失败的日志使用 xxx failed, please xxx 的形式打印 ### 安全编码自检: - [x] 【指针】禁止对指针进行逻辑或位运算,指针解引用时需确认是否存在空指针解引用问题 - [x] 【临时变量】指针变量、表示资源描述符的变量、bool 变量初始化必须赋初值 - [x] 【数组下标】数组下标需要确认是否越界,如果下标来自外部输入,必须校验合法性 - [x] 【内存管理】内存申请前必须对内存大小进行合法性校验 - [x] 【内存管理】内存申请后必须释放 - [x] 【内存管理】内存申请后必须判空,判断内存申请是否成功 - [x] 【内存管理】全局变量释放内存后必须置空 - [x] 【整数运算】整数之间运算时必须严格检查,确保不会出现溢出、反转、除 0 - [x] 【整数运算】禁止对有符号整数进行位操作符运算 - [x] 【循环变量】无符号数作为循环变量需确认是否存在死循环问题 - [x] 【循环变量】循环次数如果受外部数据控制,需要检验其合法性 - [x] 【安全函数】安全函数必须检查返回值,并进行正确处理 - [x] 【安全函数】安全函数目标缓冲区大小入参与目标缓冲区实际大小必须一致 - [x] 【外部输入校验】解析数据后拷贝时需校验源buffer实际缓冲区大小,避免越界读写 - [x] 【外部输入校验】新增外部输入处理需考虑完整校验方案 - [x] 【常见问题】修改单个函数时,如果涉及新增异常返回分支,必须排查是否需要释放内存、fd等资源 - [x] 【常见问题】CHECK_INSTANCE_EXIT_WITH_RETVAL、CHECK_INSTANCE_EXIT_WITH等宏确认无资源漏释放 - [x] 【常见问题】函数返回值需与函数签名相同 - [x] 【常见问题】格式化打印类型需匹配 ### 是否已执行mini system用例 - [ ] 不涉及。新增Plugin框架接口,仍需板侧验证Plugin集成和屏幕切换场景 See merge request: openharmony/multimodalinput_input!9655 | 22 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 3 个月前 | ||
| 1 个月前 | ||
| 22 天前 |