Close volume onPause from camera and cross-imports

This commit is contained in:
Hardcore Sushi 2020-08-09 17:01:47 +02:00
parent 9c2da04a11
commit 0518a2a030
6 changed files with 74 additions and 23 deletions

View File

@ -15,7 +15,7 @@ android {
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 1 versionCode 1
versionName "1.1.3" versionName "1.1.4"
ndk { ndk {
abiFilters 'x86_64', 'armeabi-v7a', 'arm64-v8a' abiFilters 'x86_64', 'armeabi-v7a', 'arm64-v8a'

View File

@ -1,7 +1,6 @@
package sushi.hardcore.droidfs package sushi.hardcore.droidfs
import android.graphics.Color import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.text.InputType import android.text.InputType
import android.view.View import android.view.View
@ -13,18 +12,16 @@ import com.otaliastudios.cameraview.PictureResult
import com.otaliastudios.cameraview.controls.Facing import com.otaliastudios.cameraview.controls.Facing
import com.otaliastudios.cameraview.controls.Flash import com.otaliastudios.cameraview.controls.Flash
import kotlinx.android.synthetic.main.activity_camera.* import kotlinx.android.synthetic.main.activity_camera.*
import sushi.hardcore.droidfs.provider.RestrictedFileProvider
import sushi.hardcore.droidfs.util.GocryptfsVolume import sushi.hardcore.droidfs.util.GocryptfsVolume
import sushi.hardcore.droidfs.util.MiscUtils import sushi.hardcore.droidfs.util.MiscUtils
import sushi.hardcore.droidfs.util.PathUtils import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.ThemeColor
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.FileOutputStream
import java.io.InputStream
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
class CameraActivity : AppCompatActivity() { class CameraActivity : BaseActivity() {
companion object { companion object {
private val flashModes = listOf(Flash.AUTO, Flash.ON, Flash.OFF) private val flashModes = listOf(Flash.AUTO, Flash.ON, Flash.OFF)
private const val fileNameRandomMin = 100000 private const val fileNameRandomMin = 100000
@ -45,6 +42,7 @@ class CameraActivity : AppCompatActivity() {
private lateinit var gocryptfsVolume: GocryptfsVolume private lateinit var gocryptfsVolume: GocryptfsVolume
private lateinit var outputDirectory: String private lateinit var outputDirectory: String
private lateinit var fileName: String private lateinit var fileName: String
private var isFinishingIntentionally = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_camera) setContentView(R.layout.activity_camera)
@ -135,4 +133,22 @@ class CameraActivity : AppCompatActivity() {
dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
dialog.show() dialog.show()
} }
override fun onDestroy() {
super.onDestroy()
if (!isFinishingIntentionally) {
gocryptfsVolume.close()
RestrictedFileProvider.wipeAll(this)
}
}
override fun onPause() {
super.onPause()
finish()
}
override fun onBackPressed() {
super.onBackPressed()
isFinishingIntentionally = true
}
} }

View File

@ -4,22 +4,18 @@ import android.app.Activity
import android.content.Intent import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem
import android.view.View import android.view.View
import android.widget.AdapterView.OnItemClickListener import android.widget.AdapterView.OnItemClickListener
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_open.checkbox_remember_path import kotlinx.android.synthetic.main.activity_open.*
import kotlinx.android.synthetic.main.activity_open.checkbox_save_password
import kotlinx.android.synthetic.main.activity_open.edit_password
import kotlinx.android.synthetic.main.activity_open.edit_volume_path
import kotlinx.android.synthetic.main.activity_open.saved_path_listview
import kotlinx.android.synthetic.main.toolbar.* import kotlinx.android.synthetic.main.toolbar.*
import sushi.hardcore.droidfs.adapters.SavedVolumesAdapter import sushi.hardcore.droidfs.adapters.SavedVolumesAdapter
import sushi.hardcore.droidfs.explorers.ExplorerActivity import sushi.hardcore.droidfs.explorers.ExplorerActivity
import sushi.hardcore.droidfs.explorers.ExplorerActivityDrop import sushi.hardcore.droidfs.explorers.ExplorerActivityDrop
import sushi.hardcore.droidfs.explorers.ExplorerActivityPick import sushi.hardcore.droidfs.explorers.ExplorerActivityPick
import sushi.hardcore.droidfs.fingerprint_stuff.FingerprintPasswordHashSaver import sushi.hardcore.droidfs.fingerprint_stuff.FingerprintPasswordHashSaver
import sushi.hardcore.droidfs.provider.RestrictedFileProvider
import sushi.hardcore.droidfs.util.* import sushi.hardcore.droidfs.util.*
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import java.io.File import java.io.File
@ -33,6 +29,7 @@ class OpenActivity : BaseActivity() {
private lateinit var fingerprintPasswordHashSaver: FingerprintPasswordHashSaver private lateinit var fingerprintPasswordHashSaver: FingerprintPasswordHashSaver
private lateinit var rootCipherDir: String private lateinit var rootCipherDir: String
private var sessionID = -1 private var sessionID = -1
private var isFinishingIntentionally = false
private var usf_fingerprint = false private var usf_fingerprint = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -65,6 +62,17 @@ class OpenActivity : BaseActivity() {
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when(item.itemId){
android.R.id.home -> {
isFinishingIntentionally = true
finish()
true
}
else -> super.onOptionsItemSelected(item)
}
}
fun pickDirectory(view: View?) { fun pickDirectory(view: View?) {
val i = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) val i = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
startActivityForResult(i, PICK_DIRECTORY_REQUEST_CODE) startActivityForResult(i, PICK_DIRECTORY_REQUEST_CODE)
@ -154,6 +162,7 @@ class OpenActivity : BaseActivity() {
explorerIntent.putExtras(intent.extras!!) //forward extras explorerIntent.putExtras(intent.extras!!) //forward extras
} else if (currentIntentAction == "pick") { //pick items to import } else if (currentIntentAction == "pick") { //pick items to import
explorerIntent = Intent(this, ExplorerActivityPick::class.java) explorerIntent = Intent(this, ExplorerActivityPick::class.java)
explorerIntent.putExtra("originalSessionID", intent.getIntExtra("sessionID", -1))
explorerIntent.flags = Intent.FLAG_ACTIVITY_FORWARD_RESULT explorerIntent.flags = Intent.FLAG_ACTIVITY_FORWARD_RESULT
} }
} }
@ -163,6 +172,7 @@ class OpenActivity : BaseActivity() {
explorerIntent.putExtra("sessionID", sessionID) explorerIntent.putExtra("sessionID", sessionID)
explorerIntent.putExtra("volume_name", File(rootCipherDir).name) explorerIntent.putExtra("volume_name", File(rootCipherDir).name)
startActivity(explorerIntent) startActivity(explorerIntent)
isFinishingIntentionally = true
finish() finish()
} }
@ -182,8 +192,16 @@ class OpenActivity : BaseActivity() {
} }
} }
override fun onBackPressed() {
super.onBackPressed()
isFinishingIntentionally = true
}
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
if (intent.action == "pick"){
finish()
}
if (::fingerprintPasswordHashSaver.isInitialized && fingerprintPasswordHashSaver.isListening){ if (::fingerprintPasswordHashSaver.isInitialized && fingerprintPasswordHashSaver.isListening){
fingerprintPasswordHashSaver.stopListening() fingerprintPasswordHashSaver.stopListening()
if (fingerprintPasswordHashSaver.fingerprintFragment.isAdded){ if (fingerprintPasswordHashSaver.fingerprintFragment.isAdded){
@ -195,5 +213,12 @@ class OpenActivity : BaseActivity() {
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
Wiper.wipeEditText(edit_password) Wiper.wipeEditText(edit_password)
if (intent.action == "pick" && !isFinishingIntentionally){
val sessionID = intent.getIntExtra("sessionID", -1)
if (sessionID != -1){
GocryptfsVolume(sessionID).close()
RestrictedFileProvider.wipeAll(this)
}
}
} }
} }

View File

@ -81,6 +81,7 @@ class ExplorerActivity : BaseExplorerActivity() {
"importFromOtherVolumes" -> { "importFromOtherVolumes" -> {
val intent = Intent(this, OpenActivity::class.java) val intent = Intent(this, OpenActivity::class.java)
intent.action = "pick" intent.action = "pick"
intent.putExtra("sessionID", gocryptfsVolume.sessionID)
isStartingActivity = true isStartingActivity = true
startActivityForResult(intent, PICK_OTHER_VOLUME_ITEMS_REQUEST_CODE) startActivityForResult(intent, PICK_OTHER_VOLUME_ITEMS_REQUEST_CODE)
} }

View File

@ -5,12 +5,13 @@ import android.content.Intent
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import sushi.hardcore.droidfs.R import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.provider.RestrictedFileProvider import sushi.hardcore.droidfs.util.GocryptfsVolume
import sushi.hardcore.droidfs.util.PathUtils import sushi.hardcore.droidfs.util.PathUtils
import java.util.* import java.util.*
class ExplorerActivityPick : BaseExplorerActivity() { class ExplorerActivityPick : BaseExplorerActivity() {
private var resultIntent = Intent() private var resultIntent = Intent()
private var isFinishingIntentionally = false
override fun init() { override fun init() {
super.init() super.init()
resultIntent.putExtra("sessionID", gocryptfsVolume.sessionID) resultIntent.putExtra("sessionID", gocryptfsVolume.sessionID)
@ -21,16 +22,16 @@ class ExplorerActivityPick : BaseExplorerActivity() {
explorerAdapter.onItemClick(position) explorerAdapter.onItemClick(position)
if (explorerAdapter.selectedItems.isEmpty()) { if (explorerAdapter.selectedItems.isEmpty()) {
if (!wasSelecting) { if (!wasSelecting) {
val full_path = PathUtils.path_join(currentDirectoryPath, explorerElements[position].name) val fullPath = PathUtils.path_join(currentDirectoryPath, explorerElements[position].name)
when { when {
explorerElements[position].isDirectory -> { explorerElements[position].isDirectory -> {
setCurrentPath(full_path) setCurrentPath(fullPath)
} }
explorerElements[position].isParentFolder -> { explorerElements[position].isParentFolder -> {
setCurrentPath(PathUtils.getParentPath(currentDirectoryPath)) setCurrentPath(PathUtils.getParentPath(currentDirectoryPath))
} }
else -> { else -> {
resultIntent.putExtra("path", full_path) resultIntent.putExtra("path", fullPath)
returnActivityResult() returnActivityResult()
} }
} }
@ -74,15 +75,23 @@ class ExplorerActivityPick : BaseExplorerActivity() {
private fun returnActivityResult() { private fun returnActivityResult() {
setResult(Activity.RESULT_OK, resultIntent) setResult(Activity.RESULT_OK, resultIntent)
isFinishingIntentionally = true
finish() finish()
} }
override fun closeVolumeOnDestroy() { override fun closeVolumeOnDestroy() {
//don't close volume if (!isFinishingIntentionally){
RestrictedFileProvider.wipeAll(this) val sessionID = intent.getIntExtra("originalSessionID", -1)
if (sessionID != -1){
val v = GocryptfsVolume(sessionID)
v.close()
}
super.closeVolumeOnDestroy()
}
} }
override fun closeVolumeOnUserExit() { override fun closeVolumeOnUserExit() {
isFinishingIntentionally = true
super.closeVolumeOnUserExit() super.closeVolumeOnUserExit()
super.closeVolumeOnDestroy() super.closeVolumeOnDestroy()
} }

View File

@ -11,7 +11,7 @@ import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
abstract class FileViewerActivity: BaseActivity() { abstract class FileViewerActivity: BaseActivity() {
lateinit var gocryptfsVolume: GocryptfsVolume lateinit var gocryptfsVolume: GocryptfsVolume
lateinit var filePath: String lateinit var filePath: String
private var isGoingBackToExplorer = false private var isFinishingIntentionally = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
filePath = intent.getStringExtra("path")!! filePath = intent.getStringExtra("path")!!
@ -85,13 +85,13 @@ abstract class FileViewerActivity: BaseActivity() {
} }
protected fun goBackToExplorer(){ protected fun goBackToExplorer(){
isGoingBackToExplorer = true isFinishingIntentionally = true
finish() finish()
} }
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
if (!isGoingBackToExplorer) { if (!isFinishingIntentionally) {
gocryptfsVolume.close() gocryptfsVolume.close()
RestrictedFileProvider.wipeAll(this) RestrictedFileProvider.wipeAll(this)
} }
@ -104,6 +104,6 @@ abstract class FileViewerActivity: BaseActivity() {
override fun onBackPressed() { override fun onBackPressed() {
super.onBackPressed() super.onBackPressed()
isGoingBackToExplorer = true isFinishingIntentionally = true
} }
} }