diff --git a/Jetchat/app/build.gradle b/Jetchat/app/build.gradle index 94ea28d959..e29b6ea069 100644 --- a/Jetchat/app/build.gradle +++ b/Jetchat/app/build.gradle @@ -81,6 +81,11 @@ android { kotlinCompilerExtensionVersion Libs.AndroidX.Compose.version } + packagingOptions { + exclude "META-INF/licenses/**" + exclude "META-INF/AL2.0" + exclude "META-INF/LGPL2.1" + } } dependencies { diff --git a/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/ConversationTest.kt b/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/ConversationTest.kt index 65ff28d642..82e1510c86 100644 --- a/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/ConversationTest.kt +++ b/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/ConversationTest.kt @@ -20,16 +20,16 @@ import androidx.activity.ComponentActivity import androidx.compose.runtime.Providers import androidx.compose.runtime.collectAsState import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.center +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithLabel +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.performGesture +import androidx.compose.ui.test.swipe import androidx.compose.ui.unit.milliseconds -import androidx.ui.test.assertIsDisplayed -import androidx.ui.test.center -import androidx.ui.test.createAndroidComposeRule -import androidx.ui.test.onNodeWithLabel -import androidx.ui.test.onNodeWithTag -import androidx.ui.test.onNodeWithText -import androidx.ui.test.performClick -import androidx.ui.test.performGesture -import androidx.ui.test.swipe import com.example.compose.jetchat.conversation.BackPressedDispatcherAmbient import com.example.compose.jetchat.conversation.ConversationContent import com.example.compose.jetchat.conversation.ConversationTestTag diff --git a/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/NavigationTest.kt b/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/NavigationTest.kt index 76254051b3..4bff981445 100644 --- a/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/NavigationTest.kt +++ b/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/NavigationTest.kt @@ -19,12 +19,12 @@ package com.example.compose.jetchat import android.view.View import androidx.activity.ComponentActivity import androidx.compose.runtime.Providers +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithText import androidx.navigation.NavController import androidx.navigation.Navigation import androidx.test.espresso.Espresso -import androidx.ui.test.assertIsDisplayed -import androidx.ui.test.createAndroidComposeRule -import androidx.ui.test.onNodeWithText import com.example.compose.jetchat.conversation.BackPressedDispatcherAmbient import com.example.compose.jetchat.conversation.ConversationContent import com.example.compose.jetchat.data.exampleUiState diff --git a/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/UserInputTest.kt b/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/UserInputTest.kt index 505ae383ae..ffb8dc7ea1 100644 --- a/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/UserInputTest.kt +++ b/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/UserInputTest.kt @@ -18,20 +18,20 @@ package com.example.compose.jetchat import androidx.activity.ComponentActivity import androidx.compose.runtime.Providers +import androidx.compose.ui.test.SemanticsMatcher +import androidx.compose.ui.test.SemanticsNodeInteraction +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsEnabled +import androidx.compose.ui.test.assertIsNotEnabled +import androidx.compose.ui.test.hasAnyAncestor +import androidx.compose.ui.test.hasInputMethodsSupport +import androidx.compose.ui.test.hasLabel +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithLabel +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.performTextInput import androidx.test.espresso.Espresso -import androidx.ui.test.SemanticsMatcher -import androidx.ui.test.SemanticsNodeInteraction -import androidx.ui.test.assertIsDisplayed -import androidx.ui.test.assertIsEnabled -import androidx.ui.test.assertIsNotEnabled -import androidx.ui.test.createAndroidComposeRule -import androidx.ui.test.hasAnyAncestor -import androidx.ui.test.hasInputMethodsSupport -import androidx.ui.test.hasLabel -import androidx.ui.test.onNodeWithLabel -import androidx.ui.test.onNodeWithText -import androidx.ui.test.performClick -import androidx.ui.test.performTextInput import com.example.compose.jetchat.conversation.BackPressedDispatcherAmbient import com.example.compose.jetchat.conversation.ConversationContent import com.example.compose.jetchat.conversation.KeyboardShownKey diff --git a/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/Utils.kt b/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/Utils.kt index 6aaac6c9c0..9ae5ac39d1 100644 --- a/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/Utils.kt +++ b/Jetchat/app/src/androidTest/java/com/example/compose/jetchat/Utils.kt @@ -16,14 +16,12 @@ package com.example.compose.jetchat -import androidx.ui.test.ComposeTestRule -import androidx.ui.test.onRoot -import androidx.ui.test.printToLog +import androidx.compose.ui.test.junit4.ComposeTestRule +import androidx.compose.ui.test.onRoot +import androidx.compose.ui.test.printToLog /** * Used to debug the semantic tree. - * - * TODO: Replace with aosp/1355659 */ fun ComposeTestRule.dumpSemanticNodes() { this.onRoot().printToLog(tag = "JetchatLog") diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/UiExtras.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/UiExtras.kt index eab7464336..ff3ae21393 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/UiExtras.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/UiExtras.kt @@ -16,9 +16,9 @@ package com.example.compose.jetchat -import androidx.compose.foundation.Text import androidx.compose.material.AlertDialog import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text import androidx.compose.material.TextButton import androidx.compose.runtime.Composable diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/components/AnimatingFabContent.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/components/AnimatingFabContent.kt index a261b78912..2fe3abec88 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/components/AnimatingFabContent.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/components/AnimatingFabContent.kt @@ -25,9 +25,9 @@ import androidx.compose.animation.transition import androidx.compose.foundation.layout.Box import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import androidx.compose.ui.Layout import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawOpacity +import androidx.compose.ui.layout.Layout import androidx.compose.ui.util.lerp import kotlin.math.roundToInt diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/components/BaseLineHeightModifier.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/components/BaseLineHeightModifier.kt index 6f645df20b..e15486fc19 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/components/BaseLineHeightModifier.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/components/BaseLineHeightModifier.kt @@ -16,12 +16,13 @@ package com.example.compose.jetchat.components -import androidx.compose.foundation.text.FirstBaseline -import androidx.compose.foundation.text.LastBaseline -import androidx.compose.ui.LayoutModifier -import androidx.compose.ui.Measurable -import androidx.compose.ui.MeasureScope import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.FirstBaseline +import androidx.compose.ui.layout.LastBaseline +import androidx.compose.ui.layout.LayoutModifier +import androidx.compose.ui.layout.Measurable +import androidx.compose.ui.layout.MeasureResult +import androidx.compose.ui.layout.MeasureScope import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.Dp @@ -45,7 +46,7 @@ data class BaselineHeightModifier( override fun MeasureScope.measure( measurable: Measurable, constraints: Constraints - ): MeasureScope.MeasureResult { + ): MeasureResult { val textPlaceable = measurable.measure(constraints) val firstBaseline = textPlaceable[FirstBaseline] diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/components/JetchatAppBar.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/components/JetchatAppBar.kt index 9e5157e6b2..13c61488ca 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/components/JetchatAppBar.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/components/JetchatAppBar.kt @@ -17,7 +17,6 @@ package com.example.compose.jetchat.components import androidx.compose.foundation.Image -import androidx.compose.foundation.Text import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -25,6 +24,7 @@ import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.padding import androidx.compose.material.Divider import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text import androidx.compose.material.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt index 60ef17c249..0bad5e2ebd 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt @@ -20,7 +20,6 @@ import androidx.compose.foundation.ClickableText import androidx.compose.foundation.Image import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollableColumn -import androidx.compose.foundation.Text import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box @@ -32,29 +31,32 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.paddingFrom import androidx.compose.foundation.layout.preferredHeight import androidx.compose.foundation.layout.preferredSize import androidx.compose.foundation.layout.preferredWidth -import androidx.compose.foundation.layout.relativePaddingFrom import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.text.LastBaseline -import androidx.compose.material.AmbientEmphasisLevels +import androidx.compose.material.AmbientContentAlpha +import androidx.compose.material.AmbientContentColor +import androidx.compose.material.ContentAlpha import androidx.compose.material.Divider import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme -import androidx.compose.material.ProvideEmphasis import androidx.compose.material.Surface +import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Search import androidx.compose.runtime.Composable +import androidx.compose.runtime.Providers import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.layout.LastBaseline import androidx.compose.ui.platform.DensityAmbient import androidx.compose.ui.platform.UriHandlerAmbient import androidx.compose.ui.platform.testTag @@ -137,8 +139,7 @@ fun ChannelNameBar( style = MaterialTheme.typography.subtitle1 ) // Number of members - // TODO: Multiple emphasis layers - https://issuetracker.google.com/159017896 - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.medium) { + Providers(AmbientContentAlpha provides ContentAlpha.medium) { Text( text = stringResource(R.string.members, channelMembers), style = MaterialTheme.typography.caption, @@ -148,7 +149,7 @@ fun ChannelNameBar( } }, actions = { - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.medium) { + Providers(AmbientContentAlpha provides ContentAlpha.medium) { // Search icon Icon( asset = Icons.Outlined.Search, @@ -311,17 +312,15 @@ fun AuthorAndTextMessage( private fun AuthorNameTimestamp(msg: Message) { // Combine author and timestamp for a11y. Row(modifier = Modifier.semantics(mergeAllDescendants = true) {}) { - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.high) { - Text( - text = msg.author, - style = MaterialTheme.typography.subtitle1, - modifier = Modifier - .alignBy(LastBaseline) - .relativePaddingFrom(LastBaseline, after = 8.dp) // Space to 1st bubble - ) - } + Text( + text = msg.author, + style = MaterialTheme.typography.subtitle1, + modifier = Modifier + .alignBy(LastBaseline) + .paddingFrom(LastBaseline, after = 8.dp) // Space to 1st bubble + ) Spacer(modifier = Modifier.preferredWidth(8.dp)) - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.medium) { + Providers(AmbientContentAlpha provides ContentAlpha.medium) { Text( text = msg.timestamp, style = MaterialTheme.typography.caption, @@ -338,7 +337,7 @@ private val LastChatBubbleShape = RoundedCornerShape(0.dp, 8.dp, 8.dp, 8.dp) fun DayHeader(dayString: String) { Row(modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp).preferredHeight(16.dp)) { DayHeaderLine() - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.medium) { + Providers(AmbientContentAlpha provides ContentAlpha.medium) { Text( text = dayString, modifier = Modifier.padding(horizontal = 16.dp), @@ -373,11 +372,9 @@ fun ChatItemBubble( val bubbleShape = if (lastMessageByAuthor) LastChatBubbleShape else ChatBubbleShape Column { Surface(color = backgroundBubbleColor, shape = bubbleShape) { - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.high) { - ClickableMessage( - message = message - ) - } + ClickableMessage( + message = message + ) } message.image?.let { @@ -401,7 +398,7 @@ fun ClickableMessage(message: Message) { ClickableText( text = styledMessage, - style = MaterialTheme.typography.body1, + style = MaterialTheme.typography.body1.copy(color = AmbientContentColor.current), modifier = Modifier.padding(8.dp), onClick = { styledMessage diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/JumpToBottom.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/JumpToBottom.kt index 9e124c196a..668469f4d1 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/JumpToBottom.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/JumpToBottom.kt @@ -19,12 +19,12 @@ package com.example.compose.jetchat.conversation import androidx.compose.animation.DpPropKey import androidx.compose.animation.core.transitionDefinition import androidx.compose.animation.transition -import androidx.compose.foundation.Text import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.preferredHeight import androidx.compose.material.ExtendedFloatingActionButton import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowDownward import androidx.compose.runtime.Composable diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt index ad8646ff7a..7739c6e2ab 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt @@ -19,14 +19,10 @@ package com.example.compose.jetchat.conversation import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.fadeIn -import androidx.compose.foundation.AmbientContentColor -import androidx.compose.foundation.AmbientTextStyle -import androidx.compose.foundation.BaseTextField import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollableRow -import androidx.compose.foundation.Text import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -36,22 +32,26 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.paddingFrom import androidx.compose.foundation.layout.preferredHeight import androidx.compose.foundation.layout.preferredSize -import androidx.compose.foundation.layout.relativePaddingFrom import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.text.FirstBaseline -import androidx.compose.material.AmbientEmphasisLevels +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.AmbientContentAlpha +import androidx.compose.material.AmbientContentColor +import androidx.compose.material.AmbientTextStyle import androidx.compose.material.Button import androidx.compose.material.ButtonConstants +import androidx.compose.material.ContentAlpha import androidx.compose.material.Divider import androidx.compose.material.Icon import androidx.compose.material.IconButton import androidx.compose.material.MaterialTheme -import androidx.compose.material.ProvideEmphasis import androidx.compose.material.Surface +import androidx.compose.material.Text import androidx.compose.material.TextButton import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.AlternateEmail @@ -60,6 +60,7 @@ import androidx.compose.material.icons.outlined.InsertPhoto import androidx.compose.material.icons.outlined.Mood import androidx.compose.material.icons.outlined.Place import androidx.compose.runtime.Composable +import androidx.compose.runtime.Providers import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.onCommit @@ -76,6 +77,7 @@ import androidx.compose.ui.focusObserver import androidx.compose.ui.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.VectorAsset +import androidx.compose.ui.layout.FirstBaseline import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.SemanticsPropertyKey import androidx.compose.ui.semantics.SemanticsPropertyReceiver @@ -225,16 +227,14 @@ fun FunctionalityNotAvailablePanel() { verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ) { - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.high) { - Text( - text = stringResource(id = R.string.not_available), - style = MaterialTheme.typography.subtitle1 - ) - } - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.medium) { + Text( + text = stringResource(id = R.string.not_available), + style = MaterialTheme.typography.subtitle1 + ) + Providers(AmbientContentAlpha provides ContentAlpha.medium) { Text( text = stringResource(id = R.string.not_available_subtitle), - modifier = Modifier.relativePaddingFrom(FirstBaseline, before = 32.dp), + modifier = Modifier.paddingFrom(FirstBaseline, before = 32.dp), style = MaterialTheme.typography.body2 ) } @@ -308,7 +308,7 @@ private fun UserInputSelector( Spacer(modifier = Modifier.weight(1f)) val disabledContentColor = - AmbientEmphasisLevels.current.disabled.applyEmphasis(MaterialTheme.colors.onSurface) + MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.disabled) val buttonColors = ButtonConstants.defaultButtonColors( disabledBackgroundColor = MaterialTheme.colors.surface, @@ -346,7 +346,7 @@ private fun InputSelectorButton( onClick = onClick, modifier = Modifier.semantics { accessibilityLabel = description } ) { - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.medium) { + Providers(AmbientContentAlpha provides ContentAlpha.medium) { val tint = if (selected) MaterialTheme.colors.primary else AmbientContentColor.current Icon( icon, @@ -397,38 +397,44 @@ private fun UserInputText( }, horizontalArrangement = Arrangement.End ) { - Box( - modifier = Modifier.preferredHeight(48.dp).weight(1f).align(Alignment.Bottom) - ) { - var lastFocusState by remember { mutableStateOf(FocusState.Inactive) } - BaseTextField( - value = textFieldValue, - onValueChange = { onTextChanged(it) }, - modifier = Modifier - .fillMaxWidth() - .padding(start = 16.dp) - .align(Alignment.CenterStart) - .focusObserver { state -> - if (lastFocusState != state) { - onTextFieldFocused(state == FocusState.Active) - } - lastFocusState = state - }, - keyboardType = keyboardType, - imeAction = ImeAction.Send, - onTextInputStarted = { controller -> keyboardController = controller } - ) - - val disableContentColor = - AmbientEmphasisLevels.current.disabled.applyEmphasis(MaterialTheme.colors.onSurface) - if (textFieldValue.text.isEmpty() && !focusState) { - Text( + Surface { + Box( + modifier = Modifier.preferredHeight(48.dp).weight(1f).align(Alignment.Bottom) + ) { + var lastFocusState by remember { mutableStateOf(FocusState.Inactive) } + BasicTextField( + value = textFieldValue, + onValueChange = { onTextChanged(it) }, modifier = Modifier + .fillMaxWidth() + .padding(start = 16.dp) .align(Alignment.CenterStart) - .padding(start = 16.dp), - text = stringResource(id = R.string.textfield_hint), - style = MaterialTheme.typography.body1.copy(color = disableContentColor) + .focusObserver { state -> + if (lastFocusState != state) { + onTextFieldFocused(state == FocusState.Active) + } + lastFocusState = state + }, + keyboardOptions = KeyboardOptions( + keyboardType = keyboardType, + imeAction = ImeAction.Send + ), + maxLines = 1, + cursorColor = AmbientContentColor.current, + textStyle = AmbientTextStyle.current.copy(color = AmbientContentColor.current) ) + + val disableContentColor = + MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.disabled) + if (textFieldValue.text.isEmpty() && !focusState) { + Text( + modifier = Modifier + .align(Alignment.CenterStart) + .padding(start = 16.dp), + text = stringResource(id = R.string.textfield_hint), + style = MaterialTheme.typography.body1.copy(color = disableContentColor) + ) + } } } } diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt index 67c65bf2d1..a546eeff89 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt @@ -19,8 +19,6 @@ package com.example.compose.jetchat.profile import androidx.compose.foundation.Image import androidx.compose.foundation.ScrollState import androidx.compose.foundation.ScrollableColumn -import androidx.compose.foundation.Text -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -33,24 +31,25 @@ import androidx.compose.foundation.layout.preferredHeight import androidx.compose.foundation.layout.preferredHeightIn import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.rememberScrollState -import androidx.compose.material.AmbientEmphasisLevels +import androidx.compose.material.AmbientContentAlpha +import androidx.compose.material.ContentAlpha import androidx.compose.material.Divider import androidx.compose.material.FloatingActionButton import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme -import androidx.compose.material.ProvideEmphasis import androidx.compose.material.Surface +import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Chat import androidx.compose.material.icons.outlined.Create import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.runtime.Composable +import androidx.compose.runtime.Providers import androidx.compose.runtime.key import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.WithConstraints -import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.layout.WithConstraints import androidx.compose.ui.platform.DensityAmbient import androidx.compose.ui.res.imageResource import androidx.compose.ui.res.stringResource @@ -61,7 +60,7 @@ import com.example.compose.jetchat.R import com.example.compose.jetchat.components.AnimatingFabContent import com.example.compose.jetchat.components.JetchatAppBar import com.example.compose.jetchat.components.baselineHeight -import com.example.compose.jetchat.data.colleagueProfile +import com.example.compose.jetchat.data.meProfile import com.example.compose.jetchat.theme.JetchatTheme @Composable @@ -75,7 +74,7 @@ fun ProfileScreen(userData: ProfileScreenState, onNavIconPressed: () -> Unit = { onNavIconPressed = onNavIconPressed, title = { }, actions = { - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.medium) { + Providers(AmbientContentAlpha provides ContentAlpha.medium) { // More icon Icon( asset = Icons.Outlined.MoreVert, @@ -152,18 +151,16 @@ private fun NameAndPosition( @Composable private fun Name(userData: ProfileScreenState, modifier: Modifier = Modifier) { - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.high) { - Text( - text = userData.name, - modifier = modifier, - style = MaterialTheme.typography.h5 - ) - } + Text( + text = userData.name, + modifier = modifier, + style = MaterialTheme.typography.h5 + ) } @Composable private fun Position(userData: ProfileScreenState, modifier: Modifier = Modifier) { - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.medium) { + Providers(AmbientContentAlpha provides ContentAlpha.medium) { Text( text = userData.position, modifier = modifier, @@ -182,24 +179,17 @@ private fun ProfileHeader( data.photo?.let { val asset = imageResource(id = it) - val ratioAsset = asset.width / asset.height.toFloat() + val ratioAsset = (asset.width / asset.height.toFloat()).coerceAtLeast(1f) - Box( + // TODO: Fix landscape + Image( modifier = Modifier - .fillMaxWidth() - // Allow for landscape and portrait ratios - .preferredHeightIn(max = 320.dp) .aspectRatio(ratioAsset) - .background(Color.LightGray) - ) { - Image( - modifier = Modifier - .fillMaxSize() - .padding(top = offsetDp), - asset = asset, - contentScale = ContentScale.Crop - ) - } + .preferredHeightIn(max = 320.dp) + .padding(top = offsetDp), + asset = asset, + contentScale = ContentScale.FillWidth + ) } } @@ -207,7 +197,7 @@ private fun ProfileHeader( fun ProfileProperty(label: String, value: String, isLink: Boolean = false) { Column(modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 16.dp)) { Divider() - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.medium) { + Providers(AmbientContentAlpha provides ContentAlpha.medium) { Text( text = label, modifier = Modifier.baselineHeight(24.dp), @@ -219,13 +209,11 @@ fun ProfileProperty(label: String, value: String, isLink: Boolean = false) { } else { MaterialTheme.typography.body1 } - ProvideEmphasis(emphasis = AmbientEmphasisLevels.current.high) { - Text( - text = value, - modifier = Modifier.baselineHeight(24.dp), - style = style - ) - } + Text( + text = value, + modifier = Modifier.baselineHeight(24.dp), + style = style + ) } } @@ -270,7 +258,7 @@ fun ProfileFab(extended: Boolean, userIsMe: Boolean, modifier: Modifier = Modifi @Composable fun ConvPreview480MeDefault() { JetchatTheme { - ProfileScreen(colleagueProfile) + ProfileScreen(meProfile) } } diff --git a/Jetchat/buildSrc/src/main/java/com/example/compose/jetchat/buildsrc/dependencies.kt b/Jetchat/buildSrc/src/main/java/com/example/compose/jetchat/buildsrc/dependencies.kt index 6f71928609..eab5280c2d 100644 --- a/Jetchat/buildSrc/src/main/java/com/example/compose/jetchat/buildsrc/dependencies.kt +++ b/Jetchat/buildSrc/src/main/java/com/example/compose/jetchat/buildsrc/dependencies.kt @@ -21,7 +21,7 @@ object Versions { } object Libs { - const val androidGradlePlugin = "com.android.tools.build:gradle:4.2.0-alpha15" + const val androidGradlePlugin = "com.android.tools.build:gradle:4.2.0-alpha16" const val jdkDesugar = "com.android.tools:desugar_jdk_libs:1.0.9" const val junit = "junit:junit:4.13" @@ -47,8 +47,8 @@ object Libs { const val coreKtx = "androidx.core:core-ktx:1.5.0-alpha01" object Compose { - const val snapshot = "" - const val version = "1.0.0-alpha06" + const val snapshot = "6964664" + const val version = "1.0.0-SNAPSHOT" const val foundation = "androidx.compose.foundation:foundation:$version" const val layout = "androidx.compose.foundation:foundation-layout:$version"