parent
1583c0009b
commit
f0d90c175f
@ -0,0 +1,114 @@
|
||||
package org.wntr.mdeditor
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.provider.OpenableColumns
|
||||
import android.util.Log
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
|
||||
fun checkURIResource(context: Context, uri: Uri?): Boolean {
|
||||
val cursor = context.contentResolver.query(uri!!, null, null, null, null)
|
||||
val doesExist = cursor != null && cursor.moveToFirst()
|
||||
cursor?.close()
|
||||
return doesExist
|
||||
}
|
||||
|
||||
fun createFileFromStream(ins: InputStream, destination: File?) {
|
||||
try {
|
||||
FileOutputStream(destination).use { os ->
|
||||
val buffer = ByteArray(4096)
|
||||
var length: Int
|
||||
while (ins.read(buffer).also { length = it } > 0) {
|
||||
os.write(buffer, 0, length)
|
||||
}
|
||||
os.flush()
|
||||
}
|
||||
} catch (ex: java.lang.Exception) {
|
||||
Log.e("Save File", ex.message!!)
|
||||
ex.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
fun deleteCache(context: Context) {
|
||||
try {
|
||||
val dir = File(context.cacheDir, "html")
|
||||
deleteDir(dir)
|
||||
deleteDir(context.filesDir)
|
||||
} catch (e: java.lang.Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
fun deleteDir(dir: File?): Boolean {
|
||||
return if (dir != null && dir.isDirectory) {
|
||||
val children = dir.list()
|
||||
for (i in children.indices) {
|
||||
val success = deleteDir(File(dir, children[i]))
|
||||
if (!success) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
dir.delete()
|
||||
} else if (dir != null && dir.isFile) {
|
||||
dir.delete()
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("Range")
|
||||
fun getDisplayName(context: Context, uri: Uri?): String {
|
||||
// via: https://stackoverflow.com/questions/5568874/how-to-extract-the-file-name-from-uri-returned-from-intent-action-get-content
|
||||
var result: String? = null;
|
||||
if (uri == null) return "hauntED.md"
|
||||
if (uri!!.getScheme().equals("content")) {
|
||||
val cursor = context.getContentResolver().query(uri!!, null, null, null, null);
|
||||
try {
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
|
||||
}
|
||||
} finally {
|
||||
cursor?.close();
|
||||
}
|
||||
}
|
||||
if (result == null) {
|
||||
result = uri!!.getPath();
|
||||
val cut = result!!.lastIndexOf('/');
|
||||
if (cut != -1) {
|
||||
result = result.substring(cut + 1);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
fun getFile(context: Context, uri: Uri): File? {
|
||||
val destinationFilename =
|
||||
File(context.filesDir.path + File.separatorChar + queryName(context, uri))
|
||||
try {
|
||||
context.contentResolver.openInputStream(uri!!).use { ins ->
|
||||
createFileFromStream(
|
||||
ins!!,
|
||||
destinationFilename
|
||||
)
|
||||
}
|
||||
} catch (ex: java.lang.Exception) {
|
||||
Log.e("Save File", ex.message!!)
|
||||
ex.printStackTrace()
|
||||
}
|
||||
return destinationFilename
|
||||
}
|
||||
|
||||
fun queryName(context: Context, uri: Uri): String? {
|
||||
val returnCursor = context.contentResolver.query(uri, null, null, null, null)!!
|
||||
val nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
|
||||
returnCursor.moveToFirst()
|
||||
val name = returnCursor.getString(nameIndex)
|
||||
returnCursor.close()
|
||||
return name
|
||||
}
|
||||
|
Loading…
Reference in new issue