Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Check for a null pressure range for motion events #7986

Merged
merged 1 commit into from
Feb 27, 2019

Conversation

jason-simmons
Copy link
Member

@jason-simmons jason-simmons merged commit 1089b5c into flutter:master Feb 27, 2019
@Hixie
Copy link
Contributor

Hixie commented Feb 27, 2019

test?

engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Feb 27, 2019
cbracken added a commit to cbracken/flutter that referenced this pull request Feb 28, 2019
flutter/engine@3e4e6f5c5 Provide batching for semantics updates (flutter/engine#7988)
flutter/engine@0852795bf Roll src/third_party/skia ff84d8a900d4..67d87128fd00 (7 commits) (flutter/engine#7987)
flutter/engine@1089b5c9f Check for a null pressure range for motion events (flutter/engine#7986)
flutter/engine@b7d512949 [macos] Add hover support to FLEViewController (flutter/engine#7975)
flutter/engine@a82c7ee73 Add async events to pipeline flows. (flutter/engine#7985)
flutter/engine@c3eb7aea8 Roll src/third_party/skia ab3f8674c9d2..ff84d8a900d4 (1 commits) (flutter/engine#7983)
flutter/engine@15793288e Roll src/third_party/dart 9450c6d829..40bab34fbd (8 commits)
flutter/engine@b324969c1 Roll src/third_party/dart e94e797d7b..9450c6d829 (8 commits)
flutter/engine@3f3e4ec90 Roll src/third_party/skia f6faf2fcea7b..ab3f8674c9d2 (2 commits) (flutter/engine#7980)
flutter/engine@d162ad842 Roll src/third_party/skia 4dbb96dfaa04..f6faf2fcea7b (7 commits) (flutter/engine#7977)
flutter/engine@5deb15cdf Roll src/third_party/dart 05bba46133..e94e797d7b (5 commits)
flutter/engine@4db7c3050 Android Embedding PR 10: Add system channels to FlutterEngine. (flutter/engine#7960)
flutter/engine@9f92324fd Suppress deprecation warning for usage of Configuration.locale (flutter/engine#7973)
flutter/engine@9b21ea857 Roll src/third_party/dart 385be0cf31..05bba46133 (6 commits)
flutter/engine@e3f1bdc4d Roll src/third_party/skia adfc6e40df30..4dbb96dfaa04 (6 commits) (flutter/engine#7970)
flutter/engine@e32531f0e Switch flutter's dart sdk to full and add dartdevc libraries (flutter/engine#7968)
flutter/engine@fb1c543dd Link dart:* sources into engine for debugger source support (flutter/engine#7908)
flutter/engine@dd3656a51 Roll src/third_party/dart 0f9a5198bd..385be0cf31 (14 commits)
flutter/engine@4434a39c7 Add api 21 check to LocalizationChannel.java (flutter/engine#7967)
cbracken added a commit to flutter/flutter that referenced this pull request Feb 28, 2019
flutter/engine@3e4e6f5c5 Provide batching for semantics updates (flutter/engine#7988)
flutter/engine@0852795bf Roll src/third_party/skia ff84d8a900d4..67d87128fd00 (7 commits) (flutter/engine#7987)
flutter/engine@1089b5c9f Check for a null pressure range for motion events (flutter/engine#7986)
flutter/engine@b7d512949 [macos] Add hover support to FLEViewController (flutter/engine#7975)
flutter/engine@a82c7ee73 Add async events to pipeline flows. (flutter/engine#7985)
flutter/engine@c3eb7aea8 Roll src/third_party/skia ab3f8674c9d2..ff84d8a900d4 (1 commits) (flutter/engine#7983)
flutter/engine@15793288e Roll src/third_party/dart 9450c6d829..40bab34fbd (8 commits)
flutter/engine@b324969c1 Roll src/third_party/dart e94e797d7b..9450c6d829 (8 commits)
flutter/engine@3f3e4ec90 Roll src/third_party/skia f6faf2fcea7b..ab3f8674c9d2 (2 commits) (flutter/engine#7980)
flutter/engine@d162ad842 Roll src/third_party/skia 4dbb96dfaa04..f6faf2fcea7b (7 commits) (flutter/engine#7977)
flutter/engine@5deb15cdf Roll src/third_party/dart 05bba46133..e94e797d7b (5 commits)
flutter/engine@4db7c3050 Android Embedding PR 10: Add system channels to FlutterEngine. (flutter/engine#7960)
flutter/engine@9f92324fd Suppress deprecation warning for usage of Configuration.locale (flutter/engine#7973)
flutter/engine@9b21ea857 Roll src/third_party/dart 385be0cf31..05bba46133 (6 commits)
flutter/engine@e3f1bdc4d Roll src/third_party/skia adfc6e40df30..4dbb96dfaa04 (6 commits) (flutter/engine#7970)
flutter/engine@e32531f0e Switch flutter's dart sdk to full and add dartdevc libraries (flutter/engine#7968)
flutter/engine@fb1c543dd Link dart:* sources into engine for debugger source support (flutter/engine#7908)
flutter/engine@dd3656a51 Roll src/third_party/dart 0f9a5198bd..385be0cf31 (14 commits)
flutter/engine@4434a39c7 Add api 21 check to LocalizationChannel.java (flutter/engine#7967)
engine-flutter-autoroll added a commit to flutter/flutter that referenced this pull request Feb 28, 2019
flutter/engine@4434a39...3e4e6f5

git log 4434a39..3e4e6f5 --no-merges --oneline
3e4e6f5 Provide batching for semantics updates (flutter/engine#7988)
0852795 Roll src/third_party/skia ff84d8a900d4..67d87128fd00 (7 commits) (flutter/engine#7987)
1089b5c Check for a null pressure range for motion events (flutter/engine#7986)
b7d5129 [macos] Add hover support to FLEViewController (flutter/engine#7975)
a82c7ee Add async events to pipeline flows. (flutter/engine#7985)
c3eb7ae Roll src/third_party/skia ab3f8674c9d2..ff84d8a900d4 (1 commits) (flutter/engine#7983)
1579328 Roll src/third_party/dart 9450c6d829..40bab34fbd (8 commits)
b324969 Roll src/third_party/dart e94e797d7b..9450c6d829 (8 commits)
3f3e4ec Roll src/third_party/skia f6faf2fcea7b..ab3f8674c9d2 (2 commits) (flutter/engine#7980)
d162ad8 Roll src/third_party/skia 4dbb96dfaa04..f6faf2fcea7b (7 commits) (flutter/engine#7977)
5deb15c Roll src/third_party/dart 05bba46133..e94e797d7b (5 commits)
4db7c30 Android Embedding PR 10: Add system channels to FlutterEngine. (flutter/engine#7960)
9f92324 Suppress deprecation warning for usage of Configuration.locale (flutter/engine#7973)
9b21ea8 Roll src/third_party/dart 385be0cf31..05bba46133 (6 commits)
e3f1bdc Roll src/third_party/skia adfc6e40df30..4dbb96dfaa04 (6 commits) (flutter/engine#7970)
e32531f Switch flutter's dart sdk to full and add dartdevc libraries (flutter/engine#7968)
fb1c543 Link dart:* sources into engine for debugger source support (flutter/engine#7908)
dd3656a Roll src/third_party/dart 0f9a5198bd..385be0cf31 (14 commits)

The AutoRoll server is located here: https://autoroll.skia.org/r/flutter-engine-flutter-autoroll

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md

If the roll is causing failures, please contact the current sheriff (garyq@google.com), and stop
the roller if necessary.
@fishyer
Copy link

fishyer commented Mar 1, 2019

I still have this problem, my current version is 1.2.1, I already have this modification record, but it doesn't work.

@matthew-carroll
Copy link
Contributor

@fishyer would you mind filing another bug, including your Flutter doctor output, along with your current crash log?

@fishyer
Copy link

fishyer commented Mar 2, 2019

@matthew-carroll this is my flutter doctor output :
[√] Flutter (Channel stable, v1.2.1, on Microsoft Windows [Version 10.0.17134.590], locale zh-CN)
[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[√] Android Studio (version 3.3)
[√] IntelliJ IDEA Ultimate Edition (version 2018.2)
[√] VS Code (version 1.31.1)
[√] Connected device (1 available)

this is my crash log

java.lang.NullPointerException: Attempt to invoke virtual method 'float android.view.InputDevice$MotionRange.getMin()' on a null object reference
        at io.flutter.view.FlutterView.addPointerForIndex(FlutterView.java:480)
        at io.flutter.view.FlutterView.onTouchEvent(FlutterView.java:542)
        at android.view.View.dispatchTouchEvent(View.java:11788)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2604)
        at com.scwang.smartrefresh.layout.SmartRefreshLayout.dispatchTouchEvent(SmartRefreshLayout.java:1014)
        at com.ezbuy.android.publib.widget.refresh.EzRefreshLayout.dispatchTouchEvent(EzRefreshLayout.kt:87)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2661)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2661)
        at com.ezbuy.android.publib.widget.BaseViewPager.dispatchTouchEvent(BaseViewPager.java:68)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2661)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2661)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2661)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2661)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2661)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2974)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2661)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:549)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1953)
        at android.app.Activity.dispatchTouchEvent(Activity.java:3559)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:502)
        at android.view.View.dispatchPointerEvent(View.java:12027)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5278)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5067)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4581)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4634)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4600)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4727)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4608)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4784)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4581)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4634)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4600)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4608)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4581)

this is my layout.xml

<com.ezbuy.android.publib.widget.refresh.EzRefreshLayout
        android:id="@+id/refresh_detail"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible">

        <androidx.coordinatorlayout.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <com.google.android.material.appbar.AppBarLayout
                android:id="@+id/appbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fadingEdge="none"
                app:elevation="0dp">

                <com.ezbuy.android.home.FlutterContainerView
                    android:id="@+id/fr_flutter"
                    android:layout_width="match_parent"
                    android:layout_height="1000dp"
                    app:layout_scrollFlags="scroll"
                    tools:visibility="gone" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="51dp"
                    android:gravity="center_vertical"
                    android:paddingLeft="15dp"
                    android:text="Top Products"
                    android:textColor="@color/color_33"
                    android:textSize="17sp"
                    app:layout_scrollFlags="scroll" />

            </com.google.android.material.appbar.AppBarLayout>

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rv_detail"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:overScrollMode="never"
                app:layout_behavior="@string/appbar_scrolling_view_behavior" />

        </androidx.coordinatorlayout.widget.CoordinatorLayout>

    </com.ezbuy.android.publib.widget.refresh.EzRefreshLayout>

the fr_flutter is my FlutterView's parent

@fishyer
Copy link

fishyer commented Mar 2, 2019

@matthew-carroll When I pull down, hold it down and slide it up for a while, it will definitely crash.

@matthew-carroll
Copy link
Contributor

@fishyer Comparing your crash log with the current code in FlutterView doesn't seem to match up, which suggests that you're not using the latest version on master:

https://github.com/flutter/engine/blob/master/shell/platform/android/io/flutter/view/FlutterView.java#L480

Can you please try this same situation with the latest version of master and report back with an updated crash log, or let us know if the issue is resolved?

najeira pushed a commit to najeira/flutter-engine that referenced this pull request Mar 4, 2019
@jkyeo
Copy link

jkyeo commented Mar 12, 2019

Same here when start FlutterActivity:


device: Xiaomi5 running Android6.0


Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.2.1, on Mac OS X 10.14.3 18D109, locale zh-Hans-CN)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[!] iOS toolchain - develop for iOS devices (Xcode 10.1)
    ✗ Verify that all connected devices have been paired with this computer in Xcode.
      If all devices have been paired, libimobiledevice and ideviceinstaller may require updating.
      To update with Brew, run:
        brew update
        brew uninstall --ignore-dependencies libimobiledevice
        brew uninstall --ignore-dependencies usbmuxd
        brew install --HEAD usbmuxd
        brew unlink usbmuxd
        brew link usbmuxd
        brew install --HEAD libimobiledevice
        brew install ideviceinstaller
[✓] Android Studio (version 3.3)
[✓] VS Code (version 1.32.0)
[✓] Connected device (2 available)

crash log:

03-11 18:31:45.053 8566 8566 E AndroidRuntime: FATAL EXCEPTION: main
03-11 18:31:45.053 8566 8566 E AndroidRuntime: Process: com.liou.nettest, PID: 8566
03-11 18:31:45.053 8566 8566 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'float android.view.InputDevice$MotionRange.getMin()' on a null object reference
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at io.flutter.view.FlutterView.addPointerForIndex(FlutterView.java:480)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at io.flutter.view.FlutterView.onTouchEvent(FlutterView.java:542)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.View.dispatchTouchEvent(View.java:9955)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.SurfaceView.dispatchTouchEvent(SurfaceView.java:322)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2671)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2301)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2671)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2301)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2671)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2301)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:414)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1810)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.app.Activity.dispatchTouchEvent(Activity.java:3196)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:376)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.View.dispatchPointerEvent(View.java:10177)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4501)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4366)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3906)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3959)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3925)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4052)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3933)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4109)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3906)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3959)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3925)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3933)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3906)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6277)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6251)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6212)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6383)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:187)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.os.MessageQueue.nativePollOnce(Native Method)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.os.MessageQueue.next(MessageQueue.java:323)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.os.Looper.loop(Looper.java:142)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6321)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
03-11 18:31:45.053 8566 8566 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)

