Cards #3

Merged
Azea_Avenbright merged 1 commit from azea/BiosToCards into ophelia_mainline 2023-10-18 16:36:08 -04:00
11 changed files with 164 additions and 42 deletions

View file

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

View file

@ -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<List<Bio>> = repository.getAllBios().asLiveData()
val allBios: LiveData<List<Bio>> = 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 <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(BioListViewModel::class.java)) {
@Suppress("UNCHECKED_CAST")
return BioListViewModel(repository) as T
return BioListViewModel() as T
}
throw IllegalArgumentException("Unknown ViewModel Class")
}

View file

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

View file

@ -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

View file

@ -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,
)

View file

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

View file

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

View file

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

View file

@ -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<Bio>) {
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)
}
}
}
}
}

View file

@ -6,6 +6,6 @@
<item>
<bitmap
android:gravity="center"
android:src="@drawable/ophelia_background"/>
android:src="@drawable/ic_app_logo"/>
</item>
</layer-list>

View file

@ -8,6 +8,6 @@
<item
android:width="140dp"
android:height="180dp"
android:drawable="@drawable/ophelia_background"
android:drawable="@drawable/ic_app_logo"
android:gravity="center" />
</layer-list>