diff --git a/buildSrc/src/main/java/app/tivi/buildsrc/dependencies.kt b/buildSrc/src/main/java/app/tivi/buildsrc/dependencies.kt index baac7f434c..dffe1fdaa1 100644 --- a/buildSrc/src/main/java/app/tivi/buildsrc/dependencies.kt +++ b/buildSrc/src/main/java/app/tivi/buildsrc/dependencies.kt @@ -58,7 +58,7 @@ object Libs { } object Accompanist { - private const val version = "0.3.4.compose-6994167-SNAPSHOT" + private const val version = "0.3.4.compose-7001724-SNAPSHOT" const val coil = "dev.chrisbanes.accompanist:accompanist-coil:$version" const val insets = "dev.chrisbanes.accompanist:accompanist-insets:$version" } @@ -168,7 +168,7 @@ object Libs { } object Compose { - const val snapshot = "6994167" + const val snapshot = "7001724" const val version = "1.0.0-SNAPSHOT" @get:JvmStatic diff --git a/common-ui-compose/src/main/java/app/tivi/common/compose/TiviSetup.kt b/common-ui-compose/src/main/java/app/tivi/common/compose/TiviSetup.kt index cf7b533fb2..7749d7f62a 100644 --- a/common-ui-compose/src/main/java/app/tivi/common/compose/TiviSetup.kt +++ b/common-ui-compose/src/main/java/app/tivi/common/compose/TiviSetup.kt @@ -20,7 +20,6 @@ package app.tivi.common.compose import androidx.compose.runtime.Composable import com.google.android.material.composethemeadapter.MdcTheme -import dev.chrisbanes.accompanist.insets.ProvideWindowInsets /** * Just groups some common Compose content setup @@ -28,8 +27,6 @@ import dev.chrisbanes.accompanist.insets.ProvideWindowInsets @Composable inline fun TiviContentSetup(noinline content: @Composable () -> Unit) { MdcTheme { - ProvideWindowInsets { - content() - } + content() } } diff --git a/ui-account/src/main/java/app/tivi/account/AccountUiFragment.kt b/ui-account/src/main/java/app/tivi/account/AccountUiFragment.kt index d3f7997ee8..e4abd0daf0 100644 --- a/ui-account/src/main/java/app/tivi/account/AccountUiFragment.kt +++ b/ui-account/src/main/java/app/tivi/account/AccountUiFragment.kt @@ -35,6 +35,8 @@ import app.tivi.extensions.navigateToNavDestination import app.tivi.util.TiviDateFormatter import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.consumeAsFlow @@ -52,11 +54,18 @@ class AccountUiFragment : BottomSheetDialogFragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? = ComposeView(requireContext()).apply { + ): View = ComposeView(requireContext()).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT) + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { - Providers(AmbientTiviDateFormatter provides tiviDateFormatter) { + Providers( + AmbientTiviDateFormatter provides tiviDateFormatter, + AmbientWindowInsets provides windowInsets, + ) { TiviContentSetup { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { diff --git a/ui-discover/src/main/java/app/tivi/home/discover/DiscoverFragment.kt b/ui-discover/src/main/java/app/tivi/home/discover/DiscoverFragment.kt index 60a296ecf5..9e2048cd7f 100644 --- a/ui-discover/src/main/java/app/tivi/home/discover/DiscoverFragment.kt +++ b/ui-discover/src/main/java/app/tivi/home/discover/DiscoverFragment.kt @@ -34,6 +34,8 @@ import app.tivi.common.compose.AmbientTiviDateFormatter import app.tivi.common.compose.TiviContentSetup import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.consumeAsFlow @@ -55,10 +57,15 @@ class DiscoverFragment : Fragment() { ): View? = ComposeView(requireContext()).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { Providers( AmbientTiviDateFormatter provides tiviDateFormatter, - AmbientDiscoverTextCreator provides textCreator + AmbientDiscoverTextCreator provides textCreator, + AmbientWindowInsets provides windowInsets, ) { TiviContentSetup { val viewState by viewModel.liveData.observeAsState() diff --git a/ui-episodedetails/src/main/java/app/tivi/episodedetails/EpisodeDetailsFragment.kt b/ui-episodedetails/src/main/java/app/tivi/episodedetails/EpisodeDetailsFragment.kt index 0d2d7ce745..024e728217 100644 --- a/ui-episodedetails/src/main/java/app/tivi/episodedetails/EpisodeDetailsFragment.kt +++ b/ui-episodedetails/src/main/java/app/tivi/episodedetails/EpisodeDetailsFragment.kt @@ -34,6 +34,8 @@ import app.tivi.extensions.viewModelProviderFactoryOf import app.tivi.util.TiviDateFormatter import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.consumeAsFlow @@ -70,11 +72,18 @@ class EpisodeDetailsFragment : BottomSheetDialogFragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? = ComposeView(requireContext()).apply { + ): View = ComposeView(requireContext()).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { - Providers(AmbientTiviDateFormatter provides tiviDateFormatter) { + Providers( + AmbientTiviDateFormatter provides tiviDateFormatter, + AmbientWindowInsets provides windowInsets, + ) { TiviContentSetup { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { diff --git a/ui-followed/src/main/java/app/tivi/home/followed/FollowedFragment.kt b/ui-followed/src/main/java/app/tivi/home/followed/FollowedFragment.kt index 6fba351c0d..f686ed7b50 100644 --- a/ui-followed/src/main/java/app/tivi/home/followed/FollowedFragment.kt +++ b/ui-followed/src/main/java/app/tivi/home/followed/FollowedFragment.kt @@ -37,6 +37,8 @@ import app.tivi.common.compose.TiviContentSetup import app.tivi.home.HomeTextCreator import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.consumeAsFlow @@ -58,10 +60,15 @@ class FollowedFragment : Fragment() { ): View? = ComposeView(requireContext()).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { Providers( AmbientTiviDateFormatter provides tiviDateFormatter, AmbientHomeTextCreator provides homeTextCreator, + AmbientWindowInsets provides windowInsets, ) { TiviContentSetup { val viewState by viewModel.liveData.observeAsState() diff --git a/ui-popular/src/main/java/app/tivi/home/popular/PopularShowsFragment.kt b/ui-popular/src/main/java/app/tivi/home/popular/PopularShowsFragment.kt index 0cd0873995..e5549a8c80 100644 --- a/ui-popular/src/main/java/app/tivi/home/popular/PopularShowsFragment.kt +++ b/ui-popular/src/main/java/app/tivi/home/popular/PopularShowsFragment.kt @@ -35,6 +35,8 @@ import app.tivi.common.compose.paging.collectAsLazyPagingItems import app.tivi.home.HomeTextCreator import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.consumeAsFlow @@ -60,10 +62,15 @@ class PopularShowsFragment : Fragment() { // Just a small optimization to start the data fetch quicker. val pagedList = viewModel.pagedList + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { Providers( AmbientTiviDateFormatter provides tiviDateFormatter, AmbientHomeTextCreator provides homeTextCreator, + AmbientWindowInsets provides windowInsets, ) { TiviContentSetup { Popular( diff --git a/ui-recommended/src/main/java/app/tivi/home/recommended/RecommendedShowsFragment.kt b/ui-recommended/src/main/java/app/tivi/home/recommended/RecommendedShowsFragment.kt index 0650ad5332..222f1925be 100644 --- a/ui-recommended/src/main/java/app/tivi/home/recommended/RecommendedShowsFragment.kt +++ b/ui-recommended/src/main/java/app/tivi/home/recommended/RecommendedShowsFragment.kt @@ -35,6 +35,8 @@ import app.tivi.common.compose.paging.collectAsLazyPagingItems import app.tivi.home.HomeTextCreator import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.consumeAsFlow @@ -60,10 +62,15 @@ class RecommendedShowsFragment : Fragment() { // Just a small optimization to start the data fetch quicker. val pagedList = viewModel.pagedList + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { Providers( AmbientTiviDateFormatter provides tiviDateFormatter, AmbientHomeTextCreator provides homeTextCreator, + AmbientWindowInsets provides windowInsets, ) { TiviContentSetup { Recommended( diff --git a/ui-search/src/main/java/app/tivi/home/search/SearchFragment.kt b/ui-search/src/main/java/app/tivi/home/search/SearchFragment.kt index 4c2852156d..c817733d39 100644 --- a/ui-search/src/main/java/app/tivi/home/search/SearchFragment.kt +++ b/ui-search/src/main/java/app/tivi/home/search/SearchFragment.kt @@ -21,6 +21,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT +import androidx.compose.runtime.Providers import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.platform.ComposeView @@ -32,6 +33,8 @@ import androidx.navigation.fragment.findNavController import app.tivi.common.compose.LogCompositions import app.tivi.common.compose.TiviContentSetup import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel @AndroidEntryPoint @@ -61,13 +64,19 @@ internal class SearchFragment : Fragment() { ): View? = ComposeView(requireContext()).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { - TiviContentSetup { - val viewState by viewModel.liveData.observeAsState() - if (viewState != null) { - LogCompositions("ViewState observeAsState") - Search(viewState!!) { action -> - pendingActions.offer(action) + Providers(AmbientWindowInsets provides windowInsets) { + TiviContentSetup { + val viewState by viewModel.liveData.observeAsState() + if (viewState != null) { + LogCompositions("ViewState observeAsState") + Search(viewState!!) { action -> + pendingActions.offer(action) + } } } } diff --git a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt index f5183ad124..de179bd9c2 100644 --- a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt +++ b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt @@ -35,6 +35,8 @@ import app.tivi.common.compose.TiviContentSetup import app.tivi.extensions.viewModelProviderFactoryOf import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.consumeAsFlow @@ -69,8 +71,15 @@ class ShowDetailsFragment : Fragment() { ): View? = ComposeView(requireContext()).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { - Providers(AmbientShowDetailsTextCreator provides textCreator) { + Providers( + AmbientShowDetailsTextCreator provides textCreator, + AmbientWindowInsets provides windowInsets, + ) { TiviContentSetup { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { diff --git a/ui-trending/src/main/java/app/tivi/home/trending/TrendingShowsFragment.kt b/ui-trending/src/main/java/app/tivi/home/trending/TrendingShowsFragment.kt index 1b88462667..cd1a9ac8fa 100644 --- a/ui-trending/src/main/java/app/tivi/home/trending/TrendingShowsFragment.kt +++ b/ui-trending/src/main/java/app/tivi/home/trending/TrendingShowsFragment.kt @@ -35,6 +35,8 @@ import app.tivi.common.compose.paging.collectAsLazyPagingItems import app.tivi.home.HomeTextCreator import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.consumeAsFlow @@ -60,10 +62,15 @@ class TrendingShowsFragment : Fragment() { // Just a small optimization to start the data fetch quicker. val pagedList = viewModel.pagedList + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { Providers( AmbientTiviDateFormatter provides tiviDateFormatter, AmbientHomeTextCreator provides homeTextCreator, + AmbientWindowInsets provides windowInsets, ) { TiviContentSetup { Trending( diff --git a/ui-watched/src/main/java/app/tivi/home/watched/WatchedFragment.kt b/ui-watched/src/main/java/app/tivi/home/watched/WatchedFragment.kt index 051830fbce..206a78c2fc 100644 --- a/ui-watched/src/main/java/app/tivi/home/watched/WatchedFragment.kt +++ b/ui-watched/src/main/java/app/tivi/home/watched/WatchedFragment.kt @@ -37,6 +37,8 @@ import app.tivi.common.compose.TiviContentSetup import app.tivi.home.HomeTextCreator import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint +import dev.chrisbanes.accompanist.insets.AmbientWindowInsets +import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.consumeAsFlow @@ -58,10 +60,15 @@ class WatchedFragment : Fragment() { ): View? = ComposeView(requireContext()).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) + // We use ViewWindowInsetObserver rather than ProvideWindowInsets + // See: https://github.com/chrisbanes/accompanist/issues/155 + val windowInsets = ViewWindowInsetObserver(this).start() + setContent { Providers( AmbientTiviDateFormatter provides tiviDateFormatter, AmbientHomeTextCreator provides homeTextCreator, + AmbientWindowInsets provides windowInsets, ) { TiviContentSetup { val viewState by viewModel.liveData.observeAsState()