2020-07-17 16:35:39 +02:00
|
|
|
package sushi.hardcore.droidfs.explorers
|
|
|
|
|
|
|
|
import android.app.Activity
|
|
|
|
import android.content.Intent
|
|
|
|
import android.view.Menu
|
|
|
|
import android.view.MenuItem
|
|
|
|
import sushi.hardcore.droidfs.R
|
2020-12-31 13:15:13 +01:00
|
|
|
import sushi.hardcore.droidfs.GocryptfsVolume
|
2020-07-26 21:16:06 +02:00
|
|
|
import sushi.hardcore.droidfs.util.PathUtils
|
2020-07-17 16:35:39 +02:00
|
|
|
import java.util.*
|
|
|
|
|
2020-07-19 21:46:29 +02:00
|
|
|
class ExplorerActivityPick : BaseExplorerActivity() {
|
2020-08-08 14:09:34 +02:00
|
|
|
private var resultIntent = Intent()
|
2020-08-09 17:01:47 +02:00
|
|
|
private var isFinishingIntentionally = false
|
2020-07-17 16:35:39 +02:00
|
|
|
override fun init() {
|
|
|
|
super.init()
|
2020-08-08 14:09:34 +02:00
|
|
|
resultIntent.putExtra("sessionID", gocryptfsVolume.sessionID)
|
2020-07-17 16:35:39 +02:00
|
|
|
}
|
|
|
|
|
2020-12-29 17:05:02 +01:00
|
|
|
override fun bindFileOperationService() {
|
|
|
|
//don't bind
|
|
|
|
}
|
|
|
|
|
2020-07-17 16:35:39 +02:00
|
|
|
override fun onExplorerItemClick(position: Int) {
|
2020-07-26 21:16:06 +02:00
|
|
|
val wasSelecting = explorerAdapter.selectedItems.isNotEmpty()
|
|
|
|
if (explorerAdapter.selectedItems.isEmpty()) {
|
2020-07-17 16:35:39 +02:00
|
|
|
if (!wasSelecting) {
|
2020-11-03 17:22:09 +01:00
|
|
|
val fullPath = PathUtils.pathJoin(currentDirectoryPath, explorerElements[position].name)
|
2020-07-17 16:35:39 +02:00
|
|
|
when {
|
2020-07-26 21:16:06 +02:00
|
|
|
explorerElements[position].isDirectory -> {
|
2020-08-09 17:01:47 +02:00
|
|
|
setCurrentPath(fullPath)
|
2020-07-17 16:35:39 +02:00
|
|
|
}
|
2020-07-26 21:16:06 +02:00
|
|
|
explorerElements[position].isParentFolder -> {
|
2020-08-01 15:39:00 +02:00
|
|
|
setCurrentPath(PathUtils.getParentPath(currentDirectoryPath))
|
2020-07-17 16:35:39 +02:00
|
|
|
}
|
|
|
|
else -> {
|
2020-08-09 17:01:47 +02:00
|
|
|
resultIntent.putExtra("path", fullPath)
|
2020-07-26 21:16:06 +02:00
|
|
|
returnActivityResult()
|
2020-07-17 16:35:39 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
invalidateOptionsMenu()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
|
|
|
menuInflater.inflate(R.menu.explorer_pick, menu)
|
2020-07-18 18:44:53 +02:00
|
|
|
handleMenuItems(menu)
|
2020-08-08 14:09:34 +02:00
|
|
|
val anyItemSelected = explorerAdapter.selectedItems.isNotEmpty()
|
|
|
|
menu.findItem(R.id.select_all).isVisible = anyItemSelected
|
|
|
|
menu.findItem(R.id.validate).isVisible = anyItemSelected
|
2020-07-17 16:35:39 +02:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
|
return when (item.itemId) {
|
2020-08-01 15:39:00 +02:00
|
|
|
R.id.select_all -> {
|
2020-07-26 21:16:06 +02:00
|
|
|
explorerAdapter.selectAll()
|
2020-07-17 16:35:39 +02:00
|
|
|
invalidateOptionsMenu()
|
|
|
|
true
|
|
|
|
}
|
2020-08-01 15:39:00 +02:00
|
|
|
R.id.validate -> {
|
2020-07-17 16:35:39 +02:00
|
|
|
val paths = ArrayList<String>()
|
|
|
|
val types = ArrayList<Int>()
|
2020-07-26 21:16:06 +02:00
|
|
|
for (i in explorerAdapter.selectedItems) {
|
|
|
|
val e = explorerElements[i]
|
2020-11-03 17:22:09 +01:00
|
|
|
paths.add(PathUtils.pathJoin(currentDirectoryPath, e.name))
|
2020-07-17 16:35:39 +02:00
|
|
|
types.add(e.elementType.toInt())
|
|
|
|
}
|
2020-08-08 14:09:34 +02:00
|
|
|
resultIntent.putStringArrayListExtra("paths", paths)
|
|
|
|
resultIntent.putIntegerArrayListExtra("types", types)
|
2020-07-26 21:16:06 +02:00
|
|
|
returnActivityResult()
|
2020-07-17 16:35:39 +02:00
|
|
|
true
|
|
|
|
}
|
|
|
|
else -> super.onOptionsItemSelected(item)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-26 21:16:06 +02:00
|
|
|
private fun returnActivityResult() {
|
2020-08-08 14:09:34 +02:00
|
|
|
setResult(Activity.RESULT_OK, resultIntent)
|
2020-08-09 17:01:47 +02:00
|
|
|
isFinishingIntentionally = true
|
2020-07-17 16:35:39 +02:00
|
|
|
finish()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun closeVolumeOnDestroy() {
|
2020-10-23 13:21:14 +02:00
|
|
|
if (!isFinishingIntentionally && !usf_keep_open){
|
2020-08-09 17:01:47 +02:00
|
|
|
val sessionID = intent.getIntExtra("originalSessionID", -1)
|
|
|
|
if (sessionID != -1){
|
2021-11-11 15:05:33 +01:00
|
|
|
GocryptfsVolume(applicationContext, sessionID).close()
|
2020-08-09 17:01:47 +02:00
|
|
|
}
|
|
|
|
super.closeVolumeOnDestroy()
|
|
|
|
}
|
2020-07-17 16:35:39 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun closeVolumeOnUserExit() {
|
2020-08-09 17:01:47 +02:00
|
|
|
isFinishingIntentionally = true
|
2020-07-17 16:35:39 +02:00
|
|
|
super.closeVolumeOnUserExit()
|
|
|
|
super.closeVolumeOnDestroy()
|
|
|
|
}
|
|
|
|
}
|