rom1v added a commit to Genymobile/scrcpy that referenced this pull request Mar 14, 2021
Virtual device is only for keyboard sources, not mouse or touchscreen
sources. Here is the value of InputDevice.getDevice(-1).toString():

    Input Device -1: Virtual
      Descriptor: ...
      Generation: 2
      Location: built-in
      Keyboard Type: alphabetic
      Has Vibrator: false
      Has mic: false
      Sources: 0x301 ( keyboard dpad )

InputDevice.getDeviceId() documentation says:

> An id of zero indicates that the event didn't come from a physical
> device and maps to the default keymap.

<https://developer.android.com/reference/android/view/InputEvent#getDeviceId()>

However, injecting events with a device id of 0 causes event.getDevice()
to be null on the client-side.

Commit 26529d3 used -1 as a workaround
to avoid a NPE on a specific Android TV device. But this is a bug in the
device system, which wrongly assumes that input device may not be null.

A similar issue was present in Flutter, but it is now fixed:
 - <flutter/flutter#30665>
 - <flutter/engine#7986>

On the other hand, using an id of -1 for touchscreen events (which is
invalid) causes issues for some apps:
<#2125 (comment)>

Therefore, use a device id of 0.

An alternative could be to find an existing device matching the source,
like "adb shell input" does. See getInputDeviceId():
<https://android.googlesource.com/platform/frameworks/base.git/+/master/cmds/input/src/com/android/commands/input/Input.java>

