diff --git a/app/src/main/java/com/sayanthrock/freeairock/ui/AboutScreen.kt b/app/src/main/java/com/sayanthrock/freeairock/ui/AboutScreen.kt index d53a8d6..062d6a1 100644 --- a/app/src/main/java/com/sayanthrock/freeairock/ui/AboutScreen.kt +++ b/app/src/main/java/com/sayanthrock/freeairock/ui/AboutScreen.kt @@ -15,8 +15,8 @@ import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton -import androidx.compose.material3.RadioButton -import androidx.compose.material3.RadioButtonDefaults +import androidx.compose.material3.Surface +import androidx.compose.foundation.layout.Arrangement import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -73,28 +73,31 @@ fun AboutScreen( Spacer(modifier = Modifier.height(16.dp)) val themeOptions = listOf(ThemeMode.SYSTEM, ThemeMode.LIGHT, ThemeMode.DARK) - val themeLabels = listOf("System Auto Color", "Light Mode", "Dark Mode") + val themeLabels = listOf("System", "Light", "Dark") - themeOptions.forEachIndexed { index, themeMode -> - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .fillMaxWidth() - .clickable { onThemeChange(themeMode) } - .padding(vertical = 8.dp) - ) { - RadioButton( - selected = currentTheme == themeMode, - onClick = { onThemeChange(themeMode) }, - colors = RadioButtonDefaults.colors( - selectedColor = MaterialTheme.colorScheme.primary + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween + ) { + themeOptions.forEachIndexed { index, themeMode -> + Surface( + shape = MaterialTheme.shapes.large, + color = if (currentTheme == themeMode) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surface, + contentColor = if (currentTheme == themeMode) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurface, + modifier = Modifier + .weight(1f) + .padding(horizontal = 4.dp) + .clickable { onThemeChange(themeMode) }, + shadowElevation = if (currentTheme == themeMode) 4.dp else 0.dp + ) { + Text( + text = themeLabels[index], + style = MaterialTheme.typography.bodyLarge, + fontFamily = FontFamily.Monospace, + modifier = Modifier.padding(vertical = 12.dp, horizontal = 8.dp), + textAlign = androidx.compose.ui.text.style.TextAlign.Center ) - ) - Spacer(modifier = Modifier.width(8.dp)) - Text( - text = themeLabels[index], - style = MaterialTheme.typography.bodyLarge - ) + } } } @@ -121,8 +124,9 @@ fun AboutScreen( Text( text = "FREE-AI-ROCK", - style = MaterialTheme.typography.bodyLarge, - fontFamily = FontFamily.Monospace + style = MaterialTheme.typography.titleLarge, + fontFamily = FontFamily.Monospace, + color = MaterialTheme.colorScheme.primary ) Text( text = "Designed and developed by @SayanthRock in Kerala, India.", diff --git a/app/src/main/java/com/sayanthrock/freeairock/ui/HomeScaffold.kt b/app/src/main/java/com/sayanthrock/freeairock/ui/HomeScaffold.kt index b14fd1c..c0023e1 100644 --- a/app/src/main/java/com/sayanthrock/freeairock/ui/HomeScaffold.kt +++ b/app/src/main/java/com/sayanthrock/freeairock/ui/HomeScaffold.kt @@ -3,8 +3,11 @@ package com.sayanthrock.freeairock.ui import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.NavigationBar -import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Surface +import androidx.compose.material3.Tab +import androidx.compose.material3.TabRow +import androidx.compose.material3.TabRowDefaults +import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -29,24 +32,38 @@ fun HomeScaffold( val screens = listOf(Screen.ImageStudio, Screen.About) Scaffold( - bottomBar = { - NavigationBar(containerColor = MaterialTheme.colorScheme.surface) { + topBar = { + Surface(shadowElevation = 4.dp) { val navBackStackEntry by navController.currentBackStackEntryAsState() val currentDestination = navBackStackEntry?.destination + val currentRoute = currentDestination?.route + val selectedTabIndex = screens.indexOfFirst { it.route == currentRoute }.takeIf { it >= 0 } ?: 0 - screens.forEach { screen -> - NavigationBarItem( - icon = { Text(screen.shortLabel, fontFamily = FontFamily.Monospace) }, - label = { Text(screen.title, fontFamily = FontFamily.Monospace) }, - selected = currentDestination?.hierarchy?.any { it.route == screen.route } == true, - onClick = { - navController.navigate(screen.route) { - popUpTo(navController.graph.findStartDestination().id) { saveState = true } - launchSingleTop = true - restoreState = true - } - } - ) + TabRow( + selectedTabIndex = selectedTabIndex, + containerColor = MaterialTheme.colorScheme.surface, + contentColor = MaterialTheme.colorScheme.onSurface, + indicator = { tabPositions -> + TabRowDefaults.SecondaryIndicator( + Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex]), + color = MaterialTheme.colorScheme.primary + ) + } + ) { + screens.forEachIndexed { index, screen -> + Tab( + selected = selectedTabIndex == index, + onClick = { + navController.navigate(screen.route) { + popUpTo(navController.graph.findStartDestination().id) { saveState = true } + launchSingleTop = true + restoreState = true + } + }, + text = { Text(screen.title, fontFamily = FontFamily.Monospace) }, + icon = { Text(screen.shortLabel, fontFamily = FontFamily.Monospace, style = MaterialTheme.typography.titleLarge) } + ) + } } } } diff --git a/app/src/main/java/com/sayanthrock/freeairock/ui/ImageStudioScreen.kt b/app/src/main/java/com/sayanthrock/freeairock/ui/ImageStudioScreen.kt index a90f7bd..5b84d6a 100644 --- a/app/src/main/java/com/sayanthrock/freeairock/ui/ImageStudioScreen.kt +++ b/app/src/main/java/com/sayanthrock/freeairock/ui/ImageStudioScreen.kt @@ -15,7 +15,9 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -74,12 +76,17 @@ fun ImageStudioScreen( label = { Text("Describe the image you want") }, modifier = Modifier.fillMaxWidth(), singleLine = false, - maxLines = 5 + maxLines = 5, + shape = MaterialTheme.shapes.extraLarge, + colors = OutlinedTextFieldDefaults.colors( + unfocusedBorderColor = MaterialTheme.colorScheme.primary.copy(alpha = 0.5f), + focusedBorderColor = MaterialTheme.colorScheme.primary + ) ) Spacer(modifier = Modifier.height(16.dp)) - Button( + OutlinedButton( onClick = { if (prompt.isNotBlank()) { val seed = (0..1000000).random() @@ -90,7 +97,7 @@ fun ImageStudioScreen( modifier = Modifier.fillMaxWidth(), enabled = prompt.isNotBlank() && !isGenerating ) { - Text(if (isGenerating) "Generating..." else "Generate Image") + Text(if (isGenerating) "Generating..." else "Generate Image", fontFamily = FontFamily.Monospace) } Spacer(modifier = Modifier.height(32.dp)) @@ -98,7 +105,8 @@ fun ImageStudioScreen( imageUrl?.let { url -> Surface( color = MaterialTheme.colorScheme.surface, - shape = MaterialTheme.shapes.medium, + shape = MaterialTheme.shapes.extraLarge, + shadowElevation = 8.dp, modifier = Modifier.fillMaxWidth().height(300.dp) ) { SubcomposeAsyncImage( @@ -126,7 +134,7 @@ fun ImageStudioScreen( Spacer(modifier = Modifier.height(16.dp)) - Button( + OutlinedButton( onClick = { if (!isDownloading) { isDownloading = true @@ -153,7 +161,7 @@ fun ImageStudioScreen( modifier = Modifier.fillMaxWidth(), enabled = !isDownloading && !isGenerating ) { - Text(if (isDownloading) "Downloading..." else "Download [↓]") + Text(if (isDownloading) "Downloading..." else "Download [↓]", fontFamily = FontFamily.Monospace) } } } diff --git a/app/src/main/java/com/sayanthrock/freeairock/ui/navigation/Screen.kt b/app/src/main/java/com/sayanthrock/freeairock/ui/navigation/Screen.kt index 6779195..0ea2283 100644 --- a/app/src/main/java/com/sayanthrock/freeairock/ui/navigation/Screen.kt +++ b/app/src/main/java/com/sayanthrock/freeairock/ui/navigation/Screen.kt @@ -8,12 +8,12 @@ sealed class Screen( data object ImageStudio : Screen( route = "image_studio", title = "Image Studio", - shortLabel = "IMG" + shortLabel = "◩" ) data object About : Screen( route = "about", title = "Settings", - shortLabel = "SET" + shortLabel = "⚙" ) }