diff --git a/version.properties b/version.properties index 40fd533c1..a4155b43a 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ NAME=4.0 -CODE=4230 \ No newline at end of file +CODE=4240 \ No newline at end of file diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt index dfd35ac60..ce449d335 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt @@ -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() } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt index b0d08854a..4257227bc 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/repositories/TaskLocalRepository.kt @@ -109,7 +109,7 @@ class TaskLocalRepository @Inject constructor() { fun clearData() { tasks.values.forEach { - it.value = null + it.value = emptyList() } taskCountHelperValue.value = 0 } 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 7acf2df25..9a381424a 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 @@ -131,6 +131,11 @@ class MainActivity : BaseActivity() { } } + 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) } 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 4615a8f2f..7b0585326 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 @@ -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() { } } + 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() { diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt index f9c85abb2..290952a6e 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt @@ -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() { @@ -74,6 +78,11 @@ class SplashActivity: BaseActivity() { stopAnimatingProgress() } binding.textView.isVisible = show + delay(90.toDuration(DurationUnit.SECONDS)) + if (isActive) { + // the sync attempt has timed out + startLoginActivity() + } } } } \ No newline at end of file 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 29fcd0e79..2c0a78bb1 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 @@ -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() } \ 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 da3732089..82dd88345 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 @@ -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>() private val tasksToComplete = mutableListOf() @@ -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)