From ec25b03e98971a48ba7253594eac68b68cf5da9e Mon Sep 17 00:00:00 2001 From: Joren Date: Mon, 29 Apr 2024 22:32:19 +0200 Subject: [PATCH] Add repo, .. --- .../java/com/ti/mobpo/data/AppContainer.kt | 16 +++++++++++++ .../main/java/com/ti/mobpo/data/Favourite.kt | 4 +--- .../java/com/ti/mobpo/data/FavouriteDao.kt | 3 ++- .../com/ti/mobpo/data/FavouritesRepository.kt | 23 +++++++++++++++++++ .../mobpo/data/OfflineFavouritesRepository.kt | 16 +++++++++++++ .../main/java/com/ti/mobpo/ui/Navigation.kt | 3 +-- .../ui/{ => pokesearch}/PokeSearchUiState.kt | 2 +- .../{ => pokesearch}/PokeSearchViewModel.kt | 2 +- .../com/ti/mobpo/ui/screens/PokeSearch.kt | 4 +--- 9 files changed, 62 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/ti/mobpo/data/AppContainer.kt create mode 100644 app/src/main/java/com/ti/mobpo/data/FavouritesRepository.kt create mode 100644 app/src/main/java/com/ti/mobpo/data/OfflineFavouritesRepository.kt rename app/src/main/java/com/ti/mobpo/ui/{ => pokesearch}/PokeSearchUiState.kt (63%) rename app/src/main/java/com/ti/mobpo/ui/{ => pokesearch}/PokeSearchViewModel.kt (98%) diff --git a/app/src/main/java/com/ti/mobpo/data/AppContainer.kt b/app/src/main/java/com/ti/mobpo/data/AppContainer.kt new file mode 100644 index 0000000..210067a --- /dev/null +++ b/app/src/main/java/com/ti/mobpo/data/AppContainer.kt @@ -0,0 +1,16 @@ +package com.ti.mobpo.data + +import android.content.Context + + +interface AppContainer { + val favouritesRepository: FavouritesRepository +} + + +class AppDataContainer(private val context: Context) : AppContainer { + + override val favouritesRepository: FavouritesRepository by lazy { + OfflineFavouritesRepository(PokemonDatabase.getDatabase(context).FavouriteDao()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ti/mobpo/data/Favourite.kt b/app/src/main/java/com/ti/mobpo/data/Favourite.kt index ac23ca9..eec9166 100644 --- a/app/src/main/java/com/ti/mobpo/data/Favourite.kt +++ b/app/src/main/java/com/ti/mobpo/data/Favourite.kt @@ -8,7 +8,5 @@ import com.ti.mobpo.model.Type @Entity(tableName = "favourites") data class Favourite( @PrimaryKey val id: Int, - val name: String, - val types: List, - val sprites: Sprites + val name: String ) \ No newline at end of file diff --git a/app/src/main/java/com/ti/mobpo/data/FavouriteDao.kt b/app/src/main/java/com/ti/mobpo/data/FavouriteDao.kt index 5d59e40..a3b46a9 100644 --- a/app/src/main/java/com/ti/mobpo/data/FavouriteDao.kt +++ b/app/src/main/java/com/ti/mobpo/data/FavouriteDao.kt @@ -5,6 +5,7 @@ import androidx.room.Delete import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query +import kotlinx.coroutines.flow.Flow @Dao interface FavouriteDao { @@ -15,5 +16,5 @@ interface FavouriteDao { suspend fun delete(favourite: Favourite) @Query("SELECT id FROM favourites") - suspend fun getAllFavoriteIds(): List + fun getAllFavoriteIds(): Flow> } diff --git a/app/src/main/java/com/ti/mobpo/data/FavouritesRepository.kt b/app/src/main/java/com/ti/mobpo/data/FavouritesRepository.kt new file mode 100644 index 0000000..316a2c4 --- /dev/null +++ b/app/src/main/java/com/ti/mobpo/data/FavouritesRepository.kt @@ -0,0 +1,23 @@ +package com.ti.mobpo.data + +import kotlinx.coroutines.flow.Flow + +/** + * Repository that provides insert, update, delete, and retrieve of [Item] from a given data source. + */ +interface FavouritesRepository { + /** + * Retrieve all the items from the the given data source. + */ + fun getAllFavoriteIds(): Flow> + + /** + * Insert item in the data source + */ + suspend fun insertItem(item: Favourite) + + /** + * Delete item from the data source + */ + suspend fun deleteItem(item: Favourite) +} diff --git a/app/src/main/java/com/ti/mobpo/data/OfflineFavouritesRepository.kt b/app/src/main/java/com/ti/mobpo/data/OfflineFavouritesRepository.kt new file mode 100644 index 0000000..62a98a8 --- /dev/null +++ b/app/src/main/java/com/ti/mobpo/data/OfflineFavouritesRepository.kt @@ -0,0 +1,16 @@ +package com.ti.mobpo.data + +import kotlinx.coroutines.flow.Flow + +class OfflineFavouritesRepository(private val favouriteDao: FavouriteDao) : FavouritesRepository { + override fun getAllFavoriteIds(): Flow> { + return favouriteDao.getAllFavoriteIds() + } + override suspend fun insertItem(item: Favourite) { + favouriteDao.insert(item) + } + + override suspend fun deleteItem(item: Favourite) { + favouriteDao.delete(item) + } +} diff --git a/app/src/main/java/com/ti/mobpo/ui/Navigation.kt b/app/src/main/java/com/ti/mobpo/ui/Navigation.kt index af1b488..3510682 100644 --- a/app/src/main/java/com/ti/mobpo/ui/Navigation.kt +++ b/app/src/main/java/com/ti/mobpo/ui/Navigation.kt @@ -8,10 +8,8 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Favorite import androidx.compose.material.icons.filled.Home -import androidx.compose.material.icons.filled.Person import androidx.compose.material.icons.outlined.FavoriteBorder import androidx.compose.material.icons.outlined.Home -import androidx.compose.material.icons.outlined.Person import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBar @@ -32,6 +30,7 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController +import com.ti.mobpo.ui.pokesearch.PokeSearchViewModel import com.ti.mobpo.ui.screens.Favourites import com.ti.mobpo.ui.screens.PokeSearchScreen diff --git a/app/src/main/java/com/ti/mobpo/ui/PokeSearchUiState.kt b/app/src/main/java/com/ti/mobpo/ui/pokesearch/PokeSearchUiState.kt similarity index 63% rename from app/src/main/java/com/ti/mobpo/ui/PokeSearchUiState.kt rename to app/src/main/java/com/ti/mobpo/ui/pokesearch/PokeSearchUiState.kt index 2bd3d0f..5012bf5 100644 --- a/app/src/main/java/com/ti/mobpo/ui/PokeSearchUiState.kt +++ b/app/src/main/java/com/ti/mobpo/ui/pokesearch/PokeSearchUiState.kt @@ -1,3 +1,3 @@ -package com.ti.mobpo.ui +package com.ti.mobpo.ui.pokesearch data class PokeSearchUiState(val searchQuery: String = "") diff --git a/app/src/main/java/com/ti/mobpo/ui/PokeSearchViewModel.kt b/app/src/main/java/com/ti/mobpo/ui/pokesearch/PokeSearchViewModel.kt similarity index 98% rename from app/src/main/java/com/ti/mobpo/ui/PokeSearchViewModel.kt rename to app/src/main/java/com/ti/mobpo/ui/pokesearch/PokeSearchViewModel.kt index df6a2a7..febd8b3 100644 --- a/app/src/main/java/com/ti/mobpo/ui/PokeSearchViewModel.kt +++ b/app/src/main/java/com/ti/mobpo/ui/pokesearch/PokeSearchViewModel.kt @@ -1,4 +1,4 @@ -package com.ti.mobpo.ui +package com.ti.mobpo.ui.pokesearch import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope diff --git a/app/src/main/java/com/ti/mobpo/ui/screens/PokeSearch.kt b/app/src/main/java/com/ti/mobpo/ui/screens/PokeSearch.kt index ae04f55..511ba28 100644 --- a/app/src/main/java/com/ti/mobpo/ui/screens/PokeSearch.kt +++ b/app/src/main/java/com/ti/mobpo/ui/screens/PokeSearch.kt @@ -1,7 +1,6 @@ package com.ti.mobpo.ui.screens -import androidx.compose.foundation.Image -import com.ti.mobpo.ui.PokeSearchViewModel +import com.ti.mobpo.ui.pokesearch.PokeSearchViewModel import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -48,7 +47,6 @@ import coil.compose.AsyncImage import coil.request.ImageRequest import com.ti.mobpo.capitalizeFirstLetterAfterHyphens import com.ti.mobpo.ui.theme.MobileSecurityTheme -import java.util.Locale @Composable fun PokeSearchScreen(pokeSearchViewModel: PokeSearchViewModel) {