2020-07-17 16:35:39 +02:00
|
|
|
package sushi.hardcore.droidfs.file_viewers
|
|
|
|
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.view.View
|
2020-07-21 15:05:05 +02:00
|
|
|
import sushi.hardcore.droidfs.BaseActivity
|
2020-07-17 16:35:39 +02:00
|
|
|
import sushi.hardcore.droidfs.R
|
|
|
|
import sushi.hardcore.droidfs.util.GocryptfsVolume
|
|
|
|
import sushi.hardcore.droidfs.widgets.ColoredAlertDialog
|
|
|
|
|
2020-07-21 15:05:05 +02:00
|
|
|
abstract class FileViewerActivity: BaseActivity() {
|
2020-07-17 16:35:39 +02:00
|
|
|
lateinit var gocryptfsVolume: GocryptfsVolume
|
|
|
|
lateinit var filePath: String
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
filePath = intent.getStringExtra("path")!!
|
|
|
|
val sessionID = intent.getIntExtra("sessionID", -1)
|
|
|
|
gocryptfsVolume = GocryptfsVolume(sessionID)
|
2020-07-26 21:16:06 +02:00
|
|
|
hideSystemUi()
|
2020-07-17 16:35:39 +02:00
|
|
|
viewFile()
|
|
|
|
}
|
2020-07-26 21:16:06 +02:00
|
|
|
open fun hideSystemUi(){
|
|
|
|
window.decorView.systemUiVisibility =
|
|
|
|
View.SYSTEM_UI_FLAG_LOW_PROFILE or
|
|
|
|
View.SYSTEM_UI_FLAG_FULLSCREEN/* or
|
|
|
|
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
|
|
|
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
|
|
|
|
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
|
|
|
|
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION*/
|
2020-07-17 16:35:39 +02:00
|
|
|
}
|
|
|
|
abstract fun viewFile()
|
|
|
|
fun loadWholeFile(path: String): ByteArray? {
|
|
|
|
val fileSize = gocryptfsVolume.get_size(path)
|
|
|
|
if (fileSize >= 0){
|
|
|
|
try {
|
|
|
|
val fileBuff = ByteArray(fileSize.toInt())
|
|
|
|
var success = false
|
|
|
|
val handleID = gocryptfsVolume.open_read_mode(path)
|
|
|
|
if (handleID != -1) {
|
|
|
|
var offset: Long = 0
|
2020-07-26 21:16:06 +02:00
|
|
|
val ioBuffer = ByteArray(GocryptfsVolume.DefaultBS)
|
2020-07-17 16:35:39 +02:00
|
|
|
var length: Int
|
2020-07-26 21:16:06 +02:00
|
|
|
while (gocryptfsVolume.read_file(handleID, offset, ioBuffer).also { length = it } > 0){
|
|
|
|
System.arraycopy(ioBuffer, 0, fileBuff, offset.toInt(), length)
|
2020-07-17 16:35:39 +02:00
|
|
|
offset += length.toLong()
|
|
|
|
}
|
|
|
|
gocryptfsVolume.close_file(handleID)
|
|
|
|
success = offset == fileBuff.size.toLong()
|
|
|
|
}
|
|
|
|
if (success){
|
|
|
|
return fileBuff
|
|
|
|
} else {
|
|
|
|
ColoredAlertDialog(this)
|
|
|
|
.setTitle(R.string.error)
|
|
|
|
.setMessage(R.string.read_file_failed)
|
|
|
|
.setCancelable(false)
|
|
|
|
.setPositiveButton(R.string.ok) { _, _ -> finish() }
|
|
|
|
.show()
|
|
|
|
}
|
|
|
|
} catch (e: OutOfMemoryError){
|
|
|
|
ColoredAlertDialog(this)
|
|
|
|
.setTitle(R.string.error)
|
2020-07-26 21:16:06 +02:00
|
|
|
.setMessage(R.string.outofmemoryerror_msg)
|
2020-07-17 16:35:39 +02:00
|
|
|
.setCancelable(false)
|
|
|
|
.setPositiveButton(getString(R.string.ok)) { _, _ -> finish() }
|
|
|
|
.show()
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
ColoredAlertDialog(this)
|
|
|
|
.setTitle(R.string.error)
|
|
|
|
.setMessage(R.string.get_size_failed)
|
|
|
|
.setCancelable(false)
|
|
|
|
.setPositiveButton(R.string.ok) { _, _ -> finish() }
|
|
|
|
.show()
|
|
|
|
}
|
|
|
|
return null
|
|
|
|
}
|
|
|
|
}
|