@@ -924,6 +924,23 @@ Error<EnumErrorWrapper<InputEventInjectionResult>> injectionError(InputEventInje
924924 std::forward<InputEventInjectionResult>(e));
925925}
926926
927+ InputTarget createInputTarget (const std::shared_ptr<Connection>& connection,
928+ const sp<android::gui::WindowInfoHandle>& windowHandle,
929+ InputTarget::DispatchMode dispatchMode,
930+ ftl::Flags<InputTarget::Flags> targetFlags,
931+ const ui::Transform& displayTransform,
932+ std::optional<nsecs_t > firstDownTimeInTarget) {
933+ LOG_ALWAYS_FATAL_IF (connection == nullptr );
934+ InputTarget inputTarget{connection};
935+ inputTarget.windowHandle = windowHandle;
936+ inputTarget.dispatchMode = dispatchMode;
937+ inputTarget.flags = targetFlags;
938+ inputTarget.globalScaleFactor = windowHandle->getInfo ()->globalScaleFactor ;
939+ inputTarget.displayTransform = displayTransform;
940+ inputTarget.firstDownTimeInTarget = firstDownTimeInTarget;
941+ return inputTarget;
942+ }
943+
927944} // namespace
928945
929946// --- InputDispatcher ---
@@ -2975,26 +2992,6 @@ void InputDispatcher::addDragEventLocked(const MotionEntry& entry) {
29752992 }
29762993}
29772994
2978- std::optional<InputTarget> InputDispatcher::createInputTargetLocked (
2979- const sp<android::gui::WindowInfoHandle>& windowHandle,
2980- InputTarget::DispatchMode dispatchMode, ftl::Flags<InputTarget::Flags> targetFlags,
2981- std::optional<nsecs_t > firstDownTimeInTarget) const {
2982- std::shared_ptr<Connection> connection = getConnectionLocked (windowHandle->getToken ());
2983- if (connection == nullptr ) {
2984- ALOGW (" Not creating InputTarget for %s, no input channel" , windowHandle->getName ().c_str ());
2985- return {};
2986- }
2987- InputTarget inputTarget{connection};
2988- inputTarget.windowHandle = windowHandle;
2989- inputTarget.dispatchMode = dispatchMode;
2990- inputTarget.flags = targetFlags;
2991- inputTarget.globalScaleFactor = windowHandle->getInfo ()->globalScaleFactor ;
2992- inputTarget.firstDownTimeInTarget = firstDownTimeInTarget;
2993- inputTarget.displayTransform =
2994- mWindowInfos .getDisplayTransform (windowHandle->getInfo ()->displayId );
2995- return inputTarget;
2996- }
2997-
29982995void InputDispatcher::addWindowTargetLocked (const sp<WindowInfoHandle>& windowHandle,
29992996 InputTarget::DispatchMode dispatchMode,
30002997 ftl::Flags<InputTarget::Flags> targetFlags,
@@ -3009,13 +3006,17 @@ void InputDispatcher::addWindowTargetLocked(const sp<WindowInfoHandle>& windowHa
30093006 const WindowInfo* windowInfo = windowHandle->getInfo ();
30103007
30113008 if (it == inputTargets.end ()) {
3012- std::optional<InputTarget> target =
3013- createInputTargetLocked (windowHandle, dispatchMode, targetFlags,
3014- firstDownTimeInTarget);
3015- if (!target) {
3009+ std::shared_ptr<Connection> connection = getConnectionLocked (windowHandle-> getToken ());
3010+ if (connection == nullptr ) {
3011+ ALOGW ( " Not creating InputTarget for %s, no input channel " ,
3012+ windowHandle-> getName (). c_str ());
30163013 return ;
30173014 }
3018- inputTargets.push_back (*target);
3015+ inputTargets.push_back (createInputTarget (connection, windowHandle, dispatchMode,
3016+ targetFlags,
3017+ mWindowInfos .getDisplayTransform (
3018+ windowHandle->getInfo ()->displayId ),
3019+ firstDownTimeInTarget));
30193020 it = inputTargets.end () - 1 ;
30203021 }
30213022
@@ -3060,13 +3061,17 @@ void InputDispatcher::addPointerWindowTargetLocked(
30603061 const WindowInfo* windowInfo = windowHandle->getInfo ();
30613062
30623063 if (it == inputTargets.end ()) {
3063- std::optional<InputTarget> target =
3064- createInputTargetLocked (windowHandle, dispatchMode, targetFlags,
3065- firstDownTimeInTarget);
3066- if (!target) {
3064+ std::shared_ptr<Connection> connection = getConnectionLocked (windowHandle-> getToken ());
3065+ if (connection == nullptr ) {
3066+ ALOGW ( " Not creating InputTarget for %s, no input channel " ,
3067+ windowHandle-> getName (). c_str ());
30673068 return ;
30683069 }
3069- inputTargets.push_back (*target);
3070+ inputTargets.push_back (createInputTarget (connection, windowHandle, dispatchMode,
3071+ targetFlags,
3072+ mWindowInfos .getDisplayTransform (
3073+ windowHandle->getInfo ()->displayId ),
3074+ firstDownTimeInTarget));
30703075 it = inputTargets.end () - 1 ;
30713076 }
30723077
@@ -6556,14 +6561,15 @@ void InputDispatcher::doDispatchCycleFinishedCommand(nsecs_t finishTime,
65566561 const auto windowHandle = mWindowInfos .findWindowHandle (connection->getToken ());
65576562 // Only dispatch fallbacks if there is a window for the connection.
65586563 if (windowHandle != nullptr ) {
6559- const auto inputTarget =
6560- createInputTargetLocked (windowHandle, InputTarget::DispatchMode::AS_IS,
6561- dispatchEntry->targetFlags ,
6562- fallbackKeyEntry->downTime );
6563- if (inputTarget.has_value ()) {
6564- enqueueDispatchEntryLocked (connection, std::move (fallbackKeyEntry),
6565- *inputTarget);
6566- }
6564+ nsecs_t downTime = fallbackKeyEntry->downTime ;
6565+ enqueueDispatchEntryLocked (connection, std::move (fallbackKeyEntry),
6566+ createInputTarget (connection, windowHandle,
6567+ InputTarget::DispatchMode::AS_IS,
6568+ dispatchEntry->targetFlags ,
6569+ mWindowInfos .getDisplayTransform (
6570+ windowHandle->getInfo ()
6571+ ->displayId ),
6572+ downTime));
65676573 }
65686574 }
65696575 releaseDispatchEntry (std::move (dispatchEntry));
0 commit comments