11package 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
36import androidx.compose.foundation.layout.Arrangement
47import androidx.compose.foundation.layout.Column
58import androidx.compose.foundation.layout.Row
6- import androidx.compose.foundation.layout.Spacer
79import androidx.compose.foundation.layout.fillMaxWidth
8- import androidx.compose.foundation.layout.height
10+ import androidx.compose.foundation.layout.imePadding
911import androidx.compose.foundation.layout.padding
1012import androidx.compose.foundation.layout.size
1113import androidx.compose.foundation.layout.width
@@ -26,16 +28,19 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
2628import androidx.lifecycle.compose.collectAsStateWithLifecycle
2729import to.bitkit.R
2830import to.bitkit.ui.components.BodyM
31+ import to.bitkit.ui.components.FillHeight
2932import to.bitkit.ui.components.Headline
3033import to.bitkit.ui.components.PrimaryButton
3134import to.bitkit.ui.components.SecondaryButton
3235import to.bitkit.ui.components.Text13Up
36+ import to.bitkit.ui.components.VerticalSpacer
3337import to.bitkit.ui.scaffold.AppTopBar
3438import to.bitkit.ui.scaffold.DrawerNavIcon
35- import to.bitkit.ui.scaffold.ScreenColumn
3639import to.bitkit.ui.screens.widgets.calculator.components.CalculatorCard
40+ import to.bitkit.ui.shared.util.screen
3741import to.bitkit.ui.theme.AppThemeSurface
3842import to.bitkit.ui.theme.Colors
43+ import to.bitkit.ui.utils.keyboardAsState
3944import 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 }
0 commit comments