Generate SSD PDF choice item callback from typed Jerboa

ober

c115461a3ac0bce94735700916c0cfeb91e5c4c8

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index a16b2ce..44f8a98 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -4823,6 +4823,7 @@
                 mainActivitySetNegativeCancelAppend
                 mainActivitySetPositiveLoadPage
                 runBackground mainActivityLogClientEventAsync
+                mainActivitySetPdfChoiceItems
                 mainActivityInstallApproveAreaDialogButton
                 mainActivityInstallAppendDialogButton
                 mainActivityInstallEditDialogButtons
@@ -4929,6 +4930,7 @@
         (type SimpleOnScaleGestureListener)
         (type SsdSession)
         (type SsdReviewView)
+        (type SsdPdfChoice)
         (type MainActivity)
         (type BoxType)
         (type TruthStore)
@@ -4966,6 +4968,11 @@
                   (text : String)
                   (listener : (-> DialogInterface Int32 Unit))) : Builder
           (kotlin-member-call setNeutralButton))
+        (extern (alertDialogBuilderSetItemsRaw
+                  (builder : Builder)
+                  (items : (Array String))
+                  (listener : (-> DialogInterface Int32 Unit))) : Builder
+          (kotlin-member-call setItems))
         (extern (alertDialogGetButtonRaw
                   (dialog : AlertDialog)
                   (which : Int32)) : Button
@@ -5081,6 +5088,9 @@
                                      (first : Char)
                                      (second : Char)) : (List String)
           (kotlin-member-call split))
+        (extern (stringListToTypedArray
+                  (items : (List String))) : (Array String)
+          (kotlin-member-call toTypedArray))
         (extern (androidColorRgb (red : Int32)
                                  (green : Int32)
                                  (blue : Int32)) : Int32
@@ -5389,6 +5399,11 @@
                   (payload : JSONObject)
                   (readTimeoutMillis : Int32)) : Unit
           (kotlin-member-call sendClientLog))
+        (extern (mainActivityLoadPdfRaw
+                  (activity : MainActivity)
+                  (uri : Uri)
+                  (flags : Int32)) : Unit
+          (kotlin-member-call loadPdf))
         (extern (mainActivityReviewViewSet
                   (activity : MainActivity)
                   (view : SsdReviewView)) : Unit
@@ -6753,6 +6768,19 @@
                         readTimeoutMillis)
                       (catch (error : Exception)
                         (begin))))))))
+        (def (mainActivitySetPdfChoiceItems
+               (builder : Builder)
+               (activity : MainActivity)
+               (choices : (List SsdPdfChoice))
+               (readFlag : Int32)) : Builder
+          (alertDialogBuilderSetItemsRaw
+            builder
+            (stringListToTypedArray (ssdPdfChoiceLabels choices))
+            (lambda ((unusedDialog : DialogInterface) (which : Int32))
+              (mainActivityLoadPdfRaw
+                activity
+                (ssdPdfChoiceUriAt choices which)
+                readFlag))))
         (def (mainActivityInstallApproveAreaDialogButton
                (activity : MainActivity)
                (dialog : AlertDialog)
@@ -9208,12 +9236,14 @@
        "    private fun showPdfChoiceDialog(choices: List<SsdPdfChoice>, title: String) {"
        "        mainActivitySetPositiveOpenAnyPdf("
        "            mainActivitySetNeutralChooseSsdPdfFolder("
-       "                AlertDialog.Builder(this)"
-       "                    .setTitle(title)"
-       "                    .setItems(ssdPdfChoiceLabels(choices).toTypedArray()) { _, which ->"
-       "                        loadPdf(ssdPdfChoiceUriAt(choices, which), Intent.FLAG_GRANT_READ_URI_PERMISSION)"
-       "                    }"
-       "                    .setNegativeButton(\"Cancel\", null),"
+       "                mainActivitySetPdfChoiceItems("
+       "                    AlertDialog.Builder(this)"
+       "                        .setTitle(title)"
+       "                        .setNegativeButton(\"Cancel\", null),"
+       "                    this,"
+       "                    choices,"
+       "                    Intent.FLAG_GRANT_READ_URI_PERMISSION"
+       "                ),"
        "                this"
        "            ),"
        "            this"
@@ -9377,7 +9407,7 @@
        "        }"
        "    }"
        ""
-       "    private fun loadPdf(uri: Uri, flags: Int, initialPageIndex: Int = 0, restoring: Boolean = false) {"
+       "    internal fun loadPdf(uri: Uri, flags: Int, initialPageIndex: Int = 0, restoring: Boolean = false) {"
        "        try {"
        "            contentResolver.takePersistableUriPermission(uri, flags and Intent.FLAG_GRANT_READ_URI_PERMISSION)"
        "        } catch (_: Exception) {"