Skip to content

Commit 330b6e5

Browse files
committed
feat: open settings for bitkit app if possible
1 parent 67c8afd commit 330b6e5

File tree

4 files changed

+36
-14
lines changed

4 files changed

+36
-14
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,7 +9,9 @@ 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
1517
import to.bitkit.R
@@ -18,6 +20,7 @@ import java.io.File
1820
import java.io.FileOutputStream
1921
import java.io.IOException
2022
import java.io.InputStream
23+
import androidx.core.net.toUri
2124

2225
// System Services
2326

@@ -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/ui/screens/scanner/QrScanningScreen.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ package to.bitkit.ui.screens.scanner
44

55
import android.Manifest
66
import android.content.Context
7-
import android.content.Intent
87
import android.net.Uri
98
import android.os.Build
10-
import android.provider.Settings
119
import android.view.View.LAYER_TYPE_HARDWARE
1210
import androidx.activity.compose.rememberLauncherForActivityResult
1311
import androidx.activity.result.PickVisualMediaRequest
@@ -82,6 +80,7 @@ import to.bitkit.ui.theme.Colors
8280
import to.bitkit.utils.Logger
8381
import to.bitkit.viewmodels.AppViewModel
8482
import java.util.concurrent.Executors
83+
import to.bitkit.ext.startActivityAppSettings
8584

8685
const val SCAN_REQUEST_KEY = "SCAN_REQUEST"
8786
const val SCAN_RESULT_KEY = "SCAN_RESULT"
@@ -206,7 +205,9 @@ fun QrScanningScreen(
206205
DeniedContent(
207206
shouldShowRationale = cameraPermissionState.status.shouldShowRationale,
208207
inSheet = inSheet,
209-
onClickOpenSettings = { context.startActivity(Intent(Settings.ACTION_SETTINGS)) },
208+
onClickOpenSettings = {
209+
context.startActivityAppSettings()
210+
},
210211
onClickRetry = cameraPermissionState::launchPermissionRequest,
211212
onClickPaste = handlePaste(context, app, setScanResult),
212213
onBack = onBack,

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
3131
import androidx.navigation.NavController
3232
import kotlinx.datetime.Clock
3333
import to.bitkit.R
34+
import to.bitkit.ext.startActivityAppSettings
3435
import to.bitkit.ext.toLocalizedTimestamp
3536
import to.bitkit.models.HealthState
3637
import to.bitkit.models.NodeLifecycleState
@@ -61,10 +62,7 @@ fun AppStatusScreen(
6162
uiState = uiState,
6263
onBack = { navController.popBackStack() },
6364
onClose = { navController.navigateToHome() },
64-
onInternetClick = {
65-
val intent = Intent(Settings.ACTION_SETTINGS)
66-
context.startActivity(intent)
67-
},
65+
onInternetClick = { context.startActivityAppSettings() },
6866
onElectrumClick = { navController.navigate(Routes.ElectrumConfig) },
6967
onNodeClick = { navController.navigate(Routes.NodeInfo) },
7068
onChannelsClick = { navController.navigate(Routes.LightningConnections) },

0 commit comments

Comments
 (0)