Finish typed MainActivity integration

ober

c924d235267a833e9b505bd225a494808b64d64d

diff --git a/templates/original-tactics-parts/MainActivity.kt.ss b/templates/original-tactics-parts/MainActivity.kt.ss
index 8795393..4c105b7 100644
--- a/templates/original-tactics-parts/MainActivity.kt.ss
+++ b/templates/original-tactics-parts/MainActivity.kt.ss
@@ -727,6 +727,53 @@
           (let ((selected (maSpinnerSelected spinner)))
             (if (nullable-null? selected) fallback
                 (maAnyToString (nullable-get selected)))))
+        (def (maMapIntValue (values : (Map String Int32)) (key : String)) : Int32
+          (let ((value (map-ref-or-null values key)))
+            (if (nullable-null? value) (int32 0) (nullable-get value))))
+        (def (maNewText (activity : MainActivity) (text : String)
+                        (size : Float32) (bold : Bool)) : TextView
+          (let ((view (maTextView activity)))
+            (begin
+              (maTextSet view text)
+              (maTextSizeSet view size)
+              (maTextColorSet view UI_TEXT)
+              (if bold (maTypefaceSet view (maTypefaceBold)) (begin))
+              view)))
+        (def (maNewInput (activity : MainActivity) (text : String)
+                         (hint : String) (kind : Int32)) : EditText
+          (let ((view (maEditText activity)))
+            (begin
+              (maSingleLine view #t)
+              (maEditSetText view text)
+              (maHintSet view hint)
+              (maInputTypeSet view kind)
+              (maTextSizeSet (maEditAsText view) (float32 19.0))
+              (maTextColorSet (maEditAsText view) UI_TEXT)
+              view)))
+        (def (maRow (activity : MainActivity)) : LinearLayout
+          (let ((layout (maLinearLayout activity)))
+            (begin
+              (maLayoutOrientationSet layout (maHorizontal))
+              (maLayoutGravitySet layout (maGravityCenterVertical))
+              layout)))
+        (def (maColumn (activity : MainActivity)) : LinearLayout
+          (let ((layout (maLinearLayout activity)))
+            (begin (maLayoutOrientationSet layout (maVertical)) layout)))
+        (def (maAddWeighted (layout : LinearLayout) (view : View)
+                            (weight : Float32)) : Unit
+          (maLayoutAddViewParams layout view
+            (maWeightedLayoutParams (int32 0) (maWrapContent) weight)))
+        (def (maAddButtonRow (activity : MainActivity) (parent : LinearLayout)
+                             (buttons : (List Button))) : Unit
+          (let ((layout (maRow activity)))
+            (begin
+              (for/fold ((ignored (int32 0)))
+                        ((i (in-range (int32 0) (list-size buttons))))
+                (begin
+                  (maAddWeighted layout (maButtonAsView (list-ref buttons i))
+                    (float32 1.0))
+                  ignored))
+              (maLayoutAddView parent (maLinearAsView layout)))))
 
         (class MainActivity () (extends Activity)
           (var endpointInput : EditText (modifiers private lateinit))
@@ -791,8 +838,14 @@
             (mutable-list-empty JSONObject) (modifiers private))
           (var alphaTruthReport : (Nullable JSONObject) (nullable-none JSONObject) (modifiers private))
           (var betaTruthReport : (Nullable JSONObject) (nullable-none JSONObject) (modifiers private))
-          (var shipIds : (List String) (list-of String "fed-tcc" "klingon-td7c") (modifiers private))
-          (var shipChoices : (List ShipChoice) (list-of ShipChoice) (modifiers private))
+          (var lastTruthKey : String "" (modifiers private))
+          (var shipChoices : (List ShipChoice)
+            (list-of ShipChoice
+              (make-ShipChoice "fed-tcc" "Federation TCC" "Federation"
+                "embedded" (int32 0) "Federation TCC")
+              (make-ShipChoice "klingon-td7c" "Klingon TD7C" "Klingon"
+                "embedded" (int32 0) "Klingon TD7C"))
+            (modifiers private))
           (var alphaTargetChoices : (List FireTargetChoice)
             (list-of FireTargetChoice) (modifiers private))
           (var betaTargetChoices : (List FireTargetChoice)
@@ -825,30 +878,10 @@
 
           (def (dp (value : Int32)) : Int32
             (maDp this value))
-          (def (newText (text : String) (size : Float32) (bold : Bool)) : TextView
-            (modifiers private)
-            (let ((view (maTextView this)))
-              (begin
-                (maTextSet view text)
-                (maTextSizeSet view size)
-                (maTextColorSet view UI_TEXT)
-                (if bold (maTypefaceSet view (maTypefaceBold)) (begin))
-                view)))
-          (def (newInput (text : String) (hint : String) (kind : Int32)) : EditText
-            (modifiers private)
-            (let ((view (maEditText this)))
-              (begin
-                (maSingleLine view #t)
-                (maEditSetText view text)
-                (maHintSet view hint)
-                (maInputTypeSet view kind)
-                (maTextSizeSet (maEditAsText view) (float32 19.0))
-                (maTextColorSet (maEditAsText view) UI_TEXT)
-                view)))
           (def (numberInput (value : String) (hint : String)) : EditText
-            (modifiers private) (newInput value hint (maInputNumber)))
+            (modifiers private) (maNewInput this value hint (maInputNumber)))
           (def (textInput (value : String) (hint : String)) : EditText
-            (modifiers private) (newInput value hint (maInputText)))
+            (modifiers private) (maNewInput this value hint (maInputText)))
           (def (checkBox (label : String) (checked : Bool)) : CheckBox
             (modifiers private)
             (let ((view (maCheckBox this)))
@@ -874,51 +907,28 @@
                     (begin (maAssetsPlay this (maSoundButton) (float32 0.38))
                            (invoke action))))
                 view)))
