diff --git a/app/src/main/java/org/wntr/mdeditor/MainActivity.kt b/app/src/main/java/org/wntr/mdeditor/MainActivity.kt
index 0be57a1..91183ac 100644
--- a/app/src/main/java/org/wntr/mdeditor/MainActivity.kt
+++ b/app/src/main/java/org/wntr/mdeditor/MainActivity.kt
@@ -16,7 +16,6 @@ import android.provider.OpenableColumns
import android.util.Log
import android.view.Menu
import android.view.MenuItem
-import android.view.Window
import android.view.WindowInsets
import android.view.WindowManager
import android.webkit.ConsoleMessage
@@ -67,8 +66,8 @@ class MainActivity : AppCompatActivity() {
{
className: "editor-statusbar-left",
onUpdate: (el) => {
- el.innerHTML = ""
- }
+ el.innerHTML = saveStatus()
+ }
},
{
className: "displayName",
@@ -953,7 +952,6 @@ class MainActivity : AppCompatActivity() {
selectFileForSaveAs()
return
}
-
catch (e: Exception) {
Log.d(javaClass.simpleName, "Problem with accessing file\n${e.stackTraceToString()}")
this.runOnUiThread(
@@ -969,8 +967,19 @@ class MainActivity : AppCompatActivity() {
}
try {
- this. runOnUiThread({
+ this.runOnUiThread({
webView.evaluateJavascript("getValue();") {
+ if (it == "") {
+ return@evaluateJavascript
+ } else if (it == "null") {
+ Toast.makeText(
+ this,
+ "Problem with file buffer. Please reopen manually.",
+ Toast.LENGTH_LONG
+ ).show()
+ openFile()
+ return@evaluateJavascript
+ }
mdeValue =
metaData.toString() + URLDecoder.decode(it.removeSurrounding("\""))
if (mdeValue.length.toLong() == textFile.statSize) {
@@ -985,7 +994,10 @@ class MainActivity : AppCompatActivity() {
Log.d(javaClass.simpleName, "File saved: ${thisFileUri}")
textFile.close()
this@MainActivity.runOnUiThread {
- webView.evaluateJavascript("easyMDE.codemirror.doc.markClean();", {})
+ webView.evaluateJavascript(
+ "easyMDE.codemirror.doc.markClean();" +
+ "easyMDE.updateStatusBar(\"editor-statusbar-left\",saveStatus());"
+ , {})
}
}
})
@@ -1037,6 +1049,13 @@ class MainActivity : AppCompatActivity() {
}
}
+ 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
+ }
+
@Throws(IOException::class)
private fun readFile(uri: Uri) {
//TODO: Which permissions are really needed?
@@ -1068,6 +1087,19 @@ class MainActivity : AppCompatActivity() {
CoroutineScope(Dispatchers.Main).launch {
withContext(Dispatchers.IO) {
try {
+ if (!checkURIResource(applicationContext, uri)) {
+ Log.d(javaClass.simpleName, "URI unavailable")
+ this@MainActivity.runOnUiThread({
+ Toast.makeText(
+ this@MainActivity,
+ "URI check failed\n" +
+ "Better open from another storage location\n" ,
+ Toast.LENGTH_LONG
+ ).show()
+ })
+ thisFileUri = null
+ return@withContext
+ }
contentResolver.openInputStream(uri)?.use { inputStream ->
BufferedReader(InputStreamReader(inputStream)).use { reader ->
var i = ""
@@ -1096,8 +1128,10 @@ class MainActivity : AppCompatActivity() {
this@MainActivity.runOnUiThread({
Toast.makeText(
this@MainActivity,
- "File not found during reading.\n$e",
- Toast.LENGTH_LONG
+ "File not found during reading.\n" +
+ "Current Buffer is not connected to any file now.\n" +
+ "Save with other file name or open another.",
+ Toast.LENGTH_LONG
).show()
})
thisFileUri = null
@@ -1136,6 +1170,7 @@ class MainActivity : AppCompatActivity() {
val script = "if (typeof easyMDE !== 'undefined') {" +
"easyMDE.codemirror.doc.setValue(`${mdeValue}`);" +
"easyMDE.codemirror.doc.markClean();" +
+ "easyMDE.updateStatusBar(\"editor-statusbar-left\",saveStatus());" +
"easyMDE.codemirror.focus();" +
"easyMDE.codemirror.doc.setCursor(JSON.parse(`${metaData.cursor}`));" +
"pasteText();" +
@@ -1145,7 +1180,6 @@ class MainActivity : AppCompatActivity() {
webView.evaluateJavascript(script, {
thisFileUri = uri
Log.d(javaClass.simpleName,"File read: ${thisFileUri}")
- saveFile()
})
webView.requestFocus()
})
@@ -1154,6 +1188,7 @@ class MainActivity : AppCompatActivity() {
}
private fun saveMetaToSharedPrefs() {
+ if (thisFileUri == null) return
Log.d(javaClass.simpleName, "saving to shared prefs cursor: ${metaData.cursor} in file: ${thisFileUri}")
getSharedPreferences("prefs", Context.MODE_PRIVATE)
.edit().apply {
@@ -1186,7 +1221,6 @@ class MainActivity : AppCompatActivity() {
override fun onPause() {
super.onPause()
- /*outState.putString("test", "onSaveInstanceState-String")*/
saveFile()
webView.evaluateJavascript("easyMDE.codemirror.doc.getCursor();") {
metaData.cursor=it
@@ -1198,11 +1232,6 @@ class MainActivity : AppCompatActivity() {
override protected fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
- /* findViewById(R.id.edittext_lifecycle).text = savedInstanceState.getString("test")*/
- /*webView.evaluateJavascript("getValue();", ValueCallback() {
- saveFile(it)
- })*/
-
Log.i(javaClass.simpleName, "\"onRestoreInstanceState\" durchlaufen")
}
}
diff --git a/app/src/main/java/org/wntr/mdeditor/mdMeta.kt b/app/src/main/java/org/wntr/mdeditor/mdMeta.kt
index 2b3fdd2..80d8fec 100644
--- a/app/src/main/java/org/wntr/mdeditor/mdMeta.kt
+++ b/app/src/main/java/org/wntr/mdeditor/mdMeta.kt
@@ -12,7 +12,9 @@ class mdMeta {
var ID: String? = null
var updatedAt: String? = null
var cursor: String = "{ line: 0, ch: 0, sticky: null }"
-
+ get() =
+ if (field.equals("null")) "{ line: 0, ch: 0, sticky: null }"
+ else field
fun put(key: String, value: String) {
metaData.put(key, value)
diff --git a/app/src/main/res/raw/controller.js b/app/src/main/res/raw/controller.js
index 2d91282..9bdeab3 100644
--- a/app/src/main/res/raw/controller.js
+++ b/app/src/main/res/raw/controller.js
@@ -75,3 +75,9 @@ function toggleTheme() {
if (i>themes.length-1) i=0
}
+function saveStatus() {
+ if (typeof easyMDE === 'undefined') return ''
+ else if (easyMDE.codemirror.doc.isClean()) return '*'
+ return ''
+}
+