Skip to content

Commit f247556

Browse files
authored
Merge pull request #710 from synonymdev/fix/calculator-preview-keyboard
fix: calculator preview keyboard overlap
2 parents 7e8d259 + a4832cb commit f247556

File tree

4 files changed

+96
-67
lines changed

4 files changed

+96
-67
lines changed

app/src/main/java/to/bitkit/ui/components/TextInput.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.foundation.text.KeyboardActions
88
import androidx.compose.foundation.text.KeyboardOptions
99
import androidx.compose.material3.Text
1010
import androidx.compose.material3.TextField
11+
import androidx.compose.material3.TextFieldColors
1112
import androidx.compose.runtime.Composable
1213
import androidx.compose.runtime.LaunchedEffect
1314
import androidx.compose.runtime.getValue
@@ -46,6 +47,7 @@ fun TextInput(
4647
supportingText: @Composable (() -> Unit)? = null,
4748
visualTransformation: VisualTransformation = VisualTransformation.None,
4849
textStyle: TextStyle = AppTextStyles.BodySSB,
50+
colors: TextFieldColors = AppTextFieldDefaults.semiTransparent,
4951
) {
5052
var textFieldValue by remember { mutableStateOf(TextFieldValue(value)) }
5153

@@ -75,7 +77,7 @@ fun TextInput(
7577
maxLines = maxLines,
7678
minLines = minLines,
7779
singleLine = singleLine,
78-
colors = AppTextFieldDefaults.semiTransparent,
80+
colors = colors,
7981
shape = AppShapes.small,
8082
keyboardOptions = keyboardOptions,
8183
keyboardActions = keyboardActions,

app/src/main/java/to/bitkit/ui/screens/widgets/calculator/CalculatorPreviewScreen.kt

Lines changed: 69 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package to.bitkit.ui.screens.widgets.calculator
22

3+
import androidx.compose.animation.AnimatedVisibility
4+
import androidx.compose.animation.expandVertically
5+
import androidx.compose.animation.shrinkVertically
36
import androidx.compose.foundation.layout.Arrangement
47
import androidx.compose.foundation.layout.Column
58
import androidx.compose.foundation.layout.Row
6-
import androidx.compose.foundation.layout.Spacer
79
import androidx.compose.foundation.layout.fillMaxWidth
8-
import androidx.compose.foundation.layout.height
10+
import androidx.compose.foundation.layout.imePadding
911
import androidx.compose.foundation.layout.padding
1012
import androidx.compose.foundation.layout.size
1113
import androidx.compose.foundation.layout.width
@@ -26,16 +28,19 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
2628
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2729
import to.bitkit.R
2830
import to.bitkit.ui.components.BodyM
31+
import to.bitkit.ui.components.FillHeight
2932
import to.bitkit.ui.components.Headline
3033
import to.bitkit.ui.components.PrimaryButton
3134
import to.bitkit.ui.components.SecondaryButton
3235
import to.bitkit.ui.components.Text13Up
36+
import to.bitkit.ui.components.VerticalSpacer
3337
import to.bitkit.ui.scaffold.AppTopBar
3438
import to.bitkit.ui.scaffold.DrawerNavIcon
35-
import to.bitkit.ui.scaffold.ScreenColumn
3639
import to.bitkit.ui.screens.widgets.calculator.components.CalculatorCard
40+
import to.bitkit.ui.shared.util.screen
3741
import to.bitkit.ui.theme.AppThemeSurface
3842
import to.bitkit.ui.theme.Colors
43+
import to.bitkit.ui.utils.keyboardAsState
3944
import to.bitkit.viewmodels.CurrencyViewModel
4045

4146
@Composable
@@ -73,8 +78,12 @@ fun CalculatorPreviewContent(
7378
currencyViewModel: CurrencyViewModel?,
7479
isCalculatorWidgetEnabled: Boolean,
7580
) {
76-
ScreenColumn(
77-
modifier = Modifier.testTag("facts_preview_screen")
81+
val isKeyboardVisible by keyboardAsState()
82+
83+
Column(
84+
modifier = Modifier
85+
.screen()
86+
.testTag("facts_preview_screen")
7887
) {
7988
AppTopBar(
8089
titleText = stringResource(R.string.widgets__widget__nav_title),
@@ -84,47 +93,58 @@ fun CalculatorPreviewContent(
8493

8594
Column(
8695
modifier = Modifier
96+
.imePadding()
8797
.padding(horizontal = 16.dp)
8898
.testTag("main_content")
8999
) {
90-
Spacer(modifier = Modifier.height(26.dp))
91-
92-
Row(
93-
modifier = Modifier
94-
.fillMaxWidth()
95-
.testTag("header_row"),
96-
verticalAlignment = Alignment.CenterVertically,
97-
horizontalArrangement = Arrangement.SpaceBetween
100+
AnimatedVisibility(
101+
visible = !isKeyboardVisible,
102+
enter = expandVertically(),
103+
exit = shrinkVertically(),
98104
) {
99-
Headline(
100-
text = AnnotatedString(stringResource(R.string.widgets__calculator__name)),
101-
modifier = Modifier
102-
.width(200.dp)
103-
.testTag("widget_title")
104-
)
105-
Icon(
106-
painter = painterResource(R.drawable.widget_math_operation),
107-
contentDescription = null,
108-
tint = Color.Unspecified,
109-
modifier = Modifier
110-
.size(64.dp)
111-
.testTag("widget_icon")
112-
)
113-
}
105+
Column {
106+
VerticalSpacer(26.dp)
114107

115-
BodyM(
116-
text = stringResource(R.string.widgets__facts__description),
117-
color = Colors.White64,
118-
modifier = Modifier
119-
.padding(vertical = 16.dp)
120-
.testTag("widget_description")
121-
)
108+
Row(
109+
verticalAlignment = Alignment.CenterVertically,
110+
horizontalArrangement = Arrangement.SpaceBetween,
111+
modifier = Modifier
112+
.fillMaxWidth()
113+
.testTag("header_row")
114+
) {
115+
Headline(
116+
text = AnnotatedString(stringResource(R.string.widgets__calculator__name)),
117+
modifier = Modifier
118+
.width(200.dp)
119+
.testTag("widget_title")
120+
)
121+
Icon(
122+
painter = painterResource(R.drawable.widget_math_operation),
123+
contentDescription = null,
124+
tint = Color.Unspecified,
125+
modifier = Modifier
126+
.size(64.dp)
127+
.testTag("widget_icon")
128+
)
129+
}
122130

123-
HorizontalDivider(
124-
modifier = Modifier.testTag("divider")
125-
)
131+
BodyM(
132+
text = stringResource(R.string.widgets__facts__description),
133+
color = Colors.White64,
134+
modifier = Modifier
135+
.padding(vertical = 16.dp)
136+
.testTag("widget_description")
137+
)
126138

127-
Spacer(modifier = Modifier.weight(1f))
139+
HorizontalDivider(
140+
modifier = Modifier.testTag("divider")
141+
)
142+
}
143+
}
144+
145+
if (!isKeyboardVisible) {
146+
FillHeight()
147+
}
128148

129149
Text13Up(
130150
stringResource(R.string.common__preview),
@@ -136,37 +156,37 @@ fun CalculatorPreviewContent(
136156

137157
currencyViewModel?.let {
138158
CalculatorCard(
139-
modifier = Modifier.fillMaxWidth(),
140159
showWidgetTitle = showWidgetTitles,
141-
currencyViewModel = it
160+
currencyViewModel = it,
161+
modifier = Modifier.fillMaxWidth()
142162
)
143163
}
144164

145165
Row(
166+
horizontalArrangement = Arrangement.spacedBy(16.dp),
146167
modifier = Modifier
147168
.padding(vertical = 21.dp)
148169
.fillMaxWidth()
149-
.testTag("buttons_row"),
150-
horizontalArrangement = Arrangement.spacedBy(16.dp)
170+
.testTag("buttons_row")
151171
) {
152172
if (isCalculatorWidgetEnabled) {
153173
SecondaryButton(
154174
text = stringResource(R.string.common__delete),
175+
fullWidth = false,
176+
onClick = onClickDelete,
155177
modifier = Modifier
156178
.weight(1f)
157-
.testTag("WidgetDelete"),
158-
fullWidth = false,
159-
onClick = onClickDelete
179+
.testTag("WidgetDelete")
160180
)
161181
}
162182

163183
PrimaryButton(
164184
text = stringResource(R.string.common__save),
185+
fullWidth = false,
186+
onClick = onClickSave,
165187
modifier = Modifier
166188
.weight(1f)
167-
.testTag("WidgetSave"),
168-
fullWidth = false,
169-
onClick = onClickSave
189+
.testTag("WidgetSave")
170190
)
171191
}
172192
}

app/src/main/java/to/bitkit/ui/screens/widgets/calculator/components/CalculatorCard.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ fun CalculatorCardContent(
101101
Box(
102102
modifier = modifier
103103
.clip(shape = MaterialTheme.shapes.medium)
104-
.background(Colors.White10)
104+
.background(Colors.Gray6)
105105
) {
106106
Column(
107107
modifier = Modifier
@@ -129,14 +129,14 @@ fun CalculatorCardContent(
129129

130130
// Fiat input with decimal transformation
131131
CalculatorInput(
132-
modifier = Modifier
133-
.fillMaxWidth()
134-
.onFocusChanged { focusState -> if (focusState.hasFocus) onFiatChange("") },
135132
value = fiatValue,
136133
onValueChange = onFiatChange,
137134
currencySymbol = fiatSymbol,
138135
currencyName = fiatName,
139-
visualTransformation = MonetaryVisualTransformation(decimalPlaces = 2)
136+
visualTransformation = MonetaryVisualTransformation(decimalPlaces = 2),
137+
modifier = Modifier
138+
.fillMaxWidth()
139+
.onFocusChanged { focusState -> if (focusState.hasFocus) onFiatChange("") }
140140
)
141141
}
142142
}

app/src/main/java/to/bitkit/ui/screens/widgets/calculator/components/CalculatorInput.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.ui.unit.dp
2020
import to.bitkit.ui.components.BodyMSB
2121
import to.bitkit.ui.components.CaptionB
2222
import to.bitkit.ui.components.TextInput
23+
import to.bitkit.ui.theme.AppTextFieldDefaults
2324
import to.bitkit.ui.theme.AppThemeSurface
2425
import to.bitkit.ui.theme.Colors
2526

@@ -30,18 +31,18 @@ fun CalculatorInput(
3031
currencySymbol: String,
3132
currencyName: String,
3233
modifier: Modifier = Modifier,
33-
visualTransformation: VisualTransformation = VisualTransformation.None
34+
visualTransformation: VisualTransformation = VisualTransformation.None,
3435
) {
3536
TextInput(
3637
value = value,
3738
singleLine = true,
3839
onValueChange = onValueChange,
3940
leadingIcon = {
4041
Box(
42+
contentAlignment = Alignment.Center,
4143
modifier = Modifier
42-
.background(color = Colors.White10, shape = CircleShape)
43-
.size(32.dp),
44-
contentAlignment = Alignment.Center
44+
.background(color = Colors.Gray6, shape = CircleShape)
45+
.size(32.dp)
4546
) {
4647
BodyMSB(currencySymbol, color = Colors.Brand)
4748
}
@@ -50,8 +51,12 @@ fun CalculatorInput(
5051
keyboardType = KeyboardType.Number
5152
),
5253
suffix = { CaptionB(currencyName.uppercase(), color = Colors.Gray1) },
53-
modifier = modifier,
54-
visualTransformation = visualTransformation
54+
colors = AppTextFieldDefaults.noIndicatorColors.copy(
55+
focusedContainerColor = Colors.Black,
56+
unfocusedContainerColor = Colors.Black
57+
),
58+
visualTransformation = visualTransformation,
59+
modifier = modifier
5560
)
5661
}
5762

@@ -60,22 +65,24 @@ fun CalculatorInput(
6065
private fun Preview() {
6166
AppThemeSurface {
6267
Column(
63-
modifier = Modifier.fillMaxSize().padding(16.dp),
64-
verticalArrangement = Arrangement.spacedBy(16.dp)
68+
verticalArrangement = Arrangement.spacedBy(16.dp),
69+
modifier = Modifier
70+
.fillMaxSize()
71+
.padding(16.dp)
6572
) {
6673
CalculatorInput(
67-
modifier = Modifier.fillMaxWidth(),
6874
value = "100000",
6975
onValueChange = {},
7076
currencySymbol = "",
71-
currencyName = "BITCOIN"
77+
currencyName = "BITCOIN",
78+
modifier = Modifier.fillMaxWidth()
7279
)
7380
CalculatorInput(
74-
modifier = Modifier.fillMaxWidth(),
7581
value = "4.55",
7682
onValueChange = {},
7783
currencySymbol = "$",
78-
currencyName = "USD"
84+
currencyName = "USD",
85+
modifier = Modifier.fillMaxWidth()
7986
)
8087
}
8188
}

0 commit comments

Comments
 (0)