Fix backup warning issues

* Cache last Drive backup timestamp for offline use
* Fix updating backup error indicator
pull/1139/head
Alex Baker 5 years ago
parent c96c1380f4
commit 53a1568d9d

@ -73,14 +73,14 @@ class DriveInvoker @Inject constructor(
} }
@Throws(IOException::class) @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 mime = FileHelper.getMimeType(context, uri!!)
val metadata = File() val metadata = File()
.setParents(listOf(folderId)) .setParents(listOf(folderId))
.setMimeType(mime) .setMimeType(mime)
.setName(FileHelper.getFilename(context, uri)) .setName(FileHelper.getFilename(context, uri))
val content = InputStreamContent(mime, context.contentResolver.openInputStream(uri!!)) val content = InputStreamContent(mime, context.contentResolver.openInputStream(uri!!))
execute(service.files().create(metadata, content)) return execute(service.files().create(metadata, content))
} }
@Synchronized @Synchronized

@ -8,6 +8,7 @@ import androidx.work.Data
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import com.google.api.client.googleapis.json.GoogleJsonResponseException import com.google.api.client.googleapis.json.GoogleJsonResponseException
import com.google.api.services.drive.model.File import com.google.api.services.drive.model.File
import com.todoroo.astrid.backup.BackupConstants
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
@ -38,6 +39,12 @@ class DriveUploader @WorkerInject constructor(
val folder = getFolder() ?: return Result.failure() val folder = getFolder() ?: return Result.failure()
preferences.setString(R.string.p_google_drive_backup_folder, folder.id) preferences.setString(R.string.p_google_drive_backup_folder, folder.id)
drive.createFile(folder.id, uri) drive.createFile(folder.id, uri)
?.let {
preferences.setLong(
R.string.p_backups_drive_last,
BackupConstants.getTimestamp(it)
)
}
localBroadcastManager.broadcastPreferenceRefresh() localBroadcastManager.broadcastPreferenceRefresh()
if (inputData.getBoolean(EXTRA_PURGE, false)) { if (inputData.getBoolean(EXTRA_PURGE, false)) {
drive drive

@ -10,16 +10,23 @@ import org.tasks.R
class IconPreference(context: Context?, attrs: AttributeSet?) : Preference(context, attrs) { class IconPreference(context: Context?, attrs: AttributeSet?) : Preference(context, attrs) {
var iconVisible = false private var imageView: ImageView? = null
override fun onBindViewHolder(holder: PreferenceViewHolder?) { override fun onBindViewHolder(holder: PreferenceViewHolder?) {
super.onBindViewHolder(holder) super.onBindViewHolder(holder)
(holder?.findViewById(R.id.preference_icon) as ImageView?)?.visibility = if (iconVisible) { imageView = holder?.findViewById(R.id.preference_icon) as ImageView?
View.VISIBLE updateVisibility()
} else {
View.GONE
} }
var iconVisible: Boolean = false
set(value) {
field = value
updateVisibility()
}
private fun updateVisibility() {
imageView?.visibility = if (iconVisible) View.VISIBLE else View.GONE
} }
init { init {

@ -7,7 +7,6 @@ import androidx.hilt.lifecycle.ViewModelInject
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.google.api.client.googleapis.json.GoogleJsonResponseException
import com.google.api.services.drive.DriveScopes import com.google.api.services.drive.DriveScopes
import com.todoroo.astrid.backup.BackupConstants import com.todoroo.astrid.backup.BackupConstants
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
@ -62,18 +61,20 @@ class PreferencesViewModel @ViewModelInject constructor(
lastDriveBackup.value = -1L lastDriveBackup.value = -1L
return@launch 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() } ?.takeIf { it.isNotBlank() }
?.let { ?.let {
try { try {
driveInvoker.getFilesByPrefix(it, "auto.", "user.") driveInvoker.getFilesByPrefix(it, "auto.", "user.")
} catch (e: GoogleJsonResponseException) { .firstOrNull()
?.let(BackupConstants::getTimestamp)
} catch (e: Exception) {
Timber.e(e) Timber.e(e)
null null
} }
} }
?: emptyList() ?: preferences.getLong(R.string.p_backups_drive_last, -1L)
lastDriveBackup.value = files.firstOrNull()?.let { BackupConstants.getTimestamp(it) } ?: -1
} }
fun updateLocalBackup() = viewModelScope.launch { fun updateLocalBackup() = viewModelScope.launch {

@ -232,7 +232,8 @@ class Backups : InjectingPreferenceFragment() {
else -> { else -> {
preference.summary = null preference.summary = null
preference.icon = 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() updateDriveAccount()
viewModel.updateDriveBackup() viewModel.updateDriveBackup()
true true

@ -377,6 +377,7 @@
<string name="p_backups_ignore_warnings">backups_ignore_warnings</string> <string name="p_backups_ignore_warnings">backups_ignore_warnings</string>
<string name="p_backups_android_backup_enabled">backups_android_backup_enabled</string> <string name="p_backups_android_backup_enabled">backups_android_backup_enabled</string>
<string name="p_backups_android_backup_last">backups_android_backup_last</string> <string name="p_backups_android_backup_last">backups_android_backup_last</string>
<string name="p_backups_drive_last">backups_drive_last</string>
<string name="p_current_version">cv</string> <string name="p_current_version">cv</string>
<string name="event_whats_new">whats_new</string> <string name="event_whats_new">whats_new</string>

Loading…
Cancel
Save