Skip to content

Commit 65e5a6d

Browse files
Merge pull request #47 from NordicPlayground/use-context-ble-permissions
Use local context provided by the composable when requesting permission
2 parents df4af90 + 6602127 commit 65e5a6d

File tree

6 files changed

+21
-18
lines changed

6 files changed

+21
-18
lines changed

permission/src/main/java/no/nordicsemi/android/common/permission/bluetooth/BluetoothStateManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ class BluetoothStateManager @Inject constructor(
8383
dataProvider.bluetoothPermissionRequested = true
8484
}
8585

86-
fun isBluetoothScanPermissionDeniedForever(): Boolean {
87-
return utils.isBluetoothScanPermissionDeniedForever()
86+
fun isBluetoothScanPermissionDeniedForever(context: Context): Boolean {
87+
return utils.isBluetoothScanPermissionDeniedForever(context)
8888
}
8989

9090
private fun getBluetoothPermissionState() = when {

permission/src/main/java/no/nordicsemi/android/common/permission/location/LocationStateManager.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ import no.nordicsemi.android.common.permission.util.*
4444
import javax.inject.Inject
4545
import javax.inject.Singleton
4646

47-
private const val REFRESH_PERMISSIONS = "no.nordicsemi.android.common.permission.REFRESH_LOCATION_PERMISSIONS"
47+
private const val REFRESH_PERMISSIONS =
48+
"no.nordicsemi.android.common.permission.REFRESH_LOCATION_PERMISSIONS"
4849

4950
@Singleton
5051
internal class LocationStateManager @Inject constructor(
@@ -80,17 +81,19 @@ internal class LocationStateManager @Inject constructor(
8081
dataProvider.locationPermissionRequested = true
8182
}
8283

83-
fun isLocationPermissionDeniedForever(): Boolean {
84-
return utils.isLocationPermissionDeniedForever()
84+
fun isLocationPermissionDeniedForever(context: Context): Boolean {
85+
return utils.isLocationPermissionDeniedForever(context)
8586
}
8687

8788
private fun getLocationState(): FeatureState {
8889
val lm = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
8990
return when {
9091
!utils.isLocationPermissionGranted ->
9192
NotAvailable(FeatureNotAvailableReason.PERMISSION_REQUIRED)
93+
9294
dataProvider.isLocationPermissionRequired && !LocationManagerCompat.isLocationEnabled(lm) ->
9395
NotAvailable(FeatureNotAvailableReason.DISABLED)
96+
9497
else -> Available
9598
}
9699
}

permission/src/main/java/no/nordicsemi/android/common/permission/util/PermissionUtils.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,15 @@ internal class PermissionUtils(
9898
dataProvider.locationPermissionRequested = true
9999
}
100100

101-
fun isBluetoothScanPermissionDeniedForever(): Boolean {
101+
fun isBluetoothScanPermissionDeniedForever(context: Context): Boolean {
102102
return dataProvider.isSOrAbove &&
103103
!isBluetoothScanPermissionGranted && // Bluetooth Scan permission must be denied
104104
dataProvider.bluetoothPermissionRequested && // Permission must have been requested before
105105
!context.findActivity()
106106
.shouldShowRequestPermissionRationale(Manifest.permission.BLUETOOTH_SCAN)
107107
}
108108

109-
fun isLocationPermissionDeniedForever(): Boolean {
109+
fun isLocationPermissionDeniedForever(context: Context): Boolean {
110110
return dataProvider.isMarshmallowOrAbove &&
111111
!isLocationPermissionGranted // Location permission must be denied
112112
&& dataProvider.locationPermissionRequested // Permission must have been requested before

permission/src/main/java/no/nordicsemi/android/common/permission/view/BluetoothPermissionRequiredView.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
package no.nordicsemi.android.common.permission.view
3333

3434
import android.Manifest
35-
import android.app.Activity
3635
import android.content.Context
3736
import android.content.Intent
3837
import android.net.Uri
@@ -68,8 +67,8 @@ import no.nordicsemi.android.common.theme.view.WarningView
6867
@Composable
6968
internal fun BluetoothPermissionRequiredView() {
7069
val viewModel = hiltViewModel<PermissionViewModel>()
71-
val activity = LocalContext.current as Activity
72-
var permissionDenied by remember { mutableStateOf(viewModel.isBluetoothScanPermissionDeniedForever()) }
70+
val context = LocalContext.current
71+
var permissionDenied by remember { mutableStateOf(viewModel.isBluetoothScanPermissionDeniedForever(context)) }
7372

7473
WarningView(
7574
imageVector = Icons.Default.BluetoothDisabled,
@@ -89,7 +88,7 @@ internal fun BluetoothPermissionRequiredView() {
8988
ActivityResultContracts.RequestMultiplePermissions()
9089
) {
9190
viewModel.markBluetoothPermissionRequested()
92-
permissionDenied = viewModel.isBluetoothScanPermissionDeniedForever()
91+
permissionDenied = viewModel.isBluetoothScanPermissionDeniedForever(context)
9392
viewModel.refreshBluetoothPermission()
9493
}
9594

@@ -98,7 +97,7 @@ internal fun BluetoothPermissionRequiredView() {
9897
Text(text = stringResource(id = R.string.action_grant_permission))
9998
}
10099
} else {
101-
Button(onClick = { openPermissionSettings(activity) }) {
100+
Button(onClick = { openPermissionSettings(context) }) {
102101
Text(text = stringResource(id = R.string.action_settings))
103102
}
104103
}

permission/src/main/java/no/nordicsemi/android/common/permission/view/LocationPermissionRequiredView.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@ import no.nordicsemi.android.common.theme.view.WarningView
6666
internal fun LocationPermissionRequiredView() {
6767
val viewModel = hiltViewModel<PermissionViewModel>()
6868
val context = LocalContext.current
69-
var permissionDenied by remember { mutableStateOf(viewModel.isLocationPermissionDeniedForever()) }
69+
var permissionDenied by remember { mutableStateOf(viewModel.isLocationPermissionDeniedForever(context)) }
7070

7171
val launcher = rememberLauncherForActivityResult(
7272
ActivityResultContracts.RequestMultiplePermissions()
7373
) {
7474
viewModel.markLocationPermissionRequested()
75-
permissionDenied = viewModel.isLocationPermissionDeniedForever()
75+
permissionDenied = viewModel.isLocationPermissionDeniedForever(context)
7676
viewModel.refreshLocationPermission()
7777
}
7878

permission/src/main/java/no/nordicsemi/android/common/permission/viewmodel/PermissionViewModel.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
package no.nordicsemi.android.common.permission.viewmodel
3333

34+
import android.content.Context
3435
import androidx.lifecycle.ViewModel
3536
import androidx.lifecycle.viewModelScope
3637
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -77,11 +78,11 @@ internal class PermissionViewModel @Inject internal constructor(
7778
bluetoothManager.markBluetoothPermissionRequested()
7879
}
7980

80-
fun isBluetoothScanPermissionDeniedForever(): Boolean {
81-
return bluetoothManager.isBluetoothScanPermissionDeniedForever()
81+
fun isBluetoothScanPermissionDeniedForever(context: Context): Boolean {
82+
return bluetoothManager.isBluetoothScanPermissionDeniedForever(context)
8283
}
8384

84-
fun isLocationPermissionDeniedForever(): Boolean {
85-
return locationManager.isLocationPermissionDeniedForever()
85+
fun isLocationPermissionDeniedForever(context: Context): Boolean {
86+
return locationManager.isLocationPermissionDeniedForever(context)
8687
}
8788
}

0 commit comments

Comments
 (0)