Bug #116138

测试 Test-IT #110961: V2.0功能测试

测试 Test-IT #111056: AF-V2.0-Launcher/SystemUI----Setting

【AF】【EVT2】【蓝牙】连接蓝牙键盘并使用,再断开蓝牙键盘,重启设备后无法再调起输入法键盘

Added by CD Test赵飞 over 2 years ago. Updated about 2 years ago.

Status:CLOSEDStart date:2023-02-09
Priority:NormalDue 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、输入法键盘无法被调出

【日志】
日志见附件

logcat.txt Magnifier (2.11 MB) CD Test赵飞, 2023-02-09 17:42

百度输入法_断开蓝牙键盘_重启后_不显示软键盘.png (371 KB) CD FW王武军, 2023-02-16 19:12

讯飞输入法_断开蓝牙键盘_重启后_显示软键盘.png (300 KB) CD FW王武军, 2023-02-16 19:12

%e7%99%be%e5%ba%a6%e8%be%93%e5%85%a5%e6%b3%95_%e6%96%ad%e5%bc%80%e8%93%9d%e7%89%99%e9%94%ae%e7%9b%98_%e9%87%8d%e5%90%af%e5%90%8e_%e4%b8%8d%e6%98%be%e7%a4%ba%e8%bd%af%e9%94%ae%e7%9b%98 %e8%ae%af%e9%a3%9e%e8%be%93%e5%85%a5%e6%b3%95_%e6%96%ad%e5%bc%80%e8%93%9d%e7%89%99%e9%94%ae%e7%9b%98_%e9%87%8d%e5%90%af%e5%90%8e_%e6%98%be%e7%a4%ba%e8%bd%af%e9%94%ae%e7%9b%98

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

#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 (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 (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中的分析,此票需要客户那边的输入法组进行适配
请帮助反馈,感谢

#7 Updated by CD Test赵飞 over 2 years ago

  • Assignee changed from CD Test赵飞 to CDTS_TEST 王成

输入法问题,请跟进。

#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-方永红

新输入法上验证

#13 Updated by CD TEST-方永红 about 2 years ago

  • Status changed from NEED_INFO to RESOLVED

116版本验证通过

#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

Also available in: Atom PDF