11package to.bitkit.ui.screens.wallets.receive
22
3+ import androidx.compose.foundation.layout.Arrangement
34import androidx.compose.foundation.layout.Column
5+ import androidx.compose.foundation.layout.Row
46import androidx.compose.foundation.layout.Spacer
57import androidx.compose.foundation.layout.defaultMinSize
68import androidx.compose.foundation.layout.fillMaxSize
79import androidx.compose.foundation.layout.fillMaxWidth
810import androidx.compose.foundation.layout.height
911import androidx.compose.foundation.layout.padding
12+ import androidx.compose.material3.HorizontalDivider
1013import androidx.compose.material3.MaterialTheme
1114import androidx.compose.material3.TextField
1215import androidx.compose.runtime.Composable
1316import androidx.compose.runtime.getValue
1417import androidx.compose.runtime.mutableStateOf
1518import androidx.compose.runtime.remember
1619import androidx.compose.runtime.setValue
20+ import androidx.compose.ui.Alignment
1721import androidx.compose.ui.Modifier
1822import androidx.compose.ui.platform.testTag
1923import androidx.compose.ui.res.stringResource
@@ -26,10 +30,14 @@ import to.bitkit.ui.LocalCurrencies
2630import to.bitkit.ui.components.AmountInputHandler
2731import to.bitkit.ui.components.BodySSB
2832import to.bitkit.ui.components.Caption13Up
33+ import to.bitkit.ui.components.Keyboard
2934import to.bitkit.ui.components.NumberPadTextField
3035import to.bitkit.ui.components.PrimaryButton
36+ import to.bitkit.ui.components.Text13Up
37+ import to.bitkit.ui.components.UnitButton
3138import to.bitkit.ui.currencyViewModel
3239import to.bitkit.ui.scaffold.SheetTopBar
40+ import to.bitkit.ui.shared.util.clickableAlpha
3341import to.bitkit.ui.shared.util.gradientBackground
3442import to.bitkit.ui.theme.AppTextFieldDefaults
3543import to.bitkit.ui.theme.AppThemeSurface
@@ -46,6 +54,7 @@ fun EditInvoiceScreen(
4654 val currencyVM = currencyViewModel ? : return
4755 var input: String by remember { mutableStateOf(" " ) }
4856 var noteText by remember { mutableStateOf(" " ) }
57+ var keyboardVisible by remember { mutableStateOf(false ) }
4958
5059 AmountInputHandler (
5160 input = input,
@@ -63,21 +72,26 @@ fun EditInvoiceScreen(
6372 displayUnit = currencyUiState.displayUnit,
6473 onEvent = onEvent,
6574 onBack = onBack,
66- onTextChanged = { newNote -> noteText = newNote }
75+ onTextChanged = { newNote -> noteText = newNote },
76+ keyboardVisible = keyboardVisible,
77+ onClickBalance = { keyboardVisible = ! keyboardVisible },
78+ onInputChanged = { newText -> }
6779 )
6880}
6981
7082@Composable
7183fun EditInvoiceContent (
7284 input : String ,
7385 noteText : String ,
86+ keyboardVisible : Boolean ,
7487 primaryDisplay : PrimaryDisplay ,
7588 displayUnit : BitcoinDisplayUnit ,
7689 onEvent : (SendEvent ) -> Unit ,
7790 onBack : () -> Unit ,
91+ onClickBalance : () -> Unit ,
7892 onTextChanged : (String ) -> Unit ,
93+ onInputChanged : (String ) -> Unit ,
7994) {
80- var keyboardVisible by remember { mutableStateOf(false ) }
8195
8296 Column (
8397 modifier = Modifier
@@ -100,39 +114,73 @@ fun EditInvoiceContent(
100114 primaryDisplay = primaryDisplay,
101115 modifier = Modifier
102116 .fillMaxWidth()
117+ .clickableAlpha(onClick = onClickBalance)
103118 .testTag(" amount_input_field" )
104119 )
105- Spacer (modifier = Modifier .height(44 .dp))
106-
107- Caption13Up (text = stringResource(R .string.wallet__note), color = Colors .White64 )
108-
109- Spacer (modifier = Modifier .height(16 .dp))
110-
111- TextField (
112- placeholder = {
113- BodySSB (
114- text = stringResource(R .string.wallet__receive_note_placeholder),
115- color = Colors .White64
116- )
117- },
118- value = noteText,
119- onValueChange = onTextChanged,
120- minLines = 4 ,
121- colors = AppTextFieldDefaults .noIndicatorColors,
122- shape = MaterialTheme .shapes.medium,
123- modifier = Modifier
124- .fillMaxWidth()
125- .defaultMinSize(minHeight = 74 .dp),
126- )
127-
128- Spacer (modifier = Modifier .height(16 .dp))
129120
130- Spacer (modifier = Modifier .weight(1f ))
131-
132- PrimaryButton (
133- text = stringResource(R .string.continue_button),
134- onClick = { }, // TODO IMPLEMENT
135- )
121+ if (keyboardVisible) {
122+ Text13Up (
123+ text = stringResource(R .string.wallet__send_available),
124+ color = Colors .White64 ,
125+ modifier = Modifier .testTag(" available_balance" )
126+ )
127+ Spacer (modifier = Modifier .height(4 .dp))
128+
129+ Row (
130+ verticalAlignment = Alignment .CenterVertically ,
131+ horizontalArrangement = Arrangement .End ,
132+ modifier = Modifier .fillMaxWidth()
133+ ) {
134+ UnitButton (modifier = Modifier .height(28 .dp))
135+ }
136+
137+ HorizontalDivider (modifier = Modifier .padding(vertical = 24 .dp))
138+
139+ Keyboard (
140+ onClick = { number ->
141+ onInputChanged(if (input == " 0" ) number else input + number)
142+ },
143+ onClickBackspace = {
144+ onInputChanged(if (input.length > 1 ) input.dropLast(1 ) else " 0" )
145+ },
146+ isDecimal = primaryDisplay == PrimaryDisplay .FIAT ,
147+ modifier = Modifier
148+ .fillMaxWidth()
149+ .testTag(" amount_keyboard" ),
150+ )
151+ } else {
152+ Spacer (modifier = Modifier .height(44 .dp))
153+
154+ Caption13Up (text = stringResource(R .string.wallet__note), color = Colors .White64 )
155+
156+ Spacer (modifier = Modifier .height(16 .dp))
157+
158+ TextField (
159+ placeholder = {
160+ BodySSB (
161+ text = stringResource(R .string.wallet__receive_note_placeholder),
162+ color = Colors .White64
163+ )
164+ },
165+ value = noteText,
166+ onValueChange = onTextChanged,
167+ minLines = 4 ,
168+ colors = AppTextFieldDefaults .noIndicatorColors,
169+ shape = MaterialTheme .shapes.medium,
170+ modifier = Modifier
171+ .fillMaxWidth()
172+ .defaultMinSize(minHeight = 74 .dp),
173+ )
174+
175+ Spacer (modifier = Modifier .height(16 .dp))
176+
177+ Spacer (modifier = Modifier .weight(1f ))
178+
179+ PrimaryButton (
180+ text = stringResource(R .string.continue_button),
181+ onClick = { }, // TODO IMPLEMENT
182+ )
183+ }
136184
137185 Spacer (modifier = Modifier .height(16 .dp))
138186 }
@@ -150,7 +198,10 @@ private fun Preview() {
150198 displayUnit = BitcoinDisplayUnit .MODERN ,
151199 onEvent = {},
152200 onBack = {},
153- onTextChanged = {}
201+ onTextChanged = {},
202+ keyboardVisible = false ,
203+ onClickBalance = {},
204+ onInputChanged = {}
154205 )
155206 }
156207}
@@ -167,7 +218,29 @@ private fun Preview2() {
167218 displayUnit = BitcoinDisplayUnit .MODERN ,
168219 onEvent = {},
169220 onBack = {},
170- onTextChanged = {}
221+ onTextChanged = {},
222+ keyboardVisible = false ,
223+ onClickBalance = {},
224+ onInputChanged = {}
225+ )
226+ }
227+ }
228+
229+ @Preview(showBackground = true )
230+ @Composable
231+ private fun Preview3 () {
232+ AppThemeSurface {
233+ EditInvoiceContent (
234+ input = " 123" ,
235+ noteText = " Note text" ,
236+ primaryDisplay = PrimaryDisplay .BITCOIN ,
237+ displayUnit = BitcoinDisplayUnit .MODERN ,
238+ onEvent = {},
239+ onBack = {},
240+ onTextChanged = {},
241+ keyboardVisible = true ,
242+ onClickBalance = {},
243+ onInputChanged = {}
171244 )
172245 }
173246}
0 commit comments