tiny tiny fixes

This commit is contained in:
Phillip Thelen 2022-06-30 11:56:25 +02:00
parent f66eeb94e7
commit b96ed25002
37 changed files with 128 additions and 72 deletions

View file

@ -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) {

View file

@ -29,6 +29,5 @@ class UserRepository @Inject constructor(
suspend fun revive() = apiClient.revive()
suspend fun runCron() {
apiClient.runCron()
retrieveUser()
}
}

View file

@ -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>, ChecklistItem::class.java.classLoader)
this.reminders = listOf()
`in`.readList(this.reminders as MutableList<Any?>, RemindersItem::class.java.classLoader)
`in`.readList(this.reminders as List<RemindersItem>, 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()

View file

@ -39,6 +39,7 @@ class AvatarActivity: BaseActivity<ActivityAvatarBinding, AvatarViewModel>() {
windowManager.currentWindowMetrics.bounds.right
)
} else {
@Suppress("DEPRECATION")
max(windowManager.defaultDisplay.width, windowManager.defaultDisplay.height)
}
var factor = (maxSize / 46f) / 3f

View file

@ -110,8 +110,8 @@ class LoginActivity: BaseActivity<ActivityLoginBinding, LoginViewModel>() {
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()
}

View file

@ -18,7 +18,11 @@ import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class MainActivity : BaseActivity<ActivityMainBinding, MainViewModel>() {
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)

View file

@ -59,6 +59,7 @@ class RYAActivity : BaseActivity<ActivityRyaBinding, RYAViewModel>() {
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

View file

@ -44,7 +44,7 @@ class TaskFormActivity : BaseActivity<ActivityTaskFormBinding, TaskFormViewModel
binding = ActivityTaskFormBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
binding.editText.setOnEditorActionListener { _, actionId, event ->
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

View file

@ -54,13 +54,15 @@ class TaskListActivity : BaseActivity<ActivityTasklistBinding, TaskListViewModel
)
)
onRefresh = {
viewModel.retrieveTasks()
viewModel.retrieveFullUserData()
}
}
viewModel.tasks.observe(this) {
adapter.data = it
adapter.title = getTitle(it.size)
}
viewModel.taskCount.observe(this) {
adapter.title = getTitle(it)
}
adapter.onTaskScore = {
@ -111,6 +113,8 @@ class TaskListActivity : BaseActivity<ActivityTasklistBinding, TaskListViewModel
putExtra("task_id", task.id)
})
return
} else if (task.up != true && task.down != ) {
return
} else {
direction = if (task.up == true) TaskDirection.UP else TaskDirection.DOWN
}
@ -152,7 +156,7 @@ class TaskListActivity : BaseActivity<ActivityTasklistBinding, TaskListViewModel
}
adapter.title = getTitle(null)
adapter.onRefresh = {
viewModel.retrieveTasks()
viewModel.retrieveFullUserData()
}
}

View file

@ -29,6 +29,8 @@ import kotlin.time.toDuration
class TaskResultActivity : BaseActivity<ActivityTaskResultBinding, TaskResultViewModel>() {
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<ActivityTaskResultBinding, TaskResultVie
}
lifecycleScope.launch {
delay(5.toDuration(DurationUnit.SECONDS))
delay(secondsToShow.toDuration(DurationUnit.SECONDS))
finish()
}
}
@ -75,7 +77,7 @@ class TaskResultActivity : BaseActivity<ActivityTaskResultBinding, TaskResultVie
)
chips.add(chip)
}
if ((viewModel.result?.manaDelta ?: 0.0) > 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<ActivityTaskResultBinding, TaskResultVie
if (chips.size > 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<ActivityTaskResultBinding, TaskResultVie
if (viewModel.result?.drop?.key != null) {
val type = viewModel.result?.drop?.type
val key = viewModel.result?.drop?.key
elements.add(getString(R.string.some_x, type))
elements.add(when (type) {
"Food" -> 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) {

View file

@ -11,6 +11,7 @@ import com.habitrpg.wearos.habitica.ui.viewHolders.HubViewHolder
class HubAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var title: String = ""
var onRefresh: (() -> Unit)? = null
var data: List<MenuItem> = listOf()
set(value) {
field = value
@ -30,6 +31,7 @@ class HubAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
holder.bind(getItemAt(position - 1))
} else if (holder is HeaderViewHolder){
holder.bind(title)
holder.itemView.setOnClickListener { onRefresh?.invoke() }
}
}

View file

@ -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<RecyclerView.ViewHolder>() {
}
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) {

View file

@ -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()

View file

@ -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<DisplayedError>()
fun retrieveFullUserData() {
viewModelScope.launch(exceptionBuilder.userFacing(this)) {
loadingManager.startLoading()
val user = userRepository.retrieveUser(true)
taskRepository.retrieveTasks(user?.tasksOrder, true)
loadingManager.endLoading()
}
}
}

View file

@ -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()
}

View file

@ -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<String>("task_id")
val task = taskRepository.getTask(taskID).asLiveData()

View file

@ -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<GoogleSignInAccount>,
recoverFromPlayServicesErrorResult: ActivityResultLauncher<Intent>?,
) {
val scopesString = Scopes.PROFILE + " " + Scopes.EMAIL
viewModelScope.launch(exceptionBuilder.userFacing(this)) {
val account = async {
try {

View file

@ -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()
}

View file

@ -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<List<Task>>()
private val tasksToComplete = mutableListOf<Task>()
@ -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()
}

View file

@ -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 {

View file

@ -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)

View file

@ -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<User> = userRepository.getUser().asLiveData()

View file

@ -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<String>("task_id")
val task = taskRepository.getTask(taskID).asLiveData()
}

View file

@ -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

View file

@ -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<String>("task_type"))
val taskCount = MutableLiveData(0)
val tasks = taskRepository.getTasks(taskType ?: TaskType.HABIT)
.map {
if (taskType == TaskType.DAILY || taskType == TaskType.TODO) {
val taskList: MutableList<Any> = it.sortedBy { it.completed }.toMutableList()
val taskList: MutableList<Any> = 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()
}
}
}

