Move SSD group approval mutation to typed Kotlin

ober

11215123baea9ab9ff180070c851ccf81f66bd95

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index 14d461a..ebaeaf6 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -563,7 +563,7 @@
                 ssdSessionCellIdSet
                 ssdSessionFindCellById ssdSessionCellsByIds
                 ssdSessionBBoxForCellIds ssdSessionRecomputeGroup
-                ssdSessionSuppressGroupAsDeleted
+                ssdSessionApproveGroup ssdSessionSuppressGroupAsDeleted
                 appendUniqueCellIdsToGroup
                 ssdSessionAddDetectedCellsInsideArea ssdSessionAddOcrWords
                 ssdSessionBoundedSsdArea ssdAreaSelectionTooSmall
@@ -1034,6 +1034,12 @@
               (if (= (list-size groupCells) (int32 0))
                 (SsdGroup-count-set! group (SsdGroup-count group))
                 (SsdGroup-bbox-set! group (bboxForMutableCells groupCells))))))
+        (def (ssdSessionApproveGroup (session : SsdSession)
+                                     (group : SsdGroup)) : Unit
+          (begin
+            (SsdGroup-status-set! group "reviewed")
+            (SsdGroup-notes-set! group "Approved on Android")
+            (ssdSessionRecomputeGroup session group)))
         (def (ssdSessionSuppressGroupAsDeleted (session : SsdSession)
                                                (group : SsdGroup)) : Unit
           (begin
@@ -7075,9 +7081,7 @@
        "        if (ssdGroupMissing(group)) return"
        "        val approvedGroup = ssdGroupOrEmpty(group)"
        "        finalizeGroupLabel(approvedGroup)"
-       "        approvedGroup.status = \"reviewed\""
-       "        approvedGroup.notes = \"Approved on Android\""
-       "        ssdSessionRecomputeGroup(session, approvedGroup)"
+       "        ssdSessionApproveGroup(session, approvedGroup)"
        "        truthStore.appendEvent(\"group_approved\", session)"
        "        reviewView.performHapticFeedback(HapticFeedbackConstants.CONFIRM)"
        "        reviewView.invalidate()"