Skip to content

Commit 683e9ef

Browse files
Merge pull request #375 from nimblehq/feature/370-migrate-compose-permission-request-logic
[#370] [Compose] Migrate to the new permission request logic
2 parents e3fba04 + eb95572 commit 683e9ef

File tree

6 files changed

+35
-7
lines changed

6 files changed

+35
-7
lines changed

sample-compose/app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ dependencies {
133133
implementation("org.jetbrains.kotlin:kotlin-stdlib:${Versions.KOTLIN_VERSION}")
134134
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.KOTLINX_COROUTINES_VERSION}")
135135

136-
implementation("com.markodevcic:peko:${Versions.PEKO_VERSION}")
136+
implementation("com.google.accompanist:accompanist-permissions:${Versions.ACCOMPANIST_PERMISSIONS_VERSION}")
137137

138138
kapt("com.google.dagger:hilt-compiler:${Versions.HILT_VERSION}")
139139

sample-compose/app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
package="co.nimblehq.sample.compose">
44

55
<uses-permission android:name="android.permission.INTERNET" />
6-
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
76
<uses-permission android:name="android.permission.CAMERA" />
87

98
<application

sample-compose/app/src/main/java/co/nimblehq/sample/compose/ui/screens/home/HomeScreen.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package co.nimblehq.sample.compose.ui.screens.home
22

3+
import android.Manifest.permission.*
34
import android.widget.Toast
45
import androidx.compose.foundation.layout.*
56
import androidx.compose.material.CircularProgressIndicator
@@ -17,6 +18,7 @@ import co.nimblehq.sample.compose.ui.AppDestination
1718
import co.nimblehq.sample.compose.ui.screens.AppBar
1819
import co.nimblehq.sample.compose.ui.theme.ComposeTheme
1920
import co.nimblehq.sample.compose.ui.userReadableMessage
21+
import com.google.accompanist.permissions.*
2022

2123
@Composable
2224
fun HomeScreen(
@@ -37,13 +39,42 @@ fun HomeScreen(
3739
val showLoading: IsLoading by viewModel.showLoading.collectAsState()
3840
val uiModels: List<UiModel> by viewModel.uiModels.collectAsState()
3941

42+
CameraPermission()
43+
4044
HomeScreenContent(
4145
uiModels = uiModels,
4246
showLoading = showLoading,
4347
onItemClick = viewModel::navigateToSecond
4448
)
4549
}
4650

51+
/**
52+
* [CameraPermission] needs to be separate from [HomeScreenContent] to avoid re-composition
53+
*/
54+
@OptIn(ExperimentalPermissionsApi::class)
55+
@Composable
56+
private fun CameraPermission() {
57+
val context = LocalContext.current
58+
val cameraPermissionState = rememberPermissionState(CAMERA)
59+
if (cameraPermissionState.status.isGranted) {
60+
Toast.makeText(context, "${cameraPermissionState.permission} granted", Toast.LENGTH_SHORT).show()
61+
} else {
62+
if (cameraPermissionState.status.shouldShowRationale) {
63+
Toast.makeText(context, "${cameraPermissionState.permission} needs rationale", Toast.LENGTH_SHORT).show()
64+
} else {
65+
Toast.makeText(
66+
context,
67+
"Request cancelled, missing permissions in manifest or denied permanently",
68+
Toast.LENGTH_SHORT
69+
).show()
70+
}
71+
72+
LaunchedEffect(Unit) {
73+
cameraPermissionState.launchPermissionRequest()
74+
}
75+
}
76+
}
77+
4778
@Composable
4879
private fun HomeScreenContent(
4980
uiModels: List<UiModel>,

sample-compose/buildSrc/src/main/java/Versions.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ object Versions {
99
const val ANDROID_VERSION_NAME = "3.15.0"
1010

1111
// Dependencies (Alphabet sorted)
12+
const val ACCOMPANIST_PERMISSIONS_VERSION = "0.28.0"
1213
const val ANDROID_COMMON_KTX_VERSION = "0.1.1"
1314
const val ANDROID_CRYPTO_VERSION = "1.0.0"
1415
const val ANDROIDX_CORE_KTX_VERSION = "1.9.0"
@@ -33,8 +34,6 @@ object Versions {
3334

3435
const val OKHTTP_VERSION = "4.9.1"
3536

36-
const val PEKO_VERSION = "2.1.2"
37-
3837
const val RETROFIT_VERSION = "2.9.0"
3938

4039
const val TIMBER_LOG_VERSION = "4.7.1"

template-compose/app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ dependencies {
133133
implementation("org.jetbrains.kotlin:kotlin-stdlib:${Versions.KOTLIN_VERSION}")
134134
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.KOTLINX_COROUTINES_VERSION}")
135135

136-
implementation("com.markodevcic:peko:${Versions.PEKO_VERSION}")
136+
implementation("com.google.accompanist:accompanist-permissions:${Versions.ACCOMPANIST_PERMISSIONS_VERSION}")
137137

138138
kapt("com.google.dagger:hilt-compiler:${Versions.HILT_VERSION}")
139139

template-compose/buildSrc/src/main/java/Versions.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ object Versions {
99
const val ANDROID_VERSION_NAME = "1.0.0"
1010

1111
// Dependencies (Alphabet sorted)
12+
const val ACCOMPANIST_PERMISSIONS_VERSION = "0.28.0"
1213
const val ANDROID_COMMON_KTX_VERSION = "0.1.1"
1314
const val ANDROID_CRYPTO_VERSION = "1.0.0"
1415
const val ANDROIDX_CORE_KTX_VERSION = "1.9.0"
@@ -33,8 +34,6 @@ object Versions {
3334

3435
const val OKHTTP_VERSION = "4.9.1"
3536

36-
const val PEKO_VERSION = "2.1.2"
37-
3837
const val RETROFIT_VERSION = "2.9.0"
3938

4039
const val TIMBER_LOG_VERSION = "4.7.1"

0 commit comments

Comments
 (0)