场景记录
针对此需求,开始考虑是在framework, activity,view, doctorview等加入keycode拦截,发现仅能拦截到部分指令,但是命令还是分发下去了,时间有限,优先在systemui framework中处理了指令,也是可以生效。后续再分析
修改范围
有按钮的底部导航栏的禁用
源码代码位置
/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
1298行
//此方法是点击一次home键调用,点击一次回到主页。可在此处实现拦截
@VisibleForTesting
boolean onHomeTouch(View v, MotionEvent event) {
if (mHomeBlockedThisTouch && event.getActionMasked() != MotionEvent.ACTION_DOWN) {
return true;
}
}
1360行
//此方法是长按home键,一般会打开打开语言助理
@VisibleForTesting
boolean onHomeLongClick(View v) {
}
1415行
//此方法是点击菜单键,进入recent后台界面
private void onRecentsClick(View v) {
}
1465行
//此方法是长按recent键,目前未发现此方法的调用
private boolean onLongPressBackRecents(View v) {
}
代码位置
frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
3139行
//这里主要为了拦截点击返回按键事件,返回0是不处理,返回-1才是消费了事件
@Override
public long interceptKeyBeforeDispatching(IBinder focusedToken, KeyEvent event,
int policyFlags) {
case KeyEvent.KEYCODE_BACK:
return -1;
break;
}
代码位置
packages/apps/Launcher3/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
391行
//此方法是在launcher中拦截recent手势,除了launcher界面可以手势进入recent界面,在其他应用都不生效
private void startTouchTrackingForWindowAnimation(long touchTimeMs) {
}
代码位置
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
840行
//此方法是拦截手势返回事件
private void onMotionEvent(MotionEvent ev) {
return;
}