Skip to content

Commit

Permalink
Merge pull request android#386 from JoseAlcerreca/jetchat_alpha12
Browse files Browse the repository at this point in the history
[Jetchat] Updates to alpha12
  • Loading branch information
JoseAlcerreca authored Feb 11, 2021
2 parents 93d354d + 283ff4e commit c69b73b
Show file tree
Hide file tree
Showing 17 changed files with 124 additions and 94 deletions.
7 changes: 7 additions & 0 deletions Jetchat/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,12 @@ dependencies {
implementation Libs.Kotlin.stdlib
implementation Libs.Coroutines.android


implementation Libs.AndroidX.Activity.activityCompose
implementation Libs.AndroidX.coreKtx
implementation Libs.AndroidX.appcompat
implementation Libs.AndroidX.Lifecycle.livedata
implementation Libs.AndroidX.Lifecycle.viewModelCompose
implementation Libs.AndroidX.Navigation.fragment
implementation Libs.AndroidX.Navigation.uiKtx
implementation Libs.material
Expand All @@ -116,4 +119,8 @@ dependencies {
androidTestImplementation Libs.AndroidX.Test.rules
androidTestImplementation Libs.AndroidX.Test.Ext.junit
androidTestImplementation Libs.AndroidX.Compose.uiTest

// FIXME: Temporary for alpha12
androidTestImplementation Libs.AndroidX.Activity.activityCompose

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.example.compose.jetchat

import androidx.activity.ComponentActivity
import androidx.compose.runtime.Providers
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.geometry.Offset
Expand All @@ -28,12 +29,12 @@ 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 com.example.compose.jetchat.conversation.AmbientBackPressedDispatcher
import com.example.compose.jetchat.conversation.ConversationContent
import com.example.compose.jetchat.conversation.ConversationTestTag
import com.example.compose.jetchat.conversation.LocalBackPressedDispatcher
import com.example.compose.jetchat.data.exampleUiState
import com.example.compose.jetchat.theme.JetchatTheme
import dev.chrisbanes.accompanist.insets.AmbientWindowInsets
import dev.chrisbanes.accompanist.insets.LocalWindowInsets
import dev.chrisbanes.accompanist.insets.WindowInsets
import kotlinx.coroutines.flow.MutableStateFlow
import org.junit.Before
Expand All @@ -46,7 +47,7 @@ import org.junit.Test
class ConversationTest {

@get:Rule
val composeTestRule = createAndroidComposeRule<NavActivity>()
val composeTestRule = createAndroidComposeRule<ComponentActivity>()

private val themeIsDark = MutableStateFlow(false)

Expand All @@ -59,8 +60,8 @@ class ConversationTest {
composeTestRule.setContent {
val onBackPressedDispatcher = composeTestRule.activity.onBackPressedDispatcher
Providers(
AmbientBackPressedDispatcher provides onBackPressedDispatcher,
AmbientWindowInsets provides windowInsets
LocalBackPressedDispatcher provides onBackPressedDispatcher,
LocalWindowInsets provides windowInsets
) {
JetchatTheme(isDarkTheme = themeIsDark.collectAsState(false).value) {
ConversationContent(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@ import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput
import androidx.test.espresso.Espresso
import com.example.compose.jetchat.conversation.AmbientBackPressedDispatcher
import com.example.compose.jetchat.conversation.ConversationContent
import com.example.compose.jetchat.conversation.KeyboardShownKey
import com.example.compose.jetchat.conversation.LocalBackPressedDispatcher
import com.example.compose.jetchat.data.exampleUiState
import com.example.compose.jetchat.theme.JetchatTheme
import dev.chrisbanes.accompanist.insets.AmbientWindowInsets
import dev.chrisbanes.accompanist.insets.LocalWindowInsets
import dev.chrisbanes.accompanist.insets.WindowInsets
import org.junit.Before
import org.junit.Ignore
Expand All @@ -65,8 +65,8 @@ class UserInputTest {
val onBackPressedDispatcher = composeTestRule.activity.onBackPressedDispatcher
composeTestRule.setContent {
Providers(
AmbientBackPressedDispatcher provides onBackPressedDispatcher,
AmbientWindowInsets provides windowInsets,
LocalBackPressedDispatcher provides onBackPressedDispatcher,
LocalWindowInsets provides windowInsets,
) {
JetchatTheme {
ConversationContent(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,25 @@
package com.example.compose.jetchat

import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.Providers
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.platform.setContent
import androidx.compose.runtime.remember
import androidx.compose.ui.node.Ref
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.platform.compositionContext
import androidx.compose.ui.platform.findViewTreeCompositionContext
import androidx.compose.ui.viewinterop.AndroidViewBinding
import androidx.core.os.bundleOf
import androidx.core.view.WindowCompat
import androidx.navigation.findNavController
import androidx.viewbinding.ViewBinding
import com.example.compose.jetchat.components.JetchatScaffold
import com.example.compose.jetchat.conversation.AmbientBackPressedDispatcher
import com.example.compose.jetchat.conversation.BackPressHandler
import com.example.compose.jetchat.conversation.LocalBackPressedDispatcher
import com.example.compose.jetchat.databinding.ContentMainBinding
import dev.chrisbanes.accompanist.insets.ProvideWindowInsets

Expand All @@ -50,7 +56,7 @@ class NavActivity : AppCompatActivity() {
// Provide WindowInsets to our content. We don't want to consume them, so that
// they keep being pass down the view hierarchy (since we're using fragments).
ProvideWindowInsets(consumeWindowInsets = false) {
Providers(AmbientBackPressedDispatcher provides this.onBackPressedDispatcher) {
Providers(LocalBackPressedDispatcher provides this.onBackPressedDispatcher) {
val scaffoldState = rememberScaffoldState()

val openDrawerEvent = viewModel.drawerShouldBeOpened.observeAsState()
Expand Down Expand Up @@ -82,8 +88,23 @@ class NavActivity : AppCompatActivity() {
scaffoldState.drawerState.close()
}
) {
// Workaround for b/178174718 and b/179181757
// Inflate the XML layout using View Binding:
AndroidViewBinding(ContentMainBinding::inflate)
val bindingRef = remember { Ref<ViewBinding>() }
val currentView = LocalView.current

AndroidViewBinding({ inflater, parent, attachToParent ->
if (bindingRef.value == null) {
val binding: ViewBinding =
ContentMainBinding.inflate(inflater, parent, attachToParent)
bindingRef.value = binding
binding.root.compositionContext =
currentView.findViewTreeCompositionContext()
}
bindingRef.value as ViewBinding
})
// End of workaround for b/178174718
// AndroidViewBinding(ContentMainBinding::inflate)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ data class BaselineHeightModifier(
val firstBaseline = textPlaceable[FirstBaseline]
val lastBaseline = textPlaceable[LastBaseline]

val height = heightFromBaseline.toIntPx() + lastBaseline - firstBaseline
val height = heightFromBaseline.roundToPx() + lastBaseline - firstBaseline
return layout(constraints.maxWidth, height) {
val topY = heightFromBaseline.toIntPx() - firstBaseline
val topY = heightFromBaseline.roundToPx() - firstBaseline
textPlaceable.place(0, topY)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ import androidx.compose.material.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.compose.jetchat.R
Expand Down Expand Up @@ -64,7 +64,7 @@ fun JetchatAppBar(
title = { Row { title() } }, // https://issuetracker.google.com/168793068
navigationIcon = {
Image(
imageVector = vectorResource(id = R.drawable.ic_jetchat),
painter = painterResource(id = R.drawable.ic_jetchat),
contentDescription = stringResource(id = R.string.back),
modifier = Modifier
.clickable(onClick = onNavIconPressed)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ import androidx.compose.foundation.layout.preferredHeight
import androidx.compose.foundation.layout.preferredSize
import androidx.compose.foundation.layout.preferredWidth
import androidx.compose.foundation.shape.CircleShape
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.LocalContentAlpha
import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
Expand All @@ -44,8 +44,7 @@ import androidx.compose.ui.Alignment.Companion.CenterVertically
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.imageResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.compose.jetchat.R
Expand Down Expand Up @@ -75,20 +74,20 @@ fun ColumnScope.JetchatDrawer(onProfileClicked: (String) -> Unit, onChatClicked:
private fun DrawerHeader() {
Row(modifier = Modifier.padding(16.dp), verticalAlignment = CenterVertically) {
Image(
vectorResource(id = R.drawable.ic_jetchat),
painter = painterResource(id = R.drawable.ic_jetchat),
contentDescription = null,
modifier = Modifier.preferredSize(24.dp)
)
Image(
vectorResource(id = R.drawable.jetchat_logo),
painter = painterResource(id = R.drawable.jetchat_logo),
contentDescription = null,
modifier = Modifier.padding(start = 8.dp)
)
}
}
@Composable
private fun DrawerItemHeader(text: String) {
Providers(AmbientContentAlpha provides ContentAlpha.medium) {
Providers(LocalContentAlpha provides ContentAlpha.medium) {
Text(text, style = MaterialTheme.typography.caption, modifier = Modifier.padding(16.dp))
}
}
Expand Down Expand Up @@ -116,16 +115,16 @@ private fun ChatItem(text: String, selected: Boolean, onChatClicked: () -> Unit)
MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.medium)
}
Icon(
vectorResource(id = R.drawable.ic_jetchat),
painter = painterResource(id = R.drawable.ic_jetchat),
tint = iconTint,
modifier = Modifier.padding(8.dp),
contentDescription = null
)
Providers(AmbientContentAlpha provides ContentAlpha.medium) {
Providers(LocalContentAlpha provides ContentAlpha.medium) {
Text(
text,
style = MaterialTheme.typography.body2,
color = if (selected) MaterialTheme.colors.primary else AmbientContentColor.current,
color = if (selected) MaterialTheme.colors.primary else LocalContentColor.current,
modifier = Modifier.padding(8.dp)
)
}
Expand All @@ -143,11 +142,11 @@ private fun ProfileItem(text: String, @DrawableRes profilePic: Int?, onProfileCl
.clickable(onClick = onProfileClicked),
verticalAlignment = CenterVertically
) {
Providers(AmbientContentAlpha provides ContentAlpha.medium) {
Providers(LocalContentAlpha provides ContentAlpha.medium) {
val widthPaddingModifier = Modifier.preferredWidth(24.dp).padding(8.dp)
if (profilePic != null) {
Image(
imageResource(id = profilePic),
painter = painterResource(id = profilePic),
modifier = widthPaddingModifier.then(Modifier.clip(CircleShape)),
contentScale = ContentScale.Crop,
contentDescription = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@ package com.example.compose.jetchat.conversation

import androidx.activity.OnBackPressedCallback
import androidx.activity.OnBackPressedDispatcher
import androidx.compose.runtime.Ambient
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocal
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.runtime.staticAmbientOf
import androidx.compose.runtime.staticCompositionLocalOf

/**
* This [Composable] can be used with a [AmbientBackPressedDispatcher] to intercept a back press.
* This [Composable] can be used with a [LocalBackPressedDispatcher] to intercept a back press.
*
* @param onBackPressed (Event) What to do when back is intercepted
*
Expand All @@ -46,7 +46,7 @@ fun BackPressHandler(onBackPressed: () -> Unit) {
}
}

val backDispatcher = AmbientBackPressedDispatcher.current
val backDispatcher = LocalBackPressedDispatcher.current

// Whenever there's a new dispatcher set up the callback
DisposableEffect(backDispatcher) {
Expand All @@ -59,13 +59,13 @@ fun BackPressHandler(onBackPressed: () -> Unit) {
}

/**
* This [Ambient] is used to provide an [OnBackPressedDispatcher]:
* This [CompositionLocal] is used to provide an [OnBackPressedDispatcher]:
*
* ```
* Providers(AmbientBackPressedDispatcher provides requireActivity().onBackPressedDispatcher) { }
* Providers(LocalBackPressedDispatcher provides requireActivity().onBackPressedDispatcher) { }
* ```
*
* and setting up the callbacks with [BackPressHandler].
*/
val AmbientBackPressedDispatcher =
staticAmbientOf<OnBackPressedDispatcher> { error("No Back Dispatcher provided") }
val LocalBackPressedDispatcher =
staticCompositionLocalOf<OnBackPressedDispatcher> { error("No Back Dispatcher provided") }
Loading

0 comments on commit c69b73b

Please sign in to comment.