Fix trackball down and movement bugs.

Bug: 2823788
Change-Id: Icb0c392b58f7e735614460b5eb87439cb73ac4f2
diff --git a/libs/ui/InputDispatcher.cpp b/libs/ui/InputDispatcher.cpp
index a438c69..a55864b 100644
--- a/libs/ui/InputDispatcher.cpp
+++ b/libs/ui/InputDispatcher.cpp
@@ -650,10 +650,20 @@
             firstMotionSample = & motionEntry->firstSample;
         }
 
+        // Set the X and Y offset depending on the input source.
+        float xOffset, yOffset;
+        if (motionEntry->source & AINPUT_SOURCE_CLASS_POINTER) {
+            xOffset = dispatchEntry->xOffset;
+            yOffset = dispatchEntry->yOffset;
+        } else {
+            xOffset = 0.0f;
+            yOffset = 0.0f;
+        }
+
         // Publish the motion event and the first motion sample.
         status = connection->inputPublisher.publishMotionEvent(motionEntry->deviceId,
                 motionEntry->source, action, motionEntry->edgeFlags, motionEntry->metaState,
-                dispatchEntry->xOffset, dispatchEntry->yOffset,
+                xOffset, yOffset,
                 motionEntry->xPrecision, motionEntry->yPrecision,
                 motionEntry->downTime, firstMotionSample->eventTime,
                 motionEntry->pointerCount, motionEntry->pointerIds,
diff --git a/libs/ui/InputReader.cpp b/libs/ui/InputReader.cpp
index 403afe7..30e391f 100644
--- a/libs/ui/InputReader.cpp
+++ b/libs/ui/InputReader.cpp
@@ -270,6 +270,10 @@
             device->trackball.accumulator.fields |=
                     InputDevice::TrackballState::Accumulator::FIELD_BTN_MOUSE;
             device->trackball.accumulator.btnMouse = down;
+
+            // Process the trackball change now since we may not receive a sync immediately.
+            onTrackballStateChanged(rawEvent->when, device);
+            device->trackball.accumulator.clear();
             return;
         }
     }