Merge "Use previous pressure value if the current fusion data is zero." into mnc-dev
diff --git a/services/inputflinger/InputReader.cpp b/services/inputflinger/InputReader.cpp
index c6389a9..2888785 100644
--- a/services/inputflinger/InputReader.cpp
+++ b/services/inputflinger/InputReader.cpp
@@ -4076,14 +4076,20 @@
 }
 
 void TouchInputMapper::applyExternalStylusTouchState(nsecs_t when) {
-    CookedPointerData& cpd = mCurrentCookedState.cookedPointerData;
-    if (mExternalStylusId != -1 && cpd.isTouching(mExternalStylusId)) {
-        if (mExternalStylusState.pressure != 0.0f) {
-            PointerCoords& coords = cpd.editPointerCoordsWithId(mExternalStylusId);
-            coords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, mExternalStylusState.pressure);
-        }
+    CookedPointerData& currentPointerData = mCurrentCookedState.cookedPointerData;
+    const CookedPointerData& lastPointerData = mLastCookedState.cookedPointerData;
 
-        PointerProperties& properties = cpd.editPointerPropertiesWithId(mExternalStylusId);
+    if (mExternalStylusId != -1 && currentPointerData.isTouching(mExternalStylusId)) {
+        float pressure = mExternalStylusState.pressure;
+        if (pressure == 0.0f && lastPointerData.isTouching(mExternalStylusId)) {
+            const PointerCoords& coords = lastPointerData.pointerCoordsForId(mExternalStylusId);
+            pressure = coords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE);
+        }
+        PointerCoords& coords = currentPointerData.editPointerCoordsWithId(mExternalStylusId);
+        coords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, pressure);
+
+        PointerProperties& properties =
+                currentPointerData.editPointerPropertiesWithId(mExternalStylusId);
         if (mExternalStylusState.toolType != AMOTION_EVENT_TOOL_TYPE_UNKNOWN) {
             properties.toolType = mExternalStylusState.toolType;
         }
diff --git a/services/inputflinger/InputReader.h b/services/inputflinger/InputReader.h
index aadc37f..ae090c1 100644
--- a/services/inputflinger/InputReader.h
+++ b/services/inputflinger/InputReader.h
@@ -881,11 +881,11 @@
         return pointerProperties[idToIndex[id]];
     }
 
-    inline bool isHovering(uint32_t pointerIndex) {
+    inline bool isHovering(uint32_t pointerIndex) const {
         return hoveringIdBits.hasBit(pointerProperties[pointerIndex].id);
     }
 
-    inline bool isTouching(uint32_t pointerIndex) {
+    inline bool isTouching(uint32_t pointerIndex) const {
         return touchingIdBits.hasBit(pointerProperties[pointerIndex].id);
     }
 };