Generate SSD PDF dialogs from typed Jerboa

ober

19d83fcd8a43ab85afdbc0817b999bd870c2a156

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index c3f6ec7..1ae016d 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -4925,6 +4925,8 @@
                 mainActivitySetPositiveLoadPage
                 runBackground runBackgroundNamed mainActivityLogClientEventAsync
                 mainActivitySetPdfChoiceItems
+                mainActivityShowPdfChoiceDialog
+                mainActivityShowNoSsdPdfsDialog
                 mainActivityPullTruthDumpAsync
                 mainActivityPushTruthDumpAsync
                 mainActivityExportTruthZip mainActivityImportTruthZip
@@ -5851,14 +5853,9 @@
                   (activity : MainActivity)
                   (uri : Uri)) : (List SsdPdfChoice)
           (kotlin-member-call findSsdPdfsFromTree))
-        (extern (mainActivityShowPdfChoiceDialogRaw
-                  (activity : MainActivity)
-                  (choices : (List SsdPdfChoice))
-                  (title : String)) : Unit
-          (kotlin-member-call showPdfChoiceDialog))
-        (extern (mainActivityShowNoSsdPdfsDialogRaw
-                  (activity : MainActivity)) : Unit
-          (kotlin-member-call showNoSsdPdfsDialog))
+        (extern (mainActivityHasDirectDownloadAccessRaw
+                  (activity : MainActivity)) : Bool
+          (kotlin-member-call hasDirectDownloadAccess))
         (extern (mainActivityClientLogPayloadRaw
                   (activity : MainActivity)
                   (event : String)
@@ -8468,6 +8465,44 @@
                 activity
                 (ssdPdfChoiceUriAt choices which)
                 readFlag))))
+        (def (mainActivityShowPdfChoiceDialog
+               (activity : MainActivity)
+               (choices : (List SsdPdfChoice))
+               (title : String)) : Unit
+          (begin
+            (alertDialogBuilderShowRaw
+              (mainActivitySetPositiveOpenAnyPdf
+                (mainActivitySetNeutralChooseSsdPdfFolder
+                  (mainActivitySetPdfChoiceItems
+                    (alertDialogBuilderSetCancelAction
+                      (alertDialogBuilderSetTitleRaw
+                        (alertDialogBuilderForActivityRaw activity)
+                        title))
+                    activity
+                    choices
+                    (intentFlagGrantReadUriPermission))
+                  activity)
+                activity))
+            (mainActivitySetStatusRaw
+              activity
+              (ssdPdfFoundStatus choices))))
+        (def (mainActivityShowNoSsdPdfsDialog
+               (activity : MainActivity)
+               (hasDirectAccess : Bool)) : Unit
+          (begin
+            (alertDialogBuilderShowRaw
+              (mainActivitySetPositiveRequestDownloadAccess
+                (mainActivitySetNeutralChooseSsdPdfFolder
+                  (mainActivitySetNegativeOpenAnyPdf
+                    (alertDialogBuilderSetMessageRaw
+                      (alertDialogBuilderSetTitleRaw
+                        (alertDialogBuilderForActivityRaw activity)
+                        (noSsdPdfsTitle))
+                      (noSsdPdfsDialogMessage hasDirectAccess))
+                    activity)
+                  activity)
+                activity))
+            (mainActivitySetStatusRaw activity (noSsdPdfsFoundStatus))))
         (def (showShortToast
                (activity : MainActivity)
                (text : String)) : Unit
@@ -8801,12 +8836,14 @@
                         activity
                         (lambda ()
                           (if (ssdPdfChoicesAvailable unique)
-                            (mainActivityShowPdfChoiceDialogRaw
+                            (mainActivityShowPdfChoiceDialog
                               activity
                               unique
                               "Open SSD PDF")
-                            (mainActivityShowNoSsdPdfsDialogRaw
-                              activity)))))))))))
+                            (mainActivityShowNoSsdPdfsDialog
+                              activity
+                              (mainActivityHasDirectDownloadAccessRaw
+                                activity))))))))))))
         (def (alertDialogBuilderSetCancelAction
                (builder : Builder)) : Builder
           (alertDialogBuilderSetNegativeAction
@@ -8849,13 +8886,11 @@
                               activity
                               (noSsdPdfsChooseFolderStatus)))
                           (begin
-                            (mainActivityShowPdfChoiceDialogRaw
+                            (mainActivityShowPdfChoiceDialog
                               activity
                               choices
                               (openSsdPdfTitle))
-                            (mainActivitySetStatusRaw
-                              activity
-                              (ssdPdfFoundStatus choices)))))))
+                            (begin))))))
                   (catch (error : Exception)
                     (mainActivityRunOnUiThreadRaw
                       activity
@@ -11368,41 +11403,6 @@
        "        mainActivityShowSsdPdfBrowserAsync(this, uri)"
        "    }"
        ""
-       "    internal fun showPdfChoiceDialog(choices: List<SsdPdfChoice>, title: String) {"
-       "        mainActivitySetPositiveOpenAnyPdf("
-       "            mainActivitySetNeutralChooseSsdPdfFolder("
-       "                mainActivitySetPdfChoiceItems("
-       "                    AlertDialog.Builder(this)"
-       "                        .setTitle(title)"
-       "                        .setNegativeButton(\"Cancel\", null),"
-       "                    this,"
-       "                    choices,"
-       "                    Intent.FLAG_GRANT_READ_URI_PERMISSION"
-       "                ),"
-       "                this"
-       "            ),"
-       "            this"
-       "        ).show()"
-       "        setStatus(ssdPdfFoundStatus(choices))"
-       "    }"
-       ""
-       "    internal fun showNoSsdPdfsDialog() {"
-       "        val message = noSsdPdfsDialogMessage(hasDirectDownloadAccess())"
-       "        mainActivitySetPositiveRequestDownloadAccess("
-       "            mainActivitySetNeutralChooseSsdPdfFolder("
-       "                mainActivitySetNegativeOpenAnyPdf("
-       "                    AlertDialog.Builder(this)"
-       "                        .setTitle(noSsdPdfsTitle())"
-       "                        .setMessage(message),"
-       "                    this"
-       "                ),"
-       "                this"
-       "            ),"
-       "            this"
-       "        ).show()"
-       "        setStatus(noSsdPdfsFoundStatus())"
-       "    }"
-       ""
        "    internal fun findSsdPdfsFromTree(treeUri: Uri): List<SsdPdfChoice> {"
        "        val maybeRoot = DocumentFile.fromTreeUri(this, treeUri)"
        "        if (!documentFilePresent(maybeRoot)) return emptyList()"
@@ -11499,7 +11499,7 @@
        "            }"
        "    }"
        ""
-       "    private fun hasDirectDownloadAccess(): Boolean {"
+       "    internal fun hasDirectDownloadAccess(): Boolean {"
        "        if (sdkAtLeast(Build.VERSION.SDK_INT, Build.VERSION_CODES.R)) {"
        "            if (Environment.isExternalStorageManager()) return true"
        "        } else if (downloadAccessBeforeRuntimePermissions(sdkBefore(Build.VERSION.SDK_INT, Build.VERSION_CODES.M))) {"