diff --git a/app/src/main/java/com/aurora/store/util/PathUtil.kt b/app/src/main/java/com/aurora/store/util/PathUtil.kt index 193fa2755..fae3779d4 100644 --- a/app/src/main/java/com/aurora/store/util/PathUtil.kt +++ b/app/src/main/java/com/aurora/store/util/PathUtil.kt @@ -63,7 +63,10 @@ object PathUtil { } fun getExternalPath(): String { - return Environment.getExternalStorageDirectory().toString() + "/Aurora/Store" + val auroraDir = + java.io.File("${Environment.getExternalStorageDirectory().absolutePath}/Aurora/Store") + auroraDir.mkdirs() + return auroraDir.absolutePath } fun getBaseCopyDirectory(): String { diff --git a/app/src/main/java/com/aurora/store/view/ui/spoof/SpoofActivity.kt b/app/src/main/java/com/aurora/store/view/ui/spoof/SpoofActivity.kt index 20a46fbf1..d652aca65 100644 --- a/app/src/main/java/com/aurora/store/view/ui/spoof/SpoofActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/spoof/SpoofActivity.kt @@ -19,14 +19,21 @@ package com.aurora.store.view.ui.spoof +import android.Manifest +import android.content.Intent +import android.content.pm.PackageManager import android.os.Bundle +import android.os.Environment +import android.provider.Settings import android.view.Menu import android.view.MenuItem +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.lifecycle.Lifecycle import androidx.viewpager2.adapter.FragmentStateAdapter -import com.aurora.extensions.close +import com.aurora.extensions.isRAndAbove import com.aurora.extensions.toast import com.aurora.store.R import com.aurora.store.data.providers.NativeDeviceInfoProvider @@ -44,6 +51,19 @@ class SpoofActivity : BaseActivity() { private lateinit var B: ActivityGenericPagerBinding + private val startForStorageManagerResult = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + if (isRAndAbove() && Environment.isExternalStorageManager()) { + exportDeviceConfig() + } else { + toast(R.string.permissions_denied) + } + } + private val startForPermissions = + registerForActivityResult(ActivityResultContracts.RequestPermission()) { + if (it) exportDeviceConfig() else toast(R.string.permissions_denied) + } + override fun onConnected() { } @@ -76,7 +96,25 @@ class SpoofActivity : BaseActivity() { return true } R.id.action_export -> { - exportDeviceConfig() + if (isRAndAbove()) { + if (Environment.isExternalStorageManager()) { + exportDeviceConfig() + } else { + startForStorageManagerResult.launch( + Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) + ) + } + } else { + if (ContextCompat.checkSelfPermission( + this, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) == PackageManager.PERMISSION_GRANTED + ) { + exportDeviceConfig() + } else { + startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE) + } + } } } return super.onOptionsItemSelected(item)