summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudomator Agent <agent@claudomator>2026-03-13 19:58:00 +0000
committerClaudomator Agent <agent@claudomator>2026-03-13 19:58:00 +0000
commitac2fa45381a8d7d410eb85e62c6dd1ba59161461 (patch)
tree28718ca1ab83f7c5a3277b9a61637d45c6bca06c
parent9408216ca2c2bee2e0096f5b643ffbb932566ff3 (diff)
Implement basic instrument display
-rw-r--r--android-app/app/src/main/kotlin/com/example/androidapp/MainActivity.kt77
-rw-r--r--android-app/app/src/main/res/layout/activity_main.xml226
-rw-r--r--android-app/app/src/main/res/values/colors.xml8
-rw-r--r--android-app/app/src/main/res/values/dimens.xml9
-rw-r--r--android-app/app/src/main/res/values/strings.xml25
-rw-r--r--android-app/app/src/main/res/values/themes.xml29
6 files changed, 374 insertions, 0 deletions
diff --git a/android-app/app/src/main/kotlin/com/example/androidapp/MainActivity.kt b/android-app/app/src/main/kotlin/com/example/androidapp/MainActivity.kt
index 3128ee3..d4c6998 100644
--- a/android-app/app/src/main/kotlin/com/example/androidapp/MainActivity.kt
+++ b/android-app/app/src/main/kotlin/com/example/androidapp/MainActivity.kt
@@ -1,7 +1,11 @@
package com.example.androidapp
import android.os.Bundle
+import android.view.View
+import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
+import androidx.constraintlayout.widget.ConstraintLayout
+import com.google.android.material.floatingactionbutton.FloatingActionButton
import org.maplibre.android.MapLibre
import org.maplibre.android.maps.MapView
import org.maplibre.android.maps.Style
@@ -9,6 +13,20 @@ import org.maplibre.android.maps.Style
class MainActivity : AppCompatActivity() {
private var mapView: MapView? = null
+ private lateinit var instrumentDisplayContainer: ConstraintLayout
+ private lateinit var fabToggleInstruments: FloatingActionButton
+
+ // Instrument TextViews
+ private lateinit var valueAws: TextView
+ private lateinit var valueTws: TextView
+ private lateinit var valueHdg: TextView
+ private lateinit var valueCog: TextView
+ private lateinit var valueBsp: TextView
+ private lateinit var valueSog: TextView
+ private lateinit var valueVmg: TextView
+ private lateinit var valueDepth: TextView
+ private lateinit var valuePolarPct: TextView
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -21,6 +39,65 @@ class MainActivity : AppCompatActivity() {
mapView?.getMapAsync { maplibreMap ->
maplibreMap.setStyle(Style.Builder().fromUri("https://tiles.openseamap.org/seamark/osm-bright/style.json"))
}
+
+ instrumentDisplayContainer = findViewById(R.id.instrument_display_container)
+ fabToggleInstruments = findViewById(R.id.fab_toggle_instruments)
+
+ // Initialize instrument TextViews
+ valueAws = findViewById(R.id.value_aws)
+ valueTws = findViewById(R.id.value_tws)
+ valueHdg = findViewById(R.id.value_hdg)
+ valueCog = findViewById(R.id.value_cog)
+ valueBsp = findViewById(R.id.value_bsp)
+ valueSog = findViewById(R.id.value_sog)
+ valueVmg = findViewById(R.id.value_vmg)
+ valueDepth = findViewById(R.id.value_depth)
+ valuePolarPct = findViewById(R.id.value_polar_pct)
+
+ // Set initial placeholder values
+ updateInstrumentDisplay(
+ aws = getString(R.string.placeholder_aws_value),
+ tws = getString(R.string.placeholder_tws_value),
+ hdg = getString(R.string.placeholder_hdg_value),
+ cog = getString(R.string.placeholder_cog_value),
+ bsp = getString(R.string.placeholder_bsp_value),
+ sog = getString(R.string.placeholder_sog_value),
+ vmg = getString(R.string.placeholder_vmg_value),
+ depth = getString(R.string.placeholder_depth_value),
+ polarPct = getString(R.string.placeholder_polar_value)
+ )
+
+ fabToggleInstruments.setOnClickListener {
+ if (instrumentDisplayContainer.visibility == View.VISIBLE) {
+ instrumentDisplayContainer.visibility = View.GONE
+ mapView?.visibility = View.VISIBLE
+ } else {
+ instrumentDisplayContainer.visibility = View.VISIBLE
+ mapView?.visibility = View.GONE
+ }
+ }
+ }
+
+ private fun updateInstrumentDisplay(
+ aws: String,
+ tws: String,
+ hdg: String,
+ cog: String,
+ bsp: String,
+ sog: String,
+ vmg: String,
+ depth: String,
+ polarPct: String
+ ) {
+ valueAws.text = aws
+ valueTws.text = tws
+ valueHdg.text = hdg
+ valueCog.text = cog
+ valueBsp.text = bsp
+ valueSog.text = sog
+ valueVmg.text = vmg
+ valueDepth.text = depth
+ valuePolarPct.text = polarPct
}
override fun onStart() {
diff --git a/android-app/app/src/main/res/layout/activity_main.xml b/android-app/app/src/main/res/layout/activity_main.xml
index a618e78..2801f23 100644
--- a/android-app/app/src/main/res/layout/activity_main.xml
+++ b/android-app/app/src/main/res/layout/activity_main.xml
@@ -15,4 +15,230 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+ <!-- Instrument Display Container -->
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/instrument_display_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/instrument_background"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+ <!-- Guidelines for a 3x2 grid-like layout (6 sections) -->
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/guideline_vertical_33"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ app:layout_constraintGuide_percent="0.33" />
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/guideline_vertical_66"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ app:layout_constraintGuide_percent="0.66" />
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/guideline_horizontal_50"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ app:layout_constraintGuide_percent="0.5" />
+
+ <!-- Wind Instrument -->
+ <TextView
+ android:id="@+id/label_wind"
+ style="@style/InstrumentLabel"
+ android:text="@string/instrument_label_wind"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/value_aws"
+ style="@style/InstrumentPrimaryValue"
+ tools:text="--.-"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/label_wind"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/label_aws"
+ style="@style/InstrumentSecondaryLabel"
+ android:text="@string/instrument_label_aws"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/value_aws"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/value_tws"
+ style="@style/InstrumentPrimaryValue"
+ tools:text="--.-"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/label_aws"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/label_tws"
+ style="@style/InstrumentSecondaryLabel"
+ android:text="@string/instrument_label_tws"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/value_tws"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintHorizontal_bias="0.5" />
+
+ <!-- Compass Instrument -->
+ <TextView
+ android:id="@+id/label_compass"
+ style="@style/InstrumentLabel"
+ android:text="@string/instrument_label_compass"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/value_hdg"
+ style="@style/InstrumentPrimaryValue"
+ tools:text="---"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintTop_toBottomOf="@+id/label_compass"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/label_hdg"
+ style="@style/InstrumentSecondaryLabel"
+ android:text="@string/instrument_label_hdg"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintTop_toBottomOf="@+id/value_hdg"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/value_cog"
+ style="@style/InstrumentPrimaryValue"
+ tools:text="---"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintTop_toBottomOf="@+id/label_hdg"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/label_cog"
+ style="@style/InstrumentSecondaryLabel"
+ android:text="@string/instrument_label_cog"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintTop_toBottomOf="@+id/value_cog"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintHorizontal_bias="0.5" />
+
+ <!-- Boat Speed Instrument -->
+ <TextView
+ android:id="@+id/label_boatspeed"
+ style="@style/InstrumentLabel"
+ android:text="@string/instrument_label_boatspeed"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/value_bsp"
+ style="@style/InstrumentPrimaryValue"
+ tools:text="--.-"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintTop_toBottomOf="@+id/label_boatspeed"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/label_bsp"
+ style="@style/InstrumentSecondaryLabel"
+ android:text="@string/instrument_label_bsp"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintTop_toBottomOf="@+id/value_bsp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/value_sog"
+ style="@style/InstrumentPrimaryValue"
+ tools:text="--.-"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintTop_toBottomOf="@+id/label_bsp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/label_sog"
+ style="@style/InstrumentSecondaryLabel"
+ android:text="@string/instrument_label_sog"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintTop_toBottomOf="@+id/value_sog"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5" />
+
+ <!-- VMG Instrument -->
+ <TextView
+ android:id="@+id/label_vmg"
+ style="@style/InstrumentLabel"
+ android:text="@string/instrument_label_vmg"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/guideline_horizontal_50"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/value_vmg"
+ style="@style/InstrumentPrimaryValue"
+ tools:text="--.-"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/label_vmg"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintHorizontal_bias="0.5" />
+
+ <!-- Depth Instrument -->
+ <TextView
+ android:id="@+id/label_depth"
+ style="@style/InstrumentLabel"
+ android:text="@string/instrument_label_depth"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintTop_toTopOf="@+id/guideline_horizontal_50"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/value_depth"
+ style="@style/InstrumentPrimaryValue"
+ tools:text="--.-"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_33"
+ app:layout_constraintTop_toBottomOf="@+id/label_depth"
+ app:layout_constraintEnd_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintHorizontal_bias="0.5" />
+
+ <!-- Polar % Instrument -->
+ <TextView
+ android:id="@+id/label_polar_pct"
+ style="@style/InstrumentLabel"
+ android:text="@string/instrument_label_polar_pct"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintTop_toTopOf="@+id/guideline_horizontal_50"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5" />
+ <TextView
+ android:id="@+id/value_polar_pct"
+ style="@style/InstrumentPrimaryValue"
+ tools:text="---"
+ app:layout_constraintStart_toStartOf="@+id/guideline_vertical_66"
+ app:layout_constraintTop_toBottomOf="@+id/label_polar_pct"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.5" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <com.google.android.material.floatingactionbutton.FloatingActionButton
+ android:id="@+id/fab_toggle_instruments"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="16dp"
+ android:clickable="true"
+ android:focusable="true"
+ android:contentDescription="Toggle Instrument Display"
+ app:srcCompat="@android:drawable/ic_menu_rotate"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent" />
+
</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/android-app/app/src/main/res/values/colors.xml b/android-app/app/src/main/res/values/colors.xml
index aa37791..a66628b 100644
--- a/android-app/app/src/main/res/values/colors.xml
+++ b/android-app/app/src/main/res/values/colors.xml
@@ -1,7 +1,15 @@
<resources>
<color name="purple_200">#FFBB86FC</color>
+ <color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
+ <color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
+
+ <!-- Colors for instrument display -->
+ <color name="instrument_text_normal">#FFFFFFFF</color> <!-- White for normal text on dark background -->
+ <color name="instrument_text_alarm">#FFFF0000</color> <!-- Red for alarm -->
+ <color name="instrument_text_stale">#FFFFFF00</color> <!-- Yellow for stale data -->
+ <color name="instrument_background">#E61E1E1E</color> <!-- Slightly transparent dark grey -->
</resources> \ No newline at end of file
diff --git a/android-app/app/src/main/res/values/dimens.xml b/android-app/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..1b65ea9
--- /dev/null
+++ b/android-app/app/src/main/res/values/dimens.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Font sizes for instrument display -->
+ <dimen name="text_size_instrument_primary">24sp</dimen>
+ <dimen name="text_size_instrument_secondary">18sp</dimen>
+ <dimen name="text_size_instrument_label">14sp</dimen>
+ <dimen name="instrument_margin">8dp</dimen>
+ <dimen name="instrument_padding">4dp</dimen>
+</resources>
diff --git a/android-app/app/src/main/res/values/strings.xml b/android-app/app/src/main/res/values/strings.xml
index a22fe8c..d7793de 100644
--- a/android-app/app/src/main/res/values/strings.xml
+++ b/android-app/app/src/main/res/values/strings.xml
@@ -1,3 +1,28 @@
<resources>
<string name="app_name">AndroidApp</string>
+
+ <!-- Instrument Labels -->
+ <string name="instrument_label_wind">WIND</string>
+ <string name="instrument_label_aws">AWS</string>
+ <string name="instrument_label_tws">TWS</string>
+ <string name="instrument_label_compass">COMPASS</string>
+ <string name="instrument_label_hdg">HDG</string>
+ <string name="instrument_label_cog">COG</string>
+ <string name="instrument_label_boatspeed">BOAT SPEED</string>
+ <string name="instrument_label_bsp">BSP</string>
+ <string name="instrument_label_sog">SOG</string>
+ <string name="instrument_label_vmg">VMG</string>
+ <string name="instrument_label_depth">DEPTH</string>
+ <string name="instrument_label_polar_pct">POLAR %</string>
+
+ <!-- Placeholder values for initial display -->
+ <string name="placeholder_aws_value">--.-</string>
+ <string name="placeholder_tws_value">--.-</string>
+ <string name="placeholder_hdg_value">---</string>
+ <string name="placeholder_cog_value">---</string>
+ <string name="placeholder_bsp_value">--.-</string>
+ <string name="placeholder_sog_value">--.-</string>
+ <string name="placeholder_vmg_value">--.-</string>
+ <string name="placeholder_depth_value">--.-</string>
+ <string name="placeholder_polar_value">---</string>
</resources> \ No newline at end of file
diff --git a/android-app/app/src/main/res/values/themes.xml b/android-app/app/src/main/res/values/themes.xml
index 50ce36e..c23c0ab 100644
--- a/android-app/app/src/main/res/values/themes.xml
+++ b/android-app/app/src/main/res/values/themes.xml
@@ -13,4 +13,33 @@
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
+
+ <!-- Instrument Display Styles -->
+ <style name="InstrumentLabel" parent="Widget.AppCompat.TextView">
+ <item name="android:layout_width">0dp</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:gravity">center</item>
+ <item name="android:textColor">@color/instrument_text_normal</item>
+ <item name="android:textSize">@dimen/text_size_instrument_label</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:paddingTop">@dimen/instrument_padding</item>
+ <item name="android:paddingBottom">@dimen/instrument_padding</item>
+ </style>
+
+ <style name="InstrumentPrimaryValue" parent="Widget.AppCompat.TextView">
+ <item name="android:layout_width">0dp</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:gravity">center</item>
+ <item name="android:textColor">@color/instrument_text_normal</item>
+ <item name="android:textSize">@dimen/text_size_instrument_primary</item>
+ <item name="android:textStyle">bold</item>
+ </style>
+
+ <style name="InstrumentSecondaryLabel" parent="Widget.AppCompat.TextView">
+ <item name="android:layout_width">0dp</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:gravity">center</item>
+ <item name="android:textColor">@color/instrument_text_normal</item>
+ <item name="android:textSize">@dimen/text_size_instrument_secondary</item>
+ </style>
</resources> \ No newline at end of file