-          (def (row) : LinearLayout (modifiers private)
-            (let ((layout (maLinearLayout this)))
-              (begin
-                (maLayoutOrientationSet layout (maHorizontal))
-                (maLayoutGravitySet layout (maGravityCenterVertical))
-                layout)))
-          (def (column) : LinearLayout (modifiers private)
-            (let ((layout (maLinearLayout this)))
-              (begin (maLayoutOrientationSet layout (maVertical)) layout)))
-          (def (addWeighted (layout : LinearLayout) (view : View)
-                            (weight : Float32)) : Unit
-            (modifiers private)
-                (maLayoutAddViewParams layout view
-              (maWeightedLayoutParams (int32 0) (maWrapContent) weight)))
-          (def (addButtonRow (parent : LinearLayout)
-                             (buttons : (List Button))) : Unit
-            (modifiers private)
-            (let ((layout (row)))
-              (begin
-                (for/fold ((ignored (int32 0)))
-                          ((i (in-range (int32 0) (list-size buttons))))
-                  (begin
-                    (addWeighted layout (maButtonAsView (list-ref buttons i)) (float32 1.0))
-                    ignored))
-                (maLayoutAddView parent (maLinearAsView layout)))))
           (def (stationPanel (title : String) (views : (List View))) : LinearLayout
             (modifiers private)
-            (let ((panel (column)))
+            (let ((panel (maColumn this)))
               (begin
                 (maViewPadding (maLinearAsView panel) (dp (int32 8)) (dp (int32 8))
                                (dp (int32 8)) (dp (int32 8)))
                 (maViewBackgroundSet (maLinearAsView panel) (maPanelBackground this UI_PANEL_DARK))
-                (maLayoutAddView panel (maTextAsView (newText title (float32 18.0) #t)))
+                (maLayoutAddView panel
+                  (maTextAsView (maNewText this title (float32 18.0) #t)))
                 (for/fold ((ignored (int32 0)))
                           ((i (in-range (int32 0) (list-size views))))
                   (begin (maLayoutAddView panel (list-ref views i)) ignored))
                 panel)))
 
           (def (buildUi) : View (modifiers private)
-            (let ((root (column)) (scroll (maScrollView this)) (content (column)))
+            (let ((root (maColumn this)) (scroll (maScrollView this))
+                  (content (maColumn this)))
               (begin
                 (maViewBackgroundColor (maLinearAsView root) UI_BG)
                 (maViewPadding (maLinearAsView root) (dp (int32 10)) (dp (int32 10))
                                (dp (int32 10)) (dp (int32 14)))
-                (set! status (newText "Starting" (float32 18.0) #t))
+                (set! status (maNewText this "Starting" (float32 18.0) #t))
                 (set! endpointInput
                   (textInput (maSelfServiceEndpoint this) "Rules endpoint"))
                 (maEnabledSet (maEditAsView endpointInput) #f)
@@ -961,8 +971,8 @@
                 (set! shipStatus (maShipStatus this))
                 (set! ssdDamage (maSsdDamage this))
                 (set! shipArt (maShipArt this))
-                (set! battleHud (newText "No engagement" (float32 18.0) #t))
-                (set! output (newText "" (float32 17.0) #f))
+                (set! battleHud (maNewText this "No engagement" (float32 18.0) #t))
+                (set! output (maNewText this "" (float32 17.0) #f))
                 (maLayoutAddView root (maTextAsView status))
                 (maLayoutAddView root (maTextAsView battleHud))
                 (maLayoutAddView content
@@ -971,7 +981,7 @@
                       (list-of View
                         (maSpinnerAsView alphaSpinner)
                         (maSpinnerAsView betaSpinner)))))
-                (addButtonRow content
+                (maAddButtonRow this content
                   (list-of Button
                     (button "Health" (lambda () (maSelfHealth this)))
                     (button "New Game" (lambda () (maSelfNewGame this)))
@@ -979,7 +989,7 @@
                     (button "Auto Step" (lambda () (maSelfAutoStep this)))
                     (button "Auto Battle" (lambda () (maSelfAutoBattle this)))
                     (button "Stop" (lambda () (maSelfStopAuto this)))))
-                (addButtonRow content
+                (maAddButtonRow this content
                   (list-of Button
                     (button "Fed/Klingon"
                       (lambda () (startPreset "fed-tcc" "klingon-td7c")))
@@ -1014,7 +1024,7 @@
                         (maSpinnerAsView alphaSeekingSpinner)
                         (maEditAsView betaSeekingImpulseInput)
                         (maSpinnerAsView betaSeekingSpinner)))))
-                (addButtonRow content
+                (maAddButtonRow this content
                   (list-of Button
                     (button "Actions" (lambda () (openActionConsolePanel)))
                     (button "Verify Log" (lambda () (submitBattleLogNow "manual")))
@@ -1023,14 +1033,14 @@
                       (lambda () (useDisplacementDevice "alpha" (int32 2) (int32 -1))))
                     (button "B Disp"
                       (lambda () (useDisplacementDevice "beta" (int32 -2) (int32 1))))))
-                (addButtonRow content
+                (maAddButtonRow this content
                   (list-of Button
                     (button "Submit Orders" (lambda () (maSelfSubmitOrders this)))
                     (button "Commit + Fire" (lambda () (maSelfCommitFire this)))
                     (button "Fire" (lambda () (maSelfFire this)))
                     (button "Advance" (lambda () (maSelfAdvance this)))
                     (button "Run" (lambda () (maSelfRunCombat this)))))
-                (addButtonRow content
+                (maAddButtonRow this content
                   (list-of Button
                     (button "Map" (lambda ()
                       (maSelfOpenPanel this "Tactical Map" (maMapAsView tacticalMap))))
@@ -1203,8 +1213,6 @@
                                               (begin))))))))
                             ignored)))
                       (begin)))
-                (if (> (list-size ids) (int32 0))
-                    (begin (set! shipIds ids) (begin)) (begin))
                 (if (> (list-size choices) (int32 0))
                     (begin
                       (set! shipChoices (maMutableShipListAsList choices))
@@ -1215,19 +1223,19 @@
                       (maSetSpinnerStrings this alphaSpinner labels)
                       (maSetSpinnerStrings this betaSpinner labels))
                     (begin
-                      (maSetSpinnerStrings this alphaSpinner shipIds)
-                      (maSetSpinnerStrings this betaSpinner shipIds)))
-                (selectShipById alphaSpinner "fed-tcc")
-                (selectShipById betaSpinner "klingon-td7c")
+                      (maSetSpinnerStrings this alphaSpinner
+                        (list-of String "Federation TCC" "Klingon TD7C"))
+                      (maSetSpinnerStrings this betaSpinner
+                        (list-of String "Federation TCC" "Klingon TD7C"))))
+                (selectShip alphaSpinner "fed-tcc")
+                (selectShip betaSpinner "klingon-td7c")
                 (maSelfSetStatus this (string-append "Ships loaded: "
-                             (int32->string (list-size shipIds))))))))
+                             (int32->string (list-size shipChoices))))))))
           (def (selectedShipId (spinner : Spinner) (fallback : String)) : String
             (modifiers private)
             (let ((index (maSpinnerSelectedPosition spinner)))
               (if (and (>= index (int32 0)) (< index (list-size shipChoices)))
-                  (ShipChoice-id (list-ref shipChoices index))
-                  (if (and (>= index (int32 0)) (< index (list-size shipIds)))
-                      (list-ref shipIds index) fallback))))
+                  (ShipChoice-id (list-ref shipChoices index)) fallback)))
           (def (newGame) : Unit (modifiers private)
             (maSelfCreateGame this
               (maSelfSelectedShip this alphaSpinner "fed-tcc")
@@ -1689,12 +1697,12 @@
             (maSpinnerMinimumHeight spinner (dp (int32 50))))
           (def (actionRow (views : (Array View) (modifiers vararg))) : LinearLayout
             (modifiers private)
-            (let ((layout (row)))
+            (let ((layout (maRow this)))
               (begin
                 (for/fold ((ignored (int32 0)))
                           ((i (in-range (int32 0) (maViewArraySize views))))
                   (begin
-                    (addWeighted layout (maViewArrayGet views i) (float32 1.0))
+                    (maAddWeighted layout (maViewArrayGet views i) (float32 1.0))
                     ignored))
                 layout)))
           (def (spinnerRow (label : String) (spinner : Spinner)) : LinearLayout
@@ -1723,7 +1731,16 @@
           (def (largeTextAdapter (items : (List String))) : SpinnerAdapter
             (modifiers private) (maStringAdapterFor this items))
           (def (shipChoiceAdapter (items : (List ShipChoice))) : SpinnerAdapter
-            (modifiers private) (maStringAdapterFor this shipIds))
+            (modifiers private)
+            (let ((labels (mutable-list-empty String)))
+              (begin
+                (for/fold ((ignored (int32 0)))
+                          ((i (in-range (int32 0) (list-size items))))
+                  (begin
+                    (mutable-list-add! labels
+                      (ShipChoice-display (list-ref items i)))
+                    ignored))
+                (maStringAdapterFor this (maMutableStringListAsList labels)))))
           (def (configureSpinnerText (view : View) (dropdown : Bool)) : Unit
             (modifiers private)
             (let ((text (maViewAsTextOrNull view)))
@@ -1894,26 +1911,20 @@
                     ignored))
                 (if (> (list-size labels) (int32 0))
                     (maSetSpinnerStrings this spinner labels)
-                    (maSetSpinnerStrings this spinner shipIds))
-                (selectShipById spinner preferredId))))
-          (def (selectShipById (spinner : Spinner) (shipId : String)) : Unit
+                    (maSetSpinnerStrings this spinner
+                      (list-of String "Federation TCC" "Klingon TD7C")))
+                (selectShip spinner preferredId))))
+          (def (selectShip (spinner : Spinner) (shipId : String)) : Unit
             (modifiers private)
             (begin
               (for/fold ((ignored (int32 0)))
-                        ((i (in-range (int32 0)
-                              (if (> (list-size shipChoices) (int32 0))
-                                  (list-size shipChoices) (list-size shipIds)))))
+                        ((i (in-range (int32 0) (list-size shipChoices))))
                 (begin
-                  (let ((currentId
-                          (if (> (list-size shipChoices) (int32 0))
-                              (ShipChoice-id (list-ref shipChoices i))
-                              (list-ref shipIds i))))
+                  (let ((currentId (ShipChoice-id (list-ref shipChoices i))))
                     (if (equal? currentId shipId)
                         (maSpinnerSelection spinner i) (begin)))
                   ignored))
               (begin)))
-          (def (selectShip (spinner : Spinner) (shipId : String)) : Unit
-            (modifiers private) (selectShipById spinner shipId))
           (def (shipDisplayName (ship : JSONObject) (fallback : String)) : String
             (modifiers private)
             (let ((name (json-object-opt-string-default ship "name" "")))
@@ -1982,24 +1993,6 @@
                               (json-object-opt-json-object
                                 (nullable-get battle) actor)))))
                     (begin)))))
