Add repo, ..

This commit is contained in:
Joren 2024-04-29 22:32:19 +02:00
parent 6abf4100f2
commit ec25b03e98
Signed by untrusted user who does not match committer: Joren
GPG Key ID: 280E33DFBC0F1B55
9 changed files with 62 additions and 11 deletions

View File

@ -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())
}
}

View File

@ -8,7 +8,5 @@ import com.ti.mobpo.model.Type
@Entity(tableName = "favourites") @Entity(tableName = "favourites")
data class Favourite( data class Favourite(
@PrimaryKey val id: Int, @PrimaryKey val id: Int,
val name: String, val name: String
val types: List<Type>,
val sprites: Sprites
) )

View File

@ -5,6 +5,7 @@ import androidx.room.Delete
import androidx.room.Insert import androidx.room.Insert
import androidx.room.OnConflictStrategy import androidx.room.OnConflictStrategy
import androidx.room.Query import androidx.room.Query
import kotlinx.coroutines.flow.Flow
@Dao @Dao
interface FavouriteDao { interface FavouriteDao {
@ -15,5 +16,5 @@ interface FavouriteDao {
suspend fun delete(favourite: Favourite) suspend fun delete(favourite: Favourite)
@Query("SELECT id FROM favourites") @Query("SELECT id FROM favourites")
suspend fun getAllFavoriteIds(): List<Int> fun getAllFavoriteIds(): Flow<List<Int>>
} }

View File

@ -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<List<Int>>
/**
* Insert item in the data source
*/
suspend fun insertItem(item: Favourite)
/**
* Delete item from the data source
*/
suspend fun deleteItem(item: Favourite)
}

View File

@ -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<List<Int>> {
return favouriteDao.getAllFavoriteIds()
}
override suspend fun insertItem(item: Favourite) {
favouriteDao.insert(item)
}
override suspend fun deleteItem(item: Favourite) {
favouriteDao.delete(item)
}
}

View File

@ -8,10 +8,8 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.Home 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.FavoriteBorder
import androidx.compose.material.icons.outlined.Home import androidx.compose.material.icons.outlined.Home
import androidx.compose.material.icons.outlined.Person
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBar
@ -32,6 +30,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController 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.Favourites
import com.ti.mobpo.ui.screens.PokeSearchScreen import com.ti.mobpo.ui.screens.PokeSearchScreen

View File

@ -1,3 +1,3 @@
package com.ti.mobpo.ui package com.ti.mobpo.ui.pokesearch
data class PokeSearchUiState(val searchQuery: String = "") data class PokeSearchUiState(val searchQuery: String = "")

View File

@ -1,4 +1,4 @@
package com.ti.mobpo.ui package com.ti.mobpo.ui.pokesearch
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope

View File

@ -1,7 +1,6 @@
package com.ti.mobpo.ui.screens package com.ti.mobpo.ui.screens
import androidx.compose.foundation.Image import com.ti.mobpo.ui.pokesearch.PokeSearchViewModel
import com.ti.mobpo.ui.PokeSearchViewModel
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@ -48,7 +47,6 @@ import coil.compose.AsyncImage
import coil.request.ImageRequest import coil.request.ImageRequest
import com.ti.mobpo.capitalizeFirstLetterAfterHyphens import com.ti.mobpo.capitalizeFirstLetterAfterHyphens
import com.ti.mobpo.ui.theme.MobileSecurityTheme import com.ti.mobpo.ui.theme.MobileSecurityTheme
import java.util.Locale
@Composable @Composable
fun PokeSearchScreen(pokeSearchViewModel: PokeSearchViewModel) { fun PokeSearchScreen(pokeSearchViewModel: PokeSearchViewModel) {