Skip to content

Commit a849229

Browse files
authored
Merge pull request #404 from synonymdev/fix/small-issues
fix: nav to android settings for bitkit app
2 parents b403e86 + 209f000 commit a849229

File tree

10 files changed

+79
-76
lines changed

10 files changed

+79
-76
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:tools="http://schemas.android.com/tools">
44

5+
<queries>
6+
<intent>
7+
<action android:name="android.settings.APPLICATION_DETAILS_SETTINGS" />
8+
</intent>
9+
</queries>
10+
511
<uses-feature
612
android:name="android.hardware.camera"
713
android:required="false" />

app/src/main/java/to/bitkit/ext/Context.kt

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@ import android.content.ClipboardManager
99
import android.content.Context
1010
import android.content.Context.NOTIFICATION_SERVICE
1111
import android.content.ContextWrapper
12+
import android.content.Intent
1213
import android.content.pm.PackageManager.PERMISSION_GRANTED
14+
import android.provider.Settings
1315
import androidx.core.app.NotificationManagerCompat
1416
import androidx.core.content.ContextCompat
17+
import androidx.core.net.toUri
1518
import to.bitkit.R
1619
import to.bitkit.utils.Logger
1720
import java.io.File
@@ -56,13 +59,6 @@ fun Context.copyAssetToStorage(asset: String, dest: String) {
5659
}
5760
}
5861

