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

Commit a9351958 authored by Bryce Lee's avatar Bryce Lee Committed by Android (Google) Code Review
Browse files

Merge "Protect against receiving partial key event sequences." into main

parents dd52765c 7f0416a3
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -433,7 +433,8 @@ public class DreamService extends Service implements Window.Callback {
                        mTrackingConfirmKey = event.getKeyCode();
                    }
                    case KeyEvent.ACTION_UP -> {
                        if (mTrackingConfirmKey != event.getKeyCode()) {
                        if (mTrackingConfirmKey == null
                                || mTrackingConfirmKey != event.getKeyCode()) {
                            return true;
                        }

+12 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.service.dreams.DreamService;
import android.service.dreams.Flags;
import android.service.dreams.IDreamOverlayCallback;
import android.testing.TestableLooper;
import android.view.KeyEvent;

import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
@@ -181,4 +182,15 @@ public class DreamServiceTest {
        environment.advance(TestDreamEnvironment.DREAM_STATE_WOKEN);
        verify(environment.getDreamOverlayClient()).onWakeRequested();
    }

    @Test
    @EnableFlags(Flags.FLAG_DREAM_HANDLES_CONFIRM_KEYS)
    public void testPartialKeyHandling() throws Exception {
        TestDreamEnvironment environment = new TestDreamEnvironment.Builder(mTestableLooper)
                .build();
        environment.advance(TestDreamEnvironment.DREAM_STATE_STARTED);

        // Ensure service does not crash from only receiving up event.
        environment.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SPACE));
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import android.service.dreams.IDreamOverlayCallback;
import android.service.dreams.IDreamOverlayClient;
import android.service.dreams.IDreamService;
import android.testing.TestableLooper;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowInsetsController;
@@ -390,6 +391,13 @@ public class TestDreamEnvironment {
        }
    }

    /**
     * Sends a key event to the dream.
     */
    public void dispatchKeyEvent(KeyEvent event) {
        mService.dispatchKeyEvent(event);
    }

    private void wakeDream() throws RemoteException {
        mService.wakeUp();
    }