diff --git a/app/src/main/java/org/tasks/drive/DriveInvoker.kt b/app/src/main/java/org/tasks/drive/DriveInvoker.kt
index e3b1420b0..fab709094 100644
--- a/app/src/main/java/org/tasks/drive/DriveInvoker.kt
+++ b/app/src/main/java/org/tasks/drive/DriveInvoker.kt
@@ -73,14 +73,14 @@ class DriveInvoker @Inject constructor(
}
@Throws(IOException::class)
- suspend fun createFile(folderId: String, uri: Uri?) {
+ suspend fun createFile(folderId: String, uri: Uri?): File? {
val mime = FileHelper.getMimeType(context, uri!!)
val metadata = File()
.setParents(listOf(folderId))
.setMimeType(mime)
.setName(FileHelper.getFilename(context, uri))
val content = InputStreamContent(mime, context.contentResolver.openInputStream(uri!!))
- execute(service.files().create(metadata, content))
+ return execute(service.files().create(metadata, content))
}
@Synchronized
diff --git a/app/src/main/java/org/tasks/jobs/DriveUploader.kt b/app/src/main/java/org/tasks/jobs/DriveUploader.kt
index 229e771e3..a95f05952 100644
--- a/app/src/main/java/org/tasks/jobs/DriveUploader.kt
+++ b/app/src/main/java/org/tasks/jobs/DriveUploader.kt
@@ -8,6 +8,7 @@ import androidx.work.Data
import androidx.work.WorkerParameters
import com.google.api.client.googleapis.json.GoogleJsonResponseException
import com.google.api.services.drive.model.File
+import com.todoroo.astrid.backup.BackupConstants
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
@@ -38,6 +39,12 @@ class DriveUploader @WorkerInject constructor(
val folder = getFolder() ?: return Result.failure()
preferences.setString(R.string.p_google_drive_backup_folder, folder.id)
drive.createFile(folder.id, uri)
+ ?.let {
+ preferences.setLong(
+ R.string.p_backups_drive_last,
+ BackupConstants.getTimestamp(it)
+ )
+ }
localBroadcastManager.broadcastPreferenceRefresh()
if (inputData.getBoolean(EXTRA_PURGE, false)) {
drive
diff --git a/app/src/main/java/org/tasks/preferences/IconPreference.kt b/app/src/main/java/org/tasks/preferences/IconPreference.kt
index a165b640e..5dbfd7452 100644
--- a/app/src/main/java/org/tasks/preferences/IconPreference.kt
+++ b/app/src/main/java/org/tasks/preferences/IconPreference.kt
@@ -10,16 +10,23 @@ import org.tasks.R
class IconPreference(context: Context?, attrs: AttributeSet?) : Preference(context, attrs) {
- var iconVisible = false
+ private var imageView: ImageView? = null
override fun onBindViewHolder(holder: PreferenceViewHolder?) {
super.onBindViewHolder(holder)
- (holder?.findViewById(R.id.preference_icon) as ImageView?)?.visibility = if (iconVisible) {
- View.VISIBLE
- } else {
- View.GONE
+ imageView = holder?.findViewById(R.id.preference_icon) as ImageView?
+ updateVisibility()
+ }
+
+ var iconVisible: Boolean = false
+ set(value) {
+ field = value
+ updateVisibility()
}
+
+ private fun updateVisibility() {
+ imageView?.visibility = if (iconVisible) View.VISIBLE else View.GONE
}
init {
diff --git a/app/src/main/java/org/tasks/preferences/PreferencesViewModel.kt b/app/src/main/java/org/tasks/preferences/PreferencesViewModel.kt
index e38b02266..3512aae94 100644
--- a/app/src/main/java/org/tasks/preferences/PreferencesViewModel.kt
+++ b/app/src/main/java/org/tasks/preferences/PreferencesViewModel.kt
@@ -7,7 +7,6 @@ import androidx.hilt.lifecycle.ViewModelInject
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.google.api.client.googleapis.json.GoogleJsonResponseException
import com.google.api.services.drive.DriveScopes
import com.todoroo.astrid.backup.BackupConstants
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -62,18 +61,20 @@ class PreferencesViewModel @ViewModelInject constructor(
lastDriveBackup.value = -1L
return@launch
}
- val files = preferences.getStringValue(R.string.p_google_drive_backup_folder)
+ lastDriveBackup.value = preferences
+ .getStringValue(R.string.p_google_drive_backup_folder)
?.takeIf { it.isNotBlank() }
?.let {
try {
driveInvoker.getFilesByPrefix(it, "auto.", "user.")
- } catch (e: GoogleJsonResponseException) {
+ .firstOrNull()
+ ?.let(BackupConstants::getTimestamp)
+ } catch (e: Exception) {
Timber.e(e)
null
}
}
- ?: emptyList()
- lastDriveBackup.value = files.firstOrNull()?.let { BackupConstants.getTimestamp(it) } ?: -1
+ ?: preferences.getLong(R.string.p_backups_drive_last, -1L)
}
fun updateLocalBackup() = viewModelScope.launch {
diff --git a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt
index bdab173f0..b95f382cd 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt
@@ -232,7 +232,8 @@ class Backups : InjectingPreferenceFragment() {
else -> {
preference.summary = null
preference.icon = null
- preferences.setString(R.string.p_google_drive_backup_account, null)
+ preferences.remove(R.string.p_backups_drive_last)
+ preferences.remove(R.string.p_google_drive_backup_account)
updateDriveAccount()
viewModel.updateDriveBackup()
true
diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml
index 5ddd7bd2c..0d27e7843 100644
--- a/app/src/main/res/values/keys.xml
+++ b/app/src/main/res/values/keys.xml
@@ -377,6 +377,7 @@
backups_ignore_warnings
backups_android_backup_enabled
backups_android_backup_last
+ backups_drive_last
cv
whats_new