11package org.fossify.filemanager.activities
22
3+ import android.annotation.SuppressLint
34import android.content.Intent
45import android.net.Uri
56import android.os.Bundle
7+ import android.os.Environment
8+ import androidx.core.net.toUri
69import org.fossify.commons.dialogs.FilePickerDialog
710import org.fossify.commons.extensions.*
811import org.fossify.commons.helpers.NavigationIcon
912import org.fossify.commons.helpers.ensureBackgroundThread
13+ import org.fossify.commons.helpers.isRPlus
1014import org.fossify.filemanager.R
1115import org.fossify.filemanager.databinding.ActivitySaveAsBinding
1216import org.fossify.filemanager.extensions.config
@@ -15,9 +19,18 @@ import java.io.File
1519class SaveAsActivity : SimpleActivity () {
1620 private val binding by viewBinding(ActivitySaveAsBinding ::inflate)
1721
22+ companion object {
23+ private const val MANAGE_STORAGE_RC = 201
24+ }
25+
1826 override fun onCreate (savedInstanceState : Bundle ? ) {
1927 super .onCreate(savedInstanceState)
20- setContentView(binding.root)
28+ if (isRPlus() && ! Environment .isExternalStorageManager()) {
29+ val intent = Intent (android.provider.Settings .ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION )
30+ intent.data = " package:$packageName " .toUri()
31+ startActivityForResult(intent, MANAGE_STORAGE_RC )
32+ return
33+ }
2134
2235 if (intent.action == Intent .ACTION_SEND && intent.extras?.containsKey(Intent .EXTRA_STREAM ) == true ) {
2336 FilePickerDialog (this , pickFile = false , showHidden = config.shouldShowHidden(), showFAB = true , showFavoritesButton = true ) {
@@ -72,4 +85,18 @@ class SaveAsActivity : SimpleActivity() {
7285 return filename.replace(" [/\\\\ <>:\" |?*\u0000 -\u001F ]" .toRegex(), " _" )
7386 .takeIf { it.isNotBlank() } ? : " unnamed_file"
7487 }
88+
89+ @SuppressLint(" NewApi" )
90+ override fun onActivityResult (requestCode : Int , resultCode : Int , dataIntent : Intent ? ) {
91+ super .onActivityResult(requestCode, resultCode, dataIntent)
92+
93+ if (requestCode == MANAGE_STORAGE_RC && isRPlus()) {
94+ if (Environment .isExternalStorageManager()) {
95+ recreate()
96+ } else {
97+ toast(R .string.no_storage_permissions)
98+ finish()
99+ }
100+ }
101+ }
75102}
0 commit comments