Move SSD review interaction state updates to typed Kotlin

ober

cccd6956a5520ec074569accc441467a8f2a8f08

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index 76b63a3..7651136 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -4649,6 +4649,9 @@
                 reviewViewSetViewportState reviewViewSetViewportOffsets
                 reviewViewSetScale reviewViewSetRotationDegrees
                 reviewViewTranslateViewportOffsets
+                reviewViewSetPointerActive reviewViewSetMoved
+                reviewViewSetDragStart reviewViewSetDragEnd
+                reviewViewClearDragPoints reviewViewClearInteractionDetails
                 mainActivitySelectGroupId mainActivityClearSession
                 mainActivityShowSession mainActivitySetAppendMode
                 mainActivitySetSsdAreaMode mainActivityClearInteractionModes
@@ -4789,6 +4792,18 @@
         (extern (reviewViewRotationDegreesSet (view : SsdReviewView)
                                              (degrees : Int32)) : Unit
           (kotlin-member-set rotationDegrees))
+        (extern (reviewViewPointerActiveSet (view : SsdReviewView)
+                                           (active : Bool)) : Unit
+          (kotlin-member-set pointerActive))
+        (extern (reviewViewMovedSet (view : SsdReviewView)
+                                    (moved : Bool)) : Unit
+          (kotlin-member-set moved))
+        (extern (reviewViewDragStartSet (view : SsdReviewView)
+                                        (point : (Nullable FloatArray))) : Unit
+          (kotlin-member-set dragStart))
+        (extern (reviewViewDragEndSet (view : SsdReviewView)
+                                      (point : (Nullable FloatArray))) : Unit
+          (kotlin-member-set dragEnd))
         (extern (mainActivityCurrentSessionSet
                   (activity : MainActivity)
                   (session : (Nullable SsdSession))) : Unit
@@ -5385,6 +5400,27 @@
             view
             (+ offsetX deltaX)
             (+ offsetY deltaY)))
+        (def (reviewViewSetPointerActive (view : SsdReviewView)
+                                         (active : Bool)) : Unit
+          (reviewViewPointerActiveSet view active))
+        (def (reviewViewSetMoved (view : SsdReviewView)
+                                 (moved : Bool)) : Unit
+          (reviewViewMovedSet view moved))
+        (def (reviewViewSetDragStart (view : SsdReviewView)
+                                     (point : FloatArray)) : Unit
+          (reviewViewDragStartSet view (nullable-some point)))
+        (def (reviewViewSetDragEnd (view : SsdReviewView)
+                                   (point : FloatArray)) : Unit
+          (reviewViewDragEndSet view (nullable-some point)))
+        (def (reviewViewClearDragPoints (view : SsdReviewView)) : Unit
+          (begin
+            (reviewViewDragStartSet view (nullable-none FloatArray))
+            (reviewViewDragEndSet view (nullable-none FloatArray))))
+        (def (reviewViewClearInteractionDetails (view : SsdReviewView)) : Unit
+          (begin
+            (reviewViewClearDragPoints view)
+            (reviewViewSetPointerActive view #f)
+            (reviewViewSetMoved view #f)))
         (def (mainActivitySelectGroupId (activity : MainActivity)
                                         (view : SsdReviewView)
                                         (id : (Nullable String))) : Unit
@@ -8793,12 +8829,12 @@
        "    internal var rotationDegrees = 0"
        "    private var lastX = 0f"
        "    private var lastY = 0f"
-	       "    private var dragStart: FloatArray? = null"
-	       "    private var dragEnd: FloatArray? = null"
+	       "    internal var dragStart: FloatArray? = null"
+	       "    internal var dragEnd: FloatArray? = null"
 	       "    private var pointerX = 0f"
 	       "    private var pointerY = 0f"
-	       "    private var pointerActive = false"
-	       "    private var moved = false"
+	       "    internal var pointerActive = false"
+	       "    internal var moved = false"
        ""
 	       "    private val scaler = ScaleGestureDetector(context, object : ScaleGestureDetector.SimpleOnScaleGestureListener() {"
 	       "        override fun onScale(detector: ScaleGestureDetector): Boolean {"
@@ -8844,23 +8880,24 @@
        "                parent.requestDisallowInterceptTouchEvent(true)"
        "                lastX = event.x"
        "                lastY = event.y"
-	       "                moved = false"
+	       "                reviewViewSetMoved(this, false)"
 		       "                if (touchSelectionActive(selectMode)) {"
 	       "                    pointerX = event.x"
 	       "                    pointerY = event.y"
-	       "                    pointerActive = true"
-	       "                    dragStart = selectionPoint(event)"
-	       "                    dragEnd = dragStart"
+	       "                    reviewViewSetPointerActive(this, true)"
+	       "                    val startPoint = selectionPoint(event)"
+	       "                    reviewViewSetDragStart(this, startPoint)"
+	       "                    reviewViewSetDragEnd(this, startPoint)"
 	       "                }"
        "        } else if (motionActionIsMove(event.actionMasked, MotionEvent.ACTION_MOVE)) {"
        "                val dx = event.x - lastX"
        "                val dy = event.y - lastY"
-       "                if (touchMoveExceeded(dx, dy)) moved = true"
+       "                if (touchMoveExceeded(dx, dy)) reviewViewSetMoved(this, true)"
 		       "                if (touchSelectionActive(selectMode)) {"
 	       "                    pointerX = event.x"
 	       "                    pointerY = event.y"
-	       "                    pointerActive = true"
-	       "                    dragEnd = selectionPoint(event)"
+	       "                    reviewViewSetPointerActive(this, true)"
+	       "                    reviewViewSetDragEnd(this, selectionPoint(event))"
 		       "                } else if (touchPanReady(selectMode, scaler.isInProgress)) {"
 	       "                    reviewViewTranslateViewportOffsets(this, offsetX, offsetY, dx, dy)"
 	       "                    clampOffsets()"
@@ -8882,7 +8919,7 @@
        "                    }"
 	       "                    performClick()"
 	       "                }"
-	       "                pointerActive = false"
+	       "                reviewViewSetPointerActive(this, false)"
 	       "                parent.requestDisallowInterceptTouchEvent(false)"
        "        }"
        "        return true"
@@ -8936,10 +8973,7 @@
        ""
        "    fun clearInteractionState() {"
 	       "        reviewViewSetSelectMode(this, false, snapSelectionToCells)"
-	       "        dragStart = null"
-	       "        dragEnd = null"
-	       "        pointerActive = false"
-	       "        moved = false"
+	       "        reviewViewClearInteractionDetails(this)"
 	       "        invalidate()"
 	       "    }"
        ""
@@ -8949,8 +8983,7 @@
        "        val start = nullableFloatArrayOrEmpty(dragStart)"
        "        val end = nullableFloatArrayOrEmpty(dragEnd)"
        "        val rect = normalizeRect(floatArrayOf(start[0], start[1], end[0], end[1]))"
-       "        dragStart = null"
-       "        dragEnd = null"
+       "        reviewViewClearDragPoints(this)"
        "        invalidate()"
 	       "        val sess = session"
 	       "        if (sessionMissing(sess)) {"