compose updates + initial basic navigation
This commit is contained in:
parent
5dceea9797
commit
9dbb29c421
5 changed files with 75 additions and 26 deletions
|
@ -43,7 +43,7 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation"org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlin}"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.3.72"
|
||||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||||
implementation 'androidx.core:core-ktx:1.3.0'
|
implementation 'androidx.core:core-ktx:1.3.0'
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ dependencies {
|
||||||
implementation "androidx.ui:ui-graphics:${Versions.compose}"
|
implementation "androidx.ui:ui-graphics:${Versions.compose}"
|
||||||
implementation "androidx.ui:ui-livedata:${Versions.compose}"
|
implementation "androidx.ui:ui-livedata:${Versions.compose}"
|
||||||
|
|
||||||
implementation "dev.chrisbanes.accompanist:accompanist-coil:${Versions.coliVersion}"
|
implementation "dev.chrisbanes.accompanist:accompanist-coil:0.1.5"
|
||||||
|
|
||||||
implementation 'com.google.android.material:material:1.1.0'
|
implementation 'com.google.android.material:material:1.1.0'
|
||||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
||||||
|
|
|
@ -6,13 +6,11 @@ import androidx.compose.*
|
||||||
import androidx.ui.core.Alignment
|
import androidx.ui.core.Alignment
|
||||||
import androidx.ui.core.Modifier
|
import androidx.ui.core.Modifier
|
||||||
import androidx.ui.core.setContent
|
import androidx.ui.core.setContent
|
||||||
import androidx.ui.foundation.AdapterList
|
import androidx.ui.foundation.*
|
||||||
import androidx.ui.foundation.Text
|
|
||||||
import androidx.ui.graphics.Color
|
import androidx.ui.graphics.Color
|
||||||
import androidx.ui.layout.*
|
import androidx.ui.layout.*
|
||||||
import androidx.ui.livedata.observeAsState
|
import androidx.ui.livedata.observeAsState
|
||||||
import androidx.ui.material.MaterialTheme
|
import androidx.ui.material.*
|
||||||
import androidx.ui.material.TopAppBar
|
|
||||||
import androidx.ui.text.TextStyle
|
import androidx.ui.text.TextStyle
|
||||||
import androidx.ui.tooling.preview.Preview
|
import androidx.ui.tooling.preview.Preview
|
||||||
import androidx.ui.tooling.preview.PreviewParameter
|
import androidx.ui.tooling.preview.PreviewParameter
|
||||||
|
@ -39,21 +37,35 @@ class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun mainLayout(peopleState: State<List<Assignment>>) {
|
fun mainLayout(peopleState: State<List<Assignment>>) {
|
||||||
|
val scaffoldState = remember { ScaffoldState() }
|
||||||
MaterialTheme {
|
MaterialTheme {
|
||||||
Column {
|
MaterialTheme {
|
||||||
|
Scaffold(
|
||||||
|
scaffoldState = scaffoldState,
|
||||||
|
topAppBar = {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
title = {
|
title = {
|
||||||
Text("People In Space")
|
Text("People In Space")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
AdapterList(data = peopleState.value) { person ->
|
},
|
||||||
PersonView(person)
|
bodyContent = {
|
||||||
|
when (val screen = PeopleInSpaceNavigation.currentScreen) {
|
||||||
|
is Screen.Home -> PersonList(peopleState)
|
||||||
|
is Screen.PersonDetails -> PersonDetailsView(screen.person)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun PersonList(peopleState: State<List<Assignment>>) {
|
||||||
|
AdapterList(data = peopleState.value) { person ->
|
||||||
|
PersonView(person, itemClick = { navigateTo(Screen.PersonDetails(it)) })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val personImages = mapOf(
|
val personImages = mapOf(
|
||||||
"Chris Cassidy" to "https://www.nasa.gov/sites/default/files/styles/side_image/public/thumbnails/image/9368855148_f79942efb7_o.jpg?itok=-w5yoryN",
|
"Chris Cassidy" to "https://www.nasa.gov/sites/default/files/styles/side_image/public/thumbnails/image/9368855148_f79942efb7_o.jpg?itok=-w5yoryN",
|
||||||
|
@ -64,23 +76,38 @@ val personImages = mapOf(
|
||||||
)
|
)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun PersonView(person: Assignment) {
|
fun PersonView(person: Assignment, itemClick : (person : Assignment) -> Unit) {
|
||||||
Row(modifier = Modifier.padding(16.dp) + Modifier.fillMaxWidth(), verticalGravity = Alignment.CenterVertically) {
|
Row(
|
||||||
|
modifier = Modifier.padding(16.dp) + Modifier.fillMaxWidth()
|
||||||
|
+ Modifier.clickable(onClick = { itemClick(person) }),
|
||||||
|
verticalGravity = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
|
||||||
|
personImages[person.name]?.let { imageUrl ->
|
||||||
CoilImage(
|
CoilImage(
|
||||||
data = personImages[person.name]!!,
|
data = imageUrl,
|
||||||
modifier = Modifier.preferredSize(60.dp)
|
modifier = Modifier.preferredSize(60.dp)
|
||||||
)
|
)
|
||||||
|
} ?: Spacer(modifier = Modifier.preferredSize(60.dp))
|
||||||
|
|
||||||
|
|
||||||
Spacer(modifier = Modifier.preferredSize(12.dp))
|
Spacer(modifier = Modifier.preferredSize(12.dp))
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
Text(text = person.name, style = TextStyle(fontSize = 20.sp))
|
Text(text = person.name, style = TextStyle(fontSize = 20.sp))
|
||||||
Text(text = person.craft, style = TextStyle(color = Color.DarkGray, fontSize = 14.sp))
|
Text(
|
||||||
|
text = person.craft,
|
||||||
|
style = TextStyle(color = Color.DarkGray, fontSize = 14.sp)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun PersonDetailsView(person: Assignment) {
|
||||||
|
Text(person.name, style = TextStyle(fontSize = 20.sp))
|
||||||
|
}
|
||||||
|
|
||||||
class PersonProvider : CollectionPreviewParameterProvider<Assignment>(
|
class PersonProvider : CollectionPreviewParameterProvider<Assignment>(
|
||||||
listOf(
|
listOf(
|
||||||
Assignment("ISS", "Chris Cassidy"),
|
Assignment("ISS", "Chris Cassidy"),
|
||||||
|
@ -92,6 +119,6 @@ class PersonProvider : CollectionPreviewParameterProvider<Assignment>(
|
||||||
@Composable
|
@Composable
|
||||||
fun DefaultPreview(@PreviewParameter(PersonProvider::class) person: Assignment) {
|
fun DefaultPreview(@PreviewParameter(PersonProvider::class) person: Assignment) {
|
||||||
MaterialTheme {
|
MaterialTheme {
|
||||||
PersonView(person)
|
PersonView(person, itemClick = {})
|
||||||
}
|
}
|
||||||
}
|
}
|
22
app/src/main/java/com/surrus/peopleinspace/ui/Navigation.kt
Normal file
22
app/src/main/java/com/surrus/peopleinspace/ui/Navigation.kt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
package com.surrus.peopleinspace.ui
|
||||||
|
|
||||||
|
import androidx.compose.getValue
|
||||||
|
import androidx.compose.mutableStateOf
|
||||||
|
import androidx.compose.setValue
|
||||||
|
import com.surrus.common.remote.Assignment
|
||||||
|
|
||||||
|
sealed class Screen {
|
||||||
|
object Home : Screen()
|
||||||
|
data class PersonDetails(val person: Assignment) : Screen()
|
||||||
|
}
|
||||||
|
|
||||||
|
object PeopleInSpaceNavigation {
|
||||||
|
var currentScreen by mutableStateOf<Screen>(Screen.Home)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Temporary solution pending navigation support.
|
||||||
|
*/
|
||||||
|
fun navigateTo(destination: Screen) {
|
||||||
|
PeopleInSpaceNavigation.currentScreen = destination
|
||||||
|
}
|
|
@ -8,8 +8,8 @@ buildscript {
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath("com.android.tools.build:gradle:${Versions.androidBuildToolsVersion}")
|
classpath("com.android.tools.build:gradle:${Versions.androidBuildToolsVersion}")
|
||||||
classpath(kotlin("gradle-plugin", version = "${Versions.kotlin}"))
|
classpath(kotlin("gradle-plugin", version = Versions.kotlin))
|
||||||
classpath(kotlin("serialization", version = "${Versions.kotlin}"))
|
classpath(kotlin("serialization", version = Versions.kotlin))
|
||||||
classpath("com.squareup.sqldelight:gradle-plugin:${Versions.sqlDelight}")
|
classpath("com.squareup.sqldelight:gradle-plugin:${Versions.sqlDelight}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
object Versions {
|
object Versions {
|
||||||
const val androidBuildToolsVersion = "4.2.0-alpha01"
|
const val androidBuildToolsVersion = "4.2.0-alpha02"
|
||||||
|
|
||||||
const val kotlin = "1.3.72"
|
const val kotlin = "1.3.72"
|
||||||
const val kotlinCoroutines = "1.3.5-native-mt"
|
const val kotlinCoroutines = "1.3.5-native-mt"
|
||||||
|
@ -17,7 +17,7 @@ object Versions {
|
||||||
const val lifecycle = "2.2.0-alpha01"
|
const val lifecycle = "2.2.0-alpha01"
|
||||||
const val fragment = "1.1.0-alpha09"
|
const val fragment = "1.1.0-alpha09"
|
||||||
const val compose = "0.1.0-dev13"
|
const val compose = "0.1.0-dev13"
|
||||||
const val coliVersion = "0.1.5"
|
const val coilVersion = "0.1.5"
|
||||||
|
|
||||||
const val junit = "4.12"
|
const val junit = "4.12"
|
||||||
const val coreTesting = "2.0.0"
|
const val coreTesting = "2.0.0"
|
||||||
|
|
Loading…
Reference in a new issue