diff --git a/app/src/main/java/sushi/hardcore/droidfs/CreateActivity.kt b/app/src/main/java/sushi/hardcore/droidfs/CreateActivity.kt
index 7488f9f..e8b619b 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/CreateActivity.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/CreateActivity.kt
@@ -191,6 +191,15 @@ class CreateActivity : VolumeActionActivity() {
}
}
+ override fun onPause() {
+ super.onPause()
+ //Closing volume if leaving activity while showing dialog
+ if (sessionID != -1){
+ GocryptfsVolume(sessionID).close()
+ finish()
+ }
+ }
+
override fun onDestroy() {
super.onDestroy()
Wiper.wipeEditText(edit_password)
diff --git a/app/src/main/java/sushi/hardcore/droidfs/OpenActivity.kt b/app/src/main/java/sushi/hardcore/droidfs/OpenActivity.kt
index e72d45f..73bc52f 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/OpenActivity.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/OpenActivity.kt
@@ -163,8 +163,12 @@ class OpenActivity : VolumeActionActivity() {
}
if (checkbox_save_password.isChecked && returnedHash != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
stopTask {
- savePasswordHash(returnedHash) {
- startExplorer()
+ savePasswordHash(returnedHash) { success ->
+ if (success){
+ startExplorer()
+ } else {
+ GocryptfsVolume(sessionID).close()
+ }
}
}
} else {
diff --git a/app/src/main/java/sushi/hardcore/droidfs/VolumeActionActivity.kt b/app/src/main/java/sushi/hardcore/droidfs/VolumeActionActivity.kt
index 6ea3200..be6a893 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/VolumeActionActivity.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/VolumeActionActivity.kt
@@ -3,7 +3,6 @@ package sushi.hardcore.droidfs
import android.app.KeyguardManager
import android.content.Context
import android.os.Build
-import android.os.Bundle
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyPermanentlyInvalidatedException
import android.security.keystore.KeyProperties
@@ -54,13 +53,20 @@ open class VolumeActionActivity : BaseActivity() {
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
Toast.makeText(applicationContext, errString, Toast.LENGTH_SHORT).show()
+ if (actionMode == Cipher.ENCRYPT_MODE){
+ onAuthenticationResult(false)
+ }
}
override fun onAuthenticationFailed() {
super.onAuthenticationFailed()
Toast.makeText(applicationContext, R.string.authentication_failed, Toast.LENGTH_SHORT).show()
+ if (actionMode == Cipher.ENCRYPT_MODE){
+ onAuthenticationResult(false)
+ }
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
+ var success = false
val cipherObject = result.cryptoObject?.cipher
if (cipherObject != null){
try {
@@ -72,7 +78,7 @@ open class VolumeActionActivity : BaseActivity() {
val sharedPrefsEditor = sharedPrefs.edit()
sharedPrefsEditor.putString(rootCipherDir, "$encodedIv:$encodedCipherText")
sharedPrefsEditor.apply()
- onAuthenticationResult(true)
+ success = true
}
Cipher.DECRYPT_MODE -> {
try {
@@ -103,6 +109,9 @@ open class VolumeActionActivity : BaseActivity() {
} else {
Toast.makeText(applicationContext, R.string.error_cipher_null, Toast.LENGTH_SHORT).show()
}
+ if (actionMode == Cipher.ENCRYPT_MODE){
+ onAuthenticationResult(success)
+ }
}
}
biometricPrompt = BiometricPrompt(this, executor, callback)
diff --git a/app/src/main/java/sushi/hardcore/droidfs/explorers/BaseExplorerActivity.kt b/app/src/main/java/sushi/hardcore/droidfs/explorers/BaseExplorerActivity.kt
index 50ac5e0..c38ce77 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/explorers/BaseExplorerActivity.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/explorers/BaseExplorerActivity.kt
@@ -56,9 +56,11 @@ open class BaseExplorerActivity : BaseActivity() {
private var isCreating = true
protected var isStartingActivity = false
private var usf_open = false
+ protected var usf_keep_open = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
usf_open = sharedPrefs.getBoolean("usf_open", false)
+ usf_keep_open = sharedPrefs.getBoolean("usf_keep_open", false)
val intent = intent
volumeName = intent.getStringExtra("volume_name") ?: ""
val sessionID = intent.getIntExtra("sessionID", -1)
@@ -434,7 +436,7 @@ open class BaseExplorerActivity : BaseActivity() {
if (!isChangingConfigurations){
if (isStartingActivity){
isStartingActivity = false
- } else {
+ } else if (!usf_keep_open){
finish()
}
}
diff --git a/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivityPick.kt b/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivityPick.kt
index 7a0e3cd..d5f2fe3 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivityPick.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivityPick.kt
@@ -80,7 +80,7 @@ class ExplorerActivityPick : BaseExplorerActivity() {
}
override fun closeVolumeOnDestroy() {
- if (!isFinishingIntentionally){
+ if (!isFinishingIntentionally && !usf_keep_open){
val sessionID = intent.getIntExtra("originalSessionID", -1)
if (sessionID != -1){
val v = GocryptfsVolume(sessionID)
diff --git a/app/src/main/java/sushi/hardcore/droidfs/file_viewers/FileViewerActivity.kt b/app/src/main/java/sushi/hardcore/droidfs/file_viewers/FileViewerActivity.kt
index bffc007..deccf66 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/file_viewers/FileViewerActivity.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/file_viewers/FileViewerActivity.kt
@@ -12,11 +12,13 @@ abstract class FileViewerActivity: BaseActivity() {
lateinit var gocryptfsVolume: GocryptfsVolume
lateinit var filePath: String
private var isFinishingIntentionally = false
+ protected var usf_keep_open = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
filePath = intent.getStringExtra("path")!!
val sessionID = intent.getIntExtra("sessionID", -1)
gocryptfsVolume = GocryptfsVolume(sessionID)
+ usf_keep_open = sharedPrefs.getBoolean("usf_keep_open", false)
hideSystemUi()
viewFile()
}
@@ -99,7 +101,9 @@ abstract class FileViewerActivity: BaseActivity() {
override fun onPause() {
super.onPause()
- finish()
+ if (!usf_keep_open) {
+ finish()
+ }
}
override fun onBackPressed() {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 08de5bd..138f957 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -97,6 +97,7 @@
Allow screenshots
Allow saving password hash using fingerprint
Volume Management
+ Keep volume open when the app goes in background
Unsafe Features
Manage unsafe features
Enable/Disable unsafe features
diff --git a/app/src/main/res/xml/unsafe_features_preferences.xml b/app/src/main/res/xml/unsafe_features_preferences.xml
index 0cbc737..5b07d1e 100644
--- a/app/src/main/res/xml/unsafe_features_preferences.xml
+++ b/app/src/main/res/xml/unsafe_features_preferences.xml
@@ -31,6 +31,12 @@
android:title="@string/usf_share"
android:defaultValue="false"/>
+
+