Notify policy of untrusted touch for toast
Notify policy when an untrusted touch happens with the obscuring package
so we can show a toast in topic CL.
Test: Enable feature, draw overlay, verify toast appears
Test: atest WindowUntrustedTouchTest WindowInputTests inputflinger_tests
inputflinger_benchmarks libinput_tests libgui_test
Bug: 158002302
Change-Id: Ief4a048128efc52b505a1a8c60aa2240a196f254
diff --git a/services/inputflinger/dispatcher/InputDispatcher.cpp b/services/inputflinger/dispatcher/InputDispatcher.cpp
index 8b4ae03..5dc399e 100644
--- a/services/inputflinger/dispatcher/InputDispatcher.cpp
+++ b/services/inputflinger/dispatcher/InputDispatcher.cpp
@@ -1743,14 +1743,13 @@
mBlockUntrustedTouchesMode != BlockUntrustedTouchesMode::DISABLED) {
TouchOcclusionInfo occlusionInfo =
computeTouchOcclusionInfoLocked(newTouchedWindowHandle, x, y);
- // The order of the operands in the 'if' below is important because even if the feature
- // is not BLOCK we want isTouchTrustedLocked() to execute in order to log details to
- // logcat.
- if (!isTouchTrustedLocked(occlusionInfo) &&
- mBlockUntrustedTouchesMode == BlockUntrustedTouchesMode::BLOCK) {
- ALOGW("Dropping untrusted touch event due to %s/%d",
- occlusionInfo.obscuringPackage.c_str(), occlusionInfo.obscuringUid);
- newTouchedWindowHandle = nullptr;
+ if (!isTouchTrustedLocked(occlusionInfo)) {
+ onUntrustedTouchLocked(occlusionInfo.obscuringPackage);
+ if (mBlockUntrustedTouchesMode == BlockUntrustedTouchesMode::BLOCK) {
+ ALOGW("Dropping untrusted touch event due to %s/%d",
+ occlusionInfo.obscuringPackage.c_str(), occlusionInfo.obscuringUid);
+ newTouchedWindowHandle = nullptr;
+ }
}
}
@@ -4858,6 +4857,13 @@
postCommandLocked(std::move(commandEntry));
}
+void InputDispatcher::onUntrustedTouchLocked(const std::string& obscuringPackage) {
+ std::unique_ptr<CommandEntry> commandEntry = std::make_unique<CommandEntry>(
+ &InputDispatcher::doNotifyUntrustedTouchLockedInterruptible);
+ commandEntry->obscuringPackage = obscuringPackage;
+ postCommandLocked(std::move(commandEntry));
+}
+
void InputDispatcher::updateLastAnrStateLocked(const sp<InputWindowHandle>& window,
const std::string& reason) {
const std::string windowLabel = getApplicationWindowLabel(nullptr, window);
@@ -4936,6 +4942,14 @@
}
}
+void InputDispatcher::doNotifyUntrustedTouchLockedInterruptible(CommandEntry* commandEntry) {
+ mLock.unlock();
+
+ mPolicy->notifyUntrustedTouch(commandEntry->obscuringPackage);
+
+ mLock.lock();
+}
+
void InputDispatcher::extendAnrTimeoutsLocked(
const std::shared_ptr<InputApplicationHandle>& application,
const sp<IBinder>& connectionToken, std::chrono::nanoseconds timeoutExtension) {