Skip to content

Commit a25288a

Browse files
Updating Colors (#243)
* Updating Colors * Updating colors * Updating splash * Finalizing colors
1 parent 47a88a9 commit a25288a

File tree

17 files changed

+214
-70
lines changed

17 files changed

+214
-70
lines changed

android/src/main/java/co/touchlab/droidcon/android/MainActivity.kt

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,18 @@ import android.os.Build
77
import android.os.Bundle
88
import androidx.activity.ComponentActivity
99
import androidx.activity.compose.setContent
10+
import androidx.activity.enableEdgeToEdge
1011
import androidx.activity.result.contract.ActivityResultContracts
1112
import androidx.compose.animation.Crossfade
13+
import androidx.compose.foundation.ExperimentalFoundationApi
1214
import androidx.compose.foundation.Image
15+
import androidx.compose.foundation.LocalOverscrollConfiguration
1316
import androidx.compose.foundation.background
1417
import androidx.compose.foundation.layout.Box
1518
import androidx.compose.foundation.layout.fillMaxSize
1619
import androidx.compose.foundation.layout.padding
20+
import androidx.compose.material.MaterialTheme
21+
import androidx.compose.runtime.CompositionLocalProvider
1722
import androidx.compose.runtime.LaunchedEffect
1823
import androidx.compose.runtime.getValue
1924
import androidx.compose.runtime.mutableStateOf
@@ -59,6 +64,7 @@ class MainActivity :
5964
) { isGranted: Boolean ->
6065
}
6166

