Move SSD activity result checks to typed Kotlin

ober

31220c4fb505391df3c5046dd03c580f1e82063d

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index d80105a..ee0316f 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -4310,6 +4310,7 @@
 
     (typed-kotlin-file "com/sfb/ssdreview/UiTextHelpers.kt"
       (kotlin-imports (java io File)
+                      (android content Intent)
                       (android net Uri)
                       (androidx documentfile provider DocumentFile)
                       (org json JSONObject))
@@ -4357,7 +4358,9 @@
                 selectionIgnoredLoadingStatus
                 shouldShowFiringArc shouldFocusFiringArc
                 canvasLabelPresent canvasLabelMissing groupIdSelected
-                shouldCaptureViewport pdfUriLoaded uriOrEmpty sessionMissing
+                shouldCaptureViewport pdfUriLoaded uriOrEmpty
+                intentDataUriPresent intentDataUriOrEmpty intentFlagsOrZero
+                sessionMissing
                 viewportStatePresent viewportStateOrEmpty
                 hasReplacementLabel missingReplacementLabel hasResolvedLabel
                 ssdBrowserResumeReady focusChangeShouldShowDropdown
@@ -4401,6 +4404,7 @@
         (type Float32)
         (type Char)
         (type File)
+        (type Intent)
         (type Uri)
         (type DocumentFile)
         (type JSONObject)
@@ -4850,12 +4854,28 @@
           includeViewport)
         (extern (uriParse (text : String)) : Uri
           (kotlin-call Uri parse))
+        (extern (intentDataUri (intent : Intent)) : (Nullable Uri)
+          (kotlin-member-call getData))
+        (extern (intentFlags (intent : Intent)) : Int32
+          (kotlin-member-get flags))
         (def (pdfUriLoaded (uri : (Nullable Uri))) : Bool
           (not (nullable-null? uri)))
         (def (uriOrEmpty (uri : (Nullable Uri))) : Uri
           (if (nullable-null? uri)
             (uriParse "")
             (nullable-get uri)))
+        (def (intentDataUriPresent (intent : (Nullable Intent))) : Bool
+          (if (nullable-null? intent)
+            #f
+            (pdfUriLoaded (intentDataUri (nullable-get intent)))))
+        (def (intentDataUriOrEmpty (intent : (Nullable Intent))) : Uri
+          (if (nullable-null? intent)
+            (uriParse "")
+            (uriOrEmpty (intentDataUri (nullable-get intent)))))
+        (def (intentFlagsOrZero (intent : (Nullable Intent))) : Int32
+          (if (nullable-null? intent)
+            (int32 0)
+            (intentFlags (nullable-get intent))))
         (def (sessionMissing (session : (Nullable SsdSession))) : Bool
           (nullable-null? session))
         (def (viewportStatePresent (viewport : (Nullable ViewportState))) : Bool
@@ -7230,11 +7250,13 @@
        "    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {"
        "        super.onActivityResult(requestCode, resultCode, data)"
        "        if (activityResultRejected(resultCode, RESULT_OK)) return"
-       "        val uri = data?.data ?: return"
+       "        if (!intentDataUriPresent(data)) return"
+       "        val uri = intentDataUriOrEmpty(data)"
+       "        val flags = intentFlagsOrZero(data)"
        "        if (requestIsOpenPdf(requestCode, REQ_OPEN_PDF)) {"
-       "            loadPdf(uri, data.flags)"
+       "            loadPdf(uri, flags)"
        "        } else if (requestIsOpenSsdPdfTree(requestCode, REQ_OPEN_SSD_PDF_TREE)) {"
-       "            rememberAndBrowseSsdFolder(uri, data.flags)"
+       "            rememberAndBrowseSsdFolder(uri, flags)"
        "        } else if (requestIsExportZip(requestCode, REQ_EXPORT_ZIP)) {"
        "            contentResolver.openOutputStream(uri)?.use {"
        "                truthStore.exportZip(it)"
@@ -7246,7 +7268,7 @@
        "                setStatus(importedTruthZipStatus(count, truthStore.storageSummary()))"
        "            }"
        "        } else if (requestIsSyncTree(requestCode, REQ_SYNC_TREE)) {"
-       "            syncSelectedTree(uri, data.flags)"
+       "            syncSelectedTree(uri, flags)"
        "        }"
        "    }"
        ""