From 9869529c37f7f62d74e5a54ee9a4e9f030458880 Mon Sep 17 00:00:00 2001 From: Azea Date: Wed, 18 Oct 2023 16:34:19 -0400 Subject: [PATCH] Replace list with Card Views, move out of main activity, move repo into db manager object for better access through the view models without passing it through everything --- .../com/menagerie/ophelia/MainActivity.kt | 31 ++------- .../database/polycule/BioListViewModel.kt | 11 ++-- .../database/polycule/PolyculeDatabase.kt | 20 ++++-- .../polycule/PolyculeDatabaseManager.kt | 2 - .../ophelia/database/polycule/entity/Bio.kt | 2 + .../com/menagerie/ophelia/ui/theme/Color.kt | 5 +- .../com/menagerie/ophelia/ui/theme/Theme.kt | 1 - .../ophelia/view/biographies/BioCard.kt | 65 +++++++++++++++++++ .../ophelia/view/biographies/BioCardList.kt | 65 +++++++++++++++++++ app/src/main/res/drawable/bg_splash.xml | 2 +- app/src/main/res/drawable/bg_splash_12.xml | 2 +- 11 files changed, 164 insertions(+), 42 deletions(-) create mode 100644 app/src/main/java/com/menagerie/ophelia/view/biographies/BioCard.kt create mode 100644 app/src/main/java/com/menagerie/ophelia/view/biographies/BioCardList.kt diff --git a/app/src/main/java/com/menagerie/ophelia/MainActivity.kt b/app/src/main/java/com/menagerie/ophelia/MainActivity.kt index 08daf3c..db30ac0 100644 --- a/app/src/main/java/com/menagerie/ophelia/MainActivity.kt +++ b/app/src/main/java/com/menagerie/ophelia/MainActivity.kt @@ -26,9 +26,11 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import com.menagerie.ophelia.database.polycule.BioListViewModel import com.menagerie.ophelia.database.polycule.PolyculeApplication +import com.menagerie.ophelia.database.polycule.PolyculeDatabaseManager import com.menagerie.ophelia.database.polycule.PolyculeRepository import com.menagerie.ophelia.database.polycule.entity.Bio import com.menagerie.ophelia.ui.theme.OpheliaTheme +import com.menagerie.ophelia.view.biographies.BioCardList class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -40,7 +42,8 @@ class MainActivity : ComponentActivity() { color = MaterialTheme.colorScheme.background ) { val repository = (application as PolyculeApplication).repository - Greeting("Android", repository) + PolyculeDatabaseManager.polyculeRepository = repository + Greeting("Android") } } } @@ -48,25 +51,12 @@ class MainActivity : ComponentActivity() { } @Composable -fun Greeting(name: String, repository: PolyculeRepository, modifier: Modifier = Modifier) { - Log.d("Tawni", "Test") +fun Greeting(name: String, modifier: Modifier = Modifier) { val mBioListViewModel: BioListViewModel = viewModel( - factory = BioListViewModel.BioListViewModelFactory(repository) + factory = BioListViewModel.BioListViewModelFactory() ) - - val items = mBioListViewModel.allBios.observeAsState(listOf()).value - - - - Column( - modifier = Modifier.padding(16.dp) - ) { - Text(text = "FUCKING FINAALLLLLLYY") - Spacer(modifier = Modifier.padding(16.dp)) - BioList(list = items, mBioListViewModel = mBioListViewModel) - Spacer(modifier = Modifier.padding(16.dp)) - } + BioCardList(bioList = items) } @OptIn(ExperimentalMaterial3Api::class) @@ -76,12 +66,5 @@ fun BioList( mBioListViewModel: BioListViewModel ) { Log.d("Test" ,"${list.size}") - LazyColumn() { - items(list) {bio -> - ListItem( - headlineText = {Text(text = bio.name)} - ) - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/menagerie/ophelia/database/polycule/BioListViewModel.kt b/app/src/main/java/com/menagerie/ophelia/database/polycule/BioListViewModel.kt index b538ead..b555993 100644 --- a/app/src/main/java/com/menagerie/ophelia/database/polycule/BioListViewModel.kt +++ b/app/src/main/java/com/menagerie/ophelia/database/polycule/BioListViewModel.kt @@ -9,21 +9,20 @@ import com.menagerie.ophelia.database.polycule.entity.Bio import kotlinx.coroutines.launch -class BioListViewModel(private val repository: PolyculeRepository) : ViewModel() { +class BioListViewModel() : ViewModel() { - val allBios: LiveData> = repository.getAllBios().asLiveData() + val allBios: LiveData> = PolyculeDatabaseManager.polyculeRepository.getAllBios().asLiveData() fun insert(bio: Bio) = viewModelScope.launch { - repository.upsertBio(bio) + PolyculeDatabaseManager.polyculeRepository.upsertBio(bio) } - class BioListViewModelFactory( - private val repository: PolyculeRepository) : + class BioListViewModelFactory() : ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(BioListViewModel::class.java)) { @Suppress("UNCHECKED_CAST") - return BioListViewModel(repository) as T + return BioListViewModel() as T } throw IllegalArgumentException("Unknown ViewModel Class") } diff --git a/app/src/main/java/com/menagerie/ophelia/database/polycule/PolyculeDatabase.kt b/app/src/main/java/com/menagerie/ophelia/database/polycule/PolyculeDatabase.kt index 201b123..c10f261 100644 --- a/app/src/main/java/com/menagerie/ophelia/database/polycule/PolyculeDatabase.kt +++ b/app/src/main/java/com/menagerie/ophelia/database/polycule/PolyculeDatabase.kt @@ -5,6 +5,7 @@ import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase import androidx.sqlite.db.SupportSQLiteDatabase +import com.menagerie.ophelia.R import com.menagerie.ophelia.database.polycule.entity.Bio import com.menagerie.ophelia.database.polycule.entity.BioDao import kotlinx.coroutines.CoroutineScope @@ -62,13 +63,22 @@ abstract class PolyculeDatabase : RoomDatabase() { suspend fun populateDatabase(bioDao: BioDao) { var bio = Bio( - name = "Azea") + name = "Azea", + description = "", + pfpRes = R.drawable.ic_app_logo + ) bioDao.insert(bio) - bio = Bio( - name = "Darkwood Mill") + bio = Bio( + name = "Darkwood Mill", + description = "", + pfpRes = R.drawable.ic_app_logo + ) bioDao.insert(bio) - bio = Bio( - name = "Blizzard") + bio = Bio( + name = "Blizzard", + description = "", + pfpRes = R.drawable.ic_app_logo + ) bioDao.insert(bio) val count = bioDao.getAllAlphabetisedBios().count() } diff --git a/app/src/main/java/com/menagerie/ophelia/database/polycule/PolyculeDatabaseManager.kt b/app/src/main/java/com/menagerie/ophelia/database/polycule/PolyculeDatabaseManager.kt index 68119ac..240c224 100644 --- a/app/src/main/java/com/menagerie/ophelia/database/polycule/PolyculeDatabaseManager.kt +++ b/app/src/main/java/com/menagerie/ophelia/database/polycule/PolyculeDatabaseManager.kt @@ -1,8 +1,6 @@ package com.menagerie.ophelia.database.polycule import com.menagerie.ophelia.database.polycule.entity.Bio - -//Todo: Move repo access to manager to limit passing it around object PolyculeDatabaseManager { lateinit var polyculeRepository : PolyculeRepository diff --git a/app/src/main/java/com/menagerie/ophelia/database/polycule/entity/Bio.kt b/app/src/main/java/com/menagerie/ophelia/database/polycule/entity/Bio.kt index 796e2a3..4332937 100644 --- a/app/src/main/java/com/menagerie/ophelia/database/polycule/entity/Bio.kt +++ b/app/src/main/java/com/menagerie/ophelia/database/polycule/entity/Bio.kt @@ -10,4 +10,6 @@ import androidx.room.PrimaryKey data class Bio( @PrimaryKey @ColumnInfo(name = "name") val name: String, + @ColumnInfo(name = "description") val description: String, + @ColumnInfo(name = "pfpRes") val pfpRes: Int, ) \ No newline at end of file diff --git a/app/src/main/java/com/menagerie/ophelia/ui/theme/Color.kt b/app/src/main/java/com/menagerie/ophelia/ui/theme/Color.kt index 4362bf0..5936a2e 100644 --- a/app/src/main/java/com/menagerie/ophelia/ui/theme/Color.kt +++ b/app/src/main/java/com/menagerie/ophelia/ui/theme/Color.kt @@ -2,10 +2,11 @@ package com.menagerie.ophelia.ui.theme import androidx.compose.ui.graphics.Color -val Purple80 = Color(0xFFD0BCFF) +val Purple80 = Color(0xFFFF00FF) val PurpleGrey80 = Color(0xFFCCC2DC) val Pink80 = Color(0xFFEFB8C8) +val Transparent = Color(0x00000000) -val Purple40 = Color(0xFF6650a4) +val Purple40 = Color(0x0000FF22) val PurpleGrey40 = Color(0xFF625b71) val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/app/src/main/java/com/menagerie/ophelia/ui/theme/Theme.kt b/app/src/main/java/com/menagerie/ophelia/ui/theme/Theme.kt index 11df8bb..0501c80 100644 --- a/app/src/main/java/com/menagerie/ophelia/ui/theme/Theme.kt +++ b/app/src/main/java/com/menagerie/ophelia/ui/theme/Theme.kt @@ -57,7 +57,6 @@ fun OpheliaTheme( if (!view.isInEditMode) { SideEffect { val window = (view.context as Activity).window - window.statusBarColor = colorScheme.primary.toArgb() WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme } } diff --git a/app/src/main/java/com/menagerie/ophelia/view/biographies/BioCard.kt b/app/src/main/java/com/menagerie/ophelia/view/biographies/BioCard.kt new file mode 100644 index 0000000..64a2b69 --- /dev/null +++ b/app/src/main/java/com/menagerie/ophelia/view/biographies/BioCard.kt @@ -0,0 +1,65 @@ +package com.menagerie.ophelia.view.biographies + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.material3.Card +import androidx.compose.material3.CardColors +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +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 androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import com.menagerie.ophelia.R + +@Composable +fun BioCard(name: String, description: String, image: Int) { + Card( + modifier = Modifier + .padding(10.dp) + .fillMaxWidth() + .wrapContentHeight(), + shape = MaterialTheme.shapes.medium, + elevation = CardDefaults.cardElevation( + defaultElevation = 6.dp + ), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surface + ), + border = BorderStroke(1.dp, Color.Black), + ) { + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Image( + painter = painterResource(id = image), + contentDescription = null, + modifier = Modifier + .size(130.dp) + .padding(8.dp), + contentScale = ContentScale.Fit, + ) + Column(modifier = Modifier.padding(8.dp)) { + Text( + text = name, + style = MaterialTheme.typography.headlineSmall, + color = MaterialTheme.colorScheme.onSurface, + ) + Text( + text = description, + style = MaterialTheme.typography.bodyMedium + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/menagerie/ophelia/view/biographies/BioCardList.kt b/app/src/main/java/com/menagerie/ophelia/view/biographies/BioCardList.kt new file mode 100644 index 0000000..1dea699 --- /dev/null +++ b/app/src/main/java/com/menagerie/ophelia/view/biographies/BioCardList.kt @@ -0,0 +1,65 @@ +package com.menagerie.ophelia.view.biographies + +import android.annotation.SuppressLint +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import com.menagerie.ophelia.database.polycule.entity.Bio +import androidx.compose.ui.unit.dp +import com.menagerie.ophelia.R + +@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun BioCardList(bioList: List) { + + Scaffold ( + topBar = { + TopAppBar( + title = {Text(stringResource(id = R.string.app_name)) } + ) + } + ) { + innerPadding -> + Box(modifier = Modifier.padding(innerPadding)) { + LazyColumn( + modifier = Modifier.fillMaxWidth(), + contentPadding = PaddingValues(8.dp) + ) { + item { + Row( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight() + .padding(vertical = 25.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + "\uD83c\uDF3f The Menagerie", + style = MaterialTheme.typography.headlineLarge + ) + } + } + items(bioList) { bio -> + BioCard(bio.name, bio.description, bio.pfpRes) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_splash.xml b/app/src/main/res/drawable/bg_splash.xml index 3b23538..2bf4a4a 100644 --- a/app/src/main/res/drawable/bg_splash.xml +++ b/app/src/main/res/drawable/bg_splash.xml @@ -6,6 +6,6 @@ + android:src="@drawable/ic_app_logo"/> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_splash_12.xml b/app/src/main/res/drawable/bg_splash_12.xml index 9567ad8..ee68be4 100644 --- a/app/src/main/res/drawable/bg_splash_12.xml +++ b/app/src/main/res/drawable/bg_splash_12.xml @@ -8,6 +8,6 @@ \ No newline at end of file -- 2.47.2