diff --git a/wearos/src/main/AndroidManifest.xml b/wearos/src/main/AndroidManifest.xml index 795289991..225c637e6 100644 --- a/wearos/src/main/AndroidManifest.xml +++ b/wearos/src/main/AndroidManifest.xml @@ -51,7 +51,7 @@ - + \ 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 0de723f56..9472780e5 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/MainApplication.kt @@ -8,7 +8,6 @@ import com.google.firebase.ktx.Firebase import com.habitrpg.android.habitica.BuildConfig import com.habitrpg.common.habitica.extensions.setupCoil import com.habitrpg.common.habitica.helpers.MarkdownParser -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.ui.activities.BaseActivity @@ -18,8 +17,6 @@ import dagger.hilt.android.HiltAndroidApp import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import javax.inject.Inject @@ -43,13 +40,6 @@ class MainApplication : Application() { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) startActivity(intent) } else if (it.needsCron && BaseActivity.currentActivityClassName != RYAActivity::class.java.name) { - val dueDailies = taskRepository.getTasks(TaskType.DAILY) - .map { it.filter { task -> task.isDisplayedActive } } - .first() - if (dueDailies.isEmpty()) { - userRepository.runCron() - return@onEach - } val intent = Intent(this@MainApplication, RYAActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) startActivity(intent) diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiClient.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiClient.kt index 604c0acd3..6c3ae574d 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiClient.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/data/ApiClient.kt @@ -157,12 +157,7 @@ class ApiClient @Inject constructor( } private suspend fun process(call: suspend () -> Response>): NetworkResult { - val response: Response> - try { - response = call.invoke() - } catch (t: Exception) { - return NetworkResult.Error(t, false) - } + val response: Response> = call.invoke() val wasCached = response.headers()["was-cached"] == "true" @@ -170,6 +165,7 @@ class ApiClient @Inject constructor( val errorBody = response.errorBody() @Suppress("BlockingMethodInNonBlockingContext") NetworkResult.Error(Exception((response.message() + errorBody?.string())), !wasCached) + throw(java.lang.Exception(response.message())) } else { val body = response.body() return if (body?.data != null) { 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 109a2fe32..a38df5e3b 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 @@ -8,11 +8,11 @@ import androidx.activity.ComponentActivity import androidx.core.view.children import androidx.lifecycle.lifecycleScope import androidx.viewbinding.ViewBinding -import androidx.wear.activity.ConfirmationActivity import com.google.android.gms.tasks.Tasks 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.R import com.habitrpg.android.habitica.databinding.ActivityWrapperBinding import com.habitrpg.wearos.habitica.managers.LoadingManager import com.habitrpg.wearos.habitica.ui.viewmodels.BaseViewModel @@ -44,9 +44,8 @@ abstract class BaseActivity : ComponentActivi viewModel.errorValues.observe(this) { val intent = Intent(this, ConfirmationActivity::class.java).apply { - putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.FAILURE_ANIMATION) - putExtra(ConfirmationActivity.EXTRA_MESSAGE, it.title) - putExtra(ConfirmationActivity.EXTRA_ANIMATION_DURATION_MILLIS, 3000) + putExtra("text", it.title) + putExtra("icon", R.drawable.error) } startActivity(intent) } diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ConfirmationActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ConfirmationActivity.kt new file mode 100644 index 000000000..a09846b28 --- /dev/null +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/ConfirmationActivity.kt @@ -0,0 +1,35 @@ +package com.habitrpg.wearos.habitica.ui.activities + +import android.os.Bundle +import androidx.activity.viewModels +import androidx.lifecycle.lifecycleScope +import com.habitrpg.android.habitica.databinding.ActivityConfirmationBinding +import com.habitrpg.wearos.habitica.ui.viewmodels.ConfirmactionActivityViewModel +import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlin.time.DurationUnit +import kotlin.time.toDuration + +@AndroidEntryPoint +class ConfirmationActivity: + BaseActivity() { + override val viewModel: ConfirmactionActivityViewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + binding = ActivityConfirmationBinding.inflate(layoutInflater) + super.onCreate(savedInstanceState) + + binding.root.setOnClickListener { + finish() + } + + lifecycleScope.launch { + delay(4.toDuration(DurationUnit.SECONDS)) + finish() + } + + binding.textView.setCompoundDrawablesWithIntrinsicBounds(0, viewModel.icon, 0, 0) + binding.textView.text = viewModel.text + } +} \ No newline at end of file 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 8cf2b9868..c15619ab9 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,7 +1,7 @@ package com.habitrpg.wearos.habitica.ui.activities import android.os.Bundle -import android.widget.FrameLayout +import android.widget.LinearLayout import androidx.activity.viewModels import androidx.core.view.isVisible import com.habitrpg.android.habitica.R @@ -22,6 +22,10 @@ class RYAActivity : BaseActivity() { super.onCreate(savedInstanceState) viewModel.tasks.observe(this) { + if (it.isEmpty()) { + runCron() + return@observe + } createTaskListViews(it) } @@ -39,15 +43,33 @@ class RYAActivity : BaseActivity() { } binding.startDayButton.setOnClickListener { - startAnimatingProgress() - binding.startDayButton.isEnabled = false - viewModel.runCron { - stopAnimatingProgress() - if (it) { - finish() - } else { - binding.startDayButton.isEnabled = true - } + runCron() + } + } + + private fun runCron() { + startAnimatingProgress() + binding.startDayButton.isEnabled = false + binding.startingTextView.isVisible = true + binding.startDayButton.isVisible = false + binding.taskView.isVisible = false + binding.descriptionView.isVisible = false + binding.titleView.isVisible = false + binding.phoneDescriptionView.isVisible = false + binding.ryaButton.isVisible = false + binding.phoneButton.isVisible = false + viewModel.runCron { + stopAnimatingProgress() + if (it) { + finish() + } else { + binding.startDayButton.isEnabled = true + binding.startingTextView.isVisible = false + binding.startDayButton.isVisible = true + binding.taskView.isVisible = true + binding.descriptionView.isVisible = true + binding.titleView.isVisible = true + binding.phoneDescriptionView.isVisible = true } } } @@ -61,7 +83,7 @@ class RYAActivity : BaseActivity() { viewModel.tappedTask(task) } holder.onTaskScore = { viewModel.tappedTask(task) } - val layoutParams = taskBinding.chip.layoutParams as FrameLayout.LayoutParams + val layoutParams = taskBinding.chip.layoutParams as LinearLayout.LayoutParams layoutParams.marginStart = 0 layoutParams.marginEnd = 0 taskBinding.chip.layoutParams = layoutParams diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/ConfirmactionActivityViewModel.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/ConfirmactionActivityViewModel.kt new file mode 100644 index 000000000..992e2a0aa --- /dev/null +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewmodels/ConfirmactionActivityViewModel.kt @@ -0,0 +1,22 @@ +package com.habitrpg.wearos.habitica.ui.viewmodels + +import androidx.lifecycle.SavedStateHandle +import com.habitrpg.android.habitica.R +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 + +@HiltViewModel +class ConfirmactionActivityViewModel @Inject constructor( + savedStateHandle: SavedStateHandle, + userRepository: UserRepository, + taskRepository: TaskRepository, + exceptionBuilder: ExceptionHandlerBuilder, + loadingManager: LoadingManager +) : BaseViewModel(userRepository, taskRepository, exceptionBuilder, loadingManager) { + val icon: Int = savedStateHandle.get("icon") ?: R.drawable.error + val text: String? = savedStateHandle.get("text") +} diff --git a/wearos/src/main/res/drawable-mdpi/disconnected.png b/wearos/src/main/res/drawable-mdpi/disconnected.png new file mode 100644 index 000000000..c88286188 Binary files /dev/null and b/wearos/src/main/res/drawable-mdpi/disconnected.png differ diff --git a/wearos/src/main/res/drawable-mdpi/error.png b/wearos/src/main/res/drawable-mdpi/error.png new file mode 100644 index 000000000..949ad831e Binary files /dev/null and b/wearos/src/main/res/drawable-mdpi/error.png differ diff --git a/wearos/src/main/res/drawable-xhdpi/disconnected.png b/wearos/src/main/res/drawable-xhdpi/disconnected.png new file mode 100644 index 000000000..c9cea6e0c Binary files /dev/null and b/wearos/src/main/res/drawable-xhdpi/disconnected.png differ diff --git a/wearos/src/main/res/drawable-xhdpi/error.png b/wearos/src/main/res/drawable-xhdpi/error.png new file mode 100644 index 000000000..a335b288a Binary files /dev/null and b/wearos/src/main/res/drawable-xhdpi/error.png differ diff --git a/wearos/src/main/res/drawable-xxhdpi/disconnected.png b/wearos/src/main/res/drawable-xxhdpi/disconnected.png new file mode 100644 index 000000000..e4a65c77b Binary files /dev/null and b/wearos/src/main/res/drawable-xxhdpi/disconnected.png differ diff --git a/wearos/src/main/res/drawable-xxhdpi/error.png b/wearos/src/main/res/drawable-xxhdpi/error.png new file mode 100644 index 000000000..cf4000989 Binary files /dev/null and b/wearos/src/main/res/drawable-xxhdpi/error.png differ diff --git a/wearos/src/main/res/layout/activity_confirmation.xml b/wearos/src/main/res/layout/activity_confirmation.xml new file mode 100644 index 000000000..5b4c7543a --- /dev/null +++ b/wearos/src/main/res/layout/activity_confirmation.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/wearos/src/main/res/layout/activity_rya.xml b/wearos/src/main/res/layout/activity_rya.xml index ed3ca84d5..7dcefdfd2 100644 --- a/wearos/src/main/res/layout/activity_rya.xml +++ b/wearos/src/main/res/layout/activity_rya.xml @@ -57,6 +57,7 @@ android:layout_marginTop="2dp" android:visibility="gone"/> + \ 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 2d3bd641b..56cd1da5d 100644 --- a/wearos/src/main/res/values/strings.xml +++ b/wearos/src/main/res/values/strings.xml @@ -38,4 +38,5 @@ Continue on your phone You leveled up through all your hard work! All done today! + Starting your Day... \ No newline at end of file