build: upgrade to Compose 1.0.0-alpha12

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2021-02-11 16:28:34 +05:30
parent 5fef8a4d51
commit 885c2a5865
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
9 changed files with 40 additions and 58 deletions

View file

@ -1,6 +1,7 @@
package dev.msfjarvis.lobsters.ui.main
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyListState
@ -15,9 +16,8 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.setContent
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.viewinterop.viewModel
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavHostController
import androidx.navigation.compose.KEY_ROUTE
import androidx.navigation.compose.NavHost
@ -32,7 +32,7 @@ import dev.msfjarvis.lobsters.ui.posts.HottestPosts
import dev.msfjarvis.lobsters.ui.posts.SavedPosts
import dev.msfjarvis.lobsters.ui.theme.LobstersTheme
import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncher
import dev.msfjarvis.lobsters.ui.urllauncher.AmbientUrlLauncher
import dev.msfjarvis.lobsters.ui.urllauncher.LocalUrlLauncher
import dev.msfjarvis.lobsters.ui.viewmodel.LobstersViewModel
import dev.msfjarvis.lobsters.util.IconResource
import kotlinx.coroutines.CoroutineScope
@ -46,7 +46,7 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Providers(AmbientUrlLauncher provides urlLauncher) {
Providers(LocalUrlLauncher provides urlLauncher) {
LobstersTheme {
LobstersApp()
}
@ -80,14 +80,14 @@ fun LobstersApp() {
listState = hottestPostsListState,
isPostSaved = viewModel::isPostSaved,
saveAction = viewModel::toggleSave,
modifier = Modifier.padding(bottom = innerPadding.bottom),
modifier = Modifier.padding(bottom = innerPadding.calculateBottomPadding()),
)
}
composable(Destination.Saved.route) {
SavedPosts(
posts = savedPosts,
saveAction = viewModel::toggleSave,
modifier = Modifier.padding(bottom = innerPadding.bottom),
modifier = Modifier.padding(bottom = innerPadding.calculateBottomPadding()),
)
}
}

View file

@ -12,7 +12,7 @@ import androidx.paging.LoadState
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.items
import dev.msfjarvis.lobsters.data.local.LobstersPost
import dev.msfjarvis.lobsters.ui.urllauncher.AmbientUrlLauncher
import dev.msfjarvis.lobsters.ui.urllauncher.LocalUrlLauncher
@Composable
fun HottestPosts(
@ -22,7 +22,7 @@ fun HottestPosts(
modifier: Modifier = Modifier,
saveAction: (LobstersPost) -> Unit,
) {
val urlLauncher = AmbientUrlLauncher.current
val urlLauncher = LocalUrlLauncher.current
if (posts.loadState.refresh == LoadState.Loading) {
EmptyList(saved = false)

View file

@ -1,10 +1,10 @@
package dev.msfjarvis.lobsters.ui.posts
import androidx.compose.animation.Crossfade
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.ConstraintLayout
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
@ -22,6 +22,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout
import coil.transform.CircleCropTransformation
import dev.chrisbanes.accompanist.coil.CoilImage
import dev.msfjarvis.lobsters.R
@ -59,6 +60,7 @@ val TEST_POST = LobstersPost(
listOf("openbsd", "linux", "containers", "hack the planet", "no thanks"),
)
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun LobstersItem(
post: LobstersPost,
@ -70,7 +72,7 @@ fun LobstersItem(
Surface(
modifier = Modifier
.fillMaxWidth()
.clickable(
.combinedClickable(
onClick = onClick,
onLongClick = onLongClick,
),
@ -135,7 +137,7 @@ fun LobstersItem(
centerVerticallyTo(parent)
}
) {
Crossfade(current = isSaved) {
Crossfade(targetState = isSaved) {
if (it) {
IconResource(
resourceId = R.drawable.ic_favorite_24px,

View file

@ -6,7 +6,7 @@ import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import dev.msfjarvis.lobsters.data.local.LobstersPost
import dev.msfjarvis.lobsters.ui.urllauncher.AmbientUrlLauncher
import dev.msfjarvis.lobsters.ui.urllauncher.LocalUrlLauncher
@Composable
fun SavedPosts(
@ -15,7 +15,7 @@ fun SavedPosts(
saveAction: (LobstersPost) -> Unit,
) {
val listState = rememberLazyListState()
val urlLauncher = AmbientUrlLauncher.current
val urlLauncher = LocalUrlLauncher.current
if (posts.isEmpty()) {
EmptyList(saved = true)

View file

@ -1,5 +1,5 @@
package dev.msfjarvis.lobsters.ui.urllauncher
import androidx.compose.runtime.staticAmbientOf
import androidx.compose.runtime.staticCompositionLocalOf
val AmbientUrlLauncher = staticAmbientOf<UrlLauncher> { error("Needs to be provided") }
val LocalUrlLauncher = staticCompositionLocalOf<UrlLauncher> { error("Needs to be provided") }

View file

@ -1,50 +1,25 @@
/*
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package dev.msfjarvis.lobsters.util
import androidx.annotation.DrawableRes
import androidx.compose.material.AmbientContentColor
import androidx.compose.material.Icon
import androidx.compose.material.LocalContentColor
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.DeferredResource
import androidx.compose.ui.res.loadVectorResource
import androidx.compose.ui.res.painterResource
@Composable
fun IconResource(
@DrawableRes resourceId: Int,
contentDescription: String,
modifier: Modifier = Modifier,
tint: Color = AmbientContentColor.current
tint: Color = LocalContentColor.current
) {
val deferredResource = loadVectorResource(resourceId)
deferredResource.onLoadRun { vector ->
Icon(
imageVector = vector,
modifier = modifier,
tint = tint,
contentDescription = contentDescription,
)
}
}
inline fun <T> DeferredResource<T>.onLoadRun(block: (T) -> Unit) {
val res = resource.resource
if (res != null) {
block(res)
}
val painter = painterResource(resourceId)
Icon(
painter = painter,
modifier = modifier,
tint = tint,
contentDescription = contentDescription,
)
}