diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/managers/LoadingManager.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/managers/LoadingManager.kt new file mode 100644 index 000000000..74187bb53 --- /dev/null +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/managers/LoadingManager.kt @@ -0,0 +1,20 @@ +package com.habitrpg.wearos.habitica.managers + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class LoadingManager @Inject constructor() { + private val _isLoading = MutableLiveData() + val isLoading: LiveData = _isLoading + + fun startLoading() { + _isLoading.value = true + } + + fun endLoading() { + _isLoading.value = false + } +} \ No newline at end of file diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt index d2ebc22f5..22c8b880c 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt @@ -14,12 +14,17 @@ import com.google.android.gms.wearable.CapabilityClient import com.google.android.gms.wearable.MessageClient import com.google.android.gms.wearable.Wearable import com.habitrpg.android.habitica.databinding.ActivityWrapperBinding +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.ui.viewmodels.BaseViewModel import com.habitrpg.wearos.habitica.ui.views.IndeterminateProgressView import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import javax.inject.Inject abstract class BaseActivity : ComponentActivity() { + @Inject + lateinit var loadingManager: LoadingManager + val messageClient: MessageClient by lazy { Wearable.getMessageClient(this) } val capabilityClient: CapabilityClient by lazy { Wearable.getCapabilityClient(this) } companion object { @@ -45,6 +50,14 @@ abstract class BaseActivity : ComponentActivi } startActivity(intent) } + + loadingManager.isLoading.observe(this) { + if (it) { + startAnimatingProgress() + } else { + stopAnimatingProgress() + } + } } override fun onResume() { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt index cd186e209..3ff8b4e32 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/AvatarViewModel.kt @@ -2,6 +2,7 @@ package com.habitrpg.wearos.habitica.ui.viewmodels import androidx.lifecycle.asLiveData import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -9,10 +10,10 @@ import javax.inject.Inject @HiltViewModel class AvatarViewModel @Inject constructor( userRepository: UserRepository, - exceptionBuilder: ExceptionHandlerBuilder + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager ) : BaseViewModel( userRepository, - exceptionBuilder + exceptionBuilder, loadingManager ) { var user = userRepository.getUser().asLiveData() } \ No newline at end of file diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/BaseViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/BaseViewModel.kt index 8cfd85eb6..b61a2077f 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/BaseViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/BaseViewModel.kt @@ -3,18 +3,15 @@ package com.habitrpg.wearos.habitica.ui.viewmodels import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.models.DisplayedError -import com.habitrpg.wearos.habitica.models.user.User import com.habitrpg.wearos.habitica.util.ErrorPresenter import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder open class BaseViewModel( val userRepository: UserRepository, - val exceptionBuilder: ExceptionHandlerBuilder + val exceptionBuilder: ExceptionHandlerBuilder, + val loadingManager: LoadingManager ): ViewModel(), ErrorPresenter { - suspend fun retrieveUser(): User? { - return userRepository.retrieveUser() - } - override val errorValues = MutableLiveData() } \ No newline at end of file diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/FaintViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/FaintViewModel.kt index 93d03195f..c08824fa8 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/FaintViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/FaintViewModel.kt @@ -1,14 +1,15 @@ package com.habitrpg.wearos.habitica.ui.viewmodels import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel class FaintViewModel @Inject constructor(userRepository: UserRepository, - exceptionBuilder: ExceptionHandlerBuilder -) : BaseViewModel(userRepository, exceptionBuilder) { + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { suspend fun revive() { userRepository.revive() } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/HabitDrectionViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/HabitDrectionViewModel.kt index 093d35367..776c69559 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/HabitDrectionViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/HabitDrectionViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.viewModelScope import com.habitrpg.common.habitica.models.responses.TaskDirection import com.habitrpg.wearos.habitica.data.repositories.TaskRepository import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch @@ -16,8 +17,8 @@ class HabitDrectionViewModel @Inject constructor( savedStateHandle: SavedStateHandle, userRepository: UserRepository, val taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder -) : BaseViewModel(userRepository, exceptionBuilder) { + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { val taskID = savedStateHandle.get("task_id") val task = taskRepository.getTask(taskID).asLiveData() diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt index 3a79b0650..8b200e341 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/LoginViewModel.kt @@ -23,6 +23,7 @@ import com.habitrpg.common.habitica.models.auth.UserAuthResponse import com.habitrpg.common.habitica.models.auth.UserAuthSocial import com.habitrpg.wearos.habitica.data.ApiClient import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch @@ -34,8 +35,8 @@ class LoginViewModel @Inject constructor(userRepository: UserRepository, exceptionBuilder: ExceptionHandlerBuilder, val keyHelper: KeyHelper?, val sharedPreferences: SharedPreferences, - val apiClient: ApiClient -) : BaseViewModel(userRepository, exceptionBuilder) { + val apiClient: ApiClient, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { lateinit var onLoginCompleted: () -> Unit var googleEmail: String? = null @@ -133,7 +134,7 @@ class LoginViewModel @Inject constructor(userRepository: UserRepository, saveTokens(userAuthResponse.apiToken, userAuthResponse.id) } catch (e: Exception) { } - retrieveUser() + userRepository.retrieveUser() onLoginCompleted() } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/MainViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/MainViewModel.kt index b38f54a7a..96e9d9dda 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/MainViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/MainViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.asLiveData import androidx.lifecycle.viewModelScope import com.habitrpg.wearos.habitica.data.repositories.TaskRepository import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch @@ -13,14 +14,16 @@ import javax.inject.Inject class MainViewModel @Inject constructor( userRepository: UserRepository, val taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder -) : BaseViewModel(userRepository, exceptionBuilder) { + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { var user = userRepository.getUser().asLiveData() init { viewModelScope.launch(exceptionBuilder.userFacing(this)) { + loadingManager.startLoading() userRepository.retrieveUser() taskRepository.retrieveTasks() + loadingManager.endLoading() } } } \ No newline at end of file diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/RYAViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/RYAViewModel.kt index c66128225..dcdd3394f 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/RYAViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/RYAViewModel.kt @@ -6,6 +6,7 @@ import com.habitrpg.common.habitica.models.responses.TaskDirection import com.habitrpg.common.habitica.models.tasks.TaskType import com.habitrpg.wearos.habitica.data.repositories.TaskRepository import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.models.tasks.Task import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel @@ -16,8 +17,8 @@ import javax.inject.Inject class RYAViewModel @Inject constructor( userRepository: UserRepository, val taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder -) : BaseViewModel(userRepository, exceptionBuilder) { + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { val tasks = taskRepository.getTasks(TaskType.DAILY).asLiveData() private val tasksToComplete = mutableListOf() @@ -38,12 +39,14 @@ class RYAViewModel @Inject constructor( fun runCron(function: (Boolean) -> Unit) { viewModelScope.launch(exceptionBuilder.userFacing(this)) { + loadingManager.startLoading() for (task in tasksToComplete) { taskRepository.scoreTask(null, task, TaskDirection.UP) } userRepository.runCron() userRepository.retrieveUser() function(true) + loadingManager.endLoading() } } } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SettingsViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SettingsViewModel.kt index b71c7dadd..d79cc803e 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SettingsViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SettingsViewModel.kt @@ -4,6 +4,7 @@ import android.content.SharedPreferences import androidx.core.content.edit import com.habitrpg.wearos.habitica.data.ApiClient import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -12,8 +13,8 @@ import javax.inject.Inject class SettingsViewModel @Inject constructor(userRepository: UserRepository, exceptionBuilder: ExceptionHandlerBuilder, private val apiClient: ApiClient, - private val sharedPreferences: SharedPreferences -) : BaseViewModel(userRepository, exceptionBuilder) { + private val sharedPreferences: SharedPreferences, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { fun logout() { sharedPreferences.edit { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SplashViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SplashViewModel.kt index a6fb1f105..9536654e7 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SplashViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/SplashViewModel.kt @@ -9,6 +9,7 @@ import com.habitrpg.common.habitica.api.HostConfig import com.habitrpg.common.habitica.helpers.KeyHelper import com.habitrpg.wearos.habitica.data.ApiClient import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch @@ -20,8 +21,8 @@ class SplashViewModel @Inject constructor(userRepository: UserRepository, val hostConfig: HostConfig, val apiClient: ApiClient, val sharedPreferences: SharedPreferences, - val keyHelper: KeyHelper? -) : BaseViewModel(userRepository, exceptionBuilder), MessageClient.OnMessageReceivedListener { + val keyHelper: KeyHelper?, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager), MessageClient.OnMessageReceivedListener { lateinit var onLoginCompleted: (Boolean) -> Unit val hasAuthentication: Boolean get() { @@ -43,7 +44,7 @@ class SplashViewModel @Inject constructor(userRepository: UserRepository, onLoginCompleted(false) return@launch } - retrieveUser() + userRepository.retrieveUser() onLoginCompleted(true) } } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/StatsViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/StatsViewModel.kt index 65d5c422b..0b43fe33a 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/StatsViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/StatsViewModel.kt @@ -3,6 +3,7 @@ package com.habitrpg.wearos.habitica.ui.viewmodels import androidx.lifecycle.LiveData import androidx.lifecycle.asLiveData import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.models.user.User import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel @@ -10,8 +11,8 @@ import javax.inject.Inject @HiltViewModel class StatsViewModel @Inject constructor(userRepository: UserRepository, - exceptionBuilder: ExceptionHandlerBuilder -) : BaseViewModel(userRepository, exceptionBuilder) { + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { var user: LiveData = userRepository.getUser().asLiveData() diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskDetailViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskDetailViewModel.kt index a5cfbe82b..df55ce8dd 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskDetailViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskDetailViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.asLiveData import com.habitrpg.wearos.habitica.data.repositories.TaskRepository import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -13,8 +14,8 @@ class TaskDetailViewModel @Inject constructor( savedStateHandle: SavedStateHandle, taskRepository: TaskRepository, userRepository: UserRepository, - exceptionBuilder: ExceptionHandlerBuilder -) : BaseViewModel(userRepository, exceptionBuilder) { + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { val taskID = savedStateHandle.get("task_id") val task = taskRepository.getTask(taskID).asLiveData() } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskFormViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskFormViewModel.kt index 2879e311d..8bbe80cff 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskFormViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskFormViewModel.kt @@ -4,6 +4,7 @@ import com.habitrpg.common.habitica.models.tasks.Frequency import com.habitrpg.common.habitica.models.tasks.TaskType import com.habitrpg.wearos.habitica.data.repositories.TaskRepository import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.models.tasks.Task import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel @@ -13,8 +14,8 @@ import javax.inject.Inject class TaskFormViewModel @Inject constructor( userRepository: UserRepository, val taskRepository: TaskRepository, - exceptionBuilder: ExceptionHandlerBuilder -) : BaseViewModel(userRepository, exceptionBuilder) { + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { suspend fun saveTask(text: CharSequence?, taskType: TaskType?) { if (text?.isNotBlank() != true || taskType == null) { return diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskListViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskListViewModel.kt index 7e4a69c7f..e24f54edf 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskListViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskListViewModel.kt @@ -8,6 +8,7 @@ import com.habitrpg.common.habitica.models.responses.TaskScoringResult import com.habitrpg.common.habitica.models.tasks.TaskType import com.habitrpg.wearos.habitica.data.repositories.TaskRepository import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.models.tasks.Task import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel @@ -19,8 +20,8 @@ class TaskListViewModel @Inject constructor( savedStateHandle: SavedStateHandle, private val taskRepository: TaskRepository, userRepository: UserRepository, - exceptionBuilder: ExceptionHandlerBuilder -) : BaseViewModel(userRepository, exceptionBuilder) { + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { val taskType = TaskType.from(savedStateHandle.get("task_type")) val tasks = taskRepository.getTasks(taskType ?: TaskType.HABIT).asLiveData() val user = userRepository.getUser() diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskResultViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskResultViewModel.kt index af1ffab3f..f658f9aaa 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskResultViewModel.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/TaskResultViewModel.kt @@ -3,14 +3,15 @@ package com.habitrpg.wearos.habitica.ui.viewmodels import androidx.lifecycle.SavedStateHandle import com.habitrpg.common.habitica.models.responses.TaskScoringResult import com.habitrpg.wearos.habitica.data.repositories.UserRepository +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel class TaskResultViewModel @Inject constructor(savedStateHandle: SavedStateHandle, userRepository: UserRepository, - exceptionBuilder: ExceptionHandlerBuilder -) : BaseViewModel(userRepository, exceptionBuilder) { + exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager +) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { val hasDrop: Boolean get() { return result?.drop?.key?.isNotBlank() == true || (result?.questItemsFound ?: 0) > 0 diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaCoroutineExceptionhandler.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaCoroutineExceptionhandler.kt index 7c0d05aea..c95323d67 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaCoroutineExceptionhandler.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/util/HabiticaCoroutineExceptionhandler.kt @@ -1,13 +1,14 @@ package com.habitrpg.wearos.habitica.util import android.util.Log +import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.models.DisplayedError import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.CoroutineExceptionHandler import javax.inject.Inject @ViewModelScoped -class ExceptionHandlerBuilder @Inject constructor() { +class ExceptionHandlerBuilder @Inject constructor(val loadingManager: LoadingManager) { fun silent(): CoroutineExceptionHandler { return CoroutineExceptionHandler { context, throwable -> Log.e(context.toString(), "Error: ${throwable.cause}", throwable) @@ -18,6 +19,7 @@ class ExceptionHandlerBuilder @Inject constructor() { return CoroutineExceptionHandler { _, throwable -> Log.e("Coroutine Error", "Error: ${throwable.cause}", throwable) errorPresenter.errorValues.value = throwable.message?.let { DisplayedError(it) } + loadingManager.endLoading() } } } \ No newline at end of file