mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Improve user loading and RYA handling
This commit is contained in:
parent
5e51bc2754
commit
9805fe3ecc
8 changed files with 45 additions and 12 deletions
|
|
@ -1,2 +1,2 @@
|
|||
NAME=4.0
|
||||
CODE=4230
|
||||
CODE=4240
|
||||
|
|
@ -12,9 +12,9 @@ import com.habitrpg.wearos.habitica.data.repositories.TaskRepository
|
|||
import com.habitrpg.wearos.habitica.data.repositories.UserRepository
|
||||
import com.habitrpg.wearos.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.wearos.habitica.ui.activities.FaintActivity
|
||||
import com.habitrpg.wearos.habitica.ui.activities.MainActivity
|
||||
import com.habitrpg.wearos.habitica.ui.activities.RYAActivity
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import kotlinx.coroutines.CoroutineExceptionHandler
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
|
|
@ -35,24 +35,17 @@ class MainApplication : Application() {
|
|||
|
||||
MainScope().launch {
|
||||
userRepository.getUser().onEach {
|
||||
if (it.isDead && BaseActivity.currentActivityClassName != FaintActivity::class.java.name) {
|
||||
if (it.isDead && BaseActivity.currentActivityClassName == MainActivity::class.java.name) {
|
||||
val intent = Intent(this@MainApplication, FaintActivity::class.java)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
startActivity(intent)
|
||||
} else if (it.needsCron && BaseActivity.currentActivityClassName != RYAActivity::class.java.name) {
|
||||
} else if (it.needsCron && BaseActivity.currentActivityClassName == MainActivity::class.java.name) {
|
||||
val intent = Intent(this@MainApplication, RYAActivity::class.java)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
startActivity(intent)
|
||||
}
|
||||
}.collect()
|
||||
}
|
||||
if (userRepository.hasAuthentication) {
|
||||
MainScope().launch(CoroutineExceptionHandler { _, _ ->
|
||||
}) {
|
||||
val user = userRepository.retrieveUser(true)
|
||||
taskRepository.retrieveTasks(user?.tasksOrder, true)
|
||||
}
|
||||
}
|
||||
|
||||
logLaunch()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ class TaskLocalRepository @Inject constructor() {
|
|||
|
||||
fun clearData() {
|
||||
tasks.values.forEach {
|
||||
it.value = null
|
||||
it.value = emptyList()
|
||||
}
|
||||
taskCountHelperValue.value = 0
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,6 +131,11 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainViewModel>() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
viewModel.periodicUserRefresh()
|
||||
}
|
||||
|
||||
private val openTaskForm = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
||||
if (result.resultCode == Activity.RESULT_OK) {
|
||||
val taskType = result.data?.getStringExtra("task_type")?.let { TaskType.from(it) }
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.habitrpg.wearos.habitica.ui.activities
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.widget.LinearLayout
|
||||
import androidx.activity.viewModels
|
||||
|
|
@ -52,6 +53,17 @@ class RYAActivity : BaseActivity<ActivityRyaBinding, RYAViewModel>() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
if (!viewModel.hasRunCron) {
|
||||
startActivity(
|
||||
Intent(this, RYAActivity::class.java)
|
||||
.apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
})
|
||||
}
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
lateinit var startTime: Date
|
||||
|
||||
private fun runCron() {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,11 @@ import com.habitrpg.android.habitica.databinding.ActivitySplashBinding
|
|||
import com.habitrpg.wearos.habitica.ui.viewmodels.SplashViewModel
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.isActive
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlin.time.DurationUnit
|
||||
import kotlin.time.toDuration
|
||||
|
||||
@AndroidEntryPoint
|
||||
class SplashActivity: BaseActivity<ActivitySplashBinding, SplashViewModel>() {
|
||||
|
|
@ -74,6 +78,11 @@ class SplashActivity: BaseActivity<ActivitySplashBinding, SplashViewModel>() {
|
|||
stopAnimatingProgress()
|
||||
}
|
||||
binding.textView.isVisible = show
|
||||
delay(90.toDuration(DurationUnit.SECONDS))
|
||||
if (isActive) {
|
||||
// the sync attempt has timed out
|
||||
startLoginActivity()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,10 @@ import com.habitrpg.wearos.habitica.data.repositories.UserRepository
|
|||
import com.habitrpg.wearos.habitica.managers.AppStateManager
|
||||
import com.habitrpg.wearos.habitica.util.ExceptionHandlerBuilder
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import java.util.Date
|
||||
import javax.inject.Inject
|
||||
import kotlin.time.DurationUnit
|
||||
import kotlin.time.toDuration
|
||||
|
||||
@HiltViewModel
|
||||
class MainViewModel @Inject constructor(
|
||||
|
|
@ -14,6 +17,15 @@ class MainViewModel @Inject constructor(
|
|||
taskRepository: TaskRepository,
|
||||
exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager
|
||||
) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) {
|
||||
private var lastUserFetch = 0L
|
||||
fun periodicUserRefresh() {
|
||||
val now = Date().time
|
||||
if ((now - lastUserFetch) > 5.toDuration(DurationUnit.MINUTES).inWholeMilliseconds) {
|
||||
retrieveFullUserData()
|
||||
lastUserFetch = now
|
||||
}
|
||||
}
|
||||
|
||||
val taskCounts = taskRepository.getActiveTaskCounts().asLiveData()
|
||||
val user = userRepository.getUser().asLiveData()
|
||||
}
|
||||
|
|
@ -21,6 +21,7 @@ class RYAViewModel @Inject constructor(
|
|||
taskRepository: TaskRepository,
|
||||
exceptionBuilder: ExceptionHandlerBuilder, appStateManager: AppStateManager
|
||||
) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, appStateManager) {
|
||||
var hasRunCron: Boolean = false
|
||||
val tasks = MutableLiveData<List<Task>>()
|
||||
|
||||
private val tasksToComplete = mutableListOf<Task>()
|
||||
|
|
@ -55,6 +56,7 @@ class RYAViewModel @Inject constructor(
|
|||
taskRepository.scoreTask(null, task, TaskDirection.UP)
|
||||
}
|
||||
userRepository.runCron()
|
||||
hasRunCron = true
|
||||
val user = userRepository.retrieveUser(true)
|
||||
taskRepository.retrieveTasks(user?.tasksOrder, true)
|
||||
function(true)
|
||||
|
|
|
|||
Loading…
Reference in a new issue