diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index baf4b40..676292b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -86,10 +86,10 @@
android:name=".file_viewers.TextEditor"
android:configChanges="screenSize|orientation" />
-
+
diff --git a/app/src/main/java/sushi/hardcore/droidfs/CameraActivity.kt b/app/src/main/java/sushi/hardcore/droidfs/CameraActivity.kt
index 14e7094..bb58530 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/CameraActivity.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/CameraActivity.kt
@@ -28,8 +28,7 @@ import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import kotlinx.android.synthetic.main.activity_camera.*
import sushi.hardcore.droidfs.adapters.DialogSingleChoiceAdapter
-import sushi.hardcore.droidfs.provider.RestrictedFileProvider
-import sushi.hardcore.droidfs.util.GocryptfsVolume
+import sushi.hardcore.droidfs.content_providers.RestrictedFileProvider
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import java.io.ByteArrayInputStream
diff --git a/app/src/main/java/sushi/hardcore/droidfs/util/GocryptfsVolume.kt b/app/src/main/java/sushi/hardcore/droidfs/GocryptfsVolume.kt
similarity index 78%
rename from app/src/main/java/sushi/hardcore/droidfs/util/GocryptfsVolume.kt
rename to app/src/main/java/sushi/hardcore/droidfs/GocryptfsVolume.kt
index 8b1e93f..b76f67b 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/util/GocryptfsVolume.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/GocryptfsVolume.kt
@@ -1,9 +1,9 @@
-package sushi.hardcore.droidfs.util
+package sushi.hardcore.droidfs
import android.content.Context
import android.net.Uri
-import sushi.hardcore.droidfs.ConstValues
import sushi.hardcore.droidfs.explorers.ExplorerElement
+import sushi.hardcore.droidfs.util.PathUtils
import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
@@ -47,70 +47,100 @@ class GocryptfsVolume(var sessionID: Int) {
}
fun close() {
- native_close(sessionID)
+ synchronized(this){
+ native_close(sessionID)
+ }
}
fun isClosed(): Boolean {
- return native_is_closed(sessionID)
+ synchronized(this){
+ return native_is_closed(sessionID)
+ }
}
fun listDir(dir_path: String): MutableList {
- return native_list_dir(sessionID, dir_path)
+ synchronized(this){
+ return native_list_dir(sessionID, dir_path)
+ }
}
fun mkdir(dir_path: String): Boolean {
- return native_mkdir(sessionID, dir_path)
+ synchronized(this){
+ return native_mkdir(sessionID, dir_path)
+ }
}
fun rmdir(dir_path: String): Boolean {
- return native_rmdir(sessionID, dir_path)
+ synchronized(this){
+ return native_rmdir(sessionID, dir_path)
+ }
}
fun removeFile(file_path: String): Boolean {
- return native_remove_file(sessionID, file_path)
+ synchronized(this){
+ return native_remove_file(sessionID, file_path)
+ }
}
fun pathExists(file_path: String): Boolean {
- return native_path_exists(sessionID, file_path)
+ synchronized(this){
+ return native_path_exists(sessionID, file_path)
+ }
}
fun getSize(file_path: String): Long {
- return native_get_size(sessionID, file_path)
+ synchronized(this){
+ return native_get_size(sessionID, file_path)
+ }
}
fun closeFile(handleID: Int) {
- native_close_file(sessionID, handleID)
+ synchronized(this){
+ native_close_file(sessionID, handleID)
+ }
}
fun openReadMode(file_path: String): Int {
- return native_open_read_mode(sessionID, file_path)
+ synchronized(this){
+ return native_open_read_mode(sessionID, file_path)
+ }
}
fun openWriteMode(file_path: String): Int {
- return native_open_write_mode(sessionID, file_path)
+ synchronized(this){
+ return native_open_write_mode(sessionID, file_path)
+ }
}
fun readFile(handleID: Int, offset: Long, buff: ByteArray): Int {
- return native_read_file(sessionID, handleID, offset, buff)
+ synchronized(this){
+ return native_read_file(sessionID, handleID, offset, buff)
+ }
}
fun writeFile(handleID: Int, offset: Long, buff: ByteArray, buff_size: Int): Int {
- return native_write_file(sessionID, handleID, offset, buff, buff_size)
+ synchronized(this){
+ return native_write_file(sessionID, handleID, offset, buff, buff_size)
+ }
}
fun truncate(file_path: String, offset: Long): Boolean {
- return native_truncate(sessionID, file_path, offset)
+ synchronized(this) {
+ return native_truncate(sessionID, file_path, offset)
+ }
}
fun rename(old_path: String, new_path: String): Boolean {
- return native_rename(sessionID, old_path, new_path)
+ synchronized(this) {
+ return native_rename(sessionID, old_path, new_path)
+ }
}
fun exportFile(handleID: Int, os: OutputStream): Boolean {
var offset: Long = 0
val ioBuffer = ByteArray(DefaultBS)
var length: Int
- while (native_read_file(sessionID, handleID, offset, ioBuffer).also { length = it } > 0){
+ while (readFile(handleID, offset, ioBuffer).also { length = it } > 0){
os.write(ioBuffer, 0, length)
offset += length.toLong()
}
@@ -145,7 +175,7 @@ class GocryptfsVolume(var sessionID: Int) {
val ioBuffer = ByteArray(DefaultBS)
var length: Int
while (inputStream.read(ioBuffer).also { length = it } > 0) {
- val written = native_write_file(sessionID, handleID, offset, ioBuffer, length).toLong()
+ val written = writeFile(handleID, offset, ioBuffer, length).toLong()
if (written == length.toLong()) {
offset += written
} else {
@@ -153,7 +183,7 @@ class GocryptfsVolume(var sessionID: Int) {
return false
}
}
- native_close_file(sessionID, handleID)
+ closeFile(handleID)
inputStream.close()
return true
}
diff --git a/app/src/main/java/sushi/hardcore/droidfs/util/LoadingTask.kt b/app/src/main/java/sushi/hardcore/droidfs/LoadingTask.kt
similarity index 95%
rename from app/src/main/java/sushi/hardcore/droidfs/util/LoadingTask.kt
rename to app/src/main/java/sushi/hardcore/droidfs/LoadingTask.kt
index c1ba88e..6eacc43 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/util/LoadingTask.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/LoadingTask.kt
@@ -1,10 +1,9 @@
-package sushi.hardcore.droidfs.util
+package sushi.hardcore.droidfs
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
-import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
abstract class LoadingTask(val activity: AppCompatActivity, loadingMessageResId: Int) {
diff --git a/app/src/main/java/sushi/hardcore/droidfs/OpenActivity.kt b/app/src/main/java/sushi/hardcore/droidfs/OpenActivity.kt
index 8fa720b..230453a 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/OpenActivity.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/OpenActivity.kt
@@ -17,7 +17,7 @@ import sushi.hardcore.droidfs.adapters.SavedVolumesAdapter
import sushi.hardcore.droidfs.explorers.ExplorerActivity
import sushi.hardcore.droidfs.explorers.ExplorerActivityDrop
import sushi.hardcore.droidfs.explorers.ExplorerActivityPick
-import sushi.hardcore.droidfs.provider.RestrictedFileProvider
+import sushi.hardcore.droidfs.content_providers.RestrictedFileProvider
import sushi.hardcore.droidfs.util.*
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import java.io.File
diff --git a/app/src/main/java/sushi/hardcore/droidfs/util/ExternalProvider.kt b/app/src/main/java/sushi/hardcore/droidfs/content_providers/ExternalProvider.kt
similarity index 97%
rename from app/src/main/java/sushi/hardcore/droidfs/util/ExternalProvider.kt
rename to app/src/main/java/sushi/hardcore/droidfs/content_providers/ExternalProvider.kt
index 4164669..b87c896 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/util/ExternalProvider.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/content_providers/ExternalProvider.kt
@@ -1,12 +1,13 @@
-package sushi.hardcore.droidfs.util
+package sushi.hardcore.droidfs.content_providers
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.webkit.MimeTypeMap
import androidx.appcompat.app.AppCompatActivity
+import sushi.hardcore.droidfs.GocryptfsVolume
+import sushi.hardcore.droidfs.LoadingTask
import sushi.hardcore.droidfs.R
-import sushi.hardcore.droidfs.provider.RestrictedFileProvider
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import java.io.File
diff --git a/app/src/main/java/sushi/hardcore/droidfs/provider/RestrictedFileProvider.kt b/app/src/main/java/sushi/hardcore/droidfs/content_providers/RestrictedFileProvider.kt
similarity index 99%
rename from app/src/main/java/sushi/hardcore/droidfs/provider/RestrictedFileProvider.kt
rename to app/src/main/java/sushi/hardcore/droidfs/content_providers/RestrictedFileProvider.kt
index 02dd1e5..03dfe7f 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/provider/RestrictedFileProvider.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/content_providers/RestrictedFileProvider.kt
@@ -1,4 +1,4 @@
-package sushi.hardcore.droidfs.provider
+package sushi.hardcore.droidfs.content_providers
import android.content.ContentProvider
import android.content.ContentValues
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 79cff64..bbcca70 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/explorers/BaseExplorerActivity.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/explorers/BaseExplorerActivity.kt
@@ -26,7 +26,7 @@ import sushi.hardcore.droidfs.ConstValues.Companion.isAudio
import sushi.hardcore.droidfs.ConstValues.Companion.isImage
import sushi.hardcore.droidfs.ConstValues.Companion.isText
import sushi.hardcore.droidfs.ConstValues.Companion.isVideo
-import sushi.hardcore.droidfs.FileOperationService
+import sushi.hardcore.droidfs.file_operations.FileOperationService
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.adapters.DialogSingleChoiceAdapter
import sushi.hardcore.droidfs.adapters.ExplorerElementAdapter
@@ -36,9 +36,9 @@ import sushi.hardcore.droidfs.file_viewers.AudioPlayer
import sushi.hardcore.droidfs.file_viewers.ImageViewer
import sushi.hardcore.droidfs.file_viewers.TextEditor
import sushi.hardcore.droidfs.file_viewers.VideoPlayer
-import sushi.hardcore.droidfs.provider.RestrictedFileProvider
-import sushi.hardcore.droidfs.util.ExternalProvider
-import sushi.hardcore.droidfs.util.GocryptfsVolume
+import sushi.hardcore.droidfs.content_providers.RestrictedFileProvider
+import sushi.hardcore.droidfs.content_providers.ExternalProvider
+import sushi.hardcore.droidfs.GocryptfsVolume
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
diff --git a/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivity.kt b/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivity.kt
index 4b899ee..8b10cec 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivity.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivity.kt
@@ -14,8 +14,8 @@ import sushi.hardcore.droidfs.OpenActivity
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.adapters.IconTextDialogAdapter
import sushi.hardcore.droidfs.file_operations.OperationFile
-import sushi.hardcore.droidfs.util.ExternalProvider
-import sushi.hardcore.droidfs.util.GocryptfsVolume
+import sushi.hardcore.droidfs.content_providers.ExternalProvider
+import sushi.hardcore.droidfs.GocryptfsVolume
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import java.io.File
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 85a7bee..2fc19e8 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivityPick.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/explorers/ExplorerActivityPick.kt
@@ -5,7 +5,7 @@ import android.content.Intent
import android.view.Menu
import android.view.MenuItem
import sushi.hardcore.droidfs.R
-import sushi.hardcore.droidfs.util.GocryptfsVolume
+import sushi.hardcore.droidfs.GocryptfsVolume
import sushi.hardcore.droidfs.util.PathUtils
import java.util.*
diff --git a/app/src/main/java/sushi/hardcore/droidfs/file_operations/FileOperationNotification.kt b/app/src/main/java/sushi/hardcore/droidfs/file_operations/FileOperationNotification.kt
new file mode 100644
index 0000000..13b9bcc
--- /dev/null
+++ b/app/src/main/java/sushi/hardcore/droidfs/file_operations/FileOperationNotification.kt
@@ -0,0 +1,5 @@
+package sushi.hardcore.droidfs.file_operations
+
+import android.app.Notification
+
+class FileOperationNotification(val notificationBuilder: Notification.Builder, val notificationId: Int)
\ No newline at end of file
diff --git a/app/src/main/java/sushi/hardcore/droidfs/FileOperationService.kt b/app/src/main/java/sushi/hardcore/droidfs/file_operations/FileOperationService.kt
similarity index 78%
rename from app/src/main/java/sushi/hardcore/droidfs/FileOperationService.kt
rename to app/src/main/java/sushi/hardcore/droidfs/file_operations/FileOperationService.kt
index ae3d07c..1a6c6e8 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/FileOperationService.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/file_operations/FileOperationService.kt
@@ -1,4 +1,4 @@
-package sushi.hardcore.droidfs
+package sushi.hardcore.droidfs.file_operations
import android.app.Notification
import android.app.NotificationChannel
@@ -9,24 +9,23 @@ import android.content.Intent
import android.net.Uri
import android.os.*
import androidx.documentfile.provider.DocumentFile
+import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.explorers.ExplorerElement
-import sushi.hardcore.droidfs.file_operations.OperationFile
-import sushi.hardcore.droidfs.util.GocryptfsVolume
+import sushi.hardcore.droidfs.GocryptfsVolume
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.util.Wiper
import java.io.File
import java.io.FileNotFoundException
-
class FileOperationService : Service() {
companion object {
- const val NOTIFICATION_ID = 1
const val NOTIFICATION_CHANNEL_ID = "FileOperations"
}
private val binder = LocalBinder()
private lateinit var gocryptfsVolume: GocryptfsVolume
private lateinit var notificationManager: NotificationManager
+ private var lastNotificationId = 0
inner class LocalBinder : Binder() {
fun getService(): FileOperationService = this@FileOperationService
@@ -39,7 +38,7 @@ class FileOperationService : Service() {
return binder
}
- private fun showNotification(message: String, total: Int): Notification.Builder {
+ private fun showNotification(message: Int, total: Int): FileOperationNotification {
if (!::notificationManager.isInitialized){
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
}
@@ -50,22 +49,26 @@ class FileOperationService : Service() {
} else {
Notification.Builder(this)
}
- notificationBuilder.setOngoing(true)
- .setContentTitle(getString(R.string.file_op_notification_title))
- .setContentText(message)
+ notificationBuilder
+ .setOngoing(true)
+ .setContentTitle(getString(message))
+ .setContentText("0/$total")
.setSmallIcon(R.mipmap.icon_launcher)
.setProgress(total, 0, false)
- notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build())
- return notificationBuilder
+ ++lastNotificationId
+ notificationManager.notify(lastNotificationId, notificationBuilder.build())
+ return FileOperationNotification(notificationBuilder, lastNotificationId)
}
- private fun updateNotificationProgress(notificationBuilder: Notification.Builder, progress: Int, total: Int){
- notificationBuilder.setProgress(total, progress, false)
- notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build())
+ private fun updateNotificationProgress(notification: FileOperationNotification, progress: Int, total: Int){
+ notification.notificationBuilder
+ .setProgress(total, progress, false)
+ .setContentText("$progress/$total")
+ notificationManager.notify(notification.notificationId, notification.notificationBuilder.build())
}
- private fun cancelNotification(){
- notificationManager.cancel(NOTIFICATION_ID)
+ private fun cancelNotification(notification: FileOperationNotification){
+ notificationManager.cancel(notification.notificationId)
}
private fun copyFile(srcPath: String, dstPath: String, remoteGocryptfsVolume: GocryptfsVolume = gocryptfsVolume): Boolean {
@@ -99,7 +102,7 @@ class FileOperationService : Service() {
fun copyElements(items: ArrayList, remoteGocryptfsVolume: GocryptfsVolume = gocryptfsVolume, callback: (String?) -> Unit){
Thread {
- val notificationBuilder = showNotification(getString(R.string.file_op_copy_msg), items.size)
+ val notification = showNotification(R.string.file_op_copy_msg, items.size)
var failedItem: String? = null
for (i in 0 until items.size){
if (items[i].explorerElement.isDirectory){
@@ -114,19 +117,19 @@ class FileOperationService : Service() {
}
}
if (failedItem == null){
- updateNotificationProgress(notificationBuilder, i, items.size)
+ updateNotificationProgress(notification, i, items.size)
} else {
break
}
}
- cancelNotification()
+ cancelNotification(notification)
callback(failedItem)
}.start()
}
fun moveElements(items: ArrayList, callback: (String?) -> Unit){
Thread {
- val notificationBuilder = showNotification(getString(R.string.file_op_move_msg), items.size)
+ val notification = showNotification(R.string.file_op_move_msg, items.size)
val mergedFolders = ArrayList()
var failedItem: String? = null
for (i in 0 until items.size){
@@ -137,7 +140,7 @@ class FileOperationService : Service() {
failedItem = items[i].explorerElement.fullPath
break
} else {
- updateNotificationProgress(notificationBuilder, i, items.size)
+ updateNotificationProgress(notification, i, items.size)
}
}
}
@@ -147,18 +150,18 @@ class FileOperationService : Service() {
failedItem = mergedFolders[i]
break
} else {
- updateNotificationProgress(notificationBuilder, items.size-(mergedFolders.size-i), items.size)
+ updateNotificationProgress(notification, items.size-(mergedFolders.size-i), items.size)
}
}
}
- cancelNotification()
+ cancelNotification(notification)
callback(failedItem)
}.start()
}
fun importFilesFromUris(items: ArrayList, uris: List, callback: (String?) -> Unit){
Thread {
- val notificationBuilder = showNotification(getString(R.string.file_op_import_msg), items.size)
+ val notification = showNotification(R.string.file_op_import_msg, items.size)
var failedIndex = -1
for (i in 0 until items.size) {
try {
@@ -169,15 +172,15 @@ class FileOperationService : Service() {
failedIndex = i
}
if (failedIndex == -1) {
- updateNotificationProgress(notificationBuilder, i, items.size)
+ updateNotificationProgress(notification, i, items.size)
} else {
- cancelNotification()
+ cancelNotification(notification)
callback(uris[failedIndex].toString())
break
}
}
if (failedIndex == -1){
- cancelNotification()
+ cancelNotification(notification)
callback(null)
}
}.start()
@@ -185,17 +188,17 @@ class FileOperationService : Service() {
fun wipeUris(uris: List, callback: (String?) -> Unit){
Thread {
- val notificationBuilder = showNotification(getString(R.string.file_op_wiping_msg), uris.size)
+ val notification = showNotification(R.string.file_op_wiping_msg, uris.size)
var errorMsg: String? = null
for (i in uris.indices) {
errorMsg = Wiper.wipe(this, uris[i])
if (errorMsg == null) {
- updateNotificationProgress(notificationBuilder, i, uris.size)
+ updateNotificationProgress(notification, i, uris.size)
} else {
break
}
}
- cancelNotification()
+ cancelNotification(notification)
callback(errorMsg)
}.start()
}
@@ -234,7 +237,7 @@ class FileOperationService : Service() {
Thread {
contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
DocumentFile.fromTreeUri(this, uri)?.let { treeDocumentFile ->
- val notificationBuilder = showNotification(getString(R.string.file_op_export_msg), items.size)
+ val notification = showNotification(R.string.file_op_export_msg, items.size)
var failedItem: String? = null
for (i in items.indices) {
failedItem = if (items[i].isDirectory) {
@@ -243,12 +246,12 @@ class FileOperationService : Service() {
if (exportFileInto(items[i].fullPath, treeDocumentFile)) null else items[i].fullPath
}
if (failedItem == null) {
- updateNotificationProgress(notificationBuilder, i, items.size)
+ updateNotificationProgress(notification, i, items.size)
} else {
break
}
}
- cancelNotification()
+ cancelNotification(notification)
callback(failedItem)
}
}.start()
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 deccf66..12dae83 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
@@ -4,8 +4,8 @@ import android.os.Bundle
import android.view.View
import sushi.hardcore.droidfs.BaseActivity
import sushi.hardcore.droidfs.R
-import sushi.hardcore.droidfs.provider.RestrictedFileProvider
-import sushi.hardcore.droidfs.util.GocryptfsVolume
+import sushi.hardcore.droidfs.content_providers.RestrictedFileProvider
+import sushi.hardcore.droidfs.GocryptfsVolume
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
abstract class FileViewerActivity: BaseActivity() {
diff --git a/app/src/main/java/sushi/hardcore/droidfs/file_viewers/GocryptfsDataSource.kt b/app/src/main/java/sushi/hardcore/droidfs/file_viewers/GocryptfsDataSource.kt
index dbe642b..ded1536 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/file_viewers/GocryptfsDataSource.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/file_viewers/GocryptfsDataSource.kt
@@ -3,7 +3,7 @@ package sushi.hardcore.droidfs.file_viewers
import android.net.Uri
import com.google.android.exoplayer2.upstream.*
import sushi.hardcore.droidfs.ConstValues
-import sushi.hardcore.droidfs.util.GocryptfsVolume
+import sushi.hardcore.droidfs.GocryptfsVolume
import kotlin.math.ceil
import kotlin.math.min
diff --git a/app/src/main/java/sushi/hardcore/droidfs/file_viewers/TextEditor.kt b/app/src/main/java/sushi/hardcore/droidfs/file_viewers/TextEditor.kt
index d4c8d83..1ec55ad 100644
--- a/app/src/main/java/sushi/hardcore/droidfs/file_viewers/TextEditor.kt
+++ b/app/src/main/java/sushi/hardcore/droidfs/file_viewers/TextEditor.kt
@@ -9,7 +9,7 @@ import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.widget.Toolbar
import sushi.hardcore.droidfs.R
-import sushi.hardcore.droidfs.util.GocryptfsVolume
+import sushi.hardcore.droidfs.GocryptfsVolume
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import java.io.ByteArrayInputStream
import java.io.File
diff --git a/app/src/main/native/gocryptfs_jni.c b/app/src/main/native/gocryptfs_jni.c
index e0eba96..47d2fd0 100644
--- a/app/src/main/native/gocryptfs_jni.c
+++ b/app/src/main/native/gocryptfs_jni.c
@@ -31,7 +31,7 @@ void jbyteArray_to_unsignedCharArray(const jbyte* src, unsigned char* dst, const
}
JNIEXPORT jboolean JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_00024Companion_createVolume(JNIEnv *env, jclass clazz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_00024Companion_createVolume(JNIEnv *env, jclass clazz,
jstring jroot_cipher_dir, jcharArray jpassword,
jint logN,
jstring jcreator) {
@@ -55,7 +55,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_00024Companion_createVolume(JNI
}
JNIEXPORT jint JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_00024Companion_init(JNIEnv *env, jobject clazz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_00024Companion_init(JNIEnv *env, jobject clazz,
jstring jroot_cipher_dir,
jcharArray jpassword,
jbyteArray jgiven_hash,
@@ -127,13 +127,13 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_00024Companion_init(JNIEnv *env
}
JNIEXPORT jboolean JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1is_1closed(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1is_1closed(JNIEnv *env, jobject thiz,
jint sessionID) {
return gcf_is_closed(sessionID);
}
JNIEXPORT jboolean JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_00024Companion_changePassword(JNIEnv *env, jclass clazz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_00024Companion_changePassword(JNIEnv *env, jclass clazz,
jstring jroot_cipher_dir,
jcharArray jold_password,
jbyteArray jgiven_hash,
@@ -215,12 +215,12 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_00024Companion_changePassword(J
}
JNIEXPORT void JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1close(JNIEnv *env, jobject thiz, jint sessionID) {
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1close(JNIEnv *env, jobject thiz, jint sessionID) {
gcf_close(sessionID);
}
JNIEXPORT jobject JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1list_1dir(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1list_1dir(JNIEnv *env, jobject thiz,
jint sessionID, jstring jplain_dir) {
const char* plain_dir = (*env)->GetStringUTFChars(env, jplain_dir, NULL);
const size_t plain_dir_len = strlen(plain_dir);
@@ -228,14 +228,14 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1list_1dir(JNIEnv *env,
struct gcf_list_dir_return elements = gcf_list_dir(sessionID, go_plain_dir);
- jclass java_util_ArrayList = (*env)->NewGlobalRef(env, (*env)->FindClass(env, "java/util/ArrayList"));
- jmethodID java_util_ArrayList_init = (*env)->GetMethodID(env, java_util_ArrayList, "", "(I)V");
- jmethodID java_util_ArrayList_add = (*env)->GetMethodID(env, java_util_ArrayList, "add", "(Ljava/lang/Object;)Z");
+ jclass java_ArrayList = (*env)->NewGlobalRef(env, (*env)->FindClass(env, "java/util/ArrayList"));
+ jmethodID java_ArrayList_init = (*env)->GetMethodID(env, java_ArrayList, "", "(I)V");
+ jmethodID java_ArrayList_add = (*env)->GetMethodID(env, java_ArrayList, "add", "(Ljava/lang/Object;)Z");
jclass classExplorerElement = (*env)->NewGlobalRef(env, (*env)->FindClass(env, "sushi/hardcore/droidfs/explorers/ExplorerElement"));
jmethodID classExplorerElement_init = (*env)->GetMethodID(env, classExplorerElement, "", "(Ljava/lang/String;SJJLjava/lang/String;)V");
- jobject element_list = (*env)->NewObject(env, java_util_ArrayList, java_util_ArrayList_init, elements.r2);
+ jobject element_list = (*env)->NewObject(env, java_ArrayList, java_ArrayList_init, elements.r2);
unsigned int c = 0;
for (unsigned int i=0; iNewStringUTF(env, name);
jobject explorerElement = (*env)->NewObject(env, classExplorerElement, classExplorerElement_init, jname, type, (long long)attrs.r0, attrs.r1, jplain_dir);
- (*env)->CallBooleanMethod(env, element_list, java_util_ArrayList_add, explorerElement);
+ (*env)->CallBooleanMethod(env, element_list, java_ArrayList_add, explorerElement);
c += name_len+1;
}
@@ -274,7 +274,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1list_1dir(JNIEnv *env,
}
JNIEXPORT jlong JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1get_1size(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1get_1size(JNIEnv *env, jobject thiz,
jint sessionID, jstring jfile_path) {
const char* file_path = (*env)->GetStringUTFChars(env, jfile_path, NULL);
GoString go_file_path = {file_path, strlen(file_path)};
@@ -287,7 +287,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1get_1size(JNIEnv *env,
}
JNIEXPORT jboolean JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1path_1exists(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1path_1exists(JNIEnv *env, jobject thiz,
jint sessionID,
jstring jfile_path) {
const char* file_path = (*env)->GetStringUTFChars(env, jfile_path, NULL);
@@ -301,7 +301,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1path_1exists(JNIEnv *en
}
JNIEXPORT jint JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1open_1read_1mode(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1open_1read_1mode(JNIEnv *env, jobject thiz,
jint sessionID,
jstring jfile_path) {
const char* file_path = (*env)->GetStringUTFChars(env, jfile_path, NULL);
@@ -315,7 +315,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1open_1read_1mode(JNIEnv
}
JNIEXPORT jint JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1open_1write_1mode(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1open_1write_1mode(JNIEnv *env, jobject thiz,
jint sessionID,
jstring jfile_path) {
const char* file_path = (*env)->GetStringUTFChars(env, jfile_path, NULL);
@@ -329,7 +329,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1open_1write_1mode(JNIEn
}
JNIEXPORT jint JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1write_1file(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1write_1file(JNIEnv *env, jobject thiz,
jint sessionID, jint handleID, jlong offset,
jbyteArray jbuff, jint buff_size) {
jbyte* buff = (*env)->GetByteArrayElements(env, jbuff, NULL);
@@ -343,7 +343,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1write_1file(JNIEnv *env
}
JNIEXPORT jint JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1read_1file(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1read_1file(JNIEnv *env, jobject thiz,
jint sessionID, jint handleID, jlong offset,
jbyteArray jbuff) {
const size_t buff_size = (*env)->GetArrayLength(env, jbuff);
@@ -360,7 +360,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1read_1file(JNIEnv *env,
}
JNIEXPORT jboolean JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1truncate(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1truncate(JNIEnv *env, jobject thiz,
jint sessionID,
jstring jfile_path, jlong offset) {
const char* file_path = (*env)->GetStringUTFChars(env, jfile_path, NULL);
@@ -374,14 +374,14 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1truncate(JNIEnv *env, j
}
JNIEXPORT void JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1close_1file(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1close_1file(JNIEnv *env, jobject thiz,
jint sessionID,
jint handleID) {
gcf_close_file(sessionID, handleID);
}
JNIEXPORT jboolean JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1remove_1file(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1remove_1file(JNIEnv *env, jobject thiz,
jint sessionID, jstring jfile_path) {
const char* file_path = (*env)->GetStringUTFChars(env, jfile_path, NULL);
GoString go_file_path = {file_path, strlen(file_path)};
@@ -394,7 +394,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1remove_1file(JNIEnv *en
}
JNIEXPORT jboolean JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1mkdir(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1mkdir(JNIEnv *env, jobject thiz,
jint sessionID, jstring jdir_path) {
const char* dir_path = (*env)->GetStringUTFChars(env, jdir_path, NULL);
GoString go_dir_path = {dir_path, strlen(dir_path)};
@@ -407,7 +407,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1mkdir(JNIEnv *env, jobj
}
JNIEXPORT jboolean JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1rmdir(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1rmdir(JNIEnv *env, jobject thiz,
jint sessionID, jstring jdir_path) {
const char* dir_path = (*env)->GetStringUTFChars(env, jdir_path, NULL);
GoString go_dir_path = {dir_path, strlen(dir_path)};
@@ -420,7 +420,7 @@ Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1rmdir(JNIEnv *env, jobj
}
JNIEXPORT jboolean JNICALL
-Java_sushi_hardcore_droidfs_util_GocryptfsVolume_native_1rename(JNIEnv *env, jobject thiz,
+Java_sushi_hardcore_droidfs_GocryptfsVolume_native_1rename(JNIEnv *env, jobject thiz,
jint sessionID, jstring jold_path,
jstring jnew_path) {
const char* old_path = (*env)->GetStringUTFChars(env, jold_path, NULL);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b662c66..5273fb3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -187,7 +187,6 @@
Camera permission is needed to take photo.
Choose a resolution
File Operations
- File Operations running…
Copying files…
Importing files…
Exporting files…