rebuilding components

This commit is contained in:
f1rq 2025-04-16 20:48:19 +02:00
parent 97d0ed4d21
commit 5ddb6ea9ef
8 changed files with 127 additions and 27 deletions

View File

@ -4,10 +4,12 @@ import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.core.view.WindowCompat
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.currentBackStackEntryAsState
@ -21,14 +23,15 @@ import com.f1rq.lifemap.ui.theme.LifeMapTheme
import com.f1rq.lifemap.ui.theme.ActiveNavColor import com.f1rq.lifemap.ui.theme.ActiveNavColor
import com.f1rq.lifemap.ui.theme.InactiveNavColor import com.f1rq.lifemap.ui.theme.InactiveNavColor
import com.f1rq.lifemap.components.TopBar import com.f1rq.lifemap.components.TopBar
import com.f1rq.lifemap.components.NavBar
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent { setContent {
LifeMapTheme { LifeMapTheme {
val navController = rememberNavController() val navController = rememberNavController()
Scaffold( Scaffold(
topBar = { topBar = {
TopBar( TopBar(
@ -40,10 +43,10 @@ class MainActivity : ComponentActivity() {
val navBackStackEntry = navController.currentBackStackEntryAsState() val navBackStackEntry = navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry.value?.destination?.route val currentRoute = navBackStackEntry.value?.destination?.route
NavigationBar( NavBar(
onWorldViewTapped = { navController.navigate("mapview") }, onMapViewClicked = { navController.navigate("mapview") },
onListViewTapped = { navController.navigate("listview") }, onListViewClicked = { navController.navigate("listview") },
worldViewBackgroundColor = if (currentRoute == "mapview") ActiveNavColor else InactiveNavColor, mapViewBackgroundColor = if (currentRoute == "mapview") ActiveNavColor else InactiveNavColor,
listViewBackgroundColor = if (currentRoute == "listview") ActiveNavColor else InactiveNavColor listViewBackgroundColor = if (currentRoute == "listview") ActiveNavColor else InactiveNavColor
) )
} }
@ -68,9 +71,18 @@ class MainActivity : ComponentActivity() {
@Composable @Composable
fun GreetingPreview() { fun GreetingPreview() {
LifeMapTheme { LifeMapTheme {
NavigationBar( Scaffold(
onWorldViewTapped = {}, topBar = {
onListViewTapped = {} TopBar()
) },
bottomBar = {
NavigationBar(
onWorldViewTapped = {},
onListViewTapped = {}
)
}
) { innerPadding ->
MapView(Modifier.padding(innerPadding))
}
} }
} }

View File

@ -30,7 +30,7 @@ fun AddEventCard(
Card( Card(
modifier = modifier modifier = modifier
.fillMaxWidth() .fillMaxWidth()
.padding(16.dp), .padding(8.dp),
shape = RoundedCornerShape(16.dp), shape = RoundedCornerShape(16.dp),
elevation = CardDefaults.cardElevation(defaultElevation = 6.dp), elevation = CardDefaults.cardElevation(defaultElevation = 6.dp),
colors = CardDefaults.cardColors( colors = CardDefaults.cardColors(

View File

@ -1,26 +1,100 @@
package com.f1rq.lifemap.components package com.f1rq.lifemap.components
import androidx.compose.foundation.layout.*
import android.graphics.Color import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.layout.Box import androidx.compose.material3.Icon
import androidx.compose.foundation.layout.requiredHeight import androidx.compose.material3.IconButton
import androidx.compose.foundation.layout.requiredWidth import androidx.compose.foundation.background
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.f1rq.lifemap.ui.theme.MainBG
import com.f1rq.lifemap.ui.theme.InactiveNavColor
import com.f1rq.lifemap.ui.theme.ActiveNavColor
import com.f1rq.lifemap.ui.theme.ButtonColor
import com.f1rq.lifemap.R.drawable.navbar_listview_button
import com.f1rq.lifemap.R.drawable.navbar_mapview_button
@Composable @Composable
fun NavBar( fun NavBar(
onWorldViewTapped: () -> Unit = {}, onMapViewClicked: () -> Unit = {},
onListViewTapped: () -> Unit = {}, onListViewClicked: () -> Unit = {},
mapViewBackgroundColor: Color = ActiveNavColor,
listViewBackgroundColor: Color = InactiveNavColor,
) { ) {
Box(modifier = Modifier Row(
.requiredWidth(24.0.dp) modifier = Modifier
.requiredHeight(24.0.dp) .fillMaxWidth()
.background(
color = MainBG,
shape = RoundedCornerShape(
topStart = 16.dp,
topEnd = 16.dp,
bottomStart = 0.dp,
bottomEnd = 0.dp
)
)
.padding(
top = 12.dp,
bottom = WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding() + 6.dp,
),
verticalAlignment = Alignment.CenterVertically
) { ) {
// Left Half - Map View Button
Box(
modifier = Modifier
.weight(1f),
contentAlignment = Alignment.Center
) {
IconButton(
onClick = onMapViewClicked,
modifier = Modifier
.size(48.dp)
.background(
color = mapViewBackgroundColor,
shape = RoundedCornerShape(16.dp)
)
) {
Icon(
painter = painterResource(id = navbar_mapview_button),
contentDescription = "Map View",
modifier = Modifier
.requiredSize(24.dp),
tint = ButtonColor
)
}
}
// Right Half - List View Button
Box(
modifier = Modifier
.weight(1f),
contentAlignment = Alignment.Center
) {
IconButton(
onClick = onListViewClicked,
modifier = Modifier
.size(48.dp)
.background(
color = listViewBackgroundColor,
shape = RoundedCornerShape(16.dp)
)
) {
Icon(
painter = painterResource(id = navbar_listview_button),
contentDescription = "List View",
modifier = Modifier
.requiredSize(24.dp),
tint = ButtonColor
)
}
}
} }
} }

View File

@ -29,8 +29,9 @@ fun TopBar(
) { ) {
Card( Card(
modifier = Modifier modifier = Modifier
.fillMaxWidth(), .fillMaxWidth()
shape = RoundedCornerShape( .padding(top = WindowInsets.statusBars.asPaddingValues().calculateTopPadding()),
shape = RoundedCornerShape(
topStart = 0.dp, topStart = 0.dp,
topEnd = 0.dp, topEnd = 0.dp,
bottomStart = 16.dp, bottomStart = 16.dp,
@ -45,7 +46,7 @@ fun TopBar(
modifier = Modifier modifier = Modifier
.padding( .padding(
start = 20.0.dp, start = 20.0.dp,
top = 65.0.dp, top = 10.0.dp,
end = 20.0.dp, end = 20.0.dp,
bottom = 15.0.dp bottom = 15.0.dp
), ),

View File

@ -2,6 +2,7 @@ package com.f1rq.lifemap.screens
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -10,7 +11,9 @@ import androidx.compose.ui.Modifier
@Composable @Composable
fun ListView(modifier: Modifier = Modifier) { fun ListView(modifier: Modifier = Modifier) {
Box( Box(
modifier = Modifier.fillMaxSize(), modifier = Modifier
.fillMaxSize()
.systemBarsPadding(),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Text("List view") Text("List view")

View File

@ -1,18 +1,23 @@
package com.f1rq.lifemap.screens package com.f1rq.lifemap.screens
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import com.f1rq.lifemap.components.AddEventCard import com.f1rq.lifemap.components.AddEventCard
@Composable @Composable
fun MapView(modifier: Modifier = Modifier) { fun MapView(modifier: Modifier = Modifier) {
Box( Box(
modifier = Modifier.fillMaxSize() modifier = Modifier
.fillMaxSize()
.systemBarsPadding()
) { ) {
Text( Text(
text = "Map view", text = "Map view",

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.LifeMap" parent="android:Theme.Material.Light.NoActionBar" /> <style name="Theme.LifeMap" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
</resources> </resources>