59-
fun Context.findActivity(): Activity? =
60-
when (this) {
61-
is Activity -> this
62-
is ContextWrapper -> baseContext.findActivity()
63-
else -> null
64-
}
65-
6662
// Clipboard
6763
fun Context.setClipboardText(text: String, label: String = getString(R.string.app_name)) {
6864
this.clipboardManager.setPrimaryClip(
@@ -73,3 +69,24 @@ fun Context.setClipboardText(text: String, label: String = getString(R.string.ap
7369
fun Context.getClipboardText(): String? {
7470
return this.clipboardManager.primaryClip?.getItemAt(0)?.text?.toString()
7571
}
72+
73+
// Other
74+
75+
fun Context.findActivity(): Activity? =
76+
when (this) {
77+
is Activity -> this
78+
is ContextWrapper -> baseContext.findActivity()
79+
else -> null
80+
}
81+
82+
fun Context.startActivityAppSettings() {
83+
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
84+
this.data = "package:$packageName".toUri()
85+
}
86+
87+
if (intent.resolveActivity(packageManager) != null) {
88+
startActivity(intent)
89+
} else {
90+
startActivity(Intent(Settings.ACTION_SETTINGS))
91+
}
92+
}

app/src/main/java/to/bitkit/repositories/WalletRepo.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import to.bitkit.ext.totalNextOutboundHtlcLimitSats
3131
import to.bitkit.models.AddressModel
3232
import to.bitkit.models.BalanceState
3333
import to.bitkit.models.NodeLifecycleState
34-
import to.bitkit.models.TransactionSpeed
3534
import to.bitkit.models.toDerivationPath
3635
import to.bitkit.services.CoreService
3736
import to.bitkit.utils.AddressChecker

app/src/main/java/to/bitkit/ui/components/BalanceHeaderView.kt

Lines changed: 20 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -76,46 +76,27 @@ fun BalanceHeaderView(
7676
val shouldHideBalance = useSwipeToHide && hideBalance
7777
val allowSwipeToHide = useSwipeToHide && isSwipeToHideEnabled
7878

79-
converted?.let { converted ->
80-
val btcComponents = converted.bitcoinDisplay(displayUnit)
79+
converted?.let { fiat ->
80+
val btc = fiat.bitcoinDisplay(displayUnit)
81+
val isBitcoinPrimary = primaryDisplay == PrimaryDisplay.BITCOIN
8182

82-
if (primaryDisplay == PrimaryDisplay.BITCOIN) {
83-
BalanceHeader(
84-
modifier = modifier,
85-
smallRowSymbol = converted.symbol,
86-
smallRowText = converted.formatted,
87-
smallRowModifier = Modifier.testTag("$testTag-secondary"),
88-
largeRowPrefix = prefix,
89-
largeRowText = btcComponents.value,
90-
largeRowSymbol = btcComponents.symbol,
91-
largeRowModifier = Modifier.testTag("$testTag-primary"),
92-
showSymbol = showBitcoinSymbol,
93-
hideBalance = shouldHideBalance,
94-
isSwipeToHideEnabled = allowSwipeToHide,
95-
showEyeIcon = showEyeIcon,
96-
onClick = onClick ?: { currency.switchUnit() },
97-
onToggleHideBalance = { settings.setHideBalance(!hideBalance) },
98-
testTag = testTag,
99-
)
100-
} else {
101-
BalanceHeader(
102-
modifier = modifier,
103-
smallRowSymbol = btcComponents.symbol,
104-
smallRowText = btcComponents.value,
105-
smallRowModifier = Modifier.testTag("$testTag-secondary"),
106-
largeRowPrefix = prefix,
107-
largeRowText = converted.formatted,
108-
largeRowSymbol = converted.symbol,
109-
largeRowModifier = Modifier.testTag("$testTag-primary"),
110-
showSymbol = true,
111-
hideBalance = shouldHideBalance,
112-
isSwipeToHideEnabled = allowSwipeToHide,
113-
showEyeIcon = showEyeIcon,
114-
onClick = { currency.switchUnit() },
115-
onToggleHideBalance = { settings.setHideBalance(!hideBalance) },
116-
testTag = testTag,
117-
)
118-
}
83+
BalanceHeader(
84+
modifier = modifier,
85+
smallRowSymbol = if (isBitcoinPrimary) fiat.symbol else btc.symbol,
86+
smallRowText = if (isBitcoinPrimary) fiat.formatted else btc.value,
87+
smallRowModifier = Modifier.testTag("$testTag-secondary"),
88+
largeRowPrefix = prefix,
89+
largeRowText = if (isBitcoinPrimary) btc.value else fiat.formatted,
90+
largeRowSymbol = if (isBitcoinPrimary) btc.symbol else fiat.symbol,
91+
largeRowModifier = Modifier.testTag("$testTag-primary"),
92+
showSymbol = if (isBitcoinPrimary) showBitcoinSymbol else true,
93+
hideBalance = shouldHideBalance,
94+
isSwipeToHideEnabled = allowSwipeToHide,
95+
showEyeIcon = showEyeIcon,
96+
onClick = onClick ?: { currency.switchUnit() },
97+
onToggleHideBalance = { settings.setHideBalance(!hideBalance) },
98+
testTag = testTag,
99+
)
119100
}
120101
}
121102

app/src/main/java/to/bitkit/ui/screens/scanner/QrScanningScreen.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
1-
@file:OptIn(ExperimentalPermissionsApi::class)
2-
31
package to.bitkit.ui.screens.scanner
42

53
import android.Manifest
64
import android.content.Context
7-
import android.content.Intent
85
import android.net.Uri
96
import android.os.Build
10-
import android.provider.Settings
117
import android.view.View.LAYER_TYPE_HARDWARE
128
import androidx.activity.compose.rememberLauncherForActivityResult
139
import androidx.activity.result.PickVisualMediaRequest
@@ -68,6 +64,7 @@ import kotlinx.coroutines.withContext
6864
import to.bitkit.R
6965
import to.bitkit.env.Env
7066
import to.bitkit.ext.getClipboardText
67+
import to.bitkit.ext.startActivityAppSettings
7168
import to.bitkit.models.Toast
7269
import to.bitkit.ui.appViewModel
7370
import to.bitkit.ui.components.PrimaryButton
@@ -86,6 +83,7 @@ import java.util.concurrent.Executors
8683
const val SCAN_REQUEST_KEY = "SCAN_REQUEST"
8784
const val SCAN_RESULT_KEY = "SCAN_RESULT"
8885

86+
@OptIn(ExperimentalPermissionsApi::class)
8987
@Composable
9088
fun QrScanningScreen(
9189
navController: NavController,
@@ -206,7 +204,9 @@ fun QrScanningScreen(
206204
DeniedContent(
207205
shouldShowRationale = cameraPermissionState.status.shouldShowRationale,
208206
inSheet = inSheet,
209-
onClickOpenSettings = { context.startActivity(Intent(Settings.ACTION_SETTINGS)) },
207+
onClickOpenSettings = {
208+
context.startActivityAppSettings()
209+
},
210210
onClickRetry = cameraPermissionState::launchPermissionRequest,
211211
onClickPaste = handlePaste(context, app, setScanResult),
212212
onBack = onBack,

app/src/main/java/to/bitkit/ui/settings/appStatus/AppStatusScreen.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package to.bitkit.ui.settings.appStatus
22

3-
import android.content.Intent
4-
import android.provider.Settings
53
import androidx.annotation.DrawableRes
64
import androidx.compose.foundation.background
75
import androidx.compose.foundation.layout.Box
@@ -31,6 +29,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
3129
import androidx.navigation.NavController
3230
import kotlinx.datetime.Clock
3331
import to.bitkit.R
32+
import to.bitkit.ext.startActivityAppSettings
3433
import to.bitkit.ext.toLocalizedTimestamp
3534
import to.bitkit.models.HealthState
3635
import to.bitkit.models.NodeLifecycleState
@@ -61,10 +60,7 @@ fun AppStatusScreen(
6160
uiState = uiState,
6261
onBack = { navController.popBackStack() },
6362
onClose = { navController.navigateToHome() },
64-
onInternetClick = {
65-
val intent = Intent(Settings.ACTION_SETTINGS)
66-
context.startActivity(intent)
67-
},
63+
onInternetClick = { context.startActivityAppSettings() },
6864
onElectrumClick = { navController.navigate(Routes.ElectrumConfig) },
6965
onNodeClick = { navController.navigate(Routes.NodeInfo) },
7066
onChannelsClick = { navController.navigate(Routes.LightningConnections) },

app/src/main/java/to/bitkit/ui/sheets/NewTransactionSheet.kt

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.Spacer
99
import androidx.compose.foundation.layout.fillMaxSize
1010
import androidx.compose.foundation.layout.fillMaxWidth
1111
import androidx.compose.foundation.layout.height
12+
import androidx.compose.foundation.layout.navigationBarsPadding
1213
import androidx.compose.foundation.layout.padding
1314
import androidx.compose.material3.ExperimentalMaterial3Api
1415
import androidx.compose.runtime.Composable
@@ -21,8 +22,6 @@ import androidx.compose.ui.layout.ContentScale
2122
import androidx.compose.ui.platform.testTag
2223
import androidx.compose.ui.res.painterResource
2324
import androidx.compose.ui.res.stringResource
24-
import androidx.compose.ui.semantics.semantics
25-
import androidx.compose.ui.semantics.testTagsAsResourceId
2625
import androidx.compose.ui.tooling.preview.Preview
2726
import androidx.compose.ui.unit.dp
2827
import com.airbnb.lottie.compose.LottieAnimation
@@ -55,6 +54,7 @@ fun NewTransactionSheet(
5554
appViewModel: AppViewModel,
5655
currencyViewModel: CurrencyViewModel,
5756
settingsViewModel: SettingsViewModel,
57+
modifier: Modifier = Modifier,
5858
) {
5959
val currencies by currencyViewModel.uiState.collectAsState()
6060
val newTransaction by appViewModel.newTransaction.collectAsState()
@@ -73,6 +73,11 @@ fun NewTransactionSheet(
7373
onDetailClick = {
7474
appViewModel.onClickActivityDetail()
7575
},
76+
modifier = modifier
77+
.sheetHeight(isModal = true)
78+
.gradientBackground()
79+
.navigationBarsPadding()
80+
.testTag("new_transaction_sheet")
7681
)
7782
}
7883
}
@@ -83,14 +88,9 @@ fun NewTransactionSheetView(
8388
details: NewTransactionSheetDetails,
8489
onCloseClick: () -> Unit,
8590
onDetailClick: () -> Unit,
91+
modifier: Modifier = Modifier,
8692
) {
87-
Box(
88-
modifier = Modifier
89-
.semantics { testTagsAsResourceId = true }
90-
.sheetHeight(isModal = true)
91-
.gradientBackground()
92-
.testTag("new_transaction_sheet")
93-
) {
93+
Box(modifier = modifier) {
9494
if (details.direction == NewTransactionSheetDirection.RECEIVED) {
9595
Image(
9696
painter = painterResource(R.drawable.coin_stack_5),
@@ -158,13 +158,7 @@ fun NewTransactionSheetView(
158158
onClick = { onDetailClick },
159159
modifier = Modifier
160160
.fillMaxWidth()
161-
.testTag(
162-
if (details.direction == NewTransactionSheetDirection.SENT) {
163-
"SendSuccess"
164-
} else {
165-
"ReceivedTransaction"
166-
}
167-
)
161+
.testTag("ReceivedTransaction")
168162
)
169163

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

app/src/main/java/to/bitkit/ui/sheets/SendSheet.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package to.bitkit.ui.sheets
22

33
import androidx.compose.foundation.layout.Column
4+
import androidx.compose.foundation.layout.fillMaxSize
45
import androidx.compose.foundation.layout.fillMaxWidth
56
import androidx.compose.foundation.layout.imePadding
7+
import androidx.compose.foundation.layout.navigationBarsPadding
68
import androidx.compose.runtime.Composable
79
import androidx.compose.runtime.LaunchedEffect
810
import androidx.compose.runtime.getValue
@@ -36,6 +38,7 @@ import to.bitkit.ui.screens.wallets.withdraw.WithdrawConfirmScreen
3638
import to.bitkit.ui.screens.wallets.withdraw.WithdrawErrorScreen
3739
import to.bitkit.ui.settings.support.SupportScreen
3840
import to.bitkit.ui.shared.modifiers.sheetHeight
41+
import to.bitkit.ui.shared.util.gradientBackground
3942
import to.bitkit.ui.utils.composableWithDefaultTransitions
4043
import to.bitkit.ui.utils.navigationWithDefaultTransitions
4144
import to.bitkit.viewmodels.AppViewModel
@@ -184,7 +187,12 @@ fun SendSheet(
184187
NewTransactionSheetView(
185188
details = sendDetail,
186189
onCloseClick = { appViewModel.hideSheet() },
187-
onDetailClick = { appViewModel.onClickSendDetail() }
190+
onDetailClick = { appViewModel.onClickSendDetail() },
191+
modifier = Modifier
192+
.fillMaxSize()
193+
.gradientBackground()
194+
.navigationBarsPadding()
195+
.testTag("SendSuccess")
188196
)
189197
}
190198
composableWithDefaultTransitions<SendRoute.WithdrawConfirm> {

app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,6 +1312,8 @@ class AppViewModel @Inject constructor(
13121312
return@launch
13131313
}
13141314

1315+
hideSheet()
1316+
13151317
if (event is Event.PaymentReceived) {
13161318
val activity = activityRepo.findActivityByPaymentId(
13171319
paymentHashOrTxId = event.paymentHash,

config/detekt/detekt.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,7 @@ style:
716716
max: 2
717717
excludeGuardClauses: false
718718
TrailingWhitespace:
719-
active: false
719+
active: true
720720
TrimMultilineRawString:
721721
active: false
722722
trimmingMethods:

0 commit comments

Comments
 (0)