diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts
index 509dce90..b3dbc7da 100644
--- a/composeApp/build.gradle.kts
+++ b/composeApp/build.gradle.kts
@@ -74,6 +74,8 @@ kotlin {
implementation(libs.sqlite.bundled)
implementation(libs.bundles.paging)
+
+ implementation(libs.bundles.kmpPalette)
}
commonTest.dependencies {
diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml
index 6062df03..5f89b3f4 100644
--- a/composeApp/src/commonMain/composeResources/values/strings.xml
+++ b/composeApp/src/commonMain/composeResources/values/strings.xml
@@ -50,6 +50,8 @@
Search Movie
+ See More
+
- Light theme
- Dark theme
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardDescription.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardDescription.kt
index aa9c01c8..ab353ace 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardDescription.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardDescription.kt
@@ -12,10 +12,7 @@ import androidx.compose.material3.Card
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
@@ -26,19 +23,38 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
+import com.kmpalette.loader.NetworkLoader
+import com.kmpalette.rememberDominantColorState
import com.vickbt.composeApp.domain.models.MovieDetails
import com.vickbt.composeApp.utils.loadImage
+import com.vickbt.shared.resources.Res
+import com.vickbt.shared.resources.see_more
+import io.ktor.http.Url
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.IO
+import org.jetbrains.compose.resources.stringResource
@Composable
fun MovieCardDescription(
modifier: Modifier = Modifier,
movie: MovieDetails,
+ networkLoader: NetworkLoader,
maxLine: Int = 3,
- overFlowText: String = "See more",
+ overFlowText: String = stringResource(Res.string.see_more),
onItemClick: (MovieDetails) -> Unit
) {
- var dominantColor by remember { mutableStateOf(Color.DarkGray) }
- var dominantTextColor by remember { mutableStateOf(Color.LightGray) }
+ val dominantColorState = rememberDominantColorState(
+ loader = networkLoader,
+ defaultColor = Color.DarkGray,
+ defaultOnColor = Color.LightGray,
+ coroutineContext = Dispatchers.IO
+ )
+
+ movie.backdropPath?.loadImage()?.let {
+ LaunchedEffect(it) {
+ dominantColorState.updateFrom(Url(it))
+ }
+ }
Card(modifier = modifier.clickable { onItemClick(movie) }) {
Box {
@@ -62,7 +78,7 @@ fun MovieCardDescription(
.align(Alignment.BottomCenter)
.background(
Brush.verticalGradient(
- listOf(Color.Transparent, dominantColor)
+ listOf(Color.Transparent, dominantColorState.color)
)
)
)
@@ -82,18 +98,16 @@ fun MovieCardDescription(
style = MaterialTheme.typography.titleMedium,
overflow = TextOverflow.Ellipsis,
textAlign = TextAlign.Start,
- color = dominantTextColor,
+ color = dominantColorState.onColor,
lineHeight = 30.sp
)
- movie.overview?.let {
- ExpandableText(
- modifier = Modifier.padding(bottom = 4.dp),
- text = it,
- overFlowText = overFlowText,
- minimizedMaxLines = maxLine
- )
- }
+ ExpandableText(
+ modifier = Modifier.padding(bottom = 4.dp),
+ text = movie.overview,
+ overFlowText = overFlowText,
+ minimizedMaxLines = maxLine
+ )
}
}
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardLandscape.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardLandscape.kt
index b9aaa0a7..fd51abfc 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardLandscape.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardLandscape.kt
@@ -19,10 +19,7 @@ import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
@@ -33,6 +30,9 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
+import com.kmpalette.loader.NetworkLoader
+import com.kmpalette.loader.rememberNetworkLoader
+import com.kmpalette.rememberDominantColorState
import com.vickbt.composeApp.domain.models.Movie
import com.vickbt.composeApp.ui.components.ratingbar.RatingBar
import com.vickbt.composeApp.ui.components.ratingbar.RatingBarStyle
@@ -43,16 +43,30 @@ import com.vickbt.composeApp.utils.getReleaseDate
import com.vickbt.composeApp.utils.loadImage
import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.unknown_movie
+import io.ktor.http.Url
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.IO
import org.jetbrains.compose.resources.stringResource
@Composable
fun MovieCardLandscape(
modifier: Modifier = Modifier,
movie: Movie,
+ networkLoader: NetworkLoader = rememberNetworkLoader(),
onClickItem: (Movie) -> Unit
) {
- var dominantTextColor by remember { mutableStateOf(Color.LightGray) }
- var dominantSubTextColor by remember { mutableStateOf(dominantTextColor) }
+ val dominantColorState = rememberDominantColorState(
+ loader = networkLoader,
+ defaultColor = Color.DarkGray,
+ defaultOnColor = Color.LightGray,
+ coroutineContext = Dispatchers.IO
+ )
+
+ movie.backdropPath?.loadImage()?.let {
+ LaunchedEffect(it) {
+ dominantColorState.updateFrom(Url(it))
+ }
+ }
Card(
modifier = modifier.clickable { onClickItem(movie) },
@@ -80,7 +94,7 @@ fun MovieCardLandscape(
Brush.verticalGradient(
listOf(
Color.Transparent,
- Color.DarkGray
+ dominantColorState.color
)
)
)
@@ -103,7 +117,7 @@ fun MovieCardLandscape(
style = MaterialTheme.typography.titleMedium,
overflow = TextOverflow.Ellipsis,
textAlign = TextAlign.Start,
- color = dominantTextColor
+ color = dominantColorState.onColor
)
//endregion
@@ -131,7 +145,7 @@ fun MovieCardLandscape(
.padding(horizontal = 4.dp)
.width(1.dp)
.height(13.dp),
- color = dominantSubTextColor
+ color = dominantColorState.onColor
)
Text(
@@ -142,7 +156,7 @@ fun MovieCardLandscape(
style = MaterialTheme.typography.labelSmall,
overflow = TextOverflow.Ellipsis,
textAlign = TextAlign.Start,
- color = dominantSubTextColor
+ color = dominantColorState.onColor
)
}
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPager.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPager.kt
index 8b3509b6..619077b2 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPager.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPager.kt
@@ -18,10 +18,7 @@ import androidx.compose.material3.Card
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
@@ -33,6 +30,9 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
+import com.kmpalette.loader.NetworkLoader
+import com.kmpalette.loader.rememberNetworkLoader
+import com.kmpalette.rememberDominantColorState
import com.vickbt.composeApp.domain.models.Movie
import com.vickbt.composeApp.ui.components.ratingbar.RatingBar
import com.vickbt.composeApp.ui.components.ratingbar.RatingBarStyle
@@ -41,16 +41,30 @@ import com.vickbt.composeApp.utils.getRating
import com.vickbt.composeApp.utils.loadImage
import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.unknown_movie
+import io.ktor.http.Url
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.IO
import org.jetbrains.compose.resources.stringResource
@Composable
fun MovieCardPager(
modifier: Modifier = Modifier,
movie: Movie,
+ networkLoader: NetworkLoader = rememberNetworkLoader(),
onItemClick: (Movie) -> Unit
) {
- var dominantColor by remember { mutableStateOf(Color.DarkGray) }
- var dominantTextColor by remember { mutableStateOf(Color.LightGray) }
+ val dominantColorState = rememberDominantColorState(
+ loader = networkLoader,
+ defaultColor = Color.DarkGray,
+ defaultOnColor = Color.LightGray,
+ coroutineContext = Dispatchers.IO
+ )
+
+ movie.backdropPath?.loadImage()?.let {
+ LaunchedEffect(it) {
+ dominantColorState.updateFrom(Url(it))
+ }
+ }
Card(modifier = modifier.clickable { onItemClick(movie) }) {
Box {
@@ -74,7 +88,7 @@ fun MovieCardPager(
.align(Alignment.BottomCenter)
.background(
Brush.verticalGradient(
- listOf(Color.Transparent, dominantColor)
+ listOf(Color.Transparent, dominantColorState.color)
)
)
)
@@ -95,7 +109,7 @@ fun MovieCardPager(
style = MaterialTheme.typography.titleMedium,
overflow = TextOverflow.Ellipsis,
textAlign = TextAlign.Start,
- color = dominantTextColor,
+ color = dominantColorState.onColor,
lineHeight = 30.sp
)
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/DetailsAppBar.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/DetailsAppBar.kt
index b2668a00..8747211f 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/DetailsAppBar.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/DetailsAppBar.kt
@@ -24,10 +24,8 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
@@ -39,6 +37,8 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
+import com.kmpalette.loader.NetworkLoader
+import com.kmpalette.rememberDominantColorState
import com.vickbt.composeApp.domain.models.MovieDetails
import com.vickbt.composeApp.ui.components.collapsingToolbar.CollapsingToolbarScaffoldState
import com.vickbt.composeApp.utils.DetailsUiState
@@ -46,6 +46,9 @@ import com.vickbt.composeApp.utils.getMovieDuration
import com.vickbt.composeApp.utils.loadImage
import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.unknown_movie
+import io.ktor.http.Url
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.IO
import org.jetbrains.compose.resources.stringResource
@OptIn(ExperimentalMaterial3Api::class)
@@ -54,6 +57,7 @@ fun DetailsAppBar(
modifier: Modifier = Modifier,
collapsingScrollState: CollapsingToolbarScaffoldState,
movieDetailsState: DetailsUiState,
+ networkLoader: NetworkLoader,
onNavigationIconClick: () -> Unit,
onShareIconClick: () -> Unit,
onFavoriteIconClick: (MovieDetails, Boolean?) -> Unit
@@ -61,13 +65,21 @@ fun DetailsAppBar(
// Return progress on collapsing toolbar - 1.0f=Expanded, 0.0f=Collapsed
val scrollProgress = collapsingScrollState.toolbarState.progress
- val defaultDominantColor = MaterialTheme.colorScheme.surface
- val defaultDominantTextColor = MaterialTheme.colorScheme.onSurface
- var dominantColor by remember { mutableStateOf(defaultDominantColor) }
- var dominantTextColor by remember { mutableStateOf(defaultDominantTextColor) }
+ val dominantColorState = rememberDominantColorState(
+ loader = networkLoader,
+ defaultColor = Color.DarkGray,
+ defaultOnColor = Color.LightGray,
+ coroutineContext = Dispatchers.IO
+ )
- val movieDetails by remember { mutableStateOf(movieDetailsState.movieDetails) }
- var isFavourite by remember { mutableStateOf(movieDetailsState.isFavorite) }
+ movieDetailsState.movieDetails?.backdropPath?.loadImage()?.let {
+ LaunchedEffect(it) {
+ dominantColorState.updateFrom(Url(it))
+ }
+ }
+
+ val movieDetails = movieDetailsState.movieDetails
+ var isFavourite = movieDetailsState.isFavorite
val backgroundColor by animateColorAsState(
targetValue = MaterialTheme.colorScheme.surface.copy(1 - scrollProgress)
@@ -95,7 +107,11 @@ fun DetailsAppBar(
.fillMaxWidth()
.height(210.dp)
.align(Alignment.BottomCenter)
- .background(Brush.verticalGradient(listOf(Color.Transparent, dominantColor)))
+ .background(
+ Brush.verticalGradient(
+ listOf(Color.Transparent, dominantColorState.color)
+ )
+ )
)
Column(
@@ -117,7 +133,7 @@ fun DetailsAppBar(
style = MaterialTheme.typography.titleMedium,
maxLines = 2,
overflow = TextOverflow.Ellipsis,
- color = dominantTextColor,
+ color = dominantColorState.onColor,
fontSize = 32.sp,
textAlign = TextAlign.Start,
lineHeight = 30.sp
@@ -126,7 +142,7 @@ fun DetailsAppBar(
Text(
modifier = Modifier,
text = movieDetails?.runtime?.getMovieDuration() ?: "",
- color = dominantTextColor,
+ color = dominantColorState.onColor,
style = MaterialTheme.typography.bodyMedium,
fontSize = 14.sp
)
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsScreen.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsScreen.kt
index 72bd0ecf..847e9679 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsScreen.kt
@@ -27,6 +27,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController
import app.cash.paging.compose.collectAsLazyPagingItems
+import com.kmpalette.loader.rememberNetworkLoader
import com.vickbt.composeApp.ui.components.ItemMovieCast
import com.vickbt.composeApp.ui.components.MovieCardPortrait
import com.vickbt.composeApp.ui.components.MovieRatingSection
@@ -42,6 +43,7 @@ import com.vickbt.shared.resources.cast
import com.vickbt.shared.resources.overview
import com.vickbt.shared.resources.similar_movies
import org.jetbrains.compose.resources.stringResource
+import org.koin.compose.koinInject
import org.koin.compose.viewmodel.koinViewModel
import org.koin.core.annotation.KoinExperimentalAPI
@@ -59,6 +61,8 @@ fun DetailsScreen(
viewModel.isMovieFavorite(movieId = movieId)
}
+ val networkLoader = rememberNetworkLoader(httpClient = koinInject())
+
val movieDetailsState = viewModel.movieDetailsState.collectAsState().value
val scrollState = rememberScrollState()
@@ -83,6 +87,7 @@ fun DetailsScreen(
modifier = Modifier.fillMaxWidth(),
collapsingScrollState = collapsingScrollState,
movieDetailsState = movieDetailsState,
+ networkLoader = networkLoader,
onNavigationIconClick = { navigator.navigateUp() },
onShareIconClick = {},
onFavoriteIconClick = { movieDetails, isFavorite ->
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesScreen.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesScreen.kt
index fc0a5d53..c6bb031c 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesScreen.kt
@@ -16,11 +16,13 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
+import com.kmpalette.loader.rememberNetworkLoader
import com.vickbt.composeApp.ui.components.MovieCardDescription
import com.vickbt.composeApp.ui.components.appbars.AppBar
import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.title_favorites
import org.jetbrains.compose.resources.stringResource
+import org.koin.compose.koinInject
import org.koin.compose.viewmodel.koinViewModel
import org.koin.core.annotation.KoinExperimentalAPI
@@ -32,6 +34,8 @@ fun FavoritesScreen(
) {
val favoriteMovies = viewModel.favoriteMoviesState.collectAsState().value
+ val networkLoader = rememberNetworkLoader(httpClient = koinInject())
+
Scaffold(
modifier = Modifier.padding(mainPaddingValues),
topBar = { AppBar(stringResource(Res.string.title_favorites)) }
@@ -44,7 +48,8 @@ fun FavoritesScreen(
items(items = favoriteMovies.favoriteMovies ?: emptyList()) { favoriteMovie ->
MovieCardDescription(
modifier = Modifier.fillMaxWidth().height(260.dp).padding(vertical = 4.dp),
- movie = favoriteMovie
+ movie = favoriteMovie,
+ networkLoader = networkLoader
) { movieDetails ->
navigator.navigate("/details/${movieDetails.id}")
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeScreen.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeScreen.kt
index 191dcb90..2eaaeab7 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeScreen.kt
@@ -28,6 +28,7 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import app.cash.paging.compose.collectAsLazyPagingItems
+import com.kmpalette.loader.rememberNetworkLoader
import com.vickbt.composeApp.ui.components.MovieCardLandscape
import com.vickbt.composeApp.ui.components.MovieCardPager
import com.vickbt.composeApp.ui.components.MovieCardPagerIndicator
@@ -41,6 +42,7 @@ import com.vickbt.shared.resources.popular_movies
import com.vickbt.shared.resources.trending_movies
import com.vickbt.shared.resources.upcoming_movies
import org.jetbrains.compose.resources.stringResource
+import org.koin.compose.koinInject
import org.koin.compose.viewmodel.koinViewModel
@OptIn(ExperimentalFoundationApi::class)
@@ -55,7 +57,7 @@ fun HomeScreen(
val homeUiState = viewModel.homeUiState.collectAsState().value
- val movies = homeUiState.trendingMovies?.collectAsLazyPagingItems()
+ val networkLoader = rememberNetworkLoader(httpClient = koinInject())
Scaffold(
modifier = Modifier
@@ -99,6 +101,7 @@ fun HomeScreen(
) { currentPage ->
MovieCardPager(
modifier = Modifier.fillMaxWidth().height(280.dp),
+ networkLoader = networkLoader,
movie = nowPlayingMovies[currentPage]
) { movie ->
navigator.navigate("/details/${movie.id}")
@@ -170,6 +173,7 @@ fun HomeScreen(
.width(300.dp)
.height(245.dp),
movie = it,
+ networkLoader = networkLoader,
onClickItem = { movie ->
navigator.navigate("/details/${movie.id}")
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index da510e1e..c014e28d 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -25,14 +25,15 @@ materialWindowSizeClass = "0.3.0"
navigation = "2.7.0-alpha07"
coil = "3.0.0-alpha06"
datastore = "1.1.1"
+kmpPalette = "3.1.0"
ksp = "2.0.20-1.0.24"
sqlite = "2.5.0-SNAPSHOT"
room = "2.7.0-alpha08"
paging = "3.3.0-alpha02-0.5.1"
+kmppalette = "3.1.0"
#Android Versions
androidxActivity = "1.8.2"
-
androidxCore = "1.12.0"
material = "1.12.0"
firebaseBOM = "33.1.2"
@@ -85,6 +86,8 @@ coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil"
coil-compose-core = { module = "io.coil-kt.coil3:coil-compose-core", version.ref = "coil" }
coil-ktor = { module = "io.coil-kt.coil3:coil-network-ktor", version.ref = "coil" }
coil-multiplatform = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }
+kmpPalette-core = { module = "com.kmpalette:kmpalette-core", version.ref = "kmpPalette" }
+kmpPalette-network = { module = "com.kmpalette:extensions-network", version.ref = "kmpPalette" }
room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" }
@@ -114,5 +117,5 @@ turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" }
[bundles]
ktor = ["ktor-core", "ktor-contentNegotiation", "ktor-json", "ktor-logging"]
coil = ["coil-compose-core", "coil-compose", "coil-ktor", "coil-multiplatform"]
-paging = ["paging-common", "paging-compose"]
-#paging = ["paging-compose"]
\ No newline at end of file
+kmpPalette = ["kmpPalette-core", "kmpPalette-network"]
+paging = ["paging-common", "paging-compose"]
\ No newline at end of file
diff --git a/shared/schemas/com.vickbt.shared.data.cache.room.AppDatabase/1.json b/shared/schemas/com.vickbt.shared.data.cache.room.AppDatabase/1.json
deleted file mode 100644
index cbfc3d4d..00000000
--- a/shared/schemas/com.vickbt.shared.data.cache.room.AppDatabase/1.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "formatVersion": 1,
- "database": {
- "version": 1,
- "identityHash": "f42990db2e9e1c5e1da7e5ccde59dfdf",
- "entities": [
- {
- "tableName": "Favorite Movie Table",
- "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `imdbId` TEXT, `backdropPath` TEXT, `posterPath` TEXT, `originalLanguage` TEXT, `originalTitle` TEXT, `overview` TEXT, `popularity` REAL, `releaseDate` TEXT, `runTime` INTEGER, `status` TEXT, `tagLine` TEXT, `title` TEXT, `voteAverage` REAL, `voteCount` INTEGER, `createdAt` TEXT, PRIMARY KEY(`id`))",
- "fields": [
- {
- "fieldPath": "id",
- "columnName": "id",
- "affinity": "INTEGER",
- "notNull": true
- },
- {
- "fieldPath": "imdbId",
- "columnName": "imdbId",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "backdropPath",
- "columnName": "backdropPath",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "posterPath",
- "columnName": "posterPath",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "originalLanguage",
- "columnName": "originalLanguage",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "originalTitle",
- "columnName": "originalTitle",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "overview",
- "columnName": "overview",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "popularity",
- "columnName": "popularity",
- "affinity": "REAL"
- },
- {
- "fieldPath": "releaseDate",
- "columnName": "releaseDate",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "runTime",
- "columnName": "runTime",
- "affinity": "INTEGER"
- },
- {
- "fieldPath": "status",
- "columnName": "status",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "tagLine",
- "columnName": "tagLine",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "title",
- "columnName": "title",
- "affinity": "TEXT"
- },
- {
- "fieldPath": "voteAverage",
- "columnName": "voteAverage",
- "affinity": "REAL"
- },
- {
- "fieldPath": "voteCount",
- "columnName": "voteCount",
- "affinity": "INTEGER"
- },
- {
- "fieldPath": "createdAt",
- "columnName": "createdAt",
- "affinity": "TEXT"
- }
- ],
- "primaryKey": {
- "autoGenerate": false,
- "columnNames": [
- "id"
- ]
- }
- }
- ],
- "setupQueries": [
- "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
- "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f42990db2e9e1c5e1da7e5ccde59dfdf')"
- ]
- }
-}
\ No newline at end of file
diff --git a/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/RoomAppDatabase.kt b/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/RoomAppDatabase.kt
deleted file mode 100644
index 15a6d08d..00000000
--- a/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/RoomAppDatabase.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.vickbt.shared.data.cache.room
-
-import androidx.room.Database
-import androidx.room.RoomDatabase
-import androidx.sqlite.driver.bundled.BundledSQLiteDriver
-import com.vickbt.shared.data.cache.room.daos.FavoriteMovieDao
-import com.vickbt.shared.data.cache.room.entities.FavoriteMovieEntity
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.IO
-
-@Database(entities = [FavoriteMovieEntity::class], version = 1)
-abstract class RoomAppDatabase : RoomDatabase() {
- abstract fun favoriteMovieDao(): FavoriteMovieDao
-}
diff --git a/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/daos/FavoriteMovieDao.kt b/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/daos/FavoriteMovieDao.kt
deleted file mode 100644
index dafb2c75..00000000
--- a/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/daos/FavoriteMovieDao.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.vickbt.shared.data.cache.room.daos
-
-import androidx.room.Dao
-import androidx.room.Insert
-import androidx.room.OnConflictStrategy
-import androidx.room.Query
-import com.vickbt.shared.data.cache.room.entities.FavoriteMovieEntity
-import kotlinx.coroutines.flow.Flow
-
-@Dao
-interface FavoriteMovieDao {
-
- @Insert(onConflict = OnConflictStrategy.REPLACE)
- suspend fun insertFavoriteMovie(favoriteMovie: FavoriteMovieEntity)
-
- @Query("SELECT * FROM `Favorite Movie Table` ORDER BY createdAt DESC")
- fun getAllFavoriteMovies(): Flow>
-
- @Query("SELECT * FROM `Favorite Movie Table` WHERE id = :id")
- suspend fun getFavoriteMovie(id: Int): FavoriteMovieEntity?
-
- @Query("DELETE FROM `Favorite Movie Table` WHERE id = :id")
- suspend fun deleteFavoriteMovie(id: Int): Int
-
- @Query("DELETE FROM `Favorite Movie Table`")
- suspend fun deleteAllFavoriteMovies()
-
- @Query("SELECT count(1) FROM `Favorite Movie Table` WHERE id = :id")
- suspend fun isMovieFavorite(id: Int): Int
-}
-
diff --git a/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/entities/FavoriteMovieEntity.kt b/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/entities/FavoriteMovieEntity.kt
deleted file mode 100644
index 4e821843..00000000
--- a/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/entities/FavoriteMovieEntity.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.vickbt.shared.data.cache.room.entities
-
-import androidx.room.Entity
-import androidx.room.PrimaryKey
-
-@Entity(tableName = "Favorite Movie Table")
-data class FavoriteMovieEntity(
- @PrimaryKey(autoGenerate = false)
- val id: Int,
-
- val imdbId: String?,
- val backdropPath: String?,
- val posterPath: String?,
- val originalLanguage: String?,
- val originalTitle: String?,
- val overview: String?,
- val popularity: Double?,
- val releaseDate: String?,
- val runTime: Int?,
- val status: String?,
- val tagLine: String?,
- val title: String?,
- val voteAverage: Double?,
- val voteCount: Int?,
- val createdAt: String?
-)