Skip to content

Commit bf6dc12

Browse files
authored
Merge pull request #112 from YAPP-Github/BOOK-192-fix/#83
fix: Android 15 버전 이상에서 SystemBar Color 적용 안되는 문제 해결
2 parents b430c06 + 0bc1c49 commit bf6dc12

5 files changed

Lines changed: 74 additions & 39 deletions

File tree

feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
1212
import androidx.compose.foundation.layout.height
1313
import androidx.compose.foundation.layout.padding
1414
import androidx.compose.foundation.layout.size
15+
import androidx.compose.foundation.layout.statusBarsPadding
1516
import androidx.compose.foundation.pager.HorizontalPager
1617
import androidx.compose.foundation.pager.rememberPagerState
1718
import androidx.compose.foundation.shape.CircleShape
@@ -41,8 +42,6 @@ internal fun HomeUi(
4142
state: HomeUiState,
4243
modifier: Modifier = Modifier,
4344
) {
44-
HandleHomeSideEffects(state = state)
45-
4645
// TODO: Android 15에서 statusBar 색상 적용 안되는 문제 있음. 해결 예정.
4746
val systemUiController = rememberSystemUiController()
4847

@@ -59,20 +58,23 @@ internal fun HomeUi(
5958
}
6059
}
6160

61+
HandleHomeSideEffects(state = state)
62+
6263
Column(
63-
modifier = modifier.fillMaxSize(),
64+
modifier = modifier
65+
.fillMaxSize()
66+
.background(HomeBg)
67+
.statusBarsPadding(),
6468
) {
6569
HomeHeader(
6670
onSettingsClick = {
6771
state.eventSink(HomeUiEvent.OnSettingsClick)
6872
},
69-
modifier = modifier,
7073
)
7174
HomeBanner(
7275
onBookRegisterClick = {
7376
state.eventSink(HomeUiEvent.OnBookRegisterClick)
7477
},
75-
modifier = modifier,
7678
)
7779
HomeContent(
7880
state = state,

feature/library/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,7 @@ ksp {
1717
dependencies {
1818
implementations(
1919
libs.logger,
20+
21+
libs.compose.system.ui.controller,
2022
)
2123
}

feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import androidx.compose.foundation.layout.Spacer
88
import androidx.compose.foundation.layout.fillMaxSize
99
import androidx.compose.foundation.layout.fillMaxWidth
1010
import androidx.compose.foundation.layout.height
11+
import androidx.compose.foundation.layout.statusBarsPadding
1112
import androidx.compose.foundation.lazy.items
1213
import androidx.compose.material3.CircularProgressIndicator
1314
import androidx.compose.material3.Text
1415
import androidx.compose.runtime.Composable
16+
import androidx.compose.runtime.DisposableEffect
1517
import androidx.compose.ui.Alignment
1618
import androidx.compose.ui.Modifier
1719
import androidx.compose.ui.res.stringResource
@@ -21,6 +23,7 @@ import com.ninecraft.booket.core.designsystem.component.button.ReedButton
2123
import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle
2224
import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle
2325
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
26+
import com.ninecraft.booket.core.designsystem.theme.White
2427
import com.ninecraft.booket.core.model.LibraryBookSummaryModel
2528
import com.ninecraft.booket.core.ui.component.InfinityLazyColumn
2629
import com.ninecraft.booket.core.ui.component.LoadStateFooter
@@ -31,21 +34,44 @@ import com.ninecraft.booket.feature.screens.LibraryScreen
3134
import com.slack.circuit.codegen.annotations.CircuitInject
3235
import dagger.hilt.android.components.ActivityRetainedComponent
3336
import kotlinx.collections.immutable.persistentListOf
37+
import tech.thdev.compose.exteions.system.ui.controller.rememberSystemUiController
3438

3539
@CircuitInject(LibraryScreen::class, ActivityRetainedComponent::class)
3640
@Composable
3741
internal fun LibraryUi(
3842
state: LibraryUiState,
3943
modifier: Modifier = Modifier,
4044
) {
45+
// TODO: Android 15에서 statusBar 색상 적용 안되는 문제 있음. 해결 예정.
46+
val systemUiController = rememberSystemUiController()
47+
48+
DisposableEffect(systemUiController) {
49+
systemUiController.setStatusBarColor(
50+
color = White,
51+
darkIcons = true,
52+
)
53+
onDispose {}
54+
}
55+
4156
HandleLibrarySideEffects(
4257
state = state,
4358
eventSink = state.eventSink,
4459
)
4560

4661
Column(
47-
modifier = modifier.fillMaxSize(),
62+
modifier = modifier
63+
.fillMaxSize()
64+
.statusBarsPadding(),
4865
) {
66+
LibraryHeader(
67+
onSearchClick = {
68+
state.eventSink(LibraryUiEvent.OnLibrarySearchClick)
69+
},
70+
onSettingClick = {
71+
state.eventSink(LibraryUiEvent.OnSettingsClick)
72+
},
73+
)
74+
4975
LibraryContent(
5076
state = state,
5177
modifier = modifier,
@@ -63,14 +89,6 @@ internal fun LibraryContent(
6389
horizontalAlignment = Alignment.CenterHorizontally,
6490
verticalArrangement = Arrangement.Center,
6591
) {
66-
LibraryHeader(
67-
onSearchClick = {
68-
state.eventSink(LibraryUiEvent.OnLibrarySearchClick)
69-
},
70-
onSettingClick = {
71-
state.eventSink(LibraryUiEvent.OnSettingsClick)
72-
},
73-
)
7492
FilterChipGroup(
7593
filterList = state.filterChips,
7694
selectedChipOption = state.currentFilter,

feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/bottomnavigation/BottomNavigation.kt renamed to feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/bottomnavigation/BottomNavigationUi.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.ninecraft.booket.feature.main.bottomnavigation
22

3+
import androidx.compose.foundation.layout.WindowInsets
34
import androidx.compose.foundation.layout.fillMaxSize
45
import androidx.compose.foundation.layout.padding
56
import androidx.compose.runtime.Composable
67
import androidx.compose.ui.Modifier
8+
import androidx.compose.ui.unit.dp
79
import com.ninecraft.booket.core.ui.ReedScaffold
810
import com.ninecraft.booket.feature.main.component.MainBottomBar
911
import com.ninecraft.booket.feature.main.component.MainTab
@@ -15,7 +17,7 @@ import kotlinx.collections.immutable.toImmutableList
1517

1618
@CircuitInject(BottomNavigationScreen::class, ActivityRetainedComponent::class)
1719
@Composable
18-
fun BottomNavigation(
20+
fun BottomNavigationUi(
1921
state: BottomNavigationUiState,
2022
modifier: Modifier = Modifier,
2123
) {
@@ -30,6 +32,7 @@ fun BottomNavigation(
3032
},
3133
)
3234
},
35+
contentWindowInsets = WindowInsets(top = 0.dp),
3336
) { innerPadding ->
3437
NavigableCircuitContent(
3538
navigator = state.navigator,

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUi.kt

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,21 @@ import androidx.compose.foundation.layout.Column
1919
import androidx.compose.foundation.layout.PaddingValues
2020
import androidx.compose.foundation.layout.Row
2121
import androidx.compose.foundation.layout.Spacer
22+
import androidx.compose.foundation.layout.WindowInsets
2223
import androidx.compose.foundation.layout.aspectRatio
2324
import androidx.compose.foundation.layout.fillMaxSize
2425
import androidx.compose.foundation.layout.fillMaxWidth
2526
import androidx.compose.foundation.layout.height
2627
import androidx.compose.foundation.layout.padding
2728
import androidx.compose.foundation.layout.size
29+
import androidx.compose.foundation.layout.systemBarsPadding
2830
import androidx.compose.foundation.layout.width
2931
import androidx.compose.foundation.lazy.LazyColumn
3032
import androidx.compose.foundation.shape.CircleShape
3133
import androidx.compose.material3.Button
3234
import androidx.compose.material3.ButtonDefaults
3335
import androidx.compose.material3.Icon
36+
import androidx.compose.material3.Scaffold
3437
import androidx.compose.material3.Text
3538
import androidx.compose.runtime.Composable
3639
import androidx.compose.runtime.DisposableEffect
@@ -57,7 +60,6 @@ import com.ninecraft.booket.core.designsystem.theme.ReedTheme
5760
import com.ninecraft.booket.core.designsystem.theme.White
5861
import com.ninecraft.booket.core.ui.component.ReedCloseTopAppBar
5962
import com.ninecraft.booket.core.ui.component.ReedDialog
60-
import com.ninecraft.booket.core.ui.component.ReedFullScreen
6163
import com.ninecraft.booket.feature.record.R
6264
import com.ninecraft.booket.feature.record.ocr.component.CameraFrame
6365
import com.ninecraft.booket.feature.record.ocr.component.SentenceBox
@@ -73,10 +75,16 @@ internal fun Ocr(
7375
state: OcrUiState,
7476
modifier: Modifier = Modifier,
7577
) {
76-
ReedFullScreen {
77-
when (state.currentUi) {
78-
OcrUi.CAMERA -> CameraPreview(state = state, modifier = modifier)
79-
OcrUi.RESULT -> TextScanResult(state = state, modifier = modifier)
78+
Scaffold(contentWindowInsets = WindowInsets(0.dp)) { innerPadding ->
79+
Box(
80+
modifier = modifier
81+
.fillMaxSize()
82+
.padding(innerPadding),
83+
) {
84+
when (state.currentUi) {
85+
OcrUi.CAMERA -> CameraPreview(state = state, modifier = modifier)
86+
OcrUi.RESULT -> TextScanResult(state = state, modifier = modifier)
87+
}
8088
}
8189
}
8290
}
@@ -120,6 +128,20 @@ private fun CameraPreview(
120128
val systemUiController = rememberSystemUiController()
121129
val isDarkTheme = isSystemInDarkTheme()
122130

131+
DisposableEffect(systemUiController) {
132+
systemUiController.setSystemBarsColor(
133+
color = Neutral950,
134+
isNavigationBarContrastEnforced = false,
135+
)
136+
onDispose {
137+
systemUiController.setSystemBarsColor(
138+
color = White,
139+
darkIcons = !isDarkTheme,
140+
isNavigationBarContrastEnforced = false,
141+
)
142+
}
143+
}
144+
123145
LaunchedEffect(Unit) {
124146
val granted = ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
125147
if (granted) {
@@ -141,27 +163,14 @@ private fun CameraPreview(
141163
}
142164
}
143165

144-
DisposableEffect(systemUiController) {
145-
systemUiController.setSystemBarsColor(
146-
color = Neutral950,
147-
isNavigationBarContrastEnforced = false,
148-
)
149-
onDispose {
150-
systemUiController.setSystemBarsColor(
151-
color = White,
152-
darkIcons = !isDarkTheme,
153-
isNavigationBarContrastEnforced = false,
154-
)
155-
}
156-
}
157-
158166
Box(
159-
modifier = modifier.fillMaxSize(),
167+
modifier = modifier
168+
.fillMaxSize()
169+
.background(Neutral950)
170+
.systemBarsPadding(),
160171
) {
161172
Column(
162-
modifier = Modifier
163-
.fillMaxSize()
164-
.background(Neutral950),
173+
modifier = Modifier.fillMaxSize(),
165174
horizontalAlignment = Alignment.CenterHorizontally,
166175
) {
167176
ReedCloseTopAppBar(
@@ -265,7 +274,8 @@ private fun TextScanResult(
265274
Column(
266275
modifier = modifier
267276
.fillMaxSize()
268-
.background(White),
277+
.background(White)
278+
.systemBarsPadding(),
269279
) {
270280
ReedCloseTopAppBar(
271281
title = stringResource(R.string.ocr_sentence_selection),

0 commit comments

Comments
 (0)