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

Commit 758393a3 authored by Arthur Hung's avatar Arthur Hung
Browse files

Prevent NPE for onKeyDown and onKeyUp

We expected `onKeyDown` and `onKeyUp` should be used for the key event
delivery from input, but some apps may misuse it and pass a null
key event, that would cause app itself crash if it didn't override
onKeyDown and onKeyUp properly.

To prevent this, we swap the conditions that first check the confirm
key code then access the other states of the key event.

Bug: 219708835
Test: manual
Change-Id: I612ca560d768134bdcaa688c83217738b5254b5a
parent ef439b26
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -15617,7 +15617,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * @param event the KeyEvent object that defines the button action
     * @param event the KeyEvent object that defines the button action
     */
     */
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.hasNoModifiers() && KeyEvent.isConfirmKey(keyCode)) {
        if (KeyEvent.isConfirmKey(keyCode) && event.hasNoModifiers()) {
            if ((mViewFlags & ENABLED_MASK) == DISABLED) {
            if ((mViewFlags & ENABLED_MASK) == DISABLED) {
                return true;
                return true;
            }
            }
@@ -15674,7 +15674,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * @param event   The KeyEvent object that defines the button action.
     * @param event   The KeyEvent object that defines the button action.
     */
     */
    public boolean onKeyUp(int keyCode, KeyEvent event) {
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (event.hasNoModifiers() && KeyEvent.isConfirmKey(keyCode)) {
        if (KeyEvent.isConfirmKey(keyCode) && event.hasNoModifiers()) {
            if ((mViewFlags & ENABLED_MASK) == DISABLED) {
            if ((mViewFlags & ENABLED_MASK) == DISABLED) {
                return true;
                return true;
            }
            }