View file

@ -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<TaskScoringResult>("result")
}

View file

@ -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)
}
}

View file

@ -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"/>
<TextView
android:id="@+id/description_view"

View file

@ -62,7 +62,7 @@
android:orientation="vertical">
<include
android:id="@+id/header"
layout="@layout/row_header" />
layout="@layout/row_section_header" />
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
@ -80,7 +80,7 @@
android:gravity="center"
android:layout_marginTop="20dp"
android:layout_marginBottom="12dp"
android:textSize="14sp"
style="@style/Text.Body1"
android:textColor="@color/watch_purple_200"
android:text="@string/task_type" />
<LinearLayout
@ -95,6 +95,9 @@
style="@style/Chip.NoPadding"
android:gravity="start|center_vertical"
android:paddingHorizontal="20dp"
android:textColor="@color/white"
android:fontFamily="sans-serif-medium"
android:textSize="14sp"
android:text="@string/todo" />
<TextView
android:id="@+id/daily_button"
@ -103,6 +106,9 @@
style="@style/Chip.NoPadding"
android:gravity="start|center_vertical"
android:paddingHorizontal="20dp"
android:textColor="@color/white"
android:fontFamily="sans-serif-medium"
android:textSize="14sp"
android:text="@string/daily" />
<TextView
android:id="@+id/habit_button"
@ -111,6 +117,9 @@
style="@style/Chip.NoPadding"
android:gravity="start|center_vertical"
android:paddingHorizontal="20dp"
android:textColor="@color/white"
android:fontFamily="sans-serif-medium"
android:textSize="14sp"
android:text="@string/habit" />
</LinearLayout>
</LinearLayout>

View file

@ -6,7 +6,7 @@
<LinearLayout
android:id="@+id/chip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="52dp"
style="@style/Chip">
<FrameLayout
android:id="@+id/checkbox_wrapper"

View file

@ -2,11 +2,10 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="52dp"
style="@style/Chip">
<FrameLayout
android:id="@+id/habit_button"

View file

@ -5,7 +5,7 @@
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="52dp"
style="@style/Chip">
<com.habitrpg.wearos.habitica.ui.views.TaskTextView
android:id="@+id/title"

View file

@ -12,5 +12,5 @@
android:layout_gravity="center"
android:textColor="@color/watch_purple_200"
tools:text="Header Text"
style="@style/Text.Body1" />
style="@style/Text.Body1"/>
</FrameLayout>

View file

@ -2,13 +2,11 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="52dp"
style="@style/Chip">
<FrameLayout
android:id="@+id/checkbox_wrapper"
android:layout_width="34dp"

View file

@ -14,7 +14,7 @@
<dimen name="inner_frame_layout_padding">5dp</dimen>
<dimen name="row_text_size">16sp</dimen>
<dimen name="row_padding_horizontal">10dp</dimen>
<dimen name="row_padding_vertical">9dp</dimen>
<dimen name="row_padding_vertical">6dp</dimen>
<dimen name="row_side_spacing">10dp</dimen>
<dimen name="row_spacing">2dp</dimen>
</resources>

View file

@ -25,11 +25,14 @@
<string name="start_new_day">Start new day</string>
<string name="check_off_yesterday">Check off any you did yesterday:</string>
<string name="task_type">Task Type</string>
<string name="task_title_hint">Task title...</string>
<string name="task_title_hint">Task title</string>
<string name="save">Save</string>
<string name="sync_data">Sync Data</string>
<string name="hide_task_rewards">Hide task rewards</string>
<string name="version_info">Version %1$s (%2$d)</string>
<string name="log_out_of_habitica">Log out of Habitica?</string>
<string name="no_tasks">Create a %s to add to this list</string>
<string name="an_egg">an Egg</string>
<string name="a_potion">a Potion</string>
<string name="some_food">Some Food</string>
</resources>

View file

@ -14,7 +14,7 @@
<item name="android:foreground">@drawable/touch_feedback</item>
</style>
<style name="Chip.NoPadding">
<style name="Chip.NoPadding" parent="Chip">
<item name="android:layout_marginHorizontal">0dp</item>
</style>