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

Commit 9d07aafe authored by Brad Hinegardner's avatar Brad Hinegardner
Browse files

Allow certain KeyEvents to bypass falsing

When a keyboard is attached to a device, sometimes keys were being
ignored due to falsing. We should allow certain keys to bypass falsing.

Fixes: 319230892
Test: atest FalsingCollectorImplTest
Test: atest FalsingDataProviderTest
Test: atest TimeLimitedInputEventBufferTest
Test: atest NotificationShadeWindowViewControllerTest
Flag: NONE
Change-Id: I637621de4b94067a94c077d0284216e64c1d6b5a
parent cea1ff0e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -398,6 +398,7 @@ public class BrightLineFalsingManager implements FalsingManager {
                || mAccessibilityManager.isTouchExplorationEnabled()
                || mDataProvider.isA11yAction()
                || mDataProvider.isFromTrackpad()
                || mDataProvider.isFromKeyboard()
                || (mFeatureFlags.isEnabled(Flags.FALSING_OFF_FOR_UNFOLDED)
                    && mDataProvider.isUnfolded());
    }
+9 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.classifier;

import android.view.KeyEvent;
import android.view.MotionEvent;

/**
@@ -49,6 +50,14 @@ public interface FalsingCollector {
    /** */
    void onBouncerHidden();

    /**
     * Call this to record a KeyEvent in the {@link com.android.systemui.plugins.FalsingManager}.
     *
     * This may decide to only collect certain KeyEvents and ignore others. Do not assume all
     * KeyEvents are collected.
     */
    void onKeyEvent(KeyEvent ev);

    /**
     * Call this to record a MotionEvent in the {@link com.android.systemui.plugins.FalsingManager}.
     *
+8 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.classifier;

import android.view.KeyEvent;
import android.view.MotionEvent;

import javax.inject.Inject;
@@ -23,6 +24,8 @@ import javax.inject.Inject;
/** */
public class FalsingCollectorFake implements FalsingCollector {

    public KeyEvent lastKeyEvent = null;

    @Override
    public void init() {
    }
@@ -69,6 +72,11 @@ public class FalsingCollectorFake implements FalsingCollector {
    public void onBouncerHidden() {
    }

    @Override
    public void onKeyEvent(KeyEvent ev) {
        lastKeyEvent = ev;
    }

    @Override
    public void onTouchEvent(MotionEvent ev) {
    }
+20 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.android.systemui.dock.DockManager.DockEventListener;
import android.hardware.SensorManager;
import android.hardware.biometrics.BiometricSourceType;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;

import androidx.annotation.VisibleForTesting;
@@ -49,7 +50,10 @@ import com.android.systemui.util.time.SystemClock;

import dagger.Lazy;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import javax.inject.Inject;

@@ -61,6 +65,14 @@ class FalsingCollectorImpl implements FalsingCollector {
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
    private static final long GESTURE_PROCESSING_DELAY_MS = 100;

    private final Set<Integer> mAcceptedKeycodes = new HashSet<>(Arrays.asList(
        KeyEvent.KEYCODE_ENTER,
        KeyEvent.KEYCODE_ESCAPE,
        KeyEvent.KEYCODE_SHIFT_LEFT,
        KeyEvent.KEYCODE_SHIFT_RIGHT,
        KeyEvent.KEYCODE_SPACE
    ));

    private final FalsingDataProvider mFalsingDataProvider;
    private final FalsingManager mFalsingManager;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -278,6 +290,14 @@ class FalsingCollectorImpl implements FalsingCollector {
        }
    }

    @Override
    public void onKeyEvent(KeyEvent ev) {
        // Only collect if it is an ACTION_UP action and is allow-listed
        if (ev.getAction() == KeyEvent.ACTION_UP && mAcceptedKeycodes.contains(ev.getKeyCode())) {
            mFalsingDataProvider.onKeyEvent(ev);
        }
    }

    @Override
    public void onTouchEvent(MotionEvent ev) {
        logDebug("REAL: onTouchEvent(" + ev.getActionMasked() + ")");
+5 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.classifier

import android.view.KeyEvent
import android.view.MotionEvent
import com.android.systemui.classifier.FalsingCollectorImpl.logDebug
import com.android.systemui.dagger.SysUISingleton
@@ -59,6 +60,10 @@ class FalsingCollectorNoOp @Inject constructor() : FalsingCollector {
        logDebug("NOOP: onBouncerHidden")
    }

    override fun onKeyEvent(ev: KeyEvent) {
        logDebug("NOOP: onKeyEvent(${ev.action}")
    }

    override fun onTouchEvent(ev: MotionEvent) {
        logDebug("NOOP: onTouchEvent(${ev.actionMasked})")
    }
Loading