1.0.0 - 1.0 baybeeeee

This commit is contained in:
2025-08-22 16:19:25 -06:00
parent ed76fb2fb2
commit 96759e402d
8 changed files with 63 additions and 25 deletions

View File

@@ -14,8 +14,8 @@ android {
applicationId = "com.atridad.openclimb" applicationId = "com.atridad.openclimb"
minSdk = 31 minSdk = 31
targetSdk = 36 targetSdk = 36
versionCode = 13 versionCode = 14
versionName = "0.5.0" versionName = "1.0.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }

View File

@@ -27,7 +27,7 @@
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/Theme.OpenClimb"> android:theme="@style/Theme.OpenClimb.Splash">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

View File

@@ -13,6 +13,7 @@ import com.atridad.openclimb.ui.theme.OpenClimbTheme
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setTheme(R.style.Theme_OpenClimb)
enableEdgeToEdge() enableEdgeToEdge()
setContent { setContent {
OpenClimbTheme { OpenClimbTheme {

View File

@@ -152,7 +152,10 @@ fun OpenClimbApp() {
SessionDetailScreen( SessionDetailScreen(
sessionId = args.sessionId, sessionId = args.sessionId,
viewModel = viewModel, viewModel = viewModel,
onNavigateBack = { navController.popBackStack() } onNavigateBack = { navController.popBackStack() },
onNavigateToProblemDetail = { problemId ->
navController.navigate(Screen.ProblemDetail(problemId))
}
) )
} }
@@ -178,6 +181,12 @@ fun OpenClimbApp() {
onNavigateBack = { navController.popBackStack() }, onNavigateBack = { navController.popBackStack() },
onNavigateToEdit = { gymId -> onNavigateToEdit = { gymId ->
navController.navigate(Screen.AddEditGym(gymId = gymId)) navController.navigate(Screen.AddEditGym(gymId = gymId))
},
onNavigateToSessionDetail = { sessionId ->
navController.navigate(Screen.SessionDetail(sessionId))
},
onNavigateToProblemDetail = { problemId ->
navController.navigate(Screen.ProblemDetail(problemId))
} }
) )
} }

View File

@@ -210,7 +210,12 @@ fun EditAttemptDialog(
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun SessionDetailScreen(sessionId: String, viewModel: ClimbViewModel, onNavigateBack: () -> Unit) { fun SessionDetailScreen(
sessionId: String,
viewModel: ClimbViewModel,
onNavigateBack: () -> Unit,
onNavigateToProblemDetail: (String) -> Unit = {}
) {
val context = LocalContext.current val context = LocalContext.current
val attempts by viewModel.getAttemptsBySession(sessionId).collectAsState(initial = emptyList()) val attempts by viewModel.getAttemptsBySession(sessionId).collectAsState(initial = emptyList())
val sessions by viewModel.sessions.collectAsState() val sessions by viewModel.sessions.collectAsState()
@@ -520,7 +525,8 @@ fun SessionDetailScreen(sessionId: String, viewModel: ClimbViewModel, onNavigate
onEditAttempt = { attemptToEdit -> showEditAttemptDialog = attemptToEdit }, onEditAttempt = { attemptToEdit -> showEditAttemptDialog = attemptToEdit },
onDeleteAttempt = { attemptToDelete -> onDeleteAttempt = { attemptToDelete ->
viewModel.deleteAttempt(attemptToDelete) viewModel.deleteAttempt(attemptToDelete)
} },
onAttemptClick = { onNavigateToProblemDetail(problem.id) }
) )
} }
} }
@@ -904,7 +910,9 @@ fun GymDetailScreen(
gymId: String, gymId: String,
viewModel: ClimbViewModel, viewModel: ClimbViewModel,
onNavigateBack: () -> Unit, onNavigateBack: () -> Unit,
onNavigateToEdit: (String) -> Unit onNavigateToEdit: (String) -> Unit,
onNavigateToSessionDetail: (String) -> Unit = {},
onNavigateToProblemDetail: (String) -> Unit = {}
) { ) {
val gyms by viewModel.gyms.collectAsState() val gyms by viewModel.gyms.collectAsState()
val gym = gyms.find { it.id == gymId } val gym = gyms.find { it.id == gymId }
@@ -1135,14 +1143,16 @@ fun GymDetailScreen(
Card( Card(
modifier = modifier =
Modifier.fillMaxWidth().padding(vertical = 4.dp), Modifier
.fillMaxWidth()
.padding(vertical = 4.dp)
.clickable { onNavigateToProblemDetail(problem.id) },
colors = colors =
CardDefaults.cardColors( CardDefaults.cardColors(
containerColor = containerColor = MaterialTheme.colorScheme.surface
MaterialTheme.colorScheme.surfaceVariant
.copy(alpha = 0.3f)
), ),
shape = RoundedCornerShape(12.dp) shape = RoundedCornerShape(12.dp),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) { ) {
ListItem( ListItem(
headlineContent = { headlineContent = {
@@ -1208,14 +1218,16 @@ fun GymDetailScreen(
Card( Card(
modifier = modifier =
Modifier.fillMaxWidth().padding(vertical = 4.dp), Modifier
.fillMaxWidth()
.padding(vertical = 4.dp)
.clickable { onNavigateToSessionDetail(session.id) },
colors = colors =
CardDefaults.cardColors( CardDefaults.cardColors(
containerColor = containerColor = MaterialTheme.colorScheme.surface
MaterialTheme.colorScheme.surfaceVariant
.copy(alpha = 0.3f)
), ),
shape = RoundedCornerShape(12.dp) shape = RoundedCornerShape(12.dp),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) { ) {
ListItem( ListItem(
headlineContent = { headlineContent = {
@@ -1456,11 +1468,17 @@ fun SessionAttemptCard(
attempt: Attempt, attempt: Attempt,
problem: Problem, problem: Problem,
onEditAttempt: (Attempt) -> Unit = {}, onEditAttempt: (Attempt) -> Unit = {},
onDeleteAttempt: (Attempt) -> Unit = {} onDeleteAttempt: (Attempt) -> Unit = {},
onAttemptClick: () -> Unit = {}
) { ) {
var showDeleteDialog by remember { mutableStateOf(false) } var showDeleteDialog by remember { mutableStateOf(false) }
Card(modifier = Modifier.fillMaxWidth()) { Card(
modifier = Modifier
.fillMaxWidth()
.clickable { onAttemptClick() },
elevation = CardDefaults.cardElevation(defaultElevation = 2.dp)
) {
Column(modifier = Modifier.padding(16.dp)) { Column(modifier = Modifier.padding(16.dp)) {
Row( Row(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
@@ -1511,11 +1529,7 @@ fun SessionAttemptCard(
// Delete button // Delete button
IconButton( IconButton(
onClick = { showDeleteDialog = true }, onClick = { showDeleteDialog = true },
modifier = Modifier.size(32.dp), modifier = Modifier.size(32.dp)
colors =
IconButtonDefaults.iconButtonColors(
contentColor = MaterialTheme.colorScheme.error
)
) { ) {
Icon( Icon(
Icons.Default.Delete, Icons.Default.Delete,

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Splash background (dark) -->
<color name="splash_background">#FF121212</color>
</resources>

View File

@@ -7,4 +7,7 @@
<color name="teal_700">#FF018786</color> <color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color> <color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color> <color name="white">#FFFFFFFF</color>
<!-- Splash background (light) -->
<color name="splash_background">#FFFFFFFF</color>
</resources> </resources>

View File

@@ -1,5 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<style name="Theme.OpenClimb" parent="android:Theme.Material.Light.NoActionBar" /> <style name="Theme.OpenClimb" parent="android:Theme.Material.Light.NoActionBar" />
<style name="Theme.OpenClimb.Splash" parent="Theme.OpenClimb">
<item name="android:windowSplashScreenBackground">@color/splash_background</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_mountains</item>
<item name="android:windowSplashScreenAnimationDuration">200</item>
</style>
</resources> </resources>