手机版365bet网址-365bet安卓手机客户端-365bet软件下载

手机版365bet网址

IMS:开发者选项Touch点显示

2025-12-21 09:03:06 作者 admin 阅读 2402
IMS:开发者选项Touch点显示

IMS:开发者选项Touch点显示

android11-release

开发者选项

frameworks\base\packages\SettingsLib\res\values-zh-rCN\strings.xml

packages\apps\Settings\res\xml\development_settings.xml

packages\apps\Settings\src\com\android\settings\development\ShowTapsPreferenceController.java

packages\apps\Settings\src\com\android\settings\development\PointerLocationPreferenceController.java

显示触摸操作(显示点按操作反馈)show_touches:Settings.System.SHOW_TOUCHES指针位置 pointer_location:Settings.System.POINTER_LOCATION

adb查询: adb shell settings get system show_touches、adb shell settings get system pointer_location

IMS 监听 registerContentObserver

frameworks\base\services\core\java\com\android\server\input\InputManagerService.java

public void start() {

Slog.i(TAG, "Starting input manager");

nativeStart(mPtr);

// Add ourself to the Watchdog monitors.

Watchdog.getInstance().addMonitor(this);

registerPointerSpeedSettingObserver();

registerShowTouchesSettingObserver();

registerAccessibilityLargePointerSettingObserver();

registerLongPressTimeoutObserver();

mContext.registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

updatePointerSpeedFromSettings();

updateShowTouchesFromSettings();

updateAccessibilityLargePointerFromSettings();

updateDeepPressStatusFromSettings("user switched");

}

}, new IntentFilter(Intent.ACTION_USER_SWITCHED), null, mHandler);

updatePointerSpeedFromSettings();

updateShowTouchesFromSettings();

updateAccessibilityLargePointerFromSettings();

updateDeepPressStatusFromSettings("just booted");

}

frameworks\base\services\core\jni\com_android_server_input_InputManagerService.cpp

frameworks\native\services\inputflinger\reader\InputReader.cpp

frameworks\native\services\inputflinger\include\InputReaderBase.h

frameworks\native\services\inputflinger\reader\include\EventHub.h

frameworks\native\services\inputflinger\reader\EventHub.cpp

赋值给mLocked.showTouches,并 InputReader::requestRefreshConfiguration刷新mEventHub->wake()唤醒getEvents()

唤起InputReader线程InputReader::loopOnce()更新

frameworks\native\services\inputflinger\reader\InputReader.cpp

base\services\core\jni\com_android_server_input_InputManagerService.cpp

TouchInputMapper.cpp

看到这比较疑惑,之后IMS:InputReader线程获取输入事件、IMS:InputDispatcher线程分发事件流程,这个没有看到showTouches判断显示Touch点显示,代码搜索字段showTouches、show_touches最后看到是在TouchInputMapper.cpp。通过IMS:InputReader线程获取输入事件就是触摸事件显示MultiTouchInputMapper或SingleTouchInputMapper frameworks\native\services\inputflinger\reader\mapper\SingleTouchInputMapper.cpp frameworks\native\services\inputflinger\reader\mapper\MultiTouchInputMapper.cpp frameworks\native\services\inputflinger\reader\mapper\TouchInputMapper.cpp

InputDevice::configure更新

frameworks\native\services\inputflinger\reader\InputDevice.cpp

void TouchInputMapper::configureSurface(nsecs_t when, bool* outResetNeeded) {

// ... ... ... ...

// Create pointer controller if needed.

if (mDeviceMode == DEVICE_MODE_POINTER ||

(mDeviceMode == DEVICE_MODE_DIRECT && mConfig.showTouches)) {

if (mPointerController == nullptr) {

mPointerController = getContext()->getPointerController(getDeviceId());

}

} else {

mPointerController.clear();

}

// ... ... ... ...

}

TouchInputMapper::cookAndDispatch设置Touch轨迹,主要就是由PointerController控制

frameworks\base\libs\input\PointerController.cpp

最后绘制

frameworks/base/libs/input/SpriteController.cpp

PointerController::setSpots设置,并更新绘制

SpriteController设置setVisible显示

相关文章