From 818347427e3adc2dd14c7994d1c15c325a3d1c96 Mon Sep 17 00:00:00 2001 From: yova Date: Wed, 31 Jan 2024 11:53:33 +0100 Subject: [PATCH] save status display check for URI existence before read file. Maybe this helps when content provider is not ready onResume --- .../java/org/wntr/mdeditor/MainActivity.kt | 59 ++++++++++++++----- app/src/main/java/org/wntr/mdeditor/mdMeta.kt | 4 +- app/src/main/res/raw/controller.js | 6 ++ 3 files changed, 53 insertions(+), 16 deletions(-) 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 '' +} +