mark Android dir as restricted on API31+
This commit is contained in:
parent
c904c395a3
commit
edd859ad47
1 changed files with 24 additions and 8 deletions
|
@ -103,7 +103,7 @@ object PermissionManager {
|
||||||
if (relativeDir != null) {
|
if (relativeDir != null) {
|
||||||
val dirSegments = relativeDir.split(File.separator).takeWhile { it.isNotEmpty() }
|
val dirSegments = relativeDir.split(File.separator).takeWhile { it.isNotEmpty() }
|
||||||
val primaryDir = dirSegments.firstOrNull()
|
val primaryDir = dirSegments.firstOrNull()
|
||||||
if (primaryDir == Environment.DIRECTORY_DOWNLOADS && dirSegments.size > 1) {
|
if (getRestrictedPrimaryDirectories().contains(primaryDir) && dirSegments.size > 1) {
|
||||||
// request secondary directory (if any) for restricted primary directory
|
// request secondary directory (if any) for restricted primary directory
|
||||||
dirSet.add(dirSegments.take(2).joinToString(File.separator))
|
dirSet.add(dirSegments.take(2).joinToString(File.separator))
|
||||||
} else {
|
} else {
|
||||||
|
@ -185,11 +185,25 @@ object PermissionManager {
|
||||||
return accessibleDirs
|
return accessibleDirs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getRestrictedPrimaryDirectories(): List<String> {
|
||||||
|
val dirs = ArrayList<String>()
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
|
// cf https://developer.android.com/about/versions/11/privacy/storage#directory-access
|
||||||
|
dirs.add(Environment.DIRECTORY_DOWNLOADS)
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
// by observation, no documentation
|
||||||
|
dirs.add("Android")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dirs
|
||||||
|
}
|
||||||
|
|
||||||
|
// cf https://developer.android.com/about/versions/11/privacy/storage#directory-access
|
||||||
fun getRestrictedDirectories(context: Context): List<Map<String, String>> {
|
fun getRestrictedDirectories(context: Context): List<Map<String, String>> {
|
||||||
val dirs = ArrayList<Map<String, String>>()
|
val dirs = ArrayList<Map<String, String>>()
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
// cf https://developer.android.com/about/versions/11/privacy/storage#directory-access
|
|
||||||
val volumePaths = StorageUtils.getVolumePaths(context)
|
val volumePaths = StorageUtils.getVolumePaths(context)
|
||||||
dirs.addAll(volumePaths.map {
|
dirs.addAll(volumePaths.map {
|
||||||
hashMapOf(
|
hashMapOf(
|
||||||
|
@ -197,12 +211,14 @@ object PermissionManager {
|
||||||
"relativeDir" to "",
|
"relativeDir" to "",
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
dirs.addAll(volumePaths.map {
|
for (relativeDir in getRestrictedPrimaryDirectories()) {
|
||||||
hashMapOf(
|
dirs.addAll(volumePaths.map {
|
||||||
"volumePath" to it,
|
hashMapOf(
|
||||||
"relativeDir" to Environment.DIRECTORY_DOWNLOADS,
|
"volumePath" to it,
|
||||||
)
|
"relativeDir" to relativeDir,
|
||||||
})
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT
|
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT
|
||||||
|| Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT_WATCH
|
|| Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT_WATCH
|
||||||
) {
|
) {
|
||||||
|
|
Loading…
Reference in a new issue