From e91f31be488e4cf142c0020e8caefc527d93e2b5 Mon Sep 17 00:00:00 2001 From: Bernardo Rufino Date: Thu, 8 Oct 2020 13:39:22 +0000 Subject: [PATCH] Show toast when untrusted touches happen Show a toast when untrusted touches happen (either in permissive or block mode) to help with debugging and get signal from dogfood. The code will be cleaned before release together with b/169067926. Test: Enable feature, draw overlay, verify toast appears Test: atest WindowUntrustedTouchTest WindowInputTests inputflinger_tests inputflinger_benchmarks libinput_tests libgui_test Bug: 158002302 Change-Id: I22da3b24c7b3dd4ae9695827ac00ff29980a6a3c --- .../server/input/InputManagerService.java | 10 ++++++++++ ..._android_server_input_InputManagerService.cpp | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index a2304f4ad1588..9bdfe331fe4e8 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -2093,6 +2093,16 @@ public class InputManagerService extends IInputManager.Stub } } + // Native callback + private void notifyUntrustedTouch(String packageName) { + // TODO(b/169067926): Remove toast after gathering feedback on dogfood. + DisplayThread.getHandler().post(() -> + Toast.makeText(mContext, + "Touch obscured by " + packageName + + " will be blocked. Check go/s-untrusted-touches", + Toast.LENGTH_SHORT).show()); + } + // Native callback. private long notifyANR(InputApplicationHandle inputApplicationHandle, IBinder token, String reason) { diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index d14780e59ab17..251fe6849039c 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -96,6 +96,7 @@ static struct { jmethodID notifyInputChannelBroken; jmethodID notifyANR; jmethodID notifyFocusChanged; + jmethodID notifyUntrustedTouch; jmethodID filterInputEvent; jmethodID interceptKeyBeforeQueueing; jmethodID interceptMotionBeforeQueueingNonInteractive; @@ -253,6 +254,7 @@ public: const sp& token, const std::string& reason) override; void notifyInputChannelBroken(const sp& token) override; void notifyFocusChanged(const sp& oldToken, const sp& newToken) override; + void notifyUntrustedTouch(const std::string& obscuringPackage) override; bool filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags) override; void getDispatcherConfiguration(InputDispatcherConfiguration* outConfig) override; void interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags) override; @@ -752,6 +754,17 @@ void NativeInputManager::notifyInputChannelBroken(const sp& token) { } } +void NativeInputManager::notifyUntrustedTouch(const std::string& obscuringPackage) { +#if DEBUG_INPUT_DISPATCHER_POLICY + ALOGD("notifyUntrustedTouch - obscuringPackage=%s", obscuringPackage.c_str()); +#endif + ATRACE_CALL(); + JNIEnv* env = jniEnv(); + jstring jPackage = env->NewStringUTF(obscuringPackage.c_str()); + env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyUntrustedTouch, jPackage); + checkAndClearExceptionFromCallback(env, "notifyUntrustedTouch"); +} + void NativeInputManager::notifyFocusChanged(const sp& oldToken, const sp& newToken) { #if DEBUG_INPUT_DISPATCHER_POLICY @@ -1887,6 +1900,9 @@ int register_android_server_InputManager(JNIEnv* env) { GET_METHOD_ID(gServiceClassInfo.notifyFocusChanged, clazz, "notifyFocusChanged", "(Landroid/os/IBinder;Landroid/os/IBinder;)V"); + GET_METHOD_ID(gServiceClassInfo.notifyUntrustedTouch, clazz, "notifyUntrustedTouch", + "(Ljava/lang/String;)V"); + GET_METHOD_ID(gServiceClassInfo.notifyANR, clazz, "notifyANR", "(Landroid/view/InputApplicationHandle;Landroid/os/IBinder;Ljava/lang/String;)J");