feat: improve flow for getting MANAGE_EXTERNAL_STORAGE (#20)
This commit is contained in:
parent
9abc2db184
commit
d5a785190e
7 changed files with 58 additions and 82 deletions
|
|
@ -5,9 +5,8 @@
|
|||
|
||||
package com.aliucord.manager
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.*
|
||||
import android.provider.Settings
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.activity.compose.setContent
|
||||
|
|
@ -15,9 +14,9 @@ import androidx.compose.animation.*
|
|||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.core.net.toUri
|
||||
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.navigation.AppDestination
|
||||
import com.aliucord.manager.ui.screen.*
|
||||
import com.aliucord.manager.ui.theme.ManagerTheme
|
||||
|
|
@ -37,13 +36,6 @@ class MainActivity : ComponentActivity() {
|
|||
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
|
||||
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
||||
.setData("package:com.aliucord.manager".toUri())
|
||||
|
||||
startActivity(intent)
|
||||
}
|
||||
|
||||
setContent {
|
||||
ManagerTheme(
|
||||
isDarkTheme = preferences.theme == Theme.DARK || preferences.theme == Theme.SYSTEM && isSystemInDarkTheme(),
|
||||
|
|
@ -55,6 +47,8 @@ class MainActivity : ComponentActivity() {
|
|||
if (!navigator.pop()) finish()
|
||||
}
|
||||
|
||||
ManageStorageDialog()
|
||||
|
||||
Taxi(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
navigator = navigator,
|
||||
|
|
|
|||
|
|
@ -1,66 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2022 Juby210 & zt
|
||||
* Licensed under the Open Software License version 3.0
|
||||
*/
|
||||
|
||||
package com.aliucord.manager.ui.component
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.provider.Settings
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.aliucord.manager.BuildConfig
|
||||
import com.aliucord.manager.R
|
||||
import com.google.accompanist.permissions.ExperimentalPermissionsApi
|
||||
import com.google.accompanist.permissions.PermissionState
|
||||
|
||||
@OptIn(ExperimentalPermissionsApi::class)
|
||||
@Composable
|
||||
fun GrantPermission(permissionState: PermissionState) {
|
||||
Surface {
|
||||
Column(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
verticalArrangement = Arrangement.Center,
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(R.string.permission_required),
|
||||
style = MaterialTheme.typography.headlineMedium,
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
|
||||
Spacer(Modifier.height(8.dp))
|
||||
|
||||
Row {
|
||||
val context = LocalContext.current
|
||||
|
||||
Button(onClick = permissionState::launchPermissionRequest) {
|
||||
Text(stringResource(R.string.permission_grant))
|
||||
}
|
||||
|
||||
Spacer(Modifier.width(8.dp))
|
||||
|
||||
Button(
|
||||
onClick = {
|
||||
context.startActivity(
|
||||
Intent(
|
||||
/* action = */ Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
/* uri = */ Uri.fromParts("package", BuildConfig.APPLICATION_ID, null)
|
||||
)
|
||||
)
|
||||
}
|
||||
) {
|
||||
Text(stringResource(R.string.open_settings))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
* Licensed under the Open Software License version 3.0
|
||||
*/
|
||||
|
||||
package com.aliucord.manager.ui.component
|
||||
package com.aliucord.manager.ui.dialog
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
package com.aliucord.manager.ui.dialog
|
||||
|
||||
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.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import androidx.core.net.toUri
|
||||
import com.aliucord.manager.R
|
||||
|
||||
@Composable
|
||||
fun ManageStorageDialog() {
|
||||
var manageStorageGranted by remember { mutableStateOf(Environment.isExternalStorageManager()) }
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !manageStorageGranted) {
|
||||
AlertDialog(
|
||||
onDismissRequest = {},
|
||||
confirmButton = {
|
||||
val launcher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||
if (Environment.isExternalStorageManager())
|
||||
manageStorageGranted = true
|
||||
}
|
||||
|
||||
Button(
|
||||
onClick = {
|
||||
Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
||||
.setData("package:com.aliucord.manager".toUri())
|
||||
.let { launcher.launch(it) }
|
||||
},
|
||||
) {
|
||||
Text(stringResource(R.string.open_settings))
|
||||
}
|
||||
},
|
||||
title = { Text(stringResource(R.string.permissions_grant)) },
|
||||
text = { Text(stringResource(R.string.permissions_grant_body)) },
|
||||
properties = DialogProperties(
|
||||
dismissOnBackPress = false,
|
||||
dismissOnClickOutside = false
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -26,7 +26,8 @@ import androidx.paging.LoadState
|
|||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import androidx.paging.compose.items
|
||||
import com.aliucord.manager.R
|
||||
import com.aliucord.manager.ui.component.*
|
||||
import com.aliucord.manager.ui.dialog.DownloadMethod
|
||||
import com.aliucord.manager.ui.dialog.InstallerDialog
|
||||
import com.aliucord.manager.ui.viewmodel.HomeViewModel
|
||||
import org.koin.androidx.compose.getViewModel
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import androidx.compose.ui.Modifier
|
|||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.aliucord.manager.R
|
||||
import com.aliucord.manager.ui.component.DownloadMethod
|
||||
import com.aliucord.manager.ui.dialog.DownloadMethod
|
||||
import com.aliucord.manager.ui.viewmodel.InstallViewModel
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.koin.androidx.compose.getViewModel
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
<string name="commits">Commits</string>
|
||||
<string name="dex_location">Dex location</string>
|
||||
<string name="open_settings">Open settings</string>
|
||||
<string name="permission_required">You need to grant storage permission to use this app</string>
|
||||
<string name="permission_grant">Grant permission</string>
|
||||
<string name="replace_bg">Replace app icon with Aliucord variant</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="show_menu">Show menu</string>
|
||||
|
|
@ -51,4 +49,6 @@
|
|||
<string name="dynamic_color">Dynamic color</string>
|
||||
<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>
|
||||
</resources>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue