From 7974a92c699190fd6fce878f20b4b4a1888d2bca Mon Sep 17 00:00:00 2001 From: Super12138 <70494801+Super12138@users.noreply.github.com> Date: Sat, 7 Sep 2024 16:54:30 +0800 Subject: [PATCH] Use kotlin flow (welcome activity) --- .../todo/views/todo/ToDoViewModel.kt | 3 +- .../todo/views/welcome/WelcomeActivity.kt | 97 ++++++++++--------- .../todo/views/welcome/WelcomeViewModel.kt | 18 +++- app/src/main/res/drawable/ic_launcher.xml | 1 - app/src/main/res/values-night/themes.xml | 1 - app/src/main/res/values/themes.xml | 1 + 6 files changed, 70 insertions(+), 51 deletions(-) diff --git a/app/src/main/kotlin/cn/super12138/todo/views/todo/ToDoViewModel.kt b/app/src/main/kotlin/cn/super12138/todo/views/todo/ToDoViewModel.kt index 6f224a2..0403ee3 100644 --- a/app/src/main/kotlin/cn/super12138/todo/views/todo/ToDoViewModel.kt +++ b/app/src/main/kotlin/cn/super12138/todo/views/todo/ToDoViewModel.kt @@ -53,7 +53,8 @@ class ToDoViewModel : ViewModel() { fun updateTask(position: Int, todo: ToDoRoom) { todoList.removeAt(position) todoList.add( - position, ToDo( + position, + ToDo( todo.uuid, todo.state, todo.content, diff --git a/app/src/main/kotlin/cn/super12138/todo/views/welcome/WelcomeActivity.kt b/app/src/main/kotlin/cn/super12138/todo/views/welcome/WelcomeActivity.kt index 1d50d14..be57447 100644 --- a/app/src/main/kotlin/cn/super12138/todo/views/welcome/WelcomeActivity.kt +++ b/app/src/main/kotlin/cn/super12138/todo/views/welcome/WelcomeActivity.kt @@ -1,6 +1,5 @@ package cn.super12138.todo.views.welcome -import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import androidx.activity.OnBackPressedCallback @@ -8,7 +7,9 @@ import androidx.activity.viewModels import androidx.appcompat.content.res.AppCompatResources import androidx.fragment.app.Fragment import androidx.fragment.app.commit -import androidx.lifecycle.Observer +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import cn.super12138.todo.R import cn.super12138.todo.constant.GlobalValues import cn.super12138.todo.databinding.ActivityWelcomeBinding @@ -20,11 +21,11 @@ import cn.super12138.todo.views.welcome.pages.IntroPage import cn.super12138.todo.views.welcome.pages.ProgressPage import cn.super12138.todo.views.welcome.pages.ToDoBtnPage import cn.super12138.todo.views.welcome.pages.ToDoItemPage +import kotlinx.coroutines.launch class WelcomeActivity : BaseActivity() { private val viewModel by viewModels() - @SuppressLint("ClickableViewAccessibility") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -47,7 +48,7 @@ class WelcomeActivity : BaseActivity() { val intent = Intent(this, MainActivity::class.java) startActivity(intent) } else { - currentPage.value = 1 + viewModel.setCurrentPage(1) nextPage(1) } } @@ -57,58 +58,62 @@ class WelcomeActivity : BaseActivity() { supportFragmentManager.popBackStack() - currentPage.value = currentPage.value?.minus(1) + viewModel.decreasePage() } nextBtn.setOnIntervalClickListener { VibrationUtils.performHapticFeedback(it) - nextPage(currentPage.value!!.plus(1)) + nextPage(currentPage.value + 1) - currentPage.value = currentPage.value?.plus(1) + viewModel.increasePage() } - currentPage.observe(this, Observer { page -> - when (page) { - 0 -> { - centerBtn.apply { - text = getString(R.string.start) - icon = AppCompatResources.getDrawable( - this@WelcomeActivity, - R.drawable.ic_arrow_forward - ) - show() + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.currentPage.collect { page -> + when (page) { + 0 -> { + centerBtn.apply { + text = getString(R.string.start) + icon = AppCompatResources.getDrawable( + this@WelcomeActivity, + R.drawable.ic_arrow_forward + ) + show() + } + nextBtn.hide() + previousBtn.hide() + } + + in 1..2 -> { + centerBtn.hide() + previousBtn.show() + nextBtn.show() + } + + 3 -> { + centerBtn.apply { + text = getString(R.string.enter_app) + icon = AppCompatResources.getDrawable( + this@WelcomeActivity, + R.drawable.ic_focus + ) + show() + } + previousBtn.show() + nextBtn.hide() + } + + else -> { + if (page > 3) viewModel.setCurrentPage(3) + + if (page < 0) viewModel.setCurrentPage(0) + } } - nextBtn.hide() - previousBtn.hide() - } - - in 1..2 -> { - centerBtn.hide() - previousBtn.show() - nextBtn.show() - } - - 3 -> { - centerBtn.apply { - text = getString(R.string.enter_app) - icon = AppCompatResources.getDrawable( - this@WelcomeActivity, - R.drawable.ic_focus - ) - show() - } - previousBtn.show() - nextBtn.hide() - } - - else -> { - if (page > 3) currentPage.value = 3 - - if (page < 0) currentPage.value = 0 } } - }) + } onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { @@ -116,7 +121,7 @@ class WelcomeActivity : BaseActivity() { finish() } else { supportFragmentManager.popBackStack() - currentPage.value = currentPage.value?.minus(1) + viewModel.decreasePage() } } }) diff --git a/app/src/main/kotlin/cn/super12138/todo/views/welcome/WelcomeViewModel.kt b/app/src/main/kotlin/cn/super12138/todo/views/welcome/WelcomeViewModel.kt index 5d3f1d9..35807c0 100644 --- a/app/src/main/kotlin/cn/super12138/todo/views/welcome/WelcomeViewModel.kt +++ b/app/src/main/kotlin/cn/super12138/todo/views/welcome/WelcomeViewModel.kt @@ -1,8 +1,22 @@ package cn.super12138.todo.views.welcome -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow class WelcomeViewModel : ViewModel() { - val currentPage = MutableLiveData(0) + private val _currentPage = MutableStateFlow(0) + val currentPage = _currentPage.asStateFlow() + + fun setCurrentPage(page: Int) { + _currentPage.value = page + } + + fun increasePage() { + _currentPage.value += 1 + } + + fun decreasePage() { + _currentPage.value -= 1 + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher.xml b/app/src/main/res/drawable/ic_launcher.xml index 6e4f78d..7b158f0 100644 --- a/app/src/main/res/drawable/ic_launcher.xml +++ b/app/src/main/res/drawable/ic_launcher.xml @@ -1,7 +1,6 @@ @color/md_theme_surfaceContainerHigh @color/md_theme_surfaceContainerHighest - @color/md_theme_secondary @style/AppPreferenceThemeOverlay @style/ToDo.M3AlertDialog diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index f64d98c..e07c419 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -54,6 +54,7 @@