Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e91f31be authored by Bernardo Rufino's avatar Bernardo Rufino
Browse files

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
parent b522c02e
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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) {
+16 −0
Original line number Diff line number Diff line
@@ -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<IBinder>& token, const std::string& reason) override;
    void notifyInputChannelBroken(const sp<IBinder>& token) override;
    void notifyFocusChanged(const sp<IBinder>& oldToken, const sp<IBinder>& 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<IBinder>& 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<IBinder>& oldToken,
        const sp<IBinder>& 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");