From 7343c6eb004421d287a205a1d3149053017e929a Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 12 Mar 2026 22:51:32 +0000 Subject: [PATCH 1/9] [Jetchat] Update Compose BOM to 2026.03.00 and activity-compose to 1.13.0 This update bumps core Compose libraries to 1.10.5 and Material 3 to 1.4.0. Applied necessary code changes to resolve deprecations and warnings introduced by these versions: - Replaced deprecated 'Divider' with 'HorizontalDivider' as per Material 3 1.2.0. Ref: https://developer.android.com/jetpack/androidx/releases/compose-material3#1.2.0 - Replaced deprecated 'rememberRichTooltipPositionProvider' with the new 'rememberTooltipPositionProvider' API introduced in Material 3 1.4.0-alpha03. Ref: https://developer.android.com/jetpack/androidx/releases/compose-material3#1.4.0-alpha03 - Removed redundant 'else' in UserInput.kt 'when' block. - Fixed annotation target warning in ProfileViewModel.kt using @param:DrawableRes. Verified with a clean build and successful execution of instrumented tests. --- .../com/example/compose/jetchat/conversation/Conversation.kt | 4 ++-- .../com/example/compose/jetchat/conversation/RecordButton.kt | 5 ++++- .../com/example/compose/jetchat/conversation/UserInput.kt | 4 +--- .../main/java/com/example/compose/jetchat/profile/Profile.kt | 4 ++-- .../com/example/compose/jetchat/profile/ProfileViewModel.kt | 2 +- Jetchat/gradle/libs.versions.toml | 4 ++-- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt index 8f5290750..bdde9b8ee 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt @@ -48,7 +48,7 @@ import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.ClickableText -import androidx.compose.material3.Divider +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor @@ -461,7 +461,7 @@ fun DayHeader(dayString: String) { @Composable private fun RowScope.DayHeaderLine() { - Divider( + HorizontalDivider( modifier = Modifier .weight(1f) .align(Alignment.CenterVertically), diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/RecordButton.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/RecordButton.kt index 12538ef4f..bc9f1f513 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/RecordButton.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/RecordButton.kt @@ -36,6 +36,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.RichTooltip import androidx.compose.material3.Text +import androidx.compose.material3.TooltipAnchorPosition import androidx.compose.material3.TooltipBox import androidx.compose.material3.TooltipDefaults import androidx.compose.material3.TooltipState @@ -103,7 +104,9 @@ fun RecordButton( val scope = rememberCoroutineScope() val tooltipState = remember { TooltipState() } TooltipBox( - positionProvider = TooltipDefaults.rememberRichTooltipPositionProvider(), + positionProvider = TooltipDefaults.rememberTooltipPositionProvider( + positioning = TooltipAnchorPosition.Above + ), tooltip = { RichTooltip { Text(stringResource(R.string.touch_and_hold_to_record)) diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt index cc5df57bd..d650efeb0 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt @@ -233,9 +233,7 @@ private fun SelectorExpanded(currentSelector: InputSelector, onCloseRequested: ( InputSelector.PHONE -> FunctionalityNotAvailablePanel() - else -> { - throw NotImplementedError() - } + InputSelector.NONE -> Unit } } } diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt index 35b9b1af7..ca726a856 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt @@ -33,7 +33,7 @@ import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.Divider +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.Icon @@ -201,7 +201,7 @@ private fun ProfileHeader(scrollState: ScrollState, data: ProfileScreenState, co @Composable fun ProfileProperty(label: String, value: String, isLink: Boolean = false) { Column(modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 16.dp)) { - Divider() + HorizontalDivider() Text( text = label, modifier = Modifier.baselineHeight(24.dp), diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/ProfileViewModel.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/ProfileViewModel.kt index bb196bbe8..9b2d02809 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/ProfileViewModel.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/ProfileViewModel.kt @@ -47,7 +47,7 @@ class ProfileViewModel : ViewModel() { @Immutable data class ProfileScreenState( val userId: String, - @DrawableRes val photo: Int?, + @param:DrawableRes val photo: Int?, val name: String, val status: String, val displayName: String, diff --git a/Jetchat/gradle/libs.versions.toml b/Jetchat/gradle/libs.versions.toml index 61bf6410c..07831faa3 100644 --- a/Jetchat/gradle/libs.versions.toml +++ b/Jetchat/gradle/libs.versions.toml @@ -6,9 +6,9 @@ accompanist = "0.37.3" android-material3 = "1.14.0-alpha09" androidGradlePlugin = "9.0.1" -androidx-activity-compose = "1.12.4" +androidx-activity-compose = "1.13.0" androidx-appcompat = "1.7.1" -androidx-compose-bom = "2026.02.00" +androidx-compose-bom = "2026.03.00" androidx-constraintlayout = "1.1.1" androidx-core-splashscreen = "1.2.0" androidx-corektx = "1.17.0" From 8d84ebd567f6bf912cb1717af996a44822f433c7 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 12 Mar 2026 23:01:32 +0000 Subject: [PATCH 2/9] [JetLagged] Update Compose BOM to 2026.03.00 This update bumps core Compose libraries (animation, foundation, runtime, ui, material) from 1.10.3 to 1.10.5. No breaking changes or new APIs requiring code modifications were identified in the release notes for this version range. Verified with a clean build, unit tests, and instrumented tests on an emulator. --- JetLagged/gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JetLagged/gradle/libs.versions.toml b/JetLagged/gradle/libs.versions.toml index 7dffdd485..cdeb62005 100644 --- a/JetLagged/gradle/libs.versions.toml +++ b/JetLagged/gradle/libs.versions.toml @@ -4,7 +4,7 @@ android-material3 = "1.14.0-alpha09" androidGradlePlugin = "9.0.1" androidx-activity-compose = "1.12.4" androidx-appcompat = "1.7.1" -androidx-compose-bom = "2026.02.00" +androidx-compose-bom = "2026.03.00" androidx-constraintlayout = "1.1.1" androidx-core-splashscreen = "1.2.0" androidx-corektx = "1.17.0" From fe453d40707e0d61669588be594206ebe4cd780b Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 12 Mar 2026 23:07:30 +0000 Subject: [PATCH 3/9] Update Compose BOM to 2026.03.00 for remaining projects Bumps core Compose libraries (animation, foundation, runtime, ui, material) to 1.10.5 for JetNews, Jetcaster, Jetsnack, and Reply. - Verified with clean builds and unit tests across all projects. - Verified with instrumented tests for JetNews, Jetsnack, and Reply. - Jetcaster instrumented test failure is a pre-existing packaging issue with the rome library, unrelated to the Compose update. --- JetNews/gradle/libs.versions.toml | 2 +- Jetcaster/gradle/libs.versions.toml | 2 +- Jetsnack/gradle/libs.versions.toml | 2 +- Reply/gradle/libs.versions.toml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/JetNews/gradle/libs.versions.toml b/JetNews/gradle/libs.versions.toml index 61bf6410c..0d0773483 100644 --- a/JetNews/gradle/libs.versions.toml +++ b/JetNews/gradle/libs.versions.toml @@ -8,7 +8,7 @@ android-material3 = "1.14.0-alpha09" androidGradlePlugin = "9.0.1" androidx-activity-compose = "1.12.4" androidx-appcompat = "1.7.1" -androidx-compose-bom = "2026.02.00" +androidx-compose-bom = "2026.03.00" androidx-constraintlayout = "1.1.1" androidx-core-splashscreen = "1.2.0" androidx-corektx = "1.17.0" diff --git a/Jetcaster/gradle/libs.versions.toml b/Jetcaster/gradle/libs.versions.toml index 4a02af961..1f38ddb3c 100644 --- a/Jetcaster/gradle/libs.versions.toml +++ b/Jetcaster/gradle/libs.versions.toml @@ -8,7 +8,7 @@ android-material3 = "1.13.0-alpha13" androidGradlePlugin = "8.10.1" androidx-activity-compose = "1.10.1" androidx-appcompat = "1.7.1" -androidx-compose-bom = "2025.09.00" +androidx-compose-bom = "2026.03.00" androidx-constraintlayout = "1.1.1" androidx-core-splashscreen = "1.0.1" androidx-corektx = "1.16.0" diff --git a/Jetsnack/gradle/libs.versions.toml b/Jetsnack/gradle/libs.versions.toml index c51b64c94..34f33df16 100644 --- a/Jetsnack/gradle/libs.versions.toml +++ b/Jetsnack/gradle/libs.versions.toml @@ -4,7 +4,7 @@ android-material3 = "1.14.0-alpha09" androidGradlePlugin = "9.0.1" androidx-activity-compose = "1.12.4" androidx-appcompat = "1.7.1" -androidx-compose-bom = "2026.02.00" +androidx-compose-bom = "2026.03.00" androidx-core-splashscreen = "1.2.0" androidx-corektx = "1.17.0" androidx-glance = "1.2.0-rc01" diff --git a/Reply/gradle/libs.versions.toml b/Reply/gradle/libs.versions.toml index 61bf6410c..0d0773483 100644 --- a/Reply/gradle/libs.versions.toml +++ b/Reply/gradle/libs.versions.toml @@ -8,7 +8,7 @@ android-material3 = "1.14.0-alpha09" androidGradlePlugin = "9.0.1" androidx-activity-compose = "1.12.4" androidx-appcompat = "1.7.1" -androidx-compose-bom = "2026.02.00" +androidx-compose-bom = "2026.03.00" androidx-constraintlayout = "1.1.1" androidx-core-splashscreen = "1.2.0" androidx-corektx = "1.17.0" From 7bd70479980cb1c5db29d585f150614119b03603 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 12 Mar 2026 23:26:20 +0000 Subject: [PATCH 4/9] Address Compose and Jetpack library deprecations across samples - JetLagged: Migrated to PrimaryScrollableTabRow. - JetNews: Migrated to PrimaryTabRow and PrimaryScrollableTabRow. - Jetsnack: Updated ColorScheme instantiation to include new 'fixed' container roles. - Reply: Replaced WindowWidthSizeClass with isWidthAtLeastBreakpoint, and removed deprecated statusBarColor setting. - Jetcaster: Updated hiltViewModel imports to new androidx.hilt.lifecycle.viewmodel.compose package. Migrated FocusProperties enter/exit to onEnter/onExit for TV. Resolved WindowSizeClass deprecations using isWidthAtLeastBreakpoint. Updated wear compileSdk to 36. --- .../jetlagged/sleep/JetLaggedHeaderTabs.kt | 8 +++--- JetLagged/gradle/libs.versions.toml | 2 +- .../jetnews/ui/interests/InterestsScreen.kt | 8 +++--- JetNews/gradle/libs.versions.toml | 2 +- Jetcaster/gradle/libs.versions.toml | 12 ++++----- .../com/example/jetcaster/ui/home/Home.kt | 25 ++++++------------- .../jetcaster/ui/player/PlayerScreen.kt | 5 ++-- .../example/jetcaster/util/WindowSizeClass.kt | 6 ++--- .../example/jetcaster/tv/ui/JetcasterApp.kt | 2 +- .../jetcaster/tv/ui/component/Catalog.kt | 4 +-- .../jetcaster/tv/ui/component/EpisodeRow.kt | 4 +-- .../tv/ui/discover/DiscoverScreen.kt | 4 +-- .../jetcaster/tv/ui/episode/EpisodeScreen.kt | 2 +- .../jetcaster/tv/ui/library/LibraryScreen.kt | 2 +- .../jetcaster/tv/ui/player/PlayerScreen.kt | 2 +- .../tv/ui/podcast/PodcastDetailsScreen.kt | 2 +- .../jetcaster/tv/ui/search/SearchScreen.kt | 2 +- Jetcaster/wear/build.gradle | 2 +- .../jetcaster/ui/episode/EpisodeScreen.kt | 2 +- .../latest_episodes/LatestEpisodesScreen.kt | 2 +- .../jetcaster/ui/library/LibraryScreen.kt | 2 +- .../jetcaster/ui/player/PlayerScreen.kt | 2 +- .../ui/podcast/PodcastDetailsScreen.kt | 2 +- .../jetcaster/ui/podcasts/PodcastsScreen.kt | 2 +- .../example/jetcaster/ui/queue/QueueScreen.kt | 2 +- .../com/example/jetsnack/ui/theme/Theme.kt | 12 +++++++++ Jetsnack/gradle/libs.versions.toml | 2 +- .../navigation/ReplyNavigationComponents.kt | 20 ++++++--------- .../java/com/example/reply/ui/theme/Theme.kt | 9 ------- Reply/gradle/libs.versions.toml | 2 +- 30 files changed, 69 insertions(+), 84 deletions(-) diff --git a/JetLagged/app/src/main/java/com/example/jetlagged/sleep/JetLaggedHeaderTabs.kt b/JetLagged/app/src/main/java/com/example/jetlagged/sleep/JetLaggedHeaderTabs.kt index b56e98252..d02f510b7 100644 --- a/JetLagged/app/src/main/java/com/example/jetlagged/sleep/JetLaggedHeaderTabs.kt +++ b/JetLagged/app/src/main/java/com/example/jetlagged/sleep/JetLaggedHeaderTabs.kt @@ -23,7 +23,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.ScrollableTabRow +import androidx.compose.material3.PrimaryScrollableTabRow import androidx.compose.material3.Tab import androidx.compose.material3.TabPosition import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset @@ -46,14 +46,14 @@ enum class SleepTab(val title: Int) { @Composable fun JetLaggedHeaderTabs(onTabSelected: (SleepTab) -> Unit, selectedTab: SleepTab, modifier: Modifier = Modifier) { - ScrollableTabRow( + PrimaryScrollableTabRow( modifier = modifier, edgePadding = 12.dp, selectedTabIndex = selectedTab.ordinal, - indicator = { tabPositions: List -> + indicator = { Box( Modifier - .tabIndicatorOffset(tabPositions[selectedTab.ordinal]) + .tabIndicatorOffset(selectedTab.ordinal, matchContentSize = true) .fillMaxSize() .padding(horizontal = 2.dp) .border( diff --git a/JetLagged/gradle/libs.versions.toml b/JetLagged/gradle/libs.versions.toml index cdeb62005..bdc0fb683 100644 --- a/JetLagged/gradle/libs.versions.toml +++ b/JetLagged/gradle/libs.versions.toml @@ -2,7 +2,7 @@ accompanist = "0.37.3" android-material3 = "1.14.0-alpha09" androidGradlePlugin = "9.0.1" -androidx-activity-compose = "1.12.4" +androidx-activity-compose = "1.13.0" androidx-appcompat = "1.7.1" androidx-compose-bom = "2026.03.00" androidx-constraintlayout = "1.1.1" diff --git a/JetNews/app/src/main/java/com/example/jetnews/ui/interests/InterestsScreen.kt b/JetNews/app/src/main/java/com/example/jetnews/ui/interests/InterestsScreen.kt index 0e3966f83..4dec6fcfa 100644 --- a/JetNews/app/src/main/java/com/example/jetnews/ui/interests/InterestsScreen.kt +++ b/JetNews/app/src/main/java/com/example/jetnews/ui/interests/InterestsScreen.kt @@ -42,12 +42,12 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold -import androidx.compose.material3.ScrollableTabRow +import androidx.compose.material3.PrimaryScrollableTabRow +import androidx.compose.material3.PrimaryTabRow import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Surface import androidx.compose.material3.Tab -import androidx.compose.material3.TabRow import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -356,7 +356,7 @@ private fun InterestsTabRow( ) { when (isExpandedScreen) { false -> { - TabRow( + PrimaryTabRow( selectedTabIndex = selectedTabIndex, contentColor = MaterialTheme.colorScheme.primary, ) { @@ -365,7 +365,7 @@ private fun InterestsTabRow( } true -> { - ScrollableTabRow( + PrimaryScrollableTabRow( selectedTabIndex = selectedTabIndex, contentColor = MaterialTheme.colorScheme.primary, edgePadding = 0.dp, diff --git a/JetNews/gradle/libs.versions.toml b/JetNews/gradle/libs.versions.toml index 0d0773483..07831faa3 100644 --- a/JetNews/gradle/libs.versions.toml +++ b/JetNews/gradle/libs.versions.toml @@ -6,7 +6,7 @@ accompanist = "0.37.3" android-material3 = "1.14.0-alpha09" androidGradlePlugin = "9.0.1" -androidx-activity-compose = "1.12.4" +androidx-activity-compose = "1.13.0" androidx-appcompat = "1.7.1" androidx-compose-bom = "2026.03.00" androidx-constraintlayout = "1.1.1" diff --git a/Jetcaster/gradle/libs.versions.toml b/Jetcaster/gradle/libs.versions.toml index 1f38ddb3c..6a9ddbabb 100644 --- a/Jetcaster/gradle/libs.versions.toml +++ b/Jetcaster/gradle/libs.versions.toml @@ -6,7 +6,7 @@ accompanist = "0.37.3" android-material3 = "1.13.0-alpha13" androidGradlePlugin = "8.10.1" -androidx-activity-compose = "1.10.1" +androidx-activity-compose = "1.13.0" androidx-appcompat = "1.7.1" androidx-compose-bom = "2026.03.00" androidx-constraintlayout = "1.1.1" @@ -14,9 +14,9 @@ androidx-core-splashscreen = "1.0.1" androidx-corektx = "1.16.0" androidx-glance = "1.1.1" androidx-lifecycle = "2.8.2" -androidx-lifecycle-compose = "2.9.1" -androidx-lifecycle-runtime-compose = "2.9.1" -androidx-navigation = "2.9.0" +androidx-lifecycle-compose = "2.10.0" +androidx-lifecycle-runtime-compose = "2.10.0" +androidx-navigation = "2.9.7" androidx-palette = "1.0.0" androidx-test = "1.6.1" androidx-test-espresso = "3.6.1" @@ -25,9 +25,9 @@ androidx-test-ext-truth = "1.6.0" androidx-tv-foundation = "1.0.0-alpha12" androidx-tv-material = "1.0.0" androidx-wear-compose-material3 = "1.5.1" -androidx-wear-compose = "1.5.0" +androidx-wear-compose = "1.5.6" androidx-window = "1.4.0" -androidxHiltNavigationCompose = "1.2.0" +androidxHiltNavigationCompose = "1.3.0" androix-test-uiautomator = "2.3.0" coil = "2.7.0" # @keep diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt index 7b363bfce..05f2c7e6e 100644 --- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt +++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt @@ -90,10 +90,9 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.window.core.layout.WindowSizeClass -import androidx.window.core.layout.WindowWidthSizeClass import com.example.jetcaster.R import com.example.jetcaster.core.domain.testing.PreviewCategories import com.example.jetcaster.core.domain.testing.PreviewPodcastEpisodes @@ -141,21 +140,12 @@ fun calculateScaffoldDirective( maxHorizontalPartitions = 1 verticalSpacerSize = 0.dp } else { - when (windowAdaptiveInfo.windowSizeClass.windowWidthSizeClass) { - WindowWidthSizeClass.COMPACT -> { - maxHorizontalPartitions = 1 - verticalSpacerSize = 0.dp - } - - WindowWidthSizeClass.MEDIUM -> { - maxHorizontalPartitions = 1 - verticalSpacerSize = 0.dp - } - - else -> { - maxHorizontalPartitions = 2 - verticalSpacerSize = 24.dp - } + if (!windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND)) { + maxHorizontalPartitions = 1 + verticalSpacerSize = 0.dp + } else { + maxHorizontalPartitions = 2 + verticalSpacerSize = 24.dp } } val maxVerticalPartitions: Int @@ -758,6 +748,7 @@ private fun HomeAppBarPreview() { } } +@Suppress("DEPRECATION") private val CompactWindowSizeClass = WindowSizeClass.compute(360f, 780f) @DevicePreviews diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt index 77536537f..6ce7ac3df 100644 --- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt +++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt @@ -83,9 +83,8 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.window.core.layout.WindowSizeClass -import androidx.window.core.layout.WindowWidthSizeClass import androidx.window.layout.DisplayFeature import androidx.window.layout.FoldingFeature import com.example.jetcaster.R @@ -256,7 +255,7 @@ fun PlayerContent( // Use a two pane layout if there is a fold impacting layout (meaning it is separating // or non-flat) or if we have a large enough width to show both. if ( - windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.EXPANDED || + windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND) || isBookPosture(foldingFeature) || isTableTopPosture(foldingFeature) || isSeparatingPosture(foldingFeature) diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/util/WindowSizeClass.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/util/WindowSizeClass.kt index b4c90b372..c08593c29 100644 --- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/util/WindowSizeClass.kt +++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/util/WindowSizeClass.kt @@ -16,13 +16,11 @@ package com.example.jetcaster.util -import androidx.window.core.layout.WindowHeightSizeClass import androidx.window.core.layout.WindowSizeClass -import androidx.window.core.layout.WindowWidthSizeClass /** * Returns true if the width or height size classes are compact. */ val WindowSizeClass.isCompact: Boolean - get() = windowWidthSizeClass == WindowWidthSizeClass.COMPACT || - windowHeightSizeClass == WindowHeightSizeClass.COMPACT + get() = !isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) || + !isHeightAtLeastBreakpoint(WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND) diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/JetcasterApp.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/JetcasterApp.kt index 147ad2557..c9ab65d68 100644 --- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/JetcasterApp.kt +++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/JetcasterApp.kt @@ -73,7 +73,7 @@ private fun GlobalNavigationContainer( modifier = Modifier .padding(JetcasterAppDefaults.overScanMargin.drawer.intoPaddingValues()) .focusProperties { - enter = { + onEnter = { when (currentRoute) { Screen.Discover.route -> discover Screen.Library.route -> library diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/Catalog.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/Catalog.kt index eef6f9e92..949332081 100644 --- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/Catalog.kt +++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/Catalog.kt @@ -154,11 +154,11 @@ private fun PodcastRow( modifier = modifier .focusRequester(focusRequester) .focusProperties { - exit = { + onExit = { focusRequester.saveFocusedChild() FocusRequester.Default } - enter = { + onEnter = { if (focusRequester.restoreFocusedChild()) { FocusRequester.Cancel } else { diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/EpisodeRow.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/EpisodeRow.kt index 70def2b17..602cd3b69 100644 --- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/EpisodeRow.kt +++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/component/EpisodeRow.kt @@ -56,14 +56,14 @@ internal fun EpisodeRow( modifier = Modifier .focusRequester(focusRequester) .focusProperties { - enter = { + onEnter = { when { lazyListState.layoutInfo.visibleItemsInfo.isEmpty() -> FocusRequester.Cancel isSameList && focusRequester.restoreFocusedChild() -> FocusRequester.Cancel else -> firstItem } } - exit = { + onExit = { previousEpisodeListHash = playerEpisodeList.hashCode() focusRequester.saveFocusedChild() FocusRequester.Default diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/discover/DiscoverScreen.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/discover/DiscoverScreen.kt index 15cbfc786..81c1b87f0 100644 --- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/discover/DiscoverScreen.kt +++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/discover/DiscoverScreen.kt @@ -30,7 +30,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusProperties import androidx.compose.ui.focus.focusRequester -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.tv.material3.Tab import androidx.tv.material3.TabRow import androidx.tv.material3.Text @@ -120,7 +120,7 @@ private fun CatalogWithCategorySelection( TabRow( selectedTabIndex = selectedTabIndex, modifier = Modifier.focusProperties { - enter = { + onEnter = { selectedTab } }, diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/episode/EpisodeScreen.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/episode/EpisodeScreen.kt index 3042cd460..62ef26086 100644 --- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/episode/EpisodeScreen.kt +++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/episode/EpisodeScreen.kt @@ -29,7 +29,7 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextOverflow -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.example.jetcaster.core.player.model.PlayerEpisode diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/library/LibraryScreen.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/library/LibraryScreen.kt index 2a823d8e6..88cd87ebf 100644 --- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/library/LibraryScreen.kt +++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/library/LibraryScreen.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRestorer import androidx.compose.ui.res.stringResource -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.tv.material3.Button import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/player/PlayerScreen.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/player/PlayerScreen.kt index 7717daf35..46eeea089 100644 --- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/player/PlayerScreen.kt +++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/player/PlayerScreen.kt @@ -59,7 +59,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.media3.common.C import androidx.media3.common.MediaItem diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/podcast/PodcastDetailsScreen.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/podcast/PodcastDetailsScreen.kt index 5db3b9a5c..fc94c42ec 100644 --- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/podcast/PodcastDetailsScreen.kt +++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/podcast/PodcastDetailsScreen.kt @@ -50,7 +50,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.tv.material3.ButtonDefaults import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text diff --git a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/search/SearchScreen.kt b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/search/SearchScreen.kt index ebb00cc6c..8fba15117 100644 --- a/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/search/SearchScreen.kt +++ b/Jetcaster/tv/src/main/java/com/example/jetcaster/tv/ui/search/SearchScreen.kt @@ -48,7 +48,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.tv.material3.ExperimentalTvMaterial3Api import androidx.tv.material3.FilterChip import androidx.tv.material3.Icon diff --git a/Jetcaster/wear/build.gradle b/Jetcaster/wear/build.gradle index 77580edf3..bfa5982b5 100644 --- a/Jetcaster/wear/build.gradle +++ b/Jetcaster/wear/build.gradle @@ -23,7 +23,7 @@ plugins { } android { - compileSdk 35 + compileSdk 36 namespace "com.example.jetcaster" diff --git a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/episode/EpisodeScreen.kt b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/episode/EpisodeScreen.kt index 2f9f13030..121e965e7 100644 --- a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/episode/EpisodeScreen.kt +++ b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/episode/EpisodeScreen.kt @@ -30,7 +30,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.wear.compose.foundation.lazy.TransformingLazyColumn import androidx.wear.compose.foundation.lazy.TransformingLazyColumnScope diff --git a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/latest_episodes/LatestEpisodesScreen.kt b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/latest_episodes/LatestEpisodesScreen.kt index cd7271a60..7ce5679e0 100644 --- a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/latest_episodes/LatestEpisodesScreen.kt +++ b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/latest_episodes/LatestEpisodesScreen.kt @@ -25,7 +25,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.wear.compose.foundation.lazy.TransformingLazyColumn import androidx.wear.compose.foundation.lazy.TransformingLazyColumnState diff --git a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/library/LibraryScreen.kt b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/library/LibraryScreen.kt index 033cc53d8..b0ff8c4c6 100644 --- a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/library/LibraryScreen.kt +++ b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/library/LibraryScreen.kt @@ -37,7 +37,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.wear.compose.foundation.lazy.TransformingLazyColumn import androidx.wear.compose.foundation.lazy.TransformingLazyColumnState import androidx.wear.compose.foundation.lazy.items diff --git a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt index dfdfdbe42..879b19050 100644 --- a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt +++ b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt @@ -44,7 +44,7 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.media3.common.C import androidx.media3.common.MediaItem diff --git a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsScreen.kt b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsScreen.kt index 991e6485c..1bb0a42f9 100644 --- a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsScreen.kt +++ b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/podcast/PodcastDetailsScreen.kt @@ -25,7 +25,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.wear.compose.foundation.lazy.TransformingLazyColumn import androidx.wear.compose.foundation.lazy.TransformingLazyColumnState diff --git a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/podcasts/PodcastsScreen.kt b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/podcasts/PodcastsScreen.kt index bf52a452f..ae4d0e5fa 100644 --- a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/podcasts/PodcastsScreen.kt +++ b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/podcasts/PodcastsScreen.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.wear.compose.foundation.lazy.TransformingLazyColumn import androidx.wear.compose.foundation.lazy.TransformingLazyColumnState diff --git a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/queue/QueueScreen.kt b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/queue/QueueScreen.kt index 7934f9361..8be17e317 100644 --- a/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/queue/QueueScreen.kt +++ b/Jetcaster/wear/src/main/java/com/example/jetcaster/ui/queue/QueueScreen.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.wear.compose.foundation.lazy.TransformingLazyColumn import androidx.wear.compose.foundation.lazy.TransformingLazyColumnState diff --git a/Jetsnack/app/src/main/java/com/example/jetsnack/ui/theme/Theme.kt b/Jetsnack/app/src/main/java/com/example/jetsnack/ui/theme/Theme.kt index ad0a8e66c..87f851d5b 100644 --- a/Jetsnack/app/src/main/java/com/example/jetsnack/ui/theme/Theme.kt +++ b/Jetsnack/app/src/main/java/com/example/jetsnack/ui/theme/Theme.kt @@ -182,4 +182,16 @@ fun debugColors(darkTheme: Boolean, debugColor: Color = Color.Magenta) = ColorSc surfaceContainerHighest = debugColor, surfaceContainerLow = debugColor, surfaceContainerLowest = debugColor, + primaryFixed = debugColor, + primaryFixedDim = debugColor, + onPrimaryFixed = debugColor, + onPrimaryFixedVariant = debugColor, + secondaryFixed = debugColor, + secondaryFixedDim = debugColor, + onSecondaryFixed = debugColor, + onSecondaryFixedVariant = debugColor, + tertiaryFixed = debugColor, + tertiaryFixedDim = debugColor, + onTertiaryFixed = debugColor, + onTertiaryFixedVariant = debugColor, ) diff --git a/Jetsnack/gradle/libs.versions.toml b/Jetsnack/gradle/libs.versions.toml index 34f33df16..4eee128ed 100644 --- a/Jetsnack/gradle/libs.versions.toml +++ b/Jetsnack/gradle/libs.versions.toml @@ -2,7 +2,7 @@ accompanist = "0.37.3" android-material3 = "1.14.0-alpha09" androidGradlePlugin = "9.0.1" -androidx-activity-compose = "1.12.4" +androidx-activity-compose = "1.13.0" androidx-appcompat = "1.7.1" androidx-compose-bom = "2026.03.00" androidx-core-splashscreen = "1.2.0" diff --git a/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt b/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt index 856a6b738..8a19adf11 100644 --- a/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt +++ b/Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt @@ -69,15 +69,13 @@ import androidx.compose.ui.unit.offset import androidx.compose.ui.unit.toSize import androidx.navigation.NavDestination import androidx.navigation.NavDestination.Companion.hasRoute -import androidx.window.core.layout.WindowHeightSizeClass import androidx.window.core.layout.WindowSizeClass -import androidx.window.core.layout.WindowWidthSizeClass import com.example.reply.R import com.example.reply.ui.utils.ReplyNavigationContentPosition import kotlinx.coroutines.launch -private fun WindowSizeClass.isCompact() = windowWidthSizeClass == WindowWidthSizeClass.COMPACT || - windowHeightSizeClass == WindowHeightSizeClass.COMPACT +private fun WindowSizeClass.isCompact() = !isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) || + !isHeightAtLeastBreakpoint(WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND) class ReplyNavSuiteScope(val navSuiteType: NavigationSuiteType) @@ -97,19 +95,15 @@ fun ReplyNavigationWrapper( adaptiveInfo.windowSizeClass.isCompact() -> NavigationSuiteType.NavigationBar - adaptiveInfo.windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.EXPANDED && + adaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND) && windowSize.width >= 1200.dp -> NavigationSuiteType.NavigationDrawer else -> NavigationSuiteType.NavigationRail } - val navContentPosition = when (adaptiveInfo.windowSizeClass.windowHeightSizeClass) { - WindowHeightSizeClass.COMPACT -> ReplyNavigationContentPosition.TOP - - WindowHeightSizeClass.MEDIUM, - WindowHeightSizeClass.EXPANDED, - -> ReplyNavigationContentPosition.CENTER - - else -> ReplyNavigationContentPosition.TOP + val navContentPosition = if (adaptiveInfo.windowSizeClass.isHeightAtLeastBreakpoint(WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND)) { + ReplyNavigationContentPosition.CENTER + } else { + ReplyNavigationContentPosition.TOP } val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) diff --git a/Reply/app/src/main/java/com/example/reply/ui/theme/Theme.kt b/Reply/app/src/main/java/com/example/reply/ui/theme/Theme.kt index bf392f237..0b9296e56 100644 --- a/Reply/app/src/main/java/com/example/reply/ui/theme/Theme.kt +++ b/Reply/app/src/main/java/com/example/reply/ui/theme/Theme.kt @@ -308,15 +308,6 @@ fun ContrastAwareReplyTheme( else -> selectSchemeForContrast(darkTheme) } - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - val window = (view.context as Activity).window - window.statusBarColor = replyColorScheme.primary.toArgb() - WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme - } - } - MaterialTheme( colorScheme = replyColorScheme, typography = replyTypography, diff --git a/Reply/gradle/libs.versions.toml b/Reply/gradle/libs.versions.toml index 0d0773483..07831faa3 100644 --- a/Reply/gradle/libs.versions.toml +++ b/Reply/gradle/libs.versions.toml @@ -6,7 +6,7 @@ accompanist = "0.37.3" android-material3 = "1.14.0-alpha09" androidGradlePlugin = "9.0.1" -androidx-activity-compose = "1.12.4" +androidx-activity-compose = "1.13.0" androidx-appcompat = "1.7.1" androidx-compose-bom = "2026.03.00" androidx-constraintlayout = "1.1.1" From f210efeca1a91a5b0300321a3f1d0bef798cb9c7 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 12 Mar 2026 23:34:42 +0000 Subject: [PATCH 5/9] Jetcaster: Reverse if-else branches for better readability --- .../src/main/java/com/example/jetcaster/ui/home/Home.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt index 05f2c7e6e..98443fdd7 100644 --- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt +++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt @@ -140,12 +140,12 @@ fun calculateScaffoldDirective( maxHorizontalPartitions = 1 verticalSpacerSize = 0.dp } else { - if (!windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND)) { - maxHorizontalPartitions = 1 - verticalSpacerSize = 0.dp - } else { + if (windowAdaptiveInfo.windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND)) { maxHorizontalPartitions = 2 verticalSpacerSize = 24.dp + } else { + maxHorizontalPartitions = 1 + verticalSpacerSize = 0.dp } } val maxVerticalPartitions: Int From 7c7b407d2b8a0950b4753c8ac935703c3828f307 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Thu, 12 Mar 2026 23:47:14 +0000 Subject: [PATCH 6/9] Apply spotless formatting across samples --- .../java/com/example/jetlagged/sleep/JetLaggedHeaderTabs.kt | 2 +- .../java/com/example/jetnews/ui/interests/InterestsScreen.kt | 2 +- .../com/example/compose/jetchat/conversation/Conversation.kt | 2 +- .../com/example/compose/jetchat/conversation/RecordButton.kt | 2 +- .../com/example/compose/jetchat/conversation/UserInput.kt | 5 ----- .../main/java/com/example/compose/jetchat/profile/Profile.kt | 2 +- 6 files changed, 5 insertions(+), 10 deletions(-) diff --git a/JetLagged/app/src/main/java/com/example/jetlagged/sleep/JetLaggedHeaderTabs.kt b/JetLagged/app/src/main/java/com/example/jetlagged/sleep/JetLaggedHeaderTabs.kt index d02f510b7..ba4a62fa1 100644 --- a/JetLagged/app/src/main/java/com/example/jetlagged/sleep/JetLaggedHeaderTabs.kt +++ b/JetLagged/app/src/main/java/com/example/jetlagged/sleep/JetLaggedHeaderTabs.kt @@ -50,7 +50,7 @@ fun JetLaggedHeaderTabs(onTabSelected: (SleepTab) -> Unit, selectedTab: SleepTab modifier = modifier, edgePadding = 12.dp, selectedTabIndex = selectedTab.ordinal, - indicator = { + indicator = { Box( Modifier .tabIndicatorOffset(selectedTab.ordinal, matchContentSize = true) diff --git a/JetNews/app/src/main/java/com/example/jetnews/ui/interests/InterestsScreen.kt b/JetNews/app/src/main/java/com/example/jetnews/ui/interests/InterestsScreen.kt index 4dec6fcfa..2a0924b13 100644 --- a/JetNews/app/src/main/java/com/example/jetnews/ui/interests/InterestsScreen.kt +++ b/JetNews/app/src/main/java/com/example/jetnews/ui/interests/InterestsScreen.kt @@ -41,9 +41,9 @@ import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold import androidx.compose.material3.PrimaryScrollableTabRow import androidx.compose.material3.PrimaryTabRow +import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Surface diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt index bdde9b8ee..14a48d168 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/Conversation.kt @@ -48,8 +48,8 @@ import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.ClickableText -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/RecordButton.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/RecordButton.kt index bc9f1f513..a1b1c26a1 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/RecordButton.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/RecordButton.kt @@ -105,7 +105,7 @@ fun RecordButton( val tooltipState = remember { TooltipState() } TooltipBox( positionProvider = TooltipDefaults.rememberTooltipPositionProvider( - positioning = TooltipAnchorPosition.Above + positioning = TooltipAnchorPosition.Above, ), tooltip = { RichTooltip { diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt index d650efeb0..dafccdd3b 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/conversation/UserInput.kt @@ -224,15 +224,10 @@ private fun SelectorExpanded(currentSelector: InputSelector, onCloseRequested: ( Surface(tonalElevation = 8.dp) { when (currentSelector) { InputSelector.EMOJI -> EmojiSelector(onTextAdded, focusRequester) - InputSelector.DM -> NotAvailablePopup(onCloseRequested) - InputSelector.PICTURE -> FunctionalityNotAvailablePanel() - InputSelector.MAP -> FunctionalityNotAvailablePanel() - InputSelector.PHONE -> FunctionalityNotAvailablePanel() - InputSelector.NONE -> Unit } } diff --git a/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt b/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt index ca726a856..94e54a920 100644 --- a/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt +++ b/Jetchat/app/src/main/java/com/example/compose/jetchat/profile/Profile.kt @@ -33,9 +33,9 @@ import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface From 65960e2e828e6b8c92902c76db5c121171553cb8 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 13 Mar 2026 17:57:12 +0000 Subject: [PATCH 7/9] Jetcaster: Fully migrate away from deprecated WindowSizeClass.compute() Refactored to use the modern `WindowSizeClass.BREAKPOINTS_V1.computeWindowSizeClass` extension method, removing the need for the `@Suppress("DEPRECATION")` annotation. --- .../src/main/java/com/example/jetcaster/ui/home/Home.kt | 4 ++-- .../main/java/com/example/jetcaster/ui/player/PlayerScreen.kt | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt index 98443fdd7..859c6694b 100644 --- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt +++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt @@ -93,6 +93,7 @@ import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.window.core.layout.WindowSizeClass +import androidx.window.core.layout.computeWindowSizeClass import com.example.jetcaster.R import com.example.jetcaster.core.domain.testing.PreviewCategories import com.example.jetcaster.core.domain.testing.PreviewPodcastEpisodes @@ -748,8 +749,7 @@ private fun HomeAppBarPreview() { } } -@Suppress("DEPRECATION") -private val CompactWindowSizeClass = WindowSizeClass.compute(360f, 780f) +private val CompactWindowSizeClass = WindowSizeClass.BREAKPOINTS_V1.computeWindowSizeClass(360f, 780f) @DevicePreviews @Composable diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt index 6ce7ac3df..52b14cc75 100644 --- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt +++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/player/PlayerScreen.kt @@ -85,6 +85,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.window.core.layout.WindowSizeClass +import androidx.window.core.layout.computeWindowSizeClass import androidx.window.layout.DisplayFeature import androidx.window.layout.FoldingFeature import com.example.jetcaster.R @@ -925,7 +926,7 @@ fun PlayerScreenPreview() { ), ), displayFeatures = emptyList(), - windowSizeClass = WindowSizeClass.compute(maxWidth.value, maxHeight.value), + windowSizeClass = WindowSizeClass.BREAKPOINTS_V1.computeWindowSizeClass(maxWidth.value, maxHeight.value), onBackPress = { }, onAddToQueue = {}, onStop = {}, From c1d64256b7106ebfbb825740e05b00d36e3f8c55 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 13 Mar 2026 18:20:50 +0000 Subject: [PATCH 8/9] Jetcaster: Decouple HomeScreen from WindowSizeClass Refactored HomeScreen to accept a simple boolean 'isHomeAppBarExpanded' instead of the full WindowSizeClass object. This simplifies the API and removes the need for a mock WindowSizeClass in previews. --- .../main/java/com/example/jetcaster/ui/home/Home.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt index 859c6694b..f2294a1a3 100644 --- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt +++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt @@ -252,7 +252,7 @@ private fun HomeScreenReady( directive = navigator.scaffoldDirective, mainPane = { HomeScreen( - windowSizeClass = windowSizeClass, + isHomeAppBarExpanded = windowSizeClass.isCompact, isLoading = uiState.isLoading, featuredPodcasts = uiState.featuredPodcasts, homeCategories = uiState.homeCategories, @@ -362,7 +362,7 @@ private fun HomeScreenBackground(modifier: Modifier = Modifier, content: @Compos @Composable private fun HomeScreen( - windowSizeClass: WindowSizeClass, + isHomeAppBarExpanded: Boolean, isLoading: Boolean, featuredPodcasts: ImmutableList, selectedHomeCategory: HomeCategory, @@ -391,7 +391,7 @@ private fun HomeScreen( topBar = { Column { HomeAppBar( - isExpanded = windowSizeClass.isCompact, + isExpanded = isHomeAppBarExpanded, modifier = Modifier.fillMaxWidth(), ) if (isLoading) { @@ -749,14 +749,12 @@ private fun HomeAppBarPreview() { } } -private val CompactWindowSizeClass = WindowSizeClass.BREAKPOINTS_V1.computeWindowSizeClass(360f, 780f) - @DevicePreviews @Composable private fun PreviewHome() { JetcasterTheme { HomeScreen( - windowSizeClass = CompactWindowSizeClass, + isHomeAppBarExpanded = true, isLoading = true, featuredPodcasts = PreviewPodcasts.toImmutableList(), homeCategories = HomeCategory.entries, From b1887b4d6aac479c4f4a79a58ff021ddd04470c7 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Fri, 13 Mar 2026 18:35:07 +0000 Subject: [PATCH 9/9] Jetcaster: Clean up unused import after refactoring --- .../mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt index f2294a1a3..249780202 100644 --- a/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt +++ b/Jetcaster/mobile/src/main/java/com/example/jetcaster/ui/home/Home.kt @@ -93,7 +93,6 @@ import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.window.core.layout.WindowSizeClass -import androidx.window.core.layout.computeWindowSizeClass import com.example.jetcaster.R import com.example.jetcaster.core.domain.testing.PreviewCategories import com.example.jetcaster.core.domain.testing.PreviewPodcastEpisodes