--- a/app/build.gradle.kts Fri Jul 08 18:33:26 2022 -0400
+++ b/app/build.gradle.kts Fri Jul 08 18:55:34 2022 -0400
@@ -40,7 +40,7 @@
id("dagger.hilt.android.plugin")
}
-val composeVersion = "1.1.1"
+val composeVersion = "1.2.0-rc03"
android {
val compileSdkInt: Int by rootProject.extra
@@ -88,7 +88,7 @@
}
composeOptions {
- kotlinCompilerExtensionVersion = composeVersion
+ kotlinCompilerExtensionVersion = "1.2.0"
}
flavorDimensions += "distribution"
--- a/app/src/main/java/com/geekorum/ttrss/articles_list/ArticleCardsList.kt Fri Jul 08 18:33:26 2022 -0400
+++ b/app/src/main/java/com/geekorum/ttrss/articles_list/ArticleCardsList.kt Fri Jul 08 18:55:34 2022 -0400
@@ -273,7 +273,6 @@
}
}
-@OptIn(ExperimentalMaterialApi::class)
@Composable
private fun ArticleCardList() {
val articles = Array(25) {
--- a/app/src/main/java/com/geekorum/ttrss/articles_list/ArticlesListFragment.kt Fri Jul 08 18:33:26 2022 -0400
+++ b/app/src/main/java/com/geekorum/ttrss/articles_list/ArticlesListFragment.kt Fri Jul 08 18:55:34 2022 -0400
@@ -28,10 +28,13 @@
import android.view.ViewGroup
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.Surface
+import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
+import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.ViewCompositionStrategy
+import androidx.compose.ui.platform.rememberNestedScrollInteropConnection
import androidx.core.app.ShareCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
@@ -66,6 +69,7 @@
}
}
+ @OptIn(ExperimentalComposeUiApi::class)
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@@ -78,7 +82,9 @@
val appBarHeightDp = with(LocalDensity.current) {
activityViewModel.appBarHeight.toDp()
}
- Surface(Modifier.fillMaxSize()) {
+
+ val nestedScrollInterop = rememberNestedScrollInteropConnection()
+ Surface(Modifier.fillMaxSize().nestedScroll(nestedScrollInterop)) {
ArticleCardList(
viewModel = articlesViewModel,
onCardClick = activityViewModel::displayArticle,
--- a/app/src/main/java/com/geekorum/ttrss/articles_list/FabPresenter.kt Fri Jul 08 18:33:26 2022 -0400
+++ b/app/src/main/java/com/geekorum/ttrss/articles_list/FabPresenter.kt Fri Jul 08 18:55:34 2022 -0400
@@ -20,8 +20,10 @@
*/
package com.geekorum.ttrss.articles_list
+import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.navigation.NavController
import androidx.navigation.dynamicfeatures.DynamicGraphNavigator
+import com.geekorum.geekdroid.views.behaviors.ScrollAwareFABBehavior
import com.geekorum.ttrss.R
import com.google.android.material.floatingactionbutton.FloatingActionButton
@@ -33,6 +35,9 @@
private val navController: NavController
){
+ val fabBehavior: ScrollAwareFABBehavior? =
+ (fab.layoutParams as? CoordinatorLayout.LayoutParams)?.behavior as? ScrollAwareFABBehavior
+
init {
setup()
}
@@ -41,14 +46,21 @@
navController.addOnDestinationChangedListener { controller, destination, _ ->
val progressDestinationId = (controller.graph as? DynamicGraphNavigator.DynamicNavGraph)?.progressDestination ?: 0
when (destination.id) {
- progressDestinationId -> {
+ progressDestinationId,
+ R.id.articlesSearchFragment -> {
+ setFabBehavior(null)
fab.hide()
}
- R.id.articlesSearchFragment -> {
- //TODO hide fab. but fab has scrollaware behavior that get it shown back when scrolling
+ else -> {
+ setFabBehavior(fabBehavior)
+ fab.show()
}
- else -> fab.show()
}
}
}
+
+ private fun setFabBehavior(behavior: ScrollAwareFABBehavior?) {
+ (fab.layoutParams as? CoordinatorLayout.LayoutParams)?.behavior = behavior
+ }
+
}
--- a/app/src/main/java/com/geekorum/ttrss/articles_list/magazine/MagazineFragment.kt Fri Jul 08 18:33:26 2022 -0400
+++ b/app/src/main/java/com/geekorum/ttrss/articles_list/magazine/MagazineFragment.kt Fri Jul 08 18:55:34 2022 -0400
@@ -30,6 +30,7 @@
import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.animation.fadeIn
import androidx.compose.animation.slideInVertically
+import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn
@@ -38,10 +39,13 @@
import androidx.compose.runtime.*
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
+import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
+import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.ViewCompositionStrategy
+import androidx.compose.ui.platform.rememberNestedScrollInteropConnection
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.core.app.ShareCompat
@@ -68,6 +72,7 @@
private val activityViewModel: ActivityViewModel by activityViewModels()
private val magazineViewModel: MagazineViewModel by viewModels()
+ @OptIn(ExperimentalComposeUiApi::class)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
@@ -77,7 +82,9 @@
val appBarHeightDp = with(LocalDensity.current) {
activityViewModel.appBarHeight.toDp()
}
- Surface(Modifier.fillMaxSize()) {
+
+ val nestedScrollInterop = rememberNestedScrollInteropConnection()
+ Surface(Modifier.fillMaxSize().nestedScroll(nestedScrollInterop)) {
ArticlesMagazine(
viewModel = magazineViewModel,
onCardClick = activityViewModel::displayArticle,
@@ -120,6 +127,7 @@
}
+@OptIn(ExperimentalFoundationApi::class)
@Composable
private fun ArticlesMagazine(
viewModel: MagazineViewModel,
@@ -189,7 +197,9 @@
}
AnimatedVisibility(visibilityState,
- enter = fadeIn() + slideInVertically { it / 3 }) {
+ enter = fadeIn() + slideInVertically { it / 3 },
+ modifier = Modifier.animateItemPlacement()
+ ) {
if (articleWithFeed != null) {
ArticleCard(
articleWithFeed = articleWithFeed,
@@ -217,8 +227,6 @@
val feedNameOrAuthor = feed.displayTitle.takeIf { it.isNotBlank() } ?: feed.title
ArticleCard(
-// TODO add this on beta03
-// modifier = Modifier.animateItemPlacement(),
title = article.title,
flavorImageUrl = article.flavorImageUri,
excerpt = article.contentExcerpt,
--- a/build.gradle.kts Fri Jul 08 18:33:26 2022 -0400
+++ b/build.gradle.kts Fri Jul 08 18:55:34 2022 -0400
@@ -74,7 +74,7 @@
kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs = listOf(
- "-Xjvm-default=all", "-Xopt-in=kotlin.RequiresOptIn")
+ "-Xjvm-default=all", "-opt-in=kotlin.RequiresOptIn")
}
}
--- a/buildSrc/build.gradle.kts Fri Jul 08 18:33:26 2022 -0400
+++ b/buildSrc/build.gradle.kts Fri Jul 08 18:55:34 2022 -0400
@@ -35,7 +35,7 @@
implementation("com.github.triplet.gradle:play-publisher:3.7.0")
implementation("com.geekorum.gradle.avdl:flydroid:0.0.3")
// need to be added to work with compose https://issuetracker.google.com/issues/195342732
- implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10")
+ implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0")
// fix https://github.com/google/dagger/issues/3068
implementation("com.squareup:javapoet:1.13.0")
--- a/gradle.properties Fri Jul 08 18:33:26 2022 -0400
+++ b/gradle.properties Fri Jul 08 18:55:34 2022 -0400
@@ -18,7 +18,7 @@
kapt.include.compile.classpath=false
# plugin dependencies version
-kotlinVersion=1.6.10
+kotlinVersion=1.7.0
androidxNavigationVersion=2.3.5
crashlyticsVersion=2.5.2
googleServicesVersion=4.3.5