diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskRepository.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskRepository.kt index eb1ef5a54..d5ec83c93 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskRepository.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskRepository.kt @@ -36,7 +36,7 @@ class TaskRepository @Inject constructor( if (direction == TaskDirection.UP) { task.counterUp = task.counterUp?.plus(1) ?: 1 } else { - task.counterUp = task.counterDown?.plus(1) ?: 1 + task.counterDown = task.counterDown?.plus(1) ?: 1 } } else if (task.type == TaskType.DAILY) { if (direction == TaskDirection.UP) { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserRepository.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserRepository.kt index 0b3494ac7..29baa4726 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserRepository.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/UserRepository.kt @@ -29,6 +29,5 @@ class UserRepository @Inject constructor( suspend fun revive() = apiClient.revive() suspend fun runCron() { apiClient.runCron() - retrieveUser() } } \ No newline at end of file diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt index effbfffe4..5b948b20c 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/tasks/Task.kt @@ -94,11 +94,11 @@ open class Task constructor(): Parcelable { val streakString: String? get() { - return if (counterUp != null && (counterUp ?: 0) > 0 && counterDown != null && (counterDown ?: 0) > 0) { + return if ((counterUp ?: 0) > 0 && (counterDown ?: 0) > 0) { "+" + counterUp.toString() + " | -" + counterDown?.toString() - } else if (counterUp != null && (counterUp ?: 0) > 0) { + } else if ((counterUp ?: 0) > 0) { "+" + counterUp.toString() - } else if (counterDown != null && (counterDown ?: 0) > 0) { + } else if ((counterDown ?: 0) > 0) { "-" + counterDown.toString() } else if ((streak ?: 0) > 0) { return streak.toString() @@ -323,9 +323,9 @@ open class Task constructor(): Parcelable { this.down = `in`.readValue(Boolean::class.java.classLoader) as? Boolean ?: false this.completed = `in`.readByte().toInt() != 0 this.checklist = listOf() - `in`.readList(this.checklist as List<*>, ChecklistItem::class.java.classLoader) + `in`.readList(this.checklist as List, ChecklistItem::class.java.classLoader) this.reminders = listOf() - `in`.readList(this.reminders as MutableList, RemindersItem::class.java.classLoader) + `in`.readList(this.reminders as List, RemindersItem::class.java.classLoader) this.frequency = Frequency.from(`in`.readString() ?: "") this.everyX = `in`.readValue(Int::class.java.classLoader) as? Int ?: 1 this.daysOfMonthString = `in`.readString() diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt index dc3057e55..cceb73826 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/AvatarActivity.kt @@ -39,6 +39,7 @@ class AvatarActivity: BaseActivity() { windowManager.currentWindowMetrics.bounds.right ) } else { + @Suppress("DEPRECATION") max(windowManager.defaultDisplay.width, windowManager.defaultDisplay.height) } var factor = (maxSize / 46f) / 3f diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt index 4dd39bdcb..9146972fb 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt @@ -110,8 +110,8 @@ class LoginActivity: BaseActivity() { val alert = AlertDialog.Builder(this).create() alert.setTitle(R.string.login_validation_error_title) alert.setMessage(message) - alert.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.ok)) { alert, _ -> - alert.dismiss() + alert.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.ok)) { thisAlert, _ -> + thisAlert.dismiss() } alert.show() } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt index 63a2a5f4f..648f5ac02 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt @@ -18,7 +18,11 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class MainActivity : BaseActivity() { override val viewModel: MainViewModel by viewModels() - private val adapter = HubAdapter() + private val adapter = HubAdapter().apply { + onRefresh = { + viewModel.retrieveFullUserData() + } + } override fun onCreate(savedInstanceState: Bundle?) { binding = ActivityMainBinding.inflate(layoutInflater) diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/RYAActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/RYAActivity.kt index 252b7f71a..d4206d6c0 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/RYAActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/RYAActivity.kt @@ -59,6 +59,7 @@ class RYAActivity : BaseActivity() { taskBinding.root.setOnClickListener { viewModel.tappedTask(task) } + holder.onTaskScore = { viewModel.tappedTask(task) } val layoutParams = taskBinding.chip.layoutParams as FrameLayout.LayoutParams layoutParams.marginStart = 0 layoutParams.marginEnd = 0 diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskFormActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskFormActivity.kt index 00c566210..cdf5497b7 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskFormActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskFormActivity.kt @@ -44,7 +44,7 @@ class TaskFormActivity : BaseActivity + binding.editText.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_DONE) { if (binding.editText.text?.isNotEmpty() == true) { binding.editTaskWrapper.isVisible = false diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskListActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskListActivity.kt index 65cc152bd..b07c787e1 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskListActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskListActivity.kt @@ -54,13 +54,15 @@ class TaskListActivity : BaseActivity() { override val viewModel: TaskResultViewModel by viewModels() + private var secondsToShow = 2 + override fun onCreate(savedInstanceState: Bundle?) { binding = ActivityTaskResultBinding.inflate(layoutInflater) super.onCreate(savedInstanceState) @@ -43,7 +45,7 @@ class TaskResultActivity : BaseActivity 0.0) { + if ((viewModel.result?.manaDelta ?: 0.0) != 0.0) { val chip = TaskRewardChip(this) chip.set( viewModel.result?.manaDelta, @@ -105,6 +107,7 @@ class TaskResultActivity : BaseActivity 4 && hasDrop || (chips.size > 5 && !hasDrop)) { chips = chips.subList(0, if (hasDrop) 4 else 5) } + secondsToShow = chips.size chips.forEach { binding.gridLayout.addView(it) it.size = chipSize @@ -158,7 +161,12 @@ class TaskResultActivity : BaseActivity getString(R.string.some_food) + "Egg" -> getString(R.string.an_egg) + "HatchingPotion" -> getString(R.string.a_potion) + else -> getString(R.string.some_x, type) + }) dropBinding.imageView.loadImage("Pet_" + type + "_" + key) } dropBinding.textView.text = when (elements.size) { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/HubAdapter.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/HubAdapter.kt index ad6e00c22..db87be6bb 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/HubAdapter.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/HubAdapter.kt @@ -11,6 +11,7 @@ import com.habitrpg.wearos.habitica.ui.viewHolders.HubViewHolder class HubAdapter: RecyclerView.Adapter() { var title: String = "" + var onRefresh: (() -> Unit)? = null var data: List = listOf() set(value) { field = value @@ -30,6 +31,7 @@ class HubAdapter: RecyclerView.Adapter() { holder.bind(getItemAt(position - 1)) } else if (holder is HeaderViewHolder){ holder.bind(title) + holder.itemView.setOnClickListener { onRefresh?.invoke() } } } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/TaskListAdapter.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/TaskListAdapter.kt index 3518a3665..6b51560ec 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/TaskListAdapter.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/adapters/TaskListAdapter.kt @@ -2,7 +2,7 @@ package com.habitrpg.wearos.habitica.ui.adapters import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import com.habitrpg.android.habitica.databinding.RowHeaderBinding +import com.habitrpg.android.habitica.databinding.RowSectionHeaderBinding import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.wearos.habitica.models.tasks.Task import com.habitrpg.wearos.habitica.ui.viewHolders.HeaderSectionViewHolder @@ -20,7 +20,7 @@ open class TaskListAdapter(): RecyclerView.Adapter() { } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val inflater = parent.context.layoutInflater - return HeaderSectionViewHolder(RowHeaderBinding.inflate(inflater, parent, false).root) + return HeaderSectionViewHolder(RowSectionHeaderBinding.inflate(inflater, parent, false).root) } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { 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 3ff8b4e32..9fa5f7411 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 @@ -1,6 +1,7 @@ package com.habitrpg.wearos.habitica.ui.viewmodels 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 @@ -10,9 +11,11 @@ import javax.inject.Inject @HiltViewModel class AvatarViewModel @Inject constructor( userRepository: UserRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager ) : BaseViewModel( userRepository, + taskRepository, exceptionBuilder, loadingManager ) { var user = userRepository.getUser().asLiveData() 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 b61a2077f..1f2f60700 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 @@ -2,16 +2,29 @@ package com.habitrpg.wearos.habitica.ui.viewmodels import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +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.models.DisplayedError import com.habitrpg.wearos.habitica.util.ErrorPresenter import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder +import kotlinx.coroutines.launch open class BaseViewModel( val userRepository: UserRepository, + val taskRepository: TaskRepository, val exceptionBuilder: ExceptionHandlerBuilder, val loadingManager: LoadingManager ): ViewModel(), ErrorPresenter { override val errorValues = MutableLiveData() + + fun retrieveFullUserData() { + viewModelScope.launch(exceptionBuilder.userFacing(this)) { + loadingManager.startLoading() + val user = userRepository.retrieveUser(true) + taskRepository.retrieveTasks(user?.tasksOrder, true) + loadingManager.endLoading() + } + } } \ 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 c08824fa8..7a57876cf 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,5 +1,6 @@ package com.habitrpg.wearos.habitica.ui.viewmodels +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 @@ -8,8 +9,9 @@ import javax.inject.Inject @HiltViewModel class FaintViewModel @Inject constructor(userRepository: UserRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, 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 77ad4b134..f55fb7930 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 @@ -17,9 +17,9 @@ import javax.inject.Inject class HabitDrectionViewModel @Inject constructor( savedStateHandle: SavedStateHandle, userRepository: UserRepository, - val taskRepository: TaskRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, 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 40b0396a0..957801b6a 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 @@ -15,7 +15,6 @@ import com.google.android.gms.auth.api.signin.GoogleSignInOptions import com.google.android.gms.common.ConnectionResult import com.google.android.gms.common.GoogleApiAvailability import com.google.android.gms.common.GooglePlayServicesUtil -import com.google.android.gms.common.Scopes import com.google.android.gms.common.UserRecoverableException import com.google.android.gms.common.api.ApiException import com.google.android.gms.tasks.Task @@ -25,6 +24,7 @@ import com.habitrpg.common.habitica.models.auth.UserAuthResponse import com.habitrpg.common.habitica.models.auth.UserAuthSocial import com.habitrpg.common.habitica.models.auth.UserAuthSocialTokens import com.habitrpg.wearos.habitica.data.ApiClient +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 @@ -39,11 +39,12 @@ import javax.inject.Inject @HiltViewModel class LoginViewModel @Inject constructor(userRepository: UserRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, val keyHelper: KeyHelper?, val sharedPreferences: SharedPreferences, val apiClient: ApiClient, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, loadingManager) { lateinit var onLoginCompleted: () -> Unit fun handleGoogleLogin( @@ -62,7 +63,6 @@ class LoginViewModel @Inject constructor(userRepository: UserRepository, task: Task, recoverFromPlayServicesErrorResult: ActivityResultLauncher?, ) { - val scopesString = Scopes.PROFILE + " " + Scopes.EMAIL viewModelScope.launch(exceptionBuilder.userFacing(this)) { val account = async { try { 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 517a261bc..7c46794b6 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 @@ -11,9 +11,9 @@ import javax.inject.Inject @HiltViewModel class MainViewModel @Inject constructor( userRepository: UserRepository, - private val taskRepository: TaskRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, loadingManager) { val taskCounts = taskRepository.getActiveTaskCounts().asLiveData() val user = userRepository.getUser().asLiveData() } \ 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 6e23595a6..9f5c68aa9 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 @@ -18,9 +18,9 @@ import javax.inject.Inject @HiltViewModel class RYAViewModel @Inject constructor( userRepository: UserRepository, - val taskRepository: TaskRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, loadingManager) { val tasks = MutableLiveData>() private val tasksToComplete = mutableListOf() @@ -55,7 +55,8 @@ class RYAViewModel @Inject constructor( taskRepository.scoreTask(null, task, TaskDirection.UP) } userRepository.runCron() - userRepository.retrieveUser() + val user = userRepository.retrieveUser(true) + taskRepository.retrieveTasks(user?.tasksOrder, true) 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 5b6a5a3b1..6a75c919f 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 @@ -14,12 +14,12 @@ import javax.inject.Inject @HiltViewModel class SettingsViewModel @Inject constructor(userRepository: UserRepository, - private val taskRepository: TaskRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, private val apiClient: ApiClient, private val sharedPreferences: SharedPreferences, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, 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 349219745..d10f9c7e9 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 @@ -7,6 +7,7 @@ import com.google.android.gms.wearable.MessageClient import com.google.android.gms.wearable.MessageEvent import com.habitrpg.common.habitica.helpers.KeyHelper import com.habitrpg.wearos.habitica.data.ApiClient +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 @@ -16,11 +17,12 @@ import javax.inject.Inject @HiltViewModel class SplashViewModel @Inject constructor(userRepository: UserRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, val apiClient: ApiClient, val sharedPreferences: SharedPreferences, val keyHelper: KeyHelper?, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager), MessageClient.OnMessageReceivedListener { +) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, loadingManager), MessageClient.OnMessageReceivedListener { lateinit var onLoginCompleted: (Boolean) -> Unit val hasAuthentication: Boolean get() { @@ -34,7 +36,9 @@ class SplashViewModel @Inject constructor(userRepository: UserRepository, } private fun authDataReceived(event: MessageEvent) { - viewModelScope.launch(exceptionBuilder.silent()) { + viewModelScope.launch(exceptionBuilder.silent { + onLoginCompleted(false) + }) { val (userID, apiKey) = String(event.data).split(":") try { saveTokens(apiKey, userID) 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 0b43fe33a..b3a6afa0a 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 @@ -2,6 +2,7 @@ package com.habitrpg.wearos.habitica.ui.viewmodels import androidx.lifecycle.LiveData 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.models.user.User @@ -11,8 +12,9 @@ import javax.inject.Inject @HiltViewModel class StatsViewModel @Inject constructor(userRepository: UserRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, 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 df55ce8dd..30a0cd95f 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 @@ -15,7 +15,7 @@ class TaskDetailViewModel @Inject constructor( taskRepository: TaskRepository, userRepository: UserRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, 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 8bbe80cff..1c9526c11 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 @@ -13,9 +13,9 @@ import javax.inject.Inject @HiltViewModel class TaskFormViewModel @Inject constructor( userRepository: UserRepository, - val taskRepository: TaskRepository, + taskRepository: TaskRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, 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 9c3600553..ac6202013 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 @@ -1,5 +1,6 @@ package com.habitrpg.wearos.habitica.ui.viewmodels +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.asLiveData import androidx.lifecycle.viewModelScope @@ -20,21 +21,27 @@ import javax.inject.Inject @HiltViewModel class TaskListViewModel @Inject constructor( savedStateHandle: SavedStateHandle, - private val taskRepository: TaskRepository, + taskRepository: TaskRepository, userRepository: UserRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, loadingManager) { val taskType = TaskType.from(savedStateHandle.get("task_type")) + val taskCount = MutableLiveData(0) val tasks = taskRepository.getTasks(taskType ?: TaskType.HABIT) .map { if (taskType == TaskType.DAILY || taskType == TaskType.TODO) { - val taskList: MutableList = it.sortedBy { it.completed }.toMutableList() + val taskList: MutableList = it.filter { it.isDue == true || it.type == TaskType.TODO }.sortedBy { it.completed }.toMutableList() val firstCompletedIndex = taskList.indexOfFirst { it is Task && it.completed } if (firstCompletedIndex >= 0) { + // since this is the index of the first completed task, this is also the number of incomplete tasks + taskCount.value = firstCompletedIndex taskList.add(firstCompletedIndex, "Done today") + } else { + taskCount.value = taskList.size } taskList } else { + taskCount.value = it.size it } } @@ -52,13 +59,4 @@ class TaskListViewModel @Inject constructor( onResult(result) } } - - fun retrieveTasks() { - viewModelScope.launch(exceptionBuilder.userFacing(this)) { - loadingManager.startLoading() - val user = userRepository.retrieveUser(true) - taskRepository.retrieveTasks(user?.tasksOrder, true) - loadingManager.endLoading() - } - } } \ No newline at end of file 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 f5f5b164a..040417047 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 @@ -2,6 +2,7 @@ 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.TaskRepository import com.habitrpg.wearos.habitica.data.repositories.UserRepository import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder @@ -9,12 +10,15 @@ import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel -class TaskResultViewModel @Inject constructor(savedStateHandle: SavedStateHandle, userRepository: UserRepository, +class TaskResultViewModel @Inject constructor( + savedStateHandle: SavedStateHandle, + taskRepository: TaskRepository, + userRepository: UserRepository, exceptionBuilder: ExceptionHandlerBuilder, loadingManager: LoadingManager -) : BaseViewModel(userRepository, exceptionBuilder, loadingManager) { +) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, loadingManager) { val hasDrop: Boolean - get() { - return result?.drop?.key?.isNotBlank() == true // || (result?.questItemsFound ?: 0) > 0 - } + get() { + return result?.drop?.key?.isNotBlank() == true // || (result?.questItemsFound ?: 0) > 0 + } val result = savedStateHandle.get("result") } 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 c95323d67..e609c6f97 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 @@ -9,9 +9,10 @@ import javax.inject.Inject @ViewModelScoped class ExceptionHandlerBuilder @Inject constructor(val loadingManager: LoadingManager) { - fun silent(): CoroutineExceptionHandler { + fun silent(handler: ((Throwable) -> Unit)? = null): CoroutineExceptionHandler { return CoroutineExceptionHandler { context, throwable -> Log.e(context.toString(), "Error: ${throwable.cause}", throwable) + handler?.invoke(throwable) } } diff --git a/wearos/src/main/res/layout/activity_rya.xml b/wearos/src/main/res/layout/activity_rya.xml index cd4887e58..9b608c1d1 100644 --- a/wearos/src/main/res/layout/activity_rya.xml +++ b/wearos/src/main/res/layout/activity_rya.xml @@ -17,7 +17,7 @@ android:text="@string/day_start" android:fontFamily="sans-serif-medium" android:gravity="center" - android:layout_marginHorizontal="@dimen/spacing_medium" + android:layout_marginHorizontal="12dp" android:layout_marginBottom="10dp"/> + layout="@layout/row_section_header" /> diff --git a/wearos/src/main/res/layout/row_daily.xml b/wearos/src/main/res/layout/row_daily.xml index 98fb8eb33..ca97dc8c5 100644 --- a/wearos/src/main/res/layout/row_daily.xml +++ b/wearos/src/main/res/layout/row_daily.xml @@ -6,7 +6,7 @@ + android:layout_height="wrap_content"> + style="@style/Text.Body1"/> \ No newline at end of file diff --git a/wearos/src/main/res/layout/row_todo.xml b/wearos/src/main/res/layout/row_todo.xml index aa5bc9b2d..7d87f2426 100644 --- a/wearos/src/main/res/layout/row_todo.xml +++ b/wearos/src/main/res/layout/row_todo.xml @@ -2,13 +2,11 @@ + android:layout_height="wrap_content"> - 5dp 16sp 10dp - 9dp + 6dp 10dp 2dp \ No newline at end of file diff --git a/wearos/src/main/res/values/strings.xml b/wearos/src/main/res/values/strings.xml index a95f01fee..966733d94 100644 --- a/wearos/src/main/res/values/strings.xml +++ b/wearos/src/main/res/values/strings.xml @@ -25,11 +25,14 @@ Start new day Check off any you did yesterday: Task Type - Task title... + Task title… Save Sync Data Hide task rewards Version %1$s (%2$d) Log out of Habitica? Create a %s to add to this list + an Egg + a Potion + Some Food \ No newline at end of file diff --git a/wearos/src/main/res/values/styles.xml b/wearos/src/main/res/values/styles.xml index 0d1ea7b75..50d8eacd2 100644 --- a/wearos/src/main/res/values/styles.xml +++ b/wearos/src/main/res/values/styles.xml @@ -14,7 +14,7 @@ @drawable/touch_feedback -