Generate SSD truth intent starters from typed Jerboa

ober

2dab9a25fcd8145f89571a567b36ef915a542ea0

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index b197568..d34d6c4 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -4922,6 +4922,8 @@
                 mainActivitySetPdfChoiceItems
                 mainActivityPullTruthDumpAsync
                 mainActivityPushTruthDumpAsync
+                mainActivityExportTruthZip mainActivityImportTruthZip
+                mainActivitySyncTruthFolder
                 mainActivitySaveSessionAsync
                 mainActivitySaveTruthSnapshotAsync
                 mainActivityMergeRemoteTruthAsync
@@ -7458,6 +7460,48 @@
             (nullable-none ViewportState)))
         (extern (uriParse (text : String)) : Uri
           (kotlin-call Uri parse))
+        (extern (intentForAction (action : String)) : Intent
+          (kotlin-call Intent))
+        (extern (intentActionCreateDocument) : String
+          (kotlin-value Intent ACTION_CREATE_DOCUMENT))
+        (extern (intentActionOpenDocument) : String
+          (kotlin-value Intent ACTION_OPEN_DOCUMENT))
+        (extern (intentActionOpenDocumentTree) : String
+          (kotlin-value Intent ACTION_OPEN_DOCUMENT_TREE))
+        (extern (intentCategoryOpenable) : String
+          (kotlin-value Intent CATEGORY_OPENABLE))
+        (extern (intentExtraTitle) : String
+          (kotlin-value Intent EXTRA_TITLE))
+        (extern (intentFlagGrantReadUriPermission) : Int32
+          (kotlin-value Intent FLAG_GRANT_READ_URI_PERMISSION))
+        (extern (intentFlagGrantWriteUriPermission) : Int32
+          (kotlin-value Intent FLAG_GRANT_WRITE_URI_PERMISSION))
+        (extern (intentFlagGrantPersistableUriPermission) : Int32
+          (kotlin-value Intent FLAG_GRANT_PERSISTABLE_URI_PERMISSION))
+        (extern (intentFlagGrantPrefixUriPermission) : Int32
+          (kotlin-value Intent FLAG_GRANT_PREFIX_URI_PERMISSION))
+        (extern (intentAddCategoryRaw
+                  (intent : Intent)
+                  (category : String)) : Unit
+          (kotlin-member-call addCategory))
+        (extern (intentTypeSetRaw
+                  (intent : Intent)
+                  (mimeType : String)) : Unit
+          (kotlin-member-set type))
+        (extern (intentPutExtraStringRaw
+                  (intent : Intent)
+                  (name : String)
+                  (value : String)) : Unit
+          (kotlin-member-call putExtra))
+        (extern (intentAddFlagsRaw
+                  (intent : Intent)
+                  (flags : Int32)) : Unit
+          (kotlin-member-call addFlags))
+        (extern (mainActivityStartActivityForResultRaw
+                  (activity : MainActivity)
+                  (intent : Intent)
+                  (requestCode : Int32)) : Unit
+          (kotlin-member-call startActivityForResult))
         (extern (intentDataUri (intent : Intent)) : (Nullable Uri)
           (kotlin-member-call getData))
         (extern (intentFlags (intent : Intent)) : Int32
@@ -8071,6 +8115,49 @@
                         activity
                         (truthPushFailedStatus
                           (exceptionMessageRaw error)))))))))))
+        (def (mainActivityExportTruthZip
+               (activity : MainActivity)
+               (requestCode : Int32)) : Unit
+          (let ((intent (intentForAction (intentActionCreateDocument))))
+            (begin
+              (intentAddCategoryRaw intent (intentCategoryOpenable))
+              (intentTypeSetRaw intent "application/zip")
+              (intentPutExtraStringRaw
+                intent
+                (intentExtraTitle)
+                "sfb-ssd-truth.zip")
+              (mainActivityStartActivityForResultRaw
+                activity
+                intent
+                requestCode))))
+        (def (mainActivityImportTruthZip
+               (activity : MainActivity)
+               (requestCode : Int32)) : Unit
+          (let ((intent (intentForAction (intentActionOpenDocument))))
+            (begin
+              (intentAddCategoryRaw intent (intentCategoryOpenable))
+              (intentTypeSetRaw intent "application/zip")
+              (intentAddFlagsRaw intent (intentFlagGrantReadUriPermission))
+              (mainActivityStartActivityForResultRaw
+                activity
+                intent
+                requestCode))))
+        (def (mainActivitySyncTruthFolder
+               (activity : MainActivity)
+               (requestCode : Int32)) : Unit
+          (let ((intent (intentForAction (intentActionOpenDocumentTree))))
+            (begin
+              (intentAddFlagsRaw
+                intent
+                (bitwise-ior
+                  (intentFlagGrantReadUriPermission)
+                  (intentFlagGrantWriteUriPermission)
+                  (intentFlagGrantPersistableUriPermission)
+                  (intentFlagGrantPrefixUriPermission)))
+              (mainActivityStartActivityForResultRaw
+                activity
+                intent
+                requestCode))))
         (def (mainActivityMergeRemoteTruthAsync
                (activity : MainActivity)
                (view : SsdReviewView)
@@ -10683,7 +10770,7 @@
        "            addView(mainActivityActionRow(this@MainActivity, LinearLayout.HORIZONTAL, Gravity.CENTER_VERTICAL,"
        "                mainActivityButton(this@MainActivity, \"Pull Truth\") { mainActivityPullTruthDumpAsync(this@MainActivity, truthStore) },"
        "                mainActivityButton(this@MainActivity, \"Push Truth\") { mainActivityPushTruthDumpAsync(this@MainActivity, truthStore) },"
-       "                mainActivityButton(this@MainActivity, \"Sync Folder\") { syncTruthFolder() },"
+       "                mainActivityButton(this@MainActivity, \"Sync Folder\") { mainActivitySyncTruthFolder(this@MainActivity, REQ_SYNC_TREE) },"
 	       "            ))"
 	       "        }"
        "        root.addView(ScrollView(this).apply {"
@@ -10939,36 +11026,6 @@
        "        mainActivityFocusBoxTypeDropdown(dialog, boxType, resources.displayMetrics.heightPixels, android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE or android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)"
        "    }"
        ""
-       "    private fun exportTruthZip() {"
-       "        val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {"
-       "            addCategory(Intent.CATEGORY_OPENABLE)"
-       "            type = \"application/zip\""
-       "            putExtra(Intent.EXTRA_TITLE, \"sfb-ssd-truth.zip\")"
-       "        }"
-       "        startActivityForResult(intent, REQ_EXPORT_ZIP)"
-       "    }"
-       ""
-       "    private fun importTruthZip() {"
-       "        val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {"
-       "            addCategory(Intent.CATEGORY_OPENABLE)"
-       "            type = \"application/zip\""
-       "            addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)"
-       "        }"
-       "        startActivityForResult(intent, REQ_IMPORT_ZIP)"
-       "    }"
-       ""
-       "    private fun syncTruthFolder() {"
-       "        val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {"
-       "            addFlags("
-       "                Intent.FLAG_GRANT_READ_URI_PERMISSION or"
-       "                    Intent.FLAG_GRANT_WRITE_URI_PERMISSION or"
-       "                    Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION or"
-       "                    Intent.FLAG_GRANT_PREFIX_URI_PERMISSION"
-       "            )"
-       "        }"
-       "        startActivityForResult(intent, REQ_SYNC_TREE)"
-       "    }"
-       ""
        "    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {"
        "        super.onActivityResult(requestCode, resultCode, data)"
        "        if (activityResultRejected(resultCode, RESULT_OK)) return"