fix: request file perms on android <= 10 (#24)
This commit is contained in:
parent
1b607f5897
commit
e226e3cfe9
4 changed files with 42 additions and 10 deletions
|
|
@ -26,6 +26,7 @@
|
|||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:supportsRtl="true"
|
||||
tools:ignore="AllowBackup">
|
||||
<service android:name=".installer.service.InstallService" />
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import androidx.compose.foundation.layout.fillMaxSize
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import com.aliucord.manager.domain.manager.PreferencesManager
|
||||
import com.aliucord.manager.ui.dialog.ManageStorageDialog
|
||||
import com.aliucord.manager.ui.dialog.StoragePermissionsDialog
|
||||
import com.aliucord.manager.ui.navigation.AppDestination
|
||||
import com.aliucord.manager.ui.screen.*
|
||||
import com.aliucord.manager.ui.theme.ManagerTheme
|
||||
|
|
@ -46,9 +46,7 @@ class MainActivity : ComponentActivity() {
|
|||
if (!navigator.pop()) finish()
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
ManageStorageDialog()
|
||||
}
|
||||
StoragePermissionsDialog()
|
||||
|
||||
Taxi(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
package com.aliucord.manager.ui.dialog
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Environment
|
||||
import android.provider.Settings
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.res.stringResource
|
||||
|
|
@ -14,10 +14,19 @@ import androidx.compose.ui.window.DialogProperties
|
|||
import androidx.core.net.toUri
|
||||
import com.aliucord.manager.BuildConfig
|
||||
import com.aliucord.manager.R
|
||||
import com.google.accompanist.permissions.*
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
@Composable
|
||||
fun ManageStorageDialog() {
|
||||
fun StoragePermissionsDialog() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
ManageStorageDialog()
|
||||
} else {
|
||||
ExternalStorageDialog()
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun ManageStorageDialog() {
|
||||
var manageStorageGranted by remember { mutableStateOf(Environment.isExternalStorageManager()) }
|
||||
|
||||
if (!manageStorageGranted) {
|
||||
|
|
@ -25,8 +34,9 @@ fun ManageStorageDialog() {
|
|||
onDismissRequest = {},
|
||||
confirmButton = {
|
||||
val launcher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||
if (Environment.isExternalStorageManager())
|
||||
if (Environment.isExternalStorageManager()) {
|
||||
manageStorageGranted = true
|
||||
}
|
||||
}
|
||||
|
||||
Button(
|
||||
|
|
@ -34,7 +44,7 @@ fun ManageStorageDialog() {
|
|||
Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
||||
.setData("package:${BuildConfig.APPLICATION_ID}".toUri())
|
||||
.let { launcher.launch(it) }
|
||||
},
|
||||
}
|
||||
) {
|
||||
Text(stringResource(R.string.open_settings))
|
||||
}
|
||||
|
|
@ -48,3 +58,26 @@ fun ManageStorageDialog() {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalPermissionsApi::class)
|
||||
@Composable
|
||||
private fun ExternalStorageDialog() {
|
||||
val writeStorageState = rememberPermissionState(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
|
||||
if (!writeStorageState.status.isGranted) {
|
||||
AlertDialog(
|
||||
onDismissRequest = {},
|
||||
confirmButton = {
|
||||
Button(onClick = writeStorageState::launchPermissionRequest) {
|
||||
Text(stringResource(R.string.confirm))
|
||||
}
|
||||
},
|
||||
title = { Text(stringResource(R.string.permissions_grant)) },
|
||||
text = { Text(stringResource(R.string.permissions_grant_body)) },
|
||||
properties = DialogProperties(
|
||||
dismissOnBackPress = false,
|
||||
dismissOnClickOutside = false
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -50,5 +50,5 @@
|
|||
<string name="appearance">Appearance</string>
|
||||
<string name="advanced">Advanced</string>
|
||||
<string name="permissions_grant">Grant Permissions</string>
|
||||
<string name="permissions_grant_body">In order for Aliucord Manager to work properly, you need to grant file permissions. Since this device is above Android 10, MANAGE_EXTERNAL_STORAGE is required to access ~/Aliucord, where shared data is stored.</string>
|
||||
<string name="permissions_grant_body">In order for Aliucord Manager to work properly, you need to grant file permissions. Since shared data in stored in ~/Aliucord, permissions are required in order for manager to function.</string>
|
||||
</resources>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue