Moved IntroActivity.Model to IntroModel

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
This commit is contained in:
Arnau Mora 2024-06-17 13:22:13 +02:00 committed by Ricki Hirner
parent 0935bca1a2
commit d44cfdf437
2 changed files with 50 additions and 50 deletions

View file

@ -16,19 +16,15 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.runtime.rememberCoroutineScope
import androidx.lifecycle.ViewModel
import at.bitfire.davdroid.log.Logger
import at.bitfire.davdroid.ui.AppTheme
import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.launch
@AndroidEntryPoint
@OptIn(ExperimentalFoundationApi::class)
class IntroActivity : AppCompatActivity() {
val model by viewModels<Model>()
val model by viewModels<IntroModel>()
override fun onCreate(savedInstanceState: Bundle?) {
@ -77,49 +73,4 @@ class IntroActivity : AppCompatActivity() {
}
}
@HiltViewModel
class Model @Inject constructor(
introPageFactory: IntroPageFactory
): ViewModel() {
private val introPages = introPageFactory.introPages
private var _pages: List<IntroPage>? = null
val pages: List<IntroPage>
@Synchronized
get() {
_pages?.let { return it }
val newPages = calculatePages()
_pages = newPages
return newPages
}
private fun calculatePages(): List<IntroPage> {
for (page in introPages)
Logger.log.fine("Found intro page ${page::class.java} with order ${page.getShowPolicy()}")
val activePages: Map<IntroPage, IntroPage.ShowPolicy> = introPages
.associateWith { page ->
page.getShowPolicy().also { policy ->
Logger.log.fine("IntroActivity: found intro page ${page::class.java} with $policy")
}
}
.filterValues { it != IntroPage.ShowPolicy.DONT_SHOW }
val anyShowAlways = activePages.values.any { it == IntroPage.ShowPolicy.SHOW_ALWAYS }
return if (anyShowAlways) {
val pages = mutableListOf<IntroPage>()
activePages.filterValues { it != IntroPage.ShowPolicy.DONT_SHOW }.forEach { page, _ ->
pages += page
}
pages
} else
emptyList()
}
}
}

View file

@ -0,0 +1,49 @@
package at.bitfire.davdroid.ui.intro
import androidx.lifecycle.ViewModel
import at.bitfire.davdroid.log.Logger
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class IntroModel @Inject constructor(
introPageFactory: IntroPageFactory
): ViewModel() {
private val introPages = introPageFactory.introPages
private var _pages: List<IntroPage>? = null
val pages: List<IntroPage>
@Synchronized
get() {
_pages?.let { return it }
val newPages = calculatePages()
_pages = newPages
return newPages
}
private fun calculatePages(): List<IntroPage> {
for (page in introPages)
Logger.log.fine("Found intro page ${page::class.java} with order ${page.getShowPolicy()}")
val activePages: Map<IntroPage, IntroPage.ShowPolicy> = introPages
.associateWith { page ->
page.getShowPolicy().also { policy ->
Logger.log.fine("IntroActivity: found intro page ${page::class.java} with $policy")
}
}
.filterValues { it != IntroPage.ShowPolicy.DONT_SHOW }
val anyShowAlways = activePages.values.any { it == IntroPage.ShowPolicy.SHOW_ALWAYS }
return if (anyShowAlways) {
val pages = mutableListOf<IntroPage>()
activePages.filterValues { it != IntroPage.ShowPolicy.DONT_SHOW }.forEach { page, _ ->
pages += page
}
pages
} else
emptyList()
}
}