Merge caldav account view model

pull/1412/head
Alex Baker 3 years ago
parent 874069354d
commit 0dbd0551d1

@ -1,19 +0,0 @@
package org.tasks.caldav
import dagger.hilt.android.lifecycle.HiltViewModel
import org.tasks.ui.CompletableViewModel
import javax.inject.Inject
@HiltViewModel
class AddCaldavAccountViewModel @Inject constructor(
private val provider: CaldavClientProvider
) : CompletableViewModel<String>() {
suspend fun addAccount(url: String, username: String, password: String) {
run {
provider
.forUrl(url, username, password)
.setForeground()
.homeSet(username, password)
}
}
}

@ -4,6 +4,7 @@ import android.app.Activity
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.widget.Toolbar
import androidx.core.view.isVisible
import com.todoroo.astrid.helper.UUIDHelper
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
@ -13,13 +14,22 @@ import timber.log.Timber
@AndroidEntryPoint
class CaldavAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Toolbar.OnMenuItemClickListener {
private val addCaldavAccountViewModel: AddCaldavAccountViewModel by viewModels()
private val updateCaldavAccountViewModel: UpdateCaldavAccountViewModel by viewModels()
private val viewModel: CaldavAccountViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
addCaldavAccountViewModel.observe(this, this::addAccount, this::requestFailed)
updateCaldavAccountViewModel.observe(this, this::updateAccount, this::requestFailed)
viewModel.inFlight.observe(this) { binding.progressBar.progressBar.isVisible = it }
viewModel.error.observe(this) { throwable ->
throwable?.let {
requestFailed(it)
viewModel.error.value = null
}
}
viewModel.finish.observe(this) {
setResult(RESULT_OK, it)
finish()
}
}
override val description: Int
@ -28,7 +38,7 @@ class CaldavAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Toolb
private suspend fun addAccount(principal: String) {
hideProgressIndicator()
Timber.d("Found principal: %s", principal)
val newAccount = CaldavAccount().apply {
CaldavAccount().apply {
name = newName
url = principal
username = newUsername
@ -59,14 +69,15 @@ class CaldavAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Toolb
finish()
}
override suspend fun addAccount(url: String, username: String, password: String) =
addCaldavAccountViewModel.addAccount(url, username, password)
override suspend fun addAccount(url: String, username: String, password: String) {
viewModel.addAccount(url, username, password)?.let { addAccount(it) }
}
override suspend fun updateAccount(url: String, username: String, password: String) =
updateCaldavAccountViewModel.updateCaldavAccount(url, username, password)
override suspend fun updateAccount(url: String, username: String, password: String) {
viewModel.updateCaldavAccount(url, username, password)?.let { updateAccount(it) }
}
override suspend fun updateAccount() =
updateAccount(caldavAccount!!.url)
override suspend fun updateAccount() = updateAccount(caldavAccount!!.url)
override val newPassword: String?
get() {

@ -0,0 +1,28 @@
package org.tasks.caldav
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import javax.inject.Inject
@HiltViewModel
class CaldavAccountViewModel @Inject constructor(
private val provider: CaldavClientProvider
) : CaldavViewModel() {
suspend fun addAccount(url: String, username: String, password: String): String? =
doRequest {
withContext(Dispatchers.IO) {
provider
.forUrl(url, username, password)
.setForeground()
.homeSet(username, password)
}
}
suspend fun updateCaldavAccount(url: String, username: String, password: String): String? =
doRequest {
withContext(Dispatchers.IO) {
provider.forUrl(url, username, password).homeSet(username, password)
}
}
}

@ -1,8 +1,6 @@
package org.tasks.caldav
import android.content.Intent
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.todoroo.astrid.activity.MainActivity
import com.todoroo.astrid.activity.TaskListFragment
import com.todoroo.astrid.api.CaldavFilter
@ -10,7 +8,6 @@ import com.todoroo.astrid.helper.UUIDHelper
import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.withContext
import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavCalendar
@ -20,7 +17,6 @@ import org.tasks.data.CaldavDao
import org.tasks.data.PrincipalDao
import org.tasks.data.PrincipalWithAccess
import org.tasks.sync.SyncAdapters
import timber.log.Timber
import javax.inject.Inject
@HiltViewModel
@ -30,10 +26,7 @@ class CaldavCalendarViewModel @Inject constructor(
private val principalDao: PrincipalDao,
private val taskDeleter: TaskDeleter,
private val syncAdapters: SyncAdapters,
) : ViewModel() {
val error = MutableLiveData<Throwable?>()
val inFlight = MutableLiveData(false)
val finish = MutableLiveData<Intent>()
) : CaldavViewModel() {
var ignoreFinish = false
suspend fun createCalendar(
@ -115,21 +108,4 @@ class CaldavCalendarViewModel @Inject constructor(
}
principalDao.delete(principal.access)
}
private suspend fun <T> doRequest(action: suspend () -> T): T? =
withContext(NonCancellable) {
if (inFlight.value == true) {
return@withContext null
}
inFlight.value = true
try {
return@withContext action()
} catch (e: Exception) {
Timber.e(e)
error.value = e
return@withContext null
} finally {
inFlight.value = false
}
}
}

@ -0,0 +1,31 @@
package org.tasks.caldav
import android.content.Intent
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.withContext
import timber.log.Timber
abstract class CaldavViewModel : ViewModel() {
val error = MutableLiveData<Throwable?>()
val inFlight = MutableLiveData(false)
val finish = MutableLiveData<Intent>()
protected suspend fun <T> doRequest(action: suspend () -> T): T? =
withContext(NonCancellable) {
if (inFlight.value == true) {
return@withContext null
}
inFlight.value = true
try {
return@withContext action()
} catch (e: Exception) {
Timber.e(e)
error.value = e
return@withContext null
} finally {
inFlight.value = false
}
}
}

@ -1,14 +0,0 @@
package org.tasks.caldav
import dagger.hilt.android.lifecycle.HiltViewModel
import org.tasks.ui.CompletableViewModel
import javax.inject.Inject
@HiltViewModel
class UpdateCaldavAccountViewModel @Inject constructor(
private val provider: CaldavClientProvider
) : CompletableViewModel<String>() {
suspend fun updateCaldavAccount(url: String, username: String, password: String) {
run { provider.forUrl(url, username, password).homeSet(username, password) }
}
}
Loading…
Cancel
Save