Skip to content

Commit 59abf50

Browse files
committed
feat: implement keyboard WIP
1 parent e24038a commit 59abf50

File tree

1 file changed

+107
-34
lines changed

1 file changed

+107
-34
lines changed

app/src/main/java/to/bitkit/ui/screens/wallets/receive/EditInvoiceScreen.kt

Lines changed: 107 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
package to.bitkit.ui.screens.wallets.receive
22

3+
import androidx.compose.foundation.layout.Arrangement
34
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.Row
46
import androidx.compose.foundation.layout.Spacer
57
import androidx.compose.foundation.layout.defaultMinSize
68
import androidx.compose.foundation.layout.fillMaxSize
79
import androidx.compose.foundation.layout.fillMaxWidth
810
import androidx.compose.foundation.layout.height
911
import androidx.compose.foundation.layout.padding
12+
import androidx.compose.material3.HorizontalDivider
1013
import androidx.compose.material3.MaterialTheme
1114
import androidx.compose.material3.TextField
1215
import androidx.compose.runtime.Composable
1316
import androidx.compose.runtime.getValue
1417
import androidx.compose.runtime.mutableStateOf
1518
import androidx.compose.runtime.remember
1619
import androidx.compose.runtime.setValue
20+
import androidx.compose.ui.Alignment
1721
import androidx.compose.ui.Modifier
1822
import androidx.compose.ui.platform.testTag
1923
import androidx.compose.ui.res.stringResource
@@ -26,10 +30,14 @@ import to.bitkit.ui.LocalCurrencies
2630
import to.bitkit.ui.components.AmountInputHandler
2731
import to.bitkit.ui.components.BodySSB
2832
import to.bitkit.ui.components.Caption13Up
33+
import to.bitkit.ui.components.Keyboard
2934
import to.bitkit.ui.components.NumberPadTextField
3035
import to.bitkit.ui.components.PrimaryButton
36+
import to.bitkit.ui.components.Text13Up
37+
import to.bitkit.ui.components.UnitButton
3138
import to.bitkit.ui.currencyViewModel
3239
import to.bitkit.ui.scaffold.SheetTopBar
40+
import to.bitkit.ui.shared.util.clickableAlpha
3341
import to.bitkit.ui.shared.util.gradientBackground
3442
import to.bitkit.ui.theme.AppTextFieldDefaults
3543
import 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
7183
fun 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

Comments
 (0)