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);
     }
 };
