Cards #3
11 changed files with 164 additions and 42 deletions
|
@ -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)}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
)
|
|
@ -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)
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,6 +6,6 @@
|
|||
<item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@drawable/ophelia_background"/>
|
||||
android:src="@drawable/ic_app_logo"/>
|
||||
</item>
|
||||
</layer-list>
|
|
@ -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>
|
Loading…
Add table
Add a link
Reference in a new issue