diff --git a/.idea/misc.xml b/.idea/misc.xml index f4fad8e..6a1c546 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fd4402b..69f330f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,8 +14,8 @@ android { applicationId = "com.atridad.openclimb" minSdk = 31 targetSdk = 36 - versionCode = 12 - versionName = "0.4.5" + versionCode = 13 + versionName = "0.5.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/atridad/openclimb/ui/OpenClimbApp.kt b/app/src/main/java/com/atridad/openclimb/ui/OpenClimbApp.kt index 4fc9fe7..5d3d1e4 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/OpenClimbApp.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/OpenClimbApp.kt @@ -3,6 +3,7 @@ package com.atridad.openclimb.ui import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier @@ -67,7 +68,7 @@ fun OpenClimbApp() { LaunchedEffect(gyms, activeSession) { fabConfig = if (gyms.isNotEmpty() && activeSession == null) { FabConfig( - icon = Icons.Default.Add, + icon = Icons.Default.PlayArrow, contentDescription = "Start Session", onClick = { if (gyms.size == 1) { diff --git a/app/src/main/java/com/atridad/openclimb/ui/components/ActiveSessionBanner.kt b/app/src/main/java/com/atridad/openclimb/ui/components/ActiveSessionBanner.kt index f63cf72..2a3e11e 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/components/ActiveSessionBanner.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/components/ActiveSessionBanner.kt @@ -3,7 +3,6 @@ package com.atridad.openclimb.ui.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material3.* import androidx.compose.runtime.* @@ -13,9 +12,10 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.atridad.openclimb.data.model.ClimbSession import com.atridad.openclimb.data.model.Gym +import com.atridad.openclimb.ui.theme.CustomIcons +import kotlinx.coroutines.delay import java.time.LocalDateTime import java.time.temporal.ChronoUnit -import kotlinx.coroutines.delay @Composable fun ActiveSessionBanner( @@ -95,7 +95,7 @@ fun ActiveSessionBanner( ) ) { Icon( - Icons.Default.Close, + imageVector = CustomIcons.Stop(MaterialTheme.colorScheme.onError), contentDescription = "End session" ) } diff --git a/app/src/main/java/com/atridad/openclimb/ui/screens/DetailScreens.kt b/app/src/main/java/com/atridad/openclimb/ui/screens/DetailScreens.kt index 7cabcf5..b677ea1 100644 --- a/app/src/main/java/com/atridad/openclimb/ui/screens/DetailScreens.kt +++ b/app/src/main/java/com/atridad/openclimb/ui/screens/DetailScreens.kt @@ -31,6 +31,7 @@ import androidx.lifecycle.viewModelScope import com.atridad.openclimb.data.model.* import com.atridad.openclimb.ui.components.FullscreenImageViewer import com.atridad.openclimb.ui.components.ImageDisplaySection +import com.atridad.openclimb.ui.theme.CustomIcons import com.atridad.openclimb.ui.viewmodel.ClimbViewModel import java.time.LocalDateTime import java.time.format.DateTimeFormatter @@ -283,8 +284,23 @@ fun SessionDetailScreen(sessionId: String, viewModel: ClimbViewModel, onNavigate } } - IconButton(onClick = { showDeleteDialog = true }) { - Icon(Icons.Default.Delete, contentDescription = "Delete") + // Show stop icon for active sessions, delete icon for completed sessions + if (session?.status == SessionStatus.ACTIVE) { + IconButton(onClick = { + session?.let { s -> + viewModel.endSession(context, s.id) + onNavigateBack() + } + }) { + Icon( + imageVector = CustomIcons.Stop(MaterialTheme.colorScheme.onSurface), + contentDescription = "Stop Session" + ) + } + } else { + IconButton(onClick = { showDeleteDialog = true }) { + Icon(Icons.Default.Delete, contentDescription = "Delete") + } } } ) diff --git a/app/src/main/java/com/atridad/openclimb/ui/theme/CustomIcons.kt b/app/src/main/java/com/atridad/openclimb/ui/theme/CustomIcons.kt new file mode 100644 index 0000000..73936f7 --- /dev/null +++ b/app/src/main/java/com/atridad/openclimb/ui/theme/CustomIcons.kt @@ -0,0 +1,25 @@ +package com.atridad.openclimb.ui.theme + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +object CustomIcons { + fun Stop(color: Color = Color.Black): ImageVector = ImageVector.Builder( + name = "Stop", + defaultWidth = 24.dp, + defaultHeight = 24.dp, + viewportWidth = 24f, + viewportHeight = 24f + ).path( + fill = SolidColor(color) + ) { + moveTo(6f, 6f) + horizontalLineTo(18f) + verticalLineTo(18f) + horizontalLineTo(6f) + close() + }.build() +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d116850..9dd71d3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.12.0" +agp = "8.12.1" kotlin = "2.0.21" coreKtx = "1.15.0" junit = "4.13.2"