@@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.Column
55import androidx.compose.foundation.layout.Row
66import androidx.compose.foundation.layout.Spacer
77import androidx.compose.foundation.layout.fillMaxSize
8+ import androidx.compose.foundation.layout.fillMaxWidth
89import androidx.compose.foundation.layout.height
910import androidx.compose.foundation.layout.imePadding
1011import androidx.compose.foundation.layout.padding
@@ -16,17 +17,22 @@ import androidx.compose.ui.Alignment
1617import androidx.compose.ui.Modifier
1718import androidx.compose.ui.platform.testTag
1819import androidx.compose.ui.res.stringResource
20+ import androidx.compose.ui.tooling.preview.Devices.NEXUS_5
1921import androidx.compose.ui.tooling.preview.Preview
2022import androidx.compose.ui.unit.dp
2123import androidx.lifecycle.compose.collectAsStateWithLifecycle
24+ import okhttp3.internal.toLongOrDefault
2225import to.bitkit.R
26+ import to.bitkit.models.PrimaryDisplay
2327import to.bitkit.ui.LocalCurrencies
24- import to.bitkit.ui.components.AmountInput
28+ import to.bitkit.ui.components.AmountInputHandler
2529import to.bitkit.ui.components.Display
2630import to.bitkit.ui.components.FillHeight
2731import to.bitkit.ui.components.FillWidth
32+ import to.bitkit.ui.components.Keyboard
2833import to.bitkit.ui.components.MoneySSB
2934import to.bitkit.ui.components.NumberPadActionButton
35+ import to.bitkit.ui.components.NumberPadTextField
3036import to.bitkit.ui.components.PrimaryButton
3137import to.bitkit.ui.components.Text13Up
3238import to.bitkit.ui.components.UnitButton
@@ -68,6 +74,17 @@ fun SpendingAmountScreen(
6874 }
6975 }
7076
77+ AmountInputHandler (
78+ input = uiState.input,
79+ overrideSats = uiState.overrideSats,
80+ primaryDisplay = currencies.primaryDisplay,
81+ displayUnit = currencies.displayUnit,
82+ onInputChanged = viewModel::onInputChanged,
83+ onAmountCalculated = { sats ->
84+ viewModel.handleCalculatedAmount(sats.toLongOrDefault(0 ))
85+ },
86+ )
87+
7188 Content (
7289 uiState = uiState,
7390 currencies = currencies,
@@ -76,7 +93,7 @@ fun SpendingAmountScreen(
7693 onClickQuarter = viewModel::onClickQuarter,
7794 onClickMaxAmount = viewModel::onClickMaxAmount,
7895 onConfirmAmount = viewModel::onConfirmAmount,
79- onAmountChanged = viewModel::onAmountChanged
96+ onInputChange = viewModel::onInputChanged,
8097 )
8198}
8299
@@ -89,7 +106,7 @@ private fun Content(
89106 onClickQuarter : () -> Unit ,
90107 onClickMaxAmount : () -> Unit ,
91108 onConfirmAmount : () -> Unit ,
92- onAmountChanged : (Long ) -> Unit ,
109+ onInputChange : (String ) -> Unit ,
93110) {
94111 ScreenColumn {
95112 AppTopBar (
@@ -104,34 +121,39 @@ private fun Content(
104121 .imePadding()
105122 .testTag(" SpendingAmount" )
106123 ) {
107- VerticalSpacer (32 .dp)
124+ VerticalSpacer (16 .dp)
108125 Display (
109126 text = stringResource(R .string.lightning__spending_amount__title)
110127 .withAccent(accentColor = Colors .Purple )
111128 )
112- VerticalSpacer (32 .dp)
113129
114- AmountInput (
130+ NumberPadTextField (
131+ input = uiState.input,
132+ displayUnit = currencies.displayUnit,
133+ showSecondaryField = false ,
115134 primaryDisplay = currencies.primaryDisplay,
116- overrideSats = uiState.overrideSats,
117- onSatsChange = onAmountChanged,
135+ modifier = Modifier
136+ .fillMaxWidth()
137+ .testTag(" SpendingAmountNumberField" )
118138 )
119139
120140 FillHeight ()
121141
122- // Actions
123142 Row (
124143 verticalAlignment = Alignment .Bottom ,
125144 horizontalArrangement = Arrangement .spacedBy(8 .dp),
126- modifier = Modifier .padding(vertical = 8 .dp)
145+ modifier = Modifier
146+ .padding(vertical = 8 .dp)
147+ .testTag(" SendAmountNumberPad" )
127148 ) {
128149 Column {
129150 Text13Up (
130151 text = stringResource(R .string.wallet__send_available),
131152 color = Colors .White64 ,
153+ modifier = Modifier .testTag(" SpendingAmountAvailable" )
132154 )
133155 Spacer (modifier = Modifier .height(8 .dp))
134- MoneySSB (sats = uiState.balanceAfterFee)
156+ MoneySSB (sats = uiState.balanceAfterFee, modifier = Modifier .testTag( " SpendingAmountUnit " ) )
135157 }
136158 FillWidth ()
137159 UnitButton (color = Colors .Purple )
@@ -151,8 +173,23 @@ private fun Content(
151173 )
152174 }
153175 HorizontalDivider ()
176+
154177 VerticalSpacer (16 .dp)
155178
179+ Keyboard (
180+ onClick = { number ->
181+ onInputChange(if (uiState.input == " 0" ) number else uiState.input + number)
182+ },
183+ onClickBackspace = {
184+ onInputChange(if (uiState.input.length > 1 ) uiState.input.dropLast(1 ) else " 0" )
185+ },
186+ isDecimal = currencies.primaryDisplay == PrimaryDisplay .FIAT ,
187+ modifier = Modifier
188+ .fillMaxWidth()
189+ )
190+
191+ VerticalSpacer (8 .dp)
192+
156193 PrimaryButton (
157194 text = stringResource(R .string.common__continue),
158195 onClick = onConfirmAmount,
@@ -171,14 +208,31 @@ private fun Content(
171208private fun Preview () {
172209 AppThemeSurface {
173210 Content (
174- uiState = TransferToSpendingUiState (),
211+ uiState = TransferToSpendingUiState (input = " 5 000" ),
212+ currencies = CurrencyUiState (),
213+ onBackClick = {},
214+ onCloseClick = {},
215+ onClickQuarter = {},
216+ onClickMaxAmount = {},
217+ onConfirmAmount = {},
218+ onInputChange = {},
219+ )
220+ }
221+ }
222+
223+ @Preview(showBackground = true , device = NEXUS_5 )
224+ @Composable
225+ private fun Preview2 () {
226+ AppThemeSurface {
227+ Content (
228+ uiState = TransferToSpendingUiState (input = " 5 000" ),
175229 currencies = CurrencyUiState (),
176230 onBackClick = {},
177231 onCloseClick = {},
178232 onClickQuarter = {},
179233 onClickMaxAmount = {},
180234 onConfirmAmount = {},
181- onAmountChanged = {},
235+ onInputChange = {},
182236 )
183237 }
184238}
0 commit comments