Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 6 additions & 8 deletions app/src/main/java/net/duhowpi/ftmsbridge/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -335,8 +335,9 @@ class MainActivity : AppCompatActivity() {
if (isActiveTreadmill) showInclineControlDialog() else showResistanceControlDialog()
}

binding.btnViewLap.setOnClickListener { setWorkoutView(false) }
binding.btnViewChart.setOnClickListener { setWorkoutView(true) }
binding.viewToggleRow.addOnButtonCheckedListener { _, checkedId, isChecked ->
if (isChecked) setWorkoutView(checkedId == R.id.btnViewChart)
}

updateConnectionStatus()
// Apply initial Idle UI (which also resets all metric displays).
Expand All @@ -347,6 +348,7 @@ class MainActivity : AppCompatActivity() {

private fun setWorkoutView(showChart: Boolean) {
isChartViewActive = showChart
binding.viewToggleRow.check(if (showChart) R.id.btnViewChart else R.id.btnViewLap)
binding.lapSection.visibility = if (!showChart) View.VISIBLE else View.GONE
binding.chartSection.visibility = if (showChart) View.VISIBLE else View.GONE
if (showChart) updateLiveChart()
Expand Down Expand Up @@ -1161,9 +1163,7 @@ class MainActivity : AppCompatActivity() {
binding.lapValueHr.text = "--"
binding.lapUnitEnergy.setText(R.string.unit_kcal)
// Default to lap view
isChartViewActive = false
binding.lapSection.visibility = View.VISIBLE
binding.chartSection.visibility = View.GONE
setWorkoutView(false)
lifecycleScope.launch(Dispatchers.IO) {
val session = WorkoutSession(
startTimeMs = sessionStartTime,
Expand Down Expand Up @@ -1824,11 +1824,9 @@ class MainActivity : AppCompatActivity() {
stateMachine.applyUI()

// Restore chart/lap view selection
binding.lapSection.visibility = if (!isChartViewActive) View.VISIBLE else View.GONE
binding.chartSection.visibility = if (isChartViewActive) View.VISIBLE else View.GONE
setWorkoutView(isChartViewActive)

updateElapsedDisplay(elapsedTickSec)
if (isChartViewActive) updateLiveChart()
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@ class SessionStateMachine(

// Toolbar status icons hidden
binding.toolbarStatusIcons.visibility = View.GONE
binding.recordingIndicator.visibility = View.GONE

// Connection indicators
applyConnectionIndicators(ftmsConnected = false, hrConnected = false, hasHrDevice = false)
Expand All @@ -148,7 +147,6 @@ class SessionStateMachine(
binding.metricsSection.visibility = View.GONE
binding.workoutButtonRow.visibility = View.GONE
binding.toolbarStatusIcons.visibility = View.GONE
binding.recordingIndicator.visibility = View.GONE
}

// --- Connected -----------------------------------------------------------
Expand Down Expand Up @@ -181,7 +179,6 @@ class SessionStateMachine(

// Toolbar status
binding.toolbarStatusIcons.visibility = View.GONE
binding.recordingIndicator.visibility = View.GONE

applyConnectionIndicators(ftmsConnected, hrConnected, hasHrDevice)

Expand All @@ -208,7 +205,6 @@ class SessionStateMachine(

// Hide device header; show compact toolbar indicators
binding.deviceHeaderRow.visibility = View.GONE
binding.recordingIndicator.visibility = View.GONE
binding.toolbarStatusIcons.visibility = View.VISIBLE
applyConnectionIndicators(ftmsConnected, hrConnected, hasHrDevice)
binding.toolbarIndicatorHr.visibility = if (hasHrDevice) View.VISIBLE else View.GONE
Expand Down Expand Up @@ -263,7 +259,6 @@ class SessionStateMachine(
binding.rvScanResults.visibility = View.GONE
binding.txtScanStatus.visibility = View.GONE
binding.deviceHeaderRow.visibility = View.GONE
binding.recordingIndicator.visibility = View.GONE
binding.toolbarStatusIcons.visibility = View.VISIBLE
applyConnectionIndicators(ftmsConnected = false, hrConnected = false, hasHrDevice = false)

Expand Down
10 changes: 10 additions & 0 deletions app/src/main/res/drawable/ic_play.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M8,5.14V19.14L19,12.14L8,5.14Z" />
</vector>
41 changes: 9 additions & 32 deletions app/src/main/res/layout-land/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -308,24 +308,24 @@
android:layout_height="160dp" />
</com.google.android.material.card.MaterialCardView>

<LinearLayout
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/viewToggleRow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:paddingBottom="4dp"
android:visibility="gone">
android:visibility="gone"
app:singleSelection="true"
app:selectionRequired="true"
app:checkedButton="@id/btnViewLap">

<com.google.android.material.button.MaterialButton
android:id="@+id/btnViewLap"
style="@style/Widget.Material3.Button.TonalButton"
style="@style/Widget.Material3.Button.OutlinedButton"
android:layout_width="0dp"
android:layout_height="32dp"
android:layout_weight="1"
android:text="@string/view_lap"
android:textSize="11sp"
android:layout_marginEnd="4dp"
app:icon="@drawable/ic_lap"
app:iconSize="16dp" />

Expand All @@ -337,10 +337,9 @@
android:layout_weight="1"
android:text="@string/view_chart"
android:textSize="11sp"
android:layout_marginStart="4dp"
app:icon="@drawable/ic_chart"
app:iconSize="16dp" />
</LinearLayout>
</com.google.android.material.button.MaterialButtonToggleGroup>

<TextView
android:id="@+id/txtScanStatus"
Expand All @@ -359,17 +358,6 @@
android:paddingBottom="4dp"
android:visibility="gone" />

<TextView
android:id="@+id/recordingIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/recording"
android:textColor="@android:color/holo_red_dark"
android:textStyle="bold"
android:layout_gravity="center_horizontal"
android:paddingBottom="4dp"
android:visibility="gone" />

<LinearLayout
android:id="@+id/metricsSection"
android:layout_width="match_parent"
Expand Down Expand Up @@ -623,19 +611,8 @@
android:layout_weight="1"
android:text="@string/workout_start"
android:textSize="11sp"
android:layout_marginEnd="4dp" />

<com.google.android.material.button.MaterialButton
android:id="@+id/btnWorkoutPause"
style="@style/Widget.Material3.Button.TonalButton"
android:layout_width="0dp"
android:layout_height="32dp"
android:layout_weight="1"
android:text="@string/workout_pause"
android:textSize="11sp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:visibility="gone" />
app:icon="@drawable/ic_play"
app:iconSize="16dp" />
</LinearLayout>

</LinearLayout>
Expand Down
40 changes: 8 additions & 32 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -329,24 +329,24 @@
android:layout_height="220dp" />
</com.google.android.material.card.MaterialCardView>

<LinearLayout
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/viewToggleRow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:paddingBottom="8dp"
android:visibility="gone">
android:visibility="gone"
app:singleSelection="true"
app:selectionRequired="true"
app:checkedButton="@id/btnViewLap">

<com.google.android.material.button.MaterialButton
android:id="@+id/btnViewLap"
style="@style/Widget.Material3.Button.TonalButton"
style="@style/Widget.Material3.Button.OutlinedButton"
android:layout_width="0dp"
android:layout_height="36dp"
android:layout_weight="1"
android:text="@string/view_lap"
android:textSize="13sp"
android:layout_marginEnd="4dp"
app:icon="@drawable/ic_lap"
app:iconSize="18dp" />

Expand All @@ -358,10 +358,9 @@
android:layout_weight="1"
android:text="@string/view_chart"
android:textSize="13sp"
android:layout_marginStart="4dp"
app:icon="@drawable/ic_chart"
app:iconSize="18dp" />
</LinearLayout>
</com.google.android.material.button.MaterialButtonToggleGroup>

<TextView
android:id="@+id/txtScanStatus"
Expand All @@ -380,17 +379,6 @@
android:paddingBottom="4dp"
android:visibility="gone" />

<TextView
android:id="@+id/recordingIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/recording"
android:textColor="@android:color/holo_red_dark"
android:textStyle="bold"
android:gravity="center"
android:paddingBottom="8dp"
android:visibility="gone" />

<LinearLayout
android:id="@+id/metricsSection"
android:layout_width="match_parent"
Expand Down Expand Up @@ -653,19 +641,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/workout_start"
android:layout_marginEnd="4dp"
app:icon="@drawable/ic_time" />

<com.google.android.material.button.MaterialButton
android:id="@+id/btnWorkoutPause"
style="@style/Widget.Material3.Button.TonalButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/workout_pause"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:visibility="gone" />
app:icon="@drawable/ic_play" />

</LinearLayout>

Expand Down
12 changes: 3 additions & 9 deletions app/src/main/res/values-ca/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,11 @@
<string name="permissions_required">Calen permisos de Bluetooth</string>

<!-- Session -->
<string name="start_session">Iniciar</string>
<string name="stop_session">Aturar</string>
<string name="recording">● REC</string>
<string name="paused">⏸ EN PAUSA</string>
<string name="back_to_idle">◀ Tornar</string>
<string name="back_to_idle">Tornar</string>

<!-- Workout controls -->
<string name="workout_start">▶ Iniciar</string>
<string name="workout_pause">⏸ Pausar</string>
<string name="workout_resume">▶ Reprendre</string>
<string name="workout_stop">◼ Aturar</string>
<string name="workout_start">Iniciar</string>
<string name="workout_stop">Aturar</string>

<!-- History -->
<string name="history">Historial</string>
Expand Down
12 changes: 3 additions & 9 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,11 @@
<string name="permissions_required">Se requieren permisos de Bluetooth</string>

<!-- Session -->
<string name="start_session">Iniciar</string>
<string name="stop_session">Detener</string>
<string name="recording">● REC</string>
<string name="paused">⏸ EN PAUSA</string>
<string name="back_to_idle">◀ Volver</string>
<string name="back_to_idle">Volver</string>

<!-- Workout controls -->
<string name="workout_start">▶ Iniciar</string>
<string name="workout_pause">⏸ Pausar</string>
<string name="workout_resume">▶ Reanudar</string>
<string name="workout_stop">◼ Detener</string>
<string name="workout_start">Iniciar</string>
<string name="workout_stop">Detener</string>

<!-- History -->
<string name="history">Historial</string>
Expand Down
23 changes: 23 additions & 0 deletions app/src/main/res/values-night/colors.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Dark-theme metric tile accent colors (lighter tones for contrast) -->
<color name="metric_speed">#90CAF9</color>
<color name="metric_heart">#EF9A9A</color>
<color name="metric_distance">#A5D6A7</color>
<color name="metric_energy">#FFB74D</color>
<color name="metric_cadence">#CE93D8</color>
<color name="metric_power">#FFF176</color>
<color name="metric_time">#80CBC4</color>
<color name="metric_inclination">#BCAAA4</color>
<color name="metric_resistance">#9FA8DA</color>
<!-- Dark-theme metric tile tint colors (darker backgrounds) -->
<color name="metric_speed_bg">#0D2A45</color>
<color name="metric_heart_bg">#3E1518</color>
<color name="metric_distance_bg">#12321A</color>
<color name="metric_energy_bg">#3A2410</color>
<color name="metric_cadence_bg">#2E1236</color>
<color name="metric_power_bg">#33300E</color>
<color name="metric_time_bg">#0C2B28</color>
<color name="metric_inclination_bg">#2B211E</color>
<color name="metric_resistance_bg">#171C3B</color>
</resources>
12 changes: 3 additions & 9 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,11 @@
<string name="permissions_required">Bluetooth permissions are required</string>

<!-- Session -->
<string name="start_session">Start</string>
<string name="stop_session">Stop</string>
<string name="recording">● REC</string>
<string name="paused">⏸ PAUSED</string>
<string name="back_to_idle">◀ Back</string>
<string name="back_to_idle">Back</string>

<!-- Workout controls -->
<string name="workout_start">▶ Start</string>
<string name="workout_pause">⏸ Pause</string>
<string name="workout_resume">▶ Resume</string>
<string name="workout_stop">◼ Stop</string>
<string name="workout_start">Start</string>
<string name="workout_stop">Stop</string>

<!-- History -->
<string name="history">History</string>
Expand Down
5 changes: 4 additions & 1 deletion fastlane/metadata/android/en-US/changelogs/6.txt
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
Add user-facing changes for the next release here.
- Cleaner workout controls: proper play/stop icons instead of text symbols
- Lap/Chart switch now highlights the active view
- Metric cards now adapt to dark mode
- Removed unused on-screen elements
5 changes: 5 additions & 0 deletions tools/lint.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from __future__ import annotations

import argparse
import re
import sys
from pathlib import Path
from xml.etree import ElementTree as ET
Expand Down Expand Up @@ -108,6 +109,10 @@ def _check_language_parity() -> list[str]:
return []
base_names = _get_string_names(base)
for lang_dir in sorted(RES_DIR.glob("values-*")):
# Only locale qualifiers (e.g. values-es, values-zh-rCN); skip
# mode/config qualifiers like values-night or values-v31.
if not re.fullmatch(r"values-[a-z]{2,3}(-r[A-Z]{2})?", lang_dir.name):
continue
lang_file = lang_dir / "strings.xml"
if not lang_file.exists():
issues.append(f"{lang_dir.name}: missing strings.xml")
Expand Down