Bug #116138
测试 Test-IT #110961: V2.0功能测试
测试 Test-IT #111056: AF-V2.0-Launcher/SystemUI----Setting
【AF】【EVT2】【蓝牙】连接蓝牙键盘并使用,再断开蓝牙键盘,重启设备后无法再调起输入法键盘
Status: | CLOSED | Start date: | 2023-02-09 | |
---|---|---|---|---|
Priority: | Normal | Due date: | ||
Assignee: | CD TEST-方永红 | % Done: | 0% | |
Category: | CD-FW | |||
Target version: | - | |||
Need_Info: | TEST | Found Version: | FlatBuild_HH_VX1_MCE_FSE.M.R.user.01.00.0073.X101 | |
Resolution: | -- | Degrated: | -- | |
Severity: | Major | Verified Version: | ||
Reproducibility: | Every time | Fixed Version: | ||
Test Type: | ST | Root cause: |
Description
【前提条件】
1、设备已开机
2、准备一个蓝牙键盘
【测试步骤】
1、进入设置 - 已连接设备 - 与新设备配对
2、点击搜索到的蓝牙设备进行配对连接
3、待连接成功后,打开一个输入框使用蓝牙键盘,比如重命名设备名称
4、断开与蓝牙键盘的连接
5、重启设备
6、再次打开一个输入框
【预期结果】
6、输入法键盘被成功调出
【实际结果】
6、输入法键盘无法被调出
【日志】
日志见附件
History
#1 Updated by CD FW 曹覃刚 over 2 years ago
- Status changed from New to ASSIGNED
- Assignee changed from CD FW 曹覃刚 to CD FW王武军
Hi 军哥
输入法的问题,帮忙解析一下
#2 Updated by CD FW王武军 over 2 years ago
当前状态:
确认问题,复现现象。
当前分析:
对比测试其他设备,未发现类似问题,从目前的分析来看,问题可能与软键盘的显示流程有关系。
另外:在同样情况下,将输入法切为aosp输入法,就可以弹出软键盘。
处理策略:
跟进软键盘的显示流程,寻找aosp输入法软键盘可以显示的差异性。
#3 Updated by CDTS_TEST 王成 over 2 years ago
- Severity changed from Normal to Major
#4 Updated by CD FW王武军 over 2 years ago
- File 百度输入法_断开蓝牙键盘_重启后_不显示软键盘.png added
- File 讯飞输入法_断开蓝牙键盘_重启后_显示软键盘.png added
#5 Updated by CD FW王武军 over 2 years ago
【】当前分析
1、分析软键盘的显示流程
在连接蓝牙键盘然后断掉连接,并重启设备后,打开可以输入的控件,记录系统层面的日志信息:
02-16 18:32:42.326 1005 1749 V InputMethodManagerService: startInputOrWindowGainedFocusInternalLocked: reason=WINDOW_FOCUS_GAIN client=android.os.BinderProxy@30584a5 inputContext=com.android.internal.view.IInputContext$Stub$Proxy@5a66ff8 missingMethods= attribute=android.view.inputmethod.EditorInfo@fcb6cd1 startInputFlags=VIEW_HAS_FOCUS|IS_TEXT_EDITOR|INITIAL_CONNECTION softInputMode=STATE_UNSPECIFIED|ADJUST_RESIZE|IS_FORWARD_NAVIGATION windowFlags=#1800002 unverifiedTargetSdkVersion=31
02-16 18:32:42.326 1005 1749 V InputMethodManagerService: Unspecified window will show input
02-16 18:32:42.328 1005 1749 D InputMethodManagerService: showCurrentInputLocked: mCurToken=android.os.Binder@7ec1c01
02-16 18:32:42.329 1005 1749 V InputMethodManagerService: Calling com.android.internal.view.IInputMethod$Stub$Proxy@4a99862.showSoftInput(android.os.Binder@22f4cc2, 0, null) for reason: SHOW_AUTO_EDITOR_FORWARD_NAV
02-16 18:32:42.329 3382 3382 V InputMethodService: CALL: doFinishInput
02-16 18:32:42.329 3382 3382 V InputMethodService: CALL: onFinishInput
02-16 18:32:42.341 3382 3382 V InputMethodService: CALL: onStartInput
02-16 18:32:42.352 3382 3382 V InputMethodService: Showing window: showInput=true mShowInputRequested=false mViewsCreated=false mDecorViewVisible=false mWindowVisible=false mInputStarted=true mShowInputFlags=0
02-16 18:32:42.352 3382 3382 V InputMethodService: showWindow: updating UI
02-16 18:32:42.355 3382 3382 V InputMethodService: CALL: onCreateCandidatesView
02-16 18:32:42.355 3382 3382 V InputMethodService: showWindow: candidates=null
02-16 18:32:42.355 3382 3382 V InputMethodService: CALL: onStartInputView
02-16 18:32:42.361 1005 1061 D InputMethodManagerService: --- calledFromForegroundUserOrSystemProcess ? calling uid = 1000 system uid = 1000 calling userId = 0, foreground user id = 0, calling pid = 2651com.android.server.inputmethod.InputMethodManagerService.showSoftInput(InputMethodManagerService.java:3091)
02-16 18:32:42.361 1005 1061 V InputMethodManagerService: Client requesting input be shown
02-16 18:32:42.361 1005 1061 D InputMethodManagerService: showCurrentInputLocked: mCurToken=android.os.Binder@7ec1c01
02-16 18:32:42.361 1005 1061 V InputMethodManagerService: Calling com.android.internal.view.IInputMethod$Stub$Proxy@4a99862.showSoftInput(android.os.Binder@9a6c8c5, 1, null) for reason: SHOW_SOFT_INPUT_BY_INSETS_API
02-16 18:32:42.434 3382 3382 V InputMethodService: showWindow: draw decorView!
从日志流程来看,触发软键盘UI的创建和显示逻辑都是被触发了的
1)创建软键盘UI的方法
private void startViews(boolean doShowInput) {
if (mShowInputRequested) {
if (!mInputViewStarted) {
if (DEBUG) Log.v(TAG, "CALL: onStartInputView");
mInputViewStarted = true;
mInlineSuggestionSessionController.notifyOnStartInputView();
onStartInputView(mInputEditorInfo, false);
}
}
if (doShowInput) startExtractingText(false);
}
2、显示软键盘窗口的逻辑
public void showWindow(boolean showInput) {
if ((previousImeWindowStatus & IME_ACTIVE) == 0) {
if (DEBUG) Log.v(TAG, "showWindow: draw decorView!");
mWindow.show();
}
}
从系统常规的日志,可以初步判断,系统层面调输入法显示的逻辑流程是完整的。
2、从侧面分析
1)添加观察输入法软键盘内容区域的日志
int getInputMethodWindowVisibleHeight() {
final InsetsState state = getInsetsStateController().getRawInsetsState();
final InsetsSource imeSource = state.peekSource(ITYPE_IME);
if (imeSource == null || !imeSource.isVisible()) {
return 0;
}
final Rect imeFrame = imeSource.getVisibleFrame() != null
? imeSource.getVisibleFrame() : imeSource.getFrame();
final Rect dockFrame = mTmpRect;
dockFrame.set(state.getDisplayFrame());
dockFrame.inset(state.calculateInsets(dockFrame, systemBars() | displayCutout(),
false /* ignoreVisibility */));
Log.d("DisplayContent", "Show rect: dockFrame=" + dockFrame + " imeFrame=" + imeFrame);
return dockFrame.bottom - imeFrame.top;
}
百度输入法的软键盘区域信息:
02-16 19:01:58.049 1005 1169 D DisplayContent: Show rect: dockFrame=Rect(0, 72 - 2560, 1014) imeFrame=Rect(0, 1008 - 2560, 1080)
从imeFrame=Rect(0, 1008 - 2560, 1080)可以看出,当前软键盘的高度为了0,UI其实并未绘制出来
讯飞输入法的软键盘区域信息:
02-16 19:01:31.793 1005 1169 D DisplayContent: Show rect: dockFrame=Rect(0, 72 - 2560, 1014) imeFrame=Rect(0, 524 - 2560, 1080)
它的区域值是imeFrame=Rect(0, 524 - 2560, 1080),可以看出高度是476,可见UI
2)从实际的UI表现
百度输入法_断开蓝牙键盘_重启后_不显示软键盘.png
该图中,绿色框部分,是配合着软键盘的显示而出现的,该区域显示成功说明系统层调起输入法软键盘的显示逻辑
是完整的。
3、对比分析
针对该问题的现象,我安装了讯飞输入进行对比测试。
讯飞输入法的表现如图:讯飞输入法_断开蓝牙键盘_重启后_显示软键盘.png
讯飞输入两个区域的内容都完整显示:输入法自己的软键盘视图;导航栏针对输入法的控制视图
综合来看:
1)系统层在连接蓝牙键盘和未连接蓝牙键盘时,触发输入法显示软键盘的主流程是基本一致的;
2)软键盘的显示是输入法应用自身的UI逻辑,需要调查具体的表现情况
【】后续处理策略
该问题需要输入法应用内部进行一下分析:
1)是否正确响应了InputMethodService.onStartInputView()方法;
2)在系统层触发软键盘显示时,应用是否正确响应了状态;
3)是否需要针对蓝牙键盘接入的状态做适配处理
#6 Updated by CD FW 曹覃刚 over 2 years ago
- Status changed from ASSIGNED to NEED_INFO
- Assignee changed from CD FW王武军 to CD Test赵飞
- Need_Info changed from -- to TEST
Hi 飞哥
根据#5中的分析,此票需要客户那边的输入法组进行适配
请帮助反馈,感谢
#8 Updated by CDTS_TEST 王成 over 2 years ago
- Assignee changed from CDTS_TEST 王成 to 方案组-RD3_CDTS 王浩云
看一眼
#9 Updated by 方案组-RD3_CDTS 王浩云 over 2 years ago
- Assignee changed from 方案组-RD3_CDTS 王浩云 to CDTS_TEST 王成
输入法的问题,作为测试周会内容,如实反馈就好,我们不需要修改
#10 Updated by CDTS_TEST 王成 over 2 years ago
- Assignee changed from CDTS_TEST 王成 to 物联网项目组-RD3_CDTS 周飞
#11 Updated by CD FW 曹覃刚 about 2 years ago
- Category changed from CD-FW to 依赖客户及其供应商解决
#12 Updated by CDTS_TEST 王成 about 2 years ago
- Category changed from 依赖客户及其供应商解决 to CD-FW
- Assignee changed from 物联网项目组-RD3_CDTS 周飞 to CD TEST-方永红
新输入法上验证
#14 Updated by CD TEST-方永红 about 2 years ago
- Status changed from RESOLVED to VERIFIED
#15 Updated by CD TEST-方永红 about 2 years ago
- Status changed from VERIFIED to CLOSED