Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit bfc6f65

Browse files
committed
fix: opened files cache is always empty when user manually closes the project (#1116)
1 parent 667b3d8 commit bfc6f65

File tree

3 files changed

+37
-14
lines changed

3 files changed

+37
-14
lines changed

app/src/main/java/com/itsaky/androidide/activities/editor/EditorHandlerActivity.kt

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import com.itsaky.androidide.utils.flashSuccess
5757
import org.greenrobot.eventbus.Subscribe
5858
import org.greenrobot.eventbus.ThreadMode
5959
import java.io.File
60+
import java.util.concurrent.atomic.AtomicBoolean
6061
import kotlin.collections.component1
6162
import kotlin.collections.component2
6263
import kotlin.collections.set
@@ -68,6 +69,8 @@ import kotlin.collections.set
6869
*/
6970
open class EditorHandlerActivity : ProjectHandlerActivity(), IEditorHandler {
7071

72+
protected val isOpenedFilesSaved = AtomicBoolean(false)
73+
7174
override fun doOpenFile(file: File, selection: Range?) {
7275
openFileAndSelect(file, selection)
7376
}
@@ -143,19 +146,32 @@ open class EditorHandlerActivity : ProjectHandlerActivity(), IEditorHandler {
143146
override fun onPause() {
144147
super.onPause()
145148

146-
val current =
147-
getCurrentEditor()?.editor?.file?.absolutePath
148-
?: run {
149-
viewModel.writeOpenedFiles(null)
150-
viewModel.openedFilesCache = null
151-
return
152-
}
149+
// if the user manually closes the project, this will be true
150+
// in this case, don't overwrite the already saved cache
151+
if (!isOpenedFilesSaved.get()) {
152+
saveOpenedFiles()
153+
}
154+
}
155+
156+
override fun saveOpenedFiles() {
157+
writeOpenedFilesCache(getOpenedFiles(), getCurrentEditor()?.editor?.file)
158+
}
153159

154-
getOpenedFiles().also {
155-
val cache = OpenedFilesCache(current, it)
156-
viewModel.writeOpenedFiles(cache)
157-
viewModel.openedFilesCache = if (!isDestroying) cache else null
160+
private fun writeOpenedFilesCache(openedFiles: List<OpenedFile>, selectedFile: File?) {
161+
if (selectedFile == null || openedFiles.isEmpty()) {
162+
viewModel.writeOpenedFiles(null)
163+
viewModel.openedFilesCache = null
164+
log.debug("[onPause]", "No opened files.", "Opened files cache reset to null.")
165+
isOpenedFilesSaved.set(true)
166+
return
158167
}
168+
169+
val cache = OpenedFilesCache(selectedFile = selectedFile.absolutePath, allFiles = openedFiles)
170+
171+
viewModel.writeOpenedFiles(cache)
172+
viewModel.openedFilesCache = if (!isDestroying) cache else null
173+
log.debug("[onPause]", "Opened files cache reset to ${viewModel.openedFilesCache}")
174+
isOpenedFilesSaved.set(true)
159175
}
160176

161177
override fun onStart() {

app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ abstract class ProjectHandlerActivity : BaseEditorActivity(), IProjectHandler {
8787

8888
abstract fun doCloseAll(runAfter: () -> Unit)
8989

90+
abstract fun saveOpenedFiles()
91+
9092
override fun doDismissSearchProgress() {
9193
if (mSearchingProgress?.isShowing == true) {
9294
mSearchingProgress!!.dismiss()
@@ -445,6 +447,13 @@ abstract class ProjectHandlerActivity : BaseEditorActivity(), IProjectHandler {
445447
}
446448

447449
private fun closeProject(manualFinish: Boolean) {
450+
if (manualFinish) {
451+
// if the user is manually closing the project,
452+
// save the opened files cache
453+
// this is needed because in this case, the opened files cache will be empty
454+
// when onPause will be called.
455+
saveOpenedFiles()
456+
}
448457

449458
// Make sure we close files
450459
// This will make sure that file contents are not erased.

app/src/main/java/com/itsaky/androidide/viewmodel/EditorViewModel.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ import androidx.lifecycle.MutableLiveData
2323
import androidx.lifecycle.Observer
2424
import androidx.lifecycle.ViewModel
2525
import com.blankj.utilcode.util.FileUtils
26-
import com.google.gson.Gson
2726
import com.google.gson.GsonBuilder
28-
import com.google.gson.reflect.TypeToken
2927
import com.itsaky.androidide.models.OpenedFilesCache
3028
import com.itsaky.androidide.projects.ProjectManager
3129
import com.itsaky.androidide.tasks.executeAsync
@@ -168,7 +166,7 @@ class EditorViewModel : ViewModel() {
168166
* @return The list of opened files.
169167
*/
170168
fun getOpenedFiles(): List<File> {
171-
return files.value!!
169+
return files.value ?: mutableListOf()
172170
}
173171

174172
/**

0 commit comments

Comments
 (0)