RK3576 GMS CtsViewTestCases 的 android.view.cts.input.InputDeviceKeyLayoutMapTest#testLayoutKeyEvents

平台:RK3576,android14

测试报告:

 

arm64-v8a CtsViewTestCases
TestResultDetails
android.view.cts.input.InputDeviceKeyLayoutMapTest#testLayoutKeyEvents
fail
java.lang.AssertionError: Did not receive KEYCODE_TV

 

测试源码:

    @Test
    public void testLayoutKeyEvents() {
        for (Map.Entry<String, Integer> entry : mKeyLayout.entrySet()) {
            if (EXCLUDED_KEYS.contains(entry.getKey())) {
                continue;
            }

            String label = LABEL_PREFIX + entry.getKey();
            final int evKey = entry.getValue();
            final int keyCode = KeyEvent.keyCodeFromString(label);

            if (!isForwardedToApps(keyCode)) {
                continue;
            }

            pressKey(evKey);
            assertReceivedKeyEvent(KeyEvent.ACTION_DOWN, keyCode);
            assertReceivedKeyEvent(KeyEvent.ACTION_UP, keyCode);
        }
    }

 可以看到这个测试代码是 用于验证键盘布局(Key Layout)中定义的按键事件是否能正确生成并传递给应用程序。

分析错误log:

02-21 22:48:11.308 11632 29425 29437 E TestRunner: java.lang.AssertionError: Did not receive KEYCODE_TV
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at org.junit.Assert.fail(Assert.java:89)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at org.junit.Assert.assertTrue(Assert.java:42)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at org.junit.Assert.assertNotNull(Assert.java:713)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at android.view.cts.input.InputDeviceKeyLayoutMapTest.assertReceivedKeyEvent(InputDeviceKeyLayoutMapTest.java:170)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at android.view.cts.input.InputDeviceKeyLayoutMapTest.testLayoutKeyEvents(InputDeviceKeyLayoutMapTest.java:272)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at java.lang.reflect.Method.invoke(Native Method)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:61)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:148)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:142)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at java.util.concurrent.FutureTask.run(FutureTask.java:264)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: 	at java.lang.Thread.run(Thread.java:1012)
02-21 22:48:11.308 11632 29425 29437 E TestRunner: ----- end exception -----

 可以发现是 KEYCODE_TV 这个按键没有响应。排查SDK代码,发现之前的钱箱功能占用了这个按键。修改回来测试就PASS了。

补丁如下:

diff --git a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 6da500bd26e..cae34fa5814 100644
--- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -4446,51 +4446,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                 break;
             }
 
-                       
-            case KeyEvent.KEYCODE_TV:{
-                if(down){
-                    Intent intent = new Intent();
-                    intent.setAction("android.intent.action.CASH_BOX_OPEN");
-                    mContext.sendBroadcast(intent);
-                }
-                result &= ~ACTION_PASS_TO_USER;
-                break;
-            }
-
-            case KeyEvent.KEYCODE_MEDIA_PLAY:{
-                if(down){
-                    Intent intent = new Intent();
-                    intent.setAction("android.intent.action.CASH_BOX_CLOSE");
-                    mContext.sendBroadcast(intent);
-                }
-                result &= ~ACTION_PASS_TO_USER;
-                break;
-            }
-
-            case KeyEvent.KEYCODE_MEDIA_STOP:{
-                Log.d("asw"," KEYCODE_MEDIA_STOP");
-                if(down){
-                    Intent intent = new Intent();
-                    intent.setAction("android.intent.action.CASH_BOX_SECOND_OPEN");
-                    mContext.sendBroadcast(intent);
-                }
-                result &= ~ACTION_PASS_TO_USER;
-                break;
-            }
-
-            case KeyEvent.KEYCODE_BREAK:{
-                if(down){
-                    Intent intent = new Intent();
-                    intent.setAction("android.intent.action.CASH_BOX_SECOND_CLOSE");
-                    mContext.sendBroadcast(intent);
-                }
-                result &= ~ACTION_PASS_TO_USER;
-                break;
-            }
-
             case KeyEvent.KEYCODE_VOLUME_DOWN:
             case KeyEvent.KEYCODE_VOLUME_UP:
             case KeyEvent.KEYCODE_VOLUME_MUTE: {

 

posted @ 2025-06-30 10:06  simple雨  阅读(25)  评论(0)    收藏  举报