Skip to content

Updating Colors #243

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 30 additions & 22 deletions android/src/main/java/co/touchlab/droidcon/android/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,18 @@ import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.animation.Crossfade
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.LocalOverscrollConfiguration
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
Expand Down Expand Up @@ -59,6 +64,7 @@ class MainActivity :
) { isGranted: Boolean ->
}

@OptIn(ExperimentalFoundationApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Expand All @@ -71,32 +77,34 @@ class MainActivity :

// Set up the UI immediately
setContent {
MainView(waitForLoadedContextModel = waitForLoadedContextModel)
CompositionLocalProvider(LocalOverscrollConfiguration provides null) {
MainView(waitForLoadedContextModel = waitForLoadedContextModel)

var showSplashScreen by remember { mutableStateOf(true) }
var showSplashScreen by remember { mutableStateOf(true) }

if (!showSplashScreen) {
LaunchedEffect(Unit) {
askNotificationPermission()
}
}
Crossfade(targetState = showSplashScreen) { shouldShowSplashScreen ->
if (shouldShowSplashScreen) {
if (!showSplashScreen) {
LaunchedEffect(Unit) {
delay(1_000)
showSplashScreen = false
askNotificationPermission()
}
Box(
modifier = Modifier
.background(Colors.primary)
.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Image(
painter = painterResource(id = R.drawable.ic_splash_screen),
contentDescription = getString(R.string.droidcon_title),
modifier = Modifier.padding(32.dp),
)
}
Crossfade(targetState = showSplashScreen) { shouldShowSplashScreen ->
if (shouldShowSplashScreen) {
LaunchedEffect(Unit) {
delay(1_000)
showSplashScreen = false
}
Box(
modifier = Modifier
.background(Colors.splash)
.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Image(
painter = painterResource(id = R.drawable.ic_splash_screen),
contentDescription = getString(R.string.droidcon_title),
modifier = Modifier.padding(32.dp),
)
}
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
[versions]
## SDK Versions
accompanistSystemuicontroller = "0.30.1"
minSdk = "21"
targetSdk = "35"
compileSdk = "35"
Expand Down Expand Up @@ -53,6 +54,7 @@ zoomimage = "1.1.0-alpha06"
skie = "0.10.1"

[libraries]
accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanistSystemuicontroller" }
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
coil-network = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" }
sqliter = { module = "co.touchlab:sqliter-driver", version.ref = "sqliter" }
Expand Down
4 changes: 4 additions & 0 deletions shared-ui/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,10 @@ kotlin {
implementation(libs.hyperdrive.multiplatformx.api)
// implementation(libs.hyperdrive.multiplatformx.compose)
}
androidMain.dependencies {
implementation(libs.accompanist.systemuicontroller)

}
all {
languageSettings.apply {
optIn("kotlin.RequiresOptIn")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
package co.touchlab.droidcon.ui.util

import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import co.touchlab.droidcon.ui.MainComposeView
import co.touchlab.droidcon.ui.theme.DroidconTheme
import co.touchlab.droidcon.viewmodel.WaitForLoadedContextModel
import com.google.accompanist.systemuicontroller.rememberSystemUiController

@Composable
fun MainView(waitForLoadedContextModel: WaitForLoadedContextModel) {
MainComposeView(waitForLoadedContextModel = waitForLoadedContextModel, modifier = Modifier.systemBarsPadding())
DroidconTheme {
val systemUiController = rememberSystemUiController()
systemUiController.setSystemBarsColor(color = MaterialTheme.colorScheme.surface)
MainComposeView(waitForLoadedContextModel = waitForLoadedContextModel, modifier = Modifier.systemBarsPadding())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import co.touchlab.droidcon.domain.entity.Conference
import co.touchlab.droidcon.ui.session.SessionListView
import co.touchlab.droidcon.ui.settings.SettingsView
Expand All @@ -33,7 +36,10 @@ internal fun BottomNavigationView(viewModel: ApplicationViewModel, currentConfer
Scaffold(
modifier = modifier,
bottomBar = {
NavigationBar {
NavigationBar(
containerColor = MaterialTheme.colorScheme.surface,
modifier = Modifier.shadow(elevation = 10.dp),
) {
viewModel.listTabs(currentConference).forEach { tab ->
val (title, icon) = when (tab) {
ApplicationViewModel.Tab.Schedule -> "Schedule" to Icons.Filled.CalendarMonth
Expand All @@ -51,9 +57,11 @@ internal fun BottomNavigationView(viewModel: ApplicationViewModel, currentConfer
viewModel.selectedTab = tab
},
colors = NavigationBarItemDefaults.colors(
indicatorColor = MaterialTheme.colorScheme.primary,
selectedIconColor = MaterialTheme.colorScheme.onPrimary,
selectedTextColor = MaterialTheme.colorScheme.primary,
indicatorColor = MaterialTheme.colorScheme.secondary,
selectedIconColor = Color.White,
selectedTextColor = MaterialTheme.colorScheme.onBackground,
unselectedIconColor = MaterialTheme.colorScheme.onBackground,
unselectedTextColor = MaterialTheme.colorScheme.onBackground,
),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,10 @@ internal fun MainComposeView(waitForLoadedContextModel: WaitForLoadedContextMode

val loadingState by waitForLoadedContextModel.state.collectAsState()

DroidconTheme {
when (val state = loadingState) {
WaitForLoadedContextModel.State.Loading -> LoadingScreen()
is WaitForLoadedContextModel.State.Ready -> MainAppBody(waitForLoadedContextModel, state.conference, modifier)
}

when (val state = loadingState) {
WaitForLoadedContextModel.State.Loading -> LoadingScreen()
is WaitForLoadedContextModel.State.Ready -> MainAppBody(waitForLoadedContextModel, state.conference, modifier)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.CardElevation
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
Expand All @@ -23,6 +25,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import co.touchlab.droidcon.ui.theme.Colors
import co.touchlab.droidcon.ui.theme.Dimensions
import co.touchlab.droidcon.ui.util.observeAsState
import co.touchlab.droidcon.viewmodel.session.SessionBlockViewModel
Expand Down Expand Up @@ -58,6 +61,12 @@ internal fun SessionBlockView(sessionsBlock: SessionBlockViewModel) {
session.selected()
},
enabled = isClickable,
colors = CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.surface,
contentColor = MaterialTheme.colorScheme.onSurface,
disabledContainerColor = MaterialTheme.colorScheme.primaryContainer,
),
elevation = CardDefaults.elevatedCardElevation(3.dp)
) {
Column {
Text(
Expand All @@ -75,11 +84,12 @@ internal fun SessionBlockView(sessionsBlock: SessionBlockViewModel) {
bottom = Dimensions.Padding.half,
),
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.8f),
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
}
Text(
text = session.speakers,
color = MaterialTheme.colorScheme.secondary,
modifier = Modifier.padding(
start = Dimensions.Padding.half,
end = Dimensions.Padding.half,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import co.touchlab.droidcon.dto.WebLink
import co.touchlab.droidcon.ui.FeedbackDialog
import co.touchlab.droidcon.ui.theme.Colors
import co.touchlab.droidcon.ui.theme.Dimensions
import co.touchlab.droidcon.ui.util.DcAsyncImage
import co.touchlab.droidcon.ui.util.WebLinkText
Expand Down Expand Up @@ -77,11 +78,16 @@ internal fun SessionDetailView(viewModel: SessionDetailViewModel) {
IconButton(onClick = { NavigationController.root.handleBackPress() }) {
Icon(
imageVector = Icons.AutoMirrored.Default.ArrowBack,
tint = MaterialTheme.colorScheme.onSecondary,
contentDescription = "Back",
)
}
},
scrollBehavior = scrollBehavior,
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.secondary,
titleContentColor = MaterialTheme.colorScheme.onSecondary,
),
)
},
) { paddingValues ->
Expand Down Expand Up @@ -158,19 +164,21 @@ internal fun SessionDetailView(viewModel: SessionDetailViewModel) {
DescriptionView(it, descriptionLinks)
}

val speakers by viewModel.observeSpeakers.observeAsState()
if (speakers.isNotEmpty()) {
Text(
text = "Speakers",
modifier = Modifier.fillMaxWidth().padding(Dimensions.Padding.default),
style = MaterialTheme.typography.headlineSmall,
textAlign = TextAlign.Center,
)

Divider()
Column(Modifier.padding(top = 10.dp).background(MaterialTheme.colorScheme.primary)) {
val speakers by viewModel.observeSpeakers.observeAsState()
if (speakers.isNotEmpty()) {
Text(
text = "Speakers",
color = MaterialTheme.colorScheme.onPrimary,
modifier = Modifier.fillMaxWidth().padding(Dimensions.Padding.default),
style = MaterialTheme.typography.headlineSmall,
textAlign = TextAlign.Center,
)

speakers.forEach { speaker ->
SpeakerView(speaker)
speakers.forEach { speaker ->
SpeakerView(speaker)
}
}
}
}
Expand All @@ -186,11 +194,12 @@ internal fun SessionDetailView(viewModel: SessionDetailViewModel) {
@Composable
private fun HeaderView(title: String, locationInfo: String) {
Column(
modifier = Modifier.fillMaxWidth(),
modifier = Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.secondary),
verticalArrangement = Arrangement.Center,
) {
Text(
text = title,
color = MaterialTheme.colorScheme.onSecondary,
style = MaterialTheme.typography.headlineSmall,
maxLines = 3,
overflow = TextOverflow.Ellipsis,
Expand All @@ -202,6 +211,7 @@ private fun HeaderView(title: String, locationInfo: String) {
)
Text(
text = locationInfo,
color = MaterialTheme.colorScheme.onSecondary,
modifier = Modifier.padding(
start = Dimensions.Padding.double,
end = Dimensions.Padding.double,
Expand All @@ -223,7 +233,7 @@ private fun InfoView(status: String) {
modifier = Modifier
.padding(Dimensions.Padding.half)
.width(64.dp),
tint = MaterialTheme.colorScheme.onSurface,
tint = MaterialTheme.colorScheme.tertiary,
)
Text(
text = status,
Expand All @@ -234,7 +244,7 @@ private fun InfoView(status: String) {
top = Dimensions.Padding.half,
bottom = Dimensions.Padding.half,
),
color = MaterialTheme.colorScheme.onSurface,
color = MaterialTheme.colorScheme.tertiary,
)
}
}
Expand All @@ -251,6 +261,7 @@ private fun DescriptionView(description: String, links: List<WebLink>) {
)
WebLinkText(
text = description,
normalTextColor = MaterialTheme.colorScheme.onSurfaceVariant,
links = links,
fontWeight = FontWeight.Normal,
modifier = Modifier.padding(
Expand All @@ -264,11 +275,7 @@ private fun DescriptionView(description: String, links: List<WebLink>) {

@Composable
private fun SpeakerView(speaker: SpeakerListItemViewModel) {
Column(
modifier = Modifier
.fillMaxWidth()
.clickable { speaker.selected() },
) {
Column(modifier = Modifier.fillMaxWidth().clickable { speaker.selected() }) {
Row(verticalAlignment = Alignment.CenterVertically) {
val imageUrl = speaker.avatarUrl?.string
if (imageUrl != null) {
Expand All @@ -290,7 +297,7 @@ private fun SpeakerView(speaker: SpeakerListItemViewModel) {

Text(
text = speaker.info,
color = MaterialTheme.colorScheme.onSurface,
color = MaterialTheme.colorScheme.onPrimary,
fontWeight = FontWeight.Medium,
modifier = Modifier.padding(
end = Dimensions.Padding.default,
Expand All @@ -301,6 +308,7 @@ private fun SpeakerView(speaker: SpeakerListItemViewModel) {
}
Text(
text = speaker.bio ?: "",
color = MaterialTheme.colorScheme.onPrimary,
fontWeight = FontWeight.Normal,
modifier = Modifier.padding(
start = 80.dp,
Expand Down
Loading
Loading