diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index d6efc561..41f6387c 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -9,15 +9,6 @@
-
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 23704740..35ffc9d8 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -26,5 +26,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index d165467b..5423777d 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -28,9 +28,12 @@ dependencies {
implementation(project(":database"))
implementation(Dependencies.AndroidX.appCompat)
implementation(Dependencies.AndroidX.browser)
+ implementation(Dependencies.AndroidX.Compose.activity)
implementation(Dependencies.AndroidX.Compose.compiler)
+ implementation(Dependencies.AndroidX.Compose.constraintLayout)
implementation(Dependencies.AndroidX.Compose.foundation)
implementation(Dependencies.AndroidX.Compose.foundationLayout)
+ implementation(Dependencies.AndroidX.Compose.lifecycleViewModel)
implementation(Dependencies.AndroidX.Compose.material)
implementation(Dependencies.AndroidX.Compose.navigation)
implementation(Dependencies.AndroidX.Compose.paging)
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt
index 414f8dde..9119ff01 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt
@@ -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()),
)
}
}
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/HottestPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/HottestPosts.kt
index 054b32f0..b5f16348 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/HottestPosts.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/HottestPosts.kt
@@ -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)
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt
index 04aade2e..9537ce38 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt
@@ -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,
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt
index 7ad26843..d52999d3 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt
@@ -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)
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/AmbientUrlLauncher.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/AmbientUrlLauncher.kt
index 3fbd2480..41a9a1e1 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/AmbientUrlLauncher.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/AmbientUrlLauncher.kt
@@ -1,5 +1,5 @@
package dev.msfjarvis.lobsters.ui.urllauncher
-import androidx.compose.runtime.staticAmbientOf
+import androidx.compose.runtime.staticCompositionLocalOf
-val AmbientUrlLauncher = staticAmbientOf { error("Needs to be provided") }
+val LocalUrlLauncher = staticCompositionLocalOf { error("Needs to be provided") }
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/util/DeferredIcon.kt b/app/src/main/java/dev/msfjarvis/lobsters/util/DeferredIcon.kt
index 887c18f7..c80d44eb 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/util/DeferredIcon.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/util/DeferredIcon.kt
@@ -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 DeferredResource.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,
+ )
}
diff --git a/buildSrc/src/main/java/BaseProjectConfig.kt b/buildSrc/src/main/java/BaseProjectConfig.kt
index b4c70599..09c8729d 100644
--- a/buildSrc/src/main/java/BaseProjectConfig.kt
+++ b/buildSrc/src/main/java/BaseProjectConfig.kt
@@ -37,8 +37,15 @@ internal fun Project.configureForRootProject() {
internal fun Project.configureForAllProjects() {
repositories {
google()
- jcenter()
- maven { setUrl("https://jitpack.io") }
+ mavenCentral()
+ jcenter() {
+ content {
+ // Indirect dependencies
+ // https://youtrack.jetbrains.com/issue/IDEA-261387
+ includeModule("org.jetbrains.trove4j", "trove4j")
+ includeGroup("org.jetbrains.kotlinx")
+ }
+ }
}
tasks.withType {
kotlinOptions {
diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt
index 0f770489..d1cded46 100644
--- a/buildSrc/src/main/java/Dependencies.kt
+++ b/buildSrc/src/main/java/Dependencies.kt
@@ -9,13 +9,13 @@ object Plugins {
const val androidGradlePlugin = "com.android.tools.build:gradle:7.0.0-alpha05"
const val androidGradlePlugin_lintModel = "com.android.tools.lint:lint-model:30.0.0-alpha05"
const val daggerGradlePlugin = "com.google.dagger:hilt-android-gradle-plugin:${DAGGER_HILT_VERSION}"
- const val kotlinGradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21-2"
+ const val kotlinGradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30"
const val jsemver = "com.github.zafarkhaja:java-semver:0.9.0"
const val sqldelightGradlePlugin = "com.squareup.sqldelight:gradle-plugin:1.4.4"
}
object Dependencies {
- const val COMPOSE_VERSION = "1.0.0-alpha11"
+ const val COMPOSE_VERSION = "1.0.0-alpha12"
object Kotlin {
@@ -35,12 +35,15 @@ object Dependencies {
object Compose {
+ const val activity = "androidx.activity:activity-compose:1.3.0-alpha02"
const val compiler = "androidx.compose.compiler:compiler:$COMPOSE_VERSION"
+ const val constraintLayout = "androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha02"
const val foundation = "androidx.compose.foundation:foundation:$COMPOSE_VERSION"
const val foundationLayout = "androidx.compose.foundation:foundation-layout:$COMPOSE_VERSION"
+ const val lifecycleViewModel = "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01"
const val material = "androidx.compose.material:material:$COMPOSE_VERSION"
- const val navigation = "androidx.navigation:navigation-compose:1.0.0-alpha06"
- const val paging = "androidx.paging:paging-compose:1.0.0-alpha06"
+ const val navigation = "androidx.navigation:navigation-compose:1.0.0-alpha07"
+ const val paging = "androidx.paging:paging-compose:1.0.0-alpha07"
const val runtime = "androidx.compose.runtime:runtime:$COMPOSE_VERSION"
const val ui = "androidx.compose.ui:ui:$COMPOSE_VERSION"
const val uiUnit = "androidx.compose.ui:ui-unit:$COMPOSE_VERSION"
@@ -54,7 +57,7 @@ object Dependencies {
object Lifecycle {
- private const val version = "2.3.0-rc01"
+ private const val version = "2.3.0"
const val runtimeKtx = "androidx.lifecycle:lifecycle-runtime-ktx:$version"
const val viewmodelKtx = "androidx.lifecycle:lifecycle-viewmodel-ktx:$version"
}
@@ -62,7 +65,7 @@ object Dependencies {
object ThirdParty {
- const val accompanist = "dev.chrisbanes.accompanist:accompanist-coil:0.5.0"
+ const val accompanist = "dev.chrisbanes.accompanist:accompanist-coil:0.5.1"
object Moshi {
diff --git a/buildSrc/src/main/java/KotlinCompilerArgs.kt b/buildSrc/src/main/java/KotlinCompilerArgs.kt
index 8e680061..f80413ae 100644
--- a/buildSrc/src/main/java/KotlinCompilerArgs.kt
+++ b/buildSrc/src/main/java/KotlinCompilerArgs.kt
@@ -4,7 +4,6 @@
*/
internal val additionalCompilerArgs = listOf(
- "-Xallow-jvm-ir-dependencies",
"-Xopt-in=kotlin.RequiresOptIn",
"-Xskip-prerelease-check"
)