Skip to content

Commit 94deca9

Browse files
committed
feat: Add Cat Editor storage permission compat
Signed-off-by: Hu Shenghao <[email protected]>
1 parent 2c4b3ce commit 94deca9

File tree

2 files changed

+51
-11
lines changed

2 files changed

+51
-11
lines changed

feature/cat-editor/src/main/java/com/dede/android_eggs/cat_editor/CatEditorScreen.kt

+4-11
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
1-
@file:OptIn(
2-
ExperimentalMaterial3Api::class, ExperimentalComposeApi::class,
3-
ExperimentalPermissionsApi::class
4-
)
1+
@file:OptIn(ExperimentalMaterial3Api::class, ExperimentalPermissionsApi::class)
52

63
package com.dede.android_eggs.cat_editor
74

8-
import android.util.Log
95
import androidx.compose.animation.Crossfade
106
import androidx.compose.foundation.layout.Box
117
import androidx.compose.foundation.layout.fillMaxSize
@@ -28,7 +24,6 @@ import androidx.compose.material3.MaterialTheme
2824
import androidx.compose.material3.Scaffold
2925
import androidx.compose.material3.Text
3026
import androidx.compose.runtime.Composable
31-
import androidx.compose.runtime.ExperimentalComposeApi
3227
import androidx.compose.runtime.LaunchedEffect
3328
import androidx.compose.runtime.getValue
3429
import androidx.compose.runtime.mutableLongStateOf
@@ -52,7 +47,6 @@ import com.dede.android_eggs.navigation.LocalNavController
5247
import com.dede.basic.toast
5348
import com.dede.basic.utils.ShareCatUtils
5449
import com.google.accompanist.permissions.ExperimentalPermissionsApi
55-
import com.google.accompanist.permissions.rememberMultiplePermissionsState
5650
import kotlinx.coroutines.launch
5751

5852
object CatEditorScreen : EasterEggsDestination {
@@ -117,7 +111,6 @@ fun CatEditorScreen() {
117111
val deferred = captureController.captureAsync()
118112
scope.launch {
119113
val bitmap = deferred.await().asAndroidBitmap()
120-
Log.i("CatEditorScreen", "saveCatToAlbum, w * h: ${bitmap.width} * ${bitmap.height}")
121114
val uri = ShareCatUtils.saveCat(context, bitmap, catName)
122115
if (uri != null) {
123116
context.toast("🐱")
@@ -128,8 +121,9 @@ fun CatEditorScreen() {
128121
}
129122
}
130123

131-
val storagePermissionState = rememberMultiplePermissionsState(
132-
ShareCatUtils.storagePermissions.toList(),
124+
val storagePermissionState = rememberMultiplePermissionsStateCompat(
125+
permissions = ShareCatUtils.storagePermissions,
126+
isNotRequire = ShareCatUtils.isNotRequireStoragePermissions,
133127
onPermissionsResult = { result ->
134128
if (result.all { it.value }) {
135129
saveCatToAlbum()
@@ -208,7 +202,6 @@ fun CatEditorScreen() {
208202
IconButton(
209203
onClick = {
210204
when {
211-
ShareCatUtils.isNotRequireStoragePermissions -> saveCatToAlbum()
212205
storagePermissionState.allPermissionsGranted -> saveCatToAlbum()
213206
storagePermissionState.shouldShowRationale -> context.toast("🚫")
214207
else -> storagePermissionState.launchMultiplePermissionRequest()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.dede.android_eggs.cat_editor
2+
3+
import android.os.Build
4+
import androidx.compose.runtime.Composable
5+
import androidx.compose.runtime.Stable
6+
import androidx.compose.runtime.remember
7+
import com.google.accompanist.permissions.ExperimentalPermissionsApi
8+
import com.google.accompanist.permissions.MultiplePermissionsState
9+
import com.google.accompanist.permissions.PermissionState
10+
import com.google.accompanist.permissions.PermissionStatus
11+
import com.google.accompanist.permissions.rememberMultiplePermissionsState
12+
13+
@ExperimentalPermissionsApi
14+
@Composable
15+
internal fun rememberMultiplePermissionsStateCompat(
16+
permissions: Array<String>,
17+
onPermissionsResult: (Map<String, Boolean>) -> Unit = {},
18+
previewPermissionStatuses: Map<String, PermissionStatus> = emptyMap(),
19+
isNotRequire: Boolean = false
20+
): MultiplePermissionsState {
21+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || isNotRequire) {
22+
return remember { AllPermissionsGrantedState(permissions) }
23+
}
24+
return rememberMultiplePermissionsState(
25+
permissions.toList(),
26+
onPermissionsResult,
27+
previewPermissionStatuses
28+
)
29+
}
30+
31+
@ExperimentalPermissionsApi
32+
@Stable
33+
private class AllPermissionsGrantedState(permissions: Array<String>) : MultiplePermissionsState {
34+
override val allPermissionsGranted: Boolean = true
35+
override val permissions: List<PermissionState> =
36+
permissions.map { PermissionsGrantedState(it) }
37+
override val revokedPermissions: List<PermissionState> = emptyList()
38+
override val shouldShowRationale: Boolean = false
39+
override fun launchMultiplePermissionRequest() {}
40+
}
41+
42+
@ExperimentalPermissionsApi
43+
@Stable
44+
private class PermissionsGrantedState(override val permission: String) : PermissionState {
45+
override val status: PermissionStatus = PermissionStatus.Granted
46+
override fun launchPermissionRequest() {}
47+
}

0 commit comments

Comments
 (0)