Skip to content

Commit aad0697

Browse files
committed
Update to support edge to edge
1 parent fa3c3d2 commit aad0697

13 files changed

Lines changed: 95 additions & 90 deletions

File tree

app/build.gradle.kts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ plugins {
1111

1212
android {
1313
namespace = "dev.shorthouse.coinwatch"
14-
compileSdk = 34
14+
compileSdk = 36
1515

1616
defaultConfig {
1717
applicationId = "dev.shorthouse.coinwatch"
1818
minSdk = 26
19-
targetSdk = 34
20-
versionCode = 25
21-
versionName = "1.3.0"
19+
targetSdk = 35
20+
versionCode = 26
21+
versionName = "1.4.0"
2222
ndk {
2323
debugSymbolLevel = "FULL"
2424
}
@@ -81,7 +81,6 @@ dependencies {
8181
implementation(libs.androidx.compose.material3)
8282
implementation(libs.androidx.compose.material.icons.extended)
8383
implementation(libs.androidx.lifecycle.runtime.compose)
84-
implementation(libs.accompanist.systemuicontroller)
8584
implementation(libs.androidx.ui.tooling.preview.android)
8685
implementation(libs.androidx.navigation.compose)
8786
lintChecks(libs.compose.lint.checks)

app/src/androidTest/java/dev/shorthouse/coinwatch/ui/screen/DetailsScreenTest.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,12 +342,19 @@ class DetailsScreenTest {
342342

343343
composeTestRule.apply {
344344
onNodeWithText("1H").performClick()
345+
waitForIdle()
345346
onNodeWithText("1D").performClick()
347+
waitForIdle()
346348
onNodeWithText("1W").performClick()
349+
waitForIdle()
347350
onNodeWithText("1M").performClick()
351+
waitForIdle()
348352
onNodeWithText("3M").performClick()
353+
waitForIdle()
349354
onNodeWithText("1Y").performClick()
355+
waitForIdle()
350356
onNodeWithText("5Y").performClick()
357+
waitForIdle()
351358
}
352359

353360
onClickChartPeriodMap.values.forEach { isChartPeriodClicked ->

app/src/main/java/dev/shorthouse/coinwatch/MainActivity.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package dev.shorthouse.coinwatch
22

3+
import android.graphics.Color
34
import android.os.Bundle
45
import androidx.activity.ComponentActivity
6+
import androidx.activity.SystemBarStyle
57
import androidx.activity.compose.setContent
8+
import androidx.activity.enableEdgeToEdge
69
import androidx.compose.runtime.getValue
710
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
811
import androidx.hilt.navigation.compose.hiltViewModel
@@ -11,17 +14,28 @@ import androidx.navigation.compose.rememberNavController
1114
import dagger.hilt.android.AndroidEntryPoint
1215
import dev.shorthouse.coinwatch.navigation.AppNavHost
1316
import dev.shorthouse.coinwatch.ui.theme.AppTheme
17+
import dev.shorthouse.coinwatch.ui.theme.DefaultDarkScrim
1418

1519
@AndroidEntryPoint
1620
class MainActivity : ComponentActivity() {
1721
override fun onCreate(savedInstanceState: Bundle?) {
1822
installSplashScreen()
1923

2024
super.onCreate(savedInstanceState)
25+
26+
enableEdgeToEdge(
27+
statusBarStyle = SystemBarStyle.dark(
28+
scrim = Color.TRANSPARENT,
29+
),
30+
navigationBarStyle = SystemBarStyle.dark(
31+
scrim = DefaultDarkScrim,
32+
)
33+
)
34+
2135
setContent {
2236
val navController = rememberNavController()
2337

24-
AppTheme(navController = navController) {
38+
AppTheme {
2539
val viewModel: MainActivityViewModel = hiltViewModel()
2640
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
2741

app/src/main/java/dev/shorthouse/coinwatch/navigation/NavigationBarScaffold.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@ package dev.shorthouse.coinwatch.navigation
33
import androidx.compose.animation.EnterTransition
44
import androidx.compose.animation.ExitTransition
55
import androidx.compose.foundation.layout.RowScope
6+
import androidx.compose.foundation.layout.WindowInsets
7+
import androidx.compose.foundation.layout.WindowInsetsSides
8+
import androidx.compose.foundation.layout.displayCutout
9+
import androidx.compose.foundation.layout.navigationBars
10+
import androidx.compose.foundation.layout.only
611
import androidx.compose.foundation.layout.padding
12+
import androidx.compose.foundation.layout.windowInsetsPadding
713
import androidx.compose.material.icons.Icons
814
import androidx.compose.material.icons.rounded.BarChart
915
import androidx.compose.material.icons.rounded.Favorite
@@ -40,7 +46,7 @@ fun NavigationBarScaffold(
4046
startScreen: NavigationBarScreen,
4147
onNavigateDetails: (String) -> Unit,
4248
onNavigateSettings: () -> Unit,
43-
modifier: Modifier = Modifier
49+
modifier: Modifier = Modifier,
4450
) {
4551
val navController = rememberNavController()
4652

@@ -74,6 +80,7 @@ fun NavigationBarScaffold(
7480
}
7581
}
7682
},
83+
contentWindowInsets = WindowInsets(top = 0.dp, bottom = 0.dp),
7784
content = { scaffoldPadding ->
7885
NavigationBarNavHost(
7986
navController = navController,
@@ -84,6 +91,8 @@ fun NavigationBarScaffold(
8491
)
8592
},
8693
modifier = modifier
94+
.windowInsetsPadding(WindowInsets.displayCutout)
95+
.windowInsetsPadding(WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal))
8796
)
8897
}
8998

@@ -93,7 +102,7 @@ private fun NavigationBarNavHost(
93102
startScreen: NavigationBarScreen,
94103
onNavigateDetails: (String) -> Unit,
95104
onNavigateSettings: () -> Unit,
96-
modifier: Modifier = Modifier
105+
modifier: Modifier = Modifier,
97106
) {
98107
NavHost(
99108
navController = navController,
@@ -122,7 +131,7 @@ private fun RowScope.AddNavigationBarItem(
122131
screen: NavigationBarScreen,
123132
currentDestination: NavDestination?,
124133
navController: NavHostController,
125-
modifier: Modifier = Modifier
134+
modifier: Modifier = Modifier,
126135
) {
127136
val selected = currentDestination?.hierarchy?.any { destination ->
128137
destination.route == screen.route

app/src/main/java/dev/shorthouse/coinwatch/ui/component/AppBottomSheet.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.compose.foundation.background
44
import androidx.compose.foundation.layout.Column
55
import androidx.compose.foundation.layout.Row
66
import androidx.compose.foundation.layout.Spacer
7+
import androidx.compose.foundation.layout.WindowInsets
78
import androidx.compose.foundation.layout.fillMaxWidth
89
import androidx.compose.foundation.layout.height
910
import androidx.compose.foundation.layout.navigationBarsPadding
@@ -36,7 +37,7 @@ fun AppBottomSheet(
3637
onDismissRequest: () -> Unit,
3738
sheetState: SheetState,
3839
modifier: Modifier = Modifier,
39-
content: @Composable () -> Unit
40+
content: @Composable () -> Unit,
4041
) {
4142
ModalBottomSheet(
4243
onDismissRequest = onDismissRequest,
@@ -45,11 +46,12 @@ fun AppBottomSheet(
4546
contentColor = MaterialTheme.colorScheme.onSurface,
4647
tonalElevation = 0.dp,
4748
sheetState = sheetState,
49+
windowInsets = WindowInsets(bottom = 0.dp),
4850
modifier = modifier
4951
) {
5052
Column(
5153
modifier = Modifier
52-
.padding(top = 20.dp, start = 20.dp, end = 20.dp)
54+
.padding(20.dp)
5355
.navigationBarsPadding()
5456
.fillMaxWidth()
5557
) {
@@ -71,7 +73,7 @@ fun BottomSheetOption(
7173
label: String,
7274
isSelected: Boolean,
7375
onSelected: () -> Unit,
74-
modifier: Modifier = Modifier
76+
modifier: Modifier = Modifier,
7577
) {
7678
val optionBackgroundColor = if (isSelected) {
7779
MaterialTheme.colorScheme.primaryContainer

app/src/main/java/dev/shorthouse/coinwatch/ui/screen/details/DetailsScreen.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ package dev.shorthouse.coinwatch.ui.screen.details
33
import androidx.compose.foundation.layout.Column
44
import androidx.compose.foundation.layout.Row
55
import androidx.compose.foundation.layout.Spacer
6+
import androidx.compose.foundation.layout.WindowInsets
7+
import androidx.compose.foundation.layout.displayCutout
68
import androidx.compose.foundation.layout.fillMaxSize
79
import androidx.compose.foundation.layout.height
810
import androidx.compose.foundation.layout.padding
911
import androidx.compose.foundation.layout.size
12+
import androidx.compose.foundation.layout.windowInsetsPadding
1013
import androidx.compose.foundation.rememberScrollState
1114
import androidx.compose.foundation.verticalScroll
1215
import androidx.compose.material.icons.Icons
@@ -55,7 +58,7 @@ import dev.shorthouse.coinwatch.ui.theme.AppTheme
5558
@Composable
5659
fun DetailsScreen(
5760
viewModel: DetailsViewModel = hiltViewModel(),
58-
onNavigateUp: () -> Unit
61+
onNavigateUp: () -> Unit,
5962
) {
6063
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
6164

@@ -76,7 +79,7 @@ fun DetailsScreen(
7679
onNavigateUp: () -> Unit,
7780
onClickFavouriteCoin: () -> Unit,
7881
onClickChartPeriod: (ChartPeriod) -> Unit,
79-
modifier: Modifier = Modifier
82+
modifier: Modifier = Modifier,
8083
) {
8184
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
8285

@@ -100,7 +103,9 @@ fun DetailsScreen(
100103
}
101104
}
102105
},
103-
modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
106+
modifier = modifier
107+
.nestedScroll(scrollBehavior.nestedScrollConnection)
108+
.windowInsetsPadding(WindowInsets.displayCutout)
104109
) { scaffoldPadding ->
105110
when (uiState) {
106111
is DetailsUiState.Success -> {
@@ -135,7 +140,7 @@ fun DetailsTopBar(
135140
onNavigateUp: () -> Unit,
136141
onClickFavouriteCoin: () -> Unit,
137142
scrollBehavior: TopAppBarScrollBehavior,
138-
modifier: Modifier = Modifier
143+
modifier: Modifier = Modifier,
139144
) {
140145
val context = LocalContext.current
141146

@@ -211,7 +216,7 @@ fun DetailsContent(
211216
coinChart: CoinChart,
212217
chartPeriod: ChartPeriod,
213218
onClickChartPeriod: (ChartPeriod) -> Unit,
214-
modifier: Modifier = Modifier
219+
modifier: Modifier = Modifier,
215220
) {
216221
Column(
217222
modifier = modifier
@@ -259,7 +264,7 @@ fun DetailsContent(
259264
@Composable
260265
@Preview
261266
private fun DetailsScreenPreview(
262-
@PreviewParameter(DetailsUiStatePreviewProvider::class) uiState: DetailsUiState
267+
@PreviewParameter(DetailsUiStatePreviewProvider::class) uiState: DetailsUiState,
263268
) {
264269
AppTheme {
265270
DetailsScreen(

app/src/main/java/dev/shorthouse/coinwatch/ui/screen/favourites/FavouritesScreen.kt

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import androidx.compose.foundation.layout.Arrangement
1010
import androidx.compose.foundation.layout.Box
1111
import androidx.compose.foundation.layout.PaddingValues
1212
import androidx.compose.foundation.layout.Row
13+
import androidx.compose.foundation.layout.WindowInsets
1314
import androidx.compose.foundation.layout.fillMaxHeight
1415
import androidx.compose.foundation.layout.fillMaxSize
15-
import androidx.compose.foundation.layout.offset
1616
import androidx.compose.foundation.layout.padding
1717
import androidx.compose.foundation.lazy.LazyColumn
1818
import androidx.compose.foundation.lazy.LazyListState
@@ -56,8 +56,8 @@ import androidx.compose.ui.unit.dp
5656
import androidx.hilt.navigation.compose.hiltViewModel
5757
import androidx.lifecycle.compose.collectAsStateWithLifecycle
5858
import dev.shorthouse.coinwatch.R
59-
import dev.shorthouse.coinwatch.data.source.local.preferences.common.CoinSort
6059
import dev.shorthouse.coinwatch.data.source.local.database.model.FavouriteCoin
60+
import dev.shorthouse.coinwatch.data.source.local.preferences.common.CoinSort
6161
import dev.shorthouse.coinwatch.ui.component.CoinSortChip
6262
import dev.shorthouse.coinwatch.ui.component.LoadingIndicator
6363
import dev.shorthouse.coinwatch.ui.component.ScrollToTopFab
@@ -75,7 +75,7 @@ import kotlinx.coroutines.launch
7575
@Composable
7676
fun FavouritesScreen(
7777
viewModel: FavouritesViewModel = hiltViewModel(),
78-
onNavigateDetails: (String) -> Unit
78+
onNavigateDetails: (String) -> Unit,
7979
) {
8080
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
8181

@@ -163,6 +163,7 @@ fun FavouriteScreen(
163163
)
164164
}
165165
},
166+
contentWindowInsets = WindowInsets(top = 0.dp, bottom = 0.dp),
166167
modifier = modifier
167168
.fillMaxSize()
168169
.nestedScroll(scrollBehavior.nestedScrollConnection)
@@ -217,7 +218,7 @@ fun FavouritesTopBar(
217218
isFavouritesListEmpty: Boolean,
218219
isLoading: Boolean,
219220
scrollBehavior: TopAppBarScrollBehavior,
220-
modifier: Modifier = Modifier
221+
modifier: Modifier = Modifier,
221222
) {
222223
TopAppBar(
223224
title = {
@@ -265,7 +266,7 @@ fun FavouritesContent(
265266
onUpdateCoinSort: (CoinSort) -> Unit,
266267
gridState: LazyGridState,
267268
listState: LazyListState,
268-
modifier: Modifier = Modifier
269+
modifier: Modifier = Modifier,
269270
) {
270271
CompositionLocalProvider(LocalOverscrollConfiguration provides null) {
271272
when {
@@ -305,26 +306,22 @@ fun FavouritesGrid(
305306
coinSort: CoinSort,
306307
onUpdateCoinSort: (CoinSort) -> Unit,
307308
gridState: LazyGridState,
308-
modifier: Modifier = Modifier
309+
modifier: Modifier = Modifier,
309310
) {
310311
LazyVerticalGrid(
311312
state = gridState,
312313
columns = GridCells.Adaptive(minSize = 140.dp),
313314
horizontalArrangement = Arrangement.spacedBy(16.dp),
314315
verticalArrangement = Arrangement.spacedBy(16.dp),
315316
contentPadding = PaddingValues(start = 12.dp, end = 12.dp, bottom = 80.dp),
316-
modifier = modifier
317-
.fillMaxHeight()
318-
.offset(y = (-8).dp)
317+
modifier = modifier.fillMaxHeight()
319318
) {
320319
item(
321320
span = { GridItemSpan(maxLineSpan) },
322321
) {
323322
Row(
324323
horizontalArrangement = Arrangement.spacedBy(8.dp),
325-
modifier = Modifier
326-
.horizontalScroll(rememberScrollState())
327-
.offset(y = 8.dp)
324+
modifier = Modifier.horizontalScroll(rememberScrollState())
328325
) {
329326
CoinSort.entries.forEach { coinSortEntry ->
330327
CoinSortChip(
@@ -357,7 +354,7 @@ fun FavouritesList(
357354
coinSort: CoinSort,
358355
onUpdateCoinSort: (CoinSort) -> Unit,
359356
listState: LazyListState,
360-
modifier: Modifier = Modifier
357+
modifier: Modifier = Modifier,
361358
) {
362359
LazyColumn(
363360
state = listState,
@@ -415,7 +412,7 @@ fun FavouritesList(
415412
@Composable
416413
@Preview(showBackground = true)
417414
private fun FavouritesScreenPreview(
418-
@PreviewParameter(FavouritesUiStatePreviewProvider::class) uiState: FavouritesUiState
415+
@PreviewParameter(FavouritesUiStatePreviewProvider::class) uiState: FavouritesUiState,
419416
) {
420417
AppTheme {
421418
FavouriteScreen(

0 commit comments

Comments
 (0)