1 关键字

拔出鼠标;箭头残留

2 问题描述

设备型号:XXXXX

系统版本:OpenHarmony 3.2 Release

代码版本:XXXXX

问题现象:在鼠标插上后,界面显示鼠标箭头是没问题的,但在鼠标被拔出后,鼠标箭头没有消失,还在界面一直停留显示。

3 问题原因

3.1 正常机制

鼠标被拔出后,鼠标箭头残留显示,显示界面没有鼠标箭头。

3.2 异常机制

鼠标被拔出后,鼠标箭头没有消失,还在界面一直停留显示。

4 解决方案

针对该产品的鼠标设备移除,进行定制化处理 :

1、只要是具有pointer属性设备移除,就将鼠标隐藏,不考虑多鼠标设备接入的问题 ;

2、不考虑云真机虚拟平台界面显示;

对产品进行判断:
if (IsPointerDevice(inputDevice) && OHOS::system::GetParameter("const.product.model", "") == "XXX产品名")
对操作判断后,移除操作直接进行鼠标隐藏操作
NotifyPointerDevice(false, false);
OHOS::system::SetParameter(INPUT_POINTER_DEVICE, "false");

5 定位过程

5.1 既然是拔出鼠标的操作,那么找到拔出鼠标的接口OnInputDeviceRemoved

void InputDeviceManager::OnInputDeviceRemoved(struct libinput_device *inputDevice)
{
   .....................
   .....................
#endif // OHOS_BUILD_ENABLE_COOPERATE
   .....................
   .....................
#ifdef OHOS_BUILD_ENABLE_COOPERATE
   .....................
   .....................
#endif // OHOS_BUILD_ENABLE_COOPERATE
   .....................
   .....................
#if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING)
   .....................
   .....................
    }
   ScanPointerDevice();
#endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING
#ifdef OHOS_BUILD_ENABLE_COOPERATE
   .....................
   .....................
 }

通过上面的宏判断,发现它是根据不同的设备类型进行不同的处理,同时对具有Pointer的设备进行了一次扫描。

5.2 在进一步分析ScanPointerDevice

 

此处就是对鼠标类设备进行显示还是隐藏的动作。

5.3 从上2点可以初步分析出,它是根据设备类型进行扫描,查看是否满足前提:OHOS_BUILD_ENABLE_POINTER来进行设备扫描,查看是否还有具有pointer t属性的设备来进行最后的鼠标是隐藏还是现实。但目前我们鼠标已经移除了,还是扫描到该类设备,为此找到设置pointer t属性的位置:

进一步分析代码:发现在硬件设备注册时,就将HL keyboard和HL mouse 两个设备在硬件层面就写成具有带有pointer属性的设备了,这样就导致即使鼠标移除还是会有鼠标类的设备:

 

keyboard接口:static int __init vinput_kbd_init(void)

 

mouse接口:static int __init vinput_mouse_init(void)

 

5.4 比较设备规格,原来是该产品是可以通过遥控器红外进行连接的,同时该产品是支持遥控器作为鼠标使用的 ,那这样就知道具体原因了。经过分析,我们可以在隐藏鼠标时,对该设备进行分类处理。

5.5 目前我们是可以通过接口命令获取到设备分类的,我们可以使用其中的一个字段即可。

 

这样整个分析定位完成,然后根据整个流程就可制定出上面的修改方案。

6 知识分享

设备类型有些是跟随硬件一起注册的,整个流程与通用的外接设备流程是独立的。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