diff --git a/app/src/main/java/ru/fincode/tsudesk/App.kt b/app/src/main/java/ru/fincode/tsudesk/App.kt index 0f26242..2268ac9 100644 --- a/app/src/main/java/ru/fincode/tsudesk/App.kt +++ b/app/src/main/java/ru/fincode/tsudesk/App.kt @@ -3,8 +3,6 @@ package ru.fincode.tsudesk import android.app.Application import dagger.hilt.android.HiltAndroidApp -const val LOG_DEBUG_TAG = "NETWORK_DEBUG" - @HiltAndroidApp class App : Application() { override fun onCreate() { diff --git a/app/src/main/java/ru/fincode/tsudesk/ui/navigation/AppNavHost.kt b/app/src/main/java/ru/fincode/tsudesk/ui/navigation/AppNavHost.kt index 2ee8cf3..1903778 100644 --- a/app/src/main/java/ru/fincode/tsudesk/ui/navigation/AppNavHost.kt +++ b/app/src/main/java/ru/fincode/tsudesk/ui/navigation/AppNavHost.kt @@ -6,8 +6,8 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.navigation import ru.fincode.tsudesk.core.navigation.AppRoute -import ru.fincode.tsudesk.feature.schedule.ui.navigation.scheduleGraph -import ru.fincode.tsudesk.feature.splash.ui.navigation.splashGraph +import ru.fincode.tsudesk.feature.schedule.presentation.navigation.scheduleGraph +import ru.fincode.tsudesk.feature.splash.presentation.navigation.splashGraph @Composable fun AppNavHost( diff --git a/core/common/src/main/java/ru/fincode/tsudesk/core/common/log/Constants.kt b/core/common/src/main/java/ru/fincode/tsudesk/core/common/log/Constants.kt new file mode 100644 index 0000000..2bd53ad --- /dev/null +++ b/core/common/src/main/java/ru/fincode/tsudesk/core/common/log/Constants.kt @@ -0,0 +1,5 @@ +package ru.fincode.tsudesk.core.common.log + +object Constants { + const val LOG_DEBUG_TAG = "LOG_DEBUG_TAG" +} \ No newline at end of file diff --git a/core/common/src/main/java/ru/fincode/tsudesk/core/common/log/LoggerExtensions.kt b/core/common/src/main/java/ru/fincode/tsudesk/core/common/log/LoggerExtensions.kt new file mode 100644 index 0000000..527f87e --- /dev/null +++ b/core/common/src/main/java/ru/fincode/tsudesk/core/common/log/LoggerExtensions.kt @@ -0,0 +1,25 @@ +package ru.fincode.tsudesk.core.common.log + +import android.util.Log + +private fun Any.moduleTag(): String { + val module = this::class.java.`package`?.name?.substringAfterLast(".")?.uppercase() ?: "UNKNOWN" + + return "${Constants.LOG_DEBUG_TAG}:$module" +} + +fun Any.logD(message: String) { + Log.d(moduleTag(), message) +} + +fun Any.logD(message: String, throwable: Throwable) { + Log.d(moduleTag(), message, throwable) +} + +fun Any.logE(message: String) { + Log.e(moduleTag(), message) +} + +fun Any.logE(message: String, throwable: Throwable) { + Log.e(moduleTag(), message, throwable) +} diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/Constants.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/Constants.kt deleted file mode 100644 index a2ebcbf..0000000 --- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/Constants.kt +++ /dev/null @@ -1,5 +0,0 @@ -package ru.fincode.tsudesk.core.network - -object Constants { - -} \ No newline at end of file diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/DebugInterceptor.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/DebugInterceptor.kt index 679a70b..3712edc 100644 --- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/DebugInterceptor.kt +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/DebugInterceptor.kt @@ -3,20 +3,18 @@ package ru.fincode.tsudesk.core.network.interceptor import android.util.Log import okhttp3.Interceptor import okhttp3.Response +import ru.fincode.tsudesk.core.common.log.logD import javax.inject.Inject import javax.inject.Singleton -private const val LOG_DEBUG_TAG = "LOG_DEBUG_TAG" @Singleton class DebugInterceptor @Inject constructor() : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val request = chain.request() - - Log.d(LOG_DEBUG_TAG, "URL: ${request.url}") - Log.d(LOG_DEBUG_TAG, "Method: ${request.method}") - + logD("URL: ${request.url}") + logD("Method: ${request.method}") return chain.proceed(request) } } diff --git a/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/NetEventLogger.kt b/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/NetEventLogger.kt index 0c5e8f1..debe5ea 100644 --- a/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/NetEventLogger.kt +++ b/core/network/src/main/java/ru/fincode/tsudesk/core/network/interceptor/NetEventLogger.kt @@ -3,18 +3,18 @@ package ru.fincode.tsudesk.core.network.interceptor import android.util.Log import okhttp3.Call import okhttp3.EventListener +import ru.fincode.tsudesk.core.common.log.logD import java.io.IOException import java.net.InetAddress -private const val LOG_DEBUG_TAG = "LOG_DEBUG_TAG" class NetEventLogger : EventListener() { override fun dnsStart(call: Call, domainName: String) { - Log.d(LOG_DEBUG_TAG, "dnsStart: $domainName") + logD("dnsStart: $domainName") } override fun dnsEnd(call: Call, domainName: String, inetAddressList: List) { - Log.d(LOG_DEBUG_TAG, "dnsEnd: $domainName -> $inetAddressList") + logD("dnsEnd: $domainName -> $inetAddressList") } override fun connectStart( @@ -22,30 +22,30 @@ class NetEventLogger : EventListener() { inetSocketAddress: java.net.InetSocketAddress, proxy: java.net.Proxy ) { - Log.d(LOG_DEBUG_TAG, "connectStart: $inetSocketAddress proxy=$proxy") + logD("connectStart: $inetSocketAddress proxy=$proxy") } override fun secureConnectStart(call: Call) { - Log.d(LOG_DEBUG_TAG, "tlsStart") + logD("tlsStart") } override fun secureConnectEnd(call: Call, handshake: okhttp3.Handshake?) { - Log.d(LOG_DEBUG_TAG, "tlsEnd: $handshake") + logD("tlsEnd: $handshake") } override fun requestHeadersStart(call: Call) { - Log.d(LOG_DEBUG_TAG, "reqHeadersStart") + logD("reqHeadersStart") } override fun responseHeadersStart(call: Call) { - Log.d(LOG_DEBUG_TAG, "respHeadersStart") + logD("respHeadersStart") } override fun callFailed(call: Call, ioe: IOException) { - Log.e(LOG_DEBUG_TAG, "callFailed", ioe) + logD("callFailed", ioe) } override fun callEnd(call: Call) { - Log.d(LOG_DEBUG_TAG, "callEnd") + logD("callEnd") } } diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/ScheduleRepositoryImpl.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/ScheduleRepositoryImpl.kt index 16c5938..4f042eb 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/ScheduleRepositoryImpl.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/data/ScheduleRepositoryImpl.kt @@ -8,7 +8,6 @@ import ru.fincode.tsudesk.core.network.model.NetworkResult import ru.fincode.tsudesk.core.network.model.map import ru.fincode.tsudesk.feature.schedule.data.datasource.ScheduleLocalDataSource import ru.fincode.tsudesk.feature.schedule.data.datasource.ScheduleRemoteDataSource -import ru.fincode.tsudesk.feature.schedule.data.local.ScheduleCacheKey import ru.fincode.tsudesk.feature.schedule.data.remote.ScheduleNetworkMapper import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleEntity import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleType @@ -23,9 +22,11 @@ class ScheduleRepositoryImpl @Inject constructor( override fun observeSchedule(type: ScheduleType): Flow> = flow { val scheduleKey = type.toCacheKey() + val cached = local.observeSchedule(scheduleKey).first() - cached?.let { - emit(DataResult.Data(it, refreshedFromNetwork = false)) + if (cached != null) { + emit(DataResult.Data(cached, refreshedFromNetwork = false)) + if ((System.currentTimeMillis() - cached.timestamp) < CACHE_TTL_MS) return@flow } val networkResult = loadSchedule(type) @@ -45,11 +46,12 @@ class ScheduleRepositoryImpl @Inject constructor( private suspend fun loadSchedule(type: ScheduleType): NetworkResult = when (type) { - is ScheduleType.Group -> - remote.loadScheduleByGroup(type.number).map(mapper::invoke) + is ScheduleType.Group -> remote.loadScheduleByGroup(type.number).map(mapper::invoke) - is ScheduleType.Teacher -> - remote.loadScheduleByTeacher(type.name).map(mapper::invoke) + is ScheduleType.Teacher -> remote.loadScheduleByTeacher(type.name).map(mapper::invoke) } + private companion object { + private const val CACHE_TTL_MS: Long = 1;//24L * 60L * 60L * 1000L // 1 day + } } diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/GetScheduleUseCase.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/ObserveScheduleUseCase.kt similarity index 91% rename from feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/GetScheduleUseCase.kt rename to feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/ObserveScheduleUseCase.kt index 0960a89..83ae425 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/GetScheduleUseCase.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/domain/usecase/ObserveScheduleUseCase.kt @@ -7,7 +7,7 @@ import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleType import ru.fincode.tsudesk.feature.schedule.domain.repository.ScheduleRepository import javax.inject.Inject -class GetScheduleUseCase @Inject constructor( +class ObserveScheduleUseCase @Inject constructor( private val repository: ScheduleRepository ) { operator fun invoke(type: ScheduleType): Flow> = diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/model/ScheduleUiState.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/model/ScheduleUiState.kt new file mode 100644 index 0000000..34c1461 --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/model/ScheduleUiState.kt @@ -0,0 +1,11 @@ +package ru.fincode.tsudesk.feature.schedule.presentation.model + +import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleEntity + +data class ScheduleUiState( + val isLoading: Boolean = false, + val data: ScheduleEntity? = null, + val errorMessage: String? = null, + val title: String = "Schedule", + val refreshedFromNetwork: Boolean = false +) \ No newline at end of file diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/navigation/ScheduleGraph.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/navigation/ScheduleGraph.kt new file mode 100644 index 0000000..9d95dba --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/navigation/ScheduleGraph.kt @@ -0,0 +1,20 @@ +package ru.fincode.tsudesk.feature.schedule.presentation.navigation + +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.compose.composable +import ru.fincode.tsudesk.core.navigation.AppRoute +import ru.fincode.tsudesk.feature.schedule.presentation.screen.ScheduleRoute + +fun NavGraphBuilder.scheduleGraph( + navController: NavHostController +) { + composable { + ScheduleRoute() + } + + // composable { backStackEntry -> + // val args = backStackEntry.toRoute() + // ScheduleDetailsRoute(lessonId = args.lessonId) + // } +} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/screen/ScheduleRoute.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/screen/ScheduleRoute.kt new file mode 100644 index 0000000..18b524e --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/screen/ScheduleRoute.kt @@ -0,0 +1,16 @@ +package ru.fincode.tsudesk.feature.schedule.presentation.screen + +import androidx.compose.runtime.Composable +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import ru.fincode.tsudesk.feature.schedule.presentation.screen.ScheduleViewModel +import ru.fincode.tsudesk.feature.schedule.presentation.ui.ScheduleScreen + + +@Composable +fun ScheduleRoute( + viewModel: ScheduleViewModel = hiltViewModel() +) { + val state = viewModel.state.collectAsStateWithLifecycle().value + ScheduleScreen(state = state) +} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/ui/ScheduleRoute.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/screen/ScheduleScreen.kt similarity index 58% rename from feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/ui/ScheduleRoute.kt rename to feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/screen/ScheduleScreen.kt index 8ebd106..1ec5e4d 100644 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/ui/ScheduleRoute.kt +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/screen/ScheduleScreen.kt @@ -2,21 +2,26 @@ package ru.fincode.tsudesk.feature.schedule.presentation.ui import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import ru.fincode.tsudesk.feature.schedule.presentation.model.ScheduleUiState @Composable -fun ScheduleScreen() { +fun ScheduleScreen( + state: ScheduleUiState +) { Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center ) { - Text( - text = "Schedule", - color = Color.Black - ) + if (state.isLoading) { + CircularProgressIndicator() + } else { + Text(text = state.title, color = Color.Black) + } } } diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/screen/ScheduleViewModel.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/screen/ScheduleViewModel.kt new file mode 100644 index 0000000..5aa8d49 --- /dev/null +++ b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/screen/ScheduleViewModel.kt @@ -0,0 +1,50 @@ +package ru.fincode.tsudesk.feature.schedule.presentation.screen + +import android.util.Log +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.stateIn +import ru.fincode.tsudesk.core.common.log.logD +import ru.fincode.tsudesk.core.common.model.DataResult +import ru.fincode.tsudesk.feature.schedule.domain.model.ScheduleType +import ru.fincode.tsudesk.feature.schedule.domain.usecase.ObserveScheduleUseCase +import ru.fincode.tsudesk.feature.schedule.presentation.model.ScheduleUiState +import javax.inject.Inject + +@HiltViewModel +class ScheduleViewModel @Inject constructor( + private val observeScheduleUseCase: ObserveScheduleUseCase +) : ViewModel() { + + private val scheduleType = ScheduleType.Group(number = "220631") + + val state: StateFlow = observeScheduleUseCase(scheduleType).map { result -> + when (result) { + is DataResult.Data -> { + logD("Data loaded from ${if (result.refreshedFromNetwork) "NETWORK" else "CACHE"}") + ScheduleUiState( + isLoading = false, + data = result.data, + refreshedFromNetwork = result.refreshedFromNetwork + ) + } + + is DataResult.Error -> { + logD("Error loading schedule: ${result.error}") + ScheduleUiState(isLoading = false, errorMessage = result.error.toString()) + } + } + }.onStart { + logD("Start collecting schedule flow") + emit(ScheduleUiState(isLoading = true)) + }.stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5000), + initialValue = ScheduleUiState(isLoading = true) + ) +} diff --git a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/ui/navigation/ScheduleGraph.kt b/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/ui/navigation/ScheduleGraph.kt deleted file mode 100644 index b35bf98..0000000 --- a/feature/schedule/src/main/java/ru/fincode/tsudesk/feature/schedule/presentation/ui/navigation/ScheduleGraph.kt +++ /dev/null @@ -1,21 +0,0 @@ -package ru.fincode.tsudesk.feature.schedule.ui.navigation - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavHostController -import androidx.navigation.compose.composable -import ru.fincode.tsudesk.core.navigation.AppRoute -import ru.fincode.tsudesk.feature.schedule.presentation.ui.ScheduleScreen - -fun NavGraphBuilder.scheduleGraph( - navController: NavHostController -) { - composable { - ScheduleScreen() - } - - // регистрация экрана детальной информации о занятии - // composable { backStackEntry -> - // // val args = backStackEntry.toRoute() - // // ScheduleDetailsRoute(lessonId = args.lessonId) - // } -} diff --git a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashEffect.kt b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/model/SplashEffect.kt similarity index 54% rename from feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashEffect.kt rename to feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/model/SplashEffect.kt index e8e9e35..b6e7ad4 100644 --- a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashEffect.kt +++ b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/model/SplashEffect.kt @@ -1,5 +1,5 @@ -package ru.fincode.tsudesk.feature.splash.ui +package ru.fincode.tsudesk.feature.splash.presentation.model sealed interface SplashEffect { data object OpenMain : SplashEffect -} +} \ No newline at end of file diff --git a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/model/SplashUiState.kt b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/model/SplashUiState.kt new file mode 100644 index 0000000..de236d0 --- /dev/null +++ b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/model/SplashUiState.kt @@ -0,0 +1,7 @@ +package ru.fincode.tsudesk.feature.splash.presentation.model + +data class SplashUiState( + val title: String = "SPLASH SCREEN", + val isLoading: Boolean = true, + val errorMessage: String? = null +) diff --git a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/navigation/SplashGraph.kt b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/navigation/SplashGraph.kt similarity index 80% rename from feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/navigation/SplashGraph.kt rename to feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/navigation/SplashGraph.kt index 55cba5f..8e4bfd8 100644 --- a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/navigation/SplashGraph.kt +++ b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/navigation/SplashGraph.kt @@ -1,10 +1,10 @@ -package ru.fincode.tsudesk.feature.splash.ui.navigation +package ru.fincode.tsudesk.feature.splash.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable import ru.fincode.tsudesk.core.navigation.AppRoute -import ru.fincode.tsudesk.feature.splash.ui.SplashRoute +import ru.fincode.tsudesk.feature.splash.presentation.screen.SplashRoute fun NavGraphBuilder.splashGraph( navController: NavHostController diff --git a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashRoute.kt b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/screen/SplashRoute.kt similarity index 81% rename from feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashRoute.kt rename to feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/screen/SplashRoute.kt index 7263940..1cc4c68 100644 --- a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashRoute.kt +++ b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/screen/SplashRoute.kt @@ -1,9 +1,10 @@ -package ru.fincode.tsudesk.feature.splash.ui +package ru.fincode.tsudesk.feature.splash.presentation.screen import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import ru.fincode.tsudesk.feature.splash.presentation.model.SplashEffect @Composable fun SplashRoute( diff --git a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashScreen.kt b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/screen/SplashScreen.kt similarity index 80% rename from feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashScreen.kt rename to feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/screen/SplashScreen.kt index b3ea9cc..94ed866 100644 --- a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashScreen.kt +++ b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/screen/SplashScreen.kt @@ -1,4 +1,4 @@ -package ru.fincode.tsudesk.feature.splash.ui +package ru.fincode.tsudesk.feature.splash.presentation.screen import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize @@ -7,6 +7,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import ru.fincode.tsudesk.feature.splash.presentation.model.SplashUiState @Composable fun SplashScreen( diff --git a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashViewModel.kt b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/screen/SplashViewModel.kt similarity index 87% rename from feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashViewModel.kt rename to feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/screen/SplashViewModel.kt index 2d901f0..f2506f8 100644 --- a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashViewModel.kt +++ b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/presentation/screen/SplashViewModel.kt @@ -1,4 +1,4 @@ -package ru.fincode.tsudesk.feature.splash.ui +package ru.fincode.tsudesk.feature.splash.presentation.screen import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -10,6 +10,8 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch import ru.fincode.tsudesk.core.common.model.DataResult import ru.fincode.tsudesk.core.config.domain.usecase.GetConfigUseCase +import ru.fincode.tsudesk.feature.splash.presentation.model.SplashUiState +import ru.fincode.tsudesk.feature.splash.presentation.model.SplashEffect import javax.inject.Inject @HiltViewModel diff --git a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashUiState.kt b/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashUiState.kt deleted file mode 100644 index 642a12b..0000000 --- a/feature/splash/src/main/java/ru/fincode/tsudesk/feature/splash/ui/SplashUiState.kt +++ /dev/null @@ -1,7 +0,0 @@ -package ru.fincode.tsudesk.feature.splash.ui - -data class SplashUiState( - val title: String = "TSUDesk", - val isLoading: Boolean = true, - val errorMessage: String? = null -)