mirror of https://github.com/tasks/tasks
Move composables to separate file
parent
e259762ab6
commit
84ff3a542c
@ -0,0 +1,9 @@
|
|||||||
|
package org.tasks.compose
|
||||||
|
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
|
||||||
|
object Constants {
|
||||||
|
const val ICON_ALPHA = 0.54f
|
||||||
|
val KEYLINE_FIRST = 16.dp
|
||||||
|
val HALF_KEYLINE = 8.dp
|
||||||
|
}
|
||||||
@ -0,0 +1,115 @@
|
|||||||
|
package org.tasks.compose
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.PaddingValues
|
||||||
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.size
|
||||||
|
import androidx.compose.material.Icon
|
||||||
|
import androidx.compose.material.IconButton
|
||||||
|
import androidx.compose.material.MaterialTheme
|
||||||
|
import androidx.compose.material.MaterialTheme.colors
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.material.darkColors
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.draw.alpha
|
||||||
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import org.tasks.R
|
||||||
|
import org.tasks.compose.Constants.HALF_KEYLINE
|
||||||
|
import org.tasks.compose.Constants.ICON_ALPHA
|
||||||
|
import org.tasks.compose.Constants.KEYLINE_FIRST
|
||||||
|
import org.tasks.data.Principal
|
||||||
|
import org.tasks.data.Principal.Companion.name
|
||||||
|
|
||||||
|
private val principals = listOf(
|
||||||
|
Principal().apply { displayName = "user1" },
|
||||||
|
Principal().apply { displayName = "user2" },
|
||||||
|
)
|
||||||
|
|
||||||
|
@Preview(showBackground = true, backgroundColor = 0xFFFFFF)
|
||||||
|
@Composable
|
||||||
|
private fun Owner() = MaterialTheme {
|
||||||
|
ListSettingsComposables.PrincipalList(principals) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview(showBackground = true, backgroundColor = 0x202124)
|
||||||
|
@Composable
|
||||||
|
private fun OwnerDark() = MaterialTheme(darkColors()) {
|
||||||
|
ListSettingsComposables.PrincipalList(principals) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview(showBackground = true, backgroundColor = 0xFFFFFF)
|
||||||
|
@Composable
|
||||||
|
private fun NotOwner() = MaterialTheme {
|
||||||
|
ListSettingsComposables.PrincipalList(principals, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
object ListSettingsComposables {
|
||||||
|
@Composable
|
||||||
|
fun PrincipalList(
|
||||||
|
principals: List<Principal>,
|
||||||
|
onRemove: ((Principal) -> Unit)?,
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.padding(16.dp)
|
||||||
|
.fillMaxWidth()
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
stringResource(R.string.list_members),
|
||||||
|
style = MaterialTheme.typography.h6,
|
||||||
|
color = colors.onBackground
|
||||||
|
)
|
||||||
|
Spacer(Modifier.height(HALF_KEYLINE))
|
||||||
|
principals.forEach {
|
||||||
|
PrincipalRow(it, onRemove)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun PrincipalRow(
|
||||||
|
principal: Principal,
|
||||||
|
onRemove: ((Principal) -> Unit)?,
|
||||||
|
) {
|
||||||
|
Row(modifier = Modifier
|
||||||
|
.padding(PaddingValues(0.dp, KEYLINE_FIRST))
|
||||||
|
.fillMaxWidth()) {
|
||||||
|
Icon(
|
||||||
|
painter = painterResource(R.drawable.ic_outline_perm_identity_24px),
|
||||||
|
contentDescription = null,
|
||||||
|
tint = colors.onBackground,
|
||||||
|
modifier = Modifier
|
||||||
|
.padding(end = KEYLINE_FIRST)
|
||||||
|
.alpha(ICON_ALPHA),
|
||||||
|
)
|
||||||
|
Text(
|
||||||
|
principal.name!!,
|
||||||
|
style = MaterialTheme.typography.body1,
|
||||||
|
color = colors.onBackground,
|
||||||
|
)
|
||||||
|
onRemove?.let {
|
||||||
|
Row(horizontalArrangement = Arrangement.End, modifier = Modifier.fillMaxWidth()) {
|
||||||
|
IconButton(
|
||||||
|
modifier = Modifier.then(Modifier.size(24.dp)),
|
||||||
|
onClick = { it(principal) }) {
|
||||||
|
Icon(
|
||||||
|
painter = painterResource(R.drawable.ic_outline_clear_24px),
|
||||||
|
contentDescription = null,
|
||||||
|
tint = colors.onBackground,
|
||||||
|
modifier = Modifier.alpha(ICON_ALPHA)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue