Skip to content

Commit ba186c0

Browse files
authored
Merge pull request #520 from KryptKode/feat/scoped-storage
Feat/scoped storage
2 parents 28f63a3 + de00b69 commit ba186c0

File tree

7 files changed

+350
-172
lines changed

7 files changed

+350
-172
lines changed

app/build.gradle

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ if (keystorePropertiesFile.exists()) {
99
}
1010

1111
android {
12-
compileSdkVersion 29
13-
buildToolsVersion "29.0.3"
12+
compileSdkVersion 30
1413

1514
defaultConfig {
1615
applicationId "com.simplemobiletools.filemanager.pro"
1716
minSdkVersion 21
18-
targetSdkVersion 29
17+
targetSdkVersion 30
1918
versionCode 110
2019
versionName "6.10.1"
2120
multiDexEnabled true
@@ -58,7 +57,7 @@ android {
5857
}
5958

6059
dependencies {
61-
implementation 'com.github.SimpleMobileTools:Simple-Commons:c184f98ca8'
60+
implementation 'com.github.SimpleMobileTools:Simple-Commons:4e6eeb901f'
6261
implementation 'com.github.Stericson:RootTools:df729dcb13'
6362
implementation 'com.github.Stericson:RootShell:1.6'
6463
implementation 'com.alexvasilkov:gesture-views:2.5.2'

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
88
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
9+
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
910

1011
<uses-feature
1112
android:name="android.hardware.faketouch"

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.simplemobiletools.filemanager.pro.activities
22

3+
import android.annotation.SuppressLint
34
import android.app.Activity
45
import android.app.SearchManager
56
import android.content.ClipData
@@ -8,13 +9,18 @@ import android.content.Intent
89
import android.graphics.drawable.ColorDrawable
910
import android.graphics.drawable.Drawable
1011
import android.media.RingtoneManager
12+
import android.net.Uri
1113
import android.os.Bundle
14+
import android.os.Environment
1215
import android.os.Handler
16+
import android.provider.Settings
1317
import android.view.Menu
1418
import android.view.MenuItem
1519
import androidx.appcompat.widget.SearchView
1620
import androidx.core.view.MenuItemCompat
1721
import androidx.viewpager.widget.ViewPager
22+
import com.simplemobiletools.commons.dialogs.ConfirmationAdvancedDialog
23+
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
1824
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
1925
import com.simplemobiletools.commons.extensions.*
2026
import com.simplemobiletools.commons.helpers.*
@@ -46,6 +52,7 @@ import java.util.*
4652

4753
class MainActivity : SimpleActivity() {
4854
private val BACK_PRESS_TIMEOUT = 5000
55+
private val MANAGE_STORAGE_RC = 201
4956
private val PICKED_PATH = "picked_path"
5057
private var isSearchOpen = false
5158
private var wasBackJustPressed = false
@@ -282,8 +289,8 @@ class MainActivity : SimpleActivity() {
282289
}
283290

284291
private fun tryInitFileManager() {
285-
val hadPermission = hasPermission(PERMISSION_WRITE_STORAGE)
286-
handlePermission(PERMISSION_WRITE_STORAGE) {
292+
val hadPermission = hasStoragePermission()
293+
handleStoragePermission {
287294
checkOTGPath()
288295
if (it) {
289296
if (main_view_pager.adapter == null) {
@@ -300,6 +307,56 @@ class MainActivity : SimpleActivity() {
300307
}
301308
}
302309

310+
@SuppressLint("InlinedApi")
311+
private fun handleStoragePermission(callback: (granted: Boolean) -> Unit) {
312+
actionOnPermission = null
313+
if (hasStoragePermission()) {
314+
callback(true)
315+
} else {
316+
if (isRPlus()) {
317+
ConfirmationAdvancedDialog(this, "", R.string.access_storage_prompt, R.string.ok, 0) { success ->
318+
if (success ) {
319+
isAskingPermissions = true
320+
actionOnPermission = callback
321+
try {
322+
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
323+
intent.addCategory("android.intent.category.DEFAULT")
324+
intent.data = Uri.parse("package:$packageName")
325+
startActivityForResult(intent, MANAGE_STORAGE_RC)
326+
} catch (e: Exception) {
327+
showErrorToast(e)
328+
val intent = Intent()
329+
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
330+
startActivityForResult(intent, MANAGE_STORAGE_RC)
331+
}
332+
} else {
333+
finish()
334+
}
335+
}
336+
} else {
337+
handlePermission(PERMISSION_WRITE_STORAGE, callback)
338+
}
339+
}
340+
}
341+
342+
@SuppressLint("NewApi")
343+
private fun hasStoragePermission(): Boolean {
344+
return if (isRPlus()) {
345+
Environment.isExternalStorageManager()
346+
} else {
347+
hasPermission(PERMISSION_WRITE_STORAGE)
348+
}
349+
}
350+
351+
@SuppressLint("NewApi")
352+
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
353+
super.onActivityResult(requestCode, resultCode, resultData)
354+
isAskingPermissions = false
355+
if (requestCode == MANAGE_STORAGE_RC && isRPlus()) {
356+
actionOnPermission?.invoke(Environment.isExternalStorageManager())
357+
}
358+
}
359+
303360
private fun initFileManager(refreshRecents: Boolean) {
304361
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
305362
val data = intent.data

0 commit comments

Comments
 (0)