Fix touch can't work after enabled the associated viewport

If a device has associated port but there is no viewport found, it would
be expeced to be disabled. But for some devices, such as touch screen or
joystick, they have to read the axis ranges info in InputMapper at first
time configuration changed. So we have to defer disabling the device after
info has been read when the device plugged.

Bug: 140205788
Test: atest inputflinger_tests
Change-Id: I9dd55e0016b6a020aab211dada45880195aec8dd
diff --git a/services/inputflinger/InputReader.cpp b/services/inputflinger/InputReader.cpp
index 1cbf78e..d59f274 100644
--- a/services/inputflinger/InputReader.cpp
+++ b/services/inputflinger/InputReader.cpp
@@ -1141,13 +1141,24 @@
                 }
             }
 
-            setEnabled(enabled, when);
+            if (changes) {
+                // For first-time configuration, only allow device to be disabled after mappers have
+                // finished configuring. This is because we need to read some of the properties from
+                // the device's open fd.
+                setEnabled(enabled, when);
+            }
         }
 
         for (InputMapper* mapper : mMappers) {
             mapper->configure(when, config, changes);
             mSources |= mapper->getSources();
         }
+
+        // If a device is just plugged but it might be disabled, we need to update some info like
+        // axis range of touch from each InputMapper first, then disable it.
+        if (!changes) {
+            setEnabled(config->disabledDevices.find(mId) == config->disabledDevices.end(), when);
+        }
     }
 }