But it seems better to indicate that the event didn't come from a
physical device, and it would not solve #962 anyway, because an Android
TV has no touchscreen.

Refs #962 <#962>
Fixes #2125 <#2125>
rom1v added a commit to Genymobile/scrcpy that referenced this pull request Mar 14, 2021
Virtual device is only for keyboard sources, not mouse or touchscreen
sources. Here is the value of InputDevice.getDevice(-1).toString():

    Input Device -1: Virtual
      Descriptor: ...
      Generation: 2
      Location: built-in
      Keyboard Type: alphabetic
      Has Vibrator: false
      Has mic: false
      Sources: 0x301 ( keyboard dpad )

InputDevice.getDeviceId() documentation says:

> An id of zero indicates that the event didn't come from a physical
> device and maps to the default keymap.

<https://developer.android.com/reference/android/view/InputEvent#getDeviceId()>

However, injecting events with a device id of 0 causes event.getDevice()
to be null on the client-side.

Commit 26529d3 used -1 as a workaround
to avoid a NPE on a specific Android TV device. But this is a bug in the
device system, which wrongly assumes that input device may not be null.

A similar issue was present in Flutter, but it is now fixed:
 - <flutter/flutter#30665>
 - <flutter/engine#7986>

On the other hand, using an id of -1 for touchscreen events (which is
invalid) causes issues for some apps:
<#2125 (comment)>

Therefore, use a device id of 0.

An alternative could be to find an existing device matching the source,
like "adb shell input" does. See getInputDeviceId():
<https://android.googlesource.com/platform/frameworks/base.git/+/master/cmds/input/src/com/android/commands/input/Input.java>

But it seems better to indicate that the event didn't come from a
physical device, and it would not solve #962 anyway, because an Android
TV has no touchscreen.

Refs #962 <#962>
Fixes #2125 <#2125>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants