Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions app/detekt-baseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@
<ID>LongParameterList:CoreService.kt$OnchainService$( mnemonicPhrase: String, derivationPathStr: String?, network: Network?, bip39Passphrase: String?, isChange: Boolean?, startIndex: UInt?, count: UInt?, )</ID>
<ID>LongParameterList:DevSettingsViewModel.kt$DevSettingsViewModel$( @ApplicationContext private val context: Context, @BgDispatcher private val bgDispatcher: CoroutineDispatcher, private val firebaseMessaging: FirebaseMessaging, private val lightningRepo: LightningRepo, private val walletRepo: WalletRepo, private val widgetsStore: WidgetsStore, private val currencyRepo: CurrencyRepo, private val logsRepo: LogsRepo, private val cacheStore: CacheStore, private val blocktankRepo: BlocktankRepo, )</ID>
<ID>LongParameterList:LightningConnectionsViewModel.kt$LightningConnectionsViewModel$( @ApplicationContext private val context: Context, @BgDispatcher private val bgDispatcher: CoroutineDispatcher, private val lightningRepo: LightningRepo, internal val blocktankRepo: BlocktankRepo, private val logsRepo: LogsRepo, private val addressChecker: AddressChecker, private val ldkNodeEventBus: LdkNodeEventBus, private val walletRepo: WalletRepo, )</ID>
<ID>LongParameterList:LightningRepo.kt$LightningRepo$( @BgDispatcher private val bgDispatcher: CoroutineDispatcher, private val lightningService: LightningService, private val ldkNodeEventBus: LdkNodeEventBus, private val settingsStore: SettingsStore, private val coreService: CoreService, private val blocktankNotificationsService: BlocktankNotificationsService, private val firebaseMessaging: FirebaseMessaging, private val keychain: Keychain, private val lnurlService: LnurlService, private val cacheStore: CacheStore, )</ID>
<ID>LongParameterList:LightningRepo.kt$LightningRepo$( @BgDispatcher private val bgDispatcher: CoroutineDispatcher, private val lightningService: LightningService, private val ldkNodeEventBus: LdkNodeEventBus, private val settingsStore: SettingsStore, private val coreService: CoreService, private val lspNotificationsService: LspNotificationsService, private val firebaseMessaging: FirebaseMessaging, private val keychain: Keychain, private val lnurlService: LnurlService, private val cacheStore: CacheStore, )</ID>
<ID>LongParameterList:LightningRepo.kt$LightningRepo$( address: Address, sats: ULong, speed: TransactionSpeed? = null, utxosToSpend: List&lt;SpendableUtxo&gt;? = null, feeRates: FeeRates? = null, isTransfer: Boolean = false, channelId: String? = null, )</ID>
<ID>LongParameterList:LightningRepo.kt$LightningRepo$( walletIndex: Int = 0, timeout: Duration? = null, shouldRetry: Boolean = true, eventHandler: NodeEventHandler? = null, customServer: ElectrumServer? = null, customRgsServerUrl: String? = null, )</ID>
<ID>LongParameterList:Notifications.kt$( title: String?, text: String?, extras: Bundle? = null, bigText: String? = null, id: Int = Random.nextInt(), context: Context, )</ID>
Expand Down Expand Up @@ -330,7 +330,6 @@
<ID>MagicNumber:QuickPaySettingsScreen.kt$20</ID>
<ID>MagicNumber:QuickPaySettingsScreen.kt$5</ID>
<ID>MagicNumber:QuickPaySettingsScreen.kt$50</ID>
<ID>MagicNumber:ReceiveAmountScreen.kt$500</ID>
<ID>MagicNumber:ReceiveLiquidityScreen.kt$100.0</ID>
<ID>MagicNumber:ReceiveQrScreen.kt$17.33f</ID>
<ID>MagicNumber:ReceiveQrScreen.kt$32</ID>
Expand Down Expand Up @@ -481,7 +480,6 @@
<ID>ModifierMissing:HighBalanceWarningSheet.kt$HighBalanceWarningContent</ID>
<ID>ModifierMissing:HomeNav.kt$HomeNav</ID>
<ID>ModifierMissing:InfoScreenContent.kt$InfoScreenContent</ID>
<ID>ModifierMissing:InfoTextField.kt$InfoTextField</ID>
<ID>ModifierMissing:InitializingWalletView.kt$InitializingWalletView</ID>
<ID>ModifierMissing:IntroScreen.kt$IntroScreen</ID>
<ID>ModifierMissing:LocalCurrencySettingsScreen.kt$LocalCurrencySettingsContent</ID>
Expand All @@ -498,7 +496,6 @@
<ID>ModifierMissing:QrScanningScreen.kt$QrScanningScreen</ID>
<ID>ModifierMissing:QuickPayIntroScreen.kt$QuickPayIntroScreen</ID>
<ID>ModifierMissing:QuickPaySettingsScreen.kt$QuickPaySettingsScreenContent</ID>
<ID>ModifierMissing:ReceiveAmountScreen.kt$ReceiveAmountScreen</ID>
<ID>ModifierMissing:ReceiveSheet.kt$ReceiveSheet</ID>
<ID>ModifierMissing:ReportIssueResultScreen.kt$ReportIssueResultScreen</ID>
<ID>ModifierMissing:ReportIssueScreen.kt$ReportIssueContent</ID>
Expand Down Expand Up @@ -596,7 +593,6 @@
<ID>ReturnCount:LightningConnectionsViewModel.kt$LightningConnectionsViewModel$private fun findUpdatedChannel( currentChannel: ChannelDetails, allChannels: List&lt;ChannelDetails&gt;, ): ChannelDetails?</ID>
<ID>SpreadOperator:RestoreWalletScreen.kt$(*Array(24) { "" })</ID>
<ID>SwallowedException:Crypto.kt$Crypto$e: Exception</ID>
<ID>SwallowedException:FcmService.kt$FcmService$e: SerializationException</ID>
<ID>TooGenericExceptionCaught:ActivityDetailViewModel.kt$ActivityDetailViewModel$e: Exception</ID>
<ID>TooGenericExceptionCaught:ActivityDetailViewModel.kt$ActivityDetailViewModel$e: Throwable</ID>
<ID>TooGenericExceptionCaught:ActivityListViewModel.kt$ActivityListViewModel$e: Exception</ID>
Expand Down Expand Up @@ -628,7 +624,6 @@
<ID>TooGenericExceptionCaught:NewTransactionSheetDetails.kt$NewTransactionSheetDetails.Companion$e: Exception</ID>
<ID>TooGenericExceptionCaught:PriceService.kt$PriceService$e: Exception</ID>
<ID>TooGenericExceptionCaught:QrScanningScreen.kt$e: Exception</ID>
<ID>TooGenericExceptionCaught:ReceiveAmountScreen.kt$e: Exception</ID>
<ID>TooGenericExceptionCaught:SendCoinSelectionViewModel.kt$SendCoinSelectionViewModel$e: Throwable</ID>
<ID>TooGenericExceptionCaught:ServiceQueue.kt$ServiceQueue$e: Exception</ID>
<ID>TooGenericExceptionCaught:SettingUpScreen.kt$e: Throwable</ID>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ class SendAmountContentTest {
// composeTestRule.onNodeWithTag("amount_input_field").assertExists() doesn't displayed because of viewmodel injection
composeTestRule.onNodeWithTag("available_balance").assertExists()
composeTestRule.onNodeWithTag("AssetButton-switch").assertExists()
composeTestRule.onNodeWithTag("continue_button").assertExists()
composeTestRule.onNodeWithTag("amount_keyboard").assertExists()
composeTestRule.onNodeWithTag("ContinueAmount").assertExists()
composeTestRule.onNodeWithTag("SendAmountNumberPad").assertExists()
}

@Test
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/to/bitkit/repositories/LightningRepo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import kotlinx.coroutines.withTimeout
import kotlinx.coroutines.withTimeoutOrNull
import org.lightningdevkit.ldknode.Address
import org.lightningdevkit.ldknode.BalanceDetails
import org.lightningdevkit.ldknode.ChannelConfig
import org.lightningdevkit.ldknode.ChannelDetails
import org.lightningdevkit.ldknode.NodeStatus
import org.lightningdevkit.ldknode.PaymentDetails
Expand Down Expand Up @@ -646,8 +647,9 @@ class LightningRepo @Inject constructor(
peer: LnPeer,
channelAmountSats: ULong,
pushToCounterpartySats: ULong? = null,
channelConfig: ChannelConfig? = null,
): Result<UserChannelId> = executeWhenNodeRunning("Open channel") {
val result = lightningService.openChannel(peer, channelAmountSats, pushToCounterpartySats)
val result = lightningService.openChannel(peer, channelAmountSats, pushToCounterpartySats, channelConfig)
syncState()
result
}
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/to/bitkit/services/LightningService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import org.lightningdevkit.ldknode.Bolt11Invoice
import org.lightningdevkit.ldknode.Bolt11InvoiceDescription
import org.lightningdevkit.ldknode.BuildException
import org.lightningdevkit.ldknode.Builder
import org.lightningdevkit.ldknode.ChannelConfig
import org.lightningdevkit.ldknode.ChannelDetails
import org.lightningdevkit.ldknode.CoinSelectionAlgorithm
import org.lightningdevkit.ldknode.Config
Expand Down Expand Up @@ -324,6 +325,7 @@ class LightningService @Inject constructor(
peer: LnPeer,
channelAmountSats: ULong,
pushToCounterpartySats: ULong? = null,
channelConfig: ChannelConfig? = null,
): Result<UserChannelId> {
val node = this.node ?: throw ServiceError.NodeNotSetup

Expand All @@ -336,7 +338,7 @@ class LightningService @Inject constructor(
address = peer.address,
channelAmountSats = channelAmountSats,
pushToCounterpartyMsat = pushToCounterpartySats?.let { it * 1000u },
channelConfig = null,
channelConfig = channelConfig,
)

Logger.info("Channel open initiated, userChannelId: $userChannelId")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,11 @@ import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.sizeIn
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
Expand All @@ -38,7 +36,7 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.tooling.preview.Devices.PIXEL_5
import androidx.compose.ui.tooling.preview.Devices.NEXUS_5
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
Expand All @@ -53,11 +51,13 @@ import to.bitkit.ui.components.BodySSB
import to.bitkit.ui.components.BottomSheetPreview
import to.bitkit.ui.components.ButtonSize
import to.bitkit.ui.components.Caption13Up
import to.bitkit.ui.components.FillHeight
import to.bitkit.ui.components.Keyboard
import to.bitkit.ui.components.NumberPadTextField
import to.bitkit.ui.components.PrimaryButton
import to.bitkit.ui.components.TagButton
import to.bitkit.ui.components.UnitButton
import to.bitkit.ui.components.VerticalSpacer
import to.bitkit.ui.currencyViewModel
import to.bitkit.ui.scaffold.SheetTopBar
import to.bitkit.ui.shared.modifiers.sheetHeight
Expand Down Expand Up @@ -145,8 +145,14 @@ fun EditInvoiceScreen(
tags = walletUiState.selectedTags,
onBack = onBack,
onTextChanged = onDescriptionUpdate,
numericKeyboardVisible = keyboardVisible,
onClickBalance = { keyboardVisible = true },
keyboardVisible = keyboardVisible,
onClickBalance = {
if (keyboardVisible) {
currencyVM.togglePrimaryDisplay()
} else {
keyboardVisible = true
}
},
onInputChanged = onInputUpdated,
onContinueKeyboard = { keyboardVisible = false },
onContinueGeneral = {
Expand All @@ -164,7 +170,7 @@ fun EditInvoiceContent(
input: String,
noteText: String,
isSoftKeyboardVisible: Boolean,
numericKeyboardVisible: Boolean,
keyboardVisible: Boolean,
primaryDisplay: PrimaryDisplay,
displayUnit: BitcoinDisplayUnit,
tags: List<String>,
Expand All @@ -187,7 +193,7 @@ fun EditInvoiceContent(
val maxHeight = this.maxHeight

AnimatedVisibility(
visible = !numericKeyboardVisible && !isSoftKeyboardVisible,
visible = !keyboardVisible && !isSoftKeyboardVisible,
enter = fadeIn(),
exit = fadeOut(),
modifier = Modifier
Expand All @@ -210,16 +216,17 @@ fun EditInvoiceContent(
.navigationBarsPadding()
.testTag("edit_invoice_screen")
) {
SheetTopBar(stringResource(R.string.wallet__receive_specify)) {
onBack()
}
SheetTopBar(
titleText = stringResource(R.string.wallet__receive_specify),
onBack = onBack,
)

Column(
modifier = Modifier
.padding(horizontal = 16.dp)
.testTag("ReceiveAmount")
) {
Spacer(Modifier.height(32.dp))
VerticalSpacer(16.dp)

NumberPadTextField(
input = input,
Expand All @@ -233,7 +240,7 @@ fun EditInvoiceContent(

// Animated visibility for keyboard section
AnimatedVisibility(
visible = numericKeyboardVisible,
visible = keyboardVisible,
enter = slideInVertically(
initialOffsetY = { fullHeight -> fullHeight },
animationSpec = tween(durationMillis = 300)
Expand All @@ -246,7 +253,7 @@ fun EditInvoiceContent(
Column(
modifier = Modifier.testTag("ReceiveNumberPad")
) {
Spacer(modifier = Modifier.weight(1f))
FillHeight(min = 12.dp)

Row(
verticalAlignment = Alignment.CenterVertically,
Expand Down Expand Up @@ -276,34 +283,26 @@ fun EditInvoiceContent(
.testTag("amount_keyboard")
)

Spacer(
modifier = Modifier
.weight(1f)
.sizeIn(minHeight = 16.dp, maxHeight = 41.dp)
)

PrimaryButton(
text = stringResource(R.string.common__continue),
onClick = onContinueKeyboard,
modifier = Modifier.testTag("ReceiveNumberPadSubmit")
)

Spacer(modifier = Modifier.height(16.dp))
VerticalSpacer(16.dp)
}
}

// Animated visibility for note section
AnimatedVisibility(
visible = !numericKeyboardVisible,
visible = !keyboardVisible,
enter = fadeIn(animationSpec = tween(durationMillis = 300)),
exit = fadeOut(animationSpec = tween(durationMillis = 300))
) {
Column {
Spacer(modifier = Modifier.height(44.dp))

VerticalSpacer(44.dp)
Caption13Up(text = stringResource(R.string.wallet__note), color = Colors.White64)

Spacer(modifier = Modifier.height(16.dp))
VerticalSpacer(16.dp)

TextField(
placeholder = {
Expand All @@ -325,10 +324,10 @@ fun EditInvoiceContent(
.testTag("ReceiveNote")
)

Spacer(modifier = Modifier.height(16.dp))

VerticalSpacer(16.dp)
Caption13Up(text = stringResource(R.string.wallet__tags), color = Colors.White64)
Spacer(modifier = Modifier.height(8.dp))
VerticalSpacer(8.dp)

FlowRow(
horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalArrangement = Arrangement.spacedBy(8.dp),
Expand Down Expand Up @@ -359,15 +358,15 @@ fun EditInvoiceContent(
modifier = Modifier.testTag("TagsAdd")
)

Spacer(modifier = Modifier.weight(1f))
FillHeight()

PrimaryButton(
text = stringResource(R.string.wallet__receive_show_qr),
onClick = onContinueGeneral,
modifier = Modifier.testTag("ShowQrReceive")
)

Spacer(modifier = Modifier.height(16.dp))
VerticalSpacer(16.dp)
}
}
}
Expand All @@ -387,7 +386,7 @@ private fun Preview() {
displayUnit = BitcoinDisplayUnit.MODERN,
onBack = {},
onTextChanged = {},
numericKeyboardVisible = false,
keyboardVisible = false,
onClickBalance = {},
onInputChanged = {},
onContinueGeneral = {},
Expand All @@ -404,7 +403,7 @@ private fun Preview() {

@Preview(showSystemUi = true)
@Composable
private fun Preview2() {
private fun PreviewWithTags() {
AppThemeSurface {
BottomSheetPreview {
EditInvoiceContent(
Expand All @@ -414,7 +413,7 @@ private fun Preview2() {
displayUnit = BitcoinDisplayUnit.MODERN,
onBack = {},
onTextChanged = {},
numericKeyboardVisible = false,
keyboardVisible = false,
onClickBalance = {},
onInputChanged = {},
onContinueGeneral = {},
Expand All @@ -431,7 +430,7 @@ private fun Preview2() {

@Preview(showSystemUi = true)
@Composable
private fun Preview3() {
private fun PreviewWithKeyboard() {
AppThemeSurface {
BottomSheetPreview {
EditInvoiceContent(
Expand All @@ -441,7 +440,7 @@ private fun Preview3() {
displayUnit = BitcoinDisplayUnit.MODERN,
onBack = {},
onTextChanged = {},
numericKeyboardVisible = true,
keyboardVisible = true,
onClickBalance = {},
onInputChanged = {},
onContinueGeneral = {},
Expand All @@ -456,9 +455,9 @@ private fun Preview3() {
}
}

@Preview(showSystemUi = true, device = PIXEL_5)
@Preview(showSystemUi = true, device = NEXUS_5)
@Composable
private fun Preview4() {
private fun PreviewSmallScreen() {
AppThemeSurface {
BottomSheetPreview {
EditInvoiceContent(
Expand All @@ -468,7 +467,7 @@ private fun Preview4() {
displayUnit = BitcoinDisplayUnit.MODERN,
onBack = {},
onTextChanged = {},
numericKeyboardVisible = true,
keyboardVisible = true,
onClickBalance = {},
onInputChanged = {},
onContinueGeneral = {},
Expand Down
Loading