-          (def (parseFireSelectionSimple (text : String)) : JSONObject
-            (modifiers private)
-            (let ((out (maJsonObject))
-                  (tokens (maStringSplitChar text #\space)))
-              (begin
-                (for/fold ((ignored (int32 0)))
-                          ((i (in-range (int32 0) (list-size tokens))))
-                  (let ((token (string-trim (list-ref tokens i))))
-                    (begin
-                      (if (string-blank? token) (begin)
-                          (let ((parts (maStringSplitChar token #\:))
-                                (slots (maJsonArray)))
-                            (begin
-                              (maJsonArrayPutInt slots (int32 1))
-                              (maJsonPutArray out (list-ref parts (int32 0)) slots)
-                              (begin))))
-                      ignored)))
-                out)))
           (def (setFireGroup (actor : String) (input : EditText)
                              (group : Int32)) : Unit
             (modifiers private)
@@ -2269,10 +2262,6 @@
                                     (nullable-some
                                       (if (nullable-null? parsed) trimmed
                                           (int32->string (nullable-get parsed)))))))))))))
-          (def (mapIntValue (values : (Map String Int32)) (key : String)) : Int32
-            (modifiers private)
-            (let ((value (map-ref-or-null values key)))
-              (if (nullable-null? value) (int32 0) (nullable-get value))))
           (def (jsonObjectKeys (obj : JSONObject)) : (List String)
             (modifiers private)
             (let ((out (mutable-list-empty String)) (keys (maJsonKeys obj)))
@@ -2527,7 +2516,7 @@
             (let ((keys (maStringSetList (maMapStringIntKeys signature))))
               (for/fold ((total (int32 0)))
                         ((i (in-range (int32 0) (list-size keys))))
-                (+ total (mapIntValue signature (list-ref keys i))))))
+                (+ total (maMapIntValue signature (list-ref keys i))))))
           (def (bestTruthMatch (shipSignature : (Map String Int32))
                                (candidates : JSONArray)) : (Nullable TruthMatch)
             (modifiers private)
@@ -2551,8 +2540,8 @@
                                                 ((k (in-range (int32 0)
                                                       (list-size shipKeys))))
                                         (let ((key (list-ref shipKeys k)))
-                                          (let ((a (mapIntValue shipSignature key))
-                                                (b (mapIntValue truth key)))
+                                          (let ((a (maMapIntValue shipSignature key))
+                                                (b (maMapIntValue truth key)))
                                             (begin
                                               (set! overlap (+ overlap (if (< a b) a b)))
                                               (set! diff (+ diff (if (> a b) (- a b) (- b a))))
@@ -2564,7 +2553,7 @@
                                           (begin
                                             (if (nullable-null?
                                                   (map-ref-or-null shipSignature key))
-                                                (set! diff (+ diff (mapIntValue truth key)))
+                                                (set! diff (+ diff (maMapIntValue truth key)))
                                                 (begin))
                                             ignored)))
                                       (let ((match
@@ -3425,7 +3414,7 @@
             (openPanel "Action Console" (buildActionConsoleView)))
           (def (buildActionConsoleView) : View
             (modifiers private)
-            (let ((view (newText (actionConsoleSubtitle) LABEL_TEXT_SP #f)))
+            (let ((view (maNewText this (actionConsoleSubtitle) LABEL_TEXT_SP #f)))
               (begin
                 (maViewPadding (maTextAsView view) (dp (int32 14)) (dp (int32 14))
                   (dp (int32 14)) (dp (int32 14)))
@@ -3444,13 +3433,13 @@
                   (renderBattleHud currentGame))))
           (def (actionConsoleMessage (textValue : String)) : TextView
             (modifiers private)
-            (newText textValue LABEL_TEXT_SP #f))
+            (maNewText this textValue LABEL_TEXT_SP #f))
           (def (renderActionQueue (root : LinearLayout)) : Unit
             (modifiers private)
             (begin))
           (def (actionConsoleCard (id : String) (alpha : (Nullable JSONObject)) (beta : (Nullable JSONObject))) : View
             (modifiers private)
-            (maTextAsView (newText "" (float32 18.0) #f)))
+            (maTextAsView (maNewText this "" (float32 18.0) #f)))
           (def (actionCardTop (alpha : (Nullable JSONObject)) (beta : (Nullable JSONObject))) : Int32
             (modifiers private)
             (int32 0))