Skip to content

Commit 0b9956d

Browse files
committed
fix #185
1 parent e5a6d4b commit 0b9956d

File tree

15 files changed

+99
-17
lines changed

15 files changed

+99
-17
lines changed

app/src/main/java/com/raival/compose/file/explorer/screen/main/MainActivity.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,10 @@ class MainActivity : BaseActivity() {
119119
show = mainActivityState.showSaveEditorFilesDialog,
120120
isSaving = mainActivityState.isSavingFiles,
121121
onDismiss = { mainActivityManager.toggleSaveEditorFilesDialog(false) },
122-
onRequestFinish = { finish() },
122+
onIgnore = {
123+
mainActivityManager.ignoreTextEditorFiles()
124+
finish()
125+
},
123126
onSave = { mainActivityManager.saveTextEditorFiles { finish() } }
124127
)
125128

app/src/main/java/com/raival/compose/file/explorer/screen/main/MainActivityManager.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,10 @@ class MainActivityManager {
278278
return true
279279
}
280280

281+
fun ignoreTextEditorFiles() {
282+
globalClass.textEditorManager.fileInstanceList.clear()
283+
}
284+
281285
fun saveTextEditorFiles(onFinish: () -> Unit) {
282286
_state.update {
283287
it.copy(
@@ -286,10 +290,13 @@ class MainActivityManager {
286290
}
287291

288292
managerScope.launch {
289-
globalClass.textEditorManager.fileInstanceList.forEach {
290-
if (it.requireSave) {
291-
it.file.writeText(it.content.toString())
293+
globalClass.textEditorManager.fileInstanceList.apply {
294+
forEach {
295+
if (it.requireSave) {
296+
it.file.writeText(it.content.toString())
297+
}
292298
}
299+
clear()
293300
}
294301

295302
_state.update {

app/src/main/java/com/raival/compose/file/explorer/screen/main/ui/SaveTextEditorFilesDialog.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import com.raival.compose.file.explorer.R
1111
fun SaveTextEditorFilesDialog(
1212
show: Boolean,
1313
onDismiss: () -> Unit,
14-
onRequestFinish: () -> Unit,
14+
onIgnore: () -> Unit,
1515
onSave: () -> Unit,
1616
isSaving: Boolean
1717
) {
@@ -31,7 +31,7 @@ fun SaveTextEditorFilesDialog(
3131
TextButton(
3232
onClick = {
3333
onDismiss()
34-
onRequestFinish()
34+
onIgnore()
3535
}
3636
) { Text(text = stringResource(R.string.ignore)) }
3737
},

app/src/main/java/com/raival/compose/file/explorer/screen/viewer/text/TextViewerActivity.kt

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,27 @@ class TextViewerActivity : ViewerActivity() {
7272
val symbols = remember { mutableStateListOf<SymbolHolder>() }
7373
val activityScope = rememberCoroutineScope()
7474

75+
BackHandler(
76+
textViewerInstance.requireSave
77+
|| textViewerInstance.showSearchPanel
78+
) {
79+
if (textViewerInstance.showSearchPanel) {
80+
textViewerInstance.hideSearchPanel(codeEditor)
81+
} else {
82+
textViewerInstance.showUnsavedChangesWarningDialog(
83+
onSaved = { finish() },
84+
onFailed = {
85+
if (it is SecurityException) {
86+
globalClass.showMsg(getString(R.string.permission_denied))
87+
} else {
88+
globalClass.showMsg(getString(R.string.failed_to_save))
89+
}
90+
},
91+
onIgnore = { finish() }
92+
)
93+
}
94+
}
95+
7596
LaunchedEffect(Unit) {
7697
// Temporary solution to prevent OOM exception. Text Editor needs to be refactored to handle large files.
7798
val maxFileSizeBytes = 15 * 1024 * 1024 // 15 MB limit
@@ -133,10 +154,6 @@ class TextViewerActivity : ViewerActivity() {
133154
symbols.addAll(textViewerInstance.updateSymbols())
134155
}
135156

136-
BackHandler(enabled = textViewerInstance.showSearchPanel) {
137-
textViewerInstance.hideSearchPanel(codeEditor)
138-
}
139-
140157
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
141158
textViewerInstance.checkActiveFileValidity(
142159
onSourceReload = {

app/src/main/java/com/raival/compose/file/explorer/screen/viewer/text/TextViewerInstance.kt

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,32 @@ class TextViewerInstance(
246246
}
247247
}
248248

249+
fun showUnsavedChangesWarningDialog(
250+
onSaved: () -> Unit,
251+
onFailed: (error: Exception) -> Unit,
252+
onIgnore: () -> Unit
253+
) {
254+
warningDialogProperties.apply {
255+
title = globalClass.getString(R.string.warning)
256+
message = globalClass.getString(R.string.unsaved_changes)
257+
confirmText = globalClass.getString(R.string.save)
258+
dismissText = globalClass.getString(R.string.ignore_changes)
259+
onDismiss = {
260+
onIgnore()
261+
showWarningDialog = false
262+
}
263+
warningDialogProperties.onConfirm = {
264+
save(
265+
onSaved = onSaved,
266+
onFailed = onFailed
267+
)
268+
requireSave = false
269+
showWarningDialog = false
270+
}
271+
showWarningDialog = true
272+
}
273+
}
274+
249275
fun updateSymbols(): List<SymbolHolder> {
250276
if (!customSymbolsFile.exists()) {
251277
customSymbolsFile.writeText(
@@ -266,15 +292,20 @@ class TextViewerInstance(
266292
return customSymbolHolders.ifEmpty { defaultSymbolHolders }
267293
}
268294

269-
fun save(onSaved: () -> Unit, onFailed: () -> Unit) {
295+
fun save(onSaved: () -> Unit, onFailed: (error: Exception) -> Unit) {
270296
isSaving = true
271297
scope.launch {
272-
globalClass.contentResolver.openOutputStream(uri, "wt")?.use { outputStream ->
273-
BufferedWriter(OutputStreamWriter(outputStream)).use { writer ->
274-
writer.write(content)
298+
try {
299+
globalClass.contentResolver.openOutputStream(uri, "wt").use { outputStream ->
300+
BufferedWriter(OutputStreamWriter(outputStream)).use { writer ->
301+
writer.write(content)
302+
}
303+
withContext(Dispatchers.Main) { onSaved().also { isSaving = false } }
275304
}
276-
withContext(Dispatchers.Main) { onSaved().also { isSaving = false } }
277-
} ?: withContext(Dispatchers.Main) { onFailed().also { isSaving = false } }
305+
} catch (e: Exception) {
306+
logger.logError(e)
307+
withContext(Dispatchers.Main) { onFailed(e).also { isSaving = false } }
308+
}
278309
}
279310
}
280311

app/src/main/java/com/raival/compose/file/explorer/screen/viewer/text/ui/ToolbarView.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,13 @@ fun ToolbarView(
8181
globalClass.showMsg(R.string.saved)
8282
textViewerInstance.requireSave = false
8383
},
84-
onFailed = { globalClass.showMsg(R.string.failed_to_save) }
84+
onFailed = {
85+
if (it is SecurityException) {
86+
globalClass.showMsg(R.string.permission_denied)
87+
} else {
88+
globalClass.showMsg(R.string.failed_to_save)
89+
}
90+
}
8591
)
8692
}
8793
) {

app/src/main/res/values-es/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,4 +444,6 @@
444444
<string name="updating">Actualizando</string>
445445
<string name="minimize">Minimizar</string>
446446
<string name="remove_from_bookmarks">Eliminar de marcadores</string>
447+
<string name="unsaved_changes">Do you want to save the file?</string>
448+
<string name="permission_denied">Permission denied</string>
447449
</resources>

app/src/main/res/values-fa/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,4 +444,6 @@
444444
<string name="updating">در حال به‌روزرسانی</string>
445445
<string name="minimize">کمینه کردن</string>
446446
<string name="remove_from_bookmarks">حذف از نشانک‌ها</string>
447+
<string name="unsaved_changes">Do you want to save the file?</string>
448+
<string name="permission_denied">Permission denied</string>
447449
</resources>

app/src/main/res/values-fr/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,4 +444,6 @@
444444
<string name="updating">Mise à jour</string>
445445
<string name="minimize">Réduire</string>
446446
<string name="remove_from_bookmarks">Retirer des favoris</string>
447+
<string name="unsaved_changes">Do you want to save the file?</string>
448+
<string name="permission_denied">Permission denied</string>
447449
</resources>

app/src/main/res/values-pl/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,4 +444,6 @@
444444
<string name="updating">Aktualizowanie</string>
445445
<string name="minimize">Minimalizuj</string>
446446
<string name="remove_from_bookmarks">Usuń z zakładek</string>
447+
<string name="unsaved_changes">Do you want to save the file?</string>
448+
<string name="permission_denied">Permission denied</string>
447449
</resources>

0 commit comments

Comments
 (0)