Ask storage permissions only when using external volumes
This commit is contained in:
parent
9f8b653cc7
commit
9cf3e71fd2
@ -12,15 +12,15 @@ open class BaseActivity: CyaneaAppCompatActivity() {
|
|||||||
protected lateinit var sharedPrefs: SharedPreferences
|
protected lateinit var sharedPrefs: SharedPreferences
|
||||||
protected var isRecreating = false
|
protected var isRecreating = false
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
val themeColor = ThemeColor.getThemeColor(this)
|
||||||
|
if (cyanea.accent != themeColor){
|
||||||
|
changeThemeColor(themeColor)
|
||||||
|
}
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this)
|
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
if (!sharedPrefs.getBoolean("usf_screenshot", false)){
|
if (!sharedPrefs.getBoolean("usf_screenshot", false)){
|
||||||
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
|
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
|
||||||
}
|
}
|
||||||
val themeColor = ThemeColor.getThemeColor(this)
|
|
||||||
if (cyanea.accent != themeColor){
|
|
||||||
changeThemeColor(themeColor)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
fun changeThemeColor(themeColor: Int? = null){
|
fun changeThemeColor(themeColor: Int? = null){
|
||||||
val accentColor = themeColor ?: ThemeColor.getThemeColor(this)
|
val accentColor = themeColor ?: ThemeColor.getThemeColor(this)
|
||||||
|
@ -78,7 +78,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun pickDirectory(view: View?) {
|
fun pickDirectory(view: View?) {
|
||||||
safePickDirectory()
|
askPermissionThenPickDirectory()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDirectoryPicked(uri: Uri) {
|
override fun onDirectoryPicked(uri: Uri) {
|
||||||
|
@ -42,7 +42,7 @@ class CreateActivity : VolumeActionActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun pickDirectory(view: View?) {
|
fun pickDirectory(view: View?) {
|
||||||
safePickDirectory()
|
askPermissionThenPickDirectory()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDirectoryPicked(uri: Uri) {
|
override fun onDirectoryPicked(uri: Uri) {
|
||||||
|
@ -1,92 +1,32 @@
|
|||||||
package sushi.hardcore.droidfs
|
package sushi.hardcore.droidfs
|
||||||
|
|
||||||
import android.Manifest
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.view.Menu
|
||||||
import android.util.DisplayMetrics
|
import android.view.MenuItem
|
||||||
import android.view.*
|
import android.view.View
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import com.bumptech.glide.Glide
|
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
|
||||||
import kotlinx.android.synthetic.main.toolbar.*
|
import kotlinx.android.synthetic.main.toolbar.*
|
||||||
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
|
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
|
||||||
|
|
||||||
class MainActivity : BaseActivity() {
|
class MainActivity : BaseActivity() {
|
||||||
companion object {
|
|
||||||
private const val STORAGE_PERMISSIONS_REQUEST = 1
|
|
||||||
}
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
setSupportActionBar(toolbar)
|
setSupportActionBar(toolbar)
|
||||||
if (!isRecreating){
|
if (!isRecreating) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (sharedPrefs.getBoolean("applicationFirstOpening", true)){
|
||||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) +
|
ColoredAlertDialogBuilder(this)
|
||||||
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
.setTitle(R.string.warning)
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
.setMessage(R.string.usf_home_warning_msg)
|
||||||
requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE), STORAGE_PERMISSIONS_REQUEST)
|
.setCancelable(false)
|
||||||
} else {
|
.setPositiveButton(R.string.see_unsafe_features){ _, _ ->
|
||||||
onStoragePermissionGranted()
|
val intent = Intent(this, SettingsActivity::class.java)
|
||||||
}
|
intent.putExtra("screen", "UnsafeFeaturesSettingsFragment")
|
||||||
} else {
|
startActivity(intent)
|
||||||
onStoragePermissionGranted()
|
}
|
||||||
}
|
.setNegativeButton(R.string.ok, null)
|
||||||
}
|
.setOnDismissListener { sharedPrefs.edit().putBoolean("applicationFirstOpening", false).apply() }
|
||||||
}
|
.show()
|
||||||
|
|
||||||
private fun onStoragePermissionGranted(){
|
|
||||||
if (checkStorageAvailability()){
|
|
||||||
checkFirstOpening()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun checkStorageAvailability(): Boolean {
|
|
||||||
val state = Environment.getExternalStorageState()
|
|
||||||
val storageAvailable = Environment.MEDIA_MOUNTED == state || Environment.MEDIA_MOUNTED_READ_ONLY == state
|
|
||||||
return if (!storageAvailable) {
|
|
||||||
ColoredAlertDialogBuilder(this)
|
|
||||||
.setTitle(R.string.storage_unavailable)
|
|
||||||
.setMessage(R.string.storage_unavailable_msg)
|
|
||||||
.setCancelable(false)
|
|
||||||
.setPositiveButton(R.string.ok) { _, _ -> finish() }.show()
|
|
||||||
false
|
|
||||||
} else {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun checkFirstOpening() {
|
|
||||||
if (sharedPrefs.getBoolean("applicationFirstOpening", true)){
|
|
||||||
ColoredAlertDialogBuilder(this)
|
|
||||||
.setTitle(R.string.warning)
|
|
||||||
.setMessage(R.string.usf_home_warning_msg)
|
|
||||||
.setCancelable(false)
|
|
||||||
.setPositiveButton(R.string.see_unsafe_features){ _, _ ->
|
|
||||||
val intent = Intent(this, SettingsActivity::class.java)
|
|
||||||
intent.putExtra("screen", "UnsafeFeaturesSettingsFragment")
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
.setNegativeButton(R.string.ok, null)
|
|
||||||
.setOnDismissListener { sharedPrefs.edit().putBoolean("applicationFirstOpening", false).apply() }
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
|
|
||||||
when (requestCode) {
|
|
||||||
STORAGE_PERMISSIONS_REQUEST -> if (grantResults.size == 2) {
|
|
||||||
if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
ColoredAlertDialogBuilder(this)
|
|
||||||
.setTitle(R.string.storage_perm_denied)
|
|
||||||
.setMessage(R.string.storage_perm_denied_msg)
|
|
||||||
.setCancelable(false)
|
|
||||||
.setPositiveButton(R.string.ok) { _, _ -> finish() }.show()
|
|
||||||
} else {
|
|
||||||
onStoragePermissionGranted()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -107,8 +107,11 @@ class OpenActivity : VolumeActionActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun pickDirectory(view: View?) {
|
fun pickDirectory(view: View?) {
|
||||||
|
askPermissionThenPickDirectory()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPickingDirectory() {
|
||||||
isStartingActivity = true
|
isStartingActivity = true
|
||||||
safePickDirectory()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDirectoryPicked(uri: Uri) {
|
override fun onDirectoryPicked(uri: Uri) {
|
||||||
@ -253,10 +256,10 @@ class OpenActivity : VolumeActionActivity() {
|
|||||||
isFinishingIntentionally = true
|
isFinishingIntentionally = true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onStop() {
|
||||||
super.onPause()
|
super.onStop()
|
||||||
if (intent.action == "pick"){
|
if (intent.action == "pick"){
|
||||||
if (isStartingActivity){
|
if (isStartingActivity) {
|
||||||
isStartingActivity = false
|
isStartingActivity = false
|
||||||
} else {
|
} else {
|
||||||
finish()
|
finish()
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package sushi.hardcore.droidfs
|
package sushi.hardcore.droidfs
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.app.KeyguardManager
|
import android.app.KeyguardManager
|
||||||
import android.content.ActivityNotFoundException
|
import android.content.ActivityNotFoundException
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.pm.PackageManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.security.keystore.KeyGenParameterSpec
|
import android.security.keystore.KeyGenParameterSpec
|
||||||
@ -50,16 +52,32 @@ abstract class VolumeActionActivity : BaseActivity() {
|
|||||||
private lateinit var originalHiddenVolumeSectionLayoutParams: LinearLayout.LayoutParams
|
private lateinit var originalHiddenVolumeSectionLayoutParams: LinearLayout.LayoutParams
|
||||||
private lateinit var originalNormalVolumeSectionLayoutParams: LinearLayout.LayoutParams
|
private lateinit var originalNormalVolumeSectionLayoutParams: LinearLayout.LayoutParams
|
||||||
companion object {
|
companion object {
|
||||||
|
private const val STORAGE_PERMISSIONS_REQUEST = 0
|
||||||
private const val ANDROID_KEY_STORE = "AndroidKeyStore"
|
private const val ANDROID_KEY_STORE = "AndroidKeyStore"
|
||||||
private const val KEY_ALIAS = "Hash Key"
|
private const val KEY_ALIAS = "Hash Key"
|
||||||
private const val KEY_SIZE = 256
|
private const val KEY_SIZE = 256
|
||||||
private const val GCM_TAG_LEN = 128
|
private const val GCM_TAG_LEN = 128
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected open fun onPickingDirectory() {}
|
||||||
protected abstract fun onDirectoryPicked(uri: Uri)
|
protected abstract fun onDirectoryPicked(uri: Uri)
|
||||||
|
|
||||||
protected fun safePickDirectory() {
|
protected fun askPermissionThenPickDirectory() {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) +
|
||||||
|
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE), STORAGE_PERMISSIONS_REQUEST)
|
||||||
|
} else {
|
||||||
|
safePickDirectory()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
safePickDirectory()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun safePickDirectory() {
|
||||||
try {
|
try {
|
||||||
|
onPickingDirectory()
|
||||||
pickDirectory.launch(null)
|
pickDirectory.launch(null)
|
||||||
} catch (e: ActivityNotFoundException) {
|
} catch (e: ActivityNotFoundException) {
|
||||||
ColoredAlertDialogBuilder(this)
|
ColoredAlertDialogBuilder(this)
|
||||||
@ -70,6 +88,24 @@ abstract class VolumeActionActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||||
|
when (requestCode) {
|
||||||
|
STORAGE_PERMISSIONS_REQUEST -> if (grantResults.size == 2) {
|
||||||
|
if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
ColoredAlertDialogBuilder(this)
|
||||||
|
.setTitle(R.string.storage_perm_denied)
|
||||||
|
.setMessage(R.string.storage_perm_denied_msg)
|
||||||
|
.setCancelable(false)
|
||||||
|
.setPositiveButton(R.string.ok, null)
|
||||||
|
.show()
|
||||||
|
} else {
|
||||||
|
safePickDirectory()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected fun setupFingerprintStuff(){
|
protected fun setupFingerprintStuff(){
|
||||||
originalHiddenVolumeSectionLayoutParams = hidden_volume_section.layoutParams as LinearLayout.LayoutParams
|
originalHiddenVolumeSectionLayoutParams = hidden_volume_section.layoutParams as LinearLayout.LayoutParams
|
||||||
originalNormalVolumeSectionLayoutParams = normal_volume_section.layoutParams as LinearLayout.LayoutParams
|
originalNormalVolumeSectionLayoutParams = normal_volume_section.layoutParams as LinearLayout.LayoutParams
|
||||||
|
Loading…
Reference in New Issue
Block a user