diff options
Diffstat (limited to 'android-app/app/src')
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 |
