Wire typed SSD server page flow

ober

b9cd9d74b5fc7be5e22136f154f4d258cd5f3996

diff --git a/templates/ssd-review-parts/MainActivityUi.ss b/templates/ssd-review-parts/MainActivityUi.ss
index 414c9f1..06406e2 100644
--- a/templates/ssd-review-parts/MainActivityUi.ss
+++ b/templates/ssd-review-parts/MainActivityUi.ss
@@ -335,6 +335,21 @@
             :
             (List String)
             (kotlin-member-get boxTypeDisplays))
+          (extern
+            (mainUiServerOpenPdfs (activity : MainActivity))
+            :
+            Unit
+            (kotlin-call mainServerOpenPdfs))
+          (extern
+            (mainUiServerFindEndpoint (activity : MainActivity))
+            :
+            Unit
+            (kotlin-call mainServerFindEndpointAsync))
+          (extern
+            (mainUiServerShowEndpoint (activity : MainActivity))
+            :
+            Unit
+            (kotlin-call mainServerShowEndpointDialog))
           (def (mainUiMatchParent) : Int32 (int32 -1))
           (def (mainUiWrapContent) : Int32 (int32 -2))
           (def (mainUiAddActionRow3 (controls : LinearLayout) (activity : MainActivity)
@@ -492,6 +507,27 @@
                      (mainActivityChangePage activity (mainUiPdfUriRaw activity)
                        (mainUiPageCountRaw activity)
                        (mainUiPageIndexRaw activity) (int32 1))))))
+          (def (mainUiAddServerRow
+                 (controls : LinearLayout)
+                 (activity : MainActivity))
+               :
+               Unit
+               (mainUiAddActionRow3 controls activity
+                 (mainActivityButton
+                   activity
+                   "Server SSDs"
+                   (mainUiButtonKindAccent)
+                   (lambda () (mainUiServerOpenPdfs activity)))
+                 (mainActivityButton
+                   activity
+                   "Find Server"
+                   (mainUiButtonKindNeutral)
+                   (lambda () (mainUiServerFindEndpoint activity)))
+                 (mainActivityButton
+                   activity
+                   "Server URL"
+                   (mainUiButtonKindNeutral)
+                   (lambda () (mainUiServerShowEndpoint activity)))))
           (def (mainUiAddModeRow
                  (controls : LinearLayout)
                  (activity : MainActivity))
@@ -635,6 +671,7 @@
                      (mainUiOrientationVertical))
                    (mainUiAddFirstRow controls activity)
                    (mainUiAddSecondRow controls activity)
+                   (mainUiAddServerRow controls activity)
                    (mainUiAddPageRow controls activity)
                    (mainUiAddModeRow controls activity)
                    (mainUiAddNavigationRow controls activity)
diff --git a/templates/ssd-review-parts/UiTextHelpers.ss b/templates/ssd-review-parts/UiTextHelpers.ss
index 6623699..d5439aa 100644
--- a/templates/ssd-review-parts/UiTextHelpers.ss
+++ b/templates/ssd-review-parts/UiTextHelpers.ss
@@ -1797,6 +1797,26 @@
             Unit
             (kotlin-member-call runOnUiThread))
           (extern
+            (mainActivityServerUriRaw (uri : Uri))
+            :
+            Bool
+            (kotlin-call mainServerUri))
+          (extern
+            (mainActivityRenderServerPageRaw
+              (activity : MainActivity)
+              (uri : Uri))
+            :
+            Unit
+            (kotlin-call mainServerRenderCurrentPage))
+          (extern
+            (mainActivityRestoreServerPdfRaw
+              (activity : MainActivity)
+              (uri : Uri)
+              (page : Int32))
+            :
+            Bool
+            (kotlin-call mainServerRestorePdf))
+          (extern
             (ssdPdfFindDownloadSsdPdfsRaw (activity : MainActivity))
             :
             (List SsdPdfChoice)
@@ -5471,12 +5491,15 @@
                                      preferences
                                      (mainActivityPrefLastPageIndexValue)
                                      (int32 0))])
-                         (try (begin
-                                (mainActivityLoadPdf activity
-                                  (uriParse (nullableTextOrEmpty raw))
-                                  (intentFlagGrantReadUriPermission) page
-                                  #t)
-                                #t)
+                         (try (let ([uri (uriParse (nullableTextOrEmpty raw))])
+                                (if (mainActivityServerUriRaw uri)
+                                    (mainActivityRestoreServerPdfRaw
+                                      activity uri page)
+                                    (begin
+                                      (mainActivityLoadPdf activity uri
+                                        (intentFlagGrantReadUriPermission) page
+                                        #t)
+                                      #t)))
                               (catch (error : Exception) #f)))))))
           (def (sharedPreferencesEditorRemoveSavedViewportRaw
                  (editor : Editor))
@@ -6375,26 +6398,28 @@
                (if (pdfUriLoaded (mainActivityPdfUriRaw activity))
                    (let ([uri (uriOrEmpty
                                 (mainActivityPdfUriRaw activity))])
-                     (let ([renderPageIndex (mainActivityPageIndexRaw
-                                              activity)])
-                       (let ([renderGeneration (mainActivityAdvanceLoadGeneration
-                                                 activity
-                                                 (mainActivityLoadGenerationRaw
-                                                   activity))]
-                             [renderPdfName (mainActivityPdfNameRaw
-                                              activity)]
-                             [renderPdfSha1 (mainActivityPdfSha1Raw
-                                              activity)]
-                             [renderPageCount (mainActivityPageCountValueRaw
-                                                activity)]
-                             [restoredViewport (mainActivityRestoredViewportFor
-                                                 activity
-                                                 uri
-                                                 renderPageIndex)])
-                         (mainActivityRenderCurrentPageAsync activity (mainActivityReviewViewRaw activity)
-                           uri renderPageIndex renderGeneration
-                           renderPdfName renderPdfSha1 renderPageCount
-                           restoredViewport))))
+                     (if (mainActivityServerUriRaw uri)
+                         (mainActivityRenderServerPageRaw activity uri)
+                         (let ([renderPageIndex (mainActivityPageIndexRaw
+                                                  activity)])
+                           (let ([renderGeneration (mainActivityAdvanceLoadGeneration
+                                                     activity
+                                                     (mainActivityLoadGenerationRaw
+                                                       activity))]
+                                 [renderPdfName (mainActivityPdfNameRaw
+                                                  activity)]
+                                 [renderPdfSha1 (mainActivityPdfSha1Raw
+                                                  activity)]
+                                 [renderPageCount (mainActivityPageCountValueRaw
+                                                    activity)]
+                                 [restoredViewport (mainActivityRestoredViewportFor
+                                                     activity
+                                                     uri
+                                                     renderPageIndex)])
+                             (mainActivityRenderCurrentPageAsync activity (mainActivityReviewViewRaw activity)
+                               uri renderPageIndex renderGeneration
+                               renderPdfName renderPdfSha1 renderPageCount
+                               restoredViewport)))))
                    (begin)))
           (def (mainActivityRenderCurrentPageAsync (activity : MainActivity) (view : SsdReviewView)
                  (uri : Uri) (renderPageIndex : Int32)