67+
@OptIn(ExperimentalFoundationApi::class)
6268
override fun onCreate(savedInstanceState: Bundle?) {
6369
super.onCreate(savedInstanceState)
6470

@@ -71,32 +77,34 @@ class MainActivity :
7177

7278
// Set up the UI immediately
7379
setContent {
74-
MainView(waitForLoadedContextModel = waitForLoadedContextModel)
80+
CompositionLocalProvider(LocalOverscrollConfiguration provides null) {
81+
MainView(waitForLoadedContextModel = waitForLoadedContextModel)
7582

76-
var showSplashScreen by remember { mutableStateOf(true) }
83+
var showSplashScreen by remember { mutableStateOf(true) }
7784

78-
if (!showSplashScreen) {
79-
LaunchedEffect(Unit) {
80-
askNotificationPermission()
81-
}
82-
}
83-
Crossfade(targetState = showSplashScreen) { shouldShowSplashScreen ->
84-
if (shouldShowSplashScreen) {
85+
if (!showSplashScreen) {
8586
LaunchedEffect(Unit) {
86-
delay(1_000)
87-
showSplashScreen = false
87+
askNotificationPermission()
8888
}
89-
Box(
90-
modifier = Modifier
91-
.background(Colors.primary)
92-
.fillMaxSize(),
93-
contentAlignment = Alignment.Center,
94-
) {
95-
Image(
96-
painter = painterResource(id = R.drawable.ic_splash_screen),
97-
contentDescription = getString(R.string.droidcon_title),
98-
modifier = Modifier.padding(32.dp),
99-
)
89+
}
90+
Crossfade(targetState = showSplashScreen) { shouldShowSplashScreen ->
91+
if (shouldShowSplashScreen) {
92+
LaunchedEffect(Unit) {
93+
delay(1_000)
94+
showSplashScreen = false
95+
}
96+
Box(
97+
modifier = Modifier
98+
.background(Colors.splash)
99+
.fillMaxSize(),
100+
contentAlignment = Alignment.Center,
101+
) {
102+
Image(
103+
painter = painterResource(id = R.drawable.ic_splash_screen),
104+
contentDescription = getString(R.string.droidcon_title),
105+
modifier = Modifier.padding(32.dp),
106+
)
107+
}
100108
}
101109
}
102110
}

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[versions]
22
## SDK Versions
3+
accompanistSystemuicontroller = "0.30.1"
34
minSdk = "21"
45
targetSdk = "35"
56
compileSdk = "35"
@@ -53,6 +54,7 @@ zoomimage = "1.1.0-alpha06"
5354
skie = "0.10.1"
5455

5556
[libraries]
57+
accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanistSystemuicontroller" }
5658
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
5759
coil-network = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" }
5860
sqliter = { module = "co.touchlab:sqliter-driver", version.ref = "sqliter" }

shared-ui/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ kotlin {
102102
implementation(libs.hyperdrive.multiplatformx.api)
103103
// implementation(libs.hyperdrive.multiplatformx.compose)
104104
}
105+
androidMain.dependencies {
106+
implementation(libs.accompanist.systemuicontroller)
107+
108+
}
105109
all {
106110
languageSettings.apply {
107111
optIn("kotlin.RequiresOptIn")
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
package co.touchlab.droidcon.ui.util
22

33
import androidx.compose.foundation.layout.systemBarsPadding
4+
import androidx.compose.material3.MaterialTheme
45
import androidx.compose.runtime.Composable
56
import androidx.compose.ui.Modifier
67
import co.touchlab.droidcon.ui.MainComposeView
8+
import co.touchlab.droidcon.ui.theme.DroidconTheme
79
import co.touchlab.droidcon.viewmodel.WaitForLoadedContextModel
10+
import com.google.accompanist.systemuicontroller.rememberSystemUiController
811

912
@Composable
1013
fun MainView(waitForLoadedContextModel: WaitForLoadedContextModel) {
11-
MainComposeView(waitForLoadedContextModel = waitForLoadedContextModel, modifier = Modifier.systemBarsPadding())
14+
DroidconTheme {
15+
val systemUiController = rememberSystemUiController()
16+
systemUiController.setSystemBarsColor(color = MaterialTheme.colorScheme.surface)
17+
MainComposeView(waitForLoadedContextModel = waitForLoadedContextModel, modifier = Modifier.systemBarsPadding())
18+
}
1219
}

shared-ui/src/commonMain/kotlin/co.touchlab.droidcon/ui/BottomNavigationView.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ import androidx.compose.material3.Text
1818
import androidx.compose.runtime.Composable
1919
import androidx.compose.runtime.getValue
2020
import androidx.compose.ui.Modifier
21+
import androidx.compose.ui.draw.shadow
22+
import androidx.compose.ui.graphics.Color
23+
import androidx.compose.ui.unit.dp
2124
import co.touchlab.droidcon.domain.entity.Conference
2225
import co.touchlab.droidcon.ui.session.SessionListView
2326
import co.touchlab.droidcon.ui.settings.SettingsView
@@ -33,7 +36,10 @@ internal fun BottomNavigationView(viewModel: ApplicationViewModel, currentConfer
3336
Scaffold(
3437
modifier = modifier,
3538
bottomBar = {
36-
NavigationBar {
39+
NavigationBar(
40+
containerColor = MaterialTheme.colorScheme.surface,
41+
modifier = Modifier.shadow(elevation = 10.dp),
42+
) {
3743
viewModel.listTabs(currentConference).forEach { tab ->
3844
val (title, icon) = when (tab) {
3945
ApplicationViewModel.Tab.Schedule -> "Schedule" to Icons.Filled.CalendarMonth
@@ -51,9 +57,11 @@ internal fun BottomNavigationView(viewModel: ApplicationViewModel, currentConfer
5157
viewModel.selectedTab = tab
5258
},
5359
colors = NavigationBarItemDefaults.colors(
54-
indicatorColor = MaterialTheme.colorScheme.primary,
55-
selectedIconColor = MaterialTheme.colorScheme.onPrimary,
56-
selectedTextColor = MaterialTheme.colorScheme.primary,
60+
indicatorColor = MaterialTheme.colorScheme.secondary,
61+
selectedIconColor = Color.White,
62+
selectedTextColor = MaterialTheme.colorScheme.onBackground,
63+
unselectedIconColor = MaterialTheme.colorScheme.onBackground,
64+
unselectedTextColor = MaterialTheme.colorScheme.onBackground,
5765
),
5866
)
5967
}

shared-ui/src/commonMain/kotlin/co.touchlab.droidcon/ui/MainComposeView.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,10 @@ internal fun MainComposeView(waitForLoadedContextModel: WaitForLoadedContextMode
4040

4141
val loadingState by waitForLoadedContextModel.state.collectAsState()
4242

43-
DroidconTheme {
44-
when (val state = loadingState) {
45-
WaitForLoadedContextModel.State.Loading -> LoadingScreen()
46-
is WaitForLoadedContextModel.State.Ready -> MainAppBody(waitForLoadedContextModel, state.conference, modifier)
47-
}
43+
44+
when (val state = loadingState) {
45+
WaitForLoadedContextModel.State.Loading -> LoadingScreen()
46+
is WaitForLoadedContextModel.State.Ready -> MainAppBody(waitForLoadedContextModel, state.conference, modifier)
4847
}
4948
}
5049

shared-ui/src/commonMain/kotlin/co.touchlab.droidcon/ui/session/SessionBlockView.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import androidx.compose.foundation.layout.size
1111
import androidx.compose.foundation.layout.width
1212
import androidx.compose.foundation.shape.CircleShape
1313
import androidx.compose.material3.Card
14+
import androidx.compose.material3.CardDefaults
15+
import androidx.compose.material3.CardElevation
1416
import androidx.compose.material3.ExperimentalMaterial3Api
1517
import androidx.compose.material3.MaterialTheme
1618
import androidx.compose.material3.Text
@@ -23,6 +25,7 @@ import androidx.compose.ui.graphics.Color
2325
import androidx.compose.ui.text.font.FontWeight
2426
import androidx.compose.ui.text.style.TextAlign
2527
import androidx.compose.ui.unit.dp
28+
import co.touchlab.droidcon.ui.theme.Colors
2629
import co.touchlab.droidcon.ui.theme.Dimensions
2730
import co.touchlab.droidcon.ui.util.observeAsState
2831
import co.touchlab.droidcon.viewmodel.session.SessionBlockViewModel
@@ -58,6 +61,12 @@ internal fun SessionBlockView(sessionsBlock: SessionBlockViewModel) {
5861
session.selected()
5962
},
6063
enabled = isClickable,
64+
colors = CardDefaults.cardColors(
65+
containerColor = MaterialTheme.colorScheme.surface,
66+
contentColor = MaterialTheme.colorScheme.onSurface,
67+
disabledContainerColor = MaterialTheme.colorScheme.primaryContainer,
68+
),
69+
elevation = CardDefaults.elevatedCardElevation(3.dp)
6170
) {
6271
Column {
6372
Text(
@@ -75,11 +84,12 @@ internal fun SessionBlockView(sessionsBlock: SessionBlockViewModel) {
7584
bottom = Dimensions.Padding.half,
7685
),
7786
style = MaterialTheme.typography.bodySmall,
78-
color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.8f),
87+
color = MaterialTheme.colorScheme.onSurfaceVariant,
7988
)
8089
}
8190
Text(
8291
text = session.speakers,
92+
color = MaterialTheme.colorScheme.secondary,
8393
modifier = Modifier.padding(
8494
start = Dimensions.Padding.half,
8595
end = Dimensions.Padding.half,

shared-ui/src/commonMain/kotlin/co.touchlab.droidcon/ui/session/SessionDetailView.kt

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import androidx.compose.ui.text.style.TextOverflow
4545
import androidx.compose.ui.unit.dp
4646
import co.touchlab.droidcon.dto.WebLink
4747
import co.touchlab.droidcon.ui.FeedbackDialog
48+
import co.touchlab.droidcon.ui.theme.Colors
4849
import co.touchlab.droidcon.ui.theme.Dimensions
4950
import co.touchlab.droidcon.ui.util.DcAsyncImage
5051
import co.touchlab.droidcon.ui.util.WebLinkText
@@ -77,11 +78,16 @@ internal fun SessionDetailView(viewModel: SessionDetailViewModel) {
7778
IconButton(onClick = { NavigationController.root.handleBackPress() }) {
7879
Icon(
7980
imageVector = Icons.AutoMirrored.Default.ArrowBack,
81+
tint = MaterialTheme.colorScheme.onSecondary,
8082
contentDescription = "Back",
8183
)
8284
}
8385
},
8486
scrollBehavior = scrollBehavior,
87+
colors = TopAppBarDefaults.topAppBarColors(
88+
containerColor = MaterialTheme.colorScheme.secondary,
89+
titleContentColor = MaterialTheme.colorScheme.onSecondary,
90+
),
8591
)
8692
},
8793
) { paddingValues ->
@@ -158,19 +164,21 @@ internal fun SessionDetailView(viewModel: SessionDetailViewModel) {
158164
DescriptionView(it, descriptionLinks)
159165
}
160166

161-
val speakers by viewModel.observeSpeakers.observeAsState()
162-
if (speakers.isNotEmpty()) {
163-
Text(
164-
text = "Speakers",
165-
modifier = Modifier.fillMaxWidth().padding(Dimensions.Padding.default),
166-
style = MaterialTheme.typography.headlineSmall,
167-
textAlign = TextAlign.Center,
168-
)
169167

170-
Divider()
168+
Column(Modifier.padding(top = 10.dp).background(MaterialTheme.colorScheme.primary)) {
169+
val speakers by viewModel.observeSpeakers.observeAsState()
170+
if (speakers.isNotEmpty()) {
171+
Text(
172+
text = "Speakers",
173+
color = MaterialTheme.colorScheme.onPrimary,
174+
modifier = Modifier.fillMaxWidth().padding(Dimensions.Padding.default),
175+
style = MaterialTheme.typography.headlineSmall,
176+
textAlign = TextAlign.Center,
177+
)
171178

172-
speakers.forEach { speaker ->
173-
SpeakerView(speaker)
179+
speakers.forEach { speaker ->
180+
SpeakerView(speaker)
181+
}
174182
}
175183
}
176184
}
@@ -186,11 +194,12 @@ internal fun SessionDetailView(viewModel: SessionDetailViewModel) {
186194
@Composable
187195
private fun HeaderView(title: String, locationInfo: String) {
188196
Column(
189-
modifier = Modifier.fillMaxWidth(),
197+
modifier = Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.secondary),
190198
verticalArrangement = Arrangement.Center,
191199
) {
192200
Text(
193201
text = title,
202+
color = MaterialTheme.colorScheme.onSecondary,
194203
style = MaterialTheme.typography.headlineSmall,
195204
maxLines = 3,
196205
overflow = TextOverflow.Ellipsis,
@@ -202,6 +211,7 @@ private fun HeaderView(title: String, locationInfo: String) {
202211
)
203212
Text(
204213
text = locationInfo,
214+
color = MaterialTheme.colorScheme.onSecondary,
205215
modifier = Modifier.padding(
206216
start = Dimensions.Padding.double,
207217
end = Dimensions.Padding.double,
@@ -223,7 +233,7 @@ private fun InfoView(status: String) {
223233
modifier = Modifier
224234
.padding(Dimensions.Padding.half)
225235
.width(64.dp),
226-
tint = MaterialTheme.colorScheme.onSurface,
236+
tint = MaterialTheme.colorScheme.tertiary,
227237
)
228238
Text(
229239
text = status,
@@ -234,7 +244,7 @@ private fun InfoView(status: String) {
234244
top = Dimensions.Padding.half,
235245
bottom = Dimensions.Padding.half,
236246
),
237-
color = MaterialTheme.colorScheme.onSurface,
247+
color = MaterialTheme.colorScheme.tertiary,
238248
)
239249
}
240250
}
@@ -251,6 +261,7 @@ private fun DescriptionView(description: String, links: List<WebLink>) {
251261
)
252262
WebLinkText(
253263
text = description,
264+
normalTextColor = MaterialTheme.colorScheme.onSurfaceVariant,
254265
links = links,
255266
fontWeight = FontWeight.Normal,
256267
modifier = Modifier.padding(
@@ -264,11 +275,7 @@ private fun DescriptionView(description: String, links: List<WebLink>) {
264275

265276
@Composable
266277
private fun SpeakerView(speaker: SpeakerListItemViewModel) {
267-
Column(
268-
modifier = Modifier
269-
.fillMaxWidth()
270-
.clickable { speaker.selected() },
271-
) {
278+
Column(modifier = Modifier.fillMaxWidth().clickable { speaker.selected() }) {
272279
Row(verticalAlignment = Alignment.CenterVertically) {
273280
val imageUrl = speaker.avatarUrl?.string
274281
if (imageUrl != null) {
@@ -290,7 +297,7 @@ private fun SpeakerView(speaker: SpeakerListItemViewModel) {
290297

291298
Text(
292299
text = speaker.info,
293-
color = MaterialTheme.colorScheme.onSurface,
300+
color = MaterialTheme.colorScheme.onPrimary,
294301
fontWeight = FontWeight.Medium,
295302
modifier = Modifier.padding(
296303
end = Dimensions.Padding.default,
@@ -301,6 +308,7 @@ private fun SpeakerView(speaker: SpeakerListItemViewModel) {
301308
}
302309
Text(
303310
text = speaker.bio ?: "",
311+
color = MaterialTheme.colorScheme.onPrimary,
304312
fontWeight = FontWeight.Normal,
305313
modifier = Modifier.padding(
306314
start = 80.dp,

0 commit comments

Comments
 (0)