1.0.0 - 1.0 baybeeeee
This commit is contained in:
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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" />
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
6
app/src/main/res/values-night/colors.xml
Normal file
6
app/src/main/res/values-night/colors.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<!-- Splash background (dark) -->
|
||||||
|
<color name="splash_background">#FF121212</color>
|
||||||
|
</resources>
|
||||||
|
|
||||||
@@ -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>
|
||||||
@@ -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>
|
||||||
Reference in New Issue
Block a user