Route SSD viewport restoration through typed view helper

ober

3e9a1e56f1106dd74216ffa122de54914750e2a2

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index 6ceb7d9..6a0fa57 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -7277,6 +7277,7 @@
                         (begin))))))))
         (def (mainActivitySaveTruthSnapshotAsync
                (activity : MainActivity)
+               (view : SsdReviewView)
                (store : TruthStore)
                (truth : JSONObject)
                (viewport : (Nullable ViewportState))
@@ -7291,9 +7292,7 @@
                     activity
                     (lambda ()
                       (begin
-                        (mainActivityRestoreViewportAfterLayoutRaw
-                          activity
-                          viewport)
+                        (reviewViewRestoreViewportAfterLayout view viewport)
                         (mainActivitySetStatusRaw activity savedStatus)
                         (invoke afterSaved)))))
                 (catch (error : Exception)
@@ -7301,9 +7300,7 @@
                     activity
                     (lambda ()
                       (begin
-                        (mainActivityRestoreViewportAfterLayoutRaw
-                          activity
-                          viewport)
+                        (reviewViewRestoreViewportAfterLayout view viewport)
                         (mainActivitySetStatusRaw
                           activity
                           (saveFailedStatus
@@ -7464,8 +7461,8 @@
                             activity
                             view
                             bitmap)
-                          (mainActivityRestoreViewportAfterLayoutRaw
-                            activity
+                          (reviewViewRestoreViewportAfterLayout
+                            view
                             restoredViewport)
                           (mainActivitySetStatusRaw
                             activity
@@ -10115,10 +10112,6 @@
        "        renderCurrentPage()"
        "    }"
        ""
-       "    internal fun restoreViewportAfterLayout(viewport: ViewportState?) {"
-       "        reviewViewRestoreViewportAfterLayout(reviewView, viewport)"
-       "    }"
-       ""
        "    private fun startAppendMode() {"
        "        if (sessionMissing(currentSession)) return"
        "        val group = mainActivitySelectRequestedGroup(this, reviewView, currentSession, selectedGroupId)"
@@ -10372,9 +10365,9 @@
        "        val truth = ssdSessionToTruthJson(session)"
        "        val viewport = reviewViewCaptureViewportForSave(reviewView)"
         "        mainActivityFinishSelectInteraction(this, reviewView)"
-       "        restoreViewportAfterLayout(viewport)"
+       "        reviewViewRestoreViewportAfterLayout(reviewView, viewport)"
        "        setStatus(savingStatus)"
-       "        mainActivitySaveTruthSnapshotAsync(this, truthStore, truth, viewport, savedStatus, afterSaved)"
+       "        mainActivitySaveTruthSnapshotAsync(this, reviewView, truthStore, truth, viewport, savedStatus, afterSaved)"
        "    }"
        ""
        "    internal fun approveArea("