Skip to content

Commit f0c98dc

Browse files
committed
[BOOK-273] fix: 문장 스캔, 감상평 가이드 키보드에 가려지는 문제 해결
1 parent 6335da8 commit f0c98dc

File tree

2 files changed

+37
-22
lines changed

2 files changed

+37
-22
lines changed

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.ninecraft.booket.feature.record.step
22

33
import androidx.compose.foundation.background
44
import androidx.compose.foundation.layout.Arrangement
5-
import androidx.compose.foundation.layout.Box
65
import androidx.compose.foundation.layout.Column
76
import androidx.compose.foundation.layout.Row
87
import androidx.compose.foundation.layout.Spacer
@@ -11,6 +10,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
1110
import androidx.compose.foundation.layout.height
1211
import androidx.compose.foundation.layout.imePadding
1312
import androidx.compose.foundation.layout.padding
13+
import androidx.compose.foundation.relocation.BringIntoViewRequester
14+
import androidx.compose.foundation.relocation.bringIntoViewRequester
1415
import androidx.compose.foundation.rememberScrollState
1516
import androidx.compose.foundation.text.KeyboardOptions
1617
import androidx.compose.foundation.verticalScroll
@@ -51,6 +52,7 @@ import com.ninecraft.booket.feature.record.component.CustomTooltipBox
5152
import com.ninecraft.booket.feature.record.component.ImpressionGuideBottomSheet
5253
import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent
5354
import com.ninecraft.booket.feature.record.register.RecordRegisterUiState
55+
import kotlinx.coroutines.delay
5456
import kotlinx.coroutines.launch
5557
import tech.thdev.compose.extensions.keyboard.state.foundation.rememberKeyboardVisible
5658
import com.ninecraft.booket.core.designsystem.R as designR
@@ -66,12 +68,14 @@ fun ImpressionStep(
6668
val focusRequester = remember { FocusRequester() }
6769
val keyboardController = LocalSoftwareKeyboardController.current
6870
val scrollState = rememberScrollState()
71+
val bringIntoViewRequester = remember { BringIntoViewRequester() }
6972
val keyboardState by rememberKeyboardVisible()
70-
var isSentenceTextFieldFocused by remember { mutableStateOf(false) }
73+
var isImpressionTextFieldFocused by remember { mutableStateOf(false) }
7174

72-
LaunchedEffect(keyboardState, isSentenceTextFieldFocused) {
73-
if (keyboardState && isSentenceTextFieldFocused) {
74-
scrollState.animateScrollTo(scrollState.maxValue)
75+
LaunchedEffect(keyboardState, isImpressionTextFieldFocused) {
76+
if (keyboardState && isImpressionTextFieldFocused) {
77+
delay(100)
78+
bringIntoViewRequester.bringIntoView()
7579
}
7680
}
7781

@@ -82,17 +86,18 @@ fun ImpressionStep(
8286
}
8387
}
8488

85-
Box(
89+
Column(
8690
modifier = modifier
8791
.fillMaxSize()
8892
.background(White)
8993
.imePadding(),
9094
) {
9195
Column(
9296
modifier = Modifier
93-
.fillMaxSize()
97+
.fillMaxWidth()
98+
.weight(1f)
9499
.padding(horizontal = ReedTheme.spacing.spacing5)
95-
.padding(bottom = 80.dp)
100+
.padding(bottom = 12.dp)
96101
.verticalScroll(scrollState),
97102
) {
98103
Text(
@@ -115,7 +120,7 @@ fun ImpressionStep(
115120
.focusRequester(focusRequester)
116121
.height(140.dp)
117122
.onFocusChanged { focusState ->
118-
isSentenceTextFieldFocused = focusState.isFocused
123+
isImpressionTextFieldFocused = focusState.isFocused
119124
},
120125
keyboardOptions = KeyboardOptions(
121126
keyboardType = KeyboardType.Text,
@@ -124,7 +129,9 @@ fun ImpressionStep(
124129
)
125130
Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing3))
126131
Row(
127-
modifier = Modifier.fillMaxWidth(),
132+
modifier = Modifier
133+
.fillMaxWidth()
134+
.bringIntoViewRequester(bringIntoViewRequester),
128135
horizontalArrangement = Arrangement.End,
129136
verticalAlignment = Alignment.CenterVertically,
130137
) {
@@ -159,9 +166,10 @@ fun ImpressionStep(
159166
sizeStyle = largeButtonStyle,
160167
modifier = Modifier
161168
.fillMaxWidth()
162-
.align(Alignment.BottomCenter)
163-
.padding(horizontal = ReedTheme.spacing.spacing5)
164-
.padding(bottom = ReedTheme.spacing.spacing4),
169+
.padding(
170+
horizontal = ReedTheme.spacing.spacing5,
171+
vertical = ReedTheme.spacing.spacing4,
172+
),
165173
enabled = state.isNextButtonEnabled,
166174
text = stringResource(R.string.record_next_button),
167175
multipleEventsCutterEnabled = state.currentStep == RecordStep.IMPRESSION,

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.ninecraft.booket.feature.record.step
22

33
import androidx.compose.foundation.background
44
import androidx.compose.foundation.layout.Arrangement
5-
import androidx.compose.foundation.layout.Box
65
import androidx.compose.foundation.layout.Column
76
import androidx.compose.foundation.layout.Row
87
import androidx.compose.foundation.layout.Spacer
@@ -11,6 +10,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
1110
import androidx.compose.foundation.layout.height
1211
import androidx.compose.foundation.layout.imePadding
1312
import androidx.compose.foundation.layout.padding
13+
import androidx.compose.foundation.relocation.BringIntoViewRequester
14+
import androidx.compose.foundation.relocation.bringIntoViewRequester
1415
import androidx.compose.foundation.rememberScrollState
1516
import androidx.compose.foundation.text.KeyboardOptions
1617
import androidx.compose.foundation.text.input.TextFieldLineLimits
@@ -48,6 +49,7 @@ import com.ninecraft.booket.feature.record.R
4849
import com.ninecraft.booket.feature.record.component.CustomTooltipBox
4950
import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent
5051
import com.ninecraft.booket.feature.record.register.RecordRegisterUiState
52+
import kotlinx.coroutines.delay
5153
import tech.thdev.compose.extensions.keyboard.state.foundation.rememberKeyboardVisible
5254
import com.ninecraft.booket.core.designsystem.R as designR
5355

@@ -58,26 +60,28 @@ internal fun QuoteStep(
5860
) {
5961
val focusManager = LocalFocusManager.current
6062
val scrollState = rememberScrollState()
63+
val bringIntoViewRequester = remember { BringIntoViewRequester() }
6164
val keyboardState by rememberKeyboardVisible()
6265
var isSentenceTextFieldFocused by remember { mutableStateOf(false) }
6366

6467
LaunchedEffect(keyboardState, isSentenceTextFieldFocused) {
6568
if (keyboardState && isSentenceTextFieldFocused) {
66-
scrollState.animateScrollTo(scrollState.maxValue)
69+
delay(100)
70+
bringIntoViewRequester.bringIntoView()
6771
}
6872
}
6973

70-
Box(
74+
Column(
7175
modifier = modifier
7276
.fillMaxSize()
7377
.background(White)
7478
.imePadding(),
7579
) {
7680
Column(
7781
modifier = Modifier
78-
.fillMaxSize()
82+
.fillMaxWidth()
83+
.weight(1f)
7984
.padding(horizontal = ReedTheme.spacing.spacing5)
80-
.padding(bottom = 80.dp)
8185
.verticalScroll(scrollState),
8286
) {
8387
Text(
@@ -133,7 +137,9 @@ internal fun QuoteStep(
133137
)
134138
Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing3))
135139
Row(
136-
modifier = Modifier.fillMaxWidth(),
140+
modifier = Modifier
141+
.fillMaxWidth()
142+
.bringIntoViewRequester(bringIntoViewRequester),
137143
horizontalArrangement = Arrangement.End,
138144
verticalAlignment = Alignment.CenterVertically,
139145
) {
@@ -166,9 +172,10 @@ internal fun QuoteStep(
166172
sizeStyle = largeButtonStyle,
167173
modifier = Modifier
168174
.fillMaxWidth()
169-
.align(Alignment.BottomCenter)
170-
.padding(horizontal = ReedTheme.spacing.spacing5)
171-
.padding(bottom = ReedTheme.spacing.spacing4),
175+
.padding(
176+
horizontal = ReedTheme.spacing.spacing5,
177+
vertical = ReedTheme.spacing.spacing4,
178+
),
172179
enabled = state.isNextButtonEnabled,
173180
text = stringResource(R.string.record_next_button),
174181
multipleEventsCutterEnabled = state.currentStep == RecordStep.IMPRESSION,

0 commit comments

Comments
 (0)