Generate SSD activity lifecycle from typed Jerboa

ober

5f21db310ad47eb6a2fe97133a12fa6cca75cd42

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index 6c544c8..a9a6595 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -13144,6 +13144,163 @@
               (mainUiAddControlsScroll root activity)
               root)))))
 
+    (typed-kotlin-file "com/sfb/ssdreview/MainActivityLifecycle.kt"
+      (kotlin-imports (android Manifest)
+                      (android app Activity)
+                      (android content Intent)
+                      (android content pm PackageManager)
+                      (android os Build)
+                      (android provider Settings)
+                      (android view View)
+                      (android widget LinearLayout)
+                      (org json JSONObject))
+      (typed-library (com sfb ssdreview)
+        (export mainActivityOnCreate mainActivityOnResume
+                mainActivityOnPause mainActivityOnActivityResult
+                mainActivityOnReadStoragePermissionResult)
+        (type Intent)
+        (type Int32)
+        (type LinearLayout)
+        (type MainActivity)
+        (type JSONObject)
+        (type TruthStore)
+        (extern (mainLifecycleTruthStore
+                  (activity : MainActivity)) : TruthStore
+          (kotlin-call TruthStore))
+        (extern (mainLifecycleSetContentView
+                  (activity : MainActivity)
+                  (view : LinearLayout)) : Unit
+          (kotlin-member-call setContentView))
+        (extern (mainLifecycleTruthStoreRaw
+                  (activity : MainActivity)) : TruthStore
+          (kotlin-member-get truthStore))
+        (extern (mainLifecycleReopenSsdBrowserOnResumeRaw
+                  (activity : MainActivity)) : Bool
+          (kotlin-member-get reopenSsdBrowserOnResume))
+        (extern (mainLifecycleClientLogCrashTimeoutMillisValue) : Int32
+          (kotlin-value CLIENT_LOG_CRASH_TIMEOUT_MS))
+        (extern (mainLifecycleReqOpenPdfValue) : Int32
+          (kotlin-value REQ_OPEN_PDF))
+        (extern (mainLifecycleReqExportZipValue) : Int32
+          (kotlin-value REQ_EXPORT_ZIP))
+        (extern (mainLifecycleReqImportZipValue) : Int32
+          (kotlin-value REQ_IMPORT_ZIP))
+        (extern (mainLifecycleReqSyncTreeValue) : Int32
+          (kotlin-value REQ_SYNC_TREE))
+        (extern (mainLifecycleReqOpenSsdPdfTreeValue) : Int32
+          (kotlin-value REQ_OPEN_SSD_PDF_TREE))
+        (extern (mainLifecycleReqReadStorageValue) : Int32
+          (kotlin-value REQ_READ_STORAGE))
+        (extern (mainLifecyclePrefSsdPdfTreeUriValue) : String
+          (kotlin-value PREF_SSD_PDF_TREE_URI))
+        (extern (mainLifecyclePrefLastPdfUriValue) : String
+          (kotlin-value PREF_LAST_PDF_URI))
+        (extern (mainLifecycleResultOkValue) : Int32
+          (kotlin-value Activity RESULT_OK))
+        (extern (mainLifecycleBuildSdkIntValue) : Int32
+          (kotlin-value Build VERSION SDK_INT))
+        (extern (mainLifecycleBuildVersionCodesRValue) : Int32
+          (kotlin-value Build VERSION_CODES R))
+        (extern (mainLifecycleBuildVersionCodesMValue) : Int32
+          (kotlin-value Build VERSION_CODES M))
+        (extern (mainLifecycleReadExternalStoragePermissionValue) : String
+          (kotlin-value Manifest permission READ_EXTERNAL_STORAGE))
+        (extern (mainLifecyclePackageManagerPermissionGrantedValue) : Int32
+          (kotlin-value PackageManager PERMISSION_GRANTED))
+        (extern (mainLifecycleManageAppAllFilesAccessActionValue) : String
+          (kotlin-value Settings ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION))
+        (extern (mainLifecycleManageAllFilesAccessActionValue) : String
+          (kotlin-value Settings ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION))
+        (def (mainActivityOnCreate (activity : MainActivity)) : Unit
+          (begin
+            (mainActivityInstallClientCrashLogger
+              activity
+              (mainLifecycleClientLogCrashTimeoutMillisValue))
+            (mainActivityLogClientEvent
+              activity
+              "ssd-app-start"
+              (emptyJsonObject))
+            (mainActivitySetTruthStore
+              activity
+              (mainLifecycleTruthStore activity))
+            (mainLifecycleSetContentView
+              activity
+              (mainActivityBuildUi activity))
+            (mainActivitySetStatusRaw
+              activity
+              (startupStatus
+                (truthStoreStorageSummary
+                  (mainLifecycleTruthStoreRaw activity))))
+            (mainActivityRestoreLastPdf activity)
+            (mainActivitySeedBundledTruthAsync
+              activity
+              (mainLifecycleTruthStoreRaw activity))))
+        (def (mainActivityOnResume (activity : MainActivity)) : Unit
+          (if (ssdBrowserResumeReady
+                (mainLifecycleReopenSsdBrowserOnResumeRaw activity)
+                (mainActivityHasDirectDownloadAccess
+                  activity
+                  (mainLifecycleBuildSdkIntValue)
+                  (mainLifecycleBuildVersionCodesRValue)
+                  (mainLifecycleBuildVersionCodesMValue)
+                  (mainLifecycleReadExternalStoragePermissionValue)
+                  (mainLifecyclePackageManagerPermissionGrantedValue)))
+            (begin
+              (mainActivitySetReopenSsdBrowserOnResume activity #f)
+              (mainActivityOpenPdf
+                activity
+                (mainLifecycleReqOpenPdfValue)
+                (mainLifecycleReqOpenSsdPdfTreeValue)
+                (mainLifecycleReqReadStorageValue)
+                (mainLifecyclePrefSsdPdfTreeUriValue)
+                (mainLifecyclePrefLastPdfUriValue)
+                (mainLifecycleBuildSdkIntValue)
+                (mainLifecycleBuildVersionCodesRValue)
+                (mainLifecycleBuildVersionCodesMValue)
+                (mainLifecycleReadExternalStoragePermissionValue)
+                (mainLifecyclePackageManagerPermissionGrantedValue)
+                (mainLifecycleManageAppAllFilesAccessActionValue)
+                (mainLifecycleManageAllFilesAccessActionValue)))
+            (begin)))
+        (def (mainActivityOnPause (activity : MainActivity)) : Unit
+          (mainActivityPersistCurrentPdfState activity #t))
+        (def (mainActivityOnActivityResult
+               (activity : MainActivity)
+               (requestCode : Int32)
+               (resultCode : Int32)
+               (data : (Nullable Intent))) : Unit
+          (mainActivityHandleActivityResult
+            activity
+            (mainLifecycleTruthStoreRaw activity)
+            requestCode
+            resultCode
+            data
+            (mainLifecycleResultOkValue)
+            (mainLifecycleReqOpenPdfValue)
+            (mainLifecycleReqOpenSsdPdfTreeValue)
+            (mainLifecycleReqExportZipValue)
+            (mainLifecycleReqImportZipValue)
+            (mainLifecycleReqSyncTreeValue)
+            (mainLifecyclePrefSsdPdfTreeUriValue)
+            (mainLifecyclePrefLastPdfUriValue)))
+        (def (mainActivityOnReadStoragePermissionResult
+               (activity : MainActivity)
+               (requestCode : Int32)) : Unit
+          (mainActivityHandleReadStoragePermissionResult
+            activity
+            requestCode
+            (mainLifecycleReqReadStorageValue)
+            (mainLifecycleReqOpenPdfValue)
+            (mainLifecycleReqOpenSsdPdfTreeValue)
+            (mainLifecyclePrefSsdPdfTreeUriValue)
+            (mainLifecyclePrefLastPdfUriValue)
+            (mainLifecycleBuildSdkIntValue)
+            (mainLifecycleBuildVersionCodesRValue)
+            (mainLifecycleBuildVersionCodesMValue)
+            (mainLifecycleReadExternalStoragePermissionValue)
+            (mainLifecyclePackageManagerPermissionGrantedValue)
+            (mainLifecycleManageAppAllFilesAccessActionValue)
+            (mainLifecycleManageAllFilesAccessActionValue)))))
     (kotlin-file-lines "com/sfb/ssdreview/MainActivity.kt"
       (
        "package com.sfb.ssdreview"
@@ -13205,38 +13362,29 @@
 	       "    internal var selectedGroupId: String? = null"
 	       "    internal var appendMode: Boolean = false"
 	       "    internal var ssdAreaMode: Boolean = false"
-	       "    internal var reopenSsdBrowserOnResume: Boolean = false"
+       "    internal var reopenSsdBrowserOnResume: Boolean = false"
        "    @Volatile internal var loadGeneration: Int = 0"
        "    internal val boxTypeDisplays: List<String> by lazy { boxTypeDisplays(boxTypesLoadAndroid(this)) }"
        "    override fun onCreate(savedInstanceState: Bundle?) {"
        "        super.onCreate(savedInstanceState)"
-	       "        mainActivityInstallClientCrashLogger(this, CLIENT_LOG_CRASH_TIMEOUT_MS)"
-	       "        mainActivityLogClientEvent(this, \"ssd-app-start\")"
-       "        mainActivitySetTruthStore(this, TruthStore(this))"
-       "        setContentView(buildUi())"
-	       "        mainActivitySetStatusRaw(this, startupStatus(truthStoreStorageSummary(truthStore)))"
-	       "        mainActivityRestoreLastPdf(this)"
-       "        mainActivitySeedBundledTruthAsync(this, truthStore)"
+       "        mainActivityOnCreate(this)"
        "    }"
 	       ""
 	       "    override fun onResume() {"
 	       "        super.onResume()"
-	       "        if (ssdBrowserResumeReady(reopenSsdBrowserOnResume, mainActivityHasDirectDownloadAccess(this, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED))) {"
-	       "            mainActivitySetReopenSsdBrowserOnResume(this, false)"
-	       "            mainActivityOpenPdf(this, REQ_OPEN_PDF, REQ_OPEN_SSD_PDF_TREE, REQ_READ_STORAGE, PREF_SSD_PDF_TREE_URI, PREF_LAST_PDF_URI, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED, Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)"
-	       "        }"
+       "        mainActivityOnResume(this)"
 	       "    }"
        ""
        "    override fun onPause() {"
        "        super.onPause()"
-	       "        mainActivityPersistCurrentPdfState(this, true)"
+       "        mainActivityOnPause(this)"
        "    }"
        ""
        "    private fun buildUi(): View = mainActivityBuildUi(this)"
        ""
        "    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {"
        "        super.onActivityResult(requestCode, resultCode, data)"
-       "        mainActivityHandleActivityResult(this, truthStore, requestCode, resultCode, data, RESULT_OK, REQ_OPEN_PDF, REQ_OPEN_SSD_PDF_TREE, REQ_EXPORT_ZIP, REQ_IMPORT_ZIP, REQ_SYNC_TREE, PREF_SSD_PDF_TREE_URI, PREF_LAST_PDF_URI)"
+       "        mainActivityOnActivityResult(this, requestCode, resultCode, data)"
        "    }"
        ""
        "    override fun onRequestPermissionsResult("
@@ -13245,7 +13393,7 @@
        "        grantResults: IntArray"
        "    ) {"
        "        super.onRequestPermissionsResult(requestCode, permissions, grantResults)"
-       "        mainActivityHandleReadStoragePermissionResult(this, requestCode, REQ_READ_STORAGE, REQ_OPEN_PDF, REQ_OPEN_SSD_PDF_TREE, PREF_SSD_PDF_TREE_URI, PREF_LAST_PDF_URI, Build.VERSION.SDK_INT, Build.VERSION_CODES.R, Build.VERSION_CODES.M, Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED, Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)"
+       "        mainActivityOnReadStoragePermissionResult(this, requestCode)"
        "    }"
        ""
 	       "}"