@@ -21,8 +21,10 @@ import com.philkes.notallyx.presentation.viewmodel.preference.Theme
2121import com.philkes.notallyx.presentation.widget.WidgetProvider
2222import com.philkes.notallyx.utils.backup.AUTO_BACKUP_WORK_NAME
2323import com.philkes.notallyx.utils.backup.autoBackupOnSave
24+ import com.philkes.notallyx.utils.backup.autoBackupOnSaveFileExists
2425import com.philkes.notallyx.utils.backup.cancelAutoBackup
2526import com.philkes.notallyx.utils.backup.containsNonCancelled
27+ import com.philkes.notallyx.utils.backup.createBackup
2628import com.philkes.notallyx.utils.backup.deleteModifiedNoteBackup
2729import com.philkes.notallyx.utils.backup.isEqualTo
2830import com.philkes.notallyx.utils.backup.modifiedNoteBackupExists
@@ -31,6 +33,7 @@ import com.philkes.notallyx.utils.backup.updateAutoBackup
3133import com.philkes.notallyx.utils.observeOnce
3234import com.philkes.notallyx.utils.security.UnlockReceiver
3335import java.util.concurrent.TimeUnit
36+ import kotlinx.coroutines.CoroutineScope
3437import kotlinx.coroutines.Dispatchers
3538import kotlinx.coroutines.MainScope
3639import kotlinx.coroutines.launch
@@ -79,7 +82,9 @@ class NotallyXApplication : Application(), Application.ActivityLifecycleCallback
7982 backupFolderBefore,
8083 backupFolder,
8184 preferences.periodicBackups.value.periodInDays.toLong(),
85+ execute = true ,
8286 )
87+ checkUpdateAutoBackupOnSave(backupFolderBefore, backupFolder)
8388 }
8489 preferences.periodicBackups.observeForever { value ->
8590 val backupFolder = preferences.backupsFolder.value
@@ -117,14 +122,12 @@ class NotallyXApplication : Application(), Application.ActivityLifecycleCallback
117122 previousBackupPassword != backupPassword)
118123 ) {
119124 deleteModifiedNoteBackup(backupPath)
120- MainScope ().launch {
121- withContext(Dispatchers .IO ) {
122- autoBackupOnSave(
123- backupPath,
124- savedNote = null ,
125- password = backupPassword,
126- )
127- }
125+ runOnIODispatcher {
126+ autoBackupOnSave(
127+ backupPath,
128+ savedNote = null ,
129+ password = backupPassword,
130+ )
128131 }
129132 }
130133 }
@@ -136,6 +139,7 @@ class NotallyXApplication : Application(), Application.ActivityLifecycleCallback
136139 backupFolderBefore : String? ,
137140 backupFolder : String ,
138141 periodInDays : Long ,
142+ execute : Boolean = false,
139143 ) {
140144 val workManager = getWorkManagerSafe() ? : return
141145 workManager.getWorkInfosForUniqueWorkLiveData(AUTO_BACKUP_WORK_NAME ).observeOnce { workInfos
@@ -150,10 +154,30 @@ class NotallyXApplication : Application(), Application.ActivityLifecycleCallback
150154 (backupFolderBefore != null && backupFolderBefore != backupFolder)
151155 ) {
152156 workManager.scheduleAutoBackup(this , periodInDays)
157+ if (execute) {
158+ runOnIODispatcher { createBackup() }
159+ }
153160 } else if (
154161 workInfos.first().periodicityInfo?.isEqualTo(periodInDays, TimeUnit .DAYS ) == false
155162 ) {
156163 workManager.updateAutoBackup(workInfos, periodInDays)
164+ if (execute) {
165+ runOnIODispatcher { createBackup() }
166+ }
167+ }
168+ }
169+ }
170+
171+ private fun checkUpdateAutoBackupOnSave (backupFolderBefore : String? , backupFolder : String ) {
172+ if (preferences.backupOnSave.value) {
173+ if (backupFolderBefore == null && ! autoBackupOnSaveFileExists(backupFolder)) {
174+ runOnIODispatcher {
175+ autoBackupOnSave(backupFolder, preferences.backupPassword.value, null )
176+ }
177+ }
178+ } else if (backupFolderBefore != backupFolder) {
179+ runOnIODispatcher {
180+ autoBackupOnSave(backupFolder, preferences.backupPassword.value, null )
157181 }
158182 }
159183 }
@@ -167,10 +191,8 @@ class NotallyXApplication : Application(), Application.ActivityLifecycleCallback
167191 }
168192 }
169193
170- companion object {
171- private fun isTestRunner (): Boolean {
172- return Build .FINGERPRINT .equals(" robolectric" , ignoreCase = true )
173- }
194+ private fun <T > runOnIODispatcher (block : suspend CoroutineScope .() -> T ) {
195+ MainScope ().launch { withContext(Dispatchers .IO , block) }
174196 }
175197
176198 override fun onActivityCreated (activity : Activity , savedInstanceState : Bundle ? ) {
@@ -188,4 +210,10 @@ class NotallyXApplication : Application(), Application.ActivityLifecycleCallback
188210 override fun onActivitySaveInstanceState (activity : Activity , outState : Bundle ) {}
189211
190212 override fun onActivityDestroyed (activity : Activity ) {}
213+
214+ companion object {
215+ private fun isTestRunner (): Boolean {
216+ return Build .FINGERPRINT .equals(" robolectric" , ignoreCase = true )
217+ }
218+ }
191219}
0 commit comments