diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..83be1d5a0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,6 @@ +# https://editorconfig.org/ +# This configuration is used by ktlint when spotless invokes it + +[*.{kt,kts}] +ij_kotlin_allow_trailing_comma=true +ij_kotlin_allow_trailing_comma_on_call_site=true diff --git a/.github/workflows/AndroidCIWithGmd.yaml b/.github/workflows/AndroidCIWithGmd.yaml index fb01ab1e8..6721d3aa0 100644 --- a/.github/workflows/AndroidCIWithGmd.yaml +++ b/.github/workflows/AndroidCIWithGmd.yaml @@ -9,23 +9,27 @@ on: jobs: android-ci: - runs-on: macos-latest + runs-on: macos-12 steps: - - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: '11' - - uses: actions/checkout@v2 + - uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: '11' + - uses: actions/checkout@v3 - - name: Run instrumented tests with GMD - continue-on-error: true - run: ./gradlew cleanManagedDevices --unused-only && ./gradlew pixel4api30DemoDebugAndroidTest -Dorg.gradle.workers.max=1 -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true --info + - name: Setup Android SDK + uses: android-actions/setup-android@v2 - - name: Upload test reports - if: success() || failure() - uses: actions/upload-artifact@v3 - with: - name: test-reports - path: | - '**/*/build/reports/androidTests/' + - name: Run instrumented tests with GMD + run: ./gradlew cleanManagedDevices --unused-only && + ./gradlew pixel4api30DemoDebugAndroidTest -Dorg.gradle.workers.max=1 + -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true --info + + - name: Upload test reports + if: success() || failure() + uses: actions/upload-artifact@v3 + with: + name: test-reports + path: | + '**/*/build/reports/androidTests/' diff --git a/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt b/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt index 965d03c47..52e1c7485 100644 --- a/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt +++ b/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt @@ -66,7 +66,7 @@ fun NiaCatalog() { LazyColumn( modifier = Modifier.fillMaxSize(), contentPadding = contentPadding, - verticalArrangement = Arrangement.spacedBy(16.dp) + verticalArrangement = Arrangement.spacedBy(16.dp), ) { item { Text( @@ -93,19 +93,19 @@ fun NiaCatalog() { FlowRow(mainAxisSpacing = 16.dp) { NiaButton( onClick = {}, - enabled = false + enabled = false, ) { Text(text = "Disabled") } NiaOutlinedButton( onClick = {}, - enabled = false + enabled = false, ) { Text(text = "Disabled") } NiaTextButton( onClick = {}, - enabled = false + enabled = false, ) { Text(text = "Disabled") } @@ -119,21 +119,21 @@ fun NiaCatalog() { text = { Text(text = "Enabled") }, leadingIcon = { Icon(imageVector = NiaIcons.Add, contentDescription = null) - } + }, ) NiaOutlinedButton( onClick = {}, text = { Text(text = "Enabled") }, leadingIcon = { Icon(imageVector = NiaIcons.Add, contentDescription = null) - } + }, ) NiaTextButton( onClick = {}, text = { Text(text = "Enabled") }, leadingIcon = { Icon(imageVector = NiaIcons.Add, contentDescription = null) - } + }, ) } } @@ -146,7 +146,7 @@ fun NiaCatalog() { text = { Text(text = "Disabled") }, leadingIcon = { Icon(imageVector = NiaIcons.Add, contentDescription = null) - } + }, ) NiaOutlinedButton( onClick = {}, @@ -154,7 +154,7 @@ fun NiaCatalog() { text = { Text(text = "Disabled") }, leadingIcon = { Icon(imageVector = NiaIcons.Add, contentDescription = null) - } + }, ) NiaTextButton( onClick = {}, @@ -162,7 +162,7 @@ fun NiaCatalog() { text = { Text(text = "Disabled") }, leadingIcon = { Icon(imageVector = NiaIcons.Add, contentDescription = null) - } + }, ) } } @@ -173,14 +173,14 @@ fun NiaCatalog() { text = { Text("Enabled") }, items = listOf("Item 1", "Item 2", "Item 3"), onItemClick = {}, - itemText = { item -> Text(item) } + itemText = { item -> Text(item) }, ) NiaDropdownMenuButton( text = { Text("Disabled") }, items = listOf("Item 1", "Item 2", "Item 3"), onItemClick = {}, itemText = { item -> Text(item) }, - enabled = false + enabled = false, ) } } @@ -191,25 +191,25 @@ fun NiaCatalog() { NiaFilterChip( selected = firstChecked, onSelectedChange = { checked -> firstChecked = checked }, - label = { Text(text = "Enabled") } + label = { Text(text = "Enabled") }, ) var secondChecked by remember { mutableStateOf(true) } NiaFilterChip( selected = secondChecked, onSelectedChange = { checked -> secondChecked = checked }, - label = { Text(text = "Enabled") } + label = { Text(text = "Enabled") }, ) NiaFilterChip( selected = false, onSelectedChange = {}, enabled = false, - label = { Text(text = "Disabled") } + label = { Text(text = "Disabled") }, ) NiaFilterChip( selected = true, onSelectedChange = {}, enabled = false, - label = { Text(text = "Disabled") } + label = { Text(text = "Disabled") }, ) } } @@ -223,15 +223,15 @@ fun NiaCatalog() { icon = { Icon( painter = painterResource(id = NiaIcons.BookmarkBorder), - contentDescription = null + contentDescription = null, ) }, checkedIcon = { Icon( painter = painterResource(id = NiaIcons.Bookmark), - contentDescription = null + contentDescription = null, ) - } + }, ) var secondChecked by remember { mutableStateOf(true) } NiaIconToggleButton( @@ -240,15 +240,15 @@ fun NiaCatalog() { icon = { Icon( painter = painterResource(id = NiaIcons.BookmarkBorder), - contentDescription = null + contentDescription = null, ) }, checkedIcon = { Icon( painter = painterResource(id = NiaIcons.Bookmark), - contentDescription = null + contentDescription = null, ) - } + }, ) NiaIconToggleButton( checked = false, @@ -256,16 +256,16 @@ fun NiaCatalog() { icon = { Icon( painter = painterResource(id = NiaIcons.BookmarkBorder), - contentDescription = null + contentDescription = null, ) }, checkedIcon = { Icon( painter = painterResource(id = NiaIcons.Bookmark), - contentDescription = null + contentDescription = null, ) }, - enabled = false + enabled = false, ) NiaIconToggleButton( checked = true, @@ -273,16 +273,16 @@ fun NiaCatalog() { icon = { Icon( painter = painterResource(id = NiaIcons.BookmarkBorder), - contentDescription = null + contentDescription = null, ) }, checkedIcon = { Icon( painter = painterResource(id = NiaIcons.Bookmark), - contentDescription = null + contentDescription = null, ) }, - enabled = false + enabled = false, ) } } @@ -294,21 +294,21 @@ fun NiaCatalog() { expanded = firstExpanded, onExpandedChange = { expanded -> firstExpanded = expanded }, compactText = { Text(text = "Compact view") }, - expandedText = { Text(text = "Expanded view") } + expandedText = { Text(text = "Expanded view") }, ) var secondExpanded by remember { mutableStateOf(true) } NiaViewToggleButton( expanded = secondExpanded, onExpandedChange = { expanded -> secondExpanded = expanded }, compactText = { Text(text = "Compact view") }, - expandedText = { Text(text = "Expanded view") } + expandedText = { Text(text = "Expanded view") }, ) NiaViewToggleButton( expanded = false, onExpandedChange = {}, compactText = { Text(text = "Disabled") }, expandedText = { Text(text = "Disabled") }, - enabled = false + enabled = false, ) } } @@ -330,7 +330,7 @@ fun NiaCatalog() { text = { Text(text = "Topic 1".uppercase()) }, followText = { Text(text = "Follow") }, unFollowText = { Text(text = "Unfollow") }, - browseText = { Text(text = "Browse topic") } + browseText = { Text(text = "Browse topic") }, ) var secondFollowed by remember { mutableStateOf(true) } NiaTopicTag( @@ -345,7 +345,7 @@ fun NiaCatalog() { text = { Text(text = "Topic 2".uppercase()) }, followText = { Text(text = "Follow") }, unFollowText = { Text(text = "Unfollow") }, - browseText = { Text(text = "Browse topic") } + browseText = { Text(text = "Browse topic") }, ) NiaTopicTag( expanded = false, @@ -355,7 +355,7 @@ fun NiaCatalog() { onUnfollowClick = {}, onBrowseClick = {}, text = { Text(text = "Disabled".uppercase()) }, - enabled = false + enabled = false, ) } } @@ -368,7 +368,7 @@ fun NiaCatalog() { NiaTab( selected = selectedTabIndex == index, onClick = { selectedTabIndex = index }, - text = { Text(text = title) } + text = { Text(text = title) }, ) } } @@ -380,12 +380,12 @@ fun NiaCatalog() { val icons = listOf( NiaIcons.UpcomingBorder, NiaIcons.MenuBookBorder, - NiaIcons.BookmarksBorder + NiaIcons.BookmarksBorder, ) val selectedIcons = listOf( NiaIcons.Upcoming, NiaIcons.MenuBook, - NiaIcons.Bookmarks + NiaIcons.Bookmarks, ) val tagIcon = NiaIcons.Tag NiaNavigationBar { @@ -397,7 +397,7 @@ fun NiaCatalog() { } else { Icon( painter = painterResource(id = icons[index]), - contentDescription = item + contentDescription = item, ) } }, @@ -407,13 +407,13 @@ fun NiaCatalog() { } else { Icon( painter = painterResource(id = selectedIcons[index]), - contentDescription = item + contentDescription = item, ) } }, label = { Text(item) }, selected = selectedItem == index, - onClick = { selectedItem = index } + onClick = { selectedItem = index }, ) } } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3cc48f284..b52d54d12 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,6 +14,7 @@ * limitations under the License. */ import com.google.samples.apps.nowinandroid.NiaBuildType +import com.android.build.api.dsl.ManagedVirtualDevice plugins { id("nowinandroid.android.application") @@ -76,7 +77,7 @@ android { // TODO: Convert it as a convention plugin once Flamingo goes out (https://github.com/android/nowinandroid/issues/523) managedDevices { devices { - maybeCreate("pixel4api30").apply { + maybeCreate("pixel4api30").apply { device = "Pixel 4" apiLevel = 30 // ATDs currently support only API level 30. diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index 8474c3546..17dd28ac7 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -29,10 +29,6 @@ import androidx.test.espresso.Espresso import androidx.test.espresso.NoActivityResumedException import com.google.samples.apps.nowinandroid.MainActivity import com.google.samples.apps.nowinandroid.R -import com.google.samples.apps.nowinandroid.feature.bookmarks.R as BookmarksR -import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR -import com.google.samples.apps.nowinandroid.feature.interests.R as FeatureInterestsR -import com.google.samples.apps.nowinandroid.feature.settings.R as SettingsR import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest @@ -40,6 +36,10 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder +import com.google.samples.apps.nowinandroid.feature.bookmarks.R as BookmarksR +import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR +import com.google.samples.apps.nowinandroid.feature.interests.R as FeatureInterestsR +import com.google.samples.apps.nowinandroid.feature.settings.R as SettingsR /** * Tests all the navigation flows that are handled by the navigation library. @@ -57,7 +57,8 @@ class NavigationTest { * Create a temporary folder used to create a Data Store file. This guarantees that * the file is removed in between each test, preventing a crash. */ - @BindValue @get:Rule(order = 1) + @BindValue + @get:Rule(order = 1) val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() /** @@ -165,7 +166,6 @@ class NavigationTest { @Test fun topLevelDestinations_showTopBarWithTitle() { composeTestRule.apply { - // Verify that the top bar contains the app name on the first screen. onNodeWithText(appName).assertExists() @@ -207,7 +207,6 @@ class NavigationTest { @Test fun whenSettingsDialogDismissed_previousScreenIsDisplayed() { composeTestRule.apply { - // Navigate to the saved screen, open the settings dialog, then close it. onNodeWithText(saved).performClick() onNodeWithContentDescription(settings).performClick() diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt index 67dd5b61c..c498c03dd 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt @@ -30,11 +30,11 @@ import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActi import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest -import javax.inject.Inject import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder +import javax.inject.Inject /** * Tests that the navigation UI is rendered correctly on different screen sizes. @@ -53,7 +53,8 @@ class NavigationUiTest { * Create a temporary folder used to create a Data Store file. This guarantees that * the file is removed in between each test, preventing a crash. */ - @BindValue @get:Rule(order = 1) + @BindValue + @get:Rule(order = 1) val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() /** @@ -77,9 +78,9 @@ class NavigationUiTest { BoxWithConstraints { NiaApp( windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight) + DpSize(maxWidth, maxHeight), ), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } } @@ -90,41 +91,41 @@ class NavigationUiTest { } @Test - fun mediumWidth_compactHeight_showsNavigationBar() { + fun mediumWidth_compactHeight_showsNavigationRail() { composeTestRule.setContent { TestHarness(size = DpSize(610.dp, 400.dp)) { BoxWithConstraints { NiaApp( windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight) + DpSize(maxWidth, maxHeight), ), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } } } - composeTestRule.onNodeWithTag("NiaBottomBar").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaNavRail").assertDoesNotExist() + composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed() + composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist() } @Test - fun expandedWidth_compactHeight_showsNavigationBar() { + fun expandedWidth_compactHeight_showsNavigationRail() { composeTestRule.setContent { TestHarness(size = DpSize(900.dp, 400.dp)) { BoxWithConstraints { NiaApp( windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight) + DpSize(maxWidth, maxHeight), ), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } } } - composeTestRule.onNodeWithTag("NiaBottomBar").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaNavRail").assertDoesNotExist() + composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed() + composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist() } @Test @@ -134,9 +135,9 @@ class NavigationUiTest { BoxWithConstraints { NiaApp( windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight) + DpSize(maxWidth, maxHeight), ), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } } @@ -153,9 +154,9 @@ class NavigationUiTest { BoxWithConstraints { NiaApp( windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight) + DpSize(maxWidth, maxHeight), ), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } } @@ -172,9 +173,9 @@ class NavigationUiTest { BoxWithConstraints { NiaApp( windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight) + DpSize(maxWidth, maxHeight), ), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } } @@ -191,9 +192,9 @@ class NavigationUiTest { BoxWithConstraints { NiaApp( windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight) + DpSize(maxWidth, maxHeight), ), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } } @@ -210,9 +211,9 @@ class NavigationUiTest { BoxWithConstraints { NiaApp( windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight) + DpSize(maxWidth, maxHeight), ), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } } @@ -229,9 +230,9 @@ class NavigationUiTest { BoxWithConstraints { NiaApp( windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight) + DpSize(maxWidth, maxHeight), ), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } } diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index 8e0d65636..64896a544 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -31,15 +31,15 @@ import androidx.navigation.compose.composable import androidx.navigation.createGraph import androidx.navigation.testing.TestNavHostController import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue /** * Tests [NiaAppState]. @@ -70,7 +70,7 @@ class NiaAppStateTest { windowSizeClass = getCompactWindowClass(), navController = navController, networkMonitor = networkMonitor, - coroutineScope = backgroundScope + coroutineScope = backgroundScope, ) } @@ -91,7 +91,7 @@ class NiaAppStateTest { composeTestRule.setContent { state = rememberNiaAppState( windowSizeClass = getCompactWindowClass(), - networkMonitor = networkMonitor + networkMonitor = networkMonitor, ) } @@ -108,7 +108,7 @@ class NiaAppStateTest { windowSizeClass = getCompactWindowClass(), navController = NavHostController(LocalContext.current), networkMonitor = networkMonitor, - coroutineScope = backgroundScope + coroutineScope = backgroundScope, ) } @@ -123,7 +123,7 @@ class NiaAppStateTest { windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(800.dp, 800.dp)), navController = NavHostController(LocalContext.current), networkMonitor = networkMonitor, - coroutineScope = backgroundScope + coroutineScope = backgroundScope, ) } @@ -133,13 +133,12 @@ class NiaAppStateTest { @Test fun niaAppState_showNavRail_large() = runTest { - composeTestRule.setContent { state = NiaAppState( windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(900.dp, 1200.dp)), navController = NavHostController(LocalContext.current), networkMonitor = networkMonitor, - coroutineScope = backgroundScope + coroutineScope = backgroundScope, ) } @@ -149,13 +148,12 @@ class NiaAppStateTest { @Test fun stateIsOfflineWhenNetworkMonitorIsOffline() = runTest(UnconfinedTestDispatcher()) { - composeTestRule.setContent { state = NiaAppState( windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(900.dp, 1200.dp)), navController = NavHostController(LocalContext.current), networkMonitor = networkMonitor, - coroutineScope = backgroundScope + coroutineScope = backgroundScope, ) } @@ -163,7 +161,7 @@ class NiaAppStateTest { networkMonitor.setConnected(false) assertEquals( true, - state.isOffline.value + state.isOffline.value, ) } diff --git a/app/src/main/baseline-prof.txt b/app/src/main/baseline-prof.txt index ea15a06b9..9aae59d60 100644 --- a/app/src/main/baseline-prof.txt +++ b/app/src/main/baseline-prof.txt @@ -1,99 +1,128 @@ +HPLandroidx/compose/animation/FlingCalculator$FlingInfo;->(FFJ)V HPLandroidx/compose/animation/FlingCalculator;->flingInfo(F)Landroidx/compose/animation/FlingCalculator$FlingInfo; +HPLandroidx/compose/animation/FlingCalculator;->getSplineDeceleration(F)D +HPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getValueFromNanos(FFJ)F HPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getVelocityFromNanos(FJ)F +HPLandroidx/compose/animation/core/DecayAnimation;->getValueFromNanos(J)Ljava/lang/Object; +HPLandroidx/compose/animation/core/DecayAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector; +HPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePostScroll-OMhpSzk(JJI)V HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePreScroll-OzD1aCk(J)J -HPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isEnabled()Z +HPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->scrollBy(F)F HPLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$scope$1;->scrollBy(F)F HPLandroidx/compose/foundation/gestures/ScrollingLogic;->dispatchScroll-3eAAhYA(Landroidx/compose/foundation/gestures/ScrollScope;JI)J -HPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HPLandroidx/compose/foundation/gestures/ScrollingLogic;->toFloat-k-4lQ0M(J)F +HPLandroidx/compose/foundation/gestures/ScrollingLogic;->toOffset-tuRUvjQ(F)J +HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->createItem-HK0c1C0(ILjava/lang/Object;Ljava/util/List;)Landroidx/compose/foundation/lazy/LazyMeasuredItem; +HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;IJLjava/lang/Object;)V +HPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->position(III)Landroidx/compose/foundation/lazy/LazyListPositionedItem; +HPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$DefaultSpan$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/grid/LazyGridState$scrollableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HPLandroidx/compose/foundation/lazy/grid/LazyGridState;->isVertical$foundation_release()Z +HPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->run()V HPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(JIJF)V +HPLandroidx/compose/material3/AndroidMenu_androidKt;->DropdownMenu-ILWXrKs(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HPLandroidx/compose/material3/ButtonKt;->TextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HPLandroidx/compose/material3/CardElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/AnimationState; +HPLandroidx/compose/material3/CardKt$Card$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HPLandroidx/compose/material3/CardKt;->Card(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/CardColors;Landroidx/compose/material3/CardElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V HPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/runtime/SlotWriter;->(Landroidx/compose/runtime/SlotTable;)V HPLandroidx/compose/runtime/SlotWriter;->slot(II)Ljava/lang/Object; +HPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HPLandroidx/compose/ui/geometry/MutableRect;->intersect(FFFF)V +HPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z HPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J -HPLandroidx/compose/ui/graphics/painter/BitmapPainter;->(Landroidx/compose/ui/graphics/ImageBitmap;JJ)V -HPLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HPLandroidx/compose/ui/geometry/Offset;->times-tuRUvjQ(FJ)J +HPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V +HPLandroidx/compose/ui/graphics/RectHelper_androidKt;->toAndroidRect(Landroidx/compose/ui/geometry/Rect;)Landroid/graphics/Rect; HPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent; HPLandroidx/compose/ui/input/pointer/Node;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z -HPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z HPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z HPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZIJ)V HPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/InternalPointerEvent; HPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V -HPLandroidx/compose/ui/layout/SubcomposeLayoutState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1; -HPLandroidx/compose/ui/node/BackwardsCompatNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V -HPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->boundsInRoot(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/geometry/Rect; +HPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->findRootCoordinates(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/layout/LayoutCoordinates; +HPLandroidx/compose/ui/node/LayoutNode;->(IZ)V HPLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V HPLandroidx/compose/ui/node/LayoutNode;->move$ui_release(III)V HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V -HPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J +HPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J +HPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/node/NodeCoordinator; HPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V -HPLandroidx/compose/ui/node/PointerInputModifierNodeKt;->isAttached(Landroidx/compose/ui/node/PointerInputModifierNode;)Z +HPLandroidx/compose/ui/node/NodeCoordinator;->isTransparent()Z HPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I +HPLandroidx/compose/ui/platform/AndroidComposeView;->localToScreen-MK-Hz9U(J)J HPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V -HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z -HPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F +HPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V +HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->addSetProgressAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V +HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo; +HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getIterableTextForAccessibility(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; +HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(Landroid/graphics/Region;Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/LinkedHashMap;Landroidx/compose/ui/semantics/SemanticsNode;)V +HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isTextField(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V +HPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V +HPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V +HPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V +HPLandroidx/compose/ui/semantics/NodeLocationHolder;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)V +HPLandroidx/compose/ui/semantics/NodeLocationHolder;->compareTo(Landroidx/compose/ui/semantics/NodeLocationHolder;)I +HPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HPLandroidx/compose/ui/semantics/SemanticsNode;->(Landroidx/compose/ui/node/SemanticsModifierNode;Z)V +HPLandroidx/compose/ui/semantics/SemanticsNode;->fakeSemanticsNode-ypyhhiA(Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/semantics/SemanticsNode; +HPLandroidx/compose/ui/semantics/SemanticsNode;->findCoordinatorToGetBounds$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HPLandroidx/compose/ui/semantics/SemanticsNode;->getConfig()Landroidx/compose/ui/semantics/SemanticsConfiguration; +HPLandroidx/compose/ui/semantics/SemanticsNode;->getParent()Landroidx/compose/ui/semantics/SemanticsNode; +HPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterMergingSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode; +HPLandroidx/compose/ui/semantics/SemanticsSortKt;->findCoordinatorToGetBounds(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/NodeCoordinator; +HPLandroidx/compose/ui/semantics/SemanticsSortKt;->findOneLayerOfSemanticsWrappersSortedByBounds(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;)V HPLandroidx/compose/ui/text/platform/AndroidAccessibilitySpannableString_androidKt;->toAccessibilitySpannableString(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroid/text/SpannableString; +HPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J +HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->(Landroid/view/accessibility/AccessibilityNodeInfo;)V +HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V +HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->extrasIntList(Ljava/lang/String;)Ljava/util/ArrayList; +HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getText()Ljava/lang/CharSequence; +HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setStateDescription(Ljava/lang/CharSequence;)V HPLandroidx/emoji2/text/MetadataRepo;->(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V HPLandroidx/emoji2/text/flatbuffer/Table;->__reset(ILjava/nio/ByteBuffer;)V -HPLcoil/compose/AsyncImagePainter;->toPainter(Landroid/graphics/drawable/Drawable;)Landroidx/compose/ui/graphics/painter/Painter; -HPLcoil/memory/MemoryCacheService;->newResult(Lcoil/intercept/RealInterceptorChain;Lcoil/request/ImageRequest;Lcoil/memory/MemoryCache$Key;Lcoil/memory/MemoryCache$Value;)Lcoil/request/SuccessResult; +HPLcoil/network/CacheResponse;->(Lokio/RealBufferedSource;)V HPLcom/caverock/androidsvg/NumberParser;->parseNumber(IILjava/lang/String;)F HPLcom/caverock/androidsvg/SVG$Style;->getDefaultStyle()Lcom/caverock/androidsvg/SVG$Style; -HPLcom/caverock/androidsvg/SVGAndroidRenderer$RendererState;->(Lcom/caverock/androidsvg/SVGAndroidRenderer$RendererState;)V -HPLcom/caverock/androidsvg/SVGAndroidRenderer;->decodePaintReference(ZLcom/caverock/androidsvg/SVG$Box;Lcom/caverock/androidsvg/SVG$PaintReference;)V -HPLcom/caverock/androidsvg/SVGAndroidRenderer;->render(Lcom/caverock/androidsvg/SVG$SvgObject;)V -HPLcom/caverock/androidsvg/SVGAndroidRenderer;->updateStyle(Lcom/caverock/androidsvg/SVGAndroidRenderer$RendererState;Lcom/caverock/androidsvg/SVG$Style;)V -HPLcom/caverock/androidsvg/SVGAndroidRenderer;->updateStyleForElement(Lcom/caverock/androidsvg/SVGAndroidRenderer$RendererState;Lcom/caverock/androidsvg/SVG$SvgElementBase;)V -HPLcom/caverock/androidsvg/SVGParser;->parseAttributesStyle(Lcom/caverock/androidsvg/SVG$SvgElementBase;Lorg/xml/sax/Attributes;)V -HPLcom/caverock/androidsvg/SVGParser;->processStyleProperty(Lcom/caverock/androidsvg/SVG$Style;Ljava/lang/String;Ljava/lang/String;)V -HPLcom/caverock/androidsvg/SVGParser;->startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V -HPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$12;->call()Ljava/lang/Object; -HPLcom/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKt;->asExternalModel(Lcom/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource;)Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource; +HPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->__fetchRelationshiptopicsAscomGoogleSamplesAppsNowinandroidCoreDatabaseModelTopicEntity(Landroidx/collection/ArrayMap;)V +HPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt;->access$NiaButtonContent(Landroidx/compose/foundation/layout/RowScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HPLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt;->NiaTopicTag(ZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V -HPLcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceCardExpanded$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HPLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceTopics(Ljava/util/List;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V HPLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt;->InterestContent(Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HPLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt;->InterestsIcon(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V HPLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt;->InterestsItem-eKw1uXw(Ljava/lang/String;ZLjava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;FLandroidx/compose/runtime/Composer;II)V -HPLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$AuthorsTabContent$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLj$/time/LocalDateTime;->b0(Lj$/time/h;Lj$/time/l;)Lj$/time/LocalDateTime; -HPLj$/time/OffsetDateTime;->parse(Ljava/lang/CharSequence;)Lj$/time/OffsetDateTime; -HPLj$/time/OffsetDateTime;->w(Lj$/time/temporal/TemporalAccessor;)Lj$/time/OffsetDateTime; -HPLj$/time/chrono/ChronoLocalDateTime;->v(Lj$/time/ZoneOffset;)J -HPLj$/time/chrono/a;->D(Ljava/util/HashMap;Lj$/time/format/E;)Lj$/time/chrono/b; -HPLj$/time/format/D;->p(Lj$/time/temporal/TemporalAccessor;)V +HPLj$/time/chrono/r;->Z(Ljava/util/HashMap;Lj$/time/format/E;)Lj$/time/chrono/b; +HPLj$/time/format/D;->d(Lj$/time/temporal/t;)Ljava/lang/Object; HPLj$/time/format/DateTimeFormatter;->f(Ljava/lang/CharSequence;)Lj$/time/temporal/TemporalAccessor; -HPLj$/time/format/f;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I -HPLj$/time/format/l;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I -HPLj$/time/format/x;->(Lj$/time/format/DateTimeFormatter;)V -HPLj$/time/format/x;->o(Lj$/time/temporal/q;JII)I -HPLj$/time/format/x;->t(Lj$/time/format/E;Ljava/util/Set;)Lj$/time/temporal/TemporalAccessor; -HPLj$/time/h;->f0(III)Lj$/time/h; -HPLj$/time/l;->b0(IIII)Lj$/time/l; -HPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([CII)Ljava/lang/String; -HPLkotlinx/datetime/Instant$Companion;->parse(Ljava/lang/String;)Lkotlinx/datetime/Instant; -HPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; -HPLkotlinx/serialization/internal/ArrayListSerializer;->(Lkotlinx/serialization/KSerializer;)V -HPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementIndex(Ljava/lang/String;)I +HPLj$/time/format/x;->r()V HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->peekNextToken()B HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipWhitespaces()I -HPLkotlinx/serialization/json/internal/ArrayAsSequence;->charAt(I)C -HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->tryConsumeComma()Z -HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->(Lkotlinx/serialization/json/Json;ILkotlinx/serialization/json/internal/AbstractJsonLexer;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder;)V -HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; -HPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object; +HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->canConsumeValue()Z +HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->prefetchOrEof(I)I +HPLokhttp3/internal/http2/Hpack$Reader;->readByteString()Lokio/ByteString; +HPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->data(IILokio/BufferedSource;Z)V +HPLokhttp3/internal/http2/Http2ExchangeCodec;->writeRequestHeaders(Lokhttp3/Request;)V +HPLokio/Buffer;->indexOf(BJJ)J +HPLokio/InputStreamSource;->read(Lokio/Buffer;J)J +HPLokio/RealBufferedSource;->request(J)Z HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landroidx/activity/ComponentActivity;)V HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/activity/ComponentActivity;)V HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/activity/ComponentActivity;)V @@ -145,11 +174,11 @@ HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V HSPLandroidx/activity/contextaware/ContextAwareHelper;->()V HSPLandroidx/activity/result/ActivityResult$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Ljava/lang/StringBuilder; HSPLandroidx/activity/result/ActivityResultRegistry;->()V -HSPLandroidx/appcompat/R$styleable;->()V -HSPLandroidx/appcompat/R$styleable;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V +HSPLandroidx/appcompat/R$bool;->stringResource(ILandroidx/compose/runtime/Composer;I)Ljava/lang/String; +HSPLandroidx/appcompat/R$style;->build(Lkotlin/collections/builders/SetBuilder;)Lkotlin/collections/builders/SetBuilder; +HSPLandroidx/appcompat/resources/R$drawable;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner; HSPLandroidx/appcompat/view/SupportMenuInflater$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLandroidx/appcompat/widget/AppCompatTextHelper$Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface; -HSPLandroidx/appcompat/widget/TooltipCompatHandler$$ExternalSyntheticLambda1;->(ILjava/lang/Object;)V HSPLandroidx/arch/core/executor/ArchTaskExecutor$2;->()V HSPLandroidx/arch/core/executor/ArchTaskExecutor$2;->execute(Ljava/lang/Runnable;)V HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V @@ -194,8 +223,6 @@ HSPLandroidx/collection/ArrayMap;->keySet()Ljava/util/Set; HSPLandroidx/collection/ArraySet;->()V HSPLandroidx/collection/ArraySet;->()V HSPLandroidx/collection/ArraySet;->(I)V -HSPLandroidx/collection/ContainerHelpers;->()V -HSPLandroidx/collection/ContainerHelpers;->binarySearch(II[I)I HSPLandroidx/collection/IndexBasedArrayIterator;->(I)V HSPLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z HSPLandroidx/collection/IndexBasedArrayIterator;->next()Ljava/lang/Object; @@ -219,8 +246,6 @@ HSPLandroidx/collection/SparseArrayCompat;->valueAt(I)Ljava/lang/Object; HSPLandroidx/collection/SparseArrayKt$valueIterator$1;->(Landroidx/collection/SparseArrayCompat;)V HSPLandroidx/collection/SparseArrayKt$valueIterator$1;->hasNext()Z HSPLandroidx/collection/SparseArrayKt$valueIterator$1;->next()Ljava/lang/Object; -HSPLandroidx/collection/SparseArrayKt;->lerp(FFF)F -HSPLandroidx/collection/SparseArrayKt;->valueIterator(Landroidx/collection/SparseArrayCompat;)Landroidx/collection/SparseArrayKt$valueIterator$1; HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->(Ljava/util/ArrayList;)V HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V @@ -249,6 +274,8 @@ HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;-> HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/ColorVectorConverterKt;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt;->access$multiplyColumn(IFFF[F)F HSPLandroidx/compose/animation/CrossfadeKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;ZZZZ)V HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$2;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function3;II)V HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->()V @@ -298,7 +325,6 @@ HSPLandroidx/compose/animation/Fade;->(FLandroidx/compose/animation/core/F HSPLandroidx/compose/animation/FlingCalculator;->(FLandroidx/compose/ui/unit/Density;)V HSPLandroidx/compose/animation/FlingCalculatorKt;->()V HSPLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;->()V -HSPLandroidx/compose/animation/Scale;->()V HSPLandroidx/compose/animation/SingleValueAnimationKt;->()V HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-KTwxG1Y(JLandroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/AnimationState; HSPLandroidx/compose/animation/Slide;->(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)V @@ -350,11 +376,9 @@ HSPLandroidx/compose/animation/core/AnimationScope;->(Ljava/lang/Object;La HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object; HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring$default(FLjava/lang/Object;I)Landroidx/compose/animation/core/SpringSpec; HSPLandroidx/compose/animation/core/AnimationSpecKt;->tween$default(IILandroidx/compose/animation/core/Easing;I)Landroidx/compose/animation/core/TweenSpec; -HSPLandroidx/compose/animation/core/AnimationSpecKt;->tween(IILandroidx/compose/animation/core/Easing;)Landroidx/compose/animation/core/TweenSpec; HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/AnimationStateKt;->createZeroVectorFrom(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector; HSPLandroidx/compose/animation/core/AnimationVector1D;->(F)V HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F @@ -501,7 +525,7 @@ HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$in HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->(Landroidx/compose/animation/core/Transition;)V HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/animation/core/TransitionKt;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/Transition$DeferredAnimation; -HSPLandroidx/compose/animation/core/TransitionKt;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition$TransitionAnimationState; +HSPLandroidx/compose/animation/core/TransitionKt;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition$TransitionAnimationState; HSPLandroidx/compose/animation/core/TransitionKt;->updateTransition(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition; HSPLandroidx/compose/animation/core/TweenSpec;->(IILandroidx/compose/animation/core/Easing;)V HSPLandroidx/compose/animation/core/TweenSpec;->(ILandroidx/compose/animation/core/Easing;I)V @@ -629,7 +653,6 @@ HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffe HSPLandroidx/compose/foundation/Background;->(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Shape;)V HSPLandroidx/compose/foundation/Background;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V HSPLandroidx/compose/foundation/Background;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU$default(Landroidx/compose/ui/Modifier;J)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/CanvasKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V @@ -749,13 +772,13 @@ HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfigu HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->()V HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->()V -HSPLandroidx/compose/foundation/OverscrollKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z HSPLandroidx/compose/foundation/OverscrollKt;->overscroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/OverscrollEffect;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/PinnableParentConsumer;->(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/PinnableParentConsumer;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/PinnableParentConsumer;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V +HSPLandroidx/compose/foundation/gestures/AndroidScrollable_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;->(Landroidx/compose/foundation/gestures/ContentInViewModifier;)V HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;Z)V HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V @@ -878,7 +901,7 @@ HSPLandroidx/compose/foundation/layout/Arrangement;->()V HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V HSPLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V -HSPLandroidx/compose/foundation/layout/BoxChildData;->(Landroidx/compose/ui/BiasAlignment;)V +HSPLandroidx/compose/foundation/layout/BoxChildData;->()V HSPLandroidx/compose/foundation/layout/BoxChildData;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/foundation/layout/BoxChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->()V @@ -1080,104 +1103,6 @@ HSPLandroidx/compose/foundation/layout/WindowInsetsSizeKt;->windowInsetsBottomHe HSPLandroidx/compose/foundation/layout/WrapContentModifier;->(IZLkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->()V HSPLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/foundation/lazy/DataIndex;->(I)V -HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V -HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V -HSPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyRow(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->()V -HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;->()V -HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V -HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getKey()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getType()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->(Lkotlinx/coroutines/CoroutineScope;Z)V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->(Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->(Landroidx/compose/foundation/lazy/layout/MutableIntervalList;Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->(Landroidx/compose/runtime/DerivedSnapshotState;)V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getContentType(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getHeaderIndexes()Ljava/util/List; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemCount()I -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKey(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->()V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->()V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->()V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->()V -HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;->(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;I)V -HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V -HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->(IILandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;J)V -HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->createItem-HK0c1C0(ILjava/lang/Object;Ljava/util/List;)Landroidx/compose/foundation/lazy/LazyMeasuredItem; -HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/OverscrollEffect;)V -HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V -HSPLandroidx/compose/foundation/lazy/LazyListKt;->ScrollPositionUpdater(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$1;->()V -HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$1;->()V -HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$3;->(Ljava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListPositionedItem;)V -HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->(Landroidx/compose/foundation/lazy/LazyMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;ILandroidx/compose/foundation/gestures/Orientation;)V -HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map; -HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I -HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I -HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V -HSPLandroidx/compose/foundation/lazy/LazyListPinningModifier$Companion$EmptyPinnedItemsHandle$1;->()V -HSPLandroidx/compose/foundation/lazy/LazyListPinningModifier;->()V -HSPLandroidx/compose/foundation/lazy/LazyListPinningModifier;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;)V -HSPLandroidx/compose/foundation/lazy/LazyListPinningModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/foundation/lazy/LazyListPinningModifier;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListPinningModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;->(JLandroidx/compose/ui/layout/Placeable;Ljava/lang/Object;)V -HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->(IILjava/lang/Object;IIIIZLjava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;J)V -HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec; -HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getOffset-Bjo55l4(I)J -HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V -HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->()V -HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->(II)V -HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update-AhXoVpI(II)V -HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V -HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V -HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V -HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V -HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V -HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V -HSPLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V -HSPLandroidx/compose/foundation/lazy/LazyListState;->()V -HSPLandroidx/compose/foundation/lazy/LazyListState;->(II)V -HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I -HSPLandroidx/compose/foundation/lazy/LazyListState;->isScrollInProgress()Z -HSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;)V -HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->(II)V -HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/lazy/LazyListState; -HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;IJLjava/lang/Object;)V -HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->position(III)Landroidx/compose/foundation/lazy/LazyListPositionedItem; -HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;)V -HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->getAndMeasure-ZjPyQlc(I)Landroidx/compose/foundation/lazy/LazyMeasuredItem; -HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V -HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V -HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->(ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;Z)V -HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo; -HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->scrollAxisRange()Landroidx/compose/ui/semantics/ScrollAxisRange; HSPLandroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;->()V HSPLandroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;->()V HSPLandroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @@ -1243,9 +1168,6 @@ HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePoli HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt;->LazyGrid(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/grid/LazyGridState;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt;->ScrollPositionUpdater(Landroidx/compose/foundation/lazy/grid/LazyGridItemProvider;Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$1;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$1;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$3;->(Ljava/util/ArrayList;)V HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->(Landroidx/compose/foundation/lazy/grid/LazyMeasuredLine;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;ILandroidx/compose/foundation/gestures/Orientation;)V @@ -1441,7 +1363,6 @@ HSPLandroidx/compose/foundation/selection/ToggleableKt$toggleable$2;->invoke(Lja HSPLandroidx/compose/foundation/selection/ToggleableKt$toggleable$4$1;->(Lkotlin/jvm/functions/Function1;Z)V HSPLandroidx/compose/foundation/selection/ToggleableKt$triStateToggleable$4$1;->(Landroidx/compose/ui/state/ToggleableState;)V HSPLandroidx/compose/foundation/selection/ToggleableKt$triStateToggleable$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/selection/ToggleableKt;->toggleable-O2vRcR0(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/foundation/shape/CornerBasedShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline; HSPLandroidx/compose/foundation/shape/DpCornerSize;->(F)V @@ -1522,13 +1443,12 @@ HSPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->(Landroidx/compose/runtime/MutableState;Z)V HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V HSPLandroidx/compose/material/ripple/RippleKt;->()V -HSPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material/ripple/PlatformRipple; +HSPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material/ripple/PlatformRipple; HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V HSPLandroidx/compose/material/ripple/RippleThemeKt;->()V HSPLandroidx/compose/material/ripple/StateLayer;->(Landroidx/compose/runtime/MutableState;Z)V HSPLandroidx/compose/material3/AlertDialogKt$AlertDialogContent$1$$ExternalSyntheticOutline0;->m(JLandroidx/compose/runtime/DynamicProvidableCompositionLocal;)Landroidx/compose/runtime/ProvidedValue; -HSPLandroidx/compose/material3/AppBarKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/ui/layout/MeasurePolicy;Landroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/ui/platform/ViewConfiguration;Landroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/SkippableUpdater; HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->(Landroidx/compose/material3/TopAppBarScrollBehavior;F)V HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/internal/ComposableLambdaImpl;ILandroidx/compose/material3/TopAppBarScrollBehavior;)V @@ -1649,7 +1569,6 @@ HSPLandroidx/compose/material3/ComposableSingletons$SnackbarHostKt;->()V HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->()V HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->()V HSPLandroidx/compose/material3/ContentColorKt;->()V -HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicTonalPalette(Landroid/content/Context;)Landroidx/compose/material3/TonalPalette; HSPLandroidx/compose/material3/FabPosition;->(I)V HSPLandroidx/compose/material3/FadeInFadeOutState;->()V HSPLandroidx/compose/material3/IconButtonColors;->(JJJJ)V @@ -1683,7 +1602,6 @@ HSPLandroidx/compose/material3/MinimumTouchTargetModifier;->(J)V HSPLandroidx/compose/material3/MinimumTouchTargetModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HSPLandroidx/compose/material3/NavigationBarDefaults;->()V HSPLandroidx/compose/material3/NavigationBarItemColors;->(JJJJJ)V -HSPLandroidx/compose/material3/NavigationBarItemDefaults;->colors-zjMxDiM(JJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/NavigationBarItemColors; HSPLandroidx/compose/material3/NavigationBarKt$NavigationBar$1;->(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;I)V HSPLandroidx/compose/material3/NavigationBarKt$NavigationBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/material3/NavigationBarKt$NavigationBar$2;->(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;II)V @@ -1930,7 +1848,6 @@ HSPLandroidx/compose/runtime/ComposerImpl;->getRecomposeScope()Landroidx/compose HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object; HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns$1()V -HSPLandroidx/compose/runtime/ComposerImpl;->realizeOperationLocation(Z)V HSPLandroidx/compose/runtime/ComposerImpl;->realizeUps()V HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V @@ -2193,6 +2110,7 @@ HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->(IILandroidx/compos HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotWriter;->()V +HSPLandroidx/compose/runtime/SlotWriter;->(Landroidx/compose/runtime/SlotTable;)V HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor; HSPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I @@ -2217,7 +2135,6 @@ HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V HSPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z HSPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z HSPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V -HSPLandroidx/compose/runtime/SlotWriter;->set(ILjava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/SlotWriter;->skipGroup()I HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I @@ -2234,13 +2151,6 @@ HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Lan HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object; HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/SnapshotStateKt;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState; -HSPLandroidx/compose/runtime/SnapshotStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState; -HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; -HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; -HSPLandroidx/compose/runtime/SnapshotStateKt;->observeDerivedStateRecalculations(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/SnapshotStateKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState; -HSPLandroidx/compose/runtime/SnapshotStateKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/SafeFlow; HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->()V HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; @@ -2274,6 +2184,7 @@ HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object; HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->()V HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->()V @@ -2375,6 +2286,7 @@ HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementati HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->()V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->(Ljava/lang/Object;Ljava/lang/Object;)V HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->()V @@ -2408,7 +2320,6 @@ HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)La HSPLandroidx/compose/runtime/internal/ThreadMapKt;->()V HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->(Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/ListSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1; HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;)V HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->dispose()V HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V @@ -2543,14 +2454,12 @@ HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroid HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->addRange(IILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;)Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; @@ -2589,7 +2498,6 @@ HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;-> HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->(Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->ensureMap(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; HSPLandroidx/compose/runtime/snapshots/StateListIterator;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V HSPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z HSPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object; @@ -2638,7 +2546,6 @@ HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->(Landroidx/compose/runtime/Composer;)V -HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/ComposedModifierKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/ComposedModifierKt;->materialize(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/Modifier$Companion;->()V @@ -2793,9 +2700,6 @@ HSPLandroidx/compose/ui/geometry/CornerRadius;->()V HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F HSPLandroidx/compose/ui/geometry/CornerRadiusKt;->CornerRadius(FF)J -HSPLandroidx/compose/ui/geometry/MutableRect;->()V -HSPLandroidx/compose/ui/geometry/MutableRect;->intersect(FFFF)V -HSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z HSPLandroidx/compose/ui/geometry/Offset;->()V HSPLandroidx/compose/ui/geometry/Offset;->(J)V HSPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z @@ -2822,7 +2726,6 @@ HSPLandroidx/compose/ui/geometry/SizeKt;->Size(FF)J HSPLandroidx/compose/ui/geometry/SizeKt;->getCenter-uvyYCjk(J)J HSPLandroidx/compose/ui/graphics/AndroidBlendMode_androidKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode; HSPLandroidx/compose/ui/graphics/AndroidCanvas;->()V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->clipRect-N_I0leg(FFFFI)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->disableZ()V HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawCircle-9KIMszo(FJLandroidx/compose/ui/graphics/Paint;)V @@ -2875,6 +2778,7 @@ HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeCubicTo(FFFFFF)V HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeMoveTo(FF)V HSPLandroidx/compose/ui/graphics/AndroidPath;->reset()V +HSPLandroidx/compose/ui/graphics/AndroidPath_androidKt;->()V HSPLandroidx/compose/ui/graphics/AndroidPath_androidKt;->Path()Landroidx/compose/ui/graphics/AndroidPath; HSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap; HSPLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap; @@ -2893,7 +2797,6 @@ HSPLandroidx/compose/ui/graphics/Brush$Companion;->()V HSPLandroidx/compose/ui/graphics/Brush$Companion;->linearGradient-mHitzGk$default([Lkotlin/Pair;JJ)Landroidx/compose/ui/graphics/LinearGradient; HSPLandroidx/compose/ui/graphics/Brush;->()V HSPLandroidx/compose/ui/graphics/Brush;->()V -HSPLandroidx/compose/ui/graphics/Canvas;->clipRect-mtrdD-E(Landroidx/compose/ui/geometry/Rect;I)V HSPLandroidx/compose/ui/graphics/CanvasHolder;->()V HSPLandroidx/compose/ui/graphics/CanvasUtils;->enableZ(Landroid/graphics/Canvas;Z)V HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;)V @@ -2931,7 +2834,6 @@ HSPLandroidx/compose/ui/graphics/LinearGradient;->(Ljava/util/ArrayList;Lj HSPLandroidx/compose/ui/graphics/LinearGradient;->createShader-uvyYCjk(J)Landroid/graphics/Shader; HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[F HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J -HSPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V HSPLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFF)V HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->(Landroidx/compose/ui/geometry/Rect;)V @@ -2994,7 +2896,6 @@ HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->(Ljava/lang/Strin HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/ColorSpace; -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->asExternalModel(Lcom/google/samples/apps/nowinandroid/core/database/model/TopicEntity;)Lcom/google/samples/apps/nowinandroid/core/model/data/Topic; HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->chromaticAdaptation([F[F[F)[F HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)Landroidx/compose/ui/graphics/colorspace/Connector; @@ -3077,9 +2978,6 @@ HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;- HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->()V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->navigationContentColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->navigationIndicatorColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->navigationSelectedItemColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawCircle-VaOC9Bg$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFJLandroidx/compose/ui/graphics/drawscope/DrawStyle;I)V HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;III)V HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-GBMwjPU$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/Stroke;I)V @@ -3270,6 +3168,7 @@ HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->updateConfi HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->()V HSPLandroidx/compose/ui/graphics/vector/compat/XmlVectorParser_androidKt;->obtainBrushFromComplexColor(Landroidx/core/content/res/ComplexColorCompat;)Landroidx/compose/ui/graphics/Brush; HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;->(Landroid/view/View;)V +HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;->asExternalModel(Lcom/google/samples/apps/nowinandroid/core/database/model/TopicEntity;)Lcom/google/samples/apps/nowinandroid/core/model/data/Topic; HSPLandroidx/compose/ui/input/InputMode;->(I)V HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/input/InputModeManagerImpl;->(ILandroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;)V @@ -3307,9 +3206,6 @@ HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->()V HSPLandroidx/compose/ui/input/pointer/NodeParent;->()V HSPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;)V HSPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V -HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->()V -HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->()V -HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->onFrame(Landroidx/metrics/performance/FrameData;)V HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->()V HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->(ILjava/lang/String;)V HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->()V @@ -3370,8 +3266,6 @@ HSPLandroidx/compose/ui/layout/ContentScale$Companion$Inside$1;->()V HSPLandroidx/compose/ui/layout/ContentScale$Companion;->()V HSPLandroidx/compose/ui/layout/FixedScale;->()V HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;->(Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->boundsInRoot(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/geometry/Rect; -HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->findRootCoordinates(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/layout/LayoutCoordinates; HSPLandroidx/compose/ui/layout/LayoutId;->(Ljava/lang/String;)V HSPLandroidx/compose/ui/layout/LayoutId;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/layout/LayoutId;->getLayoutId()Ljava/lang/Object; @@ -3515,7 +3409,6 @@ HSPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/com HSPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V @@ -3590,7 +3483,6 @@ HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;->()V HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/node/LayoutNode;->()V -HSPLandroidx/compose/ui/node/LayoutNode;->(IZ)V HSPLandroidx/compose/ui/node/LayoutNode;->(IZI)V HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V @@ -3601,6 +3493,7 @@ HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/ HSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List; HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List; HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector; HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V @@ -3711,11 +3604,8 @@ HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->(Lk HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/node/NodeCoordinator;->()V HSPLandroidx/compose/ui/node/NodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V -HSPLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V -HSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/NodeCoordinator;->getChild()Landroidx/compose/ui/node/LookaheadCapablePlaceable; HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F @@ -3724,20 +3614,16 @@ HSPLandroidx/compose/ui/node/NodeCoordinator;->getHasMeasureResult()Z HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode; HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable; HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/node/NodeCoordinator; HSPLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J HSPLandroidx/compose/ui/node/NodeCoordinator;->getSize-YbymL2g()J HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node; HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/NodeCoordinator;->isTransparent()Z HSPLandroidx/compose/ui/node/NodeCoordinator;->isValid()Z HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayerBlockUpdated(Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V -HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced$1()V HSPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/node/NodeCoordinator;->replace$ui_release()V HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V @@ -3749,7 +3635,6 @@ HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-> HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->()V -HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->()V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->()V HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->()V @@ -3813,14 +3698,12 @@ HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->( HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/AndroidComposeView;->()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->clearChildInvalidObservations(Landroid/view/ViewGroup;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec(I)Lkotlin/Pair; HSPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/OwnedLayer; HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AccessibilityManager; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAndroidViewsHandler$ui_release()Landroidx/compose/ui/platform/AndroidViewsHandler; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/Autofill; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree; HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager; @@ -3847,7 +3730,6 @@ HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroi HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfo; HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->localToScreen-MK-Hz9U(J)J HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttach(Landroidx/compose/ui/node/LayoutNode;)V @@ -3864,7 +3746,6 @@ HSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecyc HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnLayoutCompletedListener(Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$4;)V HSPLandroidx/compose/ui/platform/AndroidComposeView;->requestOnPositionedCallback(Landroidx/compose/ui/node/LayoutNode;)V @@ -3878,24 +3759,14 @@ HSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDisp HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->addSetProgressAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;->(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->()V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->(Landroidx/compose/ui/platform/AndroidComposeView;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getCurrentSemanticsNodes()Ljava/util/Map; -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getIterableTextForAccessibility(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTextForTextField(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Landroidx/compose/ui/text/AnnotatedString; HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isAccessibilityEnabled()Z -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->trimToSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(Landroid/graphics/Region;Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/LinkedHashMap;Landroidx/compose/ui/semantics/SemanticsNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isTextField(Landroidx/compose/ui/semantics/SemanticsNode;)Z HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V @@ -3954,21 +3825,13 @@ HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutin HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/AndroidUriHandler;->(Landroid/content/Context;)V HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->(Landroid/view/ViewConfiguration;)V -HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->getLayoutNodeToHolder()Ljava/util/HashMap; -HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onLayout(ZIIII)V -HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onMeasure(II)V -HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->requestLayout()V -HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/graphics/Matrix;)V HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->()V -HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;->()V HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;->()V HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->()V HSPLandroidx/compose/ui/platform/ComposeView$Content$1;->(Landroidx/compose/ui/platform/ComposeView;I)V HSPLandroidx/compose/ui/platform/ComposeView;->(Landroid/content/Context;)V HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/ui/platform/ComposeView;->getAccessibilityClassName()Ljava/lang/CharSequence; HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;->()V @@ -4037,7 +3900,6 @@ HSPLandroidx/compose/ui/platform/InspectionModeKt$LocalInspectionMode$1;-> HSPLandroidx/compose/ui/platform/InspectionModeKt$LocalInspectionMode$1;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/platform/InspectionModeKt;->()V HSPLandroidx/compose/ui/platform/InspectorValueInfo;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/platform/InvertMatrixKt;->invertTo-JiSxe2E([F[F)Z HSPLandroidx/compose/ui/platform/LayerMatrixCache;->(Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V @@ -4095,14 +3957,12 @@ HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke( HSPLandroidx/compose/ui/platform/RenderNodeLayer;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-NHXXZp8(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V -HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->(Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Rect;)V HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->(Ljava/lang/String;)V HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/platform/TestTagKt;->testTag(Landroidx/compose/ui/Modifier;Ljava/lang/String;)Landroidx/compose/ui/Modifier; @@ -4175,9 +4035,6 @@ HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map; HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->()V HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition; -HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->hasCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;)Z -HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V -HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V HSPLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;->(Landroidx/compose/ui/graphics/vector/ImageVector;I)V HSPLandroidx/compose/ui/res/ImageVectorCache$Key;->(ILandroid/content/res/Resources$Theme;)V HSPLandroidx/compose/ui/res/ImageVectorCache$Key;->equals(Ljava/lang/Object;)Z @@ -4188,9 +4045,6 @@ HSPLandroidx/compose/ui/res/Resources_androidKt;->resources(Landroidx/compose/ru HSPLandroidx/compose/ui/semantics/AccessibilityAction;->(Ljava/lang/String;Lkotlin/Function;)V HSPLandroidx/compose/ui/semantics/AccessibilityAction;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/semantics/CollectionInfo;->(II)V -HSPLandroidx/compose/ui/semantics/NodeLocationHolder;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/semantics/NodeLocationHolder;->compareTo(Landroidx/compose/ui/semantics/NodeLocationHolder;)I -HSPLandroidx/compose/ui/semantics/NodeLocationHolder;->compareTo(Ljava/lang/Object;)I HSPLandroidx/compose/ui/semantics/Role;->(I)V HSPLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V @@ -4199,29 +4053,17 @@ HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->()V HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V -HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->()V HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->(ZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration; HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->clearAndSetSemantics(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->(Landroidx/compose/ui/semantics/Role;)V -HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration; -HSPLandroidx/compose/ui/semantics/SemanticsNode;->(Landroidx/compose/ui/node/SemanticsModifierNode;Z)V HSPLandroidx/compose/ui/semantics/SemanticsNode;->(Landroidx/compose/ui/node/SemanticsModifierNode;ZLandroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/semantics/SemanticsNode;->fakeSemanticsNode-ypyhhiA(Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/semantics/SemanticsNode; -HSPLandroidx/compose/ui/semantics/SemanticsNode;->findCoordinatorToGetBounds$ui_release()Landroidx/compose/ui/node/NodeCoordinator; -HSPLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInRoot()Landroidx/compose/ui/geometry/Rect; HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(Z)Ljava/util/List; -HSPLandroidx/compose/ui/semantics/SemanticsNode;->getConfig()Landroidx/compose/ui/semantics/SemanticsConfiguration; -HSPLandroidx/compose/ui/semantics/SemanticsNode;->getParent()Landroidx/compose/ui/semantics/SemanticsNode; HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(ZZ)Ljava/util/List; HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;)V -HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterMergingSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode; HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode; HSPLandroidx/compose/ui/semantics/SemanticsOwner;->(Landroidx/compose/ui/node/LayoutNode;)V HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; @@ -4248,7 +4090,6 @@ HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid;->()V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$1;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContentDescription(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V HSPLandroidx/compose/ui/semantics/SemanticsProperties_androidKt;->()V @@ -4256,9 +4097,6 @@ HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V -HSPLandroidx/compose/ui/semantics/SemanticsSortKt;->findCoordinatorToGetBounds(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/NodeCoordinator; -HSPLandroidx/compose/ui/semantics/SemanticsSortKt;->findNodeByPredicateTraversal(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode; -HSPLandroidx/compose/ui/semantics/SemanticsSortKt;->findOneLayerOfSemanticsWrappersSortedByBounds(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;)V HSPLandroidx/compose/ui/state/ToggleableState;->()V HSPLandroidx/compose/ui/state/ToggleableState;->(ILjava/lang/String;)V HSPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;->(Landroidx/compose/ui/text/AndroidParagraph;)V @@ -4322,7 +4160,6 @@ HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object; HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$minIntrinsicWidth$2;->(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;)V HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->(ILandroidx/compose/ui/text/platform/AndroidTextPaint;Ljava/lang/CharSequence;)V -HSPLandroidx/compose/ui/text/android/SpannedExtensionsKt;->hasSpan(Landroid/text/Spanned;Ljava/lang/Class;)Z HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->()V HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout; HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;I)V @@ -4351,7 +4188,6 @@ HSPLandroidx/compose/ui/text/android/style/LetterSpacingSpanPx;->updateDrawState HSPLandroidx/compose/ui/text/android/style/LetterSpacingSpanPx;->updateMeasureState(Landroid/text/TextPaint;)V HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->(F)V HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V -HSPLandroidx/compose/ui/text/caches/ContainerHelpersKt;->()V HSPLandroidx/compose/ui/text/caches/LruCache;->()V HSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @@ -4387,10 +4223,6 @@ HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1 HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->()V -HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->()V -HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; -HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createDefault-FO1MlWM(Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; -HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; HSPLandroidx/compose/ui/text/font/SystemFontFamily;->()V HSPLandroidx/compose/ui/text/font/TypefaceRequest;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z @@ -4471,6 +4303,9 @@ HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->(FF)V HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/text/style/TextIndent;->()V HSPLandroidx/compose/ui/text/style/TextIndent;->(JJ)V +HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/DensityImpl; +HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->getSafeDrawing(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/UnionInsets; +HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues; HSPLandroidx/compose/ui/unit/Constraints$Companion;->bitsNeedForSize(I)I HSPLandroidx/compose/ui/unit/Constraints$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J HSPLandroidx/compose/ui/unit/Constraints$Companion;->fixed-JhjzzOo(II)J @@ -4496,7 +4331,6 @@ HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F HSPLandroidx/compose/ui/unit/Density;->toDpSize-k-rfVVM(J)J HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F -HSPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J HSPLandroidx/compose/ui/unit/DensityImpl;->(FF)V HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F @@ -4538,8 +4372,8 @@ HSPLandroidx/compose/ui/unit/TextUnitKt;->isUnspecified--R2X_6o(J)Z HSPLandroidx/compose/ui/unit/TextUnitKt;->pack(FJ)J HSPLandroidx/compose/ui/unit/TextUnitType;->(J)V HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z -HSPLandroidx/compose/ui/window/PopupLayoutHelperImpl;->()V -HSPLandroidx/compose/ui/window/PopupLayoutHelperImpl;->access$multiplyColumn(IFFF[F)F +HSPLandroidx/compose/ui/util/MathHelpersKt;->lerp(FFF)F +HSPLandroidx/core/R$id;->ceilToIntPx(F)I HSPLandroidx/core/app/ComponentActivity;->()V HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V HSPLandroidx/core/app/CoreComponentFactory;->()V @@ -4550,6 +4384,8 @@ HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/Clas HSPLandroidx/core/app/CoreComponentFactory;->instantiateService(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Service; HSPLandroidx/core/content/ContextCompat$Api23Impl;->getSystemService(Landroid/content/Context;Ljava/lang/Class;)Ljava/lang/Object; HSPLandroidx/core/content/ContextCompat;->()V +HSPLandroidx/core/content/PermissionChecker;->createZeroVectorFrom(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/core/content/res/CamUtils;->()V HSPLandroidx/core/content/res/ComplexColorCompat;->(Landroid/graphics/Shader;Landroid/content/res/ColorStateList;I)V HSPLandroidx/core/content/res/TypedArrayUtils;->getNamedComplexColor(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat; HSPLandroidx/core/content/res/TypedArrayUtils;->getNamedFloat(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;IF)F @@ -4561,28 +4397,12 @@ HSPLandroidx/core/graphics/Insets;->(IIII)V HSPLandroidx/core/graphics/Insets;->equals(Ljava/lang/Object;)Z HSPLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets; HSPLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets; -HSPLandroidx/core/graphics/TypefaceCompat;->()V -HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->()V -HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface; -HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->findBaseFont(Landroid/graphics/fonts/FontFamily;I)Landroid/graphics/fonts/Font; -HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->getMatchScore(Landroid/graphics/fonts/FontStyle;Landroid/graphics/fonts/FontStyle;)I -HSPLandroidx/core/graphics/TypefaceCompatBaseImpl;->()V +HSPLandroidx/core/math/MathUtils;->systemProp$default(Ljava/lang/String;IIII)I +HSPLandroidx/core/math/MathUtils;->systemProp(Ljava/lang/String;JJJ)J HSPLandroidx/core/net/ConnectivityManagerCompat$Api16Impl;->isActiveNetworkMetered(Landroid/net/ConnectivityManager;)Z HSPLandroidx/core/os/BuildCompat;->isAtLeastS()Z HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z HSPLandroidx/core/os/HandlerCompat;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; -HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V -HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V -HSPLandroidx/core/os/TraceCompat;->()V -HSPLandroidx/core/provider/CalleeHandler;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; -HSPLandroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;->()V -HSPLandroidx/core/provider/FontProvider$Api16Impl;->query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Landroid/database/Cursor; -HSPLandroidx/core/provider/FontProvider;->()V -HSPLandroidx/core/provider/FontProvider;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; -HSPLandroidx/core/provider/FontRequest$$ExternalSyntheticOutline0;->m(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -HSPLandroidx/core/provider/FontRequest;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V -HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V -HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->(Landroid/net/Uri;IIZI)V HSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;->()V HSPLandroidx/core/splashscreen/SplashScreen$Impl31$hierarchyListener$1;->(Landroidx/core/splashscreen/SplashScreen$Impl31;Landroid/app/Activity;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl31$setKeepOnScreenCondition$1;->(Landroidx/core/splashscreen/SplashScreen$Impl31;Landroid/view/View;)V @@ -4592,23 +4412,15 @@ HSPLandroidx/core/splashscreen/SplashScreen$Impl31;->install()V HSPLandroidx/core/splashscreen/SplashScreen$Impl31;->setKeepOnScreenCondition(Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$2;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl;->(Landroid/app/Activity;)V HSPLandroidx/core/splashscreen/SplashScreen$Impl;->setPostSplashScreenTheme(Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;)V -HSPLandroidx/core/util/DebugUtils;->buffer$default(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow; -HSPLandroidx/core/util/DebugUtils;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; -HSPLandroidx/core/util/DebugUtils;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/core/util/DebugUtils;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/core/util/DebugUtils;->firstOrNull(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/core/util/DebugUtils;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/ReadonlyStateFlow; -HSPLandroidx/core/util/Preconditions;->access$lowestBitOf(J)I -HSPLandroidx/core/util/Preconditions;->binarySearch([II)I -HSPLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V +HSPLandroidx/core/util/DebugUtils;->access$lowestBitOf(J)I +HSPLandroidx/core/util/DebugUtils;->binarySearch([II)I HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->(Landroidx/core/view/AccessibilityDelegateCompat;)V -HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider; -HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V -HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V HSPLandroidx/core/view/AccessibilityDelegateCompat;->(Landroid/view/View$AccessibilityDelegate;)V -HSPLandroidx/core/view/AccessibilityDelegateCompat;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +HSPLandroidx/core/view/DisplayCutoutCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/DisplayCutout;)Landroid/graphics/Insets; +HSPLandroidx/core/view/DisplayCutoutCompat$Api30Impl;->getWaterfallInsets(Landroid/view/DisplayCutout;)Landroid/graphics/Insets; +HSPLandroidx/core/view/DisplayCutoutCompat;->(Landroid/view/DisplayCutout;)V HSPLandroidx/core/view/MenuHostHelper;->(Ljava/lang/Runnable;)V HSPLandroidx/core/view/OneShotPreDrawListener;->(Landroid/view/View;Ljava/lang/Runnable;)V HSPLandroidx/core/view/OneShotPreDrawListener;->add(Landroid/view/View;Ljava/lang/Runnable;)V @@ -4616,7 +4428,6 @@ HSPLandroidx/core/view/OneShotPreDrawListener;->onPreDraw()Z HSPLandroidx/core/view/OneShotPreDrawListener;->removeListener()V HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->()V HSPLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;->()V -HSPLandroidx/core/view/ViewCompat$Api16Impl;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; HSPLandroidx/core/view/ViewCompat$Api19Impl;->isAttachedToWindow(Landroid/view/View;)Z HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; @@ -4673,21 +4484,6 @@ HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightN HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl;->()V HSPLandroidx/core/view/WindowInsetsControllerCompat;->(Landroid/view/Window;)V -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline2;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline4;->m(Landroid/view/accessibility/AccessibilityNodeInfo;)Ljava/lang/CharSequence; -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline5;->m(Landroid/view/accessibility/AccessibilityNodeInfo;)Ljava/lang/CharSequence; -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->()V -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(Ljava/lang/Object;ILjava/lang/String;Ljava/lang/Class;)V -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->(Landroid/view/accessibility/AccessibilityNodeInfo;)V -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->extrasIntList(Ljava/lang/String;)Ljava/util/ArrayList; -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getHintText()Ljava/lang/CharSequence; -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getStateDescription()Ljava/lang/CharSequence; -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getText()Ljava/lang/CharSequence; -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClassName(Ljava/lang/String;)V -HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setStateDescription(Ljava/lang/CharSequence;)V HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->(Landroid/view/accessibility/AccessibilityNodeProvider;)V HSPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->()V @@ -4770,49 +4566,24 @@ HSPLandroidx/datastore/core/State;->()V HSPLandroidx/datastore/core/UnInitialized;->()V HSPLandroidx/datastore/core/UnInitialized;->()V HSPLandroidx/datastore/core/handlers/NoOpCorruptionHandler;->()V -HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->(Ljava/lang/String;)V -HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; -HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;->()V -HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->()V -HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->()V -HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->getSigningSignatures(Landroid/content/pm/PackageManager;Ljava/lang/String;)[Landroid/content/pm/Signature; -HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig; HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V -HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->(Landroidx/emoji2/text/EmojiCompat;)V HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal;->(Landroidx/emoji2/text/EmojiCompat;)V HSPLandroidx/emoji2/text/EmojiCompat$Config;->(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V -HSPLandroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;->()V HSPLandroidx/emoji2/text/EmojiCompat;->()V HSPLandroidx/emoji2/text/EmojiCompat;->(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;)V -HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat; HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I -HSPLandroidx/emoji2/text/EmojiCompat;->load()V HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;->(Landroid/content/Context;)V -HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V -HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V -HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->(Landroid/content/Context;)V -HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->()V -HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V HSPLandroidx/emoji2/text/EmojiCompatInitializer;->()V HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean; HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List; -HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->()V -HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;)V -HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V -HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V -HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V -HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V -HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo; -HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->()V -HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V HSPLandroidx/hilt/navigation/compose/HiltViewModelKt;->createHiltViewModelFactory(Landroidx/lifecycle/ViewModelStoreOwner;Landroidx/compose/runtime/Composer;)Ldagger/hilt/android/internal/lifecycle/HiltViewModelFactory; HSPLandroidx/hilt/work/HiltWorkerFactory;->(Ljava/util/Map;)V HSPLandroidx/hilt/work/HiltWorkerFactory;->createWorker(Landroid/content/Context;Ljava/lang/String;Landroidx/work/WorkerParameters;)Landroidx/work/ListenableWorker; @@ -4862,7 +4633,6 @@ HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->onStateChanged(Landroidx/li HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->()V HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V HSPLandroidx/lifecycle/LifecycleDispatcher;->()V -HSPLandroidx/lifecycle/LifecycleKt;->stringResource(ILandroidx/compose/runtime/Composer;I)Ljava/lang/String; HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HSPLandroidx/lifecycle/LifecycleRegistry;->(Landroidx/lifecycle/LifecycleOwner;)V @@ -4979,6 +4749,7 @@ HSPLandroidx/lifecycle/Transformations$1;->(Landroidx/lifecycle/MediatorLi HSPLandroidx/lifecycle/Transformations$1;->onChanged(Ljava/lang/Object;)V HSPLandroidx/lifecycle/ViewModel;->()V HSPLandroidx/lifecycle/ViewModel;->setTagIfAbsent(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/lifecycle/ViewModelKt;->getViewModelScope(Landroidx/lifecycle/ViewModel;)Lkotlinx/coroutines/CoroutineScope; HSPLandroidx/lifecycle/ViewModelLazy;->(Lkotlin/jvm/internal/ClassReference;Lcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$2;Lcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$1;Lcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$3;)V HSPLandroidx/lifecycle/ViewModelLazy;->getValue()Ljava/lang/Object; HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;->()V @@ -4995,7 +4766,6 @@ HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelS HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/Class;Ljava/lang/String;)Landroidx/lifecycle/ViewModel; HSPLandroidx/lifecycle/ViewModelStore;->()V -HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner; HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1$1;->(Landroidx/compose/runtime/ProduceStateScope;)V HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V @@ -5007,6 +4777,7 @@ HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1;->create( HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/lifecycle/compose/FlowExtKt;->collectAsStateWithLifecycle(Lkotlinx/coroutines/flow/ReadonlyStateFlow;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/lifecycle/runtime/R$id;->hasSpan(Landroid/text/Spanned;Ljava/lang/Class;)Z HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V HSPLandroidx/lifecycle/viewmodel/CreationExtras;->()V @@ -5052,15 +4823,13 @@ HSPLandroidx/metrics/performance/PerformanceMetricsState;->cleanupSingleFrameSta HSPLandroidx/metrics/performance/PerformanceMetricsState;->getIntervalStates$metrics_performance_release(JJLjava/util/ArrayList;)V HSPLandroidx/metrics/performance/PerformanceMetricsState;->markStateForRemoval(Ljava/lang/String;Ljava/util/ArrayList;J)V HSPLandroidx/metrics/performance/PerformanceMetricsState;->putState(Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/metrics/performance/R$id;->createCoroutineUnintercepted(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)Lkotlin/coroutines/Continuation; -HSPLandroidx/metrics/performance/R$id;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/metrics/performance/StateInfo;->()V HSPLandroidx/metrics/performance/StateInfo;->(Ljava/lang/String;Ljava/lang/String;)V HSPLandroidx/metrics/performance/StateInfo;->toString()Ljava/lang/String; HSPLandroidx/navigation/ActivityNavigator$hostActivity$1;->()V HSPLandroidx/navigation/ActivityNavigator$hostActivity$1;->()V HSPLandroidx/navigation/ActivityNavigator;->(Landroid/content/Context;)V -HSPLandroidx/navigation/NamedNavArgument;->(Ljava/lang/String;Landroidx/navigation/NavArgument;)V +HSPLandroidx/navigation/NamedNavArgument;->(Landroidx/navigation/NavArgument;)V HSPLandroidx/navigation/NavArgument$Builder;->()V HSPLandroidx/navigation/NavArgument;->(Landroidx/navigation/NavType;)V HSPLandroidx/navigation/NavArgument;->equals(Ljava/lang/Object;)Z @@ -5213,6 +4982,7 @@ HSPLandroidx/navigation/compose/NavHostKt;->NavHost(Landroidx/navigation/NavHost HSPLandroidx/navigation/compose/NavHostKt;->NavHost(Landroidx/navigation/NavHostController;Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->(Landroid/content/Context;)V HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;)V HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V @@ -5225,7 +4995,6 @@ HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->(Landroidx/r HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1;->([Ljava/lang/String;Lkotlinx/coroutines/channels/AbstractChannel;)V -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1;->onInvalidated(Ljava/util/Set;)V HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->(ZLandroidx/room/RoomDatabase;Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/String;Ljava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)V HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @@ -5245,7 +5014,6 @@ HSPLandroidx/room/DatabaseConfiguration;->(Landroid/content/Context;Ljava/ HSPLandroidx/room/EntityDeletionOrUpdateAdapter;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/room/EntityInsertionAdapter;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/room/EntityInsertionAdapter;->insert(Ljava/lang/Object;)V -HSPLandroidx/room/EntityInsertionAdapter;->insert(Ljava/util/List;)V HSPLandroidx/room/EntityInsertionAdapter;->insertAndReturnIdsList(Ljava/util/List;)Lkotlin/collections/builders/ListBuilder; HSPLandroidx/room/EntityUpsertionAdapter;->(Landroidx/room/EntityInsertionAdapter;Landroidx/room/EntityDeletionOrUpdateAdapter;)V HSPLandroidx/room/EntityUpsertionAdapter;->upsert(Ljava/util/List;)V @@ -5292,7 +5060,7 @@ HSPLandroidx/room/RoomDatabase;->isOpen()Z HSPLandroidx/room/RoomDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor; HSPLandroidx/room/RoomDatabase;->setTransactionSuccessful()V HSPLandroidx/room/RoomDatabase;->unwrapOpenHelper(Ljava/lang/Class;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)Ljava/lang/Object; -HSPLandroidx/room/RoomOpenHelper$Delegate;->(I)V +HSPLandroidx/room/RoomOpenHelper$Delegate;->()V HSPLandroidx/room/RoomOpenHelper;->(Landroidx/room/DatabaseConfiguration;Landroidx/room/RoomOpenHelper$Delegate;Ljava/lang/String;Ljava/lang/String;)V HSPLandroidx/room/RoomOpenHelper;->onConfigure(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V HSPLandroidx/room/RoomOpenHelper;->onCreate(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V @@ -5331,7 +5099,14 @@ HSPLandroidx/room/util/CursorUtil;->getColumnIndex(Landroid/database/Cursor;Ljav HSPLandroidx/room/util/CursorUtil;->getColumnIndexOrThrow(Landroid/database/Cursor;Ljava/lang/String;)I HSPLandroidx/room/util/DBUtil;->query(Landroidx/room/RoomDatabase;Landroidx/room/RoomSQLiteQuery;Z)Landroid/database/Cursor; HSPLandroidx/room/util/StringUtil;->appendPlaceholders(ILjava/lang/StringBuilder;)V -HSPLandroidx/savedstate/R$id;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/DensityImpl; +HSPLandroidx/savedstate/R$id;->Constraints$default(III)J +HSPLandroidx/savedstate/R$id;->Constraints(IIII)J +HSPLandroidx/savedstate/R$id;->colors-zjMxDiM(JJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/NavigationBarItemColors; +HSPLandroidx/savedstate/R$id;->constrain-4WqzIAM(JJ)J +HSPLandroidx/savedstate/R$id;->constrain-N9IONVI(JJ)J +HSPLandroidx/savedstate/R$id;->constrainHeight-K40F9xA(JI)I +HSPLandroidx/savedstate/R$id;->constrainWidth-K40F9xA(JI)I +HSPLandroidx/savedstate/R$id;->offset-NN6Ew-U(IIJ)J HSPLandroidx/savedstate/Recreator;->(Landroidx/savedstate/SavedStateRegistryOwner;)V HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->(Landroidx/savedstate/SavedStateRegistry;)V @@ -5410,7 +5185,7 @@ HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/H HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer; HSPLandroidx/startup/InitializationProvider;->()V HSPLandroidx/startup/InitializationProvider;->onCreate()Z -HSPLandroidx/startup/R$string;->ceilToIntPx(F)I +HSPLandroidx/startup/StartupLogger;->dynamicTonalPalette(Landroid/content/Context;)Landroidx/compose/material3/TonalPalette; HSPLandroidx/tracing/Trace;->beginAsyncSection()V HSPLandroidx/tracing/Trace;->endAsyncSection(ILjava/lang/String;)V HSPLandroidx/tracing/Trace;->isEnabled()Z @@ -5487,7 +5262,6 @@ HSPLandroidx/work/OverwritingInputMerger;->()V HSPLandroidx/work/OverwritingInputMerger;->merge(Ljava/util/ArrayList;)Landroidx/work/Data; HSPLandroidx/work/WorkInfo$State;->()V HSPLandroidx/work/WorkInfo$State;->(ILjava/lang/String;)V -HSPLandroidx/work/WorkInfo$State;->isFinished()Z HSPLandroidx/work/WorkInfo;->(Ljava/util/UUID;Landroidx/work/WorkInfo$State;Landroidx/work/Data;Ljava/util/List;Landroidx/work/Data;I)V HSPLandroidx/work/WorkInfo;->equals(Ljava/lang/Object;)Z HSPLandroidx/work/WorkManager;->()V @@ -5544,8 +5318,6 @@ HSPLandroidx/work/impl/WorkDatabaseMigrations;->()V HSPLandroidx/work/impl/WorkDatabasePathHelper;->()V HSPLandroidx/work/impl/WorkDatabasePathHelper;->migrateDatabase(Landroid/content/Context;)V HSPLandroidx/work/impl/WorkDatabase_Impl$1;->(Landroidx/work/impl/WorkDatabase_Impl;)V -HSPLandroidx/work/impl/WorkDatabase_Impl$1;->createAllTables(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLandroidx/work/impl/WorkDatabase_Impl$1;->onCreate(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V HSPLandroidx/work/impl/WorkDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V HSPLandroidx/work/impl/WorkDatabase_Impl;->()V HSPLandroidx/work/impl/WorkDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; @@ -5594,7 +5366,6 @@ HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->(Land HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->()V HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->cancel(Ljava/lang/String;)V -HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->cancelJobById(Landroid/app/job/JobScheduler;I)V HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobs(Landroid/content/Context;Landroid/app/job/JobScheduler;)Ljava/util/ArrayList; HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->hasLimitedSchedulingSlots()Z HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V @@ -5606,7 +5377,6 @@ HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onCreate()V HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onDestroy()V HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onExecuted(Ljava/lang/String;Z)V HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onStartJob(Landroid/app/job/JobParameters;)Z -HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onStopJob(Landroid/app/job/JobParameters;)Z HSPLandroidx/work/impl/constraints/NetworkState;->(ZZZZ)V HSPLandroidx/work/impl/constraints/NetworkState;->equals(Ljava/lang/Object;)Z HSPLandroidx/work/impl/constraints/NetworkState;->toString()Ljava/lang/String; @@ -5672,11 +5442,9 @@ HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->(Landroidx/room/Room HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->createQuery()Ljava/lang/String; HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$2;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$2;->createQuery()Ljava/lang/String; HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Ljava/lang/String;)Landroidx/work/impl/model/SystemIdInfo; HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->insertSystemIdInfo(Landroidx/work/impl/model/SystemIdInfo;)V -HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->removeSystemIdInfo(Ljava/lang/String;)V HSPLandroidx/work/impl/model/WorkName;->(Ljava/lang/String;Ljava/lang/String;)V HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->(Landroidx/room/RoomDatabase;)V HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V @@ -5700,7 +5468,6 @@ HSPLandroidx/work/impl/model/WorkSpec;->calculateNextRunTime()J HSPLandroidx/work/impl/model/WorkSpec;->hasConstraints()Z HSPLandroidx/work/impl/model/WorkSpec;->hashCode()I HSPLandroidx/work/impl/model/WorkSpec;->isPeriodic()Z -HSPLandroidx/work/impl/model/WorkSpec;->toString()Ljava/lang/String; HSPLandroidx/work/impl/model/WorkSpecDao_Impl$13;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomSQLiteQuery;)V HSPLandroidx/work/impl/model/WorkSpecDao_Impl$13;->call()Ljava/lang/Object; HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->(Landroidx/room/RoomDatabase;)V @@ -5791,7 +5558,6 @@ HSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->(I)V HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V HSPLandroidx/work/impl/utils/futures/AbstractFuture;->addListener(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->cancel(Z)Z HSPLandroidx/work/impl/utils/futures/AbstractFuture;->complete(Landroidx/work/impl/utils/futures/AbstractFuture;)V HSPLandroidx/work/impl/utils/futures/AbstractFuture;->executeListener(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V HSPLandroidx/work/impl/utils/futures/AbstractFuture;->get()Ljava/lang/Object; @@ -5816,8 +5582,6 @@ HSPLcoil/ComponentRegistry$Builder;->add(Lcoil/map/Mapper;Ljava/lang/Class;)V HSPLcoil/ComponentRegistry$Builder;->build()Lcoil/ComponentRegistry; HSPLcoil/ComponentRegistry;->(Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V HSPLcoil/EventListener$Companion$NONE$1;->()V -HSPLcoil/EventListener$Companion$NONE$1;->decodeStart()V -HSPLcoil/EventListener$Companion$NONE$1;->fetchEnd()V HSPLcoil/EventListener$Companion$NONE$1;->fetchStart()V HSPLcoil/EventListener$Companion$NONE$1;->keyEnd()V HSPLcoil/EventListener$Companion$NONE$1;->keyStart()V @@ -5857,6 +5621,7 @@ HSPLcoil/RealImageLoader;->access$executeMain(Lcoil/RealImageLoader;Lcoil/reques HSPLcoil/RealImageLoader;->execute(Lcoil/request/ImageRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcoil/RealImageLoader;->getComponents()Lcoil/ComponentRegistry; HSPLcoil/RealImageLoader;->getMemoryCache()Lcoil/memory/MemoryCache; +HSPLcoil/base/R$id;->yield(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; HSPLcoil/compose/AsyncImageKt$AsyncImage$2;->(Ljava/lang/Object;Ljava/lang/String;Lcoil/ImageLoader;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;IIII)V HSPLcoil/compose/AsyncImageKt$Content$$inlined$Layout$1;->(Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;)V HSPLcoil/compose/AsyncImageKt$Content$$inlined$Layout$1;->invoke()Ljava/lang/Object; @@ -5871,7 +5636,6 @@ HSPLcoil/compose/AsyncImageKt;->AsyncImage-Q4Kwu38(Ljava/lang/Object;Ljava/lang/ HSPLcoil/compose/AsyncImageKt;->Content(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/runtime/Composer;I)V HSPLcoil/compose/AsyncImagePainter$Companion$DefaultTransform$1;->()V HSPLcoil/compose/AsyncImagePainter$Companion$DefaultTransform$1;->()V -HSPLcoil/compose/AsyncImagePainter$Companion$DefaultTransform$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLcoil/compose/AsyncImagePainter$State$Empty;->()V HSPLcoil/compose/AsyncImagePainter$State$Empty;->()V HSPLcoil/compose/AsyncImagePainter$State$Empty;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; @@ -5911,7 +5675,6 @@ HSPLcoil/compose/ContentPainterModifier$measure$1;->invoke(Ljava/lang/Object;)Lj HSPLcoil/compose/ContentPainterModifier;->(Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V HSPLcoil/compose/ContentPainterModifier;->calculateScaledSize-E7KxVPU(J)J HSPLcoil/compose/ContentPainterModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLcoil/compose/ContentPainterModifier;->equals(Ljava/lang/Object;)Z HSPLcoil/compose/ContentPainterModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; HSPLcoil/compose/ContentPainterModifier;->modifyConstraints-ZezNO4M(J)J HSPLcoil/compose/ImageLoaderProvidableCompositionLocal$1;->()V @@ -5919,108 +5682,52 @@ HSPLcoil/compose/ImageLoaderProvidableCompositionLocal$1;->()V HSPLcoil/compose/ImageLoaderProvidableCompositionLocal$1;->invoke()Ljava/lang/Object; HSPLcoil/compose/ImageLoaderProvidableCompositionLocal;->getCurrent(Landroidx/compose/runtime/StaticProvidableCompositionLocal;Landroidx/compose/runtime/Composer;)Lcoil/ImageLoader; HSPLcoil/compose/LocalImageLoaderKt;->()V -HSPLcoil/compose/SingletonAsyncImageKt;->AsyncImage-3HmZ8SU(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;II)V HSPLcoil/compose/SingletonAsyncImageKt;->AsyncImage-ylYTKUw(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;III)V HSPLcoil/compose/UtilsKt$transformOf$1;->(Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;)V HSPLcoil/compose/UtilsKt$transformOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLcoil/compose/UtilsKt;->()V HSPLcoil/compose/UtilsKt;->requestOf(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Lcoil/request/ImageRequest; -HSPLcoil/decode/BitmapFactoryDecoder$ExceptionCatchingSource;->(Lokio/BufferedSource;)V -HSPLcoil/decode/BitmapFactoryDecoder$ExceptionCatchingSource;->read(Lokio/Buffer;J)J HSPLcoil/decode/BitmapFactoryDecoder$Factory;->(II)V -HSPLcoil/decode/BitmapFactoryDecoder$Factory;->create(Lcoil/fetch/SourceResult;Lcoil/request/Options;)Lcoil/decode/Decoder; -HSPLcoil/decode/BitmapFactoryDecoder$decode$1;->(Lcoil/decode/BitmapFactoryDecoder;Lkotlin/coroutines/Continuation;)V -HSPLcoil/decode/BitmapFactoryDecoder$decode$2$1;->(Lcoil/decode/BitmapFactoryDecoder;)V -HSPLcoil/decode/BitmapFactoryDecoder$decode$2$1;->invoke()Ljava/lang/Object; -HSPLcoil/decode/BitmapFactoryDecoder;->(Lcoil/decode/ImageSource;Lcoil/request/Options;Lkotlinx/coroutines/sync/SemaphoreImpl;I)V -HSPLcoil/decode/BitmapFactoryDecoder;->access$decode(Lcoil/decode/BitmapFactoryDecoder;Landroid/graphics/BitmapFactory$Options;)Lcoil/decode/DecodeResult; -HSPLcoil/decode/BitmapFactoryDecoder;->decode(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/decode/ExifUtils;->()V -HSPLcoil/decode/ExifUtilsKt;->()V -HSPLcoil/decode/FileImageSource;->(Lokio/Path;Lokio/FileSystem;Ljava/lang/String;Ljava/io/Closeable;)V -HSPLcoil/decode/FileImageSource;->source()Lokio/BufferedSource; -HSPLcoil/decode/ImageSource;->()V -HSPLcoil/decode/ImageSources;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V -HSPLcoil/decode/ImageSources;->yield(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; -HSPLcoil/decode/SvgDecodeUtils;->()V HSPLcoil/decode/SvgDecoder$Factory;->(I)V -HSPLcoil/decode/SvgDecoder$Factory;->create(Lcoil/fetch/SourceResult;Lcoil/request/Options;)Lcoil/decode/Decoder; HSPLcoil/disk/DiskCache$Builder;->()V HSPLcoil/disk/DiskCache$Builder;->build()Lcoil/disk/RealDiskCache; -HSPLcoil/disk/DiskLruCache$Editor;->(Lcoil/disk/DiskLruCache;Lcoil/disk/DiskLruCache$Entry;)V -HSPLcoil/disk/DiskLruCache$Editor;->complete(Z)V -HSPLcoil/disk/DiskLruCache$Editor;->file(I)Lokio/Path; -HSPLcoil/disk/DiskLruCache$Entry;->(Lcoil/disk/DiskLruCache;Ljava/lang/String;)V -HSPLcoil/disk/DiskLruCache$Entry;->snapshot()Lcoil/disk/DiskLruCache$Snapshot; -HSPLcoil/disk/DiskLruCache$Snapshot;->(Lcoil/disk/DiskLruCache;Lcoil/disk/DiskLruCache$Entry;)V -HSPLcoil/disk/DiskLruCache$Snapshot;->file(I)Lokio/Path; HSPLcoil/disk/DiskLruCache$fileSystem$1;->(Lokio/JvmSystemFileSystem;)V HSPLcoil/disk/DiskLruCache$fileSystem$1;->sink(Lokio/Path;)Lokio/Sink; HSPLcoil/disk/DiskLruCache$newJournalWriter$faultHidingSink$1;->(Lcoil/disk/DiskLruCache;)V HSPLcoil/disk/DiskLruCache;->()V HSPLcoil/disk/DiskLruCache;->(Lokio/JvmSystemFileSystem;Lokio/Path;Lkotlinx/coroutines/scheduling/DefaultIoScheduler;J)V -HSPLcoil/disk/DiskLruCache;->access$completeEdit(Lcoil/disk/DiskLruCache;Lcoil/disk/DiskLruCache$Editor;Z)V HSPLcoil/disk/DiskLruCache;->checkNotClosed()V -HSPLcoil/disk/DiskLruCache;->edit(Ljava/lang/String;)Lcoil/disk/DiskLruCache$Editor; HSPLcoil/disk/DiskLruCache;->get(Ljava/lang/String;)Lcoil/disk/DiskLruCache$Snapshot; HSPLcoil/disk/DiskLruCache;->initialize()V HSPLcoil/disk/DiskLruCache;->newJournalWriter()Lokio/RealBufferedSink; HSPLcoil/disk/DiskLruCache;->validateKey(Ljava/lang/String;)V HSPLcoil/disk/DiskLruCache;->writeJournal()V HSPLcoil/disk/FaultHidingSink;->(Lokio/Sink;Lcoil/disk/DiskLruCache$newJournalWriter$faultHidingSink$1;)V -HSPLcoil/disk/FaultHidingSink;->flush()V -HSPLcoil/disk/FaultHidingSink;->write(Lokio/Buffer;J)V -HSPLcoil/disk/RealDiskCache$RealEditor;->(Lcoil/disk/DiskLruCache$Editor;)V -HSPLcoil/disk/RealDiskCache$RealEditor;->commitAndGet()Lcoil/disk/RealDiskCache$RealSnapshot; -HSPLcoil/disk/RealDiskCache$RealEditor;->getData()Lokio/Path; -HSPLcoil/disk/RealDiskCache$RealEditor;->getMetadata()Lokio/Path; -HSPLcoil/disk/RealDiskCache$RealSnapshot;->(Lcoil/disk/DiskLruCache$Snapshot;)V -HSPLcoil/disk/RealDiskCache$RealSnapshot;->getData()Lokio/Path; -HSPLcoil/disk/RealDiskCache$RealSnapshot;->getMetadata()Lokio/Path; HSPLcoil/disk/RealDiskCache;->(JLokio/Path;Lokio/JvmSystemFileSystem;Lkotlinx/coroutines/scheduling/DefaultIoScheduler;)V -HSPLcoil/disk/RealDiskCache;->edit(Ljava/lang/String;)Lcoil/disk/RealDiskCache$RealEditor; HSPLcoil/disk/RealDiskCache;->get(Ljava/lang/String;)Lcoil/disk/RealDiskCache$RealSnapshot; -HSPLcoil/disk/RealDiskCache;->getFileSystem()Lokio/FileSystem; HSPLcoil/fetch/AssetUriFetcher$Factory;->()V HSPLcoil/fetch/BitmapFetcher$Factory;->()V HSPLcoil/fetch/ByteBufferFetcher$Factory;->()V HSPLcoil/fetch/ContentUriFetcher$Factory;->()V HSPLcoil/fetch/DrawableFetcher$Factory;->()V -HSPLcoil/fetch/FetchResult;->()V HSPLcoil/fetch/FileFetcher$Factory;->()V HSPLcoil/fetch/HttpUriFetcher$Factory;->(Lkotlin/SynchronizedLazyImpl;Lkotlin/SynchronizedLazyImpl;Z)V HSPLcoil/fetch/HttpUriFetcher$Factory;->create(Ljava/lang/Object;Lcoil/request/Options;)Lcoil/fetch/Fetcher; HSPLcoil/fetch/HttpUriFetcher$executeNetworkRequest$1;->(Lcoil/fetch/HttpUriFetcher;Lkotlin/coroutines/Continuation;)V -HSPLcoil/fetch/HttpUriFetcher$executeNetworkRequest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcoil/fetch/HttpUriFetcher$fetch$1;->(Lcoil/fetch/HttpUriFetcher;Lkotlin/coroutines/Continuation;)V -HSPLcoil/fetch/HttpUriFetcher$fetch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcoil/fetch/HttpUriFetcher;->()V HSPLcoil/fetch/HttpUriFetcher;->(Ljava/lang/String;Lcoil/request/Options;Lkotlin/Lazy;Lkotlin/Lazy;Z)V HSPLcoil/fetch/HttpUriFetcher;->executeNetworkRequest(Lokhttp3/Request;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcoil/fetch/HttpUriFetcher;->fetch(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/fetch/HttpUriFetcher;->getFileSystem()Lokio/FileSystem; -HSPLcoil/fetch/HttpUriFetcher;->getMimeType$coil_base_release(Ljava/lang/String;Lokhttp3/MediaType;)Ljava/lang/String; HSPLcoil/fetch/HttpUriFetcher;->newRequest()Lokhttp3/Request; -HSPLcoil/fetch/HttpUriFetcher;->toCacheResponse(Lcoil/disk/DiskCache$Snapshot;)Lcoil/network/CacheResponse; -HSPLcoil/fetch/HttpUriFetcher;->toImageSource(Lcoil/disk/DiskCache$Snapshot;)Lcoil/decode/FileImageSource; -HSPLcoil/fetch/HttpUriFetcher;->writeToDiskCache(Lcoil/disk/DiskCache$Snapshot;Lokhttp3/Request;Lokhttp3/Response;Lcoil/network/CacheResponse;)Lcoil/disk/DiskCache$Snapshot; HSPLcoil/fetch/ResourceUriFetcher$Factory;->()V -HSPLcoil/fetch/SourceResult;->(Lcoil/decode/ImageSource;Ljava/lang/String;I)V -HSPLcoil/intercept/EngineInterceptor$decode$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/coroutines/Continuation;)V HSPLcoil/intercept/EngineInterceptor$execute$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/coroutines/Continuation;)V -HSPLcoil/intercept/EngineInterceptor$execute$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/intercept/EngineInterceptor$execute$executeResult$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/internal/Ref$ObjectRef;Lcoil/request/ImageRequest;Ljava/lang/Object;Lkotlin/jvm/internal/Ref$ObjectRef;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)V -HSPLcoil/intercept/EngineInterceptor$execute$executeResult$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcoil/intercept/EngineInterceptor$execute$executeResult$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/intercept/EngineInterceptor$execute$executeResult$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcoil/intercept/EngineInterceptor$fetch$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/coroutines/Continuation;)V -HSPLcoil/intercept/EngineInterceptor$fetch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcoil/intercept/EngineInterceptor$intercept$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/coroutines/Continuation;)V HSPLcoil/intercept/EngineInterceptor$intercept$2;->(Lcoil/intercept/EngineInterceptor;Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;Lcoil/memory/MemoryCache$Key;Lcoil/intercept/Interceptor$Chain;Lkotlin/coroutines/Continuation;)V HSPLcoil/intercept/EngineInterceptor$intercept$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLcoil/intercept/EngineInterceptor$intercept$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcoil/intercept/EngineInterceptor;->(Lcoil/ImageLoader;Lcoil/request/RequestService;)V -HSPLcoil/intercept/EngineInterceptor;->access$decode(Lcoil/intercept/EngineInterceptor;Lcoil/fetch/SourceResult;Lcoil/ComponentRegistry;Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcoil/intercept/EngineInterceptor;->access$execute(Lcoil/intercept/EngineInterceptor;Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcoil/intercept/EngineInterceptor;->fetch(Lcoil/ComponentRegistry;Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcoil/intercept/EngineInterceptor;->intercept(Lcoil/intercept/RealInterceptorChain;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -6053,15 +5760,10 @@ HSPLcoil/memory/RealStrongMemoryCache;->(ILcoil/memory/WeakMemoryCache;)V HSPLcoil/memory/RealStrongMemoryCache;->get(Lcoil/memory/MemoryCache$Key;)Lcoil/memory/MemoryCache$Value; HSPLcoil/memory/RealWeakMemoryCache;->()V HSPLcoil/memory/RealWeakMemoryCache;->get(Lcoil/memory/MemoryCache$Key;)Lcoil/memory/MemoryCache$Value; -HSPLcoil/network/CacheResponse$cacheControl$2;->(Lcoil/network/CacheResponse;)V -HSPLcoil/network/CacheResponse$contentType$2;->(Lcoil/network/CacheResponse;)V -HSPLcoil/network/CacheResponse$contentType$2;->invoke()Ljava/lang/Object; -HSPLcoil/network/CacheResponse;->(Lokhttp3/Response;)V -HSPLcoil/network/CacheResponse;->(Lokio/RealBufferedSource;)V -HSPLcoil/network/CacheResponse;->writeTo(Lokio/RealBufferedSink;)V HSPLcoil/network/CacheStrategy$Factory;->(Lokhttp3/Request;Lcoil/network/CacheResponse;)V HSPLcoil/network/CacheStrategy$Factory;->compute()Lcoil/network/CacheStrategy; HSPLcoil/network/CacheStrategy;->(Lokhttp3/Request;Lcoil/network/CacheResponse;)V +HSPLcoil/network/EmptyNetworkObserver;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1; HSPLcoil/network/RealNetworkObserver$networkCallback$1;->(Lcoil/network/RealNetworkObserver;)V HSPLcoil/network/RealNetworkObserver$networkCallback$1;->onAvailable(Landroid/net/Network;)V HSPLcoil/network/RealNetworkObserver;->(Landroid/net/ConnectivityManager;Lcoil/network/NetworkObserver$Listener;)V @@ -6070,11 +5772,8 @@ HSPLcoil/network/RealNetworkObserver;->isOnline()Z HSPLcoil/request/BaseRequestDelegate;->(Landroidx/lifecycle/Lifecycle;Lkotlinx/coroutines/Job;)V HSPLcoil/request/BaseRequestDelegate;->start()V HSPLcoil/request/CachePolicy$EnumUnboxingLocalUtility;->getReadEnabled(I)Z -HSPLcoil/request/CachePolicy$EnumUnboxingLocalUtility;->getWriteEnabled(I)Z HSPLcoil/request/DefaultRequestOptions;->(I)V -HSPLcoil/request/DefaultRequestOptions;->equals(Ljava/lang/Object;)Z HSPLcoil/request/DefinedRequestOptions;->(Landroidx/lifecycle/Lifecycle;Lcoil/size/SizeResolver;ILkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lcoil/transition/Transition$Factory;ILandroid/graphics/Bitmap$Config;Ljava/lang/Boolean;Ljava/lang/Boolean;III)V -HSPLcoil/request/DefinedRequestOptions;->equals(Ljava/lang/Object;)Z HSPLcoil/request/ImageRequest$Builder;->(Landroid/content/Context;)V HSPLcoil/request/ImageRequest$Builder;->(Lcoil/request/ImageRequest;Landroid/content/Context;)V HSPLcoil/request/ImageRequest$Builder;->build()Lcoil/request/ImageRequest; @@ -6088,7 +5787,6 @@ HSPLcoil/request/Parameters$Builder;->(Lcoil/request/Parameters;)V HSPLcoil/request/Parameters;->()V HSPLcoil/request/Parameters;->()V HSPLcoil/request/Parameters;->(Ljava/util/Map;)V -HSPLcoil/request/Parameters;->equals(Ljava/lang/Object;)Z HSPLcoil/request/RequestDelegate;->()V HSPLcoil/request/RequestDelegate;->(I)V HSPLcoil/request/RequestDelegate;->assertActive()V @@ -6097,7 +5795,6 @@ HSPLcoil/request/RequestService;->isConfigValidForHardware(Lcoil/request/ImageRe HSPLcoil/request/RequestService;->options(Lcoil/request/ImageRequest;Lcoil/size/Size;)Lcoil/request/Options; HSPLcoil/request/Tags;->()V HSPLcoil/request/Tags;->(Ljava/util/Map;)V -HSPLcoil/request/Tags;->equals(Ljava/lang/Object;)Z HSPLcoil/size/Dimension$Pixels;->(I)V HSPLcoil/size/Dimension$Pixels;->equals(Ljava/lang/Object;)Z HSPLcoil/size/Dimension$Undefined;->()V @@ -6107,7 +5804,6 @@ HSPLcoil/size/DisplaySizeResolver;->(Landroid/content/Context;)V HSPLcoil/size/Size;->()V HSPLcoil/size/Size;->(Lcoil/size/Dimension;Lcoil/size/Dimension;)V HSPLcoil/transition/NoneTransition$Factory;->()V -HSPLcoil/transition/NoneTransition$Factory;->equals(Ljava/lang/Object;)Z HSPLcoil/transition/Transition$Factory;->()V HSPLcoil/util/-Bitmaps;->isHardware(Landroid/graphics/Bitmap$Config;)Z HSPLcoil/util/-Collections;->toImmutableList(Ljava/util/ArrayList;)Ljava/util/List; @@ -6117,9 +5813,7 @@ HSPLcoil/util/-Requests;->()V HSPLcoil/util/-Requests;->getAllowInexactSize(Lcoil/request/ImageRequest;)Z HSPLcoil/util/-Requests;->getDrawableCompat(Lcoil/request/ImageRequest;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable; HSPLcoil/util/-Utils;->()V -HSPLcoil/util/-Utils;->closeQuietly(Ljava/io/Closeable;)V HSPLcoil/util/ContinuationCallback;->(Lokhttp3/Call;Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLcoil/util/ContinuationCallback;->onResponse(Lokhttp3/Response;)V HSPLcoil/util/HardwareBitmapService;->()V HSPLcoil/util/ImageLoaderOptions;->()V HSPLcoil/util/ImmutableHardwareBitmapService;->(Z)V @@ -6181,7 +5875,8 @@ HSPLcom/google/protobuf/GeneratedMessageInfoFactory;->messageInfoFor(Ljava/lang/ HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->buildPartial()Lcom/google/protobuf/GeneratedMessageLite; HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->copyOnWrite()V -HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->mergeFrom(Lcom/google/protobuf/GeneratedMessageLite;)Lcom/google/protobuf/GeneratedMessageLite$Builder; +HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->mergeFrom(Lcom/google/protobuf/GeneratedMessageLite;)V +HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->mergeFromInstance(Lcom/google/protobuf/GeneratedMessageLite;Ljava/lang/Object;)V HSPLcom/google/protobuf/GeneratedMessageLite$MethodToInvoke;->()V HSPLcom/google/protobuf/GeneratedMessageLite$MethodToInvoke;->(ILjava/lang/String;)V HSPLcom/google/protobuf/GeneratedMessageLite;->()V @@ -6347,7 +6042,6 @@ HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_Sin HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->(Ldagger/hilt/android/internal/modules/ApplicationContextModule;)V HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->access$1500(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;)Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository; HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->access$1600(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;)Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->fakeNiaNetworkDataSource()Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource; HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->hiltWorkerFactory()Landroidx/hilt/work/HiltWorkerFactory; HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->injectNiaApplication()V HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->retainedComponentBuilder()Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCBuilder; @@ -6355,7 +6049,7 @@ HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_Sin HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;I)V HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider;->get()Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;Landroidx/lifecycle/SavedStateHandle;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;->access$2000(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;)Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase; +HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;->access$1800(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;)Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase; HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;->getHiltViewModelMap()Ljava/util/Map; HSPLcom/google/samples/apps/nowinandroid/Hilt_MainActivity$1;->(Lcom/google/samples/apps/nowinandroid/Hilt_MainActivity;)V HSPLcom/google/samples/apps/nowinandroid/Hilt_MainActivity$1;->onContextAvailable()V @@ -6423,30 +6117,6 @@ HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$suspendRunCat HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$suspendRunCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt;->changeListSync(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/PropertyReference1Impl;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt;->suspendRunCatching(Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$2;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$3;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$4;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$4;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$5;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$6;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao;Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository;->syncWith(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$2;->()V HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$2;->()V HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$2;->get(Ljava/lang/Object;)Ljava/lang/Object; @@ -6463,7 +6133,7 @@ HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRe HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao;Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao;Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao;Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;)V +HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao;Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao;Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;)V HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository;->syncWith(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; @@ -6500,10 +6170,11 @@ HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetwo HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor;->(Landroid/content/Context;)V HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor;->access$isCurrentlyConnected(Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor;Landroid/net/ConnectivityManager;)Z -HSPLcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema10to11;->()V +HSPLcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema11to12;->()V HSPLcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema2to3;->()V HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase;->()V HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_10_11_Impl;->()V +HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_11_12_Impl;->()V HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_1_2_Impl;->()V HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_2_3_Impl;->()V HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_3_4_Impl;->()V @@ -6518,7 +6189,6 @@ HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl$1;->crea HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl$1;->onCreate(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->authorDao()Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao; HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->getAutoMigrations(Ljava/util/LinkedHashMap;)Ljava/util/List; @@ -6526,50 +6196,23 @@ HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->getReq HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map; HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->newsResourceDao()Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao; HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->topicDao()Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$10;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$10;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$1;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$1;->createQuery()Ljava/lang/String; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$2;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$3;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$3;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$3;->createQuery()Ljava/lang/String; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$4;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$5;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$5;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$7;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$7;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$9;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;Landroidx/room/RoomSQLiteQuery;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$9;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;->deleteAuthors(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;->getAuthorEntities()Lkotlinx/coroutines/flow/SafeFlow; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;->insertOrIgnoreAuthors(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;->upsertAuthors(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$11;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$11;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$14;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$14;->call()Ljava/lang/Object; +HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$12;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Ljava/util/List;)V +HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$12;->call()Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$1;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomDatabase;)V HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$2;->(Landroidx/room/RoomDatabase;)V HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$2;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$2;->createQuery()Ljava/lang/String; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$3;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$3;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$3;->createQuery()Ljava/lang/String; +HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$3;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomDatabase;)V HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$4;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$4;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$4;->createQuery()Ljava/lang/String; HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$5;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$5;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$5;->createQuery()Ljava/lang/String; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$6;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$8;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$8;->call()Ljava/lang/Object; +HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$7;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Ljava/util/ArrayList;)V +HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$7;->call()Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$9;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Ljava/util/ArrayList;)V HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$9;->call()Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->(Landroidx/room/RoomDatabase;)V HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->deleteNewsResources(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->insertOrIgnoreAuthorCrossRefEntities(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->insertOrIgnoreTopicCrossRefEntities(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->upsertNewsResources(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$11;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;Ljava/util/List;)V @@ -6593,10 +6236,6 @@ HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;->delet HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;->getTopicEntities()Lkotlinx/coroutines/flow/SafeFlow; HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;->insertOrIgnoreTopics(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;->upsertTopics(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/model/AuthorEntity;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/model/AuthorEntityKt;->asExternalModel(Lcom/google/samples/apps/nowinandroid/core/database/model/AuthorEntity;)Lcom/google/samples/apps/nowinandroid/core/model/data/Author; -HSPLcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceAuthorCrossRef;->(Ljava/lang/String;Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceAuthorCrossRef;->hashCode()I HSPLcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/datetime/Instant;Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;)V HSPLcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef;->(Ljava/lang/String;Ljava/lang/String;)V HSPLcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef;->hashCode()I @@ -6604,8 +6243,7 @@ HSPLcom/google/samples/apps/nowinandroid/core/database/model/TopicEntity;->()V HSPLcom/google/samples/apps/nowinandroid/core/database/util/InstantConverter;->instantToLong(Lkotlinx/datetime/Instant;)Ljava/lang/Long; HSPLcom/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverter;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions;->(III)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions;->copy$default(Lcom/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions;IIII)Lcom/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions; +HSPLcom/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions;->(II)V HSPLcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto;->()V HSPLcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto;->(IILjava/lang/String;)V HSPLcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto;->values()[Lcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto; @@ -6654,10 +6292,8 @@ HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$2500(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$400(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$500(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;I)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$700(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;I)V HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$900(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;I)V HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->dynamicMethod(Lcom/google/protobuf/GeneratedMessageLite$MethodToInvoke;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getAuthorChangeListVersion()I HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getBookmarkedNewsResourceIdsMap()Ljava/util/Map; HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDarkThemeConfig()Lcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto; HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDefaultInstance()Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences; @@ -6665,7 +6301,6 @@ HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDep HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDeprecatedFollowedTopicIdsList()Ljava/util/List; HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDeprecatedIntFollowedAuthorIdsList()Ljava/util/List; HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDeprecatedIntFollowedTopicIdsList()Ljava/util/List; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getFollowedAuthorIdsMap()Ljava/util/Map; HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getFollowedTopicIdsMap()Ljava/util/Map; HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getHasDoneIntToStringIdMigration()Z HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getNewsResourceChangeListVersion()I @@ -6722,6 +6357,9 @@ HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationK HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt;->NiaNavigationBarItem(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/runtime/Composer;II)V HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaButtonDefaults;->()V HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaButtonDefaults;->buttonContentPadding(ZZZ)Landroidx/compose/foundation/layout/PaddingValuesImpl; +HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaNavigationDefaults;->navigationContentColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J +HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaNavigationDefaults;->navigationIndicatorColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J +HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaNavigationDefaults;->navigationSelectedItemColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaToggleButtonDefaults;->()V HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$1$1;->(Lkotlin/jvm/functions/Function1;Z)V HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$2$1;->(Lkotlin/jvm/functions/Function1;Z)V @@ -6770,19 +6408,8 @@ HSPLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase; HSPLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase;->invoke$enumunboxing$(I)Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1;)V HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository;Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;)V -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase$invoke$1$invokeSuspend$$inlined$sortedBy$1;->()V -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase$invoke$1$invokeSuspend$$inlined$sortedBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase$invoke$1;->(Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase$invoke$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository;Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;)V -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase;->invoke()Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; -HSPLcom/google/samples/apps/nowinandroid/core/domain/model/FollowableAuthor;->(Lcom/google/samples/apps/nowinandroid/core/model/data/Author;Z)V -HSPLcom/google/samples/apps/nowinandroid/core/domain/model/FollowableAuthor;->equals(Ljava/lang/Object;)Z HSPLcom/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic;->(Lcom/google/samples/apps/nowinandroid/core/model/data/Topic;Z)V HSPLcom/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic;->equals(Ljava/lang/Object;)Z -HSPLcom/google/samples/apps/nowinandroid/core/model/data/Author;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/model/data/Author;->equals(Ljava/lang/Object;)Z HSPLcom/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig;->()V HSPLcom/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig;->(ILjava/lang/String;)V HSPLcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;->()V @@ -6793,18 +6420,10 @@ HSPLcom/google/samples/apps/nowinandroid/core/model/data/ThemeBrand;->() HSPLcom/google/samples/apps/nowinandroid/core/model/data/ThemeBrand;->(ILjava/lang/String;)V HSPLcom/google/samples/apps/nowinandroid/core/model/data/Topic;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V HSPLcom/google/samples/apps/nowinandroid/core/model/data/Topic;->equals(Ljava/lang/Object;)Z -HSPLcom/google/samples/apps/nowinandroid/core/model/data/UserData;->(Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Lcom/google/samples/apps/nowinandroid/core/model/data/ThemeBrand;Lcom/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig;Z)V +HSPLcom/google/samples/apps/nowinandroid/core/model/data/UserData;->(Ljava/util/Set;Ljava/util/Set;Lcom/google/samples/apps/nowinandroid/core/model/data/ThemeBrand;Lcom/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig;Z)V HSPLcom/google/samples/apps/nowinandroid/core/model/data/UserData;->equals(Ljava/lang/Object;)Z HSPLcom/google/samples/apps/nowinandroid/core/network/di/NetworkModule$providesFakeAssetManager$1;->(Landroid/content/res/AssetManager;)V HSPLcom/google/samples/apps/nowinandroid/core/network/di/NetworkModule$providesFakeAssetManager$1;->open(Ljava/lang/String;)Ljava/io/InputStream; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthorChangeList$1;->(Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthorChangeList$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthorChangeList$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthorChangeList$2;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthors$2;->(Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthors$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthors$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthors$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$1;->(Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;Lkotlin/coroutines/Continuation;)V HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$2;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$2;->()V @@ -6822,31 +6441,23 @@ HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSou HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopics$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopics$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->(Lkotlinx/coroutines/scheduling/DefaultIoScheduler;Lkotlinx/serialization/json/Json;Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getAuthorChangeList(Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getAuthors(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getNewsResourceChangeList(Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getNewsResources(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getTopicChangeList(Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getTopics(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceKt;->access$mapToChangeList(Ljava/util/List;Lkotlin/jvm/internal/PropertyReference1Impl;)Ljava/util/ArrayList; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor$$serializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor$$serializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor$Companion;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor$Companion;->serializer()Lkotlinx/serialization/KSerializer; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList$Companion;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList;->(Ljava/lang/String;I)V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->()V +HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->childSerializers()[Lkotlinx/serialization/KSerializer; HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->typeParametersSerializers()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$Companion;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$Companion;->serializer()Lkotlinx/serialization/KSerializer; HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/datetime/Instant;Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;Ljava/util/List;Ljava/util/List;)V +HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/datetime/Instant;Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;Ljava/util/List;)V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$$serializer;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$$serializer;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; @@ -6857,9 +6468,12 @@ HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer;->()V +HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer;->()V HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackDisposableJank$1;->(Lkotlin/jvm/functions/Function2;Landroidx/metrics/performance/PerformanceMetricsState$Holder;)V HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackDisposableJank$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackJank$1;->(Lkotlin/jvm/functions/Function3;Landroidx/metrics/performance/PerformanceMetricsState$Holder;Lkotlin/coroutines/Continuation;)V @@ -6884,27 +6498,12 @@ HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Loading;->()V HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Success;->(Ljava/util/List;)V HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Success;->equals(Ljava/lang/Object;)Z -HSPLcom/google/samples/apps/nowinandroid/feature/author/navigation/AuthorNavigationKt$authorScreen$2;->(Lkotlin/jvm/functions/Function0;)V +HSPLcom/google/samples/apps/nowinandroid/di/JankStatsModule$providesOnFrameListener$1;->()V +HSPLcom/google/samples/apps/nowinandroid/di/JankStatsModule$providesOnFrameListener$1;->()V +HSPLcom/google/samples/apps/nowinandroid/di/JankStatsModule$providesOnFrameListener$1;->onFrame(Landroidx/metrics/performance/FrameData;)V HSPLcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt$lambda-1$1;->()V HSPLcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt$lambda-1$1;->()V HSPLcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$2$1;->(Lkotlin/jvm/functions/Function1;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$3;->(Ljava/lang/String;Lcom/google/samples/apps/nowinandroid/core/model/data/Author;Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$4$1$1$1;->(J)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$4$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$5;->(Lcom/google/samples/apps/nowinandroid/core/model/data/Author;ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$2$1;->(Lkotlin/jvm/functions/Function2;Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableAuthor;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$invoke$$inlined$items$default$2;->(Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$invoke$$inlined$items$default$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$invoke$$inlined$items$default$3;->(Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$invoke$$inlined$items$default$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$invoke$$inlined$items$default$4;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$invoke$$inlined$items$default$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt;->AuthorItem(Lcom/google/samples/apps/nowinandroid/core/model/data/Author;ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt;->AuthorsCarousel(Ljava/util/List;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-1$1;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-1$1;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @@ -6938,9 +6537,8 @@ HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$For HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$1;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$2;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$3;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$4;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$5;->(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$4;->(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;II)V +HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1$invokeSuspend$$inlined$doOnPreDraw$1;->(Landroid/view/View;Landroid/app/Activity;)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1$invokeSuspend$$inlined$doOnPreDraw$1;->run()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1;->(Landroid/view/View;Lkotlin/coroutines/Continuation;)V @@ -6954,7 +6552,7 @@ HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScr HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$2;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$2;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState;Lkotlin/jvm/functions/Function2;)V +HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState;Lkotlin/jvm/functions/Function2;)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$3;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$3;->()V @@ -6980,15 +6578,15 @@ HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSele HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$1;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$1;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$2;->(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;)V +HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$2;->(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->ForYouRoute(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->ForYouScreen(ZLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState;Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->ForYouScreen(ZLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState;Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->TopicIcon(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->access$SingleTopicButton(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->access$TopicSelection(Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Shown;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$onboardingUiState$1;->(Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$onboardingUiState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$onboardingUiState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$onboardingUiState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @@ -7004,25 +6602,24 @@ HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$ HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1;Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;->(Lcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor;Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;Lcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase;Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase;)V +HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;->(Lcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor;Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase;)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$LoadFailed;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$LoadFailed;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Loading;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Loading;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$NotShown;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$NotShown;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Shown;->(Ljava/util/List;Ljava/util/List;)V +HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Shown;->(Ljava/util/List;)V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Shown;->equals(Ljava/lang/Object;)Z HSPLcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt$lambda-1$1;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt$lambda-1$1;->()V HSPLcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigationKt$interestsGraph$1$1;->(Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$2;Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$1;)V +HSPLcom/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigationKt$interestsGraph$1$1;->(Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$1;)V HSPLcom/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigationKt$topicScreen$2;->(Lkotlin/jvm/functions/Function0;)V HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$1;->(Landroidx/navigation/NavHostController;)V -HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$2;->(Landroidx/navigation/NavHostController;)V -HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$3;->(Lkotlin/jvm/functions/Function0;)V -HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$2;->(Lkotlin/jvm/functions/Function0;)V +HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1;->(Landroidx/navigation/NavHostController;Lkotlin/jvm/functions/Function0;)V HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt;->NiaNavHost(Landroidx/navigation/NavHostController;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)V @@ -7050,13 +6647,10 @@ HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$sync HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$2;->(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)V HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$3;->(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2;->(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)V HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;Lcom/google/samples/apps/nowinandroid/core/data/repository/TopicsRepository;Lcom/google/samples/apps/nowinandroid/core/data/repository/NewsRepository;Lcom/google/samples/apps/nowinandroid/core/data/repository/AuthorsRepository;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;Lcom/google/samples/apps/nowinandroid/core/data/repository/TopicsRepository;Lcom/google/samples/apps/nowinandroid/core/data/repository/NewsRepository;Lkotlinx/coroutines/CoroutineDispatcher;)V HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;->doWork(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-1$1;->()V HSPLcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-1$1;->()V @@ -7090,11 +6684,11 @@ HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$2;-> HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$3;->(Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;)V HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1;->(ILandroidx/navigation/NavDestination;Ljava/util/List;Lkotlin/jvm/functions/Function1;)V +HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1;->(Ljava/util/List;Landroidx/navigation/NavDestination;Lkotlin/jvm/functions/Function1;I)V HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$WhenMappings;->()V HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt;->NiaApp(Landroidx/compose/material3/windowsizeclass/WindowSizeClass;Lcom/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor;Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt;->access$NiaBottomBar(Ljava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/navigation/NavDestination;Landroidx/compose/runtime/Composer;I)V +HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt;->access$NiaBottomBar(Ljava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/navigation/NavDestination;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt;->access$isTopLevelDestinationInHierarchy(Landroidx/navigation/NavDestination;Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;)Z HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V @@ -7167,6 +6761,7 @@ HSPLj$/time/LocalDateTime;->()V HSPLj$/time/LocalDateTime;->(Lj$/time/h;Lj$/time/l;)V HSPLj$/time/LocalDateTime;->H(Lj$/time/ZoneId;)Lj$/time/chrono/ChronoZonedDateTime; HSPLj$/time/LocalDateTime;->atZone(Lj$/time/ZoneId;)Lj$/time/ZonedDateTime; +HSPLj$/time/LocalDateTime;->b0(Lj$/time/h;Lj$/time/l;)Lj$/time/LocalDateTime; HSPLj$/time/LocalDateTime;->h0()Lj$/time/h; HSPLj$/time/LocalDateTime;->j(Lj$/time/temporal/q;)Z HSPLj$/time/LocalDateTime;->l()Lj$/time/l; @@ -7174,7 +6769,9 @@ HSPLj$/time/LocalDateTime;->n()Lj$/time/chrono/b; HSPLj$/time/OffsetDateTime;->()V HSPLj$/time/OffsetDateTime;->(Lj$/time/LocalDateTime;Lj$/time/ZoneOffset;)V HSPLj$/time/OffsetDateTime;->B(Lj$/time/LocalDateTime;Lj$/time/ZoneOffset;)Lj$/time/OffsetDateTime; +HSPLj$/time/OffsetDateTime;->parse(Ljava/lang/CharSequence;)Lj$/time/OffsetDateTime; HSPLj$/time/OffsetDateTime;->toInstant()Lj$/time/Instant; +HSPLj$/time/OffsetDateTime;->w(Lj$/time/temporal/TemporalAccessor;)Lj$/time/OffsetDateTime; HSPLj$/time/ZoneId;->()V HSPLj$/time/ZoneId;->()V HSPLj$/time/ZoneOffset;->()V @@ -7187,9 +6784,11 @@ HSPLj$/time/ZonedDateTime;->K(Lj$/time/LocalDateTime;Lj$/time/ZoneId;Lj$/time/Zo HSPLj$/time/ZonedDateTime;->l()Lj$/time/l; HSPLj$/time/ZonedDateTime;->n()Lj$/time/chrono/b; HSPLj$/time/ZonedDateTime;->o()Lj$/time/ZoneOffset; +HSPLj$/time/chrono/ChronoLocalDateTime;->v(Lj$/time/ZoneOffset;)J HSPLj$/time/chrono/ChronoZonedDateTime;->Y()J HSPLj$/time/chrono/a;->()V HSPLj$/time/chrono/a;->()V +HSPLj$/time/chrono/a;->D(Ljava/util/HashMap;Lj$/time/format/E;)Lj$/time/chrono/b; HSPLj$/time/chrono/a;->equals(Ljava/lang/Object;)Z HSPLj$/time/chrono/b;->j(Lj$/time/temporal/q;)Z HSPLj$/time/chrono/r;->()V @@ -7212,7 +6811,9 @@ HSPLj$/time/format/C;->()V HSPLj$/time/format/C;->a(C)I HSPLj$/time/format/D;->()V HSPLj$/time/format/D;->A(Lj$/time/chrono/b;)V +HSPLj$/time/format/D;->p(Lj$/time/temporal/TemporalAccessor;)V HSPLj$/time/format/D;->r()V +HSPLj$/time/format/D;->u(JJJJ)V HSPLj$/time/format/D;->z(Lj$/time/l;Lj$/time/s;)V HSPLj$/time/format/DateTimeFormatter;->()V HSPLj$/time/format/DateTimeFormatter;->(Lj$/time/format/f;Ljava/util/Locale;Lj$/time/format/C;Lj$/time/format/E;Ljava/util/Set;Lj$/time/chrono/k;Lj$/time/ZoneId;)V @@ -7233,6 +6834,7 @@ HSPLj$/time/format/e;->(C)V HSPLj$/time/format/e;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I HSPLj$/time/format/f;->(Ljava/util/ArrayList;Z)V HSPLj$/time/format/f;->([Lj$/time/format/g;Z)V +HSPLj$/time/format/f;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I HSPLj$/time/format/f;->a()Lj$/time/format/f; HSPLj$/time/format/h;->(Lj$/time/temporal/a;IIZ)V HSPLj$/time/format/h;->(Lj$/time/temporal/q;IIZI)V @@ -7247,6 +6849,7 @@ HSPLj$/time/format/k;->e()Lj$/time/format/k; HSPLj$/time/format/k;->f(I)Lj$/time/format/k; HSPLj$/time/format/l;->()V HSPLj$/time/format/l;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLj$/time/format/l;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I HSPLj$/time/format/r;->()V HSPLj$/time/format/r;->(Ljava/lang/String;I)V HSPLj$/time/format/r;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I @@ -7276,14 +6879,17 @@ HSPLj$/time/format/w;->s()V HSPLj$/time/format/w;->t()V HSPLj$/time/format/w;->v(Lj$/time/format/E;Lj$/time/chrono/r;)Lj$/time/format/DateTimeFormatter; HSPLj$/time/format/w;->w(Ljava/util/Locale;Lj$/time/format/E;Lj$/time/chrono/r;)Lj$/time/format/DateTimeFormatter; +HSPLj$/time/format/x;->(Lj$/time/format/DateTimeFormatter;)V HSPLj$/time/format/x;->e()Lj$/time/format/D; HSPLj$/time/format/x;->f(Z)V HSPLj$/time/format/x;->g()Lj$/time/format/C; HSPLj$/time/format/x;->h()Lj$/time/chrono/k; HSPLj$/time/format/x;->l()Z HSPLj$/time/format/x;->m(Z)V +HSPLj$/time/format/x;->o(Lj$/time/temporal/q;JII)I HSPLj$/time/format/x;->q(Z)V HSPLj$/time/format/x;->s(Ljava/lang/CharSequence;ILjava/lang/CharSequence;II)Z +HSPLj$/time/format/x;->t(Lj$/time/format/E;Ljava/util/Set;)Lj$/time/temporal/TemporalAccessor; HSPLj$/time/h;->()V HSPLj$/time/h;->(III)V HSPLj$/time/h;->B(III)Lj$/time/h; @@ -7291,6 +6897,7 @@ HSPLj$/time/h;->K(Lj$/time/temporal/TemporalAccessor;)Lj$/time/h; HSPLj$/time/h;->M()J HSPLj$/time/h;->N(Lj$/time/l;)Lj$/time/chrono/ChronoLocalDateTime; HSPLj$/time/h;->d(Lj$/time/temporal/t;)Ljava/lang/Object; +HSPLj$/time/h;->f0(III)Lj$/time/h; HSPLj$/time/h;->g()Lj$/time/chrono/k; HSPLj$/time/h;->j(Lj$/time/temporal/q;)Z HSPLj$/time/h;->y()Z @@ -7300,6 +6907,7 @@ HSPLj$/time/l;->()V HSPLj$/time/l;->(IIII)V HSPLj$/time/l;->B(IIII)Lj$/time/l; HSPLj$/time/l;->W()I +HSPLj$/time/l;->b0(IIII)Lj$/time/l; HSPLj$/time/l;->j(Lj$/time/temporal/q;)Z HSPLj$/time/l;->l0()I HSPLj$/time/s;->()V @@ -7372,8 +6980,10 @@ HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Lkotlin/Result$Failure HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V HSPLkotlin/SafePublicationLazyImpl;->()V HSPLkotlin/SafePublicationLazyImpl;->(Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/SafePublicationLazyImpl;->getValue()Ljava/lang/Object; HSPLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;)V HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object; +HSPLkotlin/TuplesKt;->toCanonicalHost(Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/UNINITIALIZED_VALUE;->()V HSPLkotlin/UNINITIALIZED_VALUE;->()V HSPLkotlin/Unit;->()V @@ -7444,6 +7054,7 @@ HSPLkotlin/collections/CollectionsKt__IteratorsJVMKt;->collectionSizeOrDefault(L HSPLkotlin/collections/CollectionsKt__IteratorsJVMKt;->flatten(Ljava/util/Collection;)Ljava/util/ArrayList; HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sort(Ljava/util/List;)V HSPLkotlin/collections/CollectionsKt__ReversedViewsKt;->addAll(Ljava/lang/Iterable;Ljava/util/Collection;)V +HSPLkotlin/collections/CollectionsKt__ReversedViewsKt;->removeLast(Ljava/util/ArrayList;)V HSPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->(Ljava/lang/Iterable;)V HSPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->asSequence(Ljava/lang/Iterable;)Lkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1; @@ -7477,7 +7088,6 @@ HSPLkotlin/collections/EmptyMap;->()V HSPLkotlin/collections/EmptyMap;->()V HSPLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set; -HSPLkotlin/collections/EmptyMap;->equals(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/collections/EmptyMap;->hashCode()I HSPLkotlin/collections/EmptyMap;->isEmpty()Z @@ -7488,7 +7098,6 @@ HSPLkotlin/collections/EmptySet;->()V HSPLkotlin/collections/EmptySet;->contains(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptySet;->equals(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptySet;->hashCode()I -HSPLkotlin/collections/EmptySet;->isEmpty()Z HSPLkotlin/collections/EmptySet;->iterator()Ljava/util/Iterator; HSPLkotlin/collections/EmptySet;->size()I HSPLkotlin/collections/IndexedValue;->(ILjava/lang/Object;)V @@ -7502,10 +7111,6 @@ HSPLkotlin/collections/MapsKt___MapsJvmKt;->toMap(Ljava/util/ArrayList;Ljava/uti HSPLkotlin/collections/MapsKt___MapsJvmKt;->toMap(Ljava/util/Map;)Ljava/util/Map; HSPLkotlin/collections/MapsKt___MapsJvmKt;->toMutableMap(Ljava/util/Map;)Ljava/util/LinkedHashMap; HSPLkotlin/collections/SetsKt;->plus(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/LinkedHashSet; -HSPLkotlin/collections/SetsKt__SetsKt;->build(Lkotlin/collections/builders/SetBuilder;)Lkotlin/collections/builders/SetBuilder; -HSPLkotlin/collections/SetsKt__SetsKt;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner; -HSPLkotlin/collections/SetsKt__SetsKt;->setOf(Ljava/lang/Object;)Ljava/util/Set; -HSPLkotlin/collections/SetsKt__SetsKt;->setOf([Ljava/lang/Object;)Ljava/util/Set; HSPLkotlin/collections/builders/ListBuilder;->()V HSPLkotlin/collections/builders/ListBuilder;->(I)V HSPLkotlin/collections/builders/ListBuilder;->([Ljava/lang/Object;IIZLkotlin/collections/builders/ListBuilder;Lkotlin/collections/builders/ListBuilder;)V @@ -7534,7 +7139,6 @@ HSPLkotlin/collections/builders/SetBuilder;->contains(Ljava/lang/Object;)Z HSPLkotlin/collections/builders/SetBuilder;->getSize()I HSPLkotlin/collections/builders/SetBuilder;->isEmpty()Z HSPLkotlin/collections/builders/SetBuilder;->iterator()Ljava/util/Iterator; -HSPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I HSPLkotlin/comparisons/NaturalOrderComparator;->()V HSPLkotlin/comparisons/NaturalOrderComparator;->()V HSPLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I @@ -7552,7 +7156,6 @@ HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V HSPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V @@ -7567,6 +7170,8 @@ HSPLkotlin/coroutines/SafeContinuation;->(Lkotlin/coroutines/intrinsics/Co HSPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->()V HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->(ILjava/lang/String;)V +HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;->createCoroutineUnintercepted(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)Lkotlin/coroutines/Continuation; +HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->(Lkotlin/coroutines/Continuation;)V HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V @@ -7583,6 +7188,7 @@ HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->(ILkotlin/coroutines/Co HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I HSPLkotlin/internal/PlatformImplementations;->()V HSPLkotlin/internal/PlatformImplementationsKt;->()V +HSPLkotlin/internal/ProgressionUtilKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I HSPLkotlin/internal/jdk7/JDK7PlatformImplementations;->()V HSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V @@ -7636,8 +7242,6 @@ HSPLkotlin/jvm/internal/Ref$IntRef;->()V HSPLkotlin/jvm/internal/Ref$ObjectRef;->()V HSPLkotlin/jvm/internal/Reflection;->()V HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/jvm/internal/ClassReference; -HSPLkotlin/jvm/internal/Reflection;->typeOf(Ljava/lang/Class;)Lkotlin/jvm/internal/TypeReference; -HSPLkotlin/jvm/internal/Reflection;->typeOf(Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/jvm/internal/TypeReference; HSPLkotlin/jvm/internal/ReflectionFactory;->()V HSPLkotlin/jvm/internal/SpreadBuilder;->()V HSPLkotlin/jvm/internal/SpreadBuilder;->addSpread(Ljava/lang/Object;)V @@ -7719,6 +7323,7 @@ HSPLkotlin/text/CharsKt__CharKt;->equals(CCZ)Z HSPLkotlin/text/CharsKt__CharKt;->isWhitespace(C)Z HSPLkotlin/text/Charsets;->()V HSPLkotlin/text/Regex;->(Ljava/lang/String;)V +HSPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([CII)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith(Ljava/lang/String;Ljava/lang/String;Z)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->equals(Ljava/lang/String;Ljava/lang/String;)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z @@ -7735,15 +7340,15 @@ HSPLkotlin/text/StringsKt__StringsKt;->indexOf$StringsKt__StringsKt(Ljava/lang/C HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;CIZI)I HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZI)I HSPLkotlin/text/StringsKt__StringsKt;->indexOf(ILjava/lang/CharSequence;Ljava/lang/String;Z)I +HSPLkotlin/text/StringsKt__StringsKt;->indexOfAny(ILjava/lang/CharSequence;Z[C)I HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CII)I HSPLkotlin/text/StringsKt__StringsKt;->removePrefix(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String; -HSPLkotlin/text/StringsKt__StringsKt;->substringBefore$default(Ljava/lang/String;C)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; -HSPLkotlin/text/UStringsKt;->getViewModelScope(Landroidx/lifecycle/ViewModel;)Lkotlinx/coroutines/CoroutineScope; HSPLkotlin/time/Duration;->()V HSPLkotlin/time/DurationJvmKt;->()V HSPLkotlin/time/DurationKt;->durationOfMillis(J)J +HSPLkotlin/time/DurationUnitKt__DurationUnitKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V HSPLkotlinx/coroutines/AbstractCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V HSPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V HSPLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String; @@ -7794,7 +7399,6 @@ HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Objec HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/CancellableContinuationImplKt;->()V @@ -7893,14 +7497,8 @@ HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->equals(Ljava/lang/Objec HSPLkotlinx/coroutines/GlobalScope;->()V HSPLkotlinx/coroutines/GlobalScope;->()V HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/InvokeOnCancel;->(Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/InvokeOnCancelling;->()V -HSPLkotlinx/coroutines/InvokeOnCancelling;->(Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/InvokeOnCompletion;->(Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZLkotlinx/coroutines/JobNode;I)Lkotlinx/coroutines/DisposableHandle; HSPLkotlinx/coroutines/Job$Key;->()V @@ -7912,9 +7510,22 @@ HSPLkotlinx/coroutines/JobCancellingNode;->()V HSPLkotlinx/coroutines/JobImpl;->(Lkotlinx/coroutines/Job;)V HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/JobKt;->()V +HSPLkotlinx/coroutines/JobKt;->()V +HSPLkotlinx/coroutines/JobKt;->binarySearch(II[I)I +HSPLkotlinx/coroutines/JobKt;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; +HSPLkotlinx/coroutines/JobKt;->createDefault-FO1MlWM(Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; +HSPLkotlinx/coroutines/JobKt;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V HSPLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; HSPLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z +HSPLkotlinx/coroutines/JobKt__FutureKt;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState; +HSPLkotlinx/coroutines/JobKt__FutureKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState; +HSPLkotlinx/coroutines/JobKt__FutureKt;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; +HSPLkotlinx/coroutines/JobKt__FutureKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; +HSPLkotlinx/coroutines/JobKt__FutureKt;->observeDerivedStateRecalculations(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLkotlinx/coroutines/JobKt__FutureKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState; +HSPLkotlinx/coroutines/JobKt__FutureKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/SafeFlow; HSPLkotlinx/coroutines/JobNode;->()V HSPLkotlinx/coroutines/JobNode;->dispose()V HSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport; @@ -7981,6 +7592,7 @@ HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/la HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z HSPLkotlinx/coroutines/JobSupportKt;->()V HSPLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupportKt;->valueIterator(Landroidx/collection/SparseArrayCompat;)Landroidx/collection/SparseArrayKt$valueIterator$1; HSPLkotlinx/coroutines/MainCoroutineDispatcher;->()V HSPLkotlinx/coroutines/NodeList;->()V HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList; @@ -7988,28 +7600,15 @@ HSPLkotlinx/coroutines/NodeList;->isActive()Z HSPLkotlinx/coroutines/NonDisposableHandle;->()V HSPLkotlinx/coroutines/NonDisposableHandle;->()V HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V -HSPLkotlinx/coroutines/RemoveOnCancel;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->(Lkotlinx/coroutines/JobSupport$AwaitContinuation;)V HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->invoke(Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/ResumeOnCompletion;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V HSPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/StandaloneCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V HSPLkotlinx/coroutines/SupervisorJobImpl;->(Lkotlinx/coroutines/Job;)V -HSPLkotlinx/coroutines/SupervisorKt;->Constraints$default(III)J -HSPLkotlinx/coroutines/SupervisorKt;->Constraints(IIII)J HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default()Lkotlinx/coroutines/SupervisorJobImpl; -HSPLkotlinx/coroutines/SupervisorKt;->constrain-4WqzIAM(JJ)J -HSPLkotlinx/coroutines/SupervisorKt;->constrain-N9IONVI(JJ)J -HSPLkotlinx/coroutines/SupervisorKt;->constrainHeight-K40F9xA(JI)I -HSPLkotlinx/coroutines/SupervisorKt;->constrainWidth-K40F9xA(JI)I -HSPLkotlinx/coroutines/SupervisorKt;->getSafeDrawing(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/UnionInsets; -HSPLkotlinx/coroutines/SupervisorKt;->offset-NN6Ew-U(IIJ)J -HSPLkotlinx/coroutines/SupervisorKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues; HSPLkotlinx/coroutines/ThreadLocalEventLoop;->()V HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoop; -HSPLkotlinx/coroutines/ThreadState;->()V -HSPLkotlinx/coroutines/ThreadState;->(Lkotlinx/coroutines/Job;)V -HSPLkotlinx/coroutines/ThreadState;->setup()V HSPLkotlinx/coroutines/Unconfined;->()V HSPLkotlinx/coroutines/Unconfined;->()V HSPLkotlinx/coroutines/UndispatchedCoroutine;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V @@ -8068,7 +7667,6 @@ HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->getPollResult HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->tryResumeSend()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/channels/AbstractSendChannel;->()V HSPLkotlinx/coroutines/channels/AbstractSendChannel;->(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->enqueueSend(Lkotlinx/coroutines/channels/SendElement;)Ljava/lang/Object; HSPLkotlinx/coroutines/channels/AbstractSendChannel;->getClosedForSend()Lkotlinx/coroutines/channels/Closed; HSPLkotlinx/coroutines/channels/AbstractSendChannel;->invokeOnClose(Lkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;)V HSPLkotlinx/coroutines/channels/AbstractSendChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object; @@ -8119,13 +7717,7 @@ HSPLkotlinx/coroutines/channels/Receive;->getOfferResult()Ljava/lang/Object; HSPLkotlinx/coroutines/channels/Receive;->resumeOnCancellationFun(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; HSPLkotlinx/coroutines/channels/RendezvousChannel;->(Lkotlin/jvm/functions/Function1;)V HSPLkotlinx/coroutines/channels/RendezvousChannel;->isBufferAlwaysEmpty()Z -HSPLkotlinx/coroutines/channels/RendezvousChannel;->isBufferAlwaysFull()Z -HSPLkotlinx/coroutines/channels/RendezvousChannel;->isBufferFull()Z HSPLkotlinx/coroutines/channels/Send;->()V -HSPLkotlinx/coroutines/channels/SendElement;->(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLkotlinx/coroutines/channels/SendElement;->completeResumeSend()V -HSPLkotlinx/coroutines/channels/SendElement;->getPollResult()Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/SendElement;->tryResumeSend()Lkotlinx/coroutines/internal/Symbol; HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/AbstractFlow;->()V HSPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -8139,6 +7731,12 @@ HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->(Lkotlinx/corouti HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->(Lkotlinx/coroutines/flow/Flow;)V HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->firstOrNull(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/ReadonlyStateFlow; HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->(Ljava/lang/Object;)V HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->(Lkotlin/coroutines/Continuation;)V @@ -8182,11 +7780,6 @@ HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljav HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;Lkotlin/coroutines/Continuation;)V HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function4;)V -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->([Lkotlinx/coroutines/flow/Flow;Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$onboardingUiState$1;)V -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V @@ -8309,7 +7902,6 @@ HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->(Lkotli HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/CombineKt;->combineInternal(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;)Ljava/lang/Object; HSPLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;->(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Throwable;)V HSPLkotlinx/coroutines/flow/internal/FlowCoroutine;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V @@ -8400,9 +7992,6 @@ HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z HSPLkotlinx/coroutines/internal/Segment;->()V HSPLkotlinx/coroutines/internal/Segment;->(JLkotlinx/coroutines/internal/Segment;I)V HSPLkotlinx/coroutines/internal/Symbol;->(Ljava/lang/String;)V -HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;IIII)I -HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;JJJ)J -HSPLkotlinx/coroutines/internal/SystemPropsKt;->toAndroidRect(Landroidx/compose/ui/geometry/Rect;)Landroid/graphics/Rect; HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->()V HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V @@ -8477,10 +8066,10 @@ HSPLkotlinx/coroutines/sync/MutexKt;->Mutex$default()Lkotlinx/coroutines/sync/Mu HSPLkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1;->(Lkotlinx/coroutines/sync/SemaphoreImpl;)V HSPLkotlinx/coroutines/sync/SemaphoreImpl;->()V HSPLkotlinx/coroutines/sync/SemaphoreImpl;->(II)V -HSPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lcoil/decode/BitmapFactoryDecoder$decode$1;)Ljava/lang/Object; HSPLkotlinx/coroutines/sync/SemaphoreKt;->()V HSPLkotlinx/coroutines/sync/SemaphoreSegment;->(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V HSPLkotlinx/datetime/Instant$Companion;->()V +HSPLkotlinx/datetime/Instant$Companion;->parse(Ljava/lang/String;)Lkotlinx/datetime/Instant; HSPLkotlinx/datetime/Instant;->()V HSPLkotlinx/datetime/Instant;->(Lj$/time/Instant;)V HSPLkotlinx/serialization/SerializersCacheKt$PARAMETRIZED_SERIALIZERS_CACHE$1;->()V @@ -8519,6 +8108,8 @@ HSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V HSPLkotlinx/serialization/descriptors/PrimitiveKind;->()V HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->PrimitiveSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind$STRING;)Lkotlinx/serialization/internal/PrimitiveSerialDescriptor; HSPLkotlinx/serialization/descriptors/SerialKind;->()V +HSPLkotlinx/serialization/descriptors/SerialKind;->hashCode()I +HSPLkotlinx/serialization/descriptors/SerialKind;->toString()Ljava/lang/String; HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V HSPLkotlinx/serialization/descriptors/StructureKind$LIST;->()V @@ -8528,9 +8119,13 @@ HSPLkotlinx/serialization/descriptors/StructureKind$MAP;->()V HSPLkotlinx/serialization/descriptors/StructureKind;->(I)V HSPLkotlinx/serialization/encoding/AbstractDecoder;->()V HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSequentially()V +HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeStringElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String; HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->()V HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->merge(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; HSPLkotlinx/serialization/internal/ArrayListClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/internal/ArrayListClassDesc;->getSerialName()Ljava/lang/String; +HSPLkotlinx/serialization/internal/ArrayListSerializer;->(Lkotlinx/serialization/KSerializer;)V HSPLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/lang/Object; HSPLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/lang/Object;)I HSPLkotlinx/serialization/internal/ArrayListSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; @@ -8593,18 +8188,28 @@ HSPLkotlinx/serialization/internal/ObjectSerializer;->(Lkotlin/Unit;)V HSPLkotlinx/serialization/internal/ParametrizedCacheEntry;->()V HSPLkotlinx/serialization/internal/PlatformKt;->constructSerializerForGivenTypeArgs(Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; HSPLkotlinx/serialization/internal/Platform_commonKt;->()V +HSPLkotlinx/serialization/internal/Platform_commonKt;->compactArray(Ljava/util/List;)[Lkotlinx/serialization/descriptors/SerialDescriptor; HSPLkotlinx/serialization/internal/Platform_commonKt;->kclass(Lkotlin/reflect/KType;)Lkotlin/reflect/KClass; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Object; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()Ljava/lang/Object; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()Ljava/lang/Object; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement(Ljava/lang/String;Z)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementAnnotations(I)Ljava/util/List; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementDescriptor(I)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementIndex(Ljava/lang/String;)I HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementsCount()I HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getSerialName()Ljava/lang/String; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->hashCode()I +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt;->hashCodeImpl(Lkotlinx/serialization/descriptors/SerialDescriptor;[Lkotlinx/serialization/descriptors/SerialDescriptor;)I HSPLkotlinx/serialization/internal/PrimitiveArrayDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V HSPLkotlinx/serialization/internal/PrimitiveArraySerializer;->(Lkotlinx/serialization/KSerializer;)V HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)V +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getSerialName()Ljava/lang/String; HSPLkotlinx/serialization/internal/PrimitivesKt;->()V HSPLkotlinx/serialization/internal/PrimitivesKt;->capitalize(Ljava/lang/String;)Ljava/lang/String; @@ -8652,40 +8257,45 @@ HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->decodedString(II)Lja HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->isValidValueStart(C)Z HSPLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->charToTokenClass(C)B HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->([C)V +HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->charAt(I)C HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->length()I HSPLkotlinx/serialization/json/internal/CharMappings;->()V HSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(CI)V HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;->()V HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->()V +HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->get(Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/lang/Object; HSPLkotlinx/serialization/json/internal/JavaStreamSerialReader;->(Ljava/io/InputStream;)V HSPLkotlinx/serialization/json/internal/JavaStreamSerialReader;->read([CII)I HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->()V +HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->buildAlternativeNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/util/Map; HSPLkotlinx/serialization/json/internal/JsonPath;->()V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->(Lkotlinx/serialization/json/internal/JavaStreamSerialReader;)V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->appendRange(II)V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeNextToken()B +HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->ensureHaveChars()V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Ljava/lang/CharSequence; HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->preload(I)V HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->substring(II)Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->tryConsumeComma()Z +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->(Lkotlinx/serialization/json/Json;ILkotlinx/serialization/json/internal/AbstractJsonLexer;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object; HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeString()Ljava/lang/String; HSPLkotlinx/serialization/json/internal/WriteMode$EnumUnboxingLocalUtility;->getBegin(I)C HSPLkotlinx/serialization/json/internal/WriteMode$EnumUnboxingLocalUtility;->getEnd(I)C HSPLkotlinx/serialization/modules/SerialModuleImpl;->()V HSPLkotlinx/serialization/modules/SerializersModuleKt;->()V HSPLokhttp3/Address;->(Ljava/lang/String;ILokhttp3/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lokhttp3/CertificatePinner;Lokhttp3/Authenticator;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V -HSPLokhttp3/Address;->equalsNonHost$okhttp(Lokhttp3/Address;)Z HSPLokhttp3/Address;->hashCode()I HSPLokhttp3/Authenticator$Companion$AuthenticatorNone;->()V HSPLokhttp3/Authenticator;->()V HSPLokhttp3/CacheControl$Builder;->()V HSPLokhttp3/CacheControl$Builder;->build()Lokhttp3/CacheControl; -HSPLokhttp3/CacheControl$Companion;->indexOfElement(ILjava/lang/String;Ljava/lang/String;)I HSPLokhttp3/CacheControl$Companion;->parse(Lokhttp3/Headers;)Lokhttp3/CacheControl; HSPLokhttp3/CacheControl;->()V HSPLokhttp3/CacheControl;->(ZZIIZZZIIZZZLjava/lang/String;)V HSPLokhttp3/CertificatePinner;->()V HSPLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V -HSPLokhttp3/CertificatePinner;->equals(Ljava/lang/Object;)Z HSPLokhttp3/CertificatePinner;->hashCode()I HSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->()V HSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I @@ -8706,7 +8316,6 @@ HSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Lokhttp3/TlsVersion;)V HSPLokhttp3/ConnectionSpec;->()V HSPLokhttp3/ConnectionSpec;->(ZZ[Ljava/lang/String;[Ljava/lang/String;)V HSPLokhttp3/ConnectionSpec;->cipherSuites()Ljava/util/List; -HSPLokhttp3/ConnectionSpec;->equals(Ljava/lang/Object;)Z HSPLokhttp3/ConnectionSpec;->hashCode()I HSPLokhttp3/ConnectionSpec;->isCompatible(Ljavax/net/ssl/SSLSocket;)Z HSPLokhttp3/ConnectionSpec;->tlsVersions()Ljava/util/List; @@ -8714,7 +8323,6 @@ HSPLokhttp3/CookieJar$Companion$NoCookies;->()V HSPLokhttp3/CookieJar$Companion$NoCookies;->loadForRequest(Lokhttp3/HttpUrl;)V HSPLokhttp3/CookieJar;->()V HSPLokhttp3/Dispatcher;->()V -HSPLokhttp3/Dispatcher;->finished$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V HSPLokhttp3/Dispatcher;->promoteAndExecute()V HSPLokhttp3/Dns$Companion$DnsSystem;->()V HSPLokhttp3/Dns$Companion$DnsSystem;->lookup(Ljava/lang/String;)Ljava/util/List; @@ -8722,10 +8330,6 @@ HSPLokhttp3/Dns;->()V HSPLokhttp3/EventListener$Companion$NONE$1;->()V HSPLokhttp3/EventListener;->()V HSPLokhttp3/EventListener;->()V -HSPLokhttp3/Handshake$Companion$handshake$1;->(Ljava/util/List;)V -HSPLokhttp3/Handshake$Companion;->get(Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake; -HSPLokhttp3/Handshake$peerCertificates$2;->(Lkotlin/jvm/functions/Function0;)V -HSPLokhttp3/Handshake;->(Lokhttp3/TlsVersion;Lokhttp3/CipherSuite;Ljava/util/List;Lkotlin/jvm/functions/Function0;)V HSPLokhttp3/Headers$Builder;->()V HSPLokhttp3/Headers$Builder;->addLenient$okhttp(Ljava/lang/String;Ljava/lang/String;)V HSPLokhttp3/Headers$Builder;->build()Lokhttp3/Headers; @@ -8734,7 +8338,6 @@ HSPLokhttp3/Headers$Companion;->checkName(Ljava/lang/String;)V HSPLokhttp3/Headers$Companion;->checkValue(Ljava/lang/String;Ljava/lang/String;)V HSPLokhttp3/Headers$Companion;->of([Ljava/lang/String;)Lokhttp3/Headers; HSPLokhttp3/Headers;->([Ljava/lang/String;)V -HSPLokhttp3/Headers;->equals(Ljava/lang/Object;)Z HSPLokhttp3/Headers;->get(Ljava/lang/String;)Ljava/lang/String; HSPLokhttp3/Headers;->name(I)Ljava/lang/String; HSPLokhttp3/Headers;->newBuilder()Lokhttp3/Headers$Builder; @@ -8754,20 +8357,15 @@ HSPLokhttp3/HttpUrl$Companion;->toQueryString$okhttp(Ljava/util/List;Ljava/lang/ HSPLokhttp3/HttpUrl;->()V HSPLokhttp3/HttpUrl;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/util/ArrayList;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;)V HSPLokhttp3/HttpUrl;->encodedPassword()Ljava/lang/String; -HSPLokhttp3/HttpUrl;->encodedPath()Ljava/lang/String; HSPLokhttp3/HttpUrl;->encodedPathSegments()Ljava/util/ArrayList; HSPLokhttp3/HttpUrl;->encodedQuery()Ljava/lang/String; HSPLokhttp3/HttpUrl;->encodedUsername()Ljava/lang/String; HSPLokhttp3/HttpUrl;->hashCode()I HSPLokhttp3/HttpUrl;->redact()Ljava/lang/String; HSPLokhttp3/HttpUrl;->uri()Ljava/net/URI; -HSPLokhttp3/MediaType$Companion;->get(Ljava/lang/String;)Lokhttp3/MediaType; -HSPLokhttp3/MediaType;->()V -HSPLokhttp3/MediaType;->(Ljava/lang/String;)V HSPLokhttp3/OkHttpClient;->()V HSPLokhttp3/OkHttpClient;->()V HSPLokhttp3/OkHttpClient;->newCall(Lokhttp3/Request;)Lokhttp3/internal/connection/RealCall; -HSPLokhttp3/Protocol$Companion;->get(Ljava/lang/String;)Lokhttp3/Protocol; HSPLokhttp3/Protocol;->()V HSPLokhttp3/Protocol;->(ILjava/lang/String;Ljava/lang/String;)V HSPLokhttp3/Request$Builder;->()V @@ -8778,116 +8376,60 @@ HSPLokhttp3/Request;->(Lokhttp3/HttpUrl;Ljava/lang/String;Lokhttp3/Headers HSPLokhttp3/Request;->cacheControl()Lokhttp3/CacheControl; HSPLokhttp3/RequestBody$Companion$toRequestBody$2;->(IILokhttp3/MediaType;[B)V HSPLokhttp3/RequestBody;->()V -HSPLokhttp3/Response$Builder;->()V -HSPLokhttp3/Response$Builder;->(Lokhttp3/Response;)V -HSPLokhttp3/Response$Builder;->build()Lokhttp3/Response; -HSPLokhttp3/Response$Builder;->checkSupportResponse(Ljava/lang/String;Lokhttp3/Response;)V -HSPLokhttp3/Response;->(Lokhttp3/Request;Lokhttp3/Protocol;Ljava/lang/String;ILokhttp3/Handshake;Lokhttp3/Headers;Lokhttp3/ResponseBody;Lokhttp3/Response;Lokhttp3/Response;Lokhttp3/Response;JJLokhttp3/internal/connection/Exchange;)V -HSPLokhttp3/Response;->cacheControl()Lokhttp3/CacheControl; -HSPLokhttp3/Response;->close()V -HSPLokhttp3/Response;->header$default(Lokhttp3/Response;Ljava/lang/String;)Ljava/lang/String; HSPLokhttp3/ResponseBody$Companion$asResponseBody$1;->(JLokhttp3/MediaType;Lokio/Buffer;)V HSPLokhttp3/ResponseBody;->()V -HSPLokhttp3/ResponseBody;->close()V HSPLokhttp3/Route;->(Lokhttp3/Address;Ljava/net/Proxy;Ljava/net/InetSocketAddress;)V HSPLokhttp3/Route;->hashCode()I HSPLokhttp3/TlsVersion$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/TlsVersion; HSPLokhttp3/TlsVersion;->()V HSPLokhttp3/TlsVersion;->(ILjava/lang/String;Ljava/lang/String;)V -HSPLokhttp3/internal/HostnamesKt;->toCanonicalHost(Ljava/lang/String;)Ljava/lang/String; HSPLokhttp3/internal/Util$$ExternalSyntheticLambda0;->(Ljava/lang/String;Z)V HSPLokhttp3/internal/Util$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; HSPLokhttp3/internal/Util$$ExternalSyntheticLambda1;->(Lokhttp3/EventListener$Companion$NONE$1;)V HSPLokhttp3/internal/Util;->()V -HSPLokhttp3/internal/Util;->closeQuietly(Ljava/io/Closeable;)V -HSPLokhttp3/internal/Util;->closeQuietly(Ljava/net/Socket;)V HSPLokhttp3/internal/Util;->delimiterOffset(IILjava/lang/String;Ljava/lang/String;)I HSPLokhttp3/internal/Util;->delimiterOffset(Ljava/lang/String;CII)I -HSPLokhttp3/internal/Util;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; HSPLokhttp3/internal/Util;->hasIntersection([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)Z -HSPLokhttp3/internal/Util;->headersContentLength(Lokhttp3/Response;)J HSPLokhttp3/internal/Util;->immutableListOf([Ljava/lang/Object;)Ljava/util/List; HSPLokhttp3/internal/Util;->indexOfFirstNonAsciiWhitespace(IILjava/lang/String;)I HSPLokhttp3/internal/Util;->indexOfLastNonAsciiWhitespace(IILjava/lang/String;)I HSPLokhttp3/internal/Util;->intersect([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)[Ljava/lang/String; HSPLokhttp3/internal/Util;->parseHexDigit(C)I -HSPLokhttp3/internal/Util;->readMedium(Lokio/BufferedSource;)I -HSPLokhttp3/internal/Util;->toHeaders(Ljava/util/List;)Lokhttp3/Headers; HSPLokhttp3/internal/Util;->toHostHeader(Lokhttp3/HttpUrl;Z)Ljava/lang/String; HSPLokhttp3/internal/Util;->toImmutableList(Ljava/util/List;)Ljava/util/List; -HSPLokhttp3/internal/Util;->toNonNegativeInt(ILjava/lang/String;)I HSPLokhttp3/internal/cache/CacheInterceptor$Companion;->()V -HSPLokhttp3/internal/cache/CacheInterceptor$Companion;->access$stripBody(Lokhttp3/Response;)Lokhttp3/Response; HSPLokhttp3/internal/cache/CacheInterceptor;->()V HSPLokhttp3/internal/cache/CacheInterceptor;->()V HSPLokhttp3/internal/cache/CacheInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; HSPLokhttp3/internal/cache/CacheStrategy;->(Lokhttp3/Request;Lokhttp3/Response;)V HSPLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;Z)V -HSPLokhttp3/internal/concurrent/TaskQueue$execute$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;)V -HSPLokhttp3/internal/concurrent/TaskQueue$execute$1;->runOnce()J HSPLokhttp3/internal/concurrent/TaskQueue;->(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/String;)V -HSPLokhttp3/internal/concurrent/TaskQueue;->cancelAllAndDecide$okhttp()Z -HSPLokhttp3/internal/concurrent/TaskQueue;->schedule(Lokhttp3/internal/concurrent/Task;J)V -HSPLokhttp3/internal/concurrent/TaskQueue;->scheduleAndDecide$okhttp(Lokhttp3/internal/concurrent/Task;JZ)Z -HSPLokhttp3/internal/concurrent/TaskQueue;->shutdown()V HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->(Lokhttp3/internal/Util$$ExternalSyntheticLambda0;)V -HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorNotify(Lokhttp3/internal/concurrent/TaskRunner;)V -HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorWait(Lokhttp3/internal/concurrent/TaskRunner;J)V -HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->execute(Ljava/lang/Runnable;)V -HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->nanoTime()J HSPLokhttp3/internal/concurrent/TaskRunner$runnable$1;->(Lokhttp3/internal/concurrent/TaskRunner;)V -HSPLokhttp3/internal/concurrent/TaskRunner$runnable$1;->run()V HSPLokhttp3/internal/concurrent/TaskRunner;->()V HSPLokhttp3/internal/concurrent/TaskRunner;->(Lokhttp3/internal/concurrent/TaskRunner$RealBackend;)V -HSPLokhttp3/internal/concurrent/TaskRunner;->access$runTask(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/concurrent/Task;)V -HSPLokhttp3/internal/concurrent/TaskRunner;->afterRun(Lokhttp3/internal/concurrent/Task;J)V -HSPLokhttp3/internal/concurrent/TaskRunner;->awaitTaskToRun()Lokhttp3/internal/concurrent/Task; -HSPLokhttp3/internal/concurrent/TaskRunner;->kickCoordinator$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V HSPLokhttp3/internal/concurrent/TaskRunner;->newQueue()Lokhttp3/internal/concurrent/TaskQueue; HSPLokhttp3/internal/connection/ConnectInterceptor;->()V HSPLokhttp3/internal/connection/ConnectInterceptor;->()V HSPLokhttp3/internal/connection/ConnectInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; HSPLokhttp3/internal/connection/ConnectionSpecSelector;->(Ljava/util/List;)V HSPLokhttp3/internal/connection/ConnectionSpecSelector;->configureSecureSocket(Ljavax/net/ssl/SSLSocket;)Lokhttp3/ConnectionSpec; -HSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->(Lokhttp3/internal/connection/Exchange;Lokio/Source;J)V -HSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->close()V -HSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->complete(Ljava/io/IOException;)Ljava/io/IOException; -HSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->read(Lokio/Buffer;J)J -HSPLokhttp3/internal/connection/Exchange;->(Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;Lokhttp3/internal/connection/ExchangeFinder;Lokhttp3/internal/http/ExchangeCodec;)V -HSPLokhttp3/internal/connection/Exchange;->bodyComplete(ZZLjava/io/IOException;)Ljava/io/IOException; -HSPLokhttp3/internal/connection/Exchange;->readResponseHeaders(Z)Lokhttp3/Response$Builder; HSPLokhttp3/internal/connection/ExchangeFinder;->(Lokhttp3/internal/connection/RealConnectionPool;Lokhttp3/Address;Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;)V HSPLokhttp3/internal/connection/ExchangeFinder;->findHealthyConnection(IIIZZ)Lokhttp3/internal/connection/RealConnection; -HSPLokhttp3/internal/connection/ExchangeFinder;->sameHostAndPort(Lokhttp3/HttpUrl;)Z HSPLokhttp3/internal/connection/RealCall$AsyncCall;->(Lokhttp3/internal/connection/RealCall;Lcoil/util/ContinuationCallback;)V HSPLokhttp3/internal/connection/RealCall$AsyncCall;->run()V -HSPLokhttp3/internal/connection/RealCall$CallReference;->(Lokhttp3/internal/connection/RealCall;Ljava/lang/Object;)V HSPLokhttp3/internal/connection/RealCall$timeout$1;->(Lokhttp3/internal/connection/RealCall;)V HSPLokhttp3/internal/connection/RealCall;->(Lokhttp3/OkHttpClient;Lokhttp3/Request;Z)V -HSPLokhttp3/internal/connection/RealCall;->acquireConnectionNoEvents(Lokhttp3/internal/connection/RealConnection;)V -HSPLokhttp3/internal/connection/RealCall;->callDone(Ljava/io/IOException;)Ljava/io/IOException; HSPLokhttp3/internal/connection/RealCall;->enqueue(Lcoil/util/ContinuationCallback;)V -HSPLokhttp3/internal/connection/RealCall;->exitNetworkInterceptorExchange$okhttp(Z)V HSPLokhttp3/internal/connection/RealCall;->getResponseWithInterceptorChain$okhttp()Lokhttp3/Response; -HSPLokhttp3/internal/connection/RealCall;->messageDone$okhttp(Lokhttp3/internal/connection/Exchange;ZZLjava/io/IOException;)Ljava/io/IOException; -HSPLokhttp3/internal/connection/RealCall;->noMoreExchanges$okhttp(Ljava/io/IOException;)Ljava/io/IOException; -HSPLokhttp3/internal/connection/RealCall;->releaseConnectionNoEvents$okhttp()Ljava/net/Socket; HSPLokhttp3/internal/connection/RealConnection$WhenMappings;->()V -HSPLokhttp3/internal/connection/RealConnection$connectTls$1;->(Lokhttp3/CertificatePinner;Lokhttp3/Handshake;Lokhttp3/Address;)V HSPLokhttp3/internal/connection/RealConnection;->(Lokhttp3/internal/connection/RealConnectionPool;Lokhttp3/Route;)V HSPLokhttp3/internal/connection/RealConnection;->connect(IIIZLokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;)V HSPLokhttp3/internal/connection/RealConnection;->connectSocket(IILokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;)V HSPLokhttp3/internal/connection/RealConnection;->establishProtocol(Lokhttp3/internal/connection/ConnectionSpecSelector;Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;)V -HSPLokhttp3/internal/connection/RealConnection;->isEligible$okhttp(Lokhttp3/Address;Ljava/util/List;)Z -HSPLokhttp3/internal/connection/RealConnection;->isHealthy(Z)Z -HSPLokhttp3/internal/connection/RealConnection;->newCodec$okhttp(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/http/ExchangeCodec; -HSPLokhttp3/internal/connection/RealConnection;->onSettings(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Settings;)V -HSPLokhttp3/internal/connection/RealConnection;->startHttp2()V HSPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->(Lokhttp3/internal/connection/RealConnectionPool;Ljava/lang/String;)V -HSPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->runOnce()J HSPLokhttp3/internal/connection/RealConnectionPool;->(Lokhttp3/internal/concurrent/TaskRunner;Ljava/util/concurrent/TimeUnit;)V HSPLokhttp3/internal/connection/RealConnectionPool;->callAcquirePooledConnection(Lokhttp3/Address;Lokhttp3/internal/connection/RealCall;Ljava/util/List;Z)Z -HSPLokhttp3/internal/connection/RealConnectionPool;->pruneAndGetAllocationCount(Lokhttp3/internal/connection/RealConnection;J)I HSPLokhttp3/internal/connection/RouteDatabase;->()V HSPLokhttp3/internal/connection/RouteSelector$Selection;->(Ljava/util/ArrayList;)V HSPLokhttp3/internal/connection/RouteSelector$Selection;->hasNext()Z @@ -8896,127 +8438,23 @@ HSPLokhttp3/internal/connection/RouteSelector;->hasNext()Z HSPLokhttp3/internal/http/BridgeInterceptor;->(Lokhttp3/CookieJar;)V HSPLokhttp3/internal/http/BridgeInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; HSPLokhttp3/internal/http/CallServerInterceptor;->(Z)V -HSPLokhttp3/internal/http/CallServerInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; -HSPLokhttp3/internal/http/HttpHeaders;->()V -HSPLokhttp3/internal/http/HttpHeaders;->promisesBody(Lokhttp3/Response;)Z -HSPLokhttp3/internal/http/HttpHeaders;->receiveHeaders(Lokhttp3/CookieJar;Lokhttp3/HttpUrl;Lokhttp3/Headers;)V -HSPLokhttp3/internal/http/HttpMethod;->permitsRequestBody(Ljava/lang/String;)Z HSPLokhttp3/internal/http/RealInterceptorChain;->(Lokhttp3/internal/connection/RealCall;Ljava/util/List;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)V HSPLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp$default(Lokhttp3/internal/http/RealInterceptorChain;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;I)Lokhttp3/internal/http/RealInterceptorChain; HSPLokhttp3/internal/http/RealInterceptorChain;->proceed(Lokhttp3/Request;)Lokhttp3/Response; -HSPLokhttp3/internal/http/RealResponseBody;->(Ljava/lang/String;JLokio/RealBufferedSource;)V -HSPLokhttp3/internal/http/RealResponseBody;->source()Lokio/BufferedSource; HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->(Lokhttp3/OkHttpClient;)V -HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->followUpRequest(Lokhttp3/Response;Lokhttp3/internal/connection/Exchange;)Lokhttp3/Request; HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; -HSPLokhttp3/internal/http/StatusLine$Companion;->parse(Ljava/lang/String;)Lokhttp3/internal/http/StatusLine; -HSPLokhttp3/internal/http/StatusLine;->(Lokhttp3/Protocol;ILjava/lang/String;)V -HSPLokhttp3/internal/http2/ErrorCode;->()V -HSPLokhttp3/internal/http2/ErrorCode;->(IILjava/lang/String;)V -HSPLokhttp3/internal/http2/Header;->()V -HSPLokhttp3/internal/http2/Header;->(Ljava/lang/String;Ljava/lang/String;)V -HSPLokhttp3/internal/http2/Header;->(Lokio/ByteString;Ljava/lang/String;)V -HSPLokhttp3/internal/http2/Header;->(Lokio/ByteString;Lokio/ByteString;)V -HSPLokhttp3/internal/http2/Hpack$Reader;->(Lokhttp3/internal/http2/Http2Reader$ContinuationSource;)V -HSPLokhttp3/internal/http2/Hpack$Reader;->evictToRecoverBytes(I)I -HSPLokhttp3/internal/http2/Hpack$Reader;->getName(I)Lokio/ByteString; -HSPLokhttp3/internal/http2/Hpack$Reader;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V -HSPLokhttp3/internal/http2/Hpack$Reader;->readByteString()Lokio/ByteString; -HSPLokhttp3/internal/http2/Hpack$Reader;->readInt(II)I -HSPLokhttp3/internal/http2/Hpack$Writer;->(Lokio/Buffer;)V -HSPLokhttp3/internal/http2/Hpack$Writer;->evictToRecoverBytes(I)V -HSPLokhttp3/internal/http2/Hpack$Writer;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V -HSPLokhttp3/internal/http2/Hpack$Writer;->writeByteString(Lokio/ByteString;)V -HSPLokhttp3/internal/http2/Hpack$Writer;->writeHeaders(Ljava/util/ArrayList;)V -HSPLokhttp3/internal/http2/Hpack$Writer;->writeInt(III)V -HSPLokhttp3/internal/http2/Hpack;->()V -HSPLokhttp3/internal/http2/Hpack;->checkLowercase(Lokio/ByteString;)V -HSPLokhttp3/internal/http2/Http2;->()V -HSPLokhttp3/internal/http2/Http2;->()V -HSPLokhttp3/internal/http2/Http2Connection$Builder;->(Lokhttp3/internal/concurrent/TaskRunner;)V HSPLokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1;->()V HSPLokhttp3/internal/http2/Http2Connection$Listener;->()V HSPLokhttp3/internal/http2/Http2Connection$Listener;->()V -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$lambda-7$lambda-6$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection;Lkotlin/jvm/internal/Ref$ObjectRef;)V -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$lambda-7$lambda-6$$inlined$execute$default$1;->runOnce()J -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;Lokhttp3/internal/http2/Settings;)V -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$$inlined$execute$default$1;->runOnce()J -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Http2Reader;)V -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->ackSettings()V -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->data(IILokio/BufferedSource;Z)V -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->headers(ILjava/util/List;Z)V -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()Ljava/lang/Object; -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->settings(Lokhttp3/internal/http2/Settings;)V -HSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->windowUpdate(JI)V -HSPLokhttp3/internal/http2/Http2Connection;->()V -HSPLokhttp3/internal/http2/Http2Connection;->(Lokhttp3/internal/http2/Http2Connection$Builder;)V -HSPLokhttp3/internal/http2/Http2Connection;->close$okhttp(Lokhttp3/internal/http2/ErrorCode;Lokhttp3/internal/http2/ErrorCode;Ljava/io/IOException;)V -HSPLokhttp3/internal/http2/Http2Connection;->flush()V -HSPLokhttp3/internal/http2/Http2Connection;->getStream(I)Lokhttp3/internal/http2/Http2Stream; -HSPLokhttp3/internal/http2/Http2Connection;->removeStream$okhttp(I)Lokhttp3/internal/http2/Http2Stream; -HSPLokhttp3/internal/http2/Http2Connection;->shutdown(Lokhttp3/internal/http2/ErrorCode;)V -HSPLokhttp3/internal/http2/Http2Connection;->updateConnectionFlowControl$okhttp(J)V -HSPLokhttp3/internal/http2/Http2ExchangeCodec;->()V -HSPLokhttp3/internal/http2/Http2ExchangeCodec;->(Lokhttp3/OkHttpClient;Lokhttp3/internal/connection/RealConnection;Lokhttp3/internal/http/RealInterceptorChain;Lokhttp3/internal/http2/Http2Connection;)V -HSPLokhttp3/internal/http2/Http2ExchangeCodec;->finishRequest()V -HSPLokhttp3/internal/http2/Http2ExchangeCodec;->getConnection()Lokhttp3/internal/connection/RealConnection; -HSPLokhttp3/internal/http2/Http2ExchangeCodec;->openResponseBodySource(Lokhttp3/Response;)Lokio/Source; -HSPLokhttp3/internal/http2/Http2ExchangeCodec;->readResponseHeaders(Z)Lokhttp3/Response$Builder; -HSPLokhttp3/internal/http2/Http2ExchangeCodec;->reportedContentLength(Lokhttp3/Response;)J -HSPLokhttp3/internal/http2/Http2ExchangeCodec;->writeRequestHeaders(Lokhttp3/Request;)V -HSPLokhttp3/internal/http2/Http2Reader$Companion;->lengthWithoutPadding(III)I -HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->(Lokio/BufferedSource;)V -HSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->read(Lokio/Buffer;J)J -HSPLokhttp3/internal/http2/Http2Reader;->()V -HSPLokhttp3/internal/http2/Http2Reader;->(Lokio/BufferedSource;Z)V -HSPLokhttp3/internal/http2/Http2Reader;->close()V -HSPLokhttp3/internal/http2/Http2Reader;->nextFrame(ZLokhttp3/internal/http2/Http2Reader$Handler;)Z -HSPLokhttp3/internal/http2/Http2Reader;->readConnectionPreface(Lokhttp3/internal/http2/Http2Reader$Handler;)V -HSPLokhttp3/internal/http2/Http2Reader;->readHeaderBlock(IIII)Ljava/util/List; -HSPLokhttp3/internal/http2/Http2Stream$FramingSink;->(Lokhttp3/internal/http2/Http2Stream;Z)V -HSPLokhttp3/internal/http2/Http2Stream$FramingSink;->close()V -HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->(Lokhttp3/internal/http2/Http2Stream;JZ)V -HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->close()V -HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->read(Lokio/Buffer;J)J -HSPLokhttp3/internal/http2/Http2Stream$FramingSource;->updateConnectionFlowControl(J)V -HSPLokhttp3/internal/http2/Http2Stream$StreamTimeout;->(Lokhttp3/internal/http2/Http2Stream;)V -HSPLokhttp3/internal/http2/Http2Stream$StreamTimeout;->exitAndThrowIfTimedOut()V -HSPLokhttp3/internal/http2/Http2Stream;->(ILokhttp3/internal/http2/Http2Connection;ZZLokhttp3/Headers;)V -HSPLokhttp3/internal/http2/Http2Stream;->cancelStreamIfNecessary$okhttp()V -HSPLokhttp3/internal/http2/Http2Stream;->getSink()Lokhttp3/internal/http2/Http2Stream$FramingSink; -HSPLokhttp3/internal/http2/Http2Stream;->isLocallyInitiated()Z -HSPLokhttp3/internal/http2/Http2Stream;->isOpen()Z -HSPLokhttp3/internal/http2/Http2Stream;->receiveHeaders(Lokhttp3/Headers;Z)V -HSPLokhttp3/internal/http2/Http2Stream;->waitForIo$okhttp()V -HSPLokhttp3/internal/http2/Http2Writer;->()V -HSPLokhttp3/internal/http2/Http2Writer;->(Lokio/BufferedSink;Z)V -HSPLokhttp3/internal/http2/Http2Writer;->applyAndAckSettings(Lokhttp3/internal/http2/Settings;)V -HSPLokhttp3/internal/http2/Http2Writer;->close()V -HSPLokhttp3/internal/http2/Http2Writer;->frameHeader(IIII)V -HSPLokhttp3/internal/http2/Http2Writer;->goAway(ILokhttp3/internal/http2/ErrorCode;[B)V -HSPLokhttp3/internal/http2/Http2Writer;->windowUpdate(JI)V -HSPLokhttp3/internal/http2/Huffman$Node;->()V -HSPLokhttp3/internal/http2/Huffman$Node;->(II)V -HSPLokhttp3/internal/http2/Huffman;->()V -HSPLokhttp3/internal/http2/Huffman;->addCode(III)V -HSPLokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel;->()V -HSPLokhttp3/internal/http2/PushObserver;->()V -HSPLokhttp3/internal/http2/Settings;->()V -HSPLokhttp3/internal/http2/Settings;->getInitialWindowSize()I -HSPLokhttp3/internal/http2/Settings;->merge(Lokhttp3/internal/http2/Settings;)V -HSPLokhttp3/internal/http2/Settings;->set(II)V HSPLokhttp3/internal/platform/Android10Platform;->()V HSPLokhttp3/internal/platform/Android10Platform;->()V HSPLokhttp3/internal/platform/Android10Platform;->buildCertificateChainCleaner(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; HSPLokhttp3/internal/platform/Android10Platform;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V -HSPLokhttp3/internal/platform/Android10Platform;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; -HSPLokhttp3/internal/platform/Jdk9Platform$$ExternalSyntheticApiModelOutline1;->m(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; HSPLokhttp3/internal/platform/Platform$Companion;->()V HSPLokhttp3/internal/platform/Platform$Companion;->alpnProtocolNames(Ljava/util/List;)Ljava/util/ArrayList; HSPLokhttp3/internal/platform/Platform$Companion;->isAndroid()Z HSPLokhttp3/internal/platform/Platform;->()V HSPLokhttp3/internal/platform/Platform;->()V -HSPLokhttp3/internal/platform/Platform;->afterHandshake(Ljavax/net/ssl/SSLSocket;)V HSPLokhttp3/internal/platform/Platform;->connectSocket(Ljava/net/Socket;Ljava/net/InetSocketAddress;I)V HSPLokhttp3/internal/platform/Platform;->getStackTraceForCloseable()Ljava/lang/Object; HSPLokhttp3/internal/platform/Platform;->newSSLContext()Ljavax/net/ssl/SSLContext; @@ -9024,11 +8462,9 @@ HSPLokhttp3/internal/platform/Platform;->newSslSocketFactory(Ljavax/net/ssl/X509 HSPLokhttp3/internal/platform/Platform;->platformTrustManager()Ljavax/net/ssl/X509TrustManager; HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->()V HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V -HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->isSupported()Z HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->matchesSocket(Ljavax/net/ssl/SSLSocket;)Z HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->(Ljavax/net/ssl/X509TrustManager;Landroid/net/http/X509TrustManagerExtensions;)V -HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->equals(Ljava/lang/Object;)Z HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->hashCode()I HSPLokhttp3/internal/platform/android/AndroidLog;->()V HSPLokhttp3/internal/platform/android/AndroidLogHandler;->()V @@ -9044,30 +8480,15 @@ HSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->isSupported()Z HSPLokhttp3/internal/tls/CertificateChainCleaner;->()V HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V -HSPLokhttp3/internal/tls/OkHostnameVerifier;->getSubjectAltNames(Ljava/security/cert/X509Certificate;I)Ljava/util/List; -HSPLokhttp3/internal/tls/OkHostnameVerifier;->isAscii(Ljava/lang/String;)Z -HSPLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Z -HSPLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z -HSPLokio/AsyncTimeout$Companion;->awaitTimeout$okio()Lokio/AsyncTimeout; -HSPLokio/AsyncTimeout$Watchdog;->()V -HSPLokio/AsyncTimeout$Watchdog;->run()V HSPLokio/AsyncTimeout$sink$1;->(Lokio/SocketAsyncTimeout;Lokio/OutputStreamSink;)V -HSPLokio/AsyncTimeout$sink$1;->close()V -HSPLokio/AsyncTimeout$sink$1;->flush()V -HSPLokio/AsyncTimeout$sink$1;->write(Lokio/Buffer;J)V HSPLokio/AsyncTimeout$source$1;->(Lokio/SocketAsyncTimeout;Lokio/InputStreamSource;)V -HSPLokio/AsyncTimeout$source$1;->close()V -HSPLokio/AsyncTimeout$source$1;->read(Lokio/Buffer;J)J HSPLokio/AsyncTimeout;->()V HSPLokio/AsyncTimeout;->()V HSPLokio/AsyncTimeout;->enter()V -HSPLokio/AsyncTimeout;->exit()Z HSPLokio/Buffer;->()V HSPLokio/Buffer;->completeSegmentByteCount()J -HSPLokio/Buffer;->copyTo(JJLokio/Buffer;)V HSPLokio/Buffer;->exhausted()Z HSPLokio/Buffer;->getByte(J)B -HSPLokio/Buffer;->indexOf(BJJ)J HSPLokio/Buffer;->indexOfElement(Lokio/ByteString;)J HSPLokio/Buffer;->rangeEquals(JLokio/ByteString;)Z HSPLokio/Buffer;->read(Lokio/Buffer;J)J @@ -9077,10 +8498,7 @@ HSPLokio/Buffer;->readByteArray(J)[B HSPLokio/Buffer;->readByteString()Lokio/ByteString; HSPLokio/Buffer;->readByteString(J)Lokio/ByteString; HSPLokio/Buffer;->readInt()I -HSPLokio/Buffer;->readShort()S HSPLokio/Buffer;->readString(JLjava/nio/charset/Charset;)Ljava/lang/String; -HSPLokio/Buffer;->readUtf8(J)Ljava/lang/String; -HSPLokio/Buffer;->skip(J)V HSPLokio/Buffer;->writableSegment$okio(I)Lokio/Segment; HSPLokio/Buffer;->write(Lokio/Buffer;J)V HSPLokio/Buffer;->write(Lokio/ByteString;)V @@ -9089,7 +8507,6 @@ HSPLokio/Buffer;->writeAll(Lokio/Source;)V HSPLokio/Buffer;->writeByte(I)V HSPLokio/Buffer;->writeDecimalLong(J)Lokio/Buffer; HSPLokio/Buffer;->writeInt(I)V -HSPLokio/Buffer;->writeShort(I)V HSPLokio/Buffer;->writeUtf8(IILjava/lang/String;)V HSPLokio/Buffer;->writeUtf8(Ljava/lang/String;)V HSPLokio/Buffer;->writeUtf8CodePoint(I)V @@ -9103,7 +8520,6 @@ HSPLokio/ByteString;->compareTo(Lokio/ByteString;)I HSPLokio/ByteString;->digest$okio(Ljava/lang/String;)Lokio/ByteString; HSPLokio/ByteString;->equals(Ljava/lang/Object;)Z HSPLokio/ByteString;->getSize$okio()I -HSPLokio/ByteString;->hashCode()I HSPLokio/ByteString;->hex()Ljava/lang/String; HSPLokio/ByteString;->indexOf$default(Lokio/ByteString;Lokio/ByteString;)I HSPLokio/ByteString;->indexOf(I[B)I @@ -9115,7 +8531,6 @@ HSPLokio/ByteString;->rangeEquals(ILokio/ByteString;I)Z HSPLokio/ByteString;->rangeEquals(I[BII)Z HSPLokio/ByteString;->substring$default(Lokio/ByteString;III)Lokio/ByteString; HSPLokio/ByteString;->substring(II)Lokio/ByteString; -HSPLokio/ByteString;->toAsciiLowercase()Lokio/ByteString; HSPLokio/ByteString;->utf8()Ljava/lang/String; HSPLokio/ByteString;->write$okio(Lokio/Buffer;I)V HSPLokio/FileMetadata;->(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)V @@ -9124,26 +8539,17 @@ HSPLokio/FileSystem;->()V HSPLokio/FileSystem;->()V HSPLokio/FileSystem;->delete$1(Lokio/Path;)V HSPLokio/FileSystem;->exists(Lokio/Path;)Z -HSPLokio/FileSystem;->metadata(Lokio/Path;)Lokio/FileMetadata; HSPLokio/ForwardingFileSystem;->(Lokio/JvmSystemFileSystem;)V HSPLokio/ForwardingFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V HSPLokio/ForwardingFileSystem;->delete(Lokio/Path;)V HSPLokio/ForwardingFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata; HSPLokio/ForwardingSink;->(Lokio/Sink;)V -HSPLokio/ForwardingSink;->flush()V -HSPLokio/ForwardingSink;->write(Lokio/Buffer;J)V -HSPLokio/ForwardingSource;->(Lokio/Source;)V -HSPLokio/ForwardingSource;->close()V -HSPLokio/ForwardingSource;->read(Lokio/Buffer;J)J HSPLokio/InputStreamSource;->(Ljava/io/InputStream;Lokio/Timeout;)V -HSPLokio/InputStreamSource;->close()V -HSPLokio/InputStreamSource;->read(Lokio/Buffer;J)J HSPLokio/JvmSystemFileSystem;->()V HSPLokio/JvmSystemFileSystem;->appendingSink(Lokio/Path;)Lokio/Sink; HSPLokio/JvmSystemFileSystem;->createDirectory(Lokio/Path;)V HSPLokio/JvmSystemFileSystem;->delete(Lokio/Path;)V HSPLokio/JvmSystemFileSystem;->sink(Lokio/Path;)Lokio/Sink; -HSPLokio/JvmSystemFileSystem;->source(Lokio/Path;)Lokio/Source; HSPLokio/NioSystemFileSystem;->()V HSPLokio/NioSystemFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V HSPLokio/NioSystemFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata; @@ -9153,10 +8559,11 @@ HSPLokio/Okio;->buffer(Lokio/Source;)Lokio/RealBufferedSource; HSPLokio/Okio;->sink(Ljava/net/Socket;)Lokio/AsyncTimeout$sink$1; HSPLokio/Okio;->source(Ljava/net/Socket;)Lokio/AsyncTimeout$source$1; HSPLokio/Okio__JvmOkioKt;->()V +HSPLokio/Okio__OkioKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I +HSPLokio/Okio__OkioKt;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner; HSPLokio/Options$Companion;->buildTrieRecursive(JLokio/Buffer;ILjava/util/ArrayList;IILjava/util/ArrayList;)V HSPLokio/OutputStreamSink;->(Ljava/io/OutputStream;Lokio/Timeout;)V HSPLokio/OutputStreamSink;->close()V -HSPLokio/OutputStreamSink;->flush()V HSPLokio/OutputStreamSink;->write(Lokio/Buffer;J)V HSPLokio/Path$Companion;->()V HSPLokio/Path$Companion;->get$default(Ljava/io/File;)Lokio/Path; @@ -9169,50 +8576,23 @@ HSPLokio/Path;->toFile()Ljava/io/File; HSPLokio/Path;->toNioPath()Ljava/nio/file/Path; HSPLokio/Path;->toString()Ljava/lang/String; HSPLokio/Path;->volumeLetter()Ljava/lang/Character; -HSPLokio/PeekSource;->(Lokio/BufferedSource;)V -HSPLokio/PeekSource;->read(Lokio/Buffer;J)J HSPLokio/RealBufferedSink;->(Lokio/Sink;)V HSPLokio/RealBufferedSink;->close()V HSPLokio/RealBufferedSink;->emitCompleteSegments()Lokio/BufferedSink; -HSPLokio/RealBufferedSink;->flush()V -HSPLokio/RealBufferedSink;->write(Lokio/Buffer;J)V -HSPLokio/RealBufferedSink;->write(Lokio/ByteString;)Lokio/BufferedSink; HSPLokio/RealBufferedSink;->writeByte(I)Lokio/BufferedSink; HSPLokio/RealBufferedSink;->writeDecimalLong(J)Lokio/BufferedSink; -HSPLokio/RealBufferedSink;->writeInt(I)Lokio/BufferedSink; -HSPLokio/RealBufferedSink;->writeShort(I)Lokio/BufferedSink; HSPLokio/RealBufferedSink;->writeUtf8(Ljava/lang/String;)Lokio/BufferedSink; -HSPLokio/RealBufferedSource$inputStream$1;->(Lokio/RealBufferedSource;)V -HSPLokio/RealBufferedSource$inputStream$1;->read([BII)I HSPLokio/RealBufferedSource;->(Lokio/Source;)V -HSPLokio/RealBufferedSource;->close()V -HSPLokio/RealBufferedSource;->exhausted()Z -HSPLokio/RealBufferedSource;->getBuffer()Lokio/Buffer; -HSPLokio/RealBufferedSource;->indexOf(BJJ)J -HSPLokio/RealBufferedSource;->rangeEquals(JLokio/ByteString;)Z -HSPLokio/RealBufferedSource;->read(Lokio/Buffer;J)J -HSPLokio/RealBufferedSource;->readAll(Lokio/RealBufferedSink;)J -HSPLokio/RealBufferedSource;->readByte()B -HSPLokio/RealBufferedSource;->readByteString(J)Lokio/ByteString; -HSPLokio/RealBufferedSource;->readInt()I -HSPLokio/RealBufferedSource;->readShort()S -HSPLokio/RealBufferedSource;->readUtf8LineStrict()Ljava/lang/String; -HSPLokio/RealBufferedSource;->readUtf8LineStrict(J)Ljava/lang/String; -HSPLokio/RealBufferedSource;->request(J)Z -HSPLokio/RealBufferedSource;->require(J)V -HSPLokio/RealBufferedSource;->skip(J)V HSPLokio/Segment;->()V HSPLokio/Segment;->([BIIZ)V HSPLokio/Segment;->pop()Lokio/Segment; HSPLokio/Segment;->push(Lokio/Segment;)V -HSPLokio/Segment;->sharedCopy()Lokio/Segment; HSPLokio/Segment;->writeTo(Lokio/Segment;I)V HSPLokio/SegmentPool;->()V HSPLokio/SegmentPool;->recycle(Lokio/Segment;)V HSPLokio/SegmentPool;->take()Lokio/Segment; HSPLokio/SocketAsyncTimeout;->(Ljava/net/Socket;)V HSPLokio/Timeout$Companion$NONE$1;->()V -HSPLokio/Timeout$Companion$NONE$1;->throwIfReached()V HSPLokio/Timeout;->()V HSPLokio/Timeout;->()V HSPLokio/Timeout;->throwIfReached()V @@ -9225,7 +8605,6 @@ HSPLokio/internal/ResourceFileSystem$roots$2;->(Ljava/lang/ClassLoader;)V HSPLokio/internal/ResourceFileSystem;->()V HSPLokio/internal/ResourceFileSystem;->(Ljava/lang/ClassLoader;)V HSPLokio/internal/_BufferKt;->()V -HSPLokio/internal/_BufferKt;->readUtf8Line(Lokio/Buffer;J)Ljava/lang/String; HSPLokio/internal/_ByteStringKt;->()V HSPLokio/internal/_ByteStringKt;->access$decodeHexDigit(C)I HSPLokio/internal/_PathKt;->()V @@ -9265,10 +8644,11 @@ Landroidx/activity/contextaware/ContextAwareHelper; Landroidx/activity/contextaware/OnContextAvailableListener; Landroidx/activity/result/ActivityResult$$ExternalSyntheticOutline0; Landroidx/activity/result/ActivityResultRegistry; -Landroidx/appcompat/R$styleable; +Landroidx/appcompat/R$bool; +Landroidx/appcompat/R$style; +Landroidx/appcompat/resources/R$drawable; Landroidx/appcompat/view/SupportMenuInflater$$ExternalSyntheticOutline0; Landroidx/appcompat/widget/AppCompatTextHelper$Api28Impl$$ExternalSyntheticApiModelOutline0; -Landroidx/appcompat/widget/TooltipCompatHandler$$ExternalSyntheticLambda1; Landroidx/arch/core/executor/ArchTaskExecutor$2; Landroidx/arch/core/executor/ArchTaskExecutor; Landroidx/arch/core/executor/DefaultTaskExecutor$$ExternalSyntheticApiModelOutline0; @@ -9287,13 +8667,11 @@ Landroidx/collection/ArrayMap$KeyIterator; Landroidx/collection/ArrayMap$KeySet; Landroidx/collection/ArrayMap; Landroidx/collection/ArraySet; -Landroidx/collection/ContainerHelpers; Landroidx/collection/IndexBasedArrayIterator; Landroidx/collection/LruCache; Landroidx/collection/SimpleArrayMap; Landroidx/collection/SparseArrayCompat; Landroidx/collection/SparseArrayKt$valueIterator$1; -Landroidx/collection/SparseArrayKt; Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1; Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy; Landroidx/compose/animation/AnimatedVisibilityKt$$ExternalSyntheticOutline0; @@ -9309,6 +8687,7 @@ Landroidx/compose/animation/AnimatedVisibilityScope; Landroidx/compose/animation/AnimatedVisibilityScopeImpl; Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1; Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2; +Landroidx/compose/animation/ColorVectorConverterKt; Landroidx/compose/animation/CrossfadeKt$$ExternalSyntheticOutline0; Landroidx/compose/animation/CrossfadeKt$Crossfade$2; Landroidx/compose/animation/CrossfadeKt$Crossfade$3; @@ -9336,7 +8715,6 @@ Landroidx/compose/animation/Fade; Landroidx/compose/animation/FlingCalculator; Landroidx/compose/animation/FlingCalculatorKt; Landroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics; -Landroidx/compose/animation/Scale; Landroidx/compose/animation/SingleValueAnimationKt; Landroidx/compose/animation/Slide; Landroidx/compose/animation/SlideModifier$measure$1$slideOffset$1; @@ -9362,7 +8740,6 @@ Landroidx/compose/animation/core/AnimationScope; Landroidx/compose/animation/core/AnimationSpec; Landroidx/compose/animation/core/AnimationSpecKt; Landroidx/compose/animation/core/AnimationState; -Landroidx/compose/animation/core/AnimationStateKt; Landroidx/compose/animation/core/AnimationVector1D; Landroidx/compose/animation/core/AnimationVector2D; Landroidx/compose/animation/core/AnimationVector4D; @@ -9519,7 +8896,6 @@ Landroidx/compose/foundation/FocusableKt; Landroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1; Landroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2; Landroidx/compose/foundation/FocusedBoundsKt; -Landroidx/compose/foundation/FocusedBoundsModifier; Landroidx/compose/foundation/FocusedBoundsObserverModifier; Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1; Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1; @@ -9544,6 +8920,7 @@ Landroidx/compose/foundation/OverscrollEffect; Landroidx/compose/foundation/OverscrollKt; Landroidx/compose/foundation/PinnableParentConsumer; Landroidx/compose/foundation/gestures/AndroidConfig; +Landroidx/compose/foundation/gestures/AndroidScrollable_androidKt; Landroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1; Landroidx/compose/foundation/gestures/ContentInViewModifier; Landroidx/compose/foundation/gestures/DefaultFlingBehavior; @@ -9691,54 +9068,6 @@ Landroidx/compose/foundation/layout/WindowInsetsSizeKt$windowInsetsBottomHeight$ Landroidx/compose/foundation/layout/WindowInsetsSizeKt; Landroidx/compose/foundation/layout/WrapContentModifier; Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier; -Landroidx/compose/foundation/lazy/DataIndex; -Landroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo; -Landroidx/compose/foundation/lazy/LazyDslKt; -Landroidx/compose/foundation/lazy/LazyItemScope; -Landroidx/compose/foundation/lazy/LazyItemScopeImpl; -Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo$Interval; -Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo; -Landroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal; -Landroidx/compose/foundation/lazy/LazyListIntervalContent; -Landroidx/compose/foundation/lazy/LazyListItemInfo; -Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator; -Landroidx/compose/foundation/lazy/LazyListItemProvider; -Landroidx/compose/foundation/lazy/LazyListItemProviderImpl$1; -Landroidx/compose/foundation/lazy/LazyListItemProviderImpl; -Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1; -Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1; -Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1; -Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2; -Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3; -Landroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1; -Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2; -Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1; -Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1; -Landroidx/compose/foundation/lazy/LazyListKt; -Landroidx/compose/foundation/lazy/LazyListLayoutInfo; -Landroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$1; -Landroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$3; -Landroidx/compose/foundation/lazy/LazyListMeasureResult; -Landroidx/compose/foundation/lazy/LazyListPinningModifier$Companion$EmptyPinnedItemsHandle$1; -Landroidx/compose/foundation/lazy/LazyListPinningModifier; -Landroidx/compose/foundation/lazy/LazyListPlaceableWrapper; -Landroidx/compose/foundation/lazy/LazyListPositionedItem; -Landroidx/compose/foundation/lazy/LazyListScope; -Landroidx/compose/foundation/lazy/LazyListScopeImpl; -Landroidx/compose/foundation/lazy/LazyListScrollPosition; -Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1; -Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2; -Landroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1; -Landroidx/compose/foundation/lazy/LazyListState$scrollableState$1; -Landroidx/compose/foundation/lazy/LazyListState; -Landroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1; -Landroidx/compose/foundation/lazy/LazyListStateKt; -Landroidx/compose/foundation/lazy/LazyMeasuredItem; -Landroidx/compose/foundation/lazy/LazyMeasuredItemProvider; -Landroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1; -Landroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2; -Landroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1; -Landroidx/compose/foundation/lazy/MeasuredItemFactory; Landroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1; Landroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt; Landroidx/compose/foundation/lazy/grid/EmptyLazyGridLayoutInfo; @@ -9771,7 +9100,6 @@ Landroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$ Landroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1; Landroidx/compose/foundation/lazy/grid/LazyGridKt; Landroidx/compose/foundation/lazy/grid/LazyGridLayoutInfo; -Landroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$1; Landroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$3; Landroidx/compose/foundation/lazy/grid/LazyGridMeasureResult; Landroidx/compose/foundation/lazy/grid/LazyGridPlaceableWrapper; @@ -9856,7 +9184,6 @@ Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableS Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1; Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt; Landroidx/compose/foundation/lazy/layout/MutableIntervalList; -Landroidx/compose/foundation/lazy/layout/PinnableParent$PinnedItemsHandle; Landroidx/compose/foundation/lazy/layout/PinnableParent; Landroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1; Landroidx/compose/foundation/lazy/layout/PinnableParentKt; @@ -9882,7 +9209,6 @@ Landroidx/compose/foundation/selection/SelectableKt; Landroidx/compose/foundation/selection/ToggleableKt$toggleable$2; Landroidx/compose/foundation/selection/ToggleableKt$toggleable$4$1; Landroidx/compose/foundation/selection/ToggleableKt$triStateToggleable$4$1; -Landroidx/compose/foundation/selection/ToggleableKt; Landroidx/compose/foundation/shape/CornerBasedShape; Landroidx/compose/foundation/shape/CornerSize; Landroidx/compose/foundation/shape/DpCornerSize; @@ -9945,7 +9271,6 @@ Landroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1; Landroidx/compose/material/ripple/RippleThemeKt; Landroidx/compose/material/ripple/StateLayer; Landroidx/compose/material3/AlertDialogKt$AlertDialogContent$1$$ExternalSyntheticOutline0; -Landroidx/compose/material3/AppBarKt$$ExternalSyntheticOutline0; Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1; Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2; Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3; @@ -9992,7 +9317,6 @@ Landroidx/compose/material3/ComposableSingletons$SnackbarHostKt$lambda-1$1; Landroidx/compose/material3/ComposableSingletons$SnackbarHostKt; Landroidx/compose/material3/ContentColorKt$LocalContentColor$1; Landroidx/compose/material3/ContentColorKt; -Landroidx/compose/material3/DynamicTonalPaletteKt; Landroidx/compose/material3/FabPosition; Landroidx/compose/material3/FadeInFadeOutState; Landroidx/compose/material3/IconButtonColors; @@ -10013,7 +9337,6 @@ Landroidx/compose/material3/MinimumTouchTargetModifier$measure$1; Landroidx/compose/material3/MinimumTouchTargetModifier; Landroidx/compose/material3/NavigationBarDefaults; Landroidx/compose/material3/NavigationBarItemColors; -Landroidx/compose/material3/NavigationBarItemDefaults; Landroidx/compose/material3/NavigationBarKt$NavigationBar$1; Landroidx/compose/material3/NavigationBarKt$NavigationBar$2; Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1; @@ -10200,7 +9523,6 @@ Landroidx/compose/runtime/SlotWriter; Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord; Landroidx/compose/runtime/SnapshotMutableStateImpl; Landroidx/compose/runtime/SnapshotMutationPolicy; -Landroidx/compose/runtime/SnapshotStateKt; Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt; Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3; Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$5; @@ -10215,6 +9537,7 @@ Landroidx/compose/runtime/State; Landroidx/compose/runtime/StaticProvidableCompositionLocal; Landroidx/compose/runtime/StaticValueHolder; Landroidx/compose/runtime/StructuralEqualityPolicy; +Landroidx/compose/runtime/Updater; Landroidx/compose/runtime/collection/IdentityArrayIntMap; Landroidx/compose/runtime/collection/IdentityArrayMap; Landroidx/compose/runtime/collection/IdentityArraySet; @@ -10243,10 +9566,12 @@ Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links; Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter; Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation$$ExternalSyntheticOutline0; Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation; Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership; Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1; @@ -10256,7 +9581,6 @@ Landroidx/compose/runtime/internal/ComposableLambdaKt; Landroidx/compose/runtime/internal/ThreadMap; Landroidx/compose/runtime/internal/ThreadMapKt; Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1; -Landroidx/compose/runtime/saveable/ListSaverKt; Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1; Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1; Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1; @@ -10415,7 +9739,6 @@ Landroidx/compose/ui/focus/FocusStateImpl; Landroidx/compose/ui/focus/FocusTransactionsKt; Landroidx/compose/ui/geometry/CornerRadius; Landroidx/compose/ui/geometry/CornerRadiusKt; -Landroidx/compose/ui/geometry/MutableRect; Landroidx/compose/ui/geometry/Offset; Landroidx/compose/ui/geometry/OffsetKt; Landroidx/compose/ui/geometry/Rect; @@ -10616,7 +9939,6 @@ Landroidx/compose/ui/input/pointer/MotionEventAdapter; Landroidx/compose/ui/input/pointer/Node; Landroidx/compose/ui/input/pointer/NodeParent; Landroidx/compose/ui/input/pointer/PointerEvent; -Landroidx/compose/ui/input/pointer/PointerEventKt; Landroidx/compose/ui/input/pointer/PointerEventPass; Landroidx/compose/ui/input/pointer/PointerIconService; Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer; @@ -10661,7 +9983,6 @@ Landroidx/compose/ui/layout/IntermediateLayoutModifier; Landroidx/compose/ui/layout/IntrinsicMeasurable; Landroidx/compose/ui/layout/IntrinsicMeasureScope; Landroidx/compose/ui/layout/LayoutCoordinates; -Landroidx/compose/ui/layout/LayoutCoordinatesKt; Landroidx/compose/ui/layout/LayoutId; Landroidx/compose/ui/layout/LayoutIdKt; Landroidx/compose/ui/layout/LayoutIdParentData; @@ -10676,7 +9997,6 @@ Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1 Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1; Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1; Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; -Landroidx/compose/ui/layout/LookaheadLayoutCoordinatesImpl; Landroidx/compose/ui/layout/LookaheadOnPlacedModifier; Landroidx/compose/ui/layout/Measurable; Landroidx/compose/ui/layout/MeasurePolicy; @@ -10843,13 +10163,11 @@ Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1; Landroidx/compose/ui/platform/AndroidComposeView; Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0; Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1; -Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl; Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider; Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy; Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1; Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1; Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat; -Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt; Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ$$ExternalSyntheticApiModelOutline0; Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ; Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO$$ExternalSyntheticApiModelOutline0; @@ -10881,9 +10199,7 @@ Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1; Landroidx/compose/ui/platform/AndroidUiFrameClock; Landroidx/compose/ui/platform/AndroidUriHandler; Landroidx/compose/ui/platform/AndroidViewConfiguration; -Landroidx/compose/ui/platform/AndroidViewsHandler; Landroidx/compose/ui/platform/CalculateMatrixToWindow; -Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29$$ExternalSyntheticApiModelOutline0; Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29; Landroidx/compose/ui/platform/ClipboardManager; Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1; @@ -10927,7 +10243,6 @@ Landroidx/compose/ui/platform/InspectableValueKt; Landroidx/compose/ui/platform/InspectionModeKt$LocalInspectionMode$1; Landroidx/compose/ui/platform/InspectionModeKt; Landroidx/compose/ui/platform/InspectorValueInfo; -Landroidx/compose/ui/platform/InvertMatrixKt; Landroidx/compose/ui/platform/LayerMatrixCache; Landroidx/compose/ui/platform/MotionDurationScaleImpl; Landroidx/compose/ui/platform/OutlineResolver; @@ -10937,7 +10252,6 @@ Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper$$ExternalSynthet Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper; Landroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1; Landroidx/compose/ui/platform/RenderNodeLayer; -Landroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds; Landroidx/compose/ui/platform/TestTagKt$testTag$1; Landroidx/compose/ui/platform/TestTagKt; Landroidx/compose/ui/platform/TextToolbar; @@ -10977,7 +10291,6 @@ Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods; Landroidx/compose/ui/platform/WrapperVerificationHelperMethods$$ExternalSyntheticApiModelOutline0; Landroidx/compose/ui/platform/WrapperVerificationHelperMethods; Landroidx/compose/ui/platform/Wrapper_androidKt; -Landroidx/compose/ui/platform/accessibility/CollectionInfoKt; Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry; Landroidx/compose/ui/res/ImageVectorCache$Key; Landroidx/compose/ui/res/ImageVectorCache; @@ -10985,20 +10298,13 @@ Landroidx/compose/ui/res/PainterResources_androidKt; Landroidx/compose/ui/res/Resources_androidKt; Landroidx/compose/ui/semantics/AccessibilityAction; Landroidx/compose/ui/semantics/CollectionInfo; -Landroidx/compose/ui/semantics/CollectionItemInfo; -Landroidx/compose/ui/semantics/LiveRegionMode; -Landroidx/compose/ui/semantics/NodeLocationHolder; -Landroidx/compose/ui/semantics/ProgressBarRangeInfo; Landroidx/compose/ui/semantics/Role; Landroidx/compose/ui/semantics/ScrollAxisRange; Landroidx/compose/ui/semantics/SemanticsActions; Landroidx/compose/ui/semantics/SemanticsConfiguration; -Landroidx/compose/ui/semantics/SemanticsConfigurationKt; Landroidx/compose/ui/semantics/SemanticsModifier; Landroidx/compose/ui/semantics/SemanticsModifierCore; Landroidx/compose/ui/semantics/SemanticsModifierKt; -Landroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1; -Landroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1; Landroidx/compose/ui/semantics/SemanticsNode; Landroidx/compose/ui/semantics/SemanticsNodeKt; Landroidx/compose/ui/semantics/SemanticsOwner; @@ -11019,7 +10325,6 @@ Landroidx/compose/ui/semantics/SemanticsProperties_androidKt; Landroidx/compose/ui/semantics/SemanticsPropertyKey$1; Landroidx/compose/ui/semantics/SemanticsPropertyKey; Landroidx/compose/ui/semantics/SemanticsPropertyReceiver; -Landroidx/compose/ui/semantics/SemanticsSortKt; Landroidx/compose/ui/state/ToggleableState; Landroidx/compose/ui/text/AndroidParagraph$wordBoundary$2; Landroidx/compose/ui/text/AndroidParagraph; @@ -11050,7 +10355,6 @@ Landroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2; Landroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2; Landroidx/compose/ui/text/android/LayoutIntrinsics$minIntrinsicWidth$2; Landroidx/compose/ui/text/android/LayoutIntrinsics; -Landroidx/compose/ui/text/android/SpannedExtensionsKt; Landroidx/compose/ui/text/android/StaticLayoutFactory23; Landroidx/compose/ui/text/android/StaticLayoutFactory26$$ExternalSyntheticApiModelOutline0; Landroidx/compose/ui/text/android/StaticLayoutFactory26; @@ -11071,7 +10375,6 @@ Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx; Landroidx/compose/ui/text/android/style/LineHeightSpan; Landroidx/compose/ui/text/android/style/LineHeightStyleSpan; Landroidx/compose/ui/text/android/style/PlaceholderSpan; -Landroidx/compose/ui/text/caches/ContainerHelpersKt; Landroidx/compose/ui/text/caches/LruCache; Landroidx/compose/ui/text/caches/SimpleArrayMap; Landroidx/compose/ui/text/font/AndroidFontLoader; @@ -11099,7 +10402,6 @@ Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1; Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion; Landroidx/compose/ui/text/font/PlatformResolveInterceptor; Landroidx/compose/ui/text/font/PlatformTypefaces; -Landroidx/compose/ui/text/font/PlatformTypefacesApi28; Landroidx/compose/ui/text/font/SystemFontFamily; Landroidx/compose/ui/text/font/TypefaceRequest; Landroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1; @@ -11147,6 +10449,7 @@ Landroidx/compose/ui/text/style/TextForegroundStyle$merge$2; Landroidx/compose/ui/text/style/TextForegroundStyle; Landroidx/compose/ui/text/style/TextGeometricTransform; Landroidx/compose/ui/text/style/TextIndent; +Landroidx/compose/ui/unit/AndroidDensity_androidKt; Landroidx/compose/ui/unit/Constraints$Companion; Landroidx/compose/ui/unit/Constraints; Landroidx/compose/ui/unit/Density; @@ -11165,34 +10468,23 @@ Landroidx/compose/ui/unit/LayoutDirection; Landroidx/compose/ui/unit/TextUnit; Landroidx/compose/ui/unit/TextUnitKt; Landroidx/compose/ui/unit/TextUnitType; -Landroidx/compose/ui/viewinterop/AndroidViewHolder; +Landroidx/compose/ui/util/MathHelpersKt; Landroidx/compose/ui/window/DialogWindowProvider; -Landroidx/compose/ui/window/PopupLayoutHelper; -Landroidx/compose/ui/window/PopupLayoutHelperImpl; +Landroidx/core/R$id; Landroidx/core/app/ComponentActivity; Landroidx/core/app/CoreComponentFactory$CompatWrapped; Landroidx/core/app/CoreComponentFactory; Landroidx/core/content/ContextCompat$Api23Impl; Landroidx/core/content/ContextCompat; +Landroidx/core/content/PermissionChecker; +Landroidx/core/content/res/CamUtils; Landroidx/core/content/res/ComplexColorCompat; Landroidx/core/content/res/TypedArrayUtils; Landroidx/core/graphics/Insets; -Landroidx/core/graphics/TypefaceCompat; -Landroidx/core/graphics/TypefaceCompatApi29Impl; -Landroidx/core/graphics/TypefaceCompatBaseImpl; +Landroidx/core/math/MathUtils; Landroidx/core/net/ConnectivityManagerCompat$Api16Impl; Landroidx/core/os/BuildCompat; Landroidx/core/os/HandlerCompat; -Landroidx/core/os/TraceCompat$Api18Impl; -Landroidx/core/os/TraceCompat; -Landroidx/core/provider/CalleeHandler; -Landroidx/core/provider/FontProvider$$ExternalSyntheticLambda0; -Landroidx/core/provider/FontProvider$Api16Impl; -Landroidx/core/provider/FontProvider; -Landroidx/core/provider/FontRequest$$ExternalSyntheticOutline0; -Landroidx/core/provider/FontRequest; -Landroidx/core/provider/FontsContractCompat$FontFamilyResult; -Landroidx/core/provider/FontsContractCompat$FontInfo; Landroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0; Landroidx/core/splashscreen/SplashScreen$Impl31$hierarchyListener$1; Landroidx/core/splashscreen/SplashScreen$Impl31$setKeepOnScreenCondition$1; @@ -11201,19 +10493,18 @@ Landroidx/core/splashscreen/SplashScreen$Impl; Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition; Landroidx/core/util/Consumer; Landroidx/core/util/DebugUtils; -Landroidx/core/util/Preconditions; Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter; Landroidx/core/view/AccessibilityDelegateCompat; +Landroidx/core/view/DisplayCutoutCompat$Api30Impl$$ExternalSyntheticApiModelOutline0; +Landroidx/core/view/DisplayCutoutCompat$Api30Impl; +Landroidx/core/view/DisplayCutoutCompat; Landroidx/core/view/KeyEventDispatcher$Component; Landroidx/core/view/MenuHostHelper; -Landroidx/core/view/NestedScrollingParent2; -Landroidx/core/view/NestedScrollingParent3; Landroidx/core/view/OnApplyWindowInsetsListener; Landroidx/core/view/OnReceiveContentViewBehavior; Landroidx/core/view/OneShotPreDrawListener; Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0; Landroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager; -Landroidx/core/view/ViewCompat$Api16Impl; Landroidx/core/view/ViewCompat$Api19Impl; Landroidx/core/view/ViewCompat$Api21Impl$1; Landroidx/core/view/ViewCompat$Api21Impl; @@ -11244,22 +10535,7 @@ Landroidx/core/view/WindowInsetsControllerCompat$Impl30$$ExternalSyntheticApiMod Landroidx/core/view/WindowInsetsControllerCompat$Impl30; Landroidx/core/view/WindowInsetsControllerCompat$Impl; Landroidx/core/view/WindowInsetsControllerCompat; -Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline0; -Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline1; -Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline2; -Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline4; -Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline5; -Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat; -Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; -Landroidx/core/view/accessibility/AccessibilityViewCommand$CommandArguments; -Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveAtGranularityArguments; -Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveHtmlArguments; -Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveWindowArguments; -Landroidx/core/view/accessibility/AccessibilityViewCommand$ScrollToPositionArguments; -Landroidx/core/view/accessibility/AccessibilityViewCommand$SetProgressArguments; -Landroidx/core/view/accessibility/AccessibilityViewCommand$SetSelectionArguments; -Landroidx/core/view/accessibility/AccessibilityViewCommand$SetTextArguments; Landroidx/customview/poolingcontainer/PoolingContainer; Landroidx/customview/poolingcontainer/PoolingContainerListener; Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; @@ -11307,32 +10583,19 @@ Landroidx/datastore/core/SingleProcessDataStore; Landroidx/datastore/core/State; Landroidx/datastore/core/UnInitialized; Landroidx/datastore/core/handlers/NoOpCorruptionHandler; -Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0; Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl; -Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper; -Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19; -Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28; -Landroidx/emoji2/text/DefaultEmojiCompatConfig; Landroidx/emoji2/text/DefaultGlyphChecker; -Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1; Landroidx/emoji2/text/EmojiCompat$CompatInternal19; Landroidx/emoji2/text/EmojiCompat$CompatInternal; Landroidx/emoji2/text/EmojiCompat$Config; Landroidx/emoji2/text/EmojiCompat$GlyphChecker; Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader; -Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback; Landroidx/emoji2/text/EmojiCompat; Landroidx/emoji2/text/EmojiCompatInitializer$1; Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig; -Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0; -Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1; Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader; Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable; Landroidx/emoji2/text/EmojiCompatInitializer; -Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper; -Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0; -Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader; -Landroidx/emoji2/text/FontRequestEmojiCompatConfig; Landroidx/hilt/navigation/compose/HiltViewModelKt; Landroidx/hilt/work/HiltWorkerFactory; Landroidx/hilt/work/WorkerAssistedFactory; @@ -11360,7 +10623,6 @@ Landroidx/lifecycle/LifecycleCoroutineScopeImpl; Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback; Landroidx/lifecycle/LifecycleDispatcher; Landroidx/lifecycle/LifecycleEventObserver; -Landroidx/lifecycle/LifecycleKt; Landroidx/lifecycle/LifecycleObserver; Landroidx/lifecycle/LifecycleOwner; Landroidx/lifecycle/LifecycleRegistry$ObserverWithState; @@ -11410,6 +10672,7 @@ Landroidx/lifecycle/SavedStateViewModelFactory; Landroidx/lifecycle/SavedStateViewModelFactoryKt; Landroidx/lifecycle/Transformations$1; Landroidx/lifecycle/ViewModel; +Landroidx/lifecycle/ViewModelKt; Landroidx/lifecycle/ViewModelLazy; Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl; Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory; @@ -11420,11 +10683,11 @@ Landroidx/lifecycle/ViewModelProvider$OnRequeryFactory; Landroidx/lifecycle/ViewModelProvider; Landroidx/lifecycle/ViewModelStore; Landroidx/lifecycle/ViewModelStoreOwner; -Landroidx/lifecycle/ViewTreeViewModelStoreOwner; Landroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1$1; Landroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1; Landroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1; Landroidx/lifecycle/compose/FlowExtKt; +Landroidx/lifecycle/runtime/R$id; Landroidx/lifecycle/viewmodel/CreationExtras$Empty; Landroidx/lifecycle/viewmodel/CreationExtras; Landroidx/lifecycle/viewmodel/InitializerViewModelFactory; @@ -11451,7 +10714,6 @@ Landroidx/metrics/performance/OnFrameListenerDelegate; Landroidx/metrics/performance/PerformanceMetricsState$Holder; Landroidx/metrics/performance/PerformanceMetricsState$StateData; Landroidx/metrics/performance/PerformanceMetricsState; -Landroidx/metrics/performance/R$id; Landroidx/metrics/performance/StateInfo; Landroidx/navigation/ActivityNavigator$hostActivity$1; Landroidx/navigation/ActivityNavigator; @@ -11531,6 +10793,7 @@ Landroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1$2; Landroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1; Landroidx/navigation/compose/NavHostKt; Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0; +Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1; Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0; Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl; Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl; @@ -11616,7 +10879,7 @@ Landroidx/sqlite/util/ProcessLock; Landroidx/startup/AppInitializer; Landroidx/startup/InitializationProvider; Landroidx/startup/Initializer; -Landroidx/startup/R$string; +Landroidx/startup/StartupLogger; Landroidx/tracing/Trace; Landroidx/tracing/TraceApi29Impl$$ExternalSyntheticApiModelOutline0; Landroidx/tracing/TraceApi29Impl$$ExternalSyntheticApiModelOutline1; @@ -11821,6 +11084,7 @@ Lcoil/RealImageLoader$executeMain$1; Lcoil/RealImageLoader$executeMain$result$1; Lcoil/RealImageLoader$special$$inlined$CoroutineExceptionHandler$1; Lcoil/RealImageLoader; +Lcoil/base/R$id; Lcoil/compose/AsyncImageKt$AsyncImage$2; Lcoil/compose/AsyncImageKt$Content$$inlined$Layout$1; Lcoil/compose/AsyncImageKt$Content$1$measure$1; @@ -11851,39 +11115,22 @@ Lcoil/compose/LocalImageLoaderKt; Lcoil/compose/SingletonAsyncImageKt; Lcoil/compose/UtilsKt$transformOf$1; Lcoil/compose/UtilsKt; -Lcoil/decode/BitmapFactoryDecoder$ExceptionCatchingSource; Lcoil/decode/BitmapFactoryDecoder$Factory; -Lcoil/decode/BitmapFactoryDecoder$decode$1; -Lcoil/decode/BitmapFactoryDecoder$decode$2$1; -Lcoil/decode/BitmapFactoryDecoder; Lcoil/decode/Decoder$Factory; -Lcoil/decode/Decoder; -Lcoil/decode/ExifUtils; -Lcoil/decode/ExifUtilsKt; -Lcoil/decode/FileImageSource; -Lcoil/decode/ImageSource; -Lcoil/decode/ImageSources; -Lcoil/decode/SvgDecodeUtils; Lcoil/decode/SvgDecoder$Factory; Lcoil/disk/DiskCache$Builder; -Lcoil/disk/DiskCache$Snapshot; Lcoil/disk/DiskCache; -Lcoil/disk/DiskLruCache$Editor; Lcoil/disk/DiskLruCache$Entry; -Lcoil/disk/DiskLruCache$Snapshot; Lcoil/disk/DiskLruCache$fileSystem$1; Lcoil/disk/DiskLruCache$newJournalWriter$faultHidingSink$1; Lcoil/disk/DiskLruCache; Lcoil/disk/FaultHidingSink; -Lcoil/disk/RealDiskCache$RealEditor; -Lcoil/disk/RealDiskCache$RealSnapshot; Lcoil/disk/RealDiskCache; Lcoil/fetch/AssetUriFetcher$Factory; Lcoil/fetch/BitmapFetcher$Factory; Lcoil/fetch/ByteBufferFetcher$Factory; Lcoil/fetch/ContentUriFetcher$Factory; Lcoil/fetch/DrawableFetcher$Factory; -Lcoil/fetch/FetchResult; Lcoil/fetch/Fetcher$Factory; Lcoil/fetch/Fetcher; Lcoil/fetch/FileFetcher$Factory; @@ -11892,10 +11139,7 @@ Lcoil/fetch/HttpUriFetcher$executeNetworkRequest$1; Lcoil/fetch/HttpUriFetcher$fetch$1; Lcoil/fetch/HttpUriFetcher; Lcoil/fetch/ResourceUriFetcher$Factory; -Lcoil/fetch/SourceResult; -Lcoil/intercept/EngineInterceptor$decode$1; Lcoil/intercept/EngineInterceptor$execute$1; -Lcoil/intercept/EngineInterceptor$execute$executeResult$1; Lcoil/intercept/EngineInterceptor$fetch$1; Lcoil/intercept/EngineInterceptor$intercept$1; Lcoil/intercept/EngineInterceptor$intercept$2; @@ -11925,11 +11169,9 @@ Lcoil/memory/RealStrongMemoryCache; Lcoil/memory/RealWeakMemoryCache; Lcoil/memory/StrongMemoryCache; Lcoil/memory/WeakMemoryCache; -Lcoil/network/CacheResponse$cacheControl$2; -Lcoil/network/CacheResponse$contentType$2; -Lcoil/network/CacheResponse; Lcoil/network/CacheStrategy$Factory; Lcoil/network/CacheStrategy; +Lcoil/network/EmptyNetworkObserver; Lcoil/network/NetworkObserver$Listener; Lcoil/network/NetworkObserver; Lcoil/network/RealNetworkObserver$networkCallback$1; @@ -11970,7 +11212,6 @@ Lcoil/util/ImageLoaderOptions; Lcoil/util/ImmutableHardwareBitmapService; Lcoil/util/SingletonDiskCache; Lcoil/util/SystemCallbacks; -Lcom/caverock/androidsvg/CSSParser$Source$EnumUnboxingLocalUtility; Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController; Lcom/google/accompanist/systemuicontroller/SystemUiController; Lcom/google/accompanist/systemuicontroller/SystemUiControllerKt; @@ -12095,17 +11336,7 @@ Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2 Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$suspendRunCatching$1; Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt; Lcom/google/samples/apps/nowinandroid/core/data/Synchronizer; -Lcom/google/samples/apps/nowinandroid/core/data/repository/AuthorsRepository; Lcom/google/samples/apps/nowinandroid/core/data/repository/NewsRepository; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1$2$1; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1$2; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthors$$inlined$map$1; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$2; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$3; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$4; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$5; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$syncWith$6; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository; Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$2; Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$3; Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$4; @@ -12128,10 +11359,11 @@ Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkM Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1; Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor; Lcom/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor; -Lcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema10to11; +Lcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema11to12; Lcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema2to3; Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase; Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_10_11_Impl; +Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_11_12_Impl; Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_1_2_Impl; Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_2_3_Impl; Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_3_4_Impl; @@ -12143,26 +11375,14 @@ Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_8_ Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_9_10_Impl; Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl$1; Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$10; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$1; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$2; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$3; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$4; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$5; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$7; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$9; -Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl; Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$11; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$14; +Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$12; Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$1; Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$2; Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$3; Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$4; Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$5; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$6; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$8; +Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$7; Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$9; Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl; Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao; @@ -12175,9 +11395,6 @@ Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$5; Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$7; Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$9; Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/model/AuthorEntity; -Lcom/google/samples/apps/nowinandroid/core/database/model/AuthorEntityKt; -Lcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceAuthorCrossRef; Lcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity; Lcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef; Lcom/google/samples/apps/nowinandroid/core/database/model/TopicEntity; @@ -12230,6 +11447,7 @@ Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt$N Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt$NiaNavigationBarItem$1; Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt; Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaButtonDefaults; +Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaNavigationDefaults; Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaToggleButtonDefaults; Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$1$1; Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$2$1; @@ -12262,12 +11480,7 @@ Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase$inv Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase; Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1; Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase; -Lcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase$invoke$1$invokeSuspend$$inlined$sortedBy$1; -Lcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase$invoke$1; -Lcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase; -Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableAuthor; Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic; -Lcom/google/samples/apps/nowinandroid/core/model/data/Author; Lcom/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig; Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType; Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceTypeKt; @@ -12277,9 +11490,6 @@ Lcom/google/samples/apps/nowinandroid/core/model/data/UserData; Lcom/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource; Lcom/google/samples/apps/nowinandroid/core/network/di/NetworkModule$providesFakeAssetManager$1; Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthorChangeList$1; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthorChangeList$2; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getAuthors$2; Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$1; Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$2; Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResources$2; @@ -12288,9 +11498,6 @@ Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopics$2; Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource; Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceKt; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor$$serializer; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor$Companion; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkAuthor; Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList$Companion; Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList; Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer; @@ -12314,19 +11521,9 @@ Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt; Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Loading; Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Success; Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState; -Lcom/google/samples/apps/nowinandroid/feature/author/navigation/AuthorNavigationKt$authorScreen$2; +Lcom/google/samples/apps/nowinandroid/di/JankStatsModule$providesOnFrameListener$1; Lcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt$lambda-1$1; Lcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$2$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$3; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$4$1$1$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$5; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$2$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$invoke$$inlined$items$default$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$invoke$$inlined$items$default$3; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$invoke$$inlined$items$default$4; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt; Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-1$1; Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-10$1; Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-11$1; @@ -12345,7 +11542,6 @@ Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$ Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$2; Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$3; Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$4; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$5; Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1$invokeSuspend$$inlined$doOnPreDraw$1; Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1; Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$1$1; @@ -12387,7 +11583,6 @@ Lcom/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavi Lcom/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigationKt$topicScreen$2; Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$1; Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$2; -Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$3; Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1; Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt; Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination; @@ -12402,7 +11597,6 @@ Lcom/google/samples/apps/nowinandroid/sync/workers/HiltWorkerFactoryEntryPoint; Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$1; Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$1; Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$2; -Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$3; Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2; Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker; Lcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-1$1; @@ -12551,6 +11745,7 @@ Lkotlin/Result; Lkotlin/ResultKt; Lkotlin/SafePublicationLazyImpl; Lkotlin/SynchronizedLazyImpl; +Lkotlin/TuplesKt; Lkotlin/UByte; Lkotlin/UByteArray; Lkotlin/UInt; @@ -12589,7 +11784,6 @@ Lkotlin/collections/IntIterator; Lkotlin/collections/MapsKt__MapsJVMKt; Lkotlin/collections/MapsKt___MapsJvmKt; Lkotlin/collections/SetsKt; -Lkotlin/collections/SetsKt__SetsKt; Lkotlin/collections/builders/ListBuilder; Lkotlin/collections/builders/ListBuilderKt; Lkotlin/collections/builders/MapBuilder$Companion; @@ -12597,7 +11791,6 @@ Lkotlin/collections/builders/MapBuilder$Itr; Lkotlin/collections/builders/MapBuilder$KeysItr; Lkotlin/collections/builders/MapBuilder; Lkotlin/collections/builders/SetBuilder; -Lkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt; Lkotlin/comparisons/NaturalOrderComparator; Lkotlin/coroutines/AbstractCoroutineContextElement; Lkotlin/coroutines/AbstractCoroutineContextKey; @@ -12614,6 +11807,7 @@ Lkotlin/coroutines/CoroutineContext; Lkotlin/coroutines/EmptyCoroutineContext; Lkotlin/coroutines/SafeContinuation; Lkotlin/coroutines/intrinsics/CoroutineSingletons; +Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt; Lkotlin/coroutines/jvm/internal/BaseContinuationImpl; Lkotlin/coroutines/jvm/internal/CompletedContinuation; Lkotlin/coroutines/jvm/internal/ContinuationImpl; @@ -12735,10 +11929,10 @@ Lkotlin/text/StringsKt__StringBuilderKt; Lkotlin/text/StringsKt__StringNumberConversionsKt; Lkotlin/text/StringsKt__StringsJVMKt; Lkotlin/text/StringsKt__StringsKt; -Lkotlin/text/UStringsKt; Lkotlin/time/Duration; Lkotlin/time/DurationJvmKt; Lkotlin/time/DurationKt; +Lkotlin/time/DurationUnitKt__DurationUnitKt; Lkotlinx/coroutines/AbstractCoroutine; Lkotlinx/coroutines/Active; Lkotlinx/coroutines/AwaitAll$AwaitAllNode; @@ -12803,7 +11997,6 @@ Lkotlinx/coroutines/GlobalScope; Lkotlinx/coroutines/InactiveNodeList; Lkotlinx/coroutines/Incomplete; Lkotlinx/coroutines/IncompleteStateBox; -Lkotlinx/coroutines/InterruptibleKt$runInterruptible$2; Lkotlinx/coroutines/InvokeOnCancel; Lkotlinx/coroutines/InvokeOnCancelling; Lkotlinx/coroutines/InvokeOnCompletion; @@ -12814,6 +12007,7 @@ Lkotlinx/coroutines/JobCancellationException; Lkotlinx/coroutines/JobCancellingNode; Lkotlinx/coroutines/JobImpl; Lkotlinx/coroutines/JobKt; +Lkotlinx/coroutines/JobKt__FutureKt; Lkotlinx/coroutines/JobNode; Lkotlinx/coroutines/JobSupport$AwaitContinuation; Lkotlinx/coroutines/JobSupport$ChildCompletion; @@ -12826,7 +12020,6 @@ Lkotlinx/coroutines/NodeList; Lkotlinx/coroutines/NonDisposableHandle; Lkotlinx/coroutines/NotCompleted; Lkotlinx/coroutines/ParentJob; -Lkotlinx/coroutines/RemoveOnCancel; Lkotlinx/coroutines/ResumeAwaitOnCompletion; Lkotlinx/coroutines/ResumeOnCompletion; Lkotlinx/coroutines/StandaloneCoroutine; @@ -12834,7 +12027,6 @@ Lkotlinx/coroutines/SupervisorJobImpl; Lkotlinx/coroutines/SupervisorKt; Lkotlinx/coroutines/ThreadContextElement; Lkotlinx/coroutines/ThreadLocalEventLoop; -Lkotlinx/coroutines/ThreadState; Lkotlinx/coroutines/TimeoutCancellationException; Lkotlinx/coroutines/Unconfined; Lkotlinx/coroutines/UndispatchedCoroutine; @@ -12881,7 +12073,6 @@ Lkotlinx/coroutines/channels/ReceiveOrClosed; Lkotlinx/coroutines/channels/RendezvousChannel; Lkotlinx/coroutines/channels/Send; Lkotlinx/coroutines/channels/SendChannel; -Lkotlinx/coroutines/channels/SendElement; Lkotlinx/coroutines/flow/AbstractFlow$collect$1; Lkotlinx/coroutines/flow/AbstractFlow; Lkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1; @@ -12892,6 +12083,7 @@ Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2; Lkotlinx/coroutines/flow/DistinctFlowImpl; Lkotlinx/coroutines/flow/Flow; Lkotlinx/coroutines/flow/FlowCollector; +Lkotlinx/coroutines/flow/FlowKt; Lkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2; Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1; Lkotlinx/coroutines/flow/FlowKt__ChannelsKt; @@ -12913,8 +12105,6 @@ Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2; Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1; Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1; Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2; -Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2; -Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1; Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1; Lkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1; @@ -12963,7 +12153,6 @@ Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1; Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1; Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1; Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2; -Lkotlinx/coroutines/flow/internal/CombineKt; Lkotlinx/coroutines/flow/internal/DownstreamExceptionContext; Lkotlinx/coroutines/flow/internal/FlowCoroutine; Lkotlinx/coroutines/flow/internal/FusibleFlow; @@ -13002,7 +12191,6 @@ Lkotlinx/coroutines/internal/ResizableAtomicArray; Lkotlinx/coroutines/internal/ScopeCoroutine; Lkotlinx/coroutines/internal/Segment; Lkotlinx/coroutines/internal/Symbol; -Lkotlinx/coroutines/internal/SystemPropsKt; Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt; Lkotlinx/coroutines/internal/ThreadContextKt$countAll$1; Lkotlinx/coroutines/internal/ThreadContextKt; @@ -13113,6 +12301,7 @@ Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2; Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2; Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2; Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor; +Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt; Lkotlinx/serialization/internal/PrimitiveArrayDescriptor; Lkotlinx/serialization/internal/PrimitiveArraySerializer; Lkotlinx/serialization/internal/PrimitiveSerialDescriptor; @@ -13135,6 +12324,7 @@ Lkotlinx/serialization/json/Json; Lkotlinx/serialization/json/JsonConfiguration; Lkotlinx/serialization/json/JsonDecoder; Lkotlinx/serialization/json/JsonImpl; +Lkotlinx/serialization/json/JsonNames; Lkotlinx/serialization/json/JvmStreamsKt; Lkotlinx/serialization/json/internal/AbstractJsonLexer; Lkotlinx/serialization/json/internal/AbstractJsonLexerKt; @@ -13148,7 +12338,6 @@ Lkotlinx/serialization/json/internal/JsonExceptionsKt; Lkotlinx/serialization/json/internal/JsonNamesMapKt; Lkotlinx/serialization/json/internal/JsonPath$Tombstone; Lkotlinx/serialization/json/internal/JsonPath; -Lkotlinx/serialization/json/internal/PolymorphicKt; Lkotlinx/serialization/json/internal/ReaderJsonLexer; Lkotlinx/serialization/json/internal/SerialReader; Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder; @@ -13181,10 +12370,6 @@ Lokhttp3/Dns; Lokhttp3/EventListener$Companion$NONE$1; Lokhttp3/EventListener$Factory; Lokhttp3/EventListener; -Lokhttp3/Handshake$Companion$handshake$1; -Lokhttp3/Handshake$Companion; -Lokhttp3/Handshake$peerCertificates$2; -Lokhttp3/Handshake; Lokhttp3/Headers$Builder; Lokhttp3/Headers$Companion; Lokhttp3/Headers; @@ -13192,23 +12377,17 @@ Lokhttp3/HttpUrl$Builder; Lokhttp3/HttpUrl$Companion; Lokhttp3/HttpUrl; Lokhttp3/Interceptor; -Lokhttp3/MediaType$Companion; -Lokhttp3/MediaType; Lokhttp3/OkHttpClient; -Lokhttp3/Protocol$Companion; Lokhttp3/Protocol; Lokhttp3/Request$Builder; Lokhttp3/Request; Lokhttp3/RequestBody$Companion$toRequestBody$2; Lokhttp3/RequestBody; -Lokhttp3/Response$Builder; -Lokhttp3/Response; Lokhttp3/ResponseBody$Companion$asResponseBody$1; Lokhttp3/ResponseBody; Lokhttp3/Route; Lokhttp3/TlsVersion$Companion; Lokhttp3/TlsVersion; -Lokhttp3/internal/HostnamesKt; Lokhttp3/internal/Util$$ExternalSyntheticLambda0; Lokhttp3/internal/Util$$ExternalSyntheticLambda1; Lokhttp3/internal/Util; @@ -13216,7 +12395,6 @@ Lokhttp3/internal/cache/CacheInterceptor$Companion; Lokhttp3/internal/cache/CacheInterceptor; Lokhttp3/internal/cache/CacheStrategy; Lokhttp3/internal/concurrent/Task; -Lokhttp3/internal/concurrent/TaskQueue$execute$1; Lokhttp3/internal/concurrent/TaskQueue; Lokhttp3/internal/concurrent/TaskRunner$Backend; Lokhttp3/internal/concurrent/TaskRunner$RealBackend; @@ -13224,15 +12402,11 @@ Lokhttp3/internal/concurrent/TaskRunner$runnable$1; Lokhttp3/internal/concurrent/TaskRunner; Lokhttp3/internal/connection/ConnectInterceptor; Lokhttp3/internal/connection/ConnectionSpecSelector; -Lokhttp3/internal/connection/Exchange$ResponseBodySource; -Lokhttp3/internal/connection/Exchange; Lokhttp3/internal/connection/ExchangeFinder; Lokhttp3/internal/connection/RealCall$AsyncCall; -Lokhttp3/internal/connection/RealCall$CallReference; Lokhttp3/internal/connection/RealCall$timeout$1; Lokhttp3/internal/connection/RealCall; Lokhttp3/internal/connection/RealConnection$WhenMappings; -Lokhttp3/internal/connection/RealConnection$connectTls$1; Lokhttp3/internal/connection/RealConnection; Lokhttp3/internal/connection/RealConnectionPool$cleanupTask$1; Lokhttp3/internal/connection/RealConnectionPool; @@ -13242,44 +12416,12 @@ Lokhttp3/internal/connection/RouteSelector$Selection; Lokhttp3/internal/connection/RouteSelector; Lokhttp3/internal/http/BridgeInterceptor; Lokhttp3/internal/http/CallServerInterceptor; -Lokhttp3/internal/http/ExchangeCodec; -Lokhttp3/internal/http/HttpHeaders; -Lokhttp3/internal/http/HttpMethod; Lokhttp3/internal/http/RealInterceptorChain; -Lokhttp3/internal/http/RealResponseBody; Lokhttp3/internal/http/RetryAndFollowUpInterceptor; -Lokhttp3/internal/http/StatusLine$Companion; -Lokhttp3/internal/http/StatusLine; -Lokhttp3/internal/http2/ErrorCode; -Lokhttp3/internal/http2/Header; -Lokhttp3/internal/http2/Hpack$Reader; -Lokhttp3/internal/http2/Hpack$Writer; -Lokhttp3/internal/http2/Hpack; Lokhttp3/internal/http2/Http2; -Lokhttp3/internal/http2/Http2Connection$Builder; Lokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1; Lokhttp3/internal/http2/Http2Connection$Listener; -Lokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$lambda-7$lambda-6$$inlined$execute$default$1; -Lokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$$inlined$execute$default$1; -Lokhttp3/internal/http2/Http2Connection$ReaderRunnable; -Lokhttp3/internal/http2/Http2Connection; -Lokhttp3/internal/http2/Http2ExchangeCodec; -Lokhttp3/internal/http2/Http2Reader$Companion; -Lokhttp3/internal/http2/Http2Reader$ContinuationSource; -Lokhttp3/internal/http2/Http2Reader$Handler; -Lokhttp3/internal/http2/Http2Reader; -Lokhttp3/internal/http2/Http2Stream$FramingSink; -Lokhttp3/internal/http2/Http2Stream$FramingSource; -Lokhttp3/internal/http2/Http2Stream$StreamTimeout; -Lokhttp3/internal/http2/Http2Stream; -Lokhttp3/internal/http2/Http2Writer; -Lokhttp3/internal/http2/Huffman$Node; -Lokhttp3/internal/http2/Huffman; -Lokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel; -Lokhttp3/internal/http2/PushObserver; -Lokhttp3/internal/http2/Settings; Lokhttp3/internal/platform/Android10Platform; -Lokhttp3/internal/platform/Jdk9Platform$$ExternalSyntheticApiModelOutline1; Lokhttp3/internal/platform/Platform$Companion; Lokhttp3/internal/platform/Platform; Lokhttp3/internal/platform/android/Android10SocketAdapter; @@ -13297,8 +12439,6 @@ Lokhttp3/internal/platform/android/DeferredSocketAdapter; Lokhttp3/internal/platform/android/SocketAdapter; Lokhttp3/internal/tls/CertificateChainCleaner; Lokhttp3/internal/tls/OkHostnameVerifier; -Lokio/AsyncTimeout$Companion; -Lokio/AsyncTimeout$Watchdog; Lokio/AsyncTimeout$sink$1; Lokio/AsyncTimeout$source$1; Lokio/AsyncTimeout; @@ -13311,19 +12451,17 @@ Lokio/FileMetadata; Lokio/FileSystem; Lokio/ForwardingFileSystem; Lokio/ForwardingSink; -Lokio/ForwardingSource; Lokio/InputStreamSource; Lokio/JvmSystemFileSystem; Lokio/NioSystemFileSystem; Lokio/Okio; Lokio/Okio__JvmOkioKt; +Lokio/Okio__OkioKt; Lokio/Options$Companion; Lokio/OutputStreamSink; Lokio/Path$Companion; Lokio/Path; -Lokio/PeekSource; Lokio/RealBufferedSink; -Lokio/RealBufferedSource$inputStream$1; Lokio/RealBufferedSource; Lokio/Segment; Lokio/SegmentPool; @@ -13341,12 +12479,11 @@ Lokio/internal/_ByteStringKt; Lokio/internal/_PathKt; PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->saveState()Landroid/os/Bundle; PLandroidx/activity/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V -PLandroidx/activity/ComponentActivity;->onTrimMemory(I)V PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->registerOnBackInvokedCallback(Ljava/lang/Object;ILjava/lang/Object;)V PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->unregisterOnBackInvokedCallback(Ljava/lang/Object;Ljava/lang/Object;)V PLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V PLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V -PLandroidx/appcompat/widget/TooltipCompatHandler$$ExternalSyntheticLambda1;->run()V +PLandroidx/appcompat/R$style;->setOf([Ljava/lang/Object;)Ljava/util/Set; PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry; PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V @@ -13361,31 +12498,24 @@ PLandroidx/compose/animation/AndroidFlingSpline;->flingPosition(F)Landroidx/comp PLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->(Landroidx/compose/animation/core/Transition;)V PLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/animation/FlingCalculator$FlingInfo;->(FFJ)V -PLandroidx/compose/animation/FlingCalculator;->getSplineDeceleration(F)D PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getAbsVelocityThreshold()V PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getDurationNanos(F)J PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getTargetValue(FF)F -PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getValueFromNanos(FFJ)F -PLandroidx/compose/animation/core/AnimateAsStateKt;->animateDpAsState-Kz89ssw(FLandroidx/compose/animation/core/TweenSpec;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/AnimationState; -PLandroidx/compose/animation/core/AnimationStateKt;->AnimationState$default(FFI)Landroidx/compose/animation/core/AnimationState; +PLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->compareTo(II)I PLandroidx/compose/animation/core/DecayAnimation;->(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V PLandroidx/compose/animation/core/DecayAnimation;->getDurationNanos()J PLandroidx/compose/animation/core/DecayAnimation;->getTargetValue()Ljava/lang/Object; PLandroidx/compose/animation/core/DecayAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; -PLandroidx/compose/animation/core/DecayAnimation;->getValueFromNanos(J)Ljava/lang/Object; -PLandroidx/compose/animation/core/DecayAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector; PLandroidx/compose/animation/core/DecayAnimation;->isInfinite()Z PLandroidx/compose/animation/core/DecayAnimationSpecImpl;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFloatDecaySpec; PLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->dispose()V PLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;->invoke()Ljava/lang/Object; +PLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;->(Landroidx/compose/animation/core/AnimationState;)V PLandroidx/compose/animation/core/SuspendAnimationKt;->animateDecay$default(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/DecayAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; -PLandroidx/compose/animation/core/Transition$updateTarget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;->dispose()V PLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;->dispose()V PLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1;->dispose()V PLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getAbsVelocityThreshold()F PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J @@ -13393,21 +12523,11 @@ PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getTargetValue(Land PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePostFling-sF-c-tU(J)Lkotlin/Unit; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePreFling-QWom1Mo(J)Landroidx/compose/ui/unit/Velocity; PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawBottom(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroid/widget/EdgeEffect;Landroid/graphics/Canvas;)Z -PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isEnabled()Z PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isInProgress()Z -PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->pullBottom-0a9Yr6o(JJ)F PLandroidx/compose/foundation/Api31Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/widget/EdgeEffect;FF)F PLandroidx/compose/foundation/Api31Impl;->onPullDistance(Landroid/widget/EdgeEffect;FF)F -PLandroidx/compose/foundation/BorderKt$border$2$1;->(FLandroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/node/Ref;Landroidx/compose/ui/graphics/Brush;)V -PLandroidx/compose/foundation/BorderKt$border$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/BorderKt$border$2;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V -PLandroidx/compose/foundation/BorderKt$border$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/BorderKt$drawRoundRectBorder$1;->(ZLandroidx/compose/ui/graphics/Brush;JFFJJLandroidx/compose/ui/graphics/drawscope/Stroke;)V -PLandroidx/compose/foundation/BorderKt$drawRoundRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/BorderKt;->shrink-Kibmq7A(FJ)J -PLandroidx/compose/foundation/BorderStroke;->(FLandroidx/compose/ui/graphics/SolidColor;)V -PLandroidx/compose/foundation/BorderStroke;->equals(Ljava/lang/Object;)Z PLandroidx/compose/foundation/ClickableKt$clickable$2;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +PLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; @@ -13440,13 +12560,10 @@ PLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->(I)V PLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;->(Lkotlinx/coroutines/CoroutineScope;ZLandroidx/compose/foundation/ScrollState;)V PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;->(Landroidx/compose/foundation/ScrollState;)V -PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;->(Landroidx/compose/foundation/ScrollState;)V -PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/ScrollKt$scroll$2;->(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZZ)V -PLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/ScrollKt;->rememberScrollState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/ScrollState; PLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V PLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V @@ -13475,7 +12592,6 @@ PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->( PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->scrollBy(F)F PLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/DragEvent$DragDelta;->(J)V PLandroidx/compose/foundation/gestures/DragEvent$DragStarted;->(J)V @@ -13543,8 +12659,6 @@ PLandroidx/compose/foundation/gestures/ScrollingLogic$onDragStopped$1;->(L PLandroidx/compose/foundation/gestures/ScrollingLogic$onDragStopped$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/ScrollingLogic;->doFlingAnimation-QWom1Mo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/foundation/gestures/ScrollingLogic;->onDragStopped-sF-c-tU(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollingLogic;->toFloat-k-4lQ0M(J)F -PLandroidx/compose/foundation/gestures/ScrollingLogic;->toOffset-tuRUvjQ(F)J PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; @@ -13556,88 +12670,143 @@ PLandroidx/compose/foundation/interaction/DragInteraction$Stop;->(Landroid PLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/foundation/interaction/PressInteraction$Press;->(J)V PLandroidx/compose/foundation/interaction/PressInteraction$Release;->(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V -PLandroidx/compose/foundation/layout/AddedInsets;->getTop(Landroidx/compose/ui/unit/Density;)I PLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V -PLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V -PLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->getSpacing-D9Ej5fM()F PLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F -PLandroidx/compose/foundation/layout/Arrangement;->placeSpaceBetween$foundation_layout_release(I[I[IZ)V PLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V PLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object; PLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V PLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V -PLandroidx/compose/foundation/layout/DerivedHeightModifier$measure$2;->(Landroidx/compose/ui/layout/Placeable;)V -PLandroidx/compose/foundation/layout/DerivedHeightModifier$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/HorizontalAlignModifier;->(Landroidx/compose/ui/BiasAlignment$Horizontal;)V -PLandroidx/compose/foundation/layout/HorizontalAlignModifier;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/foundation/layout/HorizontalAlignModifier;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$VerticalMaxHeight$1$1;->()V -PLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$VerticalMaxHeight$1$1;->()V -PLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$VerticalMaxHeight$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$VerticalMaxHeight$1$2;->()V -PLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$VerticalMaxHeight$1$2;->()V -PLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$VerticalMaxHeight$1;->()V -PLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$VerticalMaxHeight$1;->()V -PLandroidx/compose/foundation/layout/IntrinsicMeasureBlocks$VerticalMaxHeight$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/OffsetModifier$measure$1;->(Landroidx/compose/foundation/layout/OffsetModifier;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;)V -PLandroidx/compose/foundation/layout/OffsetModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/OffsetModifier;->(FF)V -PLandroidx/compose/foundation/layout/OffsetModifier;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/foundation/layout/OffsetModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; PLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-a9UjIt4$default(FFI)Landroidx/compose/foundation/layout/PaddingValuesImpl; -PLandroidx/compose/foundation/layout/PaddingValuesInsets;->getTop(Landroidx/compose/ui/unit/Density;)I -PLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I -PLandroidx/compose/foundation/layout/RowColumnImplKt;->access$intrinsicSize(Ljava/util/List;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IIII)I PLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4$default(FFI)Landroidx/compose/ui/Modifier; PLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;I)Landroidx/compose/ui/Modifier; -PLandroidx/compose/foundation/layout/UnionInsets;->getTop(Landroidx/compose/ui/unit/Density;)I PLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/foundation/layout/WindowInsetsSizeKt$windowInsetsTopHeight$2;->()V -PLandroidx/compose/foundation/layout/WindowInsetsSizeKt$windowInsetsTopHeight$2;->()V -PLandroidx/compose/foundation/layout/WindowInsetsSizeKt$windowInsetsTopHeight$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->(Landroidx/compose/foundation/layout/WrapContentModifier;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V PLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/WrapContentModifier;->equals(Ljava/lang/Object;)Z PLandroidx/compose/foundation/layout/WrapContentModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; PLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier$waitForFirstLayout$1;->(Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/DataIndex;->(I)V PLandroidx/compose/foundation/lazy/DataIndex;->equals(Ljava/lang/Object;)Z +PLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V +PLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V PLandroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V -PLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->()V +PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;->()V +PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V +PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getValue()Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V +PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getKey()Lkotlin/jvm/functions/Function1; +PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getType()Lkotlin/jvm/functions/Function1; +PLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->(Lkotlinx/coroutines/CoroutineScope;Z)V +PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->(Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V +PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->(Landroidx/compose/foundation/lazy/layout/MutableIntervalList;Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V +PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V +PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I +PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map; +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->(Landroidx/compose/runtime/DerivedSnapshotState;)V +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getContentType(I)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getHeaderIndexes()Ljava/util/List; +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemCount()I +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl; +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKey(I)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map; +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->()V +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->()V +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->()V +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->()V +PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;->(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;I)V +PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V +PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->(IILandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;J)V +PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/OverscrollEffect;)V +PLandroidx/compose/foundation/lazy/LazyListKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V +PLandroidx/compose/foundation/lazy/LazyListKt;->ScrollPositionUpdater(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;I)V +PLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$3;->(Ljava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListPositionedItem;)V +PLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->(Landroidx/compose/foundation/lazy/LazyMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;ILandroidx/compose/foundation/gestures/Orientation;)V +PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map; +PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List; +PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I +PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V +PLandroidx/compose/foundation/lazy/LazyListPinningModifier$Companion$EmptyPinnedItemsHandle$1;->()V +PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->()V +PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;)V +PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->getValue()Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V +PLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;->(JLandroidx/compose/ui/layout/Placeable;Ljava/lang/Object;)V +PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->(IILjava/lang/Object;IIIIZLjava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;J)V +PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec; PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getIndex()I +PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getOffset-Bjo55l4(I)J +PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V PLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/String;Landroidx/compose/runtime/internal/ComposableLambdaImpl;I)V PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$1;->(Ljava/lang/Object;)V PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->(Ljava/lang/Object;)V PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V +PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListScopeImpl;->()V PLandroidx/compose/foundation/lazy/LazyListScopeImpl;->item(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->(II)V +PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update-AhXoVpI(II)V +PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V +PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V +PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V +PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V +PLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +PLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V PLandroidx/compose/foundation/lazy/LazyListState$scroll$1;->(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/lazy/LazyListState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +PLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListState;->()V +PLandroidx/compose/foundation/lazy/LazyListState;->(II)V +PLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I +PLandroidx/compose/foundation/lazy/LazyListState;->isScrollInProgress()Z PLandroidx/compose/foundation/lazy/LazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;)V +PLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->(II)V +PLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/lazy/LazyListState; +PLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;)V +PLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->getAndMeasure-ZjPyQlc(I)Landroidx/compose/foundation/lazy/LazyMeasuredItem; +PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;->invoke()Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;->invoke()Ljava/lang/Object; +PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->(ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;Z)V +PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo; +PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->scrollAxisRange()Landroidx/compose/ui/semantics/ScrollAxisRange; PLandroidx/compose/foundation/lazy/grid/ItemIndex;->equals(Ljava/lang/Object;)Z PLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->getTotalItemsCount()I PLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->getVisibleItemsInfo()Ljava/util/List; PLandroidx/compose/foundation/lazy/grid/LazyGridPositionedItem;->getIndex()I PLandroidx/compose/foundation/lazy/grid/LazyGridPositionedItem;->getRow()I -PLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$DefaultSpan$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/grid/LazyGridState$Companion$Saver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/grid/LazyGridState$scroll$1;->(Landroidx/compose/foundation/lazy/grid/LazyGridState;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/foundation/lazy/grid/LazyGridState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/grid/LazyGridState;->isVertical$foundation_release()Z PLandroidx/compose/foundation/lazy/grid/LazyGridState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$2;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/lazy/grid/LineIndex;->(I)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->areCompatible(Ljava/lang/Object;Ljava/lang/Object;)Z PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->(IJ)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->cancel()V @@ -13645,9 +12814,7 @@ PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->doFrame(J)V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->schedulePrefetch-0kLqBqw(JI)Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest; PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/foundation/selection/ToggleableKt$toggleable$4$1;->invoke()Ljava/lang/Object; PLandroidx/compose/foundation/shape/DpCornerSize;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/foundation/text/TextController$measurePolicy$1;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object; PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V @@ -13669,14 +12836,12 @@ PLandroidx/compose/material/ripple/UnprojectedRipple;->(Z)V PLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect; PLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z PLandroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$2;->(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;II)V -PLandroidx/compose/material3/AndroidMenu_androidKt;->DropdownMenu-ILWXrKs(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V PLandroidx/compose/material3/ButtonColors;->equals(Ljava/lang/Object;)Z PLandroidx/compose/material3/ButtonDefaults;->textButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonColors; PLandroidx/compose/material3/ButtonElevation$animateElevation$3;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/ButtonElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/material3/ButtonElevation$animateElevation$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/material3/ButtonElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/ButtonKt;->TextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V PLandroidx/compose/material3/CardColors;->(JJJJ)V PLandroidx/compose/material3/CardColors;->equals(Ljava/lang/Object;)Z PLandroidx/compose/material3/CardDefaults;->cardColors-ro_MJ88(JLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/CardColors; @@ -13688,102 +12853,18 @@ PLandroidx/compose/material3/CardElevation$animateElevation$2;->(ZLandroid PLandroidx/compose/material3/CardElevation$animateElevation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/compose/material3/CardElevation$animateElevation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/CardElevation;->(FFFFFF)V -PLandroidx/compose/material3/CardElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/AnimationState; PLandroidx/compose/material3/CardKt$Card$4;->(Lkotlin/jvm/functions/Function3;I)V -PLandroidx/compose/material3/CardKt$Card$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/CardKt$Card$5;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/CardColors;Landroidx/compose/material3/CardElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V -PLandroidx/compose/material3/CardKt;->Card(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/CardColors;Landroidx/compose/material3/CardElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -PLandroidx/compose/material3/ChipKt$ChipContent$1;->(FLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;J)V -PLandroidx/compose/material3/ChipKt$ChipContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/ChipKt$FilterChip$2;->(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/SelectableChipColors;Landroidx/compose/material3/SelectableChipElevation;Landroidx/compose/material3/SelectableChipBorder;Landroidx/compose/foundation/interaction/MutableInteractionSource;III)V -PLandroidx/compose/material3/ChipKt$SelectableChip$1;->()V -PLandroidx/compose/material3/ChipKt$SelectableChip$1;->()V -PLandroidx/compose/material3/ChipKt$SelectableChip$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/ChipKt$SelectableChip$2;->(Landroidx/compose/material3/SelectableChipColors;ZZIILkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;FLandroidx/compose/foundation/layout/PaddingValues;)V -PLandroidx/compose/material3/ChipKt$SelectableChip$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/ChipKt$SelectableChip$3;->(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/SelectableChipColors;Landroidx/compose/material3/SelectableChipElevation;Landroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V -PLandroidx/compose/material3/ChipKt;->()V -PLandroidx/compose/material3/ChipKt;->FilterChip(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/SelectableChipColors;Landroidx/compose/material3/SelectableChipElevation;Landroidx/compose/material3/SelectableChipBorder;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;III)V -PLandroidx/compose/material3/ChipKt;->SelectableChip-u0RnIRE(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/SelectableChipColors;Landroidx/compose/material3/SelectableChipElevation;Landroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V -PLandroidx/compose/material3/ChipKt;->access$ChipContent-fe0OD_I(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;JJFLandroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/Composer;I)V -PLandroidx/compose/material3/ComposableSingletons$TabRowKt$lambda-1$1;->()V -PLandroidx/compose/material3/ComposableSingletons$TabRowKt$lambda-1$1;->()V -PLandroidx/compose/material3/ComposableSingletons$TabRowKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/ComposableSingletons$TabRowKt$lambda-2$1;->()V -PLandroidx/compose/material3/ComposableSingletons$TabRowKt$lambda-2$1;->()V -PLandroidx/compose/material3/ComposableSingletons$TabRowKt;->()V -PLandroidx/compose/material3/DividerDefaults;->()V -PLandroidx/compose/material3/DividerKt$Divider$1;->(Landroidx/compose/ui/Modifier;FJII)V -PLandroidx/compose/material3/DividerKt;->Divider-9IZ8Weo(Landroidx/compose/ui/Modifier;FJLandroidx/compose/runtime/Composer;II)V PLandroidx/compose/material3/ElevationKt;->()V PLandroidx/compose/material3/ElevationKt;->animateElevation-rAjV9yQ(Landroidx/compose/animation/core/Animatable;FLandroidx/compose/foundation/interaction/Interaction;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/material3/FilterChipDefaults;->()V -PLandroidx/compose/material3/FilterChipDefaults;->filterChipBorder-gHcDVlo(JJJJFFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/SelectableChipBorder; -PLandroidx/compose/material3/FilterChipDefaults;->filterChipColors-XqyqHi0(JJJJJJJJJLandroidx/compose/runtime/Composer;III)Landroidx/compose/material3/SelectableChipColors; PLandroidx/compose/material3/IconKt$Icon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2$1;->(Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/material3/MaterialTheme;->getColorScheme(Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/ColorScheme; PLandroidx/compose/material3/MinimumTouchTargetModifier;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/material3/SelectableChipBorder;->(JJJJFF)V -PLandroidx/compose/material3/SelectableChipColors;->(JJJJJJJJJJJJJ)V -PLandroidx/compose/material3/SelectableChipElevation$animateElevation$1$1$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;)V -PLandroidx/compose/material3/SelectableChipElevation$animateElevation$1$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/material3/SelectableChipElevation$animateElevation$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/material3/SelectableChipElevation$animateElevation$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/SelectableChipElevation$animateElevation$3;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/SelectableChipElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/material3/SelectableChipElevation$animateElevation$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/material3/SelectableChipElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/SelectableChipElevation;->(FFFFFF)V -PLandroidx/compose/material3/SelectableChipElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/AnimationState; -PLandroidx/compose/material3/TabKt$Tab$2;->(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Lkotlin/jvm/functions/Function2;)V -PLandroidx/compose/material3/TabKt$Tab$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabKt$Tab$3;->(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;JJLandroidx/compose/foundation/interaction/MutableInteractionSource;II)V -PLandroidx/compose/material3/TabKt$Tab$5;->(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/material/ripple/PlatformRipple;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;I)V -PLandroidx/compose/material3/TabKt$Tab$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabKt$Tab$styledText$1$1;->(ILkotlin/jvm/functions/Function2;)V -PLandroidx/compose/material3/TabKt$Tab$styledText$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabKt$TabBaselineLayout$2$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;IILjava/lang/Integer;Ljava/lang/Integer;)V -PLandroidx/compose/material3/TabKt$TabBaselineLayout$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabKt$TabBaselineLayout$2;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V -PLandroidx/compose/material3/TabKt$TabBaselineLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -PLandroidx/compose/material3/TabKt$TabTransition$1;->(JJZLkotlin/jvm/functions/Function2;I)V -PLandroidx/compose/material3/TabKt$TabTransition$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabKt$TabTransition$color$2;->()V -PLandroidx/compose/material3/TabKt$TabTransition$color$2;->()V -PLandroidx/compose/material3/TabKt$TabTransition$color$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabKt;->()V -PLandroidx/compose/material3/TabKt;->Tab-bogVsAg(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZJJLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -PLandroidx/compose/material3/TabKt;->Tab-wqdebIU(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;JJLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V -PLandroidx/compose/material3/TabKt;->TabTransition-Klgx-Pg(JJZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -PLandroidx/compose/material3/TabKt;->access$TabBaselineLayout(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -PLandroidx/compose/material3/TabPosition;->(FF)V -PLandroidx/compose/material3/TabRowDefaults$tabIndicatorOffset$2;->(Landroidx/compose/material3/TabPosition;)V -PLandroidx/compose/material3/TabRowDefaults$tabIndicatorOffset$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabRowDefaults;->()V -PLandroidx/compose/material3/TabRowDefaults;->()V -PLandroidx/compose/material3/TabRowDefaults;->Indicator-9IZ8Weo(Landroidx/compose/ui/Modifier;FJLandroidx/compose/runtime/Composer;II)V -PLandroidx/compose/material3/TabRowKt$TabRow$2$1$1$1$3;->(Lkotlin/jvm/functions/Function3;Ljava/util/List;I)V -PLandroidx/compose/material3/TabRowKt$TabRow$2$1$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabRowKt$TabRow$2$1$1$1;->(Ljava/util/ArrayList;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Lkotlin/jvm/functions/Function2;IJILkotlin/jvm/functions/Function3;Ljava/util/ArrayList;II)V -PLandroidx/compose/material3/TabRowKt$TabRow$2$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabRowKt$TabRow$2$1$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;I)V -PLandroidx/compose/material3/TabRowKt$TabRow$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabRowKt$TabRow$2;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;I)V -PLandroidx/compose/material3/TabRowKt$TabRow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/TabRowKt$TabRow$3;->(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;II)V -PLandroidx/compose/material3/TabRowKt;->()V -PLandroidx/compose/material3/TabRowKt;->TabRow-pAZo6Ak(ILandroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -PLandroidx/compose/material3/TabSlots;->()V -PLandroidx/compose/material3/TabSlots;->(ILjava/lang/String;)V PLandroidx/compose/material3/TopAppBarColors;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/material3/tokens/DividerTokens;->()V PLandroidx/compose/material3/tokens/FilledCardTokens;->()V -PLandroidx/compose/material3/tokens/FilterChipTokens;->()V -PLandroidx/compose/material3/tokens/PrimaryNavigationTabTokens;->()V PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;->(IILjava/lang/Object;)V PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;->(IILjava/lang/Object;)V -PLandroidx/compose/runtime/ComposerKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; PLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V PLandroidx/compose/runtime/JoinedKey;->(Ljava/lang/Integer;Ljava/lang/Object;)V PLandroidx/compose/runtime/JoinedKey;->equals(Ljava/lang/Object;)Z @@ -13801,31 +12882,29 @@ PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementation PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->removeState(Ljava/lang/Object;)V -PLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -PLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V PLandroidx/compose/runtime/snapshots/SnapshotStateList;->iterator()Ljava/util/Iterator; PLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(I)Ljava/lang/Object; PLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z PLandroidx/compose/runtime/snapshots/StateListIterator;->remove()V PLandroidx/compose/ui/TempListUtilsKt;->fastJoinToString$default(Ljava/util/List;)Ljava/lang/String; +PLandroidx/compose/ui/ZIndexModifier;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V -PLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F +PLandroidx/compose/ui/geometry/MutableRect;->()V PLandroidx/compose/ui/geometry/Offset;->copy-dBAh8RU$default(JI)J PLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z PLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J -PLandroidx/compose/ui/geometry/Offset;->times-tuRUvjQ(FJ)J PLandroidx/compose/ui/geometry/OffsetKt;->isFinite-k-4lQ0M(J)Z PLandroidx/compose/ui/geometry/Rect;->equals(Ljava/lang/Object;)Z PLandroidx/compose/ui/geometry/Rect;->getCenter-F1C5BW0()J PLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeJoin-Ww9F2mQ(I)V PLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeMiterLimit(F)V -PLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V -PLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-ZuiqVtQ$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJJLandroidx/compose/ui/graphics/drawscope/Stroke;I)V PLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIII)V PLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z +PLandroidx/compose/ui/graphics/painter/BitmapPainter;->(Landroidx/compose/ui/graphics/ImageBitmap;JJ)V PLandroidx/compose/ui/graphics/painter/BitmapPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z PLandroidx/compose/ui/graphics/painter/BitmapPainter;->getIntrinsicSize-NH-jbRc()J +PLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$dispatchPostFling$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$dispatchPreFling$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Lkotlin/coroutines/Continuation;)V PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->dispatchPostFling-RZ2iAVY(JJLkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -13840,6 +12919,7 @@ PLandroidx/compose/ui/input/pointer/InternalPointerEvent;->(Ljava/util/Lin PLandroidx/compose/ui/input/pointer/InternalPointerEvent;->issuesEnterExitEvent-0FcD4WY(J)Z PLandroidx/compose/ui/input/pointer/Node;->(Landroidx/compose/ui/node/PointerInputModifierNode;)V PLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V +PLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z PLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z PLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V PLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V @@ -13877,30 +12957,16 @@ PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->calculateVelocity-9Ux PLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->addPointerInputChange(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/ui/input/pointer/PointerInputChange;)V PLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->polyFitLeastSquares(Ljava/util/ArrayList;Ljava/util/ArrayList;)Landroidx/compose/ui/input/pointer/util/PolynomialFit; PLandroidx/compose/ui/layout/ContentScale$Companion$Crop$1;->computeScaleFactor-H7hwNQA(JJ)J -PLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->(Landroidx/compose/ui/layout/IntrinsicMeasurable;II)V -PLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->getParentData()Ljava/lang/Object; -PLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; -PLandroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;->(II)V -PLandroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;->get(Landroidx/compose/ui/layout/AlignmentLine;)I -PLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)V -PLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->roundToPx--R2X_6o(J)I -PLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->roundToPx-0680j_4(F)I -PLandroidx/compose/ui/layout/LayoutModifier;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Ljava/lang/Object;)V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->dispose()V PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->getPlaceablesCount()I PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->premeasure-0kLqBqw(JI)V -PLandroidx/compose/ui/layout/MeasurePolicy;->maxIntrinsicHeight(Landroidx/compose/ui/node/NodeCoordinator;Ljava/util/List;I)I -PLandroidx/compose/ui/layout/MeasuringIntrinsics$DefaultIntrinsicMeasurable;->(Landroidx/compose/ui/layout/IntrinsicMeasurable;II)V -PLandroidx/compose/ui/layout/MeasuringIntrinsics$DefaultIntrinsicMeasurable;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; -PLandroidx/compose/ui/layout/MeasuringIntrinsics$EmptyPlaceable;->(II)V +PLandroidx/compose/ui/layout/SubcomposeLayoutState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1; PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->clear()V PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->contains(Ljava/lang/Object;)Z PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->iterator()Ljava/util/Iterator; -PLandroidx/compose/ui/node/BackwardsCompatNode;->getDensity()Landroidx/compose/ui/unit/Density; -PLandroidx/compose/ui/node/BackwardsCompatNode;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; PLandroidx/compose/ui/node/BackwardsCompatNode;->interceptOutOfBoundsChildEvents()V -PLandroidx/compose/ui/node/BackwardsCompatNode;->maxIntrinsicHeight(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I +PLandroidx/compose/ui/node/BackwardsCompatNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V PLandroidx/compose/ui/node/BackwardsCompatNode;->sharePointerInputWithSiblings()V PLandroidx/compose/ui/node/DistanceAndInLayer;->compareTo-S_HNhKs(JJ)I PLandroidx/compose/ui/node/DistanceAndInLayer;->isInLayer-impl(J)Z @@ -13910,21 +12976,19 @@ PLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Ljava/lang/Ob PLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z PLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V PLandroidx/compose/ui/node/HitTestResult;->size()I -PLandroidx/compose/ui/node/InnerNodeCoordinator;->maxIntrinsicHeight(I)I +PLandroidx/compose/ui/node/HitTestResultKt;->access$DistanceAndInLayer(FZ)J +PLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V PLandroidx/compose/ui/node/IntStack;->(I)V PLandroidx/compose/ui/node/IntStack;->pop()I PLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V PLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V PLandroidx/compose/ui/node/IntStack;->quickSort(II)V PLandroidx/compose/ui/node/IntStack;->swapDiagonal(II)V -PLandroidx/compose/ui/node/IntrinsicsPolicy;->measurePolicyFromState()Landroidx/compose/ui/layout/MeasurePolicy; PLandroidx/compose/ui/node/LayoutModifierNode;->forceRemeasure()V -PLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicHeight(I)I PLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V +PLandroidx/compose/ui/node/LayoutNode;->isPlacedInLookahead()Ljava/lang/Boolean; PLandroidx/compose/ui/node/LayoutNode;->markSubtreeAsNotPlaced()V -PLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V -PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicHeight(I)I -PLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onIntrinsicsQueried()V +PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getCanAffectParentInLookahead(Landroidx/compose/ui/node/LayoutNode;)Z PLandroidx/compose/ui/node/NodeChain$Differ;->(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;)V PLandroidx/compose/ui/node/NodeChain$Differ;->insert(I)V PLandroidx/compose/ui/node/NodeChain$Differ;->same(II)V @@ -13935,20 +12999,25 @@ PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->inte PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->shouldHitTestChildren(Landroidx/compose/ui/node/LayoutNode;)Z PLandroidx/compose/ui/node/NodeCoordinator$hit$1;->(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V PLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object; +PLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V +PLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J +PLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J PLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F +PLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J PLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V PLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V PLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J PLandroidx/compose/ui/node/NodeCoordinator;->speculativeHit-JHbHoSQ(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V PLandroidx/compose/ui/node/NodeCoordinatorKt;->access$nextUncheckedUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/Modifier$Node; -PLandroidx/compose/ui/node/Ref;->()V PLandroidx/compose/ui/node/Snake;->getDiagonalSize-impl([I)I PLandroidx/compose/ui/platform/AbstractComposeView;->shouldDelayChildPressedState()Z PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->setAvailableExtraData(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V +PLandroidx/compose/ui/platform/AndroidComposeView;->clearChildInvalidObservations(Landroid/view/ViewGroup;)V PLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z +PLandroidx/compose/ui/platform/AndroidComposeView;->getAndroidViewsHandler$ui_release()Landroidx/compose/ui/platform/AndroidViewsHandler; PLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z PLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z PLandroidx/compose/ui/platform/AndroidComposeView;->isPositionChanged(Landroid/view/MotionEvent;)Z @@ -13957,36 +13026,56 @@ PLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J PLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionEnd(Landroidx/compose/ui/semantics/SemanticsNode;)I PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionStart(Landroidx/compose/ui/semantics/SemanticsNode;)I +PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getCurrentSemanticsNodes()Ljava/util/Map; +PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTextForTextField(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Landroidx/compose/ui/text/AnnotatedString; PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollBackward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollForward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z +PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->trimToSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; +PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z +PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;->()V PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;->()V PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;->setPointerIcon(Landroid/view/View;Landroidx/compose/ui/input/pointer/PointerIcon;)V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->dispose()V PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->onTrimMemory(I)V PLandroidx/compose/ui/platform/AndroidViewConfiguration;->getTouchSlop()F +PLandroidx/compose/ui/platform/AndroidViewsHandler;->(Landroid/content/Context;)V +PLandroidx/compose/ui/platform/AndroidViewsHandler;->getLayoutNodeToHolder()Ljava/util/HashMap; +PLandroidx/compose/ui/platform/AndroidViewsHandler;->onLayout(ZIIII)V +PLandroidx/compose/ui/platform/AndroidViewsHandler;->onMeasure(II)V +PLandroidx/compose/ui/platform/AndroidViewsHandler;->requestLayout()V +PLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/graphics/Matrix;)V +PLandroidx/compose/ui/platform/ComposeView;->getAccessibilityClassName()Ljava/lang/CharSequence; PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object; PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->saveState()Landroid/os/Bundle; +PLandroidx/compose/ui/platform/InvertMatrixKt;->invertTo-JiSxe2E([F[F)Z +PLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F PLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z PLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z PLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z +PLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->(Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Rect;)V PLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewDetachedFromWindow(Landroid/view/View;)V PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V PLandroidx/compose/ui/platform/WrappedComposition;->dispose()V PLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->calculateIfHorizontallyStacked(Ljava/util/ArrayList;)Z +PLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->hasCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;)Z PLandroidx/compose/ui/semantics/NodeLocationHolder$compareTo$child1$1;->(Landroidx/compose/ui/geometry/Rect;)V PLandroidx/compose/ui/semantics/NodeLocationHolder$compareTo$child1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/compose/ui/semantics/NodeLocationHolder$compareTo$child2$1;->(Landroidx/compose/ui/geometry/Rect;)V PLandroidx/compose/ui/semantics/NodeLocationHolder$compareTo$child2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/compose/ui/semantics/NodeLocationHolder;->compareTo(Ljava/lang/Object;)I PLandroidx/compose/ui/semantics/SemanticsConfiguration;->get(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; +PLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->(Landroidx/compose/ui/semantics/Role;)V +PLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->(Lkotlin/jvm/functions/Function1;)V +PLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration; +PLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInRoot()Landroidx/compose/ui/geometry/Rect; +PLandroidx/compose/ui/semantics/SemanticsSortKt;->findNodeByPredicateTraversal(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode; PLandroidx/compose/ui/text/AnnotatedString;->length()I -PLandroidx/compose/ui/text/TextStyle;->copy-HL5avdY$default(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/style/TextAlign;)Landroidx/compose/ui/text/TextStyle; PLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/ui/unit/Density;->roundToPx--R2X_6o(J)I PLandroidx/compose/ui/unit/Velocity;->()V PLandroidx/compose/ui/unit/Velocity;->(J)V PLandroidx/compose/ui/unit/Velocity;->copy-OhffZ5M$default(JFFI)J @@ -13999,31 +13088,88 @@ PLandroidx/compose/ui/window/PopupProperties;->(ZZZLandroidx/compose/ui/wi PLandroidx/compose/ui/window/SecureFlagPolicy;->()V PLandroidx/compose/ui/window/SecureFlagPolicy;->(ILjava/lang/String;)V PLandroidx/core/app/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V +PLandroidx/core/content/PermissionChecker;->AnimationState$default(FFI)Landroidx/compose/animation/core/AnimationState; +PLandroidx/core/graphics/TypefaceCompat;->()V +PLandroidx/core/graphics/TypefaceCompatApi29Impl;->()V +PLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface; +PLandroidx/core/graphics/TypefaceCompatApi29Impl;->findBaseFont(Landroid/graphics/fonts/FontFamily;I)Landroid/graphics/fonts/Font; +PLandroidx/core/graphics/TypefaceCompatApi29Impl;->getMatchScore(Landroid/graphics/fonts/FontStyle;Landroid/graphics/fonts/FontStyle;)I +PLandroidx/core/graphics/TypefaceCompatBaseImpl;->()V PLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor; PLandroidx/core/graphics/TypefaceCompatUtil;->mmap(Landroid/content/Context;Landroid/net/Uri;)Ljava/nio/MappedByteBuffer; -PLandroidx/core/provider/CalleeHandler;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V -PLandroidx/core/util/DebugUtils;->catchImpl(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/FlowCollector;)Ljava/io/Serializable; +PLandroidx/core/math/MathUtils;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V +PLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V +PLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V +PLandroidx/core/os/TraceCompat;->()V +PLandroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;->()V +PLandroidx/core/provider/FontProvider$Api16Impl;->query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Landroid/database/Cursor; +PLandroidx/core/provider/FontProvider;->()V +PLandroidx/core/provider/FontProvider;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +PLandroidx/core/provider/FontRequest;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V +PLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V +PLandroidx/core/provider/FontsContractCompat$FontInfo;->(Landroid/net/Uri;IIZI)V PLandroidx/core/util/Preconditions;->checkArgument(Ljava/lang/String;Z)V +PLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V +PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider; +PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z +PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +PLandroidx/core/view/AccessibilityDelegateCompat;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +PLandroidx/core/view/ViewCompat$Api16Impl;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; PLandroidx/core/view/ViewKt$ancestors$1;->()V PLandroidx/core/view/ViewKt$ancestors$1;->()V PLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline2;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline4;->m(Landroid/view/accessibility/AccessibilityNodeInfo;)Ljava/lang/CharSequence; +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline5;->m(Landroid/view/accessibility/AccessibilityNodeInfo;)Ljava/lang/CharSequence; +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->()V +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(Ljava/lang/Object;ILjava/lang/String;Ljava/lang/Class;)V +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getHintText()Ljava/lang/CharSequence; PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getMovementGranularities()I +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getStateDescription()Ljava/lang/CharSequence; +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClassName(Ljava/lang/String;)V PLandroidx/datastore/core/SingleProcessDataStore$handleUpdate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/datastore/core/SingleProcessDataStore$transformAndWrite$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->(Ljava/lang/String;)V +PLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;->()V +PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->()V +PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->()V +PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->getSigningSignatures(Landroid/content/pm/PackageManager;Ljava/lang/String;)[Landroid/content/pm/Signature; +PLandroidx/emoji2/text/DefaultEmojiCompatConfig;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig; +PLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V PLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V PLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->(Ljava/util/List;ILjava/lang/Throwable;)V PLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V +PLandroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;->()V PLandroidx/emoji2/text/EmojiCompat$SpanFactory;->()V +PLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat; +PLandroidx/emoji2/text/EmojiCompat;->load()V PLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V +PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V +PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V +PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V +PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V +PLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V PLandroidx/emoji2/text/EmojiMetadata;->()V PLandroidx/emoji2/text/EmojiMetadata;->(Landroidx/emoji2/text/MetadataRepo;I)V PLandroidx/emoji2/text/EmojiMetadata;->getCodepointAt(I)I PLandroidx/emoji2/text/EmojiMetadata;->getCodepointsLength()I PLandroidx/emoji2/text/EmojiMetadata;->getMetadataItem()Landroidx/emoji2/text/flatbuffer/MetadataItem; PLandroidx/emoji2/text/EmojiProcessor;->(Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/EmojiCompat$SpanFactory;Landroidx/emoji2/text/DefaultGlyphChecker;)V +PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->()V +PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;)V +PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V +PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V +PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V +PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V +PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo; +PLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->()V +PLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V PLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->(Ljava/nio/ByteBuffer;)V PLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readUnsignedInt()J PLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->skip(I)V @@ -14035,15 +13181,13 @@ PLandroidx/emoji2/text/flatbuffer/MetadataItem;->()V PLandroidx/emoji2/text/flatbuffer/MetadataList;->()V PLandroidx/emoji2/text/flatbuffer/Table;->()V PLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I +PLandroidx/emoji2/text/flatbuffer/Utf8Safe;->()V PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->()V PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->(Ljava/io/InputStream;)V PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->(Ljava/io/InputStream;Ljava/nio/ByteOrder;)V PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->([B)V -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->read([BII)I PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->readByte()B -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->readFully([B)V PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->readInt()I -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->readShort()S PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->readUnsignedShort()I PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->skipFully(I)V PLandroidx/exifinterface/media/ExifInterface$ExifAttribute;->(J[BII)V @@ -14054,8 +13198,6 @@ PLandroidx/exifinterface/media/ExifInterface$ExifAttribute;->getStringValue(Ljav PLandroidx/exifinterface/media/ExifInterface$ExifAttribute;->getValue(Ljava/nio/ByteOrder;)Ljava/io/Serializable; PLandroidx/exifinterface/media/ExifInterface$ExifTag;->(IIILjava/lang/String;)V PLandroidx/exifinterface/media/ExifInterface$ExifTag;->(IILjava/lang/String;)V -PLandroidx/exifinterface/media/ExifInterface$SeekableByteOrderedDataInputStream;->([B)V -PLandroidx/exifinterface/media/ExifInterface$SeekableByteOrderedDataInputStream;->seek(J)V PLandroidx/exifinterface/media/ExifInterface;->()V PLandroidx/exifinterface/media/ExifInterface;->(Lcoil/decode/ExifInterfaceInputStream;)V PLandroidx/exifinterface/media/ExifInterface;->addDefaultValuesForCompatibility()V @@ -14063,13 +13205,6 @@ PLandroidx/exifinterface/media/ExifInterface;->getAttribute(Ljava/lang/String;)L PLandroidx/exifinterface/media/ExifInterface;->getExifAttribute(Ljava/lang/String;)Landroidx/exifinterface/media/ExifInterface$ExifAttribute; PLandroidx/exifinterface/media/ExifInterface;->getJpegAttributes(Landroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;II)V PLandroidx/exifinterface/media/ExifInterface;->getMimeType(Ljava/io/BufferedInputStream;)I -PLandroidx/exifinterface/media/ExifInterface;->getWebpAttributes(Landroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;)V -PLandroidx/exifinterface/media/ExifInterface;->handleThumbnailFromJfif(Landroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;Ljava/util/HashMap;)V -PLandroidx/exifinterface/media/ExifInterface;->parseTiffHeaders(Landroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;)V -PLandroidx/exifinterface/media/ExifInterface;->readByteOrder(Landroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;)Ljava/nio/ByteOrder; -PLandroidx/exifinterface/media/ExifInterface;->readExifSegment(I[B)V -PLandroidx/exifinterface/media/ExifInterface;->readImageFileDirectory(Landroidx/exifinterface/media/ExifInterface$SeekableByteOrderedDataInputStream;I)V -PLandroidx/exifinterface/media/ExifInterface;->setThumbnailData(Landroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;)V PLandroidx/lifecycle/CloseableCoroutineScope;->close()V PLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy()V PLandroidx/lifecycle/DefaultLifecycleObserver;->onPause()V @@ -14087,7 +13222,6 @@ PLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivity PLandroidx/lifecycle/LiveData$ObserverWrapper;->detachObserver()V PLandroidx/lifecycle/LiveData;->removeObserver(Landroidx/lifecycle/Observer;)V PLandroidx/lifecycle/MediatorLiveData;->onInactive()V -PLandroidx/lifecycle/ProcessLifecycleOwner$1;->run()V PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPaused(Landroid/app/Activity;)V PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityStopped(Landroid/app/Activity;)V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V @@ -14112,7 +13246,6 @@ PLandroidx/metrics/performance/PerformanceMetricsState;->returnStateDataToPool$m PLandroidx/navigation/NavBackStackEntryState$Companion$CREATOR$1;->()V PLandroidx/navigation/NavBackStackEntryState;->()V PLandroidx/navigation/NavBackStackEntryState;->(Landroidx/navigation/NavBackStackEntry;)V -PLandroidx/navigation/NavBackStackEntryState;->writeToParcel(Landroid/os/Parcel;I)V PLandroidx/navigation/NavController$NavControllerNavigatorState;->pop(Landroidx/navigation/NavBackStackEntry;Z)V PLandroidx/navigation/NavController$NavControllerNavigatorState;->popWithTransition(Landroidx/navigation/NavBackStackEntry;Z)V PLandroidx/navigation/NavController$popBackStackInternal$2;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$BooleanRef;Landroidx/navigation/NavController;ZLkotlin/collections/ArrayDeque;)V @@ -14134,7 +13267,6 @@ PLandroidx/navigation/NavController;->popEntryFromBackStack(Landroidx/navigation PLandroidx/navigation/NavController;->unlinkChildFromParent$navigation_runtime_release(Landroidx/navigation/NavBackStackEntry;)V PLandroidx/navigation/NavControllerViewModel;->onCleared()V PLandroidx/navigation/NavDeepLink$pattern$2;->invoke()Ljava/lang/Object; -PLandroidx/navigation/NavDeepLink;->parseArgument(Landroid/os/Bundle;Ljava/lang/String;Ljava/lang/String;Landroidx/navigation/NavArgument;)V PLandroidx/navigation/NavDestination$DeepLinkMatch;->(Landroidx/navigation/NavDestination;Landroid/os/Bundle;ZZI)V PLandroidx/navigation/NavGraph$Companion$findStartDestination$1;->()V PLandroidx/navigation/NavGraph$Companion$findStartDestination$1;->()V @@ -14144,9 +13276,7 @@ PLandroidx/navigation/NavGraph;->findNode(IZ)Landroidx/navigation/NavDestination PLandroidx/navigation/NavOptions$Builder;->()V PLandroidx/navigation/NavOptions;->(ZZIZZIIII)V PLandroidx/navigation/NavOptionsBuilder;->()V -PLandroidx/navigation/NavType$Companion$StringType$1;->get(Ljava/lang/String;Landroid/os/Bundle;)Ljava/lang/Object; -PLandroidx/navigation/NavType$Companion$StringType$1;->parseValue(Ljava/lang/String;)Ljava/lang/Object; -PLandroidx/navigation/NavType$Companion$StringType$1;->put(Landroid/os/Bundle;Ljava/lang/String;Ljava/lang/Object;)V +PLandroidx/navigation/NavOptionsBuilderKt;->navOptions(Lkotlin/jvm/functions/Function1;)Landroidx/navigation/NavOptions; PLandroidx/navigation/NavigatorState;->pop(Landroidx/navigation/NavBackStackEntry;Z)V PLandroidx/navigation/NavigatorState;->popWithTransition(Landroidx/navigation/NavBackStackEntry;Z)V PLandroidx/navigation/PopUpToBuilder;->()V @@ -14160,80 +13290,125 @@ PLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Ob PLandroidx/profileinstaller/ProfileInstaller$2;->()V PLandroidx/profileinstaller/ProfileInstaller;->()V PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V -PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->(Landroid/content/Context;)V PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V +PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->run()V PLandroidx/room/InvalidationTracker;->removeObserver(Landroidx/room/InvalidationTracker$Observer;)V PLandroidx/room/InvalidationTracker;->stopTrackingTable(Landroidx/sqlite/db/SupportSQLiteDatabase;I)V PLandroidx/room/RoomTrackingLiveData;->onInactive()V PLandroidx/savedstate/SavedStateRegistryController;->performSave(Landroid/os/Bundle;)V PLandroidx/work/impl/model/WorkSpecDao_Impl$13;->finalize()V PLcoil/EventListener$Companion$NONE$1;->decodeEnd()V +PLcoil/EventListener$Companion$NONE$1;->decodeStart()V +PLcoil/EventListener$Companion$NONE$1;->fetchEnd()V PLcoil/EventListener$Companion$NONE$1;->onCancel()V -PLcoil/EventListener$Companion$NONE$1;->onError()V PLcoil/EventListener$Companion$NONE$1;->onSuccess()V -PLcoil/RealImageLoader;->onError(Lcoil/request/ErrorResult;Lcoil/target/Target;Lcoil/EventListener;)V PLcoil/RealImageLoader;->onSuccess(Lcoil/request/SuccessResult;Lcoil/target/Target;Lcoil/EventListener;)V -PLcoil/compose/AsyncImageKt$contentDescription$1;->(Ljava/lang/String;)V -PLcoil/compose/AsyncImageKt$contentDescription$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/compose/AsyncImagePainter$State$Error;->(Landroidx/compose/ui/graphics/painter/Painter;Lcoil/request/ErrorResult;)V -PLcoil/compose/AsyncImagePainter$State$Error;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; +PLcoil/compose/AsyncImagePainter$Companion$DefaultTransform$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcoil/compose/AsyncImagePainter$State$Loading;->equals(Ljava/lang/Object;)Z PLcoil/compose/AsyncImagePainter$State$Success;->(Landroidx/compose/ui/graphics/painter/Painter;Lcoil/request/SuccessResult;)V PLcoil/compose/AsyncImagePainter$State$Success;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; PLcoil/compose/AsyncImagePainter$onRemembered$1$3;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcoil/compose/AsyncImagePainter$updateRequest$$inlined$target$default$1;->onError(Landroid/graphics/drawable/Drawable;)V PLcoil/compose/AsyncImagePainter$updateRequest$$inlined$target$default$1;->onSuccess(Landroid/graphics/drawable/Drawable;)V PLcoil/compose/AsyncImagePainter;->onForgotten()V +PLcoil/compose/AsyncImagePainter;->toPainter(Landroid/graphics/drawable/Drawable;)Landroidx/compose/ui/graphics/painter/Painter; PLcoil/compose/AsyncImagePainterKt$FakeTransitionTarget$1;->()V PLcoil/compose/AsyncImagePainterKt;->()V +PLcoil/compose/ContentPainterModifier;->equals(Ljava/lang/Object;)Z +PLcoil/compose/SingletonAsyncImageKt;->AsyncImage-3HmZ8SU(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;II)V +PLcoil/decode/BitmapFactoryDecoder$ExceptionCatchingSource;->(Lokio/BufferedSource;)V +PLcoil/decode/BitmapFactoryDecoder$ExceptionCatchingSource;->read(Lokio/Buffer;J)J +PLcoil/decode/BitmapFactoryDecoder$Factory;->create(Lcoil/fetch/SourceResult;Lcoil/request/Options;)Lcoil/decode/Decoder; +PLcoil/decode/BitmapFactoryDecoder$decode$1;->(Lcoil/decode/BitmapFactoryDecoder;Lkotlin/coroutines/Continuation;)V +PLcoil/decode/BitmapFactoryDecoder$decode$2$1;->(Lcoil/decode/BitmapFactoryDecoder;)V +PLcoil/decode/BitmapFactoryDecoder$decode$2$1;->invoke()Ljava/lang/Object; +PLcoil/decode/BitmapFactoryDecoder;->(Lcoil/decode/ImageSource;Lcoil/request/Options;Lkotlinx/coroutines/sync/SemaphoreImpl;I)V +PLcoil/decode/BitmapFactoryDecoder;->access$decode(Lcoil/decode/BitmapFactoryDecoder;Landroid/graphics/BitmapFactory$Options;)Lcoil/decode/DecodeResult; +PLcoil/decode/BitmapFactoryDecoder;->decode(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLcoil/decode/DecodeResult;->(Landroid/graphics/drawable/BitmapDrawable;Z)V PLcoil/decode/DecodeUtils;->computeSizeMultiplier(IIIII)D PLcoil/decode/ExifData;->()V PLcoil/decode/ExifData;->(IZ)V PLcoil/decode/ExifInterfaceInputStream;->(Ljava/io/InputStream;)V PLcoil/decode/ExifInterfaceInputStream;->read([BII)I -PLcoil/decode/ExifInterfaceInputStream;->skip(J)J +PLcoil/decode/ExifUtils;->()V +PLcoil/decode/ExifUtilsKt;->()V +PLcoil/decode/FileImageSource;->(Lokio/Path;Lokio/FileSystem;Ljava/lang/String;Ljava/io/Closeable;)V PLcoil/decode/FileImageSource;->close()V PLcoil/decode/FileImageSource;->getMetadata()Lcoil/decode/ImageSource$Metadata; -PLcoil/decode/SourceImageSource;->(Lokio/BufferedSource;Ljava/io/File;Lcoil/decode/ImageSource$Metadata;)V -PLcoil/decode/SourceImageSource;->close()V -PLcoil/decode/SourceImageSource;->getMetadata()Lcoil/decode/ImageSource$Metadata; -PLcoil/decode/SourceImageSource;->source()Lokio/BufferedSource; +PLcoil/decode/FileImageSource;->source()Lokio/BufferedSource; +PLcoil/decode/ImageSource;->()V +PLcoil/decode/SvgDecodeUtils;->()V +PLcoil/decode/SvgDecoder$Factory;->create(Lcoil/fetch/SourceResult;Lcoil/request/Options;)Lcoil/decode/Decoder; PLcoil/decode/SvgDecoder$decode$2;->(Lcoil/decode/SvgDecoder;)V PLcoil/decode/SvgDecoder$decode$2;->invoke()Ljava/lang/Object; PLcoil/decode/SvgDecoder;->(Lcoil/decode/ImageSource;Lcoil/request/Options;Z)V PLcoil/decode/SvgDecoder;->decode(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +PLcoil/disk/DiskLruCache$Editor;->(Lcoil/disk/DiskLruCache;Lcoil/disk/DiskLruCache$Entry;)V +PLcoil/disk/DiskLruCache$Editor;->complete(Z)V +PLcoil/disk/DiskLruCache$Editor;->file(I)Lokio/Path; +PLcoil/disk/DiskLruCache$Entry;->(Lcoil/disk/DiskLruCache;Ljava/lang/String;)V +PLcoil/disk/DiskLruCache$Entry;->snapshot()Lcoil/disk/DiskLruCache$Snapshot; +PLcoil/disk/DiskLruCache$Snapshot;->(Lcoil/disk/DiskLruCache;Lcoil/disk/DiskLruCache$Entry;)V PLcoil/disk/DiskLruCache$Snapshot;->close()V +PLcoil/disk/DiskLruCache$Snapshot;->file(I)Lokio/Path; +PLcoil/disk/DiskLruCache;->access$completeEdit(Lcoil/disk/DiskLruCache;Lcoil/disk/DiskLruCache$Editor;Z)V +PLcoil/disk/DiskLruCache;->edit(Ljava/lang/String;)Lcoil/disk/DiskLruCache$Editor; +PLcoil/disk/FaultHidingSink;->flush()V +PLcoil/disk/FaultHidingSink;->write(Lokio/Buffer;J)V +PLcoil/disk/RealDiskCache$RealEditor;->(Lcoil/disk/DiskLruCache$Editor;)V +PLcoil/disk/RealDiskCache$RealEditor;->commitAndGet()Lcoil/disk/RealDiskCache$RealSnapshot; +PLcoil/disk/RealDiskCache$RealEditor;->getData()Lokio/Path; +PLcoil/disk/RealDiskCache$RealEditor;->getMetadata()Lokio/Path; +PLcoil/disk/RealDiskCache$RealSnapshot;->(Lcoil/disk/DiskLruCache$Snapshot;)V PLcoil/disk/RealDiskCache$RealSnapshot;->close()V PLcoil/disk/RealDiskCache$RealSnapshot;->closeAndEdit()Lcoil/disk/RealDiskCache$RealEditor; +PLcoil/disk/RealDiskCache$RealSnapshot;->getData()Lokio/Path; +PLcoil/disk/RealDiskCache$RealSnapshot;->getMetadata()Lokio/Path; +PLcoil/disk/RealDiskCache;->edit(Ljava/lang/String;)Lcoil/disk/RealDiskCache$RealEditor; +PLcoil/disk/RealDiskCache;->getFileSystem()Lokio/FileSystem; +PLcoil/fetch/FetchResult;->()V +PLcoil/fetch/HttpUriFetcher$executeNetworkRequest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLcoil/fetch/HttpUriFetcher$fetch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLcoil/fetch/HttpUriFetcher;->getFileSystem()Lokio/FileSystem; +PLcoil/fetch/HttpUriFetcher;->getMimeType$coil_base_release(Ljava/lang/String;Lokhttp3/MediaType;)Ljava/lang/String; +PLcoil/fetch/HttpUriFetcher;->toCacheResponse(Lcoil/disk/DiskCache$Snapshot;)Lcoil/network/CacheResponse; +PLcoil/fetch/HttpUriFetcher;->toImageSource(Lcoil/disk/DiskCache$Snapshot;)Lcoil/decode/FileImageSource; +PLcoil/fetch/HttpUriFetcher;->writeToDiskCache(Lcoil/disk/DiskCache$Snapshot;Lokhttp3/Request;Lokhttp3/Response;Lcoil/network/CacheResponse;)Lcoil/disk/DiskCache$Snapshot; +PLcoil/fetch/SourceResult;->(Lcoil/decode/ImageSource;Ljava/lang/String;I)V PLcoil/intercept/EngineInterceptor$ExecuteResult;->(Landroid/graphics/drawable/Drawable;ZILjava/lang/String;)V +PLcoil/intercept/EngineInterceptor$decode$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/coroutines/Continuation;)V +PLcoil/intercept/EngineInterceptor$execute$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLcoil/intercept/EngineInterceptor$execute$executeResult$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/internal/Ref$ObjectRef;Lcoil/request/ImageRequest;Ljava/lang/Object;Lkotlin/jvm/internal/Ref$ObjectRef;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)V +PLcoil/intercept/EngineInterceptor$execute$executeResult$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +PLcoil/intercept/EngineInterceptor$execute$executeResult$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLcoil/intercept/EngineInterceptor$execute$executeResult$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLcoil/intercept/EngineInterceptor$fetch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLcoil/intercept/EngineInterceptor$intercept$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLcoil/intercept/EngineInterceptor;->access$decode(Lcoil/intercept/EngineInterceptor;Lcoil/fetch/SourceResult;Lcoil/ComponentRegistry;Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLcoil/intercept/RealInterceptorChain$proceed$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLcoil/intercept/RealInterceptorChain;->checkRequest(Lcoil/request/ImageRequest;Lcoil/intercept/Interceptor;)V -PLcoil/intercept/RealInterceptorChain;->getRequest()Lcoil/request/ImageRequest; PLcoil/memory/MemoryCache$Key;->equals(Ljava/lang/Object;)Z PLcoil/memory/MemoryCache$Value;->(Landroid/graphics/Bitmap;Ljava/util/Map;)V +PLcoil/memory/MemoryCacheService;->newResult(Lcoil/intercept/RealInterceptorChain;Lcoil/request/ImageRequest;Lcoil/memory/MemoryCache$Key;Lcoil/memory/MemoryCache$Value;)Lcoil/request/SuccessResult; PLcoil/memory/RealMemoryCache;->set(Lcoil/memory/MemoryCache$Key;Lcoil/memory/MemoryCache$Value;)V -PLcoil/memory/RealMemoryCache;->trimMemory(I)V PLcoil/memory/RealStrongMemoryCache$InternalValue;->(Landroid/graphics/Bitmap;Ljava/util/Map;I)V PLcoil/memory/RealStrongMemoryCache$cache$1;->entryRemoved(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V PLcoil/memory/RealStrongMemoryCache$cache$1;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I PLcoil/memory/RealStrongMemoryCache;->set(Lcoil/memory/MemoryCache$Key;Landroid/graphics/Bitmap;Ljava/util/Map;)V -PLcoil/memory/RealStrongMemoryCache;->trimMemory(I)V PLcoil/memory/RealWeakMemoryCache$InternalValue;->(ILjava/lang/ref/WeakReference;Ljava/util/Map;I)V -PLcoil/memory/RealWeakMemoryCache;->cleanUp$coil_base_release()V PLcoil/memory/RealWeakMemoryCache;->set(Lcoil/memory/MemoryCache$Key;Landroid/graphics/Bitmap;Ljava/util/Map;I)V -PLcoil/memory/RealWeakMemoryCache;->trimMemory(I)V +PLcoil/network/CacheResponse$cacheControl$2;->(Lcoil/network/CacheResponse;)V PLcoil/network/CacheResponse$cacheControl$2;->invoke()Ljava/lang/Object; +PLcoil/network/CacheResponse$contentType$2;->(Lcoil/network/CacheResponse;)V +PLcoil/network/CacheResponse$contentType$2;->invoke()Ljava/lang/Object; +PLcoil/network/CacheResponse;->(Lokhttp3/Response;)V +PLcoil/network/CacheResponse;->writeTo(Lokio/RealBufferedSink;)V PLcoil/network/CacheStrategy$Companion;->combineHeaders(Lokhttp3/Headers;Lokhttp3/Headers;)Lokhttp3/Headers; PLcoil/network/CacheStrategy$Companion;->isEndToEnd(Ljava/lang/String;)Z -PLcoil/network/HttpException;->(Lokhttp3/Response;)V PLcoil/request/BaseRequestDelegate;->complete()V -PLcoil/request/ErrorResult;->(Landroid/graphics/drawable/Drawable;Lcoil/request/ImageRequest;Ljava/lang/Throwable;)V -PLcoil/request/ErrorResult;->getDrawable()Landroid/graphics/drawable/Drawable; -PLcoil/request/ErrorResult;->getRequest()Lcoil/request/ImageRequest; +PLcoil/request/CachePolicy$EnumUnboxingLocalUtility;->getWriteEnabled(I)Z PLcoil/request/ImageResult;->()V -PLcoil/request/RequestService;->errorResult(Lcoil/request/ImageRequest;Ljava/lang/Throwable;)Lcoil/request/ErrorResult; PLcoil/request/SuccessResult;->(Landroid/graphics/drawable/Drawable;Lcoil/request/ImageRequest;ILcoil/memory/MemoryCache$Key;Ljava/lang/String;ZZ)V PLcoil/request/SuccessResult;->getRequest()Lcoil/request/ImageRequest; PLcoil/size/-Sizes;->isOriginal(Lcoil/size/Size;)Z @@ -14243,10 +13418,11 @@ PLcoil/transition/NoneTransition;->(Lcoil/transition/TransitionTarget;Lcoi PLcoil/util/-Bitmaps;->getAllocationByteCountCompat(Landroid/graphics/Bitmap;)I PLcoil/util/-SvgUtils;->toPx(Lcoil/size/Dimension;I)F PLcoil/util/-SvgUtils;->toSoftware(Landroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap$Config; +PLcoil/util/-Utils;->closeQuietly(Ljava/io/Closeable;)V PLcoil/util/-Utils;->toPx(Lcoil/size/Dimension;I)I PLcoil/util/ContinuationCallback;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcoil/util/ContinuationCallback;->onFailure(Lokhttp3/internal/connection/RealCall;Ljava/io/IOException;)V -PLcoil/util/SystemCallbacks;->onTrimMemory(I)V +PLcoil/util/ContinuationCallback;->onResponse(Lokhttp3/Response;)V PLcoil/util/Time$provider$1;->()V PLcoil/util/Time$provider$1;->()V PLcoil/util/Time$provider$1;->invoke()Ljava/lang/Object; @@ -14332,6 +13508,7 @@ PLcom/caverock/androidsvg/SVGAndroidRenderer;->isSpecified(Lcom/caverock/android PLcom/caverock/androidsvg/SVGAndroidRenderer;->makePathAndBoundingBox(Lcom/caverock/androidsvg/SVG$Circle;)Landroid/graphics/Path; PLcom/caverock/androidsvg/SVGAndroidRenderer;->pushLayer()Z PLcom/caverock/androidsvg/SVGAndroidRenderer;->render(Lcom/caverock/androidsvg/SVG$Svg;Lcom/caverock/androidsvg/SVG$Box;Lcom/caverock/androidsvg/SVG$Box;Lcom/caverock/androidsvg/PreserveAspectRatio;)V +PLcom/caverock/androidsvg/SVGAndroidRenderer;->render(Lcom/caverock/androidsvg/SVG$SvgObject;)V PLcom/caverock/androidsvg/SVGAndroidRenderer;->renderChildren(Lcom/caverock/androidsvg/SVG$SvgContainer;Z)V PLcom/caverock/androidsvg/SVGAndroidRenderer;->renderMarkers(Lcom/caverock/androidsvg/SVG$GraphicsElement;)V PLcom/caverock/androidsvg/SVGAndroidRenderer;->setPaintColour(Lcom/caverock/androidsvg/SVGAndroidRenderer$RendererState;ZLcom/caverock/androidsvg/SVG$SvgPaint;)V @@ -14392,6 +13569,7 @@ PLcom/google/protobuf/FieldSet;->computeElementSizeNoTag(Lcom/google/protobuf/Wi PLcom/google/protobuf/FieldSet;->makeImmutable()V PLcom/google/protobuf/FieldSet;->writeElement(Lcom/google/protobuf/CodedOutputStream;Lcom/google/protobuf/WireFormat$FieldType;ILjava/lang/Object;)V PLcom/google/protobuf/MapEntryLite;->computeSerializedSize(Lcom/google/protobuf/MapEntryLite$Metadata;Ljava/lang/Object;Ljava/lang/Object;)I +PLcom/google/protobuf/MapEntryLite;->writeTo(Lcom/google/protobuf/CodedOutputStream;Lcom/google/protobuf/MapEntryLite$Metadata;Ljava/lang/Object;Ljava/lang/Object;)V PLcom/google/protobuf/MapFieldLite;->calculateHashCodeForObject(Ljava/lang/Object;)I PLcom/google/protobuf/MapFieldLite;->ensureMutable()V PLcom/google/protobuf/MapFieldLite;->equals(Ljava/lang/Object;)Z @@ -14421,12 +13599,6 @@ PLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_Singl PLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;->getActivityRetainedLifecycle()Ldagger/hilt/android/ActivityRetainedLifecycle; PLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$1$1$invoke$$inlined$onDispose$1;->dispose()V PLcom/google/samples/apps/nowinandroid/MainActivity;->onPause()V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthor$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthor$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthor$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthor$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthor$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthor$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository$getAuthor$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V @@ -14440,55 +13612,35 @@ PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepo PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1$1;->invoke()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$8;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;Landroidx/room/RoomSQLiteQuery;)V -PLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$8;->call()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$8;->finalize()V -PLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl$9;->finalize()V -PLcom/google/samples/apps/nowinandroid/core/database/dao/AuthorDao_Impl;->getAuthorEntity(Ljava/lang/String;)Lkotlinx/coroutines/flow/SafeFlow; -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$12;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomSQLiteQuery;)V -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$12;->finalize()V -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$13;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomSQLiteQuery;)V -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$13;->call()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$13;->finalize()V -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->__fetchRelationshipauthorsAscomGoogleSamplesAppsNowinandroidCoreDatabaseModelAuthorEntity(Landroidx/collection/ArrayMap;)V -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->__fetchRelationshiptopicsAscomGoogleSamplesAppsNowinandroidCoreDatabaseModelTopicEntity(Landroidx/collection/ArrayMap;)V +PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$10;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomSQLiteQuery;)V +PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$10;->call()Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$10;->finalize()V +PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$11;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomSQLiteQuery;)V +PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$11;->call()Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$11;->finalize()V PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->getNewsResources()Lkotlinx/coroutines/flow/SafeFlow; -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->getNewsResources(Ljava/util/Set;Ljava/util/Set;)Lkotlinx/coroutines/flow/SafeFlow; +PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->getNewsResources(Ljava/util/Set;)Lkotlinx/coroutines/flow/SafeFlow; PLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$9;->finalize()V -PLcom/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource;->(Lcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity;Ljava/util/ArrayList;Ljava/util/ArrayList;)V -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedAuthorId$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedAuthorId$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedAuthorId$2;->(Ljava/lang/String;Lkotlin/coroutines/Continuation;Z)V -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedAuthorId$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedAuthorId$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedAuthorId$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;->toggleFollowedAuthorId(Ljava/lang/String;Lkotlin/coroutines/Continuation;Z)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$3500(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)Lcom/google/protobuf/MapFieldLite; +PLcom/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource;->(Lcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity;Ljava/util/ArrayList;)V +PLcom/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKt;->asExternalModel(Lcom/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource;)Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource; +PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;Lkotlin/coroutines/Continuation;)V +PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$2;->(Ljava/lang/String;Lkotlin/coroutines/Continuation;Z)V +PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;->toggleFollowedTopicId(Ljava/lang/String;Lkotlin/coroutines/Continuation;Z)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$3400(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)Lcom/google/protobuf/MapFieldLite; PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesKt$Dsl;->(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$Builder;)V PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesKt$Dsl;->_build()Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences; -PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesKt$Dsl;->getFollowedAuthorIdsMap()Lcom/google/protobuf/kotlin/DslMap; PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesKt$Dsl;->getFollowedTopicIdsMap()Lcom/google/protobuf/kotlin/DslMap; -PLcom/google/samples/apps/nowinandroid/core/decoder/UriDecoder;->()V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$1$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/RowScope;II)V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$1;->(Lkotlin/jvm/functions/Function3;I)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$3;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;I)V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt;->NiaTextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/material3/ButtonColors;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt;->NiaTextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/material3/ButtonColors;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt;->access$NiaButtonContent(Landroidx/compose/foundation/layout/RowScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ChipKt$NiaFilterChip$1$1;->(Lkotlin/jvm/functions/Function1;Z)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ChipKt$NiaFilterChip$2$1;->(ILkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ChipKt$NiaFilterChip$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ChipKt$NiaFilterChip$2;->(ILkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ChipKt$NiaFilterChip$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ChipKt$NiaFilterChip$3;->(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;II)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ChipKt;->NiaFilterChip(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$ChipKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$ChipKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$ChipKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$ChipKt;->()V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt$lambda-1$1;->()V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt$lambda-1$1;->()V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt$lambda-2$1;->()V @@ -14499,17 +13651,6 @@ PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSin PLcom/google/samples/apps/nowinandroid/core/designsystem/component/DropdownMenuKt$NiaDropdownMenu$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;)V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/DropdownMenuKt;->NiaDropdownMenu(ZLkotlin/jvm/functions/Function0;Ljava/util/List;Lkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaButtonDefaults;->textButtonColors-ro_MJ88(JJJLandroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ButtonColors; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaChipDefaults;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaTabDefaults;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TabsKt$NiaTab$1$1;->(ILkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TabsKt$NiaTab$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TabsKt$NiaTab$1;->(ILkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TabsKt$NiaTab$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TabsKt$NiaTabRow$1;->(I)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TabsKt$NiaTabRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TabsKt$NiaTabRow$2;->(ILandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TabsKt;->NiaTab(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TabsKt;->NiaTabRow(ILandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt$NiaTopicTag$2$1$1;->(Lkotlin/jvm/functions/Function1;)V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt$NiaTopicTag$2$2$1;->(Lkotlin/jvm/functions/Function1;)V PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt$NiaTopicTag$2$3$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V @@ -14522,7 +13663,7 @@ PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCa PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;->invoke(Ljava/util/Set;Ljava/util/Set;)Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; +PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;->invoke(Ljava/util/Set;)Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1$2;Lkotlin/coroutines/Continuation;)V PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V @@ -14533,21 +13674,7 @@ PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCa PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/domain/model/SaveableNewsResource;->(Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;Z)V -PLcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/datetime/Instant;Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;Ljava/util/List;Ljava/util/List;)V -PLcom/google/samples/apps/nowinandroid/core/result/Result$Loading;->()V -PLcom/google/samples/apps/nowinandroid/core/result/Result$Loading;->()V -PLcom/google/samples/apps/nowinandroid/core/result/Result$Success;->(Ljava/lang/Object;)V -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;)V -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$2;->(Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$3;->(Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/result/ResultKt;->asResult(Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;)Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1; +PLcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/datetime/Instant;Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;Ljava/util/List;)V PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-1$1;->()V PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-1$1;->()V PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @@ -14566,16 +13693,10 @@ PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResource PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-8$1;->()V PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-8$1;->()V PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$2$1;->(Lkotlin/jvm/functions/Function2;Lcom/google/samples/apps/nowinandroid/core/domain/model/SaveableNewsResource;)V PLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$2$2;->(Landroid/content/Context;Landroid/content/Intent;)V PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$BookmarkButton$1$1;->(Lkotlin/jvm/functions/Function0;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceAuthors$2;->(ILjava/util/List;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceAuthors$authorNameFormatted$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceAuthors$authorNameFormatted$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceAuthors$authorNameFormatted$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceCardExpanded$1$1;->(Ljava/lang/String;)V PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceCardExpanded$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceCardExpanded$2;->(Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;ZLkotlin/jvm/functions/Function0;I)V @@ -14597,105 +13718,12 @@ PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$ PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$1;->(Landroid/content/Context;Landroidx/compose/runtime/MutableState;)V PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->BookmarkButton(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceAuthors(Ljava/util/List;Landroidx/compose/runtime/Composer;I)V PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceCardExpanded(Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceDate(Lkotlinx/datetime/Instant;Landroidx/compose/runtime/Composer;I)V PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceHeaderImage(ILandroidx/compose/runtime/Composer;Ljava/lang/String;)V PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceShortDescription(ILandroidx/compose/runtime/Composer;Ljava/lang/String;)V PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceTitle(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceTopics(Ljava/util/List;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$$inlined$items$default$2;->(Ljava/util/List;Lcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$1;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$$inlined$items$default$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$$inlined$items$default$3;->(Ljava/util/List;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$$inlined$items$default$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$$inlined$items$default$4;->(Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$$inlined$items$default$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$1;->(Lkotlin/jvm/functions/Function1;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$2$1;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt$newsResourceCardItems$2$2;->(Lkotlin/jvm/functions/Function1;Landroid/content/Context;Landroid/content/Intent;Ljava/lang/Object;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardListKt;->newsResourceCardItems$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;)V PLcom/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver;->(Lcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$1$receiver$1;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorRoute$1;->(Lcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModel;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorRoute$2;->(Lcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModel;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorRoute$3;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModel;II)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorRoute$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorScreen$1$1;->(Landroidx/compose/ui/Modifier;I)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorScreen$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorScreen$1$2;->(Lcom/google/samples/apps/nowinandroid/feature/author/AuthorUiState;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;I)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorScreen$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorScreen$1;->(Lcom/google/samples/apps/nowinandroid/feature/author/AuthorUiState;Lcom/google/samples/apps/nowinandroid/feature/author/NewsUiState;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorScreen$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorToolbar$3$1$1;->(Lkotlin/jvm/functions/Function0;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorToolbar$3$2;->(Z)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$AuthorToolbar$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$authorBody$1;->(Lcom/google/samples/apps/nowinandroid/core/model/data/Author;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$authorBody$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$authorCards$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$authorCards$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$authorCards$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$authorCards$2;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$authorCards$2;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$authorCards$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt$authorCards$3;->(Lkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt;->AuthorRoute(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModel;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt;->AuthorScreen(Lcom/google/samples/apps/nowinandroid/feature/author/AuthorUiState;Lcom/google/samples/apps/nowinandroid/feature/author/NewsUiState;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt;->access$AuthorHeader(Lcom/google/samples/apps/nowinandroid/core/model/data/Author;Landroidx/compose/runtime/Composer;I)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorScreenKt;->access$AuthorToolbar(Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableAuthor;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorUiState$Error;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorUiState$Error;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorUiState$Loading;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorUiState$Loading;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorUiState$Success;->(Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableAuthor;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorUiState$Success;->equals(Ljava/lang/Object;)Z -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModel;->(Landroidx/lifecycle/SavedStateHandle;Lcom/google/samples/apps/nowinandroid/core/decoder/UriDecoder;Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepository;Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$2$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/String;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$2;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Ljava/lang/String;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$2;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$2;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$authorUiState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$newsUiState$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$newsUiState$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$newsUiState$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$newsUiState$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$newsUiState$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;)V -PLcom/google/samples/apps/nowinandroid/feature/author/AuthorViewModelKt$newsUiState$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-2$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-2$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-3$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-3$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-4$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-4$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-5$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-5$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-6$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-6$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-7$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-7$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-8$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-8$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-9$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt$lambda-9$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/ComposableSingletons$AuthorScreenKt;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/NewsUiState$Loading;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/NewsUiState$Loading;->()V -PLcom/google/samples/apps/nowinandroid/feature/author/NewsUiState$Success;->(Ljava/util/List;)V -PLcom/google/samples/apps/nowinandroid/feature/author/navigation/AuthorArgs;->(Landroidx/lifecycle/SavedStateHandle;Lcom/google/samples/apps/nowinandroid/core/decoder/UriDecoder;)V -PLcom/google/samples/apps/nowinandroid/feature/author/navigation/AuthorNavigationKt$authorScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt$BookmarksRoute$1;->(Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel;)V PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt$BookmarksRoute$2;->(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel;II)V PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt$BookmarksRoute$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @@ -14726,13 +13754,13 @@ PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$spec PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;)V PLcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorItem$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/AuthorsCarouselKt$AuthorsCarousel$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$1$1;->invoke()Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$updateAuthorSelection$1;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;Ljava/lang/String;ZLkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$updateAuthorSelection$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$updateAuthorSelection$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$updateTopicSelection$1;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;Ljava/lang/String;ZLkotlin/coroutines/Continuation;)V +PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$updateTopicSelection$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$updateTopicSelection$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -14768,58 +13796,36 @@ PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$In PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt$lambda-1$1;->()V PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt$lambda-1$1;->()V PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt$lambda-2$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt$lambda-2$1;->()V PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt;->()V PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt$InterestsIcon$1;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;II)V PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt$InterestsItem$1$1$1;->(Lkotlin/jvm/functions/Function0;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt$InterestsItem$1$1$1;->invoke()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsContent$1$1$1$1$1;->(ILkotlin/jvm/functions/Function1;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsContent$1$1$1$1$1;->invoke()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsContent$1$1$1$2;->(I)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsContent$1$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsContent$1$1;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsTabState;Lkotlin/jvm/functions/Function1;I)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt;->InterestsIcon(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$1;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$2;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$3;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$4$1$invoke$$inlined$onDispose$1;->(Landroidx/metrics/performance/PerformanceMetricsState$Holder;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$4$1$invoke$$inlined$onDispose$1;->dispose()V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$4$1;->(Landroidx/compose/runtime/MutableState;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$5;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsScreen$2;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState;Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsTabState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt;->InterestsContent(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsTabState;Lkotlin/jvm/functions/Function1;Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Interests;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt;->InterestsRoute(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt;->InterestsScreen(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState;Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsTabState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsTabState;->(ILjava/util/List;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsTabState;->equals(Ljava/lang/Object;)Z -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Interests;->(Ljava/util/List;Ljava/util/List;)V +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$2;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;II)V +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsScreen$2;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;II)V +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt;->InterestsRoute(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;Landroidx/compose/runtime/Composer;II)V +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt;->InterestsScreen(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsTabState;->(Ljava/util/List;)V +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Interests;->(Ljava/util/List;)V PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Interests;->equals(Ljava/lang/Object;)Z PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Loading;->()V PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Loading;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$uiState$2;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$uiState$2;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$uiState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase;Lcom/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsUseCase;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$AuthorsTabContent$1$1$1$1;->(Lkotlin/jvm/functions/Function1;Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableAuthor;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$AuthorsTabContent$1$1$1$1;->invoke()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$AuthorsTabContent$1$1$1$2;->(Lkotlin/jvm/functions/Function2;Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableAuthor;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$AuthorsTabContent$1$1$1;->(Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableAuthor;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$AuthorsTabContent$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$AuthorsTabContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;)V +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase;)V PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1$1$1$1$1;->(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1$1$1$2$1;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1$1$1;->(Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILkotlin/jvm/functions/Function2;)V PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function2;)V PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt;->AuthorsTabContent(Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt;->TopicsTabContent(Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V PLcom/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigationKt$interestsGraph$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/google/samples/apps/nowinandroid/sync/R$string;->isAttached(Landroidx/compose/ui/node/PointerInputModifierNode;)Z PLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$1$1;->invoke()Ljava/lang/Object; @@ -14917,11 +13923,8 @@ PLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang PLkotlin/collections/CollectionsKt__CollectionsKt;->arrayListOf([Ljava/lang/Object;)Ljava/util/ArrayList; PLkotlin/collections/CollectionsKt__ReversedViewsKt;->removeAll(Ljava/util/List;Lkotlin/jvm/functions/Function1;)V PLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object; -PLkotlin/collections/CollectionsKt___CollectionsKt;->joinTo(Ljava/lang/Iterable;Ljava/lang/StringBuilder;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)V -PLkotlin/collections/CollectionsKt___CollectionsKt;->joinToString$default(Ljava/lang/Iterable;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;I)Ljava/lang/String; -PLkotlin/internal/ProgressionUtilKt;->navOptions(Lkotlin/jvm/functions/Function1;)Landroidx/navigation/NavOptions; -PLkotlin/jvm/internal/AdaptedFunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)V -PLkotlin/jvm/internal/AdaptedFunctionReference;->(Ljava/lang/Class;Ljava/lang/String;)V +PLkotlin/collections/EmptyMap;->equals(Ljava/lang/Object;)Z +PLkotlin/collections/EmptySet;->isEmpty()Z PLkotlin/jvm/internal/Ref$LongRef;->()V PLkotlin/math/MathKt__MathJVMKt;->roundToInt(D)I PLkotlin/sequences/TakeWhileSequence$iterator$1;->(Lkotlin/sequences/TakeWhileSequence;)V @@ -14929,15 +13932,28 @@ PLkotlin/sequences/TakeWhileSequence$iterator$1;->calcNext()V PLkotlin/sequences/TakeWhileSequence$iterator$1;->hasNext()Z PLkotlin/sequences/TakeWhileSequence$iterator$1;->next()Ljava/lang/Object; PLkotlin/sequences/TakeWhileSequence;->(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V -PLkotlin/text/StringsKt__AppendableKt;->appendElement(Ljava/lang/StringBuilder;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V +PLkotlin/text/StringsKt__StringNumberConversionsKt;->toLongOrNull(Ljava/lang/String;)Ljava/lang/Long; +PLkotlin/text/StringsKt__StringsKt;->substringBefore$default(Ljava/lang/String;C)Ljava/lang/String; PLkotlinx/coroutines/CancellableContinuationImpl;->resumeUndispatched(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/Unit;)V PLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V PLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z +PLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +PLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +PLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLkotlinx/coroutines/InvokeOnCancelling;->()V +PLkotlinx/coroutines/InvokeOnCancelling;->(Lkotlin/jvm/functions/Function1;)V +PLkotlinx/coroutines/InvokeOnCancelling;->invoke(Ljava/lang/Throwable;)V PLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V PLkotlinx/coroutines/JobSupport$AwaitContinuation;->getContinuationCancellationCause(Lkotlinx/coroutines/JobSupport;)Ljava/lang/Throwable; PLkotlinx/coroutines/JobSupport;->isCancelled()Z +PLkotlinx/coroutines/RemoveOnCancel;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V PLkotlinx/coroutines/SupervisorJobImpl;->childCancelled(Ljava/lang/Throwable;)Z +PLkotlinx/coroutines/ThreadState;->()V +PLkotlinx/coroutines/ThreadState;->(Lkotlinx/coroutines/Job;)V PLkotlinx/coroutines/ThreadState;->clearInterrupt()V +PLkotlinx/coroutines/ThreadState;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLkotlinx/coroutines/ThreadState;->setup()V PLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V PLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1;->run()V PLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->resumeReceiveClosed(Lkotlinx/coroutines/channels/Closed;)V @@ -14960,22 +13976,12 @@ PLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->< PLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function2;Lkotlinx/coroutines/flow/Flow;)V PLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V -PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Lcom/google/samples/apps/nowinandroid/core/result/ResultKt$asResult$3;)V -PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1;->(Lkotlin/coroutines/Continuation;)V -PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;Lkotlin/coroutines/Continuation;)V -PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$ObjectRef;)V -PLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlinx/coroutines/flow/internal/FlowCoroutine;->childCancelled(Ljava/lang/Throwable;)Z PLkotlinx/coroutines/internal/DispatchedContinuation;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/util/concurrent/CancellationException;)V PLkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object; PLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V -PLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackTopUpdate(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;II)V PLkotlinx/coroutines/sync/MutexImpl$LockCont$tryResumeLockWaiter$1;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$LockCont;)V PLkotlinx/coroutines/sync/MutexImpl$LockCont;->(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuationImpl;)V PLkotlinx/coroutines/sync/MutexImpl$LockCont;->completeResumeLockWaiter()V @@ -14983,45 +13989,262 @@ PLkotlinx/coroutines/sync/MutexImpl$LockCont;->tryResumeLockWaiter()Z PLkotlinx/coroutines/sync/MutexImpl$LockWaiter;->()V PLkotlinx/coroutines/sync/MutexImpl$LockWaiter;->(Ljava/lang/Object;)V PLkotlinx/coroutines/sync/MutexImpl$LockedQueue;->(Ljava/lang/Object;)V +PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->(Lkotlinx/coroutines/sync/MutexImpl$LockedQueue;)V +PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V +PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol; +PLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lcoil/decode/BitmapFactoryDecoder$decode$1;)Ljava/lang/Object; PLkotlinx/coroutines/sync/SemaphoreImpl;->release()V -PLkotlinx/serialization/SerializersKt;->access$DistanceAndInLayer(FZ)J +PLokhttp3/Address;->equalsNonHost$okhttp(Lokhttp3/Address;)Z +PLokhttp3/CacheControl$Companion;->indexOfElement(ILjava/lang/String;Ljava/lang/String;)I +PLokhttp3/CertificatePinner;->equals(Ljava/lang/Object;)Z +PLokhttp3/ConnectionSpec;->equals(Ljava/lang/Object;)Z +PLokhttp3/Dispatcher;->finished$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V +PLokhttp3/Handshake$Companion$handshake$1;->(Ljava/util/List;)V +PLokhttp3/Handshake$Companion;->get(Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake; +PLokhttp3/Handshake$peerCertificates$2;->(Lkotlin/jvm/functions/Function0;)V +PLokhttp3/Handshake;->(Lokhttp3/TlsVersion;Lokhttp3/CipherSuite;Ljava/util/List;Lkotlin/jvm/functions/Function0;)V PLokhttp3/Headers$Builder;->add(Ljava/lang/String;Ljava/lang/String;)V PLokhttp3/Headers;->getDate(Ljava/lang/String;)Ljava/util/Date; +PLokhttp3/HttpUrl;->encodedPath()Ljava/lang/String; +PLokhttp3/MediaType$Companion;->get(Ljava/lang/String;)Lokhttp3/MediaType; +PLokhttp3/MediaType;->()V +PLokhttp3/MediaType;->(Ljava/lang/String;)V +PLokhttp3/Protocol$Companion;->get(Ljava/lang/String;)Lokhttp3/Protocol; +PLokhttp3/Response$Builder;->()V +PLokhttp3/Response$Builder;->(Lokhttp3/Response;)V +PLokhttp3/Response$Builder;->build()Lokhttp3/Response; +PLokhttp3/Response$Builder;->checkSupportResponse(Ljava/lang/String;Lokhttp3/Response;)V +PLokhttp3/Response;->(Lokhttp3/Request;Lokhttp3/Protocol;Ljava/lang/String;ILokhttp3/Handshake;Lokhttp3/Headers;Lokhttp3/ResponseBody;Lokhttp3/Response;Lokhttp3/Response;Lokhttp3/Response;JJLokhttp3/internal/connection/Exchange;)V +PLokhttp3/Response;->cacheControl()Lokhttp3/CacheControl; +PLokhttp3/Response;->close()V +PLokhttp3/Response;->header$default(Lokhttp3/Response;Ljava/lang/String;)Ljava/lang/String; +PLokhttp3/ResponseBody;->close()V +PLokhttp3/internal/Util;->closeQuietly(Ljava/io/Closeable;)V +PLokhttp3/internal/Util;->closeQuietly(Ljava/net/Socket;)V +PLokhttp3/internal/Util;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; +PLokhttp3/internal/Util;->headersContentLength(Lokhttp3/Response;)J +PLokhttp3/internal/Util;->readMedium(Lokio/BufferedSource;)I +PLokhttp3/internal/Util;->toHeaders(Ljava/util/List;)Lokhttp3/Headers; +PLokhttp3/internal/Util;->toNonNegativeInt(ILjava/lang/String;)I PLokhttp3/internal/Util;->withSuppressed(Ljava/io/IOException;Ljava/util/List;)V +PLokhttp3/internal/cache/CacheInterceptor$Companion;->access$stripBody(Lokhttp3/Response;)Lokhttp3/Response; +PLokhttp3/internal/concurrent/TaskQueue$execute$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;)V +PLokhttp3/internal/concurrent/TaskQueue$execute$1;->runOnce()J +PLokhttp3/internal/concurrent/TaskQueue;->cancelAllAndDecide$okhttp()Z +PLokhttp3/internal/concurrent/TaskQueue;->schedule(Lokhttp3/internal/concurrent/Task;J)V +PLokhttp3/internal/concurrent/TaskQueue;->scheduleAndDecide$okhttp(Lokhttp3/internal/concurrent/Task;JZ)Z +PLokhttp3/internal/concurrent/TaskQueue;->shutdown()V +PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorNotify(Lokhttp3/internal/concurrent/TaskRunner;)V +PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorWait(Lokhttp3/internal/concurrent/TaskRunner;J)V +PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->execute(Ljava/lang/Runnable;)V +PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->nanoTime()J +PLokhttp3/internal/concurrent/TaskRunner$runnable$1;->run()V +PLokhttp3/internal/concurrent/TaskRunner;->access$runTask(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/concurrent/Task;)V +PLokhttp3/internal/concurrent/TaskRunner;->afterRun(Lokhttp3/internal/concurrent/Task;J)V +PLokhttp3/internal/concurrent/TaskRunner;->awaitTaskToRun()Lokhttp3/internal/concurrent/Task; +PLokhttp3/internal/concurrent/TaskRunner;->kickCoordinator$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V +PLokhttp3/internal/connection/Exchange$ResponseBodySource;->(Lokhttp3/internal/connection/Exchange;Lokio/Source;J)V +PLokhttp3/internal/connection/Exchange$ResponseBodySource;->close()V +PLokhttp3/internal/connection/Exchange$ResponseBodySource;->complete(Ljava/io/IOException;)Ljava/io/IOException; +PLokhttp3/internal/connection/Exchange$ResponseBodySource;->read(Lokio/Buffer;J)J +PLokhttp3/internal/connection/Exchange;->(Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;Lokhttp3/internal/connection/ExchangeFinder;Lokhttp3/internal/http/ExchangeCodec;)V +PLokhttp3/internal/connection/Exchange;->bodyComplete(ZZLjava/io/IOException;)Ljava/io/IOException; +PLokhttp3/internal/connection/Exchange;->readResponseHeaders(Z)Lokhttp3/Response$Builder; PLokhttp3/internal/connection/Exchange;->trackFailure(Ljava/io/IOException;)V +PLokhttp3/internal/connection/ExchangeFinder;->sameHostAndPort(Lokhttp3/HttpUrl;)Z PLokhttp3/internal/connection/ExchangeFinder;->trackFailure(Ljava/io/IOException;)V +PLokhttp3/internal/connection/RealCall$CallReference;->(Lokhttp3/internal/connection/RealCall;Ljava/lang/Object;)V +PLokhttp3/internal/connection/RealCall;->acquireConnectionNoEvents(Lokhttp3/internal/connection/RealConnection;)V +PLokhttp3/internal/connection/RealCall;->callDone(Ljava/io/IOException;)Ljava/io/IOException; PLokhttp3/internal/connection/RealCall;->cancel()V -PLokhttp3/internal/connection/RouteException;->(Ljava/io/IOException;)V +PLokhttp3/internal/connection/RealCall;->exitNetworkInterceptorExchange$okhttp(Z)V +PLokhttp3/internal/connection/RealCall;->messageDone$okhttp(Lokhttp3/internal/connection/Exchange;ZZLjava/io/IOException;)Ljava/io/IOException; +PLokhttp3/internal/connection/RealCall;->noMoreExchanges$okhttp(Ljava/io/IOException;)Ljava/io/IOException; +PLokhttp3/internal/connection/RealCall;->releaseConnectionNoEvents$okhttp()Ljava/net/Socket; +PLokhttp3/internal/connection/RealConnection$connectTls$1;->(Lokhttp3/CertificatePinner;Lokhttp3/Handshake;Lokhttp3/Address;)V +PLokhttp3/internal/connection/RealConnection;->isEligible$okhttp(Lokhttp3/Address;Ljava/util/List;)Z +PLokhttp3/internal/connection/RealConnection;->isHealthy(Z)Z +PLokhttp3/internal/connection/RealConnection;->newCodec$okhttp(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/http/ExchangeCodec; +PLokhttp3/internal/connection/RealConnection;->onSettings(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Settings;)V +PLokhttp3/internal/connection/RealConnection;->startHttp2()V +PLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->runOnce()J +PLokhttp3/internal/connection/RealConnectionPool;->pruneAndGetAllocationCount(Lokhttp3/internal/connection/RealConnection;J)I +PLokhttp3/internal/http/CallServerInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; PLokhttp3/internal/http/DatesKt$STANDARD_DATE_FORMAT$1;->()V PLokhttp3/internal/http/DatesKt$STANDARD_DATE_FORMAT$1;->initialValue()Ljava/lang/Object; PLokhttp3/internal/http/DatesKt;->()V PLokhttp3/internal/http/DatesKt;->toHttpDateOrNull(Ljava/lang/String;)Ljava/util/Date; -PLokhttp3/internal/http/RealResponseBody;->contentLength()J -PLokhttp3/internal/http/RealResponseBody;->contentType()Lokhttp3/MediaType; +PLokhttp3/internal/http/HttpHeaders;->()V +PLokhttp3/internal/http/HttpHeaders;->promisesBody(Lokhttp3/Response;)Z +PLokhttp3/internal/http/HttpHeaders;->receiveHeaders(Lokhttp3/CookieJar;Lokhttp3/HttpUrl;Lokhttp3/Headers;)V +PLokhttp3/internal/http/HttpMethod;->permitsRequestBody(Ljava/lang/String;)Z +PLokhttp3/internal/http/RealResponseBody;->(Ljava/lang/String;JLokio/RealBufferedSource;)V +PLokhttp3/internal/http/RealResponseBody;->source()Lokio/BufferedSource; +PLokhttp3/internal/http/RetryAndFollowUpInterceptor;->followUpRequest(Lokhttp3/Response;Lokhttp3/internal/connection/Exchange;)Lokhttp3/Request; PLokhttp3/internal/http/RetryAndFollowUpInterceptor;->recover(Ljava/io/IOException;Lokhttp3/internal/connection/RealCall;Lokhttp3/Request;Z)Z +PLokhttp3/internal/http/StatusLine$Companion;->parse(Ljava/lang/String;)Lokhttp3/internal/http/StatusLine; +PLokhttp3/internal/http/StatusLine;->(Lokhttp3/Protocol;ILjava/lang/String;)V +PLokhttp3/internal/http2/ErrorCode;->()V +PLokhttp3/internal/http2/ErrorCode;->(IILjava/lang/String;)V +PLokhttp3/internal/http2/Header;->()V +PLokhttp3/internal/http2/Header;->(Ljava/lang/String;Ljava/lang/String;)V +PLokhttp3/internal/http2/Header;->(Lokio/ByteString;Ljava/lang/String;)V +PLokhttp3/internal/http2/Header;->(Lokio/ByteString;Lokio/ByteString;)V +PLokhttp3/internal/http2/Hpack$Reader;->(Lokhttp3/internal/http2/Http2Reader$ContinuationSource;)V +PLokhttp3/internal/http2/Hpack$Reader;->evictToRecoverBytes(I)I +PLokhttp3/internal/http2/Hpack$Reader;->getName(I)Lokio/ByteString; +PLokhttp3/internal/http2/Hpack$Reader;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V +PLokhttp3/internal/http2/Hpack$Reader;->readInt(II)I +PLokhttp3/internal/http2/Hpack$Writer;->(Lokio/Buffer;)V +PLokhttp3/internal/http2/Hpack$Writer;->evictToRecoverBytes(I)V +PLokhttp3/internal/http2/Hpack$Writer;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V +PLokhttp3/internal/http2/Hpack$Writer;->writeByteString(Lokio/ByteString;)V +PLokhttp3/internal/http2/Hpack$Writer;->writeHeaders(Ljava/util/ArrayList;)V +PLokhttp3/internal/http2/Hpack$Writer;->writeInt(III)V +PLokhttp3/internal/http2/Hpack;->()V +PLokhttp3/internal/http2/Hpack;->checkLowercase(Lokio/ByteString;)V +PLokhttp3/internal/http2/Http2;->()V +PLokhttp3/internal/http2/Http2;->()V +PLokhttp3/internal/http2/Http2Connection$Builder;->(Lokhttp3/internal/concurrent/TaskRunner;)V +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$lambda-7$lambda-6$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection;Lkotlin/jvm/internal/Ref$ObjectRef;)V +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$lambda-7$lambda-6$$inlined$execute$default$1;->runOnce()J PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$ping$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection;II)V PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$ping$$inlined$execute$default$1;->runOnce()J +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;Lokhttp3/internal/http2/Settings;)V +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$$inlined$execute$default$1;->runOnce()J +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Http2Reader;)V +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->ackSettings()V +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->headers(ILjava/util/List;Z)V +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()Ljava/lang/Object; PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->ping(IIZ)V +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->settings(Lokhttp3/internal/http2/Settings;)V +PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->windowUpdate(JI)V PLokhttp3/internal/http2/Http2Connection$writeSynResetLater$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection;ILokhttp3/internal/http2/ErrorCode;)V PLokhttp3/internal/http2/Http2Connection$writeSynResetLater$$inlined$execute$default$1;->runOnce()J +PLokhttp3/internal/http2/Http2Connection;->()V +PLokhttp3/internal/http2/Http2Connection;->(Lokhttp3/internal/http2/Http2Connection$Builder;)V +PLokhttp3/internal/http2/Http2Connection;->close$okhttp(Lokhttp3/internal/http2/ErrorCode;Lokhttp3/internal/http2/ErrorCode;Ljava/io/IOException;)V +PLokhttp3/internal/http2/Http2Connection;->flush()V +PLokhttp3/internal/http2/Http2Connection;->getStream(I)Lokhttp3/internal/http2/Http2Stream; +PLokhttp3/internal/http2/Http2Connection;->removeStream$okhttp(I)Lokhttp3/internal/http2/Http2Stream; +PLokhttp3/internal/http2/Http2Connection;->shutdown(Lokhttp3/internal/http2/ErrorCode;)V +PLokhttp3/internal/http2/Http2Connection;->updateConnectionFlowControl$okhttp(J)V PLokhttp3/internal/http2/Http2Connection;->writeSynResetLater$okhttp(ILokhttp3/internal/http2/ErrorCode;)V +PLokhttp3/internal/http2/Http2ExchangeCodec;->()V +PLokhttp3/internal/http2/Http2ExchangeCodec;->(Lokhttp3/OkHttpClient;Lokhttp3/internal/connection/RealConnection;Lokhttp3/internal/http/RealInterceptorChain;Lokhttp3/internal/http2/Http2Connection;)V PLokhttp3/internal/http2/Http2ExchangeCodec;->cancel()V -PLokhttp3/internal/http2/Http2Stream;->close(Lokhttp3/internal/http2/ErrorCode;Ljava/io/IOException;)V +PLokhttp3/internal/http2/Http2ExchangeCodec;->finishRequest()V +PLokhttp3/internal/http2/Http2ExchangeCodec;->getConnection()Lokhttp3/internal/connection/RealConnection; +PLokhttp3/internal/http2/Http2ExchangeCodec;->openResponseBodySource(Lokhttp3/Response;)Lokio/Source; +PLokhttp3/internal/http2/Http2ExchangeCodec;->readResponseHeaders(Z)Lokhttp3/Response$Builder; +PLokhttp3/internal/http2/Http2ExchangeCodec;->reportedContentLength(Lokhttp3/Response;)J +PLokhttp3/internal/http2/Http2Reader$Companion;->lengthWithoutPadding(III)I +PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->(Lokio/BufferedSource;)V +PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->read(Lokio/Buffer;J)J +PLokhttp3/internal/http2/Http2Reader;->()V +PLokhttp3/internal/http2/Http2Reader;->(Lokio/BufferedSource;Z)V +PLokhttp3/internal/http2/Http2Reader;->close()V +PLokhttp3/internal/http2/Http2Reader;->nextFrame(ZLokhttp3/internal/http2/Http2Reader$Handler;)Z +PLokhttp3/internal/http2/Http2Reader;->readConnectionPreface(Lokhttp3/internal/http2/Http2Reader$Handler;)V +PLokhttp3/internal/http2/Http2Reader;->readHeaderBlock(IIII)Ljava/util/List; +PLokhttp3/internal/http2/Http2Stream$FramingSink;->(Lokhttp3/internal/http2/Http2Stream;Z)V +PLokhttp3/internal/http2/Http2Stream$FramingSink;->close()V +PLokhttp3/internal/http2/Http2Stream$FramingSource;->(Lokhttp3/internal/http2/Http2Stream;JZ)V +PLokhttp3/internal/http2/Http2Stream$FramingSource;->close()V +PLokhttp3/internal/http2/Http2Stream$FramingSource;->read(Lokio/Buffer;J)J +PLokhttp3/internal/http2/Http2Stream$FramingSource;->updateConnectionFlowControl(J)V +PLokhttp3/internal/http2/Http2Stream$StreamTimeout;->(Lokhttp3/internal/http2/Http2Stream;)V +PLokhttp3/internal/http2/Http2Stream$StreamTimeout;->exitAndThrowIfTimedOut()V +PLokhttp3/internal/http2/Http2Stream;->(ILokhttp3/internal/http2/Http2Connection;ZZLokhttp3/Headers;)V +PLokhttp3/internal/http2/Http2Stream;->cancelStreamIfNecessary$okhttp()V PLokhttp3/internal/http2/Http2Stream;->closeInternal(Lokhttp3/internal/http2/ErrorCode;Ljava/io/IOException;)Z PLokhttp3/internal/http2/Http2Stream;->closeLater(Lokhttp3/internal/http2/ErrorCode;)V +PLokhttp3/internal/http2/Http2Stream;->getSink()Lokhttp3/internal/http2/Http2Stream$FramingSink; +PLokhttp3/internal/http2/Http2Stream;->isLocallyInitiated()Z +PLokhttp3/internal/http2/Http2Stream;->isOpen()Z +PLokhttp3/internal/http2/Http2Stream;->receiveHeaders(Lokhttp3/Headers;Z)V +PLokhttp3/internal/http2/Http2Stream;->waitForIo$okhttp()V +PLokhttp3/internal/http2/Http2Writer;->()V +PLokhttp3/internal/http2/Http2Writer;->(Lokio/BufferedSink;Z)V +PLokhttp3/internal/http2/Http2Writer;->applyAndAckSettings(Lokhttp3/internal/http2/Settings;)V +PLokhttp3/internal/http2/Http2Writer;->close()V +PLokhttp3/internal/http2/Http2Writer;->frameHeader(IIII)V +PLokhttp3/internal/http2/Http2Writer;->goAway(ILokhttp3/internal/http2/ErrorCode;[B)V PLokhttp3/internal/http2/Http2Writer;->ping(IIZ)V PLokhttp3/internal/http2/Http2Writer;->rstStream(ILokhttp3/internal/http2/ErrorCode;)V +PLokhttp3/internal/http2/Http2Writer;->windowUpdate(JI)V +PLokhttp3/internal/http2/Huffman$Node;->()V +PLokhttp3/internal/http2/Huffman$Node;->(II)V +PLokhttp3/internal/http2/Huffman;->()V +PLokhttp3/internal/http2/Huffman;->addCode(III)V +PLokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel;->()V +PLokhttp3/internal/http2/PushObserver;->()V +PLokhttp3/internal/http2/Settings;->()V +PLokhttp3/internal/http2/Settings;->getInitialWindowSize()I +PLokhttp3/internal/http2/Settings;->merge(Lokhttp3/internal/http2/Settings;)V +PLokhttp3/internal/http2/Settings;->set(II)V PLokhttp3/internal/http2/StreamResetException;->(Lokhttp3/internal/http2/ErrorCode;)V -PLokhttp3/internal/platform/Android10Platform;->isCleartextTrafficPermitted(Ljava/lang/String;)Z -PLokio/GzipSource;->(Lokio/Source;)V -PLokio/GzipSource;->checkEqual(IILjava/lang/String;)V -PLokio/GzipSource;->close()V -PLokio/GzipSource;->read(Lokio/Buffer;J)J -PLokio/GzipSource;->updateCrc(JJLokio/Buffer;)V -PLokio/InflaterSource;->(Lokio/RealBufferedSource;Ljava/util/zip/Inflater;)V -PLokio/InflaterSource;->close()V -PLokio/InflaterSource;->read(Lokio/Buffer;J)J +PLokhttp3/internal/platform/Android10Platform;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; +PLokhttp3/internal/platform/Jdk9Platform$$ExternalSyntheticApiModelOutline1;->m(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; +PLokhttp3/internal/platform/Platform;->afterHandshake(Ljavax/net/ssl/SSLSocket;)V +PLokhttp3/internal/platform/android/Android10SocketAdapter;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; +PLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->equals(Ljava/lang/Object;)Z +PLokhttp3/internal/tls/OkHostnameVerifier;->getSubjectAltNames(Ljava/security/cert/X509Certificate;I)Ljava/util/List; +PLokhttp3/internal/tls/OkHostnameVerifier;->isAscii(Ljava/lang/String;)Z +PLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Z +PLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z +PLokio/AsyncTimeout$Companion;->awaitTimeout$okio()Lokio/AsyncTimeout; +PLokio/AsyncTimeout$Watchdog;->()V +PLokio/AsyncTimeout$Watchdog;->run()V +PLokio/AsyncTimeout$sink$1;->close()V +PLokio/AsyncTimeout$sink$1;->flush()V +PLokio/AsyncTimeout$sink$1;->write(Lokio/Buffer;J)V +PLokio/AsyncTimeout$source$1;->close()V +PLokio/AsyncTimeout$source$1;->read(Lokio/Buffer;J)J +PLokio/AsyncTimeout;->exit()Z +PLokio/Buffer;->copyTo(JJLokio/Buffer;)V +PLokio/Buffer;->readShort()S +PLokio/Buffer;->readUtf8(J)Ljava/lang/String; +PLokio/Buffer;->skip(J)V +PLokio/Buffer;->writeShort(I)V +PLokio/ByteString;->hashCode()I +PLokio/ByteString;->toAsciiLowercase()Lokio/ByteString; +PLokio/FileSystem;->metadata(Lokio/Path;)Lokio/FileMetadata; +PLokio/ForwardingSink;->flush()V +PLokio/ForwardingSink;->write(Lokio/Buffer;J)V +PLokio/ForwardingSource;->(Lokio/Source;)V +PLokio/ForwardingSource;->close()V +PLokio/ForwardingSource;->read(Lokio/Buffer;J)J +PLokio/InputStreamSource;->close()V +PLokio/JvmSystemFileSystem;->source(Lokio/Path;)Lokio/Source; +PLokio/OutputStreamSink;->flush()V +PLokio/PeekSource;->(Lokio/BufferedSource;)V +PLokio/PeekSource;->read(Lokio/Buffer;J)J +PLokio/RealBufferedSink;->flush()V +PLokio/RealBufferedSink;->write(Lokio/Buffer;J)V +PLokio/RealBufferedSink;->write(Lokio/ByteString;)Lokio/BufferedSink; +PLokio/RealBufferedSink;->writeInt(I)Lokio/BufferedSink; +PLokio/RealBufferedSink;->writeShort(I)Lokio/BufferedSink; +PLokio/RealBufferedSource$inputStream$1;->(Lokio/RealBufferedSource;)V PLokio/RealBufferedSource$inputStream$1;->available()I PLokio/RealBufferedSource$inputStream$1;->close()V +PLokio/RealBufferedSource$inputStream$1;->read([BII)I +PLokio/RealBufferedSource;->close()V +PLokio/RealBufferedSource;->exhausted()Z +PLokio/RealBufferedSource;->getBuffer()Lokio/Buffer; +PLokio/RealBufferedSource;->indexOf(BJJ)J PLokio/RealBufferedSource;->inputStream()Ljava/io/InputStream; -PLokio/_JvmPlatformKt;->()V +PLokio/RealBufferedSource;->rangeEquals(JLokio/ByteString;)Z +PLokio/RealBufferedSource;->read(Lokio/Buffer;J)J +PLokio/RealBufferedSource;->readAll(Lokio/RealBufferedSink;)J +PLokio/RealBufferedSource;->readByte()B +PLokio/RealBufferedSource;->readByteString(J)Lokio/ByteString; +PLokio/RealBufferedSource;->readInt()I +PLokio/RealBufferedSource;->readShort()S +PLokio/RealBufferedSource;->readUtf8LineStrict()Ljava/lang/String; +PLokio/RealBufferedSource;->readUtf8LineStrict(J)Ljava/lang/String; +PLokio/RealBufferedSource;->require(J)V +PLokio/RealBufferedSource;->skip(J)V +PLokio/Segment;->sharedCopy()Lokio/Segment; +PLokio/Timeout$Companion$NONE$1;->throwIfReached()V +PLokio/internal/_BufferKt;->readUtf8Line(Lokio/Buffer;J)Ljava/lang/String; diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt index 2cfc7142f..e46d2156a 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt @@ -43,10 +43,10 @@ import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.ui.NiaApp import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch +import javax.inject.Inject @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @AndroidEntryPoint @@ -106,7 +106,8 @@ class MainActivity : ComponentActivity() { NiaTheme( darkTheme = darkTheme, - androidTheme = shouldUseAndroidTheme(uiState) + androidTheme = shouldUseAndroidTheme(uiState), + disableDynamicTheming = shouldDisableDynamicTheming(uiState), ) { NiaApp( networkMonitor = networkMonitor, @@ -141,6 +142,17 @@ private fun shouldUseAndroidTheme( } } +/** + * Returns `true` if the dynamic color is disabled, as a function of the [uiState]. + */ +@Composable +private fun shouldDisableDynamicTheming( + uiState: MainActivityUiState, +): Boolean = when (uiState) { + Loading -> false + is Success -> !uiState.userData.useDynamicColor +} + /** * Returns `true` if dark theme should be used, as a function of the [uiState] and the * current system context. diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt index 0a182cbd7..ebea4b965 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt @@ -23,22 +23,22 @@ import com.google.samples.apps.nowinandroid.MainActivityUiState.Success import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.model.data.UserData import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn +import javax.inject.Inject @HiltViewModel class MainActivityViewModel @Inject constructor( - userDataRepository: UserDataRepository + userDataRepository: UserDataRepository, ) : ViewModel() { val uiState: StateFlow = userDataRepository.userData.map { Success(it) }.stateIn( scope = viewModelScope, initialValue = Loading, - started = SharingStarted.WhileSubscribed(5_000) + started = SharingStarted.WhileSubscribed(5_000), ) } diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt index 90f844c1b..be64d057f 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt @@ -47,7 +47,7 @@ object JankStatsModule { @Provides fun providesJankStats( window: Window, - frameListener: JankStats.OnFrameListener + frameListener: JankStats.OnFrameListener, ): JankStats { return JankStats.createAndTrack(window, frameListener) } diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt index 6146a5527..d6e30a10e 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt @@ -39,7 +39,7 @@ fun NiaNavHost( navController: NavHostController, onBackClick: () -> Unit, modifier: Modifier = Modifier, - startDestination: String = forYouNavigationRoute + startDestination: String = forYouNavigationRoute, ) { NavHost( navController = navController, @@ -54,7 +54,7 @@ fun NiaNavHost( }, nestedGraphs = { topicScreen(onBackClick) - } + }, ) } } diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt index 956037f29..396ab8b7b 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt @@ -34,24 +34,24 @@ enum class TopLevelDestination( val selectedIcon: Icon, val unselectedIcon: Icon, val iconTextId: Int, - val titleTextId: Int + val titleTextId: Int, ) { FOR_YOU( selectedIcon = DrawableResourceIcon(NiaIcons.Upcoming), unselectedIcon = DrawableResourceIcon(NiaIcons.UpcomingBorder), iconTextId = forYouR.string.for_you, - titleTextId = R.string.app_name + titleTextId = R.string.app_name, ), BOOKMARKS( selectedIcon = DrawableResourceIcon(NiaIcons.Bookmarks), unselectedIcon = DrawableResourceIcon(NiaIcons.BookmarksBorder), iconTextId = bookmarksR.string.saved, - titleTextId = bookmarksR.string.saved + titleTextId = bookmarksR.string.saved, ), INTERESTS( selectedIcon = ImageVectorIcon(NiaIcons.Grid3x3), unselectedIcon = ImageVectorIcon(NiaIcons.Grid3x3), iconTextId = interestsR.string.interests, - titleTextId = interestsR.string.interests - ) + titleTextId = interestsR.string.interests, + ), } diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index a3f570ad5..14bc11992 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -68,16 +68,16 @@ import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon.ImageVec import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors -import com.google.samples.apps.nowinandroid.feature.settings.R as settingsR import com.google.samples.apps.nowinandroid.feature.settings.SettingsDialog import com.google.samples.apps.nowinandroid.navigation.NiaNavHost import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination +import com.google.samples.apps.nowinandroid.feature.settings.R as settingsR @OptIn( ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class, ExperimentalComposeUiApi::class, - ExperimentalLifecycleComposeApi::class + ExperimentalLifecycleComposeApi::class, ) @Composable fun NiaApp( @@ -85,7 +85,7 @@ fun NiaApp( networkMonitor: NetworkMonitor, appState: NiaAppState = rememberNiaAppState( networkMonitor = networkMonitor, - windowSizeClass = windowSizeClass + windowSizeClass = windowSizeClass, ), ) { val shouldShowGradientBackground = @@ -106,15 +106,17 @@ fun NiaApp( // If user is not connected to the internet show a snack bar to inform them. val notConnectedMessage = stringResource(R.string.not_connected) LaunchedEffect(isOffline) { - if (isOffline) snackbarHostState.showSnackbar( - message = notConnectedMessage, - duration = Indefinite - ) + if (isOffline) { + snackbarHostState.showSnackbar( + message = notConnectedMessage, + duration = Indefinite, + ) + } } if (appState.shouldShowSettingsDialog) { SettingsDialog( - onDismiss = { appState.setShowSettingsDialog(false) } + onDismiss = { appState.setShowSettingsDialog(false) }, ) } @@ -132,10 +134,10 @@ fun NiaApp( destinations = appState.topLevelDestinations, onNavigateToDestination = appState::navigateToTopLevelDestination, currentDestination = appState.currentDestination, - modifier = Modifier.testTag("NiaBottomBar") + modifier = Modifier.testTag("NiaBottomBar"), ) } - } + }, ) { padding -> Row( Modifier @@ -144,9 +146,9 @@ fun NiaApp( .consumedWindowInsets(padding) .windowInsetsPadding( WindowInsets.safeDrawing.only( - WindowInsetsSides.Horizontal - ) - ) + WindowInsetsSides.Horizontal, + ), + ), ) { if (appState.shouldShowNavRail) { NiaNavRail( @@ -155,7 +157,7 @@ fun NiaApp( currentDestination = appState.currentDestination, modifier = Modifier .testTag("NiaNavRail") - .safeDrawingPadding() + .safeDrawingPadding(), ) } @@ -167,18 +169,18 @@ fun NiaApp( titleRes = destination.titleTextId, actionIcon = NiaIcons.Settings, actionIconContentDescription = stringResource( - id = settingsR.string.top_app_bar_action_icon_description + id = settingsR.string.top_app_bar_action_icon_description, ), colors = TopAppBarDefaults.centerAlignedTopAppBarColors( - containerColor = Color.Transparent + containerColor = Color.Transparent, ), - onActionClick = { appState.setShowSettingsDialog(true) } + onActionClick = { appState.setShowSettingsDialog(true) }, ) } NiaNavHost( navController = appState.navController, - onBackClick = appState::onBackClick + onBackClick = appState::onBackClick, ) } @@ -212,15 +214,15 @@ private fun NiaNavRail( when (icon) { is ImageVectorIcon -> Icon( imageVector = icon.imageVector, - contentDescription = null + contentDescription = null, ) is DrawableResourceIcon -> Icon( painter = painterResource(id = icon.id), - contentDescription = null + contentDescription = null, ) } }, - label = { Text(stringResource(destination.iconTextId)) } + label = { Text(stringResource(destination.iconTextId)) }, ) } } @@ -231,10 +233,10 @@ private fun NiaBottomBar( destinations: List, onNavigateToDestination: (TopLevelDestination) -> Unit, currentDestination: NavDestination?, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { NiaNavigationBar( - modifier = modifier + modifier = modifier, ) { destinations.forEach { destination -> val selected = currentDestination.isTopLevelDestinationInHierarchy(destination) @@ -250,16 +252,16 @@ private fun NiaBottomBar( when (icon) { is ImageVectorIcon -> Icon( imageVector = icon.imageVector, - contentDescription = null + contentDescription = null, ) is DrawableResourceIcon -> Icon( painter = painterResource(id = icon.id), - contentDescription = null + contentDescription = null, ) } }, - label = { Text(stringResource(destination.iconTextId)) } + label = { Text(stringResource(destination.iconTextId)) }, ) } } diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index bc5724c02..6f929530c 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -16,7 +16,6 @@ package com.google.samples.apps.nowinandroid.ui -import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass import androidx.compose.material3.windowsizeclass.WindowSizeClass import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.runtime.Composable @@ -56,7 +55,7 @@ fun rememberNiaAppState( windowSizeClass: WindowSizeClass, networkMonitor: NetworkMonitor, coroutineScope: CoroutineScope = rememberCoroutineScope(), - navController: NavHostController = rememberNavController() + navController: NavHostController = rememberNavController(), ): NiaAppState { NavigationTrackingSideEffect(navController) return remember(navController, coroutineScope, windowSizeClass, networkMonitor) { @@ -87,8 +86,7 @@ class NiaAppState( private set val shouldShowBottomBar: Boolean - get() = windowSizeClass.widthSizeClass == WindowWidthSizeClass.Compact || - windowSizeClass.heightSizeClass == WindowHeightSizeClass.Compact + get() = windowSizeClass.widthSizeClass == WindowWidthSizeClass.Compact val shouldShowNavRail: Boolean get() = !shouldShowBottomBar @@ -98,7 +96,7 @@ class NiaAppState( .stateIn( scope = coroutineScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = false + initialValue = false, ) /** diff --git a/benchmarks/src/main/java/androidx/test/uiautomator/UiAutomatorHelpers.kt b/benchmarks/src/main/java/androidx/test/uiautomator/UiAutomatorHelpers.kt index 3e5191d34..85867b982 100644 --- a/benchmarks/src/main/java/androidx/test/uiautomator/UiAutomatorHelpers.kt +++ b/benchmarks/src/main/java/androidx/test/uiautomator/UiAutomatorHelpers.kt @@ -28,7 +28,7 @@ import androidx.test.uiautomator.HasChildrenOp.EXACTLY */ fun untilHasChildren( childCount: Int = 1, - op: HasChildrenOp = AT_LEAST + op: HasChildrenOp = AT_LEAST, ): UiObject2Condition { return object : UiObject2Condition() { override fun apply(element: UiObject2): Boolean { @@ -44,5 +44,5 @@ fun untilHasChildren( enum class HasChildrenOp { AT_LEAST, EXACTLY, - AT_MOST + AT_MOST, } diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt index f9399d4c3..3dfafd647 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt +++ b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt @@ -18,11 +18,12 @@ package com.google.samples.apps.nowinandroid.baselineprofile import androidx.benchmark.macro.ExperimentalBaselineProfilesApi import androidx.benchmark.macro.junit4.BaselineProfileRule -import androidx.test.uiautomator.By import com.google.samples.apps.nowinandroid.PACKAGE_NAME +import com.google.samples.apps.nowinandroid.bookmarks.goToBookmarksScreen import com.google.samples.apps.nowinandroid.foryou.forYouScrollFeedDownUp +import com.google.samples.apps.nowinandroid.foryou.forYouSelectTopics import com.google.samples.apps.nowinandroid.foryou.forYouWaitForContent -import com.google.samples.apps.nowinandroid.interests.interestsScrollPeopleDownUp +import com.google.samples.apps.nowinandroid.interests.goToInterestsScreen import com.google.samples.apps.nowinandroid.interests.interestsScrollTopicsDownUp import org.junit.Rule import org.junit.Test @@ -46,24 +47,16 @@ class BaselineProfileGenerator { // Scroll the feed critical user journey forYouWaitForContent() + forYouSelectTopics(true) forYouScrollFeedDownUp() // Navigate to saved screen - device.findObject(By.text("Saved")).click() - device.waitForIdle() + goToBookmarksScreen() // TODO: we need to implement adding stuff to bookmarks before able to scroll it // bookmarksScrollFeedDownUp() // Navigate to interests screen - device.findObject(By.text("Interests")).click() - device.waitForIdle() - + goToInterestsScreen() interestsScrollTopicsDownUp() - - // Navigate to people tab - device.findObject(By.text("People")).click() - device.waitForIdle() - - interestsScrollPeopleDownUp() } } diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt index b2e99d8cc..3dce5b313 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt +++ b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt @@ -18,8 +18,18 @@ package com.google.samples.apps.nowinandroid.bookmarks import androidx.benchmark.macro.MacrobenchmarkScope import androidx.test.uiautomator.By +import androidx.test.uiautomator.Until import com.google.samples.apps.nowinandroid.flingElementDownUp +fun MacrobenchmarkScope.goToBookmarksScreen() { + device.findObject(By.text("Saved")).click() + device.waitForIdle() + // Wait until saved title are shown on screen + device.wait(Until.hasObject(By.res("niaTopAppBar")), 2_000) + val topAppBar = device.findObject(By.res("niaTopAppBar")) + topAppBar.wait(Until.hasObject(By.text("Saved")), 2_000) +} + fun MacrobenchmarkScope.bookmarksScrollFeedDownUp() { val feedList = device.findObject(By.res("bookmarks:feed")) device.flingElementDownUp(feedList) diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt index 96ee040cc..5e4952fbb 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt +++ b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt @@ -23,12 +23,65 @@ import androidx.test.uiautomator.untilHasChildren import com.google.samples.apps.nowinandroid.flingElementDownUp fun MacrobenchmarkScope.forYouWaitForContent() { - // Wait until content is loaded by checking if authors are loaded - device.wait(Until.gone(By.res("forYou:loadingWheel")), 5_000) + // Wait until content is loaded by checking if topics are loaded + device.wait(Until.gone(By.res("loadingWheel")), 5_000) // Sometimes, the loading wheel is gone, but the content is not loaded yet - // So we'll wait here for authors to be sure - val obj = device.findObject(By.res("forYou:authors")) - obj.wait(untilHasChildren(), 30_000) + // So we'll wait here for topics to be sure + val obj = device.findObject(By.res("forYou:topicSelection")) + // Timeout here is quite big, because sometimes data loading takes a long time! + obj.wait(untilHasChildren(), 60_000) +} + +/** + * Selects some topics, which will show the feed content for them. + * [recheckTopicsIfChecked] Topics may be already checked from the previous iteration. + */ +fun MacrobenchmarkScope.forYouSelectTopics(recheckTopicsIfChecked: Boolean = false) { + val topics = device.findObject(By.res("forYou:topicSelection")) + + // Set gesture margin from sides not to trigger system gesture navigation + val horizontalMargin = 10 * topics.visibleBounds.width() / 100 + topics.setGestureMargins(horizontalMargin, 0, horizontalMargin, 0) + + // Select some topics to show some feed content + var index = 0 + var visited = 0 + + while (visited < 3) { + // Selecting some topics, which will populate items in the feed. + val topic = topics.children[index % topics.childCount] + // Find the checkable element to figure out whether it's checked or not + val topicCheckIcon = topic.findObject(By.checkable(true)) + // Topic icon may not be visible if it's out of the screen boundaries + // If that's the case, let's try another index + if (topicCheckIcon == null) { + index++ + continue + } + + when { + // Topic wasn't checked, so just do that + !topicCheckIcon.isChecked -> { + topic.click() + device.waitForIdle() + } + + // Topic was checked already and we want to recheck it, so just do it twice + recheckTopicsIfChecked -> { + repeat(2) { + topic.click() + device.waitForIdle() + } + } + + else -> { + // Topic is checked, but we don't recheck it + } + } + + index++ + visited++ + } } fun MacrobenchmarkScope.forYouScrollFeedDownUp() { diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt index b9ab11c4b..f8945a31c 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt +++ b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt @@ -47,9 +47,10 @@ class ScrollForYouFeedBenchmark { // Start the app pressHome() startActivityAndWait() - } + }, ) { forYouWaitForContent() + forYouSelectTopics() forYouScrollFeedDownUp() } } diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt index b68dfea26..e94369ce2 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt +++ b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt @@ -21,16 +21,23 @@ import androidx.test.uiautomator.By import androidx.test.uiautomator.Until import com.google.samples.apps.nowinandroid.flingElementDownUp +fun MacrobenchmarkScope.goToInterestsScreen() { + device.findObject(By.text("Interests")).click() + device.waitForIdle() + // Wait until interests are shown on screen + device.wait(Until.hasObject(By.res("niaTopAppBar")), 2_000) + val topAppBar = device.findObject(By.res("niaTopAppBar")) + topAppBar.wait(Until.hasObject(By.text("Interests")), 2_000) + + // Wait until content is loaded by checking if interests are loaded + device.wait(Until.gone(By.res("loadingWheel")), 5_000) +} + fun MacrobenchmarkScope.interestsScrollTopicsDownUp() { val topicsList = device.findObject(By.res("interests:topics")) device.flingElementDownUp(topicsList) } -fun MacrobenchmarkScope.interestsScrollPeopleDownUp() { - val peopleList = device.findObject(By.res("interests:people")) - device.flingElementDownUp(peopleList) -} - fun MacrobenchmarkScope.interestsWaitForTopics() { device.wait(Until.hasObject(By.text("Accessibility")), 30_000) } diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt index 69f02d235..24bd233ea 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt +++ b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt @@ -51,7 +51,7 @@ class TopicsScreenRecompositionBenchmark { // Navigate to interests screen device.findObject(By.text("Interests")).click() device.waitForIdle() - } + }, ) { interestsWaitForTopics() repeat(3) { diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt index 5d83d89b2..8e396eda3 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt +++ b/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt @@ -66,7 +66,7 @@ abstract class AbstractStartupBenchmark(private val startupMode: StartupMode) { @Test fun startupBaselineProfileDisabled() = startup( - CompilationMode.Partial(baselineProfileMode = Disable, warmupIterations = 1) + CompilationMode.Partial(baselineProfileMode = Disable, warmupIterations = 1), ) @Test @@ -83,7 +83,7 @@ abstract class AbstractStartupBenchmark(private val startupMode: StartupMode) { startupMode = startupMode, setupBlock = { pressHome() - } + }, ) { startActivityAndWait() // Waits until the content is ready to capture Time To Full Display diff --git a/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt b/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt index 5895568a7..277b68717 100644 --- a/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt +++ b/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt @@ -24,5 +24,5 @@ import kotlin.annotation.AnnotationRetention.RUNTIME annotation class Dispatcher(val niaDispatcher: NiaDispatchers) enum class NiaDispatchers { - IO + IO, } diff --git a/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt b/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt index 90852c7c5..4f1229e9d 100644 --- a/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt +++ b/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt @@ -17,10 +17,10 @@ package com.google.samples.apps.nowinandroid.core.result import app.cash.turbine.test -import kotlin.test.assertEquals import kotlinx.coroutines.flow.flow import kotlinx.coroutines.test.runTest import org.junit.Test +import kotlin.test.assertEquals class ResultKtTest { @@ -38,11 +38,12 @@ class ResultKtTest { when (val errorResult = awaitItem()) { is Result.Error -> assertEquals( "Test Done", - errorResult.exception?.message + errorResult.exception?.message, ) Result.Loading, - is Result.Success -> throw IllegalStateException( - "The flow should have emitted an Error Result" + is Result.Success, + -> throw IllegalStateException( + "The flow should have emitted an Error Result", ) } diff --git a/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt b/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt index 91e47b688..c00c99ded 100644 --- a/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt +++ b/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt @@ -17,9 +17,9 @@ package com.google.samples.apps.nowinandroid.core.data.test import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf +import javax.inject.Inject class AlwaysOnlineNetworkMonitor @Inject constructor() : NetworkMonitor { override val isOnline: Flow = flowOf(true) diff --git a/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt b/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt index ca20edc44..f4fc9c7b0 100644 --- a/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt +++ b/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt @@ -32,26 +32,26 @@ import dagger.hilt.testing.TestInstallIn @Module @TestInstallIn( components = [SingletonComponent::class], - replaces = [DataModule::class] + replaces = [DataModule::class], ) interface TestDataModule { @Binds fun bindsTopicRepository( - fakeTopicsRepository: FakeTopicsRepository + fakeTopicsRepository: FakeTopicsRepository, ): TopicsRepository @Binds fun bindsNewsResourceRepository( - fakeNewsRepository: FakeNewsRepository + fakeNewsRepository: FakeNewsRepository, ): NewsRepository @Binds fun bindsUserDataRepository( - userDataRepository: FakeUserDataRepository + userDataRepository: FakeUserDataRepository, ): UserDataRepository @Binds fun bindsNetworkMonitor( - networkMonitor: AlwaysOnlineNetworkMonitor + networkMonitor: AlwaysOnlineNetworkMonitor, ): NetworkMonitor } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt index 0f2a592de..5d069dbaf 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt @@ -19,9 +19,9 @@ package com.google.samples.apps.nowinandroid.core.data import android.util.Log import com.google.samples.apps.nowinandroid.core.datastore.ChangeListVersions import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList -import kotlin.coroutines.cancellation.CancellationException import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine +import kotlin.coroutines.cancellation.CancellationException /** * Interface marker for a class that manages synchronization between local data and a remote @@ -62,7 +62,7 @@ private suspend fun suspendRunCatching(block: suspend () -> T): Result = Log.i( "suspendRunCatching", "Failed to evaluate a suspendRunCatchingBlock. Returning failure Result", - exception + exception, ) Result.failure(exception) } @@ -116,10 +116,10 @@ fun combine( flow4: Flow, flow5: Flow, flow6: Flow, - transform: suspend (T1, T2, T3, T4, T5, T6) -> R + transform: suspend (T1, T2, T3, T4, T5, T6) -> R, ): Flow = combine( combine(flow, flow2, flow3, ::Triple), - combine(flow4, flow5, flow6, ::Triple) + combine(flow4, flow5, flow6, ::Triple), ) { t1, t2 -> transform( t1.first, @@ -127,6 +127,6 @@ fun combine( t1.third, t2.first, t2.second, - t2.third + t2.third, ) } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt index c58552416..b4dda701e 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt @@ -35,21 +35,21 @@ interface DataModule { @Binds fun bindsTopicRepository( - topicsRepository: OfflineFirstTopicsRepository + topicsRepository: OfflineFirstTopicsRepository, ): TopicsRepository @Binds fun bindsNewsResourceRepository( - newsRepository: OfflineFirstNewsRepository + newsRepository: OfflineFirstNewsRepository, ): NewsRepository @Binds fun bindsUserDataRepository( - userDataRepository: OfflineFirstUserDataRepository + userDataRepository: OfflineFirstUserDataRepository, ): UserDataRepository @Binds fun bindsNetworkMonitor( - networkMonitor: ConnectivityManagerNetworkMonitor + networkMonitor: ConnectivityManagerNetworkMonitor, ): NetworkMonitor } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt index ecb2d7a4e..c3ad91dfe 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt @@ -62,6 +62,6 @@ fun NetworkNewsResource.topicCrossReferences(): List topics.map { topicId -> NewsResourceTopicCrossRef( newsResourceId = id, - topicId = topicId + topicId = topicId, ) } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/Topic.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/Topic.kt index b9acb90a0..188b1e06d 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/Topic.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/Topic.kt @@ -25,5 +25,5 @@ fun NetworkTopic.asEntity() = TopicEntity( shortDescription = shortDescription, longDescription = longDescription, url = url, - imageUrl = imageUrl + imageUrl = imageUrl, ) diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt index bd434a7dc..9e041b956 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt @@ -30,9 +30,9 @@ import com.google.samples.apps.nowinandroid.core.datastore.ChangeListVersions import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map +import javax.inject.Inject /** * Disk storage backed implementation of the [NewsRepository]. @@ -49,9 +49,9 @@ class OfflineFirstNewsRepository @Inject constructor( .map { it.map(PopulatedNewsResource::asExternalModel) } override fun getNewsResources( - filterTopicIds: Set + filterTopicIds: Set, ): Flow> = newsResourceDao.getNewsResources( - filterTopicIds = filterTopicIds + filterTopicIds = filterTopicIds, ) .map { it.map(PopulatedNewsResource::asExternalModel) } @@ -74,18 +74,18 @@ class OfflineFirstNewsRepository @Inject constructor( topicEntities = networkNewsResources .map(NetworkNewsResource::topicEntityShells) .flatten() - .distinctBy(TopicEntity::id) + .distinctBy(TopicEntity::id), ) newsResourceDao.upsertNewsResources( newsResourceEntities = networkNewsResources - .map(NetworkNewsResource::asEntity) + .map(NetworkNewsResource::asEntity), ) newsResourceDao.insertOrIgnoreTopicCrossRefEntities( newsResourceTopicCrossReferences = networkNewsResources .map(NetworkNewsResource::topicCrossReferences) .distinct() - .flatten() + .flatten(), ) - } + }, ) } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt index c3d2cb72e..13dd19e49 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt @@ -26,9 +26,9 @@ import com.google.samples.apps.nowinandroid.core.datastore.ChangeListVersions import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map +import javax.inject.Inject /** * Disk storage backed implementation of the [TopicsRepository]. @@ -59,8 +59,8 @@ class OfflineFirstTopicsRepository @Inject constructor( modelUpdater = { changedIds -> val networkTopics = network.getTopics(ids = changedIds) topicDao.upsertTopics( - entities = networkTopics.map(NetworkTopic::asEntity) + entities = networkTopics.map(NetworkTopic::asEntity), ) - } + }, ) } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt index 14a419b67..200ca4a3d 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt @@ -20,11 +20,11 @@ import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSou import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.core.model.data.UserData -import javax.inject.Inject import kotlinx.coroutines.flow.Flow +import javax.inject.Inject class OfflineFirstUserDataRepository @Inject constructor( - private val niaPreferencesDataSource: NiaPreferencesDataSource + private val niaPreferencesDataSource: NiaPreferencesDataSource, ) : UserDataRepository { override val userData: Flow = @@ -45,6 +45,9 @@ class OfflineFirstUserDataRepository @Inject constructor( override suspend fun setDarkThemeConfig(darkThemeConfig: DarkThemeConfig) = niaPreferencesDataSource.setDarkThemeConfig(darkThemeConfig) + override suspend fun setDynamicColorPreference(useDynamicColor: Boolean) = + niaPreferencesDataSource.setDynamicColorPreference(useDynamicColor) + override suspend fun setShouldHideOnboarding(shouldHideOnboarding: Boolean) = niaPreferencesDataSource.setShouldHideOnboarding(shouldHideOnboarding) } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt index d645e0194..ea093852f 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt @@ -53,6 +53,11 @@ interface UserDataRepository { */ suspend fun setDarkThemeConfig(darkThemeConfig: DarkThemeConfig) + /** + * Sets the preferred dynamic color config. + */ + suspend fun setDynamicColorPreference(useDynamicColor: Boolean) + /** * Sets whether the user has completed the onboarding process. */ diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt index f74a94a43..d6a712538 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt @@ -26,11 +26,11 @@ import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource -import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn +import javax.inject.Inject /** * Fake implementation of the [NewsRepository] that retrieves the news resources from a JSON String. @@ -40,7 +40,7 @@ import kotlinx.coroutines.flow.flowOn */ class FakeNewsRepository @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, - private val datasource: FakeNiaNetworkDataSource + private val datasource: FakeNiaNetworkDataSource, ) : NewsRepository { override fun getNewsResources(): Flow> = @@ -48,7 +48,7 @@ class FakeNewsRepository @Inject constructor( emit( datasource.getNewsResources() .map(NetworkNewsResource::asEntity) - .map(NewsResourceEntity::asExternalModel) + .map(NewsResourceEntity::asExternalModel), ) }.flowOn(ioDispatcher) @@ -61,7 +61,7 @@ class FakeNewsRepository @Inject constructor( .getNewsResources() .filter { it.topics.intersect(filterTopicIds).isNotEmpty() } .map(NetworkNewsResource::asEntity) - .map(NewsResourceEntity::asExternalModel) + .map(NewsResourceEntity::asExternalModel), ) }.flowOn(ioDispatcher) diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt index 60d876b75..1ab9c9353 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt @@ -22,12 +22,12 @@ import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource -import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map +import javax.inject.Inject /** * Fake implementation of the [TopicsRepository] that retrieves the topics from a JSON String, and @@ -38,7 +38,7 @@ import kotlinx.coroutines.flow.map */ class FakeTopicsRepository @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, - private val datasource: FakeNiaNetworkDataSource + private val datasource: FakeNiaNetworkDataSource, ) : TopicsRepository { override fun getTopics(): Flow> = flow { emit( @@ -49,9 +49,9 @@ class FakeTopicsRepository @Inject constructor( shortDescription = it.shortDescription, longDescription = it.longDescription, url = it.url, - imageUrl = it.imageUrl + imageUrl = it.imageUrl, ) - } + }, ) }.flowOn(ioDispatcher) diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeUserDataRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeUserDataRepository.kt index 5d4d17d0b..af206e5c7 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeUserDataRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeUserDataRepository.kt @@ -21,8 +21,8 @@ import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSou import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.core.model.data.UserData -import javax.inject.Inject import kotlinx.coroutines.flow.Flow +import javax.inject.Inject /** * Fake implementation of the [UserDataRepository] that returns hardcoded user data. @@ -55,6 +55,10 @@ class FakeUserDataRepository @Inject constructor( niaPreferencesDataSource.setDarkThemeConfig(darkThemeConfig) } + override suspend fun setDynamicColorPreference(useDynamicColor: Boolean) { + niaPreferencesDataSource.setDynamicColorPreference(useDynamicColor) + } + override suspend fun setShouldHideOnboarding(shouldHideOnboarding: Boolean) { niaPreferencesDataSource.setShouldHideOnboarding(shouldHideOnboarding) } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt index 0f86f5384..982f47c6e 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt @@ -26,14 +26,14 @@ import android.os.Build.VERSION import android.os.Build.VERSION_CODES import androidx.core.content.getSystemService import dagger.hilt.android.qualifiers.ApplicationContext -import javax.inject.Inject import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.conflate +import javax.inject.Inject class ConnectivityManagerNetworkMonitor @Inject constructor( - @ApplicationContext private val context: Context + @ApplicationContext private val context: Context, ) : NetworkMonitor { override val isOnline: Flow = callbackFlow { val connectivityManager = context.getSystemService() @@ -54,7 +54,7 @@ class ConnectivityManagerNetworkMonitor @Inject constructor( override fun onCapabilitiesChanged( network: Network, - networkCapabilities: NetworkCapabilities + networkCapabilities: NetworkCapabilities, ) { channel.trySend(connectivityManager.isCurrentlyConnected()) } @@ -64,7 +64,7 @@ class ConnectivityManagerNetworkMonitor @Inject constructor( Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(), - callback + callback, ) channel.trySend(connectivityManager.isCurrentlyConnected()) diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt index ed0c78c8e..dbbb3a94e 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt @@ -20,9 +20,9 @@ import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Art import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResourceExpanded import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import kotlin.test.assertEquals import kotlinx.datetime.Instant import org.junit.Test +import kotlin.test.assertEquals class NetworkEntityKtTest { diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt index cc32bf9bb..74848d655 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt @@ -35,13 +35,13 @@ import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferen import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource -import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder +import kotlin.test.assertEquals class OfflineFirstNewsRepositoryTest { @@ -65,8 +65,8 @@ class OfflineFirstNewsRepositoryTest { network = TestNiaNetworkDataSource() synchronizer = TestSynchronizer( NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore() - ) + tmpFolder.testUserPreferencesDataStore(), + ), ) subject = OfflineFirstNewsRepository( @@ -84,7 +84,7 @@ class OfflineFirstNewsRepositoryTest { .first() .map(PopulatedNewsResource::asExternalModel), subject.getNewsResources() - .first() + .first(), ) } @@ -100,7 +100,7 @@ class OfflineFirstNewsRepositoryTest { subject.getNewsResources( filterTopicIds = filteredInterestsIds, ) - .first() + .first(), ) assertEquals( @@ -108,7 +108,7 @@ class OfflineFirstNewsRepositoryTest { subject.getNewsResources( filterTopicIds = nonPresentInterestsIds, ) - .first() + .first(), ) } @@ -127,13 +127,13 @@ class OfflineFirstNewsRepositoryTest { assertEquals( newsResourcesFromNetwork.map(NewsResource::id), - newsResourcesFromDb.map(NewsResource::id) + newsResourcesFromDb.map(NewsResource::id), ) // After sync version should be updated assertEquals( network.latestChangeListVersion(CollectionType.NewsResources), - synchronizer.getChangeListVersions().newsResourceVersion + synchronizer.getChangeListVersions().newsResourceVersion, ) } @@ -155,7 +155,7 @@ class OfflineFirstNewsRepositoryTest { network.editCollection( collectionType = CollectionType.NewsResources, id = it, - isDelete = true + isDelete = true, ) } @@ -168,13 +168,13 @@ class OfflineFirstNewsRepositoryTest { // Assert that items marked deleted on the network have been deleted locally assertEquals( newsResourcesFromNetwork.map(NewsResource::id) - deletedItems, - newsResourcesFromDb.map(NewsResource::id) + newsResourcesFromDb.map(NewsResource::id), ) // After sync version should be updated assertEquals( network.latestChangeListVersion(CollectionType.NewsResources), - synchronizer.getChangeListVersions().newsResourceVersion + synchronizer.getChangeListVersions().newsResourceVersion, ) } @@ -190,7 +190,7 @@ class OfflineFirstNewsRepositoryTest { val changeList = network.changeListsAfter( CollectionType.NewsResources, - version = 7 + version = 7, ) val changeListIds = changeList .map(NetworkChangeList::id) @@ -207,13 +207,13 @@ class OfflineFirstNewsRepositoryTest { assertEquals( newsResourcesFromNetwork.map(NewsResource::id), - newsResourcesFromDb.map(NewsResource::id) + newsResourcesFromDb.map(NewsResource::id), ) // After sync version should be updated assertEquals( changeList.last().changeListVersion, - synchronizer.getChangeListVersions().newsResourceVersion + synchronizer.getChangeListVersions().newsResourceVersion, ) } @@ -228,7 +228,7 @@ class OfflineFirstNewsRepositoryTest { .flatten() .distinctBy(TopicEntity::id), topicDao.getTopicEntities() - .first() + .first(), ) } @@ -242,7 +242,7 @@ class OfflineFirstNewsRepositoryTest { .map(NetworkNewsResource::topicCrossReferences) .distinct() .flatten(), - newsResourceDao.topicCrossReferences + newsResourceDao.topicCrossReferences, ) } } diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt index 5c3f8dfc0..ca9941b8a 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt @@ -28,13 +28,13 @@ import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSou import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder +import kotlin.test.assertEquals class OfflineFirstTopicsRepositoryTest { @@ -56,13 +56,13 @@ class OfflineFirstTopicsRepositoryTest { topicDao = TestTopicDao() network = TestNiaNetworkDataSource() niaPreferences = NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore() + tmpFolder.testUserPreferencesDataStore(), ) synchronizer = TestSynchronizer(niaPreferences) subject = OfflineFirstTopicsRepository( topicDao = topicDao, - network = network + network = network, ) } @@ -74,7 +74,7 @@ class OfflineFirstTopicsRepositoryTest { .first() .map(TopicEntity::asExternalModel), subject.getTopics() - .first() + .first(), ) } @@ -91,13 +91,13 @@ class OfflineFirstTopicsRepositoryTest { assertEquals( networkTopics.map(TopicEntity::id), - dbTopics.map(TopicEntity::id) + dbTopics.map(TopicEntity::id), ) // After sync version should be updated assertEquals( network.latestChangeListVersion(CollectionType.Topics), - synchronizer.getChangeListVersions().topicVersion + synchronizer.getChangeListVersions().topicVersion, ) } @@ -121,13 +121,13 @@ class OfflineFirstTopicsRepositoryTest { assertEquals( networkTopics.map(TopicEntity::id), - dbTopics.map(TopicEntity::id) + dbTopics.map(TopicEntity::id), ) // After sync version should be updated assertEquals( network.latestChangeListVersion(CollectionType.Topics), - synchronizer.getChangeListVersions().topicVersion + synchronizer.getChangeListVersions().topicVersion, ) } @@ -149,7 +149,7 @@ class OfflineFirstTopicsRepositoryTest { network.editCollection( collectionType = CollectionType.Topics, id = it, - isDelete = true + isDelete = true, ) } @@ -162,13 +162,13 @@ class OfflineFirstTopicsRepositoryTest { // Assert that items marked deleted on the network have been deleted locally assertEquals( networkTopics.map(Topic::id) - deletedItems, - dbTopics.map(Topic::id) + dbTopics.map(Topic::id), ) // After sync version should be updated assertEquals( network.latestChangeListVersion(CollectionType.Topics), - synchronizer.getChangeListVersions().topicVersion + synchronizer.getChangeListVersions().topicVersion, ) } } diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt index 531f1004a..055d8e074 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt @@ -21,9 +21,6 @@ import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferen import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.core.model.data.UserData -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map import kotlinx.coroutines.test.runTest @@ -31,6 +28,9 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue class OfflineFirstUserDataRepositoryTest { private lateinit var subject: OfflineFirstUserDataRepository @@ -43,11 +43,11 @@ class OfflineFirstUserDataRepositoryTest { @Before fun setup() { niaPreferencesDataSource = NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore() + tmpFolder.testUserPreferencesDataStore(), ) subject = OfflineFirstUserDataRepository( - niaPreferencesDataSource = niaPreferencesDataSource + niaPreferencesDataSource = niaPreferencesDataSource, ) } @@ -60,9 +60,10 @@ class OfflineFirstUserDataRepositoryTest { followedTopics = emptySet(), themeBrand = ThemeBrand.DEFAULT, darkThemeConfig = DarkThemeConfig.FOLLOW_SYSTEM, - shouldHideOnboarding = false + useDynamicColor = false, + shouldHideOnboarding = false, ), - subject.userData.first() + subject.userData.first(), ) } @@ -75,7 +76,7 @@ class OfflineFirstUserDataRepositoryTest { setOf("0"), subject.userData .map { it.followedTopics } - .first() + .first(), ) subject.toggleFollowedTopicId(followedTopicId = "1", followed = true) @@ -84,7 +85,7 @@ class OfflineFirstUserDataRepositoryTest { setOf("0", "1"), subject.userData .map { it.followedTopics } - .first() + .first(), ) assertEquals( @@ -93,7 +94,7 @@ class OfflineFirstUserDataRepositoryTest { .first(), subject.userData .map { it.followedTopics } - .first() + .first(), ) } @@ -106,7 +107,7 @@ class OfflineFirstUserDataRepositoryTest { setOf("1", "2"), subject.userData .map { it.followedTopics } - .first() + .first(), ) assertEquals( @@ -115,7 +116,7 @@ class OfflineFirstUserDataRepositoryTest { .first(), subject.userData .map { it.followedTopics } - .first() + .first(), ) } @@ -128,7 +129,7 @@ class OfflineFirstUserDataRepositoryTest { setOf("0"), subject.userData .map { it.bookmarkedNewsResources } - .first() + .first(), ) subject.updateNewsResourceBookmark(newsResourceId = "1", bookmarked = true) @@ -137,7 +138,7 @@ class OfflineFirstUserDataRepositoryTest { setOf("0", "1"), subject.userData .map { it.bookmarkedNewsResources } - .first() + .first(), ) assertEquals( @@ -146,7 +147,7 @@ class OfflineFirstUserDataRepositoryTest { .first(), subject.userData .map { it.bookmarkedNewsResources } - .first() + .first(), ) } @@ -159,14 +160,34 @@ class OfflineFirstUserDataRepositoryTest { ThemeBrand.ANDROID, subject.userData .map { it.themeBrand } - .first() + .first(), ) assertEquals( ThemeBrand.ANDROID, niaPreferencesDataSource .userData .map { it.themeBrand } - .first() + .first(), + ) + } + + @Test + fun offlineFirstUserDataRepository_set_dynamic_color_delegates_to_nia_preferences() = + runTest { + subject.setDynamicColorPreference(true) + + assertEquals( + true, + subject.userData + .map { it.useDynamicColor } + .first(), + ) + assertEquals( + true, + niaPreferencesDataSource + .userData + .map { it.useDynamicColor } + .first(), ) } @@ -179,14 +200,14 @@ class OfflineFirstUserDataRepositoryTest { DarkThemeConfig.DARK, subject.userData .map { it.darkThemeConfig } - .first() + .first(), ) assertEquals( DarkThemeConfig.DARK, niaPreferencesDataSource .userData .map { it.darkThemeConfig } - .first() + .first(), ) } diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/TestSynchronizer.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/TestSynchronizer.kt index e50a3776b..270dd010e 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/TestSynchronizer.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/TestSynchronizer.kt @@ -24,12 +24,12 @@ import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSou * Test synchronizer that delegates to [NiaPreferencesDataSource] */ class TestSynchronizer( - private val niaPreferences: NiaPreferencesDataSource + private val niaPreferences: NiaPreferencesDataSource, ) : Synchronizer { override suspend fun getChangeListVersions(): ChangeListVersions = niaPreferences.getChangeListVersions() override suspend fun updateChangeListVersions( - update: ChangeListVersions.() -> ChangeListVersions + update: ChangeListVersions.() -> ChangeListVersions, ) = niaPreferences.updateChangeListVersion(update) } diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt index 6441cf6ed..f63014075 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt @@ -46,8 +46,8 @@ class TestNewsResourceDao : NewsResourceDao { headerImageUrl = "headerImageUrl", type = Video, publishDate = Instant.fromEpochMilliseconds(1), - ) - ) + ), + ), ) internal var topicCrossReferences: List = listOf() @@ -58,7 +58,7 @@ class TestNewsResourceDao : NewsResourceDao { } override fun getNewsResources( - filterTopicIds: Set + filterTopicIds: Set, ): Flow> = getNewsResources() .map { resources -> @@ -68,7 +68,7 @@ class TestNewsResourceDao : NewsResourceDao { } override suspend fun insertOrIgnoreNewsResources( - entities: List + entities: List, ): List { entitiesStateFlow.value = entities // Assume no conflicts on insert @@ -84,7 +84,7 @@ class TestNewsResourceDao : NewsResourceDao { } override suspend fun insertOrIgnoreTopicCrossRefEntities( - newsResourceTopicCrossReferences: List + newsResourceTopicCrossReferences: List, ) { topicCrossReferences = newsResourceTopicCrossReferences } @@ -107,6 +107,6 @@ private fun NewsResourceEntity.asPopulatedNewsResource() = PopulatedNewsResource longDescription = "long description", url = "URL", imageUrl = "image URL", - ) + ), ), ) diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt index abbf39f50..8e248a3aa 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt @@ -27,7 +27,7 @@ import kotlinx.serialization.json.Json enum class CollectionType { Topics, - NewsResources + NewsResources, } /** @@ -37,7 +37,7 @@ class TestNiaNetworkDataSource : NiaNetworkDataSource { private val source = FakeNiaNetworkDataSource( UnconfinedTestDispatcher(), - Json { ignoreUnknownKeys = true } + Json { ignoreUnknownKeys = true }, ) private val allTopics = runBlocking { source.getTopics() } @@ -54,13 +54,13 @@ class TestNiaNetworkDataSource : NiaNetworkDataSource { override suspend fun getTopics(ids: List?): List = allTopics.matchIds( ids = ids, - idGetter = NetworkTopic::id + idGetter = NetworkTopic::id, ) override suspend fun getNewsResources(ids: List?): List = allNewsResources.matchIds( ids = ids, - idGetter = NetworkNewsResource::id + idGetter = NetworkNewsResource::id, ) override suspend fun getTopicChangeList(after: Int?): List = @@ -102,7 +102,7 @@ fun List.after(version: Int?): List = */ private fun List.matchIds( ids: List?, - idGetter: (T) -> String + idGetter: (T) -> String, ) = when (ids) { null -> this else -> ids.toSet().let { idSet -> this.filter { idSet.contains(idGetter(it)) } } @@ -113,7 +113,7 @@ private fun List.matchIds( * [after] simulates which models have changed by excluding items before it */ private fun List.mapToChangeList( - idGetter: (T) -> String + idGetter: (T) -> String, ) = mapIndexed { index, item -> NetworkChangeList( id = idGetter(item), diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt index d842f1501..8ac0dc0b8 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt @@ -37,8 +37,8 @@ class TestTopicDao : TopicDao { longDescription = "long description", url = "URL", imageUrl = "image URL", - ) - ) + ), + ), ) override fun getTopicEntity(topicId: String): Flow { diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt index fa500decb..83158f6cd 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt @@ -19,9 +19,9 @@ package com.google.samples.apps.nowinandroid.core.database.model import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video import com.google.samples.apps.nowinandroid.core.model.data.Topic -import kotlin.test.assertEquals import kotlinx.datetime.Instant import org.junit.Test +import kotlin.test.assertEquals class PopulatedNewsResourceKtTest { @Test @@ -44,7 +44,7 @@ class PopulatedNewsResourceKtTest { longDescription = "long description", url = "URL", imageUrl = "image URL", - ) + ), ), ) val newsResource = populatedNewsResource.asExternalModel() @@ -66,10 +66,10 @@ class PopulatedNewsResourceKtTest { longDescription = "long description", url = "URL", imageUrl = "image URL", - ) - ) + ), + ), ), - newsResource + newsResource, ) } } diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt index 37a25dc7e..77a09819b 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt @@ -17,8 +17,8 @@ package com.google.samples.apps.nowinandroid.core.database.util import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType -import kotlin.test.assertEquals import org.junit.Test +import kotlin.test.assertEquals class NewsResourceTypeConverterTest { @@ -26,7 +26,7 @@ class NewsResourceTypeConverterTest { fun test_room_news_resource_type_converter_for_video() { assertEquals( NewsResourceType.Video, - NewsResourceTypeConverter().stringToNewsResourceType("Video 📺") + NewsResourceTypeConverter().stringToNewsResourceType("Video 📺"), ) } @@ -34,7 +34,7 @@ class NewsResourceTypeConverterTest { fun test_room_news_resource_type_converter_for_article() { assertEquals( NewsResourceType.Article, - NewsResourceTypeConverter().stringToNewsResourceType("Article 📚") + NewsResourceTypeConverter().stringToNewsResourceType("Article 📚"), ) } @@ -42,7 +42,7 @@ class NewsResourceTypeConverterTest { fun test_room_news_resource_type_converter_for_api_change() { assertEquals( NewsResourceType.APIChange, - NewsResourceTypeConverter().stringToNewsResourceType("API change") + NewsResourceTypeConverter().stringToNewsResourceType("API change"), ) } @@ -50,7 +50,7 @@ class NewsResourceTypeConverterTest { fun test_room_news_resource_type_converter_for_codelab() { assertEquals( NewsResourceType.Codelab, - NewsResourceTypeConverter().stringToNewsResourceType("Codelab") + NewsResourceTypeConverter().stringToNewsResourceType("Codelab"), ) } @@ -58,7 +58,7 @@ class NewsResourceTypeConverterTest { fun test_room_news_resource_type_converter_for_podcast() { assertEquals( NewsResourceType.Podcast, - NewsResourceTypeConverter().stringToNewsResourceType("Podcast 🎙") + NewsResourceTypeConverter().stringToNewsResourceType("Podcast 🎙"), ) } @@ -66,7 +66,7 @@ class NewsResourceTypeConverterTest { fun test_room_news_resource_type_converter_for_docs() { assertEquals( NewsResourceType.Docs, - NewsResourceTypeConverter().stringToNewsResourceType("Docs 📑") + NewsResourceTypeConverter().stringToNewsResourceType("Docs 📑"), ) } @@ -74,7 +74,7 @@ class NewsResourceTypeConverterTest { fun test_room_news_resource_type_converter_for_event() { assertEquals( NewsResourceType.Event, - NewsResourceTypeConverter().stringToNewsResourceType("Event 📆") + NewsResourceTypeConverter().stringToNewsResourceType("Event 📆"), ) } @@ -82,7 +82,7 @@ class NewsResourceTypeConverterTest { fun test_room_news_resource_type_converter_for_dac() { assertEquals( NewsResourceType.DAC, - NewsResourceTypeConverter().stringToNewsResourceType("DAC") + NewsResourceTypeConverter().stringToNewsResourceType("DAC"), ) } @@ -90,7 +90,7 @@ class NewsResourceTypeConverterTest { fun test_room_news_resource_type_converter_for_umm() { assertEquals( NewsResourceType.Unknown, - NewsResourceTypeConverter().stringToNewsResourceType("umm") + NewsResourceTypeConverter().stringToNewsResourceType("umm"), ) } } diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts index 1177ae0f5..79fd4ded9 100644 --- a/core/database/build.gradle.kts +++ b/core/database/build.gradle.kts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import com.android.build.api.dsl.ManagedVirtualDevice + // TODO: Remove once https://youtrack.jetbrains.com/issue/KTIJ-19369 is fixed @Suppress("DSL_SCOPE_VIOLATION") plugins { @@ -31,7 +34,8 @@ android { arg("room.schemaLocation", "$projectDir/schemas") } - testInstrumentationRunner = "com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner" + testInstrumentationRunner = + "com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner" } namespace = "com.google.samples.apps.nowinandroid.core.database" @@ -39,7 +43,7 @@ android { // TODO: Convert it as a convention plugin once Flamingo goes out (https://github.com/android/nowinandroid/issues/523) managedDevices { devices { - maybeCreate("pixel4api30").apply { + maybeCreate("pixel4api30").apply { device = "Pixel 4" apiLevel = 30 // ATDs currently support only API level 30. diff --git a/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt b/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt index 5dd1cf624..c1c1b39ba 100644 --- a/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt +++ b/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt @@ -25,12 +25,12 @@ import com.google.samples.apps.nowinandroid.core.database.model.NewsResourceTopi import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType -import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant import org.junit.Before import org.junit.Test +import kotlin.test.assertEquals class NewsResourceDaoTest { @@ -43,7 +43,7 @@ class NewsResourceDaoTest { val context = ApplicationProvider.getApplicationContext() db = Room.inMemoryDatabaseBuilder( context, - NiaDatabase::class.java + NiaDatabase::class.java, ).build() newsResourceDao = db.newsResourceDao() topicDao = db.topicDao() @@ -70,7 +70,7 @@ class NewsResourceDaoTest { ), ) newsResourceDao.upsertNewsResources( - newsResourceEntities + newsResourceEntities, ) val savedNewsResourceEntities = newsResourceDao.getNewsResources() @@ -80,7 +80,7 @@ class NewsResourceDaoTest { listOf(3L, 2L, 1L, 0L), savedNewsResourceEntities.map { it.asExternalModel().publishDate.toEpochMilliseconds() - } + }, ) } @@ -89,11 +89,11 @@ class NewsResourceDaoTest { val topicEntities = listOf( testTopicEntity( id = "1", - name = "1" + name = "1", ), testTopicEntity( id = "2", - name = "2" + name = "2", ), ) val newsResourceEntities = listOf( @@ -117,18 +117,18 @@ class NewsResourceDaoTest { val newsResourceTopicCrossRefEntities = topicEntities.mapIndexed { index, topicEntity -> NewsResourceTopicCrossRef( newsResourceId = index.toString(), - topicId = topicEntity.id + topicId = topicEntity.id, ) } topicDao.insertOrIgnoreTopics( - topicEntities = topicEntities + topicEntities = topicEntities, ) newsResourceDao.upsertNewsResources( - newsResourceEntities + newsResourceEntities, ) newsResourceDao.insertOrIgnoreTopicCrossRefEntities( - newsResourceTopicCrossRefEntities + newsResourceTopicCrossRefEntities, ) val filteredNewsResources = newsResourceDao.getNewsResources( @@ -139,7 +139,7 @@ class NewsResourceDaoTest { assertEquals( listOf("1", "0"), - filteredNewsResources.map { it.entity.id } + filteredNewsResources.map { it.entity.id }, ) } @@ -169,7 +169,7 @@ class NewsResourceDaoTest { val (toDelete, toKeep) = newsResourceEntities.partition { it.id.toInt() % 2 == 0 } newsResourceDao.deleteNewsResources( - toDelete.map(NewsResourceEntity::id) + toDelete.map(NewsResourceEntity::id), ) assertEquals( @@ -177,26 +177,26 @@ class NewsResourceDaoTest { .toSet(), newsResourceDao.getNewsResources().first() .map { it.entity.id } - .toSet() + .toSet(), ) } } private fun testTopicEntity( id: String = "0", - name: String + name: String, ) = TopicEntity( id = id, name = name, shortDescription = "", longDescription = "", url = "", - imageUrl = "" + imageUrl = "", ) private fun testNewsResource( id: String = "0", - millisSinceEpoch: Long = 0 + millisSinceEpoch: Long = 0, ) = NewsResourceEntity( id = id, title = "", diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt index 8d7430fa0..09e0849fe 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt +++ b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt @@ -33,31 +33,31 @@ object DatabaseMigrations { @RenameColumn( tableName = "topics", fromColumnName = "description", - toColumnName = "shortDescription" + toColumnName = "shortDescription", ) class Schema2to3 : AutoMigrationSpec @DeleteColumn( tableName = "news_resources", - columnName = "episode_id" + columnName = "episode_id", ) @DeleteTable.Entries( DeleteTable( - tableName = "episodes_authors" + tableName = "episodes_authors", ), DeleteTable( - tableName = "episodes" - ) + tableName = "episodes", + ), ) class Schema10to11 : AutoMigrationSpec @DeleteTable.Entries( DeleteTable( - tableName = "news_resources_authors" + tableName = "news_resources_authors", ), DeleteTable( - tableName = "authors" - ) + tableName = "authors", + ), ) class Schema11to12 : AutoMigrationSpec } diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt index 7d4dd67c8..7d89cd1ac 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt +++ b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt @@ -35,6 +35,6 @@ object DatabaseModule { ): NiaDatabase = Room.databaseBuilder( context, NiaDatabase::class.java, - "nia-database" + "nia-database", ).build() } diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt index 33a186275..83bd46967 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt +++ b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt @@ -46,7 +46,7 @@ import com.google.samples.apps.nowinandroid.core.database.util.NewsResourceTypeC AutoMigration(from = 8, to = 9), AutoMigration(from = 9, to = 10), AutoMigration(from = 10, to = 11, spec = DatabaseMigrations.Schema10to11::class), - AutoMigration(from = 11, to = 12, spec = DatabaseMigrations.Schema11to12::class) + AutoMigration(from = 11, to = 12, spec = DatabaseMigrations.Schema11to12::class), ], exportSchema = true, ) diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt index 8f02bb4a8..af0a59bce 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt +++ b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt @@ -39,7 +39,7 @@ interface NewsResourceDao { value = """ SELECT * FROM news_resources ORDER BY publish_date DESC - """ + """, ) fun getNewsResources(): Flow> @@ -53,7 +53,7 @@ interface NewsResourceDao { WHERE topic_id IN (:filterTopicIds) ) ORDER BY publish_date DESC - """ + """, ) fun getNewsResources( filterTopicIds: Set = emptySet(), @@ -79,7 +79,7 @@ interface NewsResourceDao { @Insert(onConflict = OnConflictStrategy.IGNORE) suspend fun insertOrIgnoreTopicCrossRefEntities( - newsResourceTopicCrossReferences: List + newsResourceTopicCrossReferences: List, ) /** @@ -89,7 +89,7 @@ interface NewsResourceDao { value = """ DELETE FROM news_resources WHERE id in (:ids) - """ + """, ) suspend fun deleteNewsResources(ids: List) } diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt index 9d9cde602..37724af69 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt +++ b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt @@ -34,7 +34,7 @@ interface TopicDao { value = """ SELECT * FROM topics WHERE id = :topicId - """ + """, ) fun getTopicEntity(topicId: String): Flow @@ -45,7 +45,7 @@ interface TopicDao { value = """ SELECT * FROM topics WHERE id IN (:ids) - """ + """, ) fun getTopicEntities(ids: Set): Flow> @@ -74,7 +74,7 @@ interface TopicDao { value = """ DELETE FROM topics WHERE id in (:ids) - """ + """, ) suspend fun deleteTopics(ids: List) } diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity.kt b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity.kt index 38cd3c473..a571d8f94 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity.kt +++ b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity.kt @@ -27,7 +27,7 @@ import kotlinx.datetime.Instant * Defines an NiA news resource. */ @Entity( - tableName = "news_resources" + tableName = "news_resources", ) data class NewsResourceEntity( @PrimaryKey @@ -50,5 +50,5 @@ fun NewsResourceEntity.asExternalModel() = NewsResource( headerImageUrl = headerImageUrl, publishDate = publishDate, type = type, - topics = listOf() + topics = listOf(), ) diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef.kt b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef.kt index dac2b5f0b..59bf1458f 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef.kt +++ b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef.kt @@ -32,13 +32,13 @@ import androidx.room.Index entity = NewsResourceEntity::class, parentColumns = ["id"], childColumns = ["news_resource_id"], - onDelete = ForeignKey.CASCADE + onDelete = ForeignKey.CASCADE, ), ForeignKey( entity = TopicEntity::class, parentColumns = ["id"], childColumns = ["topic_id"], - onDelete = ForeignKey.CASCADE + onDelete = ForeignKey.CASCADE, ), ], indices = [ diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource.kt b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource.kt index 6e18cc873..ec8acfb3f 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource.kt +++ b/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource.kt @@ -34,9 +34,9 @@ data class PopulatedNewsResource( value = NewsResourceTopicCrossRef::class, parentColumn = "news_resource_id", entityColumn = "topic_id", - ) + ), ) - val topics: List + val topics: List, ) fun PopulatedNewsResource.asExternalModel() = NewsResource( @@ -47,5 +47,5 @@ fun PopulatedNewsResource.asExternalModel() = NewsResource( headerImageUrl = entity.headerImageUrl, publishDate = entity.publishDate, type = entity.type, - topics = topics.map(TopicEntity::asExternalModel) + topics = topics.map(TopicEntity::asExternalModel), ) diff --git a/core/datastore-test/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt b/core/datastore-test/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt index 62b3abc34..b29728cf1 100644 --- a/core/datastore-test/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt +++ b/core/datastore-test/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt @@ -25,13 +25,13 @@ import dagger.Module import dagger.Provides import dagger.hilt.components.SingletonComponent import dagger.hilt.testing.TestInstallIn -import javax.inject.Singleton import org.junit.rules.TemporaryFolder +import javax.inject.Singleton @Module @TestInstallIn( components = [SingletonComponent::class], - replaces = [DataStoreModule::class] + replaces = [DataStoreModule::class], ) object TestDataStoreModule { @@ -39,13 +39,13 @@ object TestDataStoreModule { @Singleton fun providesUserPreferencesDataStore( userPreferencesSerializer: UserPreferencesSerializer, - tmpFolder: TemporaryFolder + tmpFolder: TemporaryFolder, ): DataStore = tmpFolder.testUserPreferencesDataStore(userPreferencesSerializer) } fun TemporaryFolder.testUserPreferencesDataStore( - userPreferencesSerializer: UserPreferencesSerializer = UserPreferencesSerializer() + userPreferencesSerializer: UserPreferencesSerializer = UserPreferencesSerializer(), ) = DataStoreFactory.create( serializer = userPreferencesSerializer, ) { diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt b/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt index cd27bb015..98632c652 100644 --- a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt +++ b/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt @@ -30,14 +30,14 @@ object IntToStringIdsMigration : DataMigration { // Migrate topic ids deprecatedFollowedTopicIds.clear() deprecatedFollowedTopicIds.addAll( - currentData.deprecatedIntFollowedTopicIdsList.map(Int::toString) + currentData.deprecatedIntFollowedTopicIdsList.map(Int::toString), ) deprecatedIntFollowedTopicIds.clear() // Migrate author ids deprecatedFollowedAuthorIds.clear() deprecatedFollowedAuthorIds.addAll( - currentData.deprecatedIntFollowedAuthorIdsList.map(Int::toString) + currentData.deprecatedIntFollowedAuthorIdsList.map(Int::toString), ) deprecatedIntFollowedAuthorIds.clear() diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt b/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt index b88b27f74..5bff23340 100644 --- a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt +++ b/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt @@ -30,21 +30,21 @@ object ListToMapMigration : DataMigration { // Migrate topic id lists followedTopicIds.clear() followedTopicIds.putAll( - currentData.deprecatedFollowedTopicIdsList.associateWith { true } + currentData.deprecatedFollowedTopicIdsList.associateWith { true }, ) deprecatedFollowedTopicIds.clear() // Migrate author ids followedAuthorIds.clear() followedAuthorIds.putAll( - currentData.deprecatedFollowedAuthorIdsList.associateWith { true } + currentData.deprecatedFollowedAuthorIdsList.associateWith { true }, ) deprecatedFollowedAuthorIds.clear() // Migrate bookmarks bookmarkedNewsResourceIds.clear() bookmarkedNewsResourceIds.putAll( - currentData.deprecatedBookmarkedNewsResourceIdsList.associateWith { true } + currentData.deprecatedBookmarkedNewsResourceIdsList.associateWith { true }, ) deprecatedBookmarkedNewsResourceIds.clear() diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt b/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt index 841ad9e2e..f5751193a 100644 --- a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt +++ b/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt @@ -21,15 +21,14 @@ import androidx.datastore.core.DataStore import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.core.model.data.UserData -import java.io.IOException -import javax.inject.Inject import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map +import java.io.IOException +import javax.inject.Inject class NiaPreferencesDataSource @Inject constructor( - private val userPreferences: DataStore + private val userPreferences: DataStore, ) { - val userData = userPreferences.data .map { UserData( @@ -39,20 +38,23 @@ class NiaPreferencesDataSource @Inject constructor( null, ThemeBrandProto.THEME_BRAND_UNSPECIFIED, ThemeBrandProto.UNRECOGNIZED, - ThemeBrandProto.THEME_BRAND_DEFAULT -> ThemeBrand.DEFAULT + ThemeBrandProto.THEME_BRAND_DEFAULT, + -> ThemeBrand.DEFAULT ThemeBrandProto.THEME_BRAND_ANDROID -> ThemeBrand.ANDROID }, darkThemeConfig = when (it.darkThemeConfig) { null, DarkThemeConfigProto.DARK_THEME_CONFIG_UNSPECIFIED, DarkThemeConfigProto.UNRECOGNIZED, - DarkThemeConfigProto.DARK_THEME_CONFIG_FOLLOW_SYSTEM -> + DarkThemeConfigProto.DARK_THEME_CONFIG_FOLLOW_SYSTEM, + -> DarkThemeConfig.FOLLOW_SYSTEM DarkThemeConfigProto.DARK_THEME_CONFIG_LIGHT -> DarkThemeConfig.LIGHT DarkThemeConfigProto.DARK_THEME_CONFIG_DARK -> DarkThemeConfig.DARK }, - shouldHideOnboarding = it.shouldHideOnboarding + useDynamicColor = it.useDynamicColor, + shouldHideOnboarding = it.shouldHideOnboarding, ) } @@ -98,6 +100,14 @@ class NiaPreferencesDataSource @Inject constructor( } } + suspend fun setDynamicColorPreference(useDynamicColor: Boolean) { + userPreferences.updateData { + it.copy { + this.useDynamicColor = useDynamicColor + } + } + } + suspend fun setDarkThemeConfig(darkThemeConfig: DarkThemeConfig) { userPreferences.updateData { it.copy { @@ -145,8 +155,8 @@ class NiaPreferencesDataSource @Inject constructor( val updatedChangeListVersions = update( ChangeListVersions( topicVersion = currentPreferences.topicChangeListVersion, - newsResourceVersion = currentPreferences.newsResourceChangeListVersion - ) + newsResourceVersion = currentPreferences.newsResourceChangeListVersion, + ), ) currentPreferences.copy { @@ -169,7 +179,6 @@ class NiaPreferencesDataSource @Inject constructor( } private fun UserPreferencesKt.Dsl.updateShouldHideOnboardingIfNecessary() { - if (followedTopicIds.isEmpty() && followedAuthorIds.isEmpty()) { shouldHideOnboarding = false } diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt b/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt index f4eb8f848..895e22307 100644 --- a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt +++ b/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt @@ -30,10 +30,10 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob +import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) @@ -44,14 +44,14 @@ object DataStoreModule { fun providesUserPreferencesDataStore( @ApplicationContext context: Context, @Dispatcher(IO) ioDispatcher: CoroutineDispatcher, - userPreferencesSerializer: UserPreferencesSerializer + userPreferencesSerializer: UserPreferencesSerializer, ): DataStore = DataStoreFactory.create( serializer = userPreferencesSerializer, scope = CoroutineScope(ioDispatcher + SupervisorJob()), migrations = listOf( IntToStringIdsMigration, - ) + ), ) { context.dataStoreFile("user_preferences.pb") } diff --git a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto b/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto index b7d33dcaf..5288c04ea 100644 --- a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto +++ b/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto @@ -45,4 +45,6 @@ message UserPreferences { DarkThemeConfigProto dark_theme_config = 17; bool should_hide_onboarding = 18; + + bool use_dynamic_color = 19; } diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt index e82f74b52..8b97cff34 100644 --- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt +++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt @@ -16,10 +16,10 @@ package com.google.samples.apps.nowinandroid.core.datastore -import kotlin.test.assertEquals -import kotlin.test.assertTrue import kotlinx.coroutines.test.runTest import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue /** * Unit test for [IntToStringIdsMigration] @@ -35,7 +35,7 @@ class IntToStringIdsMigrationTest { // Assert that there are no string topic ids yet assertEquals( emptyList(), - preMigrationUserPreferences.deprecatedFollowedTopicIdsList + preMigrationUserPreferences.deprecatedFollowedTopicIdsList, ) // Run the migration @@ -48,7 +48,7 @@ class IntToStringIdsMigrationTest { deprecatedFollowedTopicIds.addAll(listOf("1", "2", "3")) hasDoneIntToStringIdMigration = true }, - postMigrationUserPreferences + postMigrationUserPreferences, ) // Assert that the migration has been marked complete @@ -64,7 +64,7 @@ class IntToStringIdsMigrationTest { // Assert that there are no string author ids yet assertEquals( emptyList(), - preMigrationUserPreferences.deprecatedFollowedAuthorIdsList + preMigrationUserPreferences.deprecatedFollowedAuthorIdsList, ) // Run the migration @@ -77,7 +77,7 @@ class IntToStringIdsMigrationTest { deprecatedFollowedAuthorIds.addAll(listOf("4", "5", "6")) hasDoneIntToStringIdMigration = true }, - postMigrationUserPreferences + postMigrationUserPreferences, ) // Assert that the migration has been marked complete diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt index c2fdf4f55..f7e083b45 100644 --- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt +++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt @@ -16,10 +16,10 @@ package com.google.samples.apps.nowinandroid.core.datastore -import kotlin.test.assertEquals -import kotlin.test.assertTrue import kotlinx.coroutines.test.runTest import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue class ListToMapMigrationTest { @@ -32,7 +32,7 @@ class ListToMapMigrationTest { // Assert that there are no topic ids in the map yet assertEquals( emptyMap(), - preMigrationUserPreferences.followedTopicIdsMap + preMigrationUserPreferences.followedTopicIdsMap, ) // Run the migration @@ -42,7 +42,7 @@ class ListToMapMigrationTest { // Assert the deprecated topic ids have been migrated to the topic ids map assertEquals( mapOf("1" to true, "2" to true, "3" to true), - postMigrationUserPreferences.followedTopicIdsMap + postMigrationUserPreferences.followedTopicIdsMap, ) // Assert that the migration has been marked complete @@ -58,7 +58,7 @@ class ListToMapMigrationTest { // Assert that there are no author ids in the map yet assertEquals( emptyMap(), - preMigrationUserPreferences.followedAuthorIdsMap + preMigrationUserPreferences.followedAuthorIdsMap, ) // Run the migration @@ -68,7 +68,7 @@ class ListToMapMigrationTest { // Assert the deprecated author ids have been migrated to the author ids map assertEquals( mapOf("4" to true, "5" to true, "6" to true), - postMigrationUserPreferences.followedAuthorIdsMap + postMigrationUserPreferences.followedAuthorIdsMap, ) // Assert that the migration has been marked complete @@ -84,7 +84,7 @@ class ListToMapMigrationTest { // Assert that there are no bookmarks in the map yet assertEquals( emptyMap(), - preMigrationUserPreferences.bookmarkedNewsResourceIdsMap + preMigrationUserPreferences.bookmarkedNewsResourceIdsMap, ) // Run the migration @@ -94,7 +94,7 @@ class ListToMapMigrationTest { // Assert the deprecated bookmarks have been migrated to the bookmarks map assertEquals( mapOf("7" to true, "8" to true, "9" to true), - postMigrationUserPreferences.bookmarkedNewsResourceIdsMap + postMigrationUserPreferences.bookmarkedNewsResourceIdsMap, ) // Assert that the migration has been marked complete diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt index cfca4b83a..0d047d310 100644 --- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt +++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt @@ -17,14 +17,14 @@ package com.google.samples.apps.nowinandroid.core.datastore import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore -import kotlin.test.assertFalse -import kotlin.test.assertTrue import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder +import kotlin.test.assertFalse +import kotlin.test.assertTrue class NiaPreferencesDataSourceTest { private lateinit var subject: NiaPreferencesDataSource @@ -35,7 +35,7 @@ class NiaPreferencesDataSourceTest { @Before fun setup() { subject = NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore() + tmpFolder.testUserPreferencesDataStore(), ) } @@ -52,7 +52,6 @@ class NiaPreferencesDataSourceTest { @Test fun userShouldHideOnboarding_unfollowsLastTopic_shouldHideOnboardingIsFalse() = runTest { - // Given: user completes onboarding by selecting a single topic. subject.toggleFollowedTopicId("1", true) subject.setShouldHideOnboarding(true) @@ -66,7 +65,6 @@ class NiaPreferencesDataSourceTest { @Test fun userShouldHideOnboarding_unfollowsAllTopics_shouldHideOnboardingIsFalse() = runTest { - // Given: user completes onboarding by selecting several topics. subject.setFollowedTopicIds(setOf("1", "2")) subject.setShouldHideOnboarding(true) @@ -77,4 +75,15 @@ class NiaPreferencesDataSourceTest { // Then: onboarding should be shown again assertFalse(subject.userData.first().shouldHideOnboarding) } + + @Test + fun shouldUseDynamicColorFalseByDefault() = runTest { + assertFalse(subject.userData.first().useDynamicColor) + } + + @Test + fun userShouldUseDynamicColorIsTrueWhenSet() = runTest { + subject.setDynamicColorPreference(true) + assertTrue(subject.userData.first().useDynamicColor) + } } diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt index 1b10c5672..ad7664fe5 100644 --- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt +++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt @@ -17,11 +17,11 @@ package com.google.samples.apps.nowinandroid.core.datastore import androidx.datastore.core.CorruptionException +import kotlinx.coroutines.test.runTest +import org.junit.Test import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import kotlin.test.assertEquals -import kotlinx.coroutines.test.runTest -import org.junit.Test class UserPreferencesSerializerTest { private val userPreferencesSerializer = UserPreferencesSerializer() @@ -32,7 +32,7 @@ class UserPreferencesSerializerTest { userPreferences { // Default value }, - userPreferencesSerializer.defaultValue + userPreferencesSerializer.defaultValue, ) } @@ -53,7 +53,7 @@ class UserPreferencesSerializerTest { assertEquals( expectedUserPreferences, - actualUserPreferences + actualUserPreferences, ) } diff --git a/core/designsystem/build.gradle.kts b/core/designsystem/build.gradle.kts index 503ac2d19..1bcc9d65c 100644 --- a/core/designsystem/build.gradle.kts +++ b/core/designsystem/build.gradle.kts @@ -31,6 +31,7 @@ android { dependencies { implementation(libs.androidx.core.ktx) + implementation(libs.coil.kt.compose) api(libs.androidx.compose.foundation) api(libs.androidx.compose.foundation.layout) api(libs.androidx.compose.material.iconsExtended) @@ -41,4 +42,4 @@ dependencies { api(libs.androidx.compose.runtime) lintPublish(project(":lint")) androidTestImplementation(project(":core:testing")) -} \ No newline at end of file +} diff --git a/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt b/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt index bd73cd7c2..b10df053c 100644 --- a/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt +++ b/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt @@ -38,10 +38,12 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.LightAndroid import com.google.samples.apps.nowinandroid.core.designsystem.theme.LightDefaultColorScheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalBackgroundTheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors +import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalTintTheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme -import kotlin.test.assertEquals +import com.google.samples.apps.nowinandroid.core.designsystem.theme.TintTheme import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals /** * Tests [NiaTheme] using different combinations of the theme mode parameters: @@ -62,7 +64,7 @@ class ThemeTest { NiaTheme( darkTheme = false, disableDynamicTheming = true, - androidTheme = false + androidTheme = false, ) { val colorScheme = LightDefaultColorScheme assertColorSchemesEqual(colorScheme, MaterialTheme.colorScheme) @@ -70,6 +72,8 @@ class ThemeTest { assertEquals(gradientColors, LocalGradientColors.current) val backgroundTheme = defaultBackgroundTheme(colorScheme) assertEquals(backgroundTheme, LocalBackgroundTheme.current) + val tintTheme = defaultTintTheme() + assertEquals(tintTheme, LocalTintTheme.current) } } } @@ -80,7 +84,7 @@ class ThemeTest { NiaTheme( darkTheme = true, disableDynamicTheming = true, - androidTheme = false + androidTheme = false, ) { val colorScheme = DarkDefaultColorScheme assertColorSchemesEqual(colorScheme, MaterialTheme.colorScheme) @@ -88,6 +92,8 @@ class ThemeTest { assertEquals(gradientColors, LocalGradientColors.current) val backgroundTheme = defaultBackgroundTheme(colorScheme) assertEquals(backgroundTheme, LocalBackgroundTheme.current) + val tintTheme = defaultTintTheme() + assertEquals(tintTheme, LocalTintTheme.current) } } } @@ -97,7 +103,8 @@ class ThemeTest { composeTestRule.setContent { NiaTheme( darkTheme = false, - androidTheme = false + disableDynamicTheming = false, + androidTheme = false, ) { val colorScheme = dynamicLightColorSchemeWithFallback() assertColorSchemesEqual(colorScheme, MaterialTheme.colorScheme) @@ -105,6 +112,8 @@ class ThemeTest { assertEquals(gradientColors, LocalGradientColors.current) val backgroundTheme = defaultBackgroundTheme(colorScheme) assertEquals(backgroundTheme, LocalBackgroundTheme.current) + val tintTheme = dynamicTintThemeWithFallback(colorScheme) + assertEquals(tintTheme, LocalTintTheme.current) } } } @@ -114,7 +123,8 @@ class ThemeTest { composeTestRule.setContent { NiaTheme( darkTheme = true, - androidTheme = false + disableDynamicTheming = false, + androidTheme = false, ) { val colorScheme = dynamicDarkColorSchemeWithFallback() assertColorSchemesEqual(colorScheme, MaterialTheme.colorScheme) @@ -122,6 +132,8 @@ class ThemeTest { assertEquals(gradientColors, LocalGradientColors.current) val backgroundTheme = defaultBackgroundTheme(colorScheme) assertEquals(backgroundTheme, LocalBackgroundTheme.current) + val tintTheme = dynamicTintThemeWithFallback(colorScheme) + assertEquals(tintTheme, LocalTintTheme.current) } } } @@ -132,7 +144,7 @@ class ThemeTest { NiaTheme( darkTheme = false, disableDynamicTheming = true, - androidTheme = true + androidTheme = true, ) { val colorScheme = LightAndroidColorScheme assertColorSchemesEqual(colorScheme, MaterialTheme.colorScheme) @@ -140,6 +152,8 @@ class ThemeTest { assertEquals(gradientColors, LocalGradientColors.current) val backgroundTheme = LightAndroidBackgroundTheme assertEquals(backgroundTheme, LocalBackgroundTheme.current) + val tintTheme = defaultTintTheme() + assertEquals(tintTheme, LocalTintTheme.current) } } } @@ -150,7 +164,7 @@ class ThemeTest { NiaTheme( darkTheme = true, disableDynamicTheming = true, - androidTheme = true + androidTheme = true, ) { val colorScheme = DarkAndroidColorScheme assertColorSchemesEqual(colorScheme, MaterialTheme.colorScheme) @@ -158,6 +172,8 @@ class ThemeTest { assertEquals(gradientColors, LocalGradientColors.current) val backgroundTheme = DarkAndroidBackgroundTheme assertEquals(backgroundTheme, LocalBackgroundTheme.current) + val tintTheme = defaultTintTheme() + assertEquals(tintTheme, LocalTintTheme.current) } } } @@ -167,7 +183,8 @@ class ThemeTest { composeTestRule.setContent { NiaTheme( darkTheme = false, - androidTheme = true + disableDynamicTheming = false, + androidTheme = true, ) { val colorScheme = LightAndroidColorScheme assertColorSchemesEqual(colorScheme, MaterialTheme.colorScheme) @@ -175,6 +192,8 @@ class ThemeTest { assertEquals(gradientColors, LocalGradientColors.current) val backgroundTheme = LightAndroidBackgroundTheme assertEquals(backgroundTheme, LocalBackgroundTheme.current) + val tintTheme = defaultTintTheme() + assertEquals(tintTheme, LocalTintTheme.current) } } } @@ -184,7 +203,8 @@ class ThemeTest { composeTestRule.setContent { NiaTheme( darkTheme = true, - androidTheme = true + disableDynamicTheming = false, + androidTheme = true, ) { val colorScheme = DarkAndroidColorScheme assertColorSchemesEqual(colorScheme, MaterialTheme.colorScheme) @@ -192,6 +212,8 @@ class ThemeTest { assertEquals(gradientColors, LocalGradientColors.current) val backgroundTheme = DarkAndroidBackgroundTheme assertEquals(backgroundTheme, LocalBackgroundTheme.current) + val tintTheme = defaultTintTheme() + assertEquals(tintTheme, LocalTintTheme.current) } } } @@ -222,7 +244,7 @@ class ThemeTest { return GradientColors( top = colorScheme.inverseOnSurface, bottom = colorScheme.primaryContainer, - container = colorScheme.surface + container = colorScheme.surface, ) } @@ -237,16 +259,28 @@ class ThemeTest { private fun defaultBackgroundTheme(colorScheme: ColorScheme): BackgroundTheme { return BackgroundTheme( color = colorScheme.surface, - tonalElevation = 2.dp + tonalElevation = 2.dp, ) } + private fun defaultTintTheme(): TintTheme { + return TintTheme() + } + + private fun dynamicTintThemeWithFallback(colorScheme: ColorScheme): TintTheme { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + TintTheme(colorScheme.primary) + } else { + TintTheme() + } + } + /** * Workaround for the fact that the NiA design system specify all color scheme values. */ private fun assertColorSchemesEqual( expectedColorScheme: ColorScheme, - actualColorScheme: ColorScheme + actualColorScheme: ColorScheme, ) { assertEquals(expectedColorScheme.primary, actualColorScheme.primary) assertEquals(expectedColorScheme.onPrimary, actualColorScheme.onPrimary) @@ -257,7 +291,7 @@ class ThemeTest { assertEquals(expectedColorScheme.secondaryContainer, actualColorScheme.secondaryContainer) assertEquals( expectedColorScheme.onSecondaryContainer, - actualColorScheme.onSecondaryContainer + actualColorScheme.onSecondaryContainer, ) assertEquals(expectedColorScheme.tertiary, actualColorScheme.tertiary) assertEquals(expectedColorScheme.onTertiary, actualColorScheme.onTertiary) diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt index 40eae962f..9ef52dd76 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt @@ -50,7 +50,7 @@ import kotlin.math.tan @Composable fun NiaBackground( modifier: Modifier = Modifier, - content: @Composable () -> Unit + content: @Composable () -> Unit, ) { val color = LocalBackgroundTheme.current.color val tonalElevation = LocalBackgroundTheme.current.tonalElevation @@ -77,7 +77,7 @@ fun NiaBackground( fun NiaGradientBackground( modifier: Modifier = Modifier, gradientColors: GradientColors = LocalGradientColors.current, - content: @Composable () -> Unit + content: @Composable () -> Unit, ) { val currentTopColor by rememberUpdatedState(gradientColors.top) val currentBottomColor by rememberUpdatedState(gradientColors.bottom) @@ -87,7 +87,7 @@ fun NiaGradientBackground( } else { gradientColors.container }, - modifier = modifier.fillMaxSize() + modifier = modifier.fillMaxSize(), ) { Box( Modifier @@ -98,7 +98,7 @@ fun NiaGradientBackground( val offset = size.height * tan( Math .toRadians(11.06) - .toFloat() + .toFloat(), ) val start = Offset(size.width / 2 + offset / 2, 0f) @@ -132,7 +132,7 @@ fun NiaGradientBackground( drawRect(topGradient) drawRect(bottomGradient) } - } + }, ) { content() } @@ -158,7 +158,7 @@ fun BackgroundDefault() { @ThemePreviews @Composable fun BackgroundDynamic() { - NiaTheme { + NiaTheme(disableDynamicTheming = false) { NiaBackground(Modifier.size(100.dp), content = {}) } } @@ -182,7 +182,7 @@ fun GradientBackgroundDefault() { @ThemePreviews @Composable fun GradientBackgroundDynamic() { - NiaTheme { + NiaTheme(disableDynamicTheming = false) { NiaGradientBackground(Modifier.size(100.dp), content = {}) } } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt index cab6fcd2f..e4b437dfe 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt @@ -48,17 +48,17 @@ fun NiaButton( modifier: Modifier = Modifier, enabled: Boolean = true, contentPadding: PaddingValues = ButtonDefaults.ContentPadding, - content: @Composable RowScope.() -> Unit + content: @Composable RowScope.() -> Unit, ) { Button( onClick = onClick, modifier = modifier, enabled = enabled, colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.onBackground + containerColor = MaterialTheme.colorScheme.onBackground, ), contentPadding = contentPadding, - content = content + content = content, ) } @@ -78,7 +78,7 @@ fun NiaButton( modifier: Modifier = Modifier, enabled: Boolean = true, text: @Composable () -> Unit, - leadingIcon: @Composable (() -> Unit)? = null + leadingIcon: @Composable (() -> Unit)? = null, ) { NiaButton( onClick = onClick, @@ -88,11 +88,11 @@ fun NiaButton( ButtonDefaults.ButtonWithIconContentPadding } else { ButtonDefaults.ContentPadding - } + }, ) { NiaButtonContent( text = text, - leadingIcon = leadingIcon + leadingIcon = leadingIcon, ) } } @@ -114,14 +114,14 @@ fun NiaOutlinedButton( modifier: Modifier = Modifier, enabled: Boolean = true, contentPadding: PaddingValues = ButtonDefaults.ContentPadding, - content: @Composable RowScope.() -> Unit + content: @Composable RowScope.() -> Unit, ) { OutlinedButton( onClick = onClick, modifier = modifier, enabled = enabled, colors = ButtonDefaults.outlinedButtonColors( - contentColor = MaterialTheme.colorScheme.onBackground + contentColor = MaterialTheme.colorScheme.onBackground, ), border = BorderStroke( width = NiaButtonDefaults.OutlinedButtonBorderWidth, @@ -129,12 +129,12 @@ fun NiaOutlinedButton( MaterialTheme.colorScheme.outline } else { MaterialTheme.colorScheme.onSurface.copy( - alpha = NiaButtonDefaults.DisabledOutlinedButtonBorderAlpha + alpha = NiaButtonDefaults.DisabledOutlinedButtonBorderAlpha, ) - } + }, ), contentPadding = contentPadding, - content = content + content = content, ) } @@ -154,7 +154,7 @@ fun NiaOutlinedButton( modifier: Modifier = Modifier, enabled: Boolean = true, text: @Composable () -> Unit, - leadingIcon: @Composable (() -> Unit)? = null + leadingIcon: @Composable (() -> Unit)? = null, ) { NiaOutlinedButton( onClick = onClick, @@ -164,11 +164,11 @@ fun NiaOutlinedButton( ButtonDefaults.ButtonWithIconContentPadding } else { ButtonDefaults.ContentPadding - } + }, ) { NiaButtonContent( text = text, - leadingIcon = leadingIcon + leadingIcon = leadingIcon, ) } } @@ -187,16 +187,16 @@ fun NiaTextButton( onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, - content: @Composable RowScope.() -> Unit + content: @Composable RowScope.() -> Unit, ) { TextButton( onClick = onClick, modifier = modifier, enabled = enabled, colors = ButtonDefaults.textButtonColors( - contentColor = MaterialTheme.colorScheme.onBackground + contentColor = MaterialTheme.colorScheme.onBackground, ), - content = content + content = content, ) } @@ -216,16 +216,16 @@ fun NiaTextButton( modifier: Modifier = Modifier, enabled: Boolean = true, text: @Composable () -> Unit, - leadingIcon: @Composable (() -> Unit)? = null + leadingIcon: @Composable (() -> Unit)? = null, ) { NiaTextButton( onClick = onClick, modifier = modifier, - enabled = enabled + enabled = enabled, ) { NiaButtonContent( text = text, - leadingIcon = leadingIcon + leadingIcon = leadingIcon, ) } } @@ -239,7 +239,7 @@ fun NiaTextButton( @Composable private fun NiaButtonContent( text: @Composable () -> Unit, - leadingIcon: @Composable (() -> Unit)? = null + leadingIcon: @Composable (() -> Unit)? = null, ) { if (leadingIcon != null) { Box(Modifier.sizeIn(maxHeight = ButtonDefaults.IconSize)) { @@ -253,8 +253,8 @@ private fun NiaButtonContent( ButtonDefaults.IconSpacing } else { 0.dp - } - ) + }, + ), ) { text() } @@ -267,6 +267,7 @@ object NiaButtonDefaults { // TODO: File bug // OutlinedButton border color doesn't respect disabled state by default const val DisabledOutlinedButtonBorderAlpha = 0.12f + // TODO: File bug // OutlinedButton default border width isn't exposed via ButtonDefaults val OutlinedButtonBorderWidth = 1.dp diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt index 663667861..b291b3fa1 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt @@ -46,7 +46,7 @@ fun NiaFilterChip( onSelectedChange: (Boolean) -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, - label: @Composable () -> Unit + label: @Composable () -> Unit, ) { FilterChip( selected = selected, @@ -62,7 +62,7 @@ fun NiaFilterChip( { Icon( imageVector = NiaIcons.Check, - contentDescription = null + contentDescription = null, ) } } else { @@ -73,33 +73,33 @@ fun NiaFilterChip( borderColor = MaterialTheme.colorScheme.onBackground, selectedBorderColor = MaterialTheme.colorScheme.onBackground, disabledBorderColor = MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContentAlpha + alpha = NiaChipDefaults.DisabledChipContentAlpha, ), disabledSelectedBorderColor = MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContentAlpha + alpha = NiaChipDefaults.DisabledChipContentAlpha, ), - selectedBorderWidth = NiaChipDefaults.ChipBorderWidth + selectedBorderWidth = NiaChipDefaults.ChipBorderWidth, ), colors = FilterChipDefaults.filterChipColors( labelColor = MaterialTheme.colorScheme.onBackground, iconColor = MaterialTheme.colorScheme.onBackground, disabledContainerColor = if (selected) { MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContainerAlpha + alpha = NiaChipDefaults.DisabledChipContainerAlpha, ) } else { Color.Transparent }, disabledLabelColor = MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContentAlpha + alpha = NiaChipDefaults.DisabledChipContentAlpha, ), disabledLeadingIconColor = MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContentAlpha + alpha = NiaChipDefaults.DisabledChipContentAlpha, ), selectedContainerColor = MaterialTheme.colorScheme.primaryContainer, selectedLabelColor = MaterialTheme.colorScheme.onBackground, - selectedLeadingIconColor = MaterialTheme.colorScheme.onBackground - ) + selectedLeadingIconColor = MaterialTheme.colorScheme.onBackground, + ), ) } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DropdownMenu.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DropdownMenu.kt index b8d3fa837..b624ebcb6 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DropdownMenu.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DropdownMenu.kt @@ -61,7 +61,7 @@ fun NiaDropdownMenuButton( text: @Composable () -> Unit, itemText: @Composable (item: T) -> Unit, itemLeadingIcon: @Composable ((item: T) -> Unit)? = null, - itemTrailingIcon: @Composable ((item: T) -> Unit)? = null + itemTrailingIcon: @Composable ((item: T) -> Unit)? = null, ) { var expanded by remember { mutableStateOf(false) } Box(modifier = modifier) { @@ -69,7 +69,7 @@ fun NiaDropdownMenuButton( onClick = { expanded = true }, enabled = enabled, colors = ButtonDefaults.outlinedButtonColors( - contentColor = MaterialTheme.colorScheme.onBackground + contentColor = MaterialTheme.colorScheme.onBackground, ), border = BorderStroke( width = NiaDropdownMenuDefaults.DropdownMenuButtonBorderWidth, @@ -77,11 +77,11 @@ fun NiaDropdownMenuButton( MaterialTheme.colorScheme.outline } else { MaterialTheme.colorScheme.onSurface.copy( - alpha = NiaDropdownMenuDefaults.DisabledDropdownMenuButtonBorderAlpha + alpha = NiaDropdownMenuDefaults.DisabledDropdownMenuButtonBorderAlpha, ) - } + }, ), - contentPadding = NiaDropdownMenuDefaults.DropdownMenuButtonContentPadding + contentPadding = NiaDropdownMenuDefaults.DropdownMenuButtonContentPadding, ) { NiaDropdownMenuButtonContent( text = text, @@ -92,9 +92,9 @@ fun NiaDropdownMenuButton( } else { NiaIcons.ArrowDropDown }, - contentDescription = null + contentDescription = null, ) - } + }, ) } NiaDropdownMenu( @@ -105,7 +105,7 @@ fun NiaDropdownMenuButton( dismissOnItemClick = dismissOnItemClick, itemText = itemText, itemLeadingIcon = itemLeadingIcon, - itemTrailingIcon = itemTrailingIcon + itemTrailingIcon = itemTrailingIcon, ) } } @@ -129,8 +129,8 @@ private fun NiaDropdownMenuButtonContent( ButtonDefaults.IconSpacing } else { 0.dp - } - ) + }, + ), ) { ProvideTextStyle(value = MaterialTheme.typography.labelSmall) { text() @@ -166,11 +166,11 @@ fun NiaDropdownMenu( dismissOnItemClick: Boolean = true, itemText: @Composable (item: T) -> Unit, itemLeadingIcon: @Composable ((item: T) -> Unit)? = null, - itemTrailingIcon: @Composable ((item: T) -> Unit)? = null + itemTrailingIcon: @Composable ((item: T) -> Unit)? = null, ) { DropdownMenu( expanded = expanded, - onDismissRequest = onDismissRequest + onDismissRequest = onDismissRequest, ) { items.forEach { item -> DropdownMenuItem( @@ -188,7 +188,7 @@ fun NiaDropdownMenu( { itemTrailingIcon(item) } } else { null - } + }, ) } } @@ -201,9 +201,11 @@ object NiaDropdownMenuDefaults { // TODO: File bug // OutlinedButton border color doesn't respect disabled state by default const val DisabledDropdownMenuButtonBorderAlpha = 0.12f + // TODO: File bug // OutlinedButton default border width isn't exposed via ButtonDefaults val DropdownMenuButtonBorderWidth = 1.dp + // TODO: File bug // Various default button padding values aren't exposed via ButtonDefaults val DropdownMenuButtonContentPadding = @@ -211,6 +213,6 @@ object NiaDropdownMenuDefaults { start = 24.dp, top = 8.dp, end = 16.dp, - bottom = 8.dp + bottom = 8.dp, ) } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DynamicAsyncImage.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DynamicAsyncImage.kt new file mode 100644 index 000000000..e26a824af --- /dev/null +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DynamicAsyncImage.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * 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 + * + * https://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 com.google.samples.apps.nowinandroid.core.designsystem.component + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.painter.Painter +import coil.compose.AsyncImage +import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalTintTheme + +/** + * A wrapper around [AsyncImage] which determines the colorFilter based on the theme + */ +@Composable +fun DynamicAsyncImage( + imageUrl: String, + contentDescription: String?, + modifier: Modifier = Modifier, + placeholder: Painter? = null, +) { + val iconTint = LocalTintTheme.current.iconTint + AsyncImage( + placeholder = placeholder, + model = imageUrl, + contentDescription = contentDescription, + colorFilter = if (iconTint != null) ColorFilter.tint(iconTint) else null, + modifier = modifier, + ) +} diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt index 0eedf23f7..b0dda0af1 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt @@ -43,7 +43,7 @@ fun NiaIconToggleButton( modifier: Modifier = Modifier, enabled: Boolean = true, icon: @Composable () -> Unit, - checkedIcon: @Composable () -> Unit = icon + checkedIcon: @Composable () -> Unit = icon, ) { // TODO: File bug // Can't use regular IconToggleButton as it doesn't include a shape (appears square) @@ -57,12 +57,12 @@ fun NiaIconToggleButton( checkedContentColor = MaterialTheme.colorScheme.onPrimaryContainer, disabledContainerColor = if (checked) { MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaIconButtonDefaults.DisabledIconButtonContainerAlpha + alpha = NiaIconButtonDefaults.DisabledIconButtonContainerAlpha, ) } else { Color.Transparent - } - ) + }, + ), ) { if (checked) checkedIcon() else icon() } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt index c32637b69..55ff143a6 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt @@ -43,6 +43,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.drawscope.rotate import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.platform.testTag import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp @@ -52,7 +53,7 @@ import kotlinx.coroutines.launch @Composable fun NiaLoadingWheel( contentDesc: String, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { val infiniteTransition = rememberInfiniteTransition() @@ -67,8 +68,8 @@ fun NiaLoadingWheel( animationSpec = tween( durationMillis = 100, easing = FastOutSlowInEasing, - delayMillis = 40 * index - ) + delayMillis = 40 * index, + ), ) } } @@ -79,8 +80,8 @@ fun NiaLoadingWheel( initialValue = 0F, targetValue = 360F, animationSpec = infiniteRepeatable( - animation = tween(durationMillis = ROTATION_TIME, easing = LinearEasing) - ) + animation = tween(durationMillis = ROTATION_TIME, easing = LinearEasing), + ), ) // Specifies the color animation for the base-to-progress line color change @@ -97,8 +98,8 @@ fun NiaLoadingWheel( baseLineColor at ROTATION_TIME / NUM_OF_LINES with LinearEasing }, repeatMode = RepeatMode.Restart, - initialStartOffset = StartOffset(ROTATION_TIME / NUM_OF_LINES / 2 * index) - ) + initialStartOffset = StartOffset(ROTATION_TIME / NUM_OF_LINES / 2 * index), + ), ) } @@ -109,6 +110,7 @@ fun NiaLoadingWheel( .padding(8.dp) .graphicsLayer { rotationZ = rotationAnim } .semantics { contentDescription = contentDesc } + .testTag("loadingWheel"), ) { repeat(NUM_OF_LINES) { index -> rotate(degrees = index * 30f) { @@ -119,7 +121,7 @@ fun NiaLoadingWheel( strokeWidth = 4F, cap = StrokeCap.Round, start = Offset(size.width / 2, size.height / 4), - end = Offset(size.width / 2, floatAnimValues[index].value * size.height / 4) + end = Offset(size.width / 2, floatAnimValues[index].value * size.height / 4), ) } } @@ -129,7 +131,7 @@ fun NiaLoadingWheel( @Composable fun NiaOverlayLoadingWheel( contentDesc: String, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { Surface( shape = RoundedCornerShape(60.dp), diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt index 57d70642c..624cf25ac 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt @@ -54,7 +54,7 @@ fun RowScope.NiaNavigationBarItem( selectedIcon: @Composable () -> Unit = icon, enabled: Boolean = true, label: @Composable (() -> Unit)? = null, - alwaysShowLabel: Boolean = true + alwaysShowLabel: Boolean = true, ) { NavigationBarItem( selected = selected, @@ -69,8 +69,8 @@ fun RowScope.NiaNavigationBarItem( unselectedIconColor = NiaNavigationDefaults.navigationContentColor(), selectedTextColor = NiaNavigationDefaults.navigationSelectedItemColor(), unselectedTextColor = NiaNavigationDefaults.navigationContentColor(), - indicatorColor = NiaNavigationDefaults.navigationIndicatorColor() - ) + indicatorColor = NiaNavigationDefaults.navigationIndicatorColor(), + ), ) } @@ -84,13 +84,13 @@ fun RowScope.NiaNavigationBarItem( @Composable fun NiaNavigationBar( modifier: Modifier = Modifier, - content: @Composable RowScope.() -> Unit + content: @Composable RowScope.() -> Unit, ) { NavigationBar( modifier = modifier, contentColor = NiaNavigationDefaults.navigationContentColor(), tonalElevation = 0.dp, - content = content + content = content, ) } @@ -118,7 +118,7 @@ fun NiaNavigationRailItem( selectedIcon: @Composable () -> Unit = icon, enabled: Boolean = true, label: @Composable (() -> Unit)? = null, - alwaysShowLabel: Boolean = true + alwaysShowLabel: Boolean = true, ) { NavigationRailItem( selected = selected, @@ -133,8 +133,8 @@ fun NiaNavigationRailItem( unselectedIconColor = NiaNavigationDefaults.navigationContentColor(), selectedTextColor = NiaNavigationDefaults.navigationSelectedItemColor(), unselectedTextColor = NiaNavigationDefaults.navigationContentColor(), - indicatorColor = NiaNavigationDefaults.navigationIndicatorColor() - ) + indicatorColor = NiaNavigationDefaults.navigationIndicatorColor(), + ), ) } @@ -150,14 +150,14 @@ fun NiaNavigationRailItem( fun NiaNavigationRail( modifier: Modifier = Modifier, header: @Composable (ColumnScope.() -> Unit)? = null, - content: @Composable ColumnScope.() -> Unit + content: @Composable ColumnScope.() -> Unit, ) { NavigationRail( modifier = modifier, containerColor = Color.Transparent, contentColor = NiaNavigationDefaults.navigationContentColor(), header = header, - content = content + content = content, ) } @@ -167,8 +167,10 @@ fun NiaNavigationRail( object NiaNavigationDefaults { @Composable fun navigationContentColor() = MaterialTheme.colorScheme.onSurfaceVariant + @Composable fun navigationSelectedItemColor() = MaterialTheme.colorScheme.onPrimaryContainer + @Composable fun navigationIndicatorColor() = MaterialTheme.colorScheme.primaryContainer } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt index 76a0a3248..ad2f3799c 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt @@ -46,7 +46,7 @@ fun NiaTab( onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, - text: @Composable () -> Unit + text: @Composable () -> Unit, ) { Tab( selected = selected, @@ -61,9 +61,9 @@ fun NiaTab( Box(modifier = Modifier.padding(top = NiaTabDefaults.TabTopPadding)) { text() } - } + }, ) - } + }, ) } @@ -79,7 +79,7 @@ fun NiaTab( fun NiaTabRow( selectedTabIndex: Int, modifier: Modifier = Modifier, - tabs: @Composable () -> Unit + tabs: @Composable () -> Unit, ) { TabRow( selectedTabIndex = selectedTabIndex, @@ -90,10 +90,10 @@ fun NiaTabRow( TabRowDefaults.Indicator( modifier = Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex]), height = 2.dp, - color = MaterialTheme.colorScheme.onSurface + color = MaterialTheme.colorScheme.onSurface, ) }, - tabs = tabs + tabs = tabs, ) } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt index dae42421c..cf8b246bb 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt @@ -41,15 +41,14 @@ fun NiaTopicTag( text: @Composable () -> Unit, followText: @Composable () -> Unit = { Text(stringResource(R.string.follow)) }, unFollowText: @Composable () -> Unit = { Text(stringResource(R.string.unfollow)) }, - browseText: @Composable () -> Unit = { Text(stringResource(R.string.browse_topic)) } + browseText: @Composable () -> Unit = { Text(stringResource(R.string.browse_topic)) }, ) { - Box(modifier = modifier) { val containerColor = if (followed) { MaterialTheme.colorScheme.primaryContainer } else { MaterialTheme.colorScheme.surfaceVariant.copy( - alpha = NiaTagDefaults.UnfollowedTopicTagContainerAlpha + alpha = NiaTagDefaults.UnfollowedTopicTagContainerAlpha, ) } TextButton( @@ -59,9 +58,9 @@ fun NiaTopicTag( containerColor = containerColor, contentColor = contentColorFor(backgroundColor = containerColor), disabledContainerColor = MaterialTheme.colorScheme.onSurface.copy( - alpha = NiaTagDefaults.DisabledTopicTagContainerAlpha - ) - ) + alpha = NiaTagDefaults.DisabledTopicTagContainerAlpha, + ), + ), ) { ProvideTextStyle(value = MaterialTheme.typography.labelSmall) { text() @@ -84,7 +83,7 @@ fun NiaTopicTag( UNFOLLOW -> unFollowText() BROWSE -> browseText() } - } + }, ) } } @@ -94,6 +93,7 @@ fun NiaTopicTag( */ object NiaTagDefaults { const val UnfollowedTopicTagContainerAlpha = 0.5f + // TODO: File bug // Button disabled container alpha value not exposed by ButtonDefaults const val DisabledTopicTagContainerAlpha = 0.12f diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt index 5434795dd..28007a3b1 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt @@ -30,6 +30,7 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons @@ -45,7 +46,7 @@ fun NiaTopAppBar( modifier: Modifier = Modifier, colors: TopAppBarColors = TopAppBarDefaults.centerAlignedTopAppBarColors(), onNavigationClick: () -> Unit = {}, - onActionClick: () -> Unit = {} + onActionClick: () -> Unit = {}, ) { CenterAlignedTopAppBar( title = { Text(text = stringResource(id = titleRes)) }, @@ -54,7 +55,7 @@ fun NiaTopAppBar( Icon( imageVector = navigationIcon, contentDescription = navigationIconContentDescription, - tint = MaterialTheme.colorScheme.onSurface + tint = MaterialTheme.colorScheme.onSurface, ) } }, @@ -63,12 +64,12 @@ fun NiaTopAppBar( Icon( imageVector = actionIcon, contentDescription = actionIconContentDescription, - tint = MaterialTheme.colorScheme.onSurface + tint = MaterialTheme.colorScheme.onSurface, ) } }, colors = colors, - modifier = modifier + modifier = modifier.testTag("niaTopAppBar"), ) } @@ -83,7 +84,7 @@ fun NiaTopAppBar( actionIconContentDescription: String?, modifier: Modifier = Modifier, colors: TopAppBarColors = TopAppBarDefaults.centerAlignedTopAppBarColors(), - onActionClick: () -> Unit = {} + onActionClick: () -> Unit = {}, ) { CenterAlignedTopAppBar( title = { Text(text = stringResource(id = titleRes)) }, @@ -92,12 +93,12 @@ fun NiaTopAppBar( Icon( imageVector = actionIcon, contentDescription = actionIconContentDescription, - tint = MaterialTheme.colorScheme.onSurface + tint = MaterialTheme.colorScheme.onSurface, ) } }, colors = colors, - modifier = modifier, + modifier = modifier.testTag("niaTopAppBar"), ) } @@ -110,6 +111,6 @@ private fun NiaTopAppBarPreview() { navigationIcon = NiaIcons.Search, navigationIconContentDescription = "Navigation icon", actionIcon = NiaIcons.MoreVert, - actionIconContentDescription = "Action icon" + actionIconContentDescription = "Action icon", ) } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt index a6721c78c..c6ec77a92 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt @@ -49,25 +49,25 @@ fun NiaViewToggleButton( modifier: Modifier = Modifier, enabled: Boolean = true, compactText: @Composable () -> Unit, - expandedText: @Composable () -> Unit + expandedText: @Composable () -> Unit, ) { TextButton( onClick = { onExpandedChange(!expanded) }, modifier = modifier, enabled = enabled, colors = ButtonDefaults.textButtonColors( - contentColor = MaterialTheme.colorScheme.onBackground + contentColor = MaterialTheme.colorScheme.onBackground, ), - contentPadding = NiaViewToggleDefaults.ViewToggleButtonContentPadding + contentPadding = NiaViewToggleDefaults.ViewToggleButtonContentPadding, ) { NiaViewToggleButtonContent( text = if (expanded) expandedText else compactText, trailingIcon = { Icon( imageVector = if (expanded) NiaIcons.ViewDay else NiaIcons.ShortText, - contentDescription = null + contentDescription = null, ) - } + }, ) } } @@ -91,8 +91,8 @@ private fun NiaViewToggleButtonContent( ButtonDefaults.IconSpacing } else { 0.dp - } - ) + }, + ), ) { ProvideTextStyle(value = MaterialTheme.typography.labelSmall) { text() @@ -116,6 +116,6 @@ object NiaViewToggleDefaults { start = 16.dp, top = 8.dp, end = 12.dp, - bottom = 8.dp + bottom = 8.dp, ) } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Background.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Background.kt index f91e5a30d..e75758ea8 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Background.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Background.kt @@ -27,7 +27,7 @@ import androidx.compose.ui.unit.Dp @Immutable data class BackgroundTheme( val color: Color = Color.Unspecified, - val tonalElevation: Dp = Dp.Unspecified + val tonalElevation: Dp = Dp.Unspecified, ) /** diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Gradient.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Gradient.kt index f471af761..bad1c62a1 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Gradient.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Gradient.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.graphics.Color data class GradientColors( val top: Color = Color.Unspecified, val bottom: Color = Color.Unspecified, - val container: Color = Color.Unspecified + val container: Color = Color.Unspecified, ) /** diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Theme.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Theme.kt index cc405421e..582f88473 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Theme.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Theme.kt @@ -61,7 +61,7 @@ val LightDefaultColorScheme = lightColorScheme( onSurfaceVariant = PurpleGray30, inverseSurface = DarkPurpleGray20, inverseOnSurface = DarkPurpleGray95, - outline = PurpleGray50 + outline = PurpleGray50, ) /** @@ -93,7 +93,7 @@ val DarkDefaultColorScheme = darkColorScheme( onSurfaceVariant = PurpleGray80, inverseSurface = DarkPurpleGray90, inverseOnSurface = DarkPurpleGray10, - outline = PurpleGray60 + outline = PurpleGray60, ) /** @@ -125,7 +125,7 @@ val LightAndroidColorScheme = lightColorScheme( onSurfaceVariant = GreenGray30, inverseSurface = DarkGreenGray20, inverseOnSurface = DarkGreenGray95, - outline = GreenGray50 + outline = GreenGray50, ) /** @@ -157,7 +157,7 @@ val DarkAndroidColorScheme = darkColorScheme( onSurfaceVariant = GreenGray80, inverseSurface = DarkGreenGray90, inverseOnSurface = DarkGreenGray10, - outline = GreenGray60 + outline = GreenGray60, ) /** @@ -185,36 +185,16 @@ val DarkAndroidBackgroundTheme = BackgroundTheme(color = Color.Black) * * @param darkTheme Whether the theme should use a dark color scheme (follows system by default). * @param androidTheme Whether the theme should use the Android theme color scheme instead of the - * default theme. If this is `false`, then dynamic theming will be used when supported. - */ -@Composable -fun NiaTheme( - darkTheme: Boolean = isSystemInDarkTheme(), - androidTheme: Boolean = false, - content: @Composable () -> Unit -) = NiaTheme( - darkTheme = darkTheme, - androidTheme = androidTheme, - disableDynamicTheming = false, - content = content -) - -/** - * Now in Android theme. This is an internal only version, to allow disabling dynamic theming - * in tests. - * - * @param darkTheme Whether the theme should use a dark color scheme (follows system by default). - * @param androidTheme Whether the theme should use the Android theme color scheme instead of the * default theme. * @param disableDynamicTheming If `true`, disables the use of dynamic theming, even when it is * supported. This parameter has no effect if [androidTheme] is `true`. */ @Composable -internal fun NiaTheme( +fun NiaTheme( darkTheme: Boolean = isSystemInDarkTheme(), androidTheme: Boolean = false, - disableDynamicTheming: Boolean, - content: @Composable () -> Unit + disableDynamicTheming: Boolean = true, + content: @Composable () -> Unit, ) { // Color scheme val colorScheme = when { @@ -223,6 +203,7 @@ internal fun NiaTheme( val context = LocalContext.current if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) } + else -> if (darkTheme) DarkDefaultColorScheme else LightDefaultColorScheme } // Gradient colors @@ -230,7 +211,7 @@ internal fun NiaTheme( val defaultGradientColors = GradientColors( top = colorScheme.inverseOnSurface, bottom = colorScheme.primaryContainer, - container = colorScheme.surface + container = colorScheme.surface, ) val gradientColors = when { androidTheme -> if (darkTheme) DarkAndroidGradientColors else LightAndroidGradientColors @@ -240,24 +221,30 @@ internal fun NiaTheme( // Background theme val defaultBackgroundTheme = BackgroundTheme( color = colorScheme.surface, - tonalElevation = 2.dp + tonalElevation = 2.dp, ) val backgroundTheme = when { androidTheme -> if (darkTheme) DarkAndroidBackgroundTheme else LightAndroidBackgroundTheme else -> defaultBackgroundTheme } + val tintTheme = when { + androidTheme -> TintTheme() + !disableDynamicTheming && supportsDynamicTheming() -> TintTheme(colorScheme.primary) + else -> TintTheme() + } // Composition locals CompositionLocalProvider( LocalGradientColors provides gradientColors, - LocalBackgroundTheme provides backgroundTheme + LocalBackgroundTheme provides backgroundTheme, + LocalTintTheme provides tintTheme, ) { MaterialTheme( colorScheme = colorScheme, typography = NiaTypography, - content = content + content = content, ) } } @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.S) -private fun supportsDynamicTheming() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S +fun supportsDynamicTheming() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Tint.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Tint.kt new file mode 100644 index 000000000..848c8d8f5 --- /dev/null +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Tint.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * 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 + * + * https://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 com.google.samples.apps.nowinandroid.core.designsystem.theme + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Color + +/** + * A class to model background color and tonal elevation values for Now in Android. + */ +@Immutable +data class TintTheme( + val iconTint: Color? = null, +) + +/** + * A composition local for [TintTheme]. + */ +val LocalTintTheme = staticCompositionLocalOf { TintTheme() } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt index 7c9621caf..0d3b06457 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt +++ b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt @@ -29,90 +29,90 @@ internal val NiaTypography = Typography( fontWeight = FontWeight.Normal, fontSize = 57.sp, lineHeight = 64.sp, - letterSpacing = (-0.25).sp + letterSpacing = (-0.25).sp, ), displayMedium = TextStyle( fontWeight = FontWeight.Normal, fontSize = 45.sp, lineHeight = 52.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), displaySmall = TextStyle( fontWeight = FontWeight.Normal, fontSize = 36.sp, lineHeight = 44.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), headlineLarge = TextStyle( fontWeight = FontWeight.Normal, fontSize = 32.sp, lineHeight = 40.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), headlineMedium = TextStyle( fontWeight = FontWeight.Normal, fontSize = 28.sp, lineHeight = 36.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), headlineSmall = TextStyle( fontWeight = FontWeight.Normal, fontSize = 24.sp, lineHeight = 32.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), titleLarge = TextStyle( fontWeight = FontWeight.Bold, fontSize = 22.sp, lineHeight = 28.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), titleMedium = TextStyle( fontWeight = FontWeight.Bold, fontSize = 18.sp, lineHeight = 24.sp, - letterSpacing = 0.1.sp + letterSpacing = 0.1.sp, ), titleSmall = TextStyle( fontWeight = FontWeight.Medium, fontSize = 14.sp, lineHeight = 20.sp, - letterSpacing = 0.1.sp + letterSpacing = 0.1.sp, ), bodyLarge = TextStyle( fontWeight = FontWeight.Normal, fontSize = 16.sp, lineHeight = 24.sp, - letterSpacing = 0.5.sp + letterSpacing = 0.5.sp, ), bodyMedium = TextStyle( fontWeight = FontWeight.Normal, fontSize = 14.sp, lineHeight = 20.sp, - letterSpacing = 0.25.sp + letterSpacing = 0.25.sp, ), bodySmall = TextStyle( fontWeight = FontWeight.Normal, fontSize = 12.sp, lineHeight = 16.sp, - letterSpacing = 0.4.sp + letterSpacing = 0.4.sp, ), labelLarge = TextStyle( fontWeight = FontWeight.Medium, fontSize = 14.sp, lineHeight = 20.sp, - letterSpacing = 0.1.sp + letterSpacing = 0.1.sp, ), labelMedium = TextStyle( fontWeight = FontWeight.Medium, fontSize = 12.sp, lineHeight = 16.sp, - letterSpacing = 0.5.sp + letterSpacing = 0.5.sp, ), labelSmall = TextStyle( fontWeight = FontWeight.Medium, fontSize = 10.sp, lineHeight = 16.sp, - letterSpacing = 0.sp - ) + letterSpacing = 0.sp, + ), ) diff --git a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt b/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt index 2fab78d6c..ccc7e4ee1 100644 --- a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt +++ b/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt @@ -21,16 +21,16 @@ import com.google.samples.apps.nowinandroid.core.data.repository.UserDataReposit import com.google.samples.apps.nowinandroid.core.domain.TopicSortField.NAME import com.google.samples.apps.nowinandroid.core.domain.TopicSortField.NONE import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine +import javax.inject.Inject /** * A use case which obtains a list of topics with their followed state. */ class GetFollowableTopicsUseCase @Inject constructor( private val topicsRepository: TopicsRepository, - private val userDataRepository: UserDataRepository + private val userDataRepository: UserDataRepository, ) { /** * Returns a list of topics with their associated followed state. @@ -40,13 +40,13 @@ class GetFollowableTopicsUseCase @Inject constructor( operator fun invoke(sortBy: TopicSortField = NONE): Flow> { return combine( userDataRepository.userData, - topicsRepository.getTopics() + topicsRepository.getTopics(), ) { userData, topics -> val followedTopics = topics .map { topic -> FollowableTopic( topic = topic, - isFollowed = topic.id in userData.followedTopics + isFollowed = topic.id in userData.followedTopics, ) } when (sortBy) { diff --git a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCase.kt b/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCase.kt index 07cd6d856..db274bbbd 100644 --- a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCase.kt +++ b/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCase.kt @@ -22,10 +22,10 @@ import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource import com.google.samples.apps.nowinandroid.core.domain.model.mapToUserNewsResources import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.UserData -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filterNot +import javax.inject.Inject /** * A use case responsible for obtaining news resources with their associated bookmarked (also known @@ -33,7 +33,7 @@ import kotlinx.coroutines.flow.filterNot */ class GetUserNewsResourcesUseCase @Inject constructor( private val newsRepository: NewsRepository, - private val userDataRepository: UserDataRepository + private val userDataRepository: UserDataRepository, ) { /** * Returns a list of UserNewsResources which match the supplied set of topic ids. @@ -42,7 +42,7 @@ class GetUserNewsResourcesUseCase @Inject constructor( * this is empty the list of news resources will not be filtered. */ operator fun invoke( - filterTopicIds: Set = emptySet() + filterTopicIds: Set = emptySet(), ): Flow> = if (filterTopicIds.isEmpty()) { newsRepository.getNewsResources() @@ -52,7 +52,7 @@ class GetUserNewsResourcesUseCase @Inject constructor( } private fun Flow>.mapToUserNewsResources( - userDataStream: Flow + userDataStream: Flow, ): Flow> = filterNot { it.isEmpty() } .combine(userDataStream) { newsResources, userData -> diff --git a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic.kt b/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic.kt index 4071eb1aa..7b59df412 100644 --- a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic.kt +++ b/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic.kt @@ -17,27 +17,11 @@ package com.google.samples.apps.nowinandroid.core.domain.model import com.google.samples.apps.nowinandroid.core.model.data.Topic -import com.google.samples.apps.nowinandroid.core.model.data.previewTopics /** * A [topic] with the additional information for whether or not it is followed. */ data class FollowableTopic( // TODO consider changing to UserTopic and flattening val topic: Topic, - val isFollowed: Boolean -) - -val previewFollowableTopics = listOf( - FollowableTopic( - previewTopics[0], - isFollowed = false - ), - FollowableTopic( - previewTopics[1], - isFollowed = true - ), - FollowableTopic( - previewTopics[2], - isFollowed = false - ) + val isFollowed: Boolean, ) diff --git a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/model/UserNewsResource.kt b/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/model/UserNewsResource.kt index 872f93f16..4e12ec95b 100644 --- a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/model/UserNewsResource.kt +++ b/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/model/UserNewsResource.kt @@ -18,16 +18,8 @@ package com.google.samples.apps.nowinandroid.core.domain.model import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType -import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Codelab -import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Unknown -import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video import com.google.samples.apps.nowinandroid.core.model.data.UserData import kotlinx.datetime.Instant -import kotlinx.datetime.LocalDateTime -import kotlinx.datetime.TimeZone -import kotlinx.datetime.toInstant - -/* ktlint-disable max-line-length */ /** * A [NewsResource] with additional user information such as whether the user is following the @@ -42,7 +34,7 @@ data class UserNewsResource internal constructor( val publishDate: Instant, val type: NewsResourceType, val followableTopics: List, - val isSaved: Boolean + val isSaved: Boolean, ) { constructor(newsResource: NewsResource, userData: UserData) : this( id = newsResource.id, @@ -55,75 +47,13 @@ data class UserNewsResource internal constructor( followableTopics = newsResource.topics.map { topic -> FollowableTopic( topic = topic, - isFollowed = userData.followedTopics.contains(topic.id) + isFollowed = userData.followedTopics.contains(topic.id), ) }, - isSaved = userData.bookmarkedNewsResources.contains(newsResource.id) + isSaved = userData.bookmarkedNewsResources.contains(newsResource.id), ) } fun List.mapToUserNewsResources(userData: UserData): List { return map { UserNewsResource(it, userData) } } - -val previewUserNewsResources = listOf( - UserNewsResource( - id = "1", - title = "Android Basics with Compose", - content = "We released the first two units of Android Basics with Compose, our first free course that teaches Android Development with Jetpack Compose to anyone; you do not need any prior programming experience other than basic computer literacy to get started. You’ll learn the fundamentals of programming in Kotlin while building Android apps using Jetpack Compose, Android’s modern toolkit that simplifies and accelerates native UI development. These two units are just the beginning; more will be coming soon. Check out Android Basics with Compose to get started on your Android development journey", - url = "https://android-developers.googleblog.com/2022/05/new-android-basics-with-compose-course.html", - headerImageUrl = "https://developer.android.com/images/hero-assets/android-basics-compose.svg", - publishDate = LocalDateTime( - year = 2022, - monthNumber = 5, - dayOfMonth = 4, - hour = 23, - minute = 0, - second = 0, - nanosecond = 0 - ).toInstant(TimeZone.UTC), - type = Codelab, - followableTopics = listOf(previewFollowableTopics[1]), - isSaved = true - ), - UserNewsResource( - id = "2", - title = "Thanks for helping us reach 1M YouTube Subscribers", - content = "Thank you everyone for following the Now in Android series and everything the " + - "Android Developers YouTube channel has to offer. During the Android Developer " + - "Summit, our YouTube channel reached 1 million subscribers! Here’s a small video to " + - "thank you all.", - url = "https://youtu.be/-fJ6poHQrjM", - headerImageUrl = "https://i.ytimg.com/vi/-fJ6poHQrjM/maxresdefault.jpg", - publishDate = Instant.parse("2021-11-09T00:00:00.000Z"), - type = Video, - followableTopics = listOf(previewFollowableTopics[0], previewFollowableTopics[1]), - isSaved = false - ), - UserNewsResource( - id = "3", - title = "Transformations and customisations in the Paging Library", - content = "A demonstration of different operations that can be performed " + - "with Paging. Transformations like inserting separators, when to " + - "create a new pager, and customisation options for consuming " + - "PagingData.", - url = "https://youtu.be/ZARz0pjm5YM", - headerImageUrl = "https://i.ytimg.com/vi/ZARz0pjm5YM/maxresdefault.jpg", - publishDate = Instant.parse("2021-11-01T00:00:00.000Z"), - type = Video, - followableTopics = listOf(previewFollowableTopics[2]), - isSaved = false - ), - UserNewsResource( - id = "4", - title = "New Jetpack Release", - content = "New Jetpack release includes updates to libraries such as CameraX, Benchmark, and" + - "more!", - url = "https://developer.android.com/jetpack/androidx/versions/all-channel", - headerImageUrl = "", - publishDate = Instant.parse("2022-10-01T00:00:00.000Z"), - type = Unknown, - followableTopics = listOf(previewFollowableTopics[2]), - isSaved = true - ) -) diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCaseTest.kt b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCaseTest.kt index 95ab22b63..8bf63aea4 100644 --- a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCaseTest.kt +++ b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCaseTest.kt @@ -22,11 +22,11 @@ import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule -import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals class GetFollowableTopicsUseCaseTest { @@ -38,12 +38,11 @@ class GetFollowableTopicsUseCaseTest { val useCase = GetFollowableTopicsUseCase( topicsRepository, - userDataRepository + userDataRepository, ) @Test fun whenNoParams_followableTopicsAreReturnedWithNoSorting() = runTest { - // Obtain a stream of followable topics. val followableTopics = useCase() @@ -58,16 +57,15 @@ class GetFollowableTopicsUseCaseTest { FollowableTopic(testTopics[1], false), FollowableTopic(testTopics[2], true), ), - followableTopics.first() + followableTopics.first(), ) } @Test fun whenSortOrderIsByName_topicsSortedByNameAreReturned() = runTest { - // Obtain a stream of followable topics, sorted by name. val followableTopics = useCase( - sortBy = NAME + sortBy = NAME, ) // Send some test topics and their followed state. @@ -81,7 +79,7 @@ class GetFollowableTopicsUseCaseTest { .sortedBy { it.name } .map { FollowableTopic(it, false) - } + }, ) } } diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCaseTest.kt b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCaseTest.kt index fe50ecf4d..32ee8773c 100644 --- a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCaseTest.kt +++ b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCaseTest.kt @@ -24,12 +24,12 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepo import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.repository.emptyUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule -import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals class GetUserNewsResourcesUseCaseTest { @@ -43,7 +43,6 @@ class GetUserNewsResourcesUseCaseTest { @Test fun whenNoFilters_allNewsResourcesAreReturned() = runTest { - // Obtain the user news resources stream. val userNewsResources = useCase() @@ -53,7 +52,7 @@ class GetUserNewsResourcesUseCaseTest { // Construct the test user data with bookmarks and followed topics. val userData = emptyUserData.copy( bookmarkedNewsResources = setOf(sampleNewsResources[0].id, sampleNewsResources[2].id), - followedTopics = setOf(sampleTopic1.id) + followedTopics = setOf(sampleTopic1.id), ) userDataRepository.setUserData(userData) @@ -61,13 +60,12 @@ class GetUserNewsResourcesUseCaseTest { // Check that the correct news resources are returned with their bookmarked state. assertEquals( sampleNewsResources.mapToUserNewsResources(userData), - userNewsResources.first() + userNewsResources.first(), ) } @Test fun whenFilteredByTopicId_matchingNewsResourcesAreReturned() = runTest { - // Obtain a stream of user news resources for the given topic id. val userNewsResources = useCase(filterTopicIds = setOf(sampleTopic1.id)) @@ -80,7 +78,7 @@ class GetUserNewsResourcesUseCaseTest { sampleNewsResources .filter { it.topics.contains(sampleTopic1) } .mapToUserNewsResources(emptyUserData), - userNewsResources.first() + userNewsResources.first(), ) } } @@ -115,7 +113,7 @@ private val sampleNewsResources = listOf( headerImageUrl = "https://i.ytimg.com/vi/-fJ6poHQrjM/maxresdefault.jpg", publishDate = Instant.parse("2021-11-09T00:00:00.000Z"), type = Video, - topics = listOf(sampleTopic1) + topics = listOf(sampleTopic1), ), NewsResource( id = "2", @@ -127,7 +125,7 @@ private val sampleNewsResources = listOf( headerImageUrl = "https://i.ytimg.com/vi/ZARz0pjm5YM/maxresdefault.jpg", publishDate = Instant.parse("2021-11-01T00:00:00.000Z"), type = Video, - topics = listOf(sampleTopic1, sampleTopic2) + topics = listOf(sampleTopic1, sampleTopic2), ), NewsResource( id = "3", @@ -137,6 +135,6 @@ private val sampleNewsResources = listOf( headerImageUrl = "https://i.ytimg.com/vi/r5JgIyS3t3s/maxresdefault.jpg", publishDate = Instant.parse("2021-11-08T00:00:00.000Z"), type = Video, - topics = listOf(sampleTopic2) + topics = listOf(sampleTopic2), ), ) diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/UserNewsResourceTest.kt b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/UserNewsResourceTest.kt index d1ea7b569..8350c5178 100644 --- a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/UserNewsResourceTest.kt +++ b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/UserNewsResourceTest.kt @@ -38,7 +38,6 @@ class UserNewsResourceTest { */ @Test fun userNewsResourcesAreConstructedFromNewsResourcesAndUserData() { - val newsResource1 = NewsResource( id = "N1", title = "Test news title", @@ -54,7 +53,7 @@ class UserNewsResourceTest { shortDescription = "Topic 1 short description", longDescription = "Topic 1 long description", url = "Topic 1 URL", - imageUrl = "Topic 1 image URL" + imageUrl = "Topic 1 image URL", ), Topic( id = "T2", @@ -62,9 +61,9 @@ class UserNewsResourceTest { shortDescription = "Topic 2 short description", longDescription = "Topic 2 long description", url = "Topic 2 URL", - imageUrl = "Topic 2 image URL" + imageUrl = "Topic 2 image URL", ), - ) + ), ) val userData = UserData( @@ -72,7 +71,8 @@ class UserNewsResourceTest { followedTopics = setOf("T1"), themeBrand = DEFAULT, darkThemeConfig = FOLLOW_SYSTEM, - shouldHideOnboarding = true + useDynamicColor = false, + shouldHideOnboarding = true, ) val userNewsResource = UserNewsResource(newsResource1, userData) @@ -88,11 +88,10 @@ class UserNewsResourceTest { // Check that each Topic has been converted to a FollowedTopic correctly. assertEquals(newsResource1.topics.size, userNewsResource.followableTopics.size) for (topic in newsResource1.topics) { - // Construct the expected FollowableTopic. val followableTopic = FollowableTopic( topic = topic, - isFollowed = userData.followedTopics.contains(topic.id) + isFollowed = userData.followedTopics.contains(topic.id), ) assertTrue(userNewsResource.followableTopics.contains(followableTopic)) } @@ -100,7 +99,7 @@ class UserNewsResourceTest { // Check that the saved flag is set correctly. assertEquals( userData.bookmarkedNewsResources.contains(newsResource1.id), - userNewsResource.isSaved + userNewsResource.isSaved, ) } } diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt b/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt index 4f75d27ad..a1d4deb65 100644 --- a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt +++ b/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt @@ -16,15 +16,7 @@ package com.google.samples.apps.nowinandroid.core.model.data -import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Codelab -import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Unknown -import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video import kotlinx.datetime.Instant -import kotlinx.datetime.LocalDateTime -import kotlinx.datetime.TimeZone -import kotlinx.datetime.toInstant - -/* ktlint-disable max-line-length */ /** * External data layer representation of a fully populated NiA news resource @@ -37,63 +29,5 @@ data class NewsResource( val headerImageUrl: String?, val publishDate: Instant, val type: NewsResourceType, - val topics: List -) - -val previewNewsResources = listOf( - NewsResource( - id = "1", - title = "Android Basics with Compose", - content = "We released the first two units of Android Basics with Compose, our first free course that teaches Android Development with Jetpack Compose to anyone; you do not need any prior programming experience other than basic computer literacy to get started. You’ll learn the fundamentals of programming in Kotlin while building Android apps using Jetpack Compose, Android’s modern toolkit that simplifies and accelerates native UI development. These two units are just the beginning; more will be coming soon. Check out Android Basics with Compose to get started on your Android development journey", - url = "https://android-developers.googleblog.com/2022/05/new-android-basics-with-compose-course.html", - headerImageUrl = "https://developer.android.com/images/hero-assets/android-basics-compose.svg", - publishDate = LocalDateTime( - year = 2022, - monthNumber = 5, - dayOfMonth = 4, - hour = 23, - minute = 0, - second = 0, - nanosecond = 0 - ).toInstant(TimeZone.UTC), - type = Codelab, - topics = listOf(previewTopics[1]) - ), - NewsResource( - id = "2", - title = "Thanks for helping us reach 1M YouTube Subscribers", - content = "Thank you everyone for following the Now in Android series and everything the " + - "Android Developers YouTube channel has to offer. During the Android Developer " + - "Summit, our YouTube channel reached 1 million subscribers! Here’s a small video to " + - "thank you all.", - url = "https://youtu.be/-fJ6poHQrjM", - headerImageUrl = "https://i.ytimg.com/vi/-fJ6poHQrjM/maxresdefault.jpg", - publishDate = Instant.parse("2021-11-09T00:00:00.000Z"), - type = Video, - topics = listOf(previewTopics[0], previewTopics[1]) - ), - NewsResource( - id = "3", - title = "Transformations and customisations in the Paging Library", - content = "A demonstration of different operations that can be performed " + - "with Paging. Transformations like inserting separators, when to " + - "create a new pager, and customisation options for consuming " + - "PagingData.", - url = "https://youtu.be/ZARz0pjm5YM", - headerImageUrl = "https://i.ytimg.com/vi/ZARz0pjm5YM/maxresdefault.jpg", - publishDate = Instant.parse("2021-11-01T00:00:00.000Z"), - type = Video, - topics = listOf(previewTopics[2]) - ), - NewsResource( - id = "4", - title = "New Jetpack Release", - content = "New Jetpack release includes updates to libraries such as CameraX, Benchmark, and" + - "more!", - url = "https://developer.android.com/jetpack/androidx/versions/all-channel", - headerImageUrl = "", - publishDate = Instant.parse("2022-10-01T00:00:00.000Z"), - type = Unknown, - topics = listOf(previewTopics[2]) - ) + val topics: List, ) diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResourceType.kt b/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResourceType.kt index a6a175ff3..bb00f8620 100644 --- a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResourceType.kt +++ b/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResourceType.kt @@ -23,53 +23,53 @@ enum class NewsResourceType( val serializedName: String, val displayText: String, // TODO: descriptions should probably be string resources - val description: String + val description: String, ) { Video( serializedName = "Video 📺", displayText = "Video 📺", - description = "A video published on YouTube" + description = "A video published on YouTube", ), APIChange( serializedName = "API change", displayText = "API change", - description = "An addition, deprecation or change to the Android platform APIs." + description = "An addition, deprecation or change to the Android platform APIs.", ), Article( serializedName = "Article 📚", displayText = "Article 📚", - description = "An article, typically on Medium or the official Android blog" + description = "An article, typically on Medium or the official Android blog", ), Codelab( serializedName = "Codelab", displayText = "Codelab", - description = "A new or updated codelab" + description = "A new or updated codelab", ), Podcast( serializedName = "Podcast 🎙", displayText = "Podcast 🎙", - description = "A podcast" + description = "A podcast", ), Docs( serializedName = "Docs 📑", displayText = "Docs 📑", - description = "A new or updated piece of documentation" + description = "A new or updated piece of documentation", ), Event( serializedName = "Event 📆", displayText = "Event 📆", - description = "Information about a developer event e.g. Android Developer Summit" + description = "Information about a developer event e.g. Android Developer Summit", ), DAC( serializedName = "DAC", displayText = "DAC", - description = "Android version features - Information about features in an Android" + description = "Android version features - Information about features in an Android", ), Unknown( serializedName = "Unknown", displayText = "Unknown", - description = "Unknown" - ) + description = "Unknown", + ), } fun String?.asNewsResourceType() = when (this) { diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/Topic.kt b/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/Topic.kt index 16dd4e464..cc45937b6 100644 --- a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/Topic.kt +++ b/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/Topic.kt @@ -16,8 +16,6 @@ package com.google.samples.apps.nowinandroid.core.model.data -/* ktlint-disable max-line-length */ - /** * External data layer representation of a NiA Topic */ @@ -29,30 +27,3 @@ data class Topic( val url: String, val imageUrl: String, ) - -val previewTopics = listOf( - Topic( - id = "2", - name = "Headlines", - shortDescription = "News we want everyone to see", - longDescription = "Stay up to date with the latest events and announcements from Android!", - imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f", - url = "" - ), - Topic( - id = "3", - name = "UI", - shortDescription = "Material Design, Navigation, Text, Paging, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets", - longDescription = "Learn how to optimize your app's user interface - everything that users can see and interact with. Stay up to date on tocpis such as Material Design, Navigation, Text, Paging, Compose, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets, and many more!", - imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_UI.svg?alt=media&token=0ee1842b-12e8-435f-87ba-a5bb02c47594", - url = "" - ), - Topic( - id = "4", - name = "Testing", - shortDescription = "CI, Espresso, TestLab, etc", - longDescription = "Testing is an integral part of the app development process. By running tests against your app consistently, you can verify your app's correctness, functional behavior, and usability before you release it publicly. Stay up to date on the latest tricks in CI, Espresso, and Firebase TestLab.", - imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Testing.svg?alt=media&token=a11533c4-7cc8-4b11-91a3-806158ebf428", - url = "" - ), -) diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserData.kt b/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserData.kt index dcea61b5b..638b90d36 100644 --- a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserData.kt +++ b/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserData.kt @@ -24,5 +24,6 @@ data class UserData( val followedTopics: Set, val themeBrand: ThemeBrand, val darkThemeConfig: DarkThemeConfig, - val shouldHideOnboarding: Boolean + val useDynamicColor: Boolean, + val shouldHideOnboarding: Boolean, ) diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt index d6b6b987d..a272451e5 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt +++ b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt @@ -23,8 +23,8 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton import kotlinx.serialization.json.Json +import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt index 47a8ab4c4..4ffddb20a 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt +++ b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt @@ -23,12 +23,12 @@ import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream +import javax.inject.Inject /** * [NiaNetworkDataSource] implementation that provides static news resources to aid development @@ -69,7 +69,7 @@ class FakeNiaNetworkDataSource @Inject constructor( * [NetworkChangeList.id] */ private fun List.mapToChangeList( - idGetter: (T) -> String + idGetter: (T) -> String, ) = mapIndexed { index, item -> NetworkChangeList( id = idGetter(item), diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer.kt b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer.kt index f093998cf..dec73dc10 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer.kt +++ b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer.kt @@ -31,7 +31,7 @@ object InstantSerializer : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor( serialName = "Instant", - kind = STRING + kind = STRING, ) override fun serialize(encoder: Encoder, value: Instant) = diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer.kt b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer.kt index 4100a956c..ac40d6182 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer.kt +++ b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer.kt @@ -31,7 +31,7 @@ object NewsResourceTypeSerializer : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor( serialName = "type", - kind = STRING + kind = STRING, ) override fun serialize(encoder: Encoder, value: NewsResourceType) = diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt index e380c05cc..6b59f16e3 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt +++ b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt @@ -22,8 +22,6 @@ import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory -import javax.inject.Inject -import javax.inject.Singleton import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json @@ -33,6 +31,8 @@ import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.http.GET import retrofit2.http.Query +import javax.inject.Inject +import javax.inject.Singleton /** * Retrofit API declaration for NIA Network API @@ -66,7 +66,7 @@ private const val NiaBaseUrl = BuildConfig.BACKEND_URL */ @Serializable private data class NetworkResponse( - val data: T + val data: T, ) /** @@ -74,7 +74,7 @@ private data class NetworkResponse( */ @Singleton class RetrofitNiaNetwork @Inject constructor( - networkJson: Json + networkJson: Json, ) : NiaNetworkDataSource { private val networkApi = Retrofit.Builder() @@ -85,13 +85,13 @@ class RetrofitNiaNetwork @Inject constructor( // TODO: Decide logging logic HttpLoggingInterceptor().apply { setLevel(HttpLoggingInterceptor.Level.BODY) - } + }, ) - .build() + .build(), ) .addConverterFactory( @OptIn(ExperimentalSerializationApi::class) - networkJson.asConverterFactory("application/json".toMediaType()) + networkJson.asConverterFactory("application/json".toMediaType()), ) .build() .create(RetrofitNiaNetworkApi::class.java) diff --git a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt index 48eb4746b..f54351750 100644 --- a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt +++ b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt @@ -20,7 +20,6 @@ import JvmUnitTestFakeAssetManager import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Codelab import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import kotlin.test.assertEquals import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.runTest import kotlinx.datetime.LocalDateTime @@ -29,6 +28,7 @@ import kotlinx.datetime.toInstant import kotlinx.serialization.json.Json import org.junit.Before import org.junit.Test +import kotlin.test.assertEquals class FakeNiaNetworkDataSourceTest { @@ -41,7 +41,7 @@ class FakeNiaNetworkDataSourceTest { subject = FakeNiaNetworkDataSource( ioDispatcher = testDispatcher, networkJson = Json { ignoreUnknownKeys = true }, - assets = JvmUnitTestFakeAssetManager + assets = JvmUnitTestFakeAssetManager, ) } @@ -55,10 +55,10 @@ class FakeNiaNetworkDataSourceTest { shortDescription = "News you'll definitely be interested in", longDescription = "The latest events and announcements from the world of Android development.", url = "", - imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f" + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f", ), /* ktlint-enable max-line-length */ - subject.getTopics().first() + subject.getTopics().first(), ) } @@ -79,13 +79,13 @@ class FakeNiaNetworkDataSourceTest { hour = 23, minute = 0, second = 0, - nanosecond = 0 + nanosecond = 0, ).toInstant(TimeZone.UTC), type = Codelab, topics = listOf("2", "3", "10"), ), /* ktlint-enable max-line-length */ - subject.getNewsResources().find { it.id == "125" } + subject.getNewsResources().find { it.id == "125" }, ) } } diff --git a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt index 191501a3d..16ac7df26 100644 --- a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt +++ b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt @@ -17,9 +17,9 @@ package com.google.samples.apps.nowinandroid.core.network.model.util import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType -import kotlin.test.assertEquals import kotlinx.serialization.json.Json import org.junit.Test +import kotlin.test.assertEquals class NewsResourceTypeSerializerTest { @@ -27,7 +27,7 @@ class NewsResourceTypeSerializerTest { fun test_news_resource_serializer_video() { assertEquals( NewsResourceType.Video, - Json.decodeFromString(NewsResourceTypeSerializer, """"Video 📺"""") + Json.decodeFromString(NewsResourceTypeSerializer, """"Video 📺""""), ) } @@ -35,7 +35,7 @@ class NewsResourceTypeSerializerTest { fun test_news_resource_serializer_article() { assertEquals( NewsResourceType.Article, - Json.decodeFromString(NewsResourceTypeSerializer, """"Article 📚"""") + Json.decodeFromString(NewsResourceTypeSerializer, """"Article 📚""""), ) } @@ -43,7 +43,7 @@ class NewsResourceTypeSerializerTest { fun test_news_resource_serializer_api_change() { assertEquals( NewsResourceType.APIChange, - Json.decodeFromString(NewsResourceTypeSerializer, """"API change"""") + Json.decodeFromString(NewsResourceTypeSerializer, """"API change""""), ) } @@ -51,7 +51,7 @@ class NewsResourceTypeSerializerTest { fun test_news_resource_serializer_codelab() { assertEquals( NewsResourceType.Codelab, - Json.decodeFromString(NewsResourceTypeSerializer, """"Codelab"""") + Json.decodeFromString(NewsResourceTypeSerializer, """"Codelab""""), ) } @@ -59,7 +59,7 @@ class NewsResourceTypeSerializerTest { fun test_news_resource_serializer_podcast() { assertEquals( NewsResourceType.Podcast, - Json.decodeFromString(NewsResourceTypeSerializer, """"Podcast 🎙"""") + Json.decodeFromString(NewsResourceTypeSerializer, """"Podcast 🎙""""), ) } @@ -67,7 +67,7 @@ class NewsResourceTypeSerializerTest { fun test_news_resource_serializer_docs() { assertEquals( NewsResourceType.Docs, - Json.decodeFromString(NewsResourceTypeSerializer, """"Docs 📑"""") + Json.decodeFromString(NewsResourceTypeSerializer, """"Docs 📑""""), ) } @@ -75,7 +75,7 @@ class NewsResourceTypeSerializerTest { fun test_news_resource_serializer_event() { assertEquals( NewsResourceType.Event, - Json.decodeFromString(NewsResourceTypeSerializer, """"Event 📆"""") + Json.decodeFromString(NewsResourceTypeSerializer, """"Event 📆""""), ) } @@ -83,7 +83,7 @@ class NewsResourceTypeSerializerTest { fun test_news_resource_serializer_dac() { assertEquals( NewsResourceType.DAC, - Json.decodeFromString(NewsResourceTypeSerializer, """"DAC"""") + Json.decodeFromString(NewsResourceTypeSerializer, """"DAC""""), ) } @@ -91,7 +91,7 @@ class NewsResourceTypeSerializerTest { fun test_news_resource_serializer_unknown() { assertEquals( NewsResourceType.Unknown, - Json.decodeFromString(NewsResourceTypeSerializer, """"umm"""") + Json.decodeFromString(NewsResourceTypeSerializer, """"umm""""), ) } @@ -100,7 +100,7 @@ class NewsResourceTypeSerializerTest { val json = Json.encodeToString(NewsResourceTypeSerializer, NewsResourceType.Video) assertEquals( NewsResourceType.Video, - Json.decodeFromString(NewsResourceTypeSerializer, json) + Json.decodeFromString(NewsResourceTypeSerializer, json), ) } } diff --git a/core/testing/build.gradle.kts b/core/testing/build.gradle.kts index 5c5740eee..5e0c3e409 100644 --- a/core/testing/build.gradle.kts +++ b/core/testing/build.gradle.kts @@ -26,8 +26,11 @@ android { dependencies { implementation(project(":core:common")) implementation(project(":core:data")) + implementation(project(":core:domain")) implementation(project(":core:model")) + implementation(libs.kotlinx.datetime) + api(libs.junit4) api(libs.androidx.test.core) api(libs.kotlinx.coroutines.test) diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/FollowableTopicTestData.kt b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/FollowableTopicTestData.kt new file mode 100644 index 000000000..40e9327d3 --- /dev/null +++ b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/FollowableTopicTestData.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * 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 + * + * https://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 com.google.samples.apps.nowinandroid.core.testing.data + +import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic +import com.google.samples.apps.nowinandroid.core.model.data.Topic + +/* ktlint-disable max-line-length */ +val followableTopicTestData: List = listOf( + FollowableTopic( + topic = Topic( + id = "2", + name = "Headlines", + shortDescription = "News we want everyone to see", + longDescription = "Stay up to date with the latest events and announcements from Android!", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f", + url = "", + ), + isFollowed = false, + ), + FollowableTopic( + topic = Topic( + id = "3", + name = "UI", + shortDescription = "Material Design, Navigation, Text, Paging, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets", + longDescription = "Learn how to optimize your app's user interface - everything that users can see and interact with. Stay up to date on tocpis such as Material Design, Navigation, Text, Paging, Compose, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets, and many more!", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_UI.svg?alt=media&token=0ee1842b-12e8-435f-87ba-a5bb02c47594", + url = "", + ), + isFollowed = true, + ), + FollowableTopic( + topic = Topic( + id = "4", + name = "Testing", + shortDescription = "CI, Espresso, TestLab, etc", + longDescription = "Testing is an integral part of the app development process. By running tests against your app consistently, you can verify your app's correctness, functional behavior, and usability before you release it publicly. Stay up to date on the latest tricks in CI, Espresso, and Firebase TestLab.", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Testing.svg?alt=media&token=a11533c4-7cc8-4b11-91a3-806158ebf428", + url = "", + ), + isFollowed = false, + ), +) diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/NewsResourcesTestData.kt b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/NewsResourcesTestData.kt new file mode 100644 index 000000000..bffa7cb79 --- /dev/null +++ b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/NewsResourcesTestData.kt @@ -0,0 +1,74 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * 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 + * + * https://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 com.google.samples.apps.nowinandroid.core.testing.data + +import com.google.samples.apps.nowinandroid.core.model.data.NewsResource +import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Codelab +import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Unknown +import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video +import kotlinx.datetime.Instant + +/* ktlint-disable max-line-length */ +val newsResourcesTestData: List = listOf( + NewsResource( + id = "1", + title = "Android Basics with Compose", + content = "We released the first two units of Android Basics with Compose, our first free course that teaches Android Development with Jetpack Compose to anyone; you do not need any prior programming experience other than basic computer literacy to get started. You’ll learn the fundamentals of programming in Kotlin while building Android apps using Jetpack Compose, Android’s modern toolkit that simplifies and accelerates native UI development. These two units are just the beginning; more will be coming soon. Check out Android Basics with Compose to get started on your Android development journey", + url = "https://android-developers.googleblog.com/2022/05/new-android-basics-with-compose-course.html", + headerImageUrl = "https://developer.android.com/images/hero-assets/android-basics-compose.svg", + publishDate = Instant.parse("2021-11-09T00:00:00.000Z"), + type = Codelab, + topics = listOf(topicsTestData[1]), + ), + NewsResource( + id = "2", + title = "Thanks for helping us reach 1M YouTube Subscribers", + content = "Thank you everyone for following the Now in Android series and everything the " + + "Android Developers YouTube channel has to offer. During the Android Developer " + + "Summit, our YouTube channel reached 1 million subscribers! Here’s a small video to " + + "thank you all.", + url = "https://youtu.be/-fJ6poHQrjM", + headerImageUrl = "https://i.ytimg.com/vi/-fJ6poHQrjM/maxresdefault.jpg", + publishDate = Instant.parse("2021-11-09T00:00:00.000Z"), + type = Video, + topics = listOf(topicsTestData[0], topicsTestData[1]), + ), + NewsResource( + id = "3", + title = "Transformations and customisations in the Paging Library", + content = "A demonstration of different operations that can be performed " + + "with Paging. Transformations like inserting separators, when to " + + "create a new pager, and customisation options for consuming " + + "PagingData.", + url = "https://youtu.be/ZARz0pjm5YM", + headerImageUrl = "https://i.ytimg.com/vi/ZARz0pjm5YM/maxresdefault.jpg", + publishDate = Instant.parse("2021-11-01T00:00:00.000Z"), + type = Video, + topics = listOf(topicsTestData[2]), + ), + NewsResource( + id = "4", + title = "New Jetpack Release", + content = "New Jetpack release includes updates to libraries such as CameraX, Benchmark, and" + + "more!", + url = "https://developer.android.com/jetpack/androidx/versions/all-channel", + headerImageUrl = "", + publishDate = Instant.parse("2022-10-01T00:00:00.000Z"), + type = Unknown, + topics = listOf(topicsTestData[2]), + ), +) diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/TopicsTestData.kt b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/TopicsTestData.kt new file mode 100644 index 000000000..eb0bd9e61 --- /dev/null +++ b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/TopicsTestData.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * 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 + * + * https://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 com.google.samples.apps.nowinandroid.core.testing.data + +import com.google.samples.apps.nowinandroid.core.model.data.Topic + +/* ktlint-disable max-line-length */ +val topicsTestData: List = listOf( + Topic( + id = "2", + name = "Headlines", + shortDescription = "News we want everyone to see", + longDescription = "Stay up to date with the latest events and announcements from Android!", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f", + url = "", + ), + Topic( + id = "3", + name = "UI", + shortDescription = "Material Design, Navigation, Text, Paging, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets", + longDescription = "Learn how to optimize your app's user interface - everything that users can see and interact with. Stay up to date on tocpis such as Material Design, Navigation, Text, Paging, Compose, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets, and many more!", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_UI.svg?alt=media&token=0ee1842b-12e8-435f-87ba-a5bb02c47594", + url = "", + ), + Topic( + id = "4", + name = "Testing", + shortDescription = "CI, Espresso, TestLab, etc", + longDescription = "Testing is an integral part of the app development process. By running tests against your app consistently, you can verify your app's correctness, functional behavior, and usability before you release it publicly. Stay up to date on the latest tricks in CI, Espresso, and Firebase TestLab.", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Testing.svg?alt=media&token=a11533c4-7cc8-4b11-91a3-806158ebf428", + url = "", + ), +) diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/UserNewsResourcesTestData.kt b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/UserNewsResourcesTestData.kt new file mode 100644 index 000000000..381160006 --- /dev/null +++ b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/UserNewsResourcesTestData.kt @@ -0,0 +1,108 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * 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 + * + * https://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 com.google.samples.apps.nowinandroid.core.testing.data + +import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource +import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig +import com.google.samples.apps.nowinandroid.core.model.data.NewsResource +import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType +import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand +import com.google.samples.apps.nowinandroid.core.model.data.UserData +import kotlinx.datetime.Instant +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toInstant + +/* ktlint-disable max-line-length */ +val userNewsResourcesTestData: List = UserData( + bookmarkedNewsResources = setOf("1", "4"), + followedTopics = emptySet(), + themeBrand = ThemeBrand.ANDROID, + darkThemeConfig = DarkThemeConfig.DARK, + shouldHideOnboarding = true, + useDynamicColor = false, +).let { userData -> + listOf( + UserNewsResource( + newsResource = NewsResource( + id = "1", + title = "Android Basics with Compose", + content = "We released the first two units of Android Basics with Compose, our first free course that teaches Android Development with Jetpack Compose to anyone; you do not need any prior programming experience other than basic computer literacy to get started. You’ll learn the fundamentals of programming in Kotlin while building Android apps using Jetpack Compose, Android’s modern toolkit that simplifies and accelerates native UI development. These two units are just the beginning; more will be coming soon. Check out Android Basics with Compose to get started on your Android development journey", + url = "https://android-developers.googleblog.com/2022/05/new-android-basics-with-compose-course.html", + headerImageUrl = "https://developer.android.com/images/hero-assets/android-basics-compose.svg", + publishDate = LocalDateTime( + year = 2022, + monthNumber = 5, + dayOfMonth = 4, + hour = 23, + minute = 0, + second = 0, + nanosecond = 0, + ).toInstant(TimeZone.UTC), + type = NewsResourceType.Codelab, + topics = listOf(topicsTestData[2]), + ), + userData = userData, + ), + UserNewsResource( + newsResource = NewsResource( + id = "2", + title = "Thanks for helping us reach 1M YouTube Subscribers", + content = "Thank you everyone for following the Now in Android series and everything the " + + "Android Developers YouTube channel has to offer. During the Android Developer " + + "Summit, our YouTube channel reached 1 million subscribers! Here’s a small video to " + + "thank you all.", + url = "https://youtu.be/-fJ6poHQrjM", + headerImageUrl = "https://i.ytimg.com/vi/-fJ6poHQrjM/maxresdefault.jpg", + publishDate = Instant.parse("2021-11-09T00:00:00.000Z"), + type = NewsResourceType.Video, + topics = topicsTestData.take(2), + ), + userData = userData, + ), + UserNewsResource( + newsResource = NewsResource( + id = "3", + title = "Transformations and customisations in the Paging Library", + content = "A demonstration of different operations that can be performed " + + "with Paging. Transformations like inserting separators, when to " + + "create a new pager, and customisation options for consuming " + + "PagingData.", + url = "https://youtu.be/ZARz0pjm5YM", + headerImageUrl = "https://i.ytimg.com/vi/ZARz0pjm5YM/maxresdefault.jpg", + publishDate = Instant.parse("2021-11-01T00:00:00.000Z"), + type = NewsResourceType.Video, + topics = listOf(topicsTestData[2]), + ), + userData = userData, + ), + UserNewsResource( + newsResource = NewsResource( + id = "4", + title = "New Jetpack Release", + content = "New Jetpack release includes updates to libraries such as CameraX, Benchmark, and" + + "more!", + url = "https://developer.android.com/jetpack/androidx/versions/all-channel", + headerImageUrl = "", + publishDate = Instant.parse("2022-10-01T00:00:00.000Z"), + type = NewsResourceType.Unknown, + topics = listOf(topicsTestData[2]), + ), + userData = userData, + ), + ) +} diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt index d0af32893..66d52dabe 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt +++ b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt @@ -20,9 +20,9 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton import kotlinx.coroutines.test.TestDispatcher import kotlinx.coroutines.test.UnconfinedTestDispatcher +import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt index 8dba1bfc7..e1b86cd63 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt +++ b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt @@ -30,7 +30,8 @@ val emptyUserData = UserData( followedTopics = emptySet(), themeBrand = ThemeBrand.DEFAULT, darkThemeConfig = DarkThemeConfig.FOLLOW_SYSTEM, - shouldHideOnboarding = false + useDynamicColor = false, + shouldHideOnboarding = false, ) class TestUserDataRepository : UserDataRepository { @@ -49,8 +50,11 @@ class TestUserDataRepository : UserDataRepository { override suspend fun toggleFollowedTopicId(followedTopicId: String, followed: Boolean) { currentUserData.let { current -> - val followedTopics = if (followed) current.followedTopics + followedTopicId - else current.followedTopics - followedTopicId + val followedTopics = if (followed) { + current.followedTopics + followedTopicId + } else { + current.followedTopics - followedTopicId + } _userData.tryEmit(current.copy(followedTopics = followedTopics)) } @@ -58,8 +62,11 @@ class TestUserDataRepository : UserDataRepository { override suspend fun updateNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { currentUserData.let { current -> - val bookmarkedNews = if (bookmarked) current.bookmarkedNewsResources + newsResourceId - else current.bookmarkedNewsResources - newsResourceId + val bookmarkedNews = if (bookmarked) { + current.bookmarkedNewsResources + newsResourceId + } else { + current.bookmarkedNewsResources - newsResourceId + } _userData.tryEmit(current.copy(bookmarkedNewsResources = bookmarkedNews)) } @@ -77,6 +84,12 @@ class TestUserDataRepository : UserDataRepository { } } + override suspend fun setDynamicColorPreference(useDynamicColor: Boolean) { + currentUserData.let { current -> + _userData.tryEmit(current.copy(useDynamicColor = useDynamicColor)) + } + } + override suspend fun setShouldHideOnboarding(shouldHideOnboarding: Boolean) { currentUserData.let { current -> _userData.tryEmit(current.copy(shouldHideOnboarding = shouldHideOnboarding)) diff --git a/core/ui/src/androidTest/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt b/core/ui/src/androidTest/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt index 6fbe0b0e4..927ccfa28 100644 --- a/core/ui/src/androidTest/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt +++ b/core/ui/src/androidTest/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt @@ -21,8 +21,8 @@ import androidx.compose.ui.test.assertContentDescriptionEquals import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onNodeWithText -import com.google.samples.apps.nowinandroid.core.domain.model.previewFollowableTopics -import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources +import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData +import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData import org.junit.Rule import org.junit.Test @@ -32,7 +32,7 @@ class NewsResourceCardTest { @Test fun testMetaDataDisplay_withCodelabResource() { - val newsWithKnownResourceType = previewUserNewsResources[0] + val newsWithKnownResourceType = userNewsResourcesTestData[0] var dateFormatted = "" composeTestRule.setContent { @@ -40,7 +40,7 @@ class NewsResourceCardTest { userNewsResource = newsWithKnownResourceType, isBookmarked = false, onToggleBookmark = {}, - onClick = {} + onClick = {}, ) dateFormatted = dateFormatted(publishDate = newsWithKnownResourceType.publishDate) @@ -51,15 +51,15 @@ class NewsResourceCardTest { composeTestRule.activity.getString( R.string.card_meta_data_text, dateFormatted, - newsWithKnownResourceType.type.displayText - ) + newsWithKnownResourceType.type.displayText, + ), ) .assertExists() } @Test fun testMetaDataDisplay_withUnknownResource() { - val newsWithUnknownResourceType = previewUserNewsResources[3] + val newsWithUnknownResourceType = userNewsResourcesTestData[3] var dateFormatted = "" composeTestRule.setContent { @@ -67,7 +67,7 @@ class NewsResourceCardTest { userNewsResource = newsWithUnknownResourceType, isBookmarked = false, onToggleBookmark = {}, - onClick = {} + onClick = {}, ) dateFormatted = dateFormatted(publishDate = newsWithUnknownResourceType.publishDate) @@ -81,10 +81,10 @@ class NewsResourceCardTest { @Test fun testTopicsChipColorBackground_matchesFollowedState() { composeTestRule.setContent { - NewsResourceTopics(topics = previewFollowableTopics) + NewsResourceTopics(topics = followableTopicTestData) } - for (followableTopic in previewFollowableTopics) { + for (followableTopic in followableTopicTestData) { val topicName = followableTopic.topic.name val expectedContentDescription = if (followableTopic.isFollowed) { "$topicName is followed" diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/FollowableTopicPreviewParameterProvider.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/FollowableTopicPreviewParameterProvider.kt new file mode 100644 index 000000000..3c83b973c --- /dev/null +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/FollowableTopicPreviewParameterProvider.kt @@ -0,0 +1,67 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * 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 + * + * https://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 com.google.samples.apps.nowinandroid.core.ui + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic +import com.google.samples.apps.nowinandroid.core.model.data.Topic + +/* ktlint-disable max-line-length */ +/** + * This [PreviewParameterProvider](https://developer.android.com/reference/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterProvider) + * provides list of [FollowableTopic] for Composable previews. + */ +class FollowableTopicPreviewParameterProvider : PreviewParameterProvider> { + override val values: Sequence> + get() = sequenceOf( + listOf( + FollowableTopic( + topic = Topic( + id = "2", + name = "Headlines", + shortDescription = "News we want everyone to see", + longDescription = "Stay up to date with the latest events and announcements from Android!", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f", + url = "", + ), + isFollowed = false, + ), + FollowableTopic( + topic = Topic( + id = "3", + name = "UI", + shortDescription = "Material Design, Navigation, Text, Paging, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets", + longDescription = "Learn how to optimize your app's user interface - everything that users can see and interact with. Stay up to date on tocpis such as Material Design, Navigation, Text, Paging, Compose, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets, and many more!", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_UI.svg?alt=media&token=0ee1842b-12e8-435f-87ba-a5bb02c47594", + url = "", + ), + isFollowed = true, + ), + FollowableTopic( + topic = Topic( + id = "4", + name = "Testing", + shortDescription = "CI, Espresso, TestLab, etc", + longDescription = "Testing is an integral part of the app development process. By running tests against your app consistently, you can verify your app's correctness, functional behavior, and usability before you release it publicly. Stay up to date on the latest tricks in CI, Espresso, and Firebase TestLab.", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Testing.svg?alt=media&token=a11533c4-7cc8-4b11-91a3-806158ebf428", + url = "", + ), + isFollowed = false, + ), + ), + ) +} diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt index d4ca9180d..c9fee1ac8 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt @@ -51,7 +51,7 @@ fun rememberMetricsStateHolder(): Holder { @Composable fun TrackJank( vararg keys: Any?, - reportMetric: suspend CoroutineScope.(state: Holder) -> Unit + reportMetric: suspend CoroutineScope.(state: Holder) -> Unit, ) { val metrics = rememberMetricsStateHolder() LaunchedEffect(metrics, *keys) { @@ -66,7 +66,7 @@ fun TrackJank( @Composable fun TrackDisposableJank( vararg keys: Any?, - reportMetric: DisposableEffectScope.(state: Holder) -> DisposableEffectResult + reportMetric: DisposableEffectScope.(state: Holder) -> DisposableEffectResult, ) { val metrics = rememberMetricsStateHolder() DisposableEffect(metrics, *keys) { diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt index 44c810a36..73c1a21e4 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt @@ -35,10 +35,10 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Devices import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource -import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources /** * An extension on [LazyListScope] defining a feed with news resources. @@ -46,7 +46,7 @@ import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsRes */ fun LazyGridScope.newsFeed( feedState: NewsFeedUiState, - onNewsResourcesCheckedChanged: (String, Boolean) -> Unit + onNewsResourcesCheckedChanged: (String, Boolean) -> Unit, ) { when (feedState) { NewsFeedUiState.Loading -> Unit @@ -65,9 +65,9 @@ fun LazyGridScope.newsFeed( onToggleBookmark = { onNewsResourcesCheckedChanged( userNewsResource.id, - !userNewsResource.isSaved + !userNewsResource.isSaved, ) - } + }, ) } } @@ -100,7 +100,7 @@ sealed interface NewsFeedUiState { /** * The list of news resources contained in this feed. */ - val feed: List + val feed: List, ) : NewsFeedUiState } @@ -111,7 +111,7 @@ private fun NewsFeedLoadingPreview() { LazyVerticalGrid(columns = GridCells.Adaptive(300.dp)) { newsFeed( feedState = NewsFeedUiState.Loading, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } @@ -120,14 +120,15 @@ private fun NewsFeedLoadingPreview() { @Preview @Preview(device = Devices.TABLET) @Composable -private fun NewsFeedContentPreview() { +private fun NewsFeedContentPreview( + @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) + userNewsResources: List, +) { NiaTheme { LazyVerticalGrid(columns = GridCells.Adaptive(300.dp)) { newsFeed( - feedState = NewsFeedUiState.Success( - previewUserNewsResources - ), - onNewsResourcesCheckedChanged = { _, _ -> } + feedState = NewsFeedUiState.Success(userNewsResources), + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt index 76657067e..ae6cadbfa 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt @@ -50,23 +50,23 @@ import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.onClick import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import coil.compose.AsyncImage -import com.google.samples.apps.nowinandroid.core.designsystem.R as DesignsystemR import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaIconToggleButton import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopicTag import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource -import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType +import kotlinx.datetime.Instant +import kotlinx.datetime.toJavaInstant import java.time.ZoneId import java.time.format.DateTimeFormatter import java.util.Locale -import kotlinx.datetime.Instant -import kotlinx.datetime.toJavaInstant +import com.google.samples.apps.nowinandroid.core.designsystem.R as DesignsystemR /** * [NewsResource] card used on the following screens: For You, Saved @@ -79,7 +79,7 @@ fun NewsResourceCardExpanded( isBookmarked: Boolean, onToggleBookmark: () -> Unit, onClick: () -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { val clickActionLabel = stringResource(R.string.card_tap_action) Card( @@ -90,7 +90,7 @@ fun NewsResourceCardExpanded( // Pass null for action to only override the label and not the actual action. modifier = modifier.semantics { onClick(label = clickActionLabel, action = null) - } + }, ) { Column { if (!userNewsResource.headerImageUrl.isNullOrEmpty()) { @@ -99,14 +99,14 @@ fun NewsResourceCardExpanded( } } Box( - modifier = Modifier.padding(16.dp) + modifier = Modifier.padding(16.dp), ) { Column { Spacer(modifier = Modifier.height(12.dp)) Row { NewsResourceTitle( userNewsResource.title, - modifier = Modifier.fillMaxWidth((.8f)) + modifier = Modifier.fillMaxWidth((.8f)), ) Spacer(modifier = Modifier.weight(1f)) BookmarkButton(isBookmarked, onToggleBookmark) @@ -125,7 +125,7 @@ fun NewsResourceCardExpanded( @Composable fun NewsResourceHeaderImage( - headerImageUrl: String? + headerImageUrl: String?, ) { AsyncImage( placeholder = if (LocalInspectionMode.current) { @@ -140,14 +140,14 @@ fun NewsResourceHeaderImage( contentScale = ContentScale.Crop, model = headerImageUrl, // TODO b/226661685: Investigate using alt text of image to populate content description - contentDescription = null // decorative image + contentDescription = null, // decorative image ) } @Composable fun NewsResourceTitle( newsResourceTitle: String, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { Text(newsResourceTitle, style = MaterialTheme.typography.headlineSmall, modifier = modifier) } @@ -156,7 +156,7 @@ fun NewsResourceTitle( fun BookmarkButton( isBookmarked: Boolean, onClick: () -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { NiaIconToggleButton( checked = isBookmarked, @@ -165,15 +165,15 @@ fun BookmarkButton( icon = { Icon( painter = painterResource(NiaIcons.BookmarkBorder), - contentDescription = stringResource(R.string.bookmark) + contentDescription = stringResource(R.string.bookmark), ) }, checkedIcon = { Icon( painter = painterResource(NiaIcons.Bookmark), - contentDescription = stringResource(R.string.unbookmark) + contentDescription = stringResource(R.string.unbookmark), ) - } + }, ) } @@ -185,7 +185,7 @@ fun dateFormatted(publishDate: Instant): String { DisposableEffect(context) { val receiver = TimeZoneBroadcastReceiver( - onTimeZoneChanged = { zoneId = ZoneId.systemDefault() } + onTimeZoneChanged = { zoneId = ZoneId.systemDefault() }, ) receiver.register(context) onDispose { @@ -200,7 +200,7 @@ fun dateFormatted(publishDate: Instant): String { @Composable fun NewsResourceMetaData( publishDate: Instant, - resourceType: NewsResourceType + resourceType: NewsResourceType, ) { val formattedDate = dateFormatted(publishDate) Text( @@ -209,21 +209,21 @@ fun NewsResourceMetaData( } else { formattedDate }, - style = MaterialTheme.typography.labelSmall + style = MaterialTheme.typography.labelSmall, ) } @Composable fun NewsResourceLink( @Suppress("UNUSED_PARAMETER") - newsResource: NewsResource + newsResource: NewsResource, ) { TODO() } @Composable fun NewsResourceShortDescription( - newsResourceShortDescription: String + newsResourceShortDescription: String, ) { Text(newsResourceShortDescription, style = MaterialTheme.typography.bodyLarge) } @@ -231,7 +231,7 @@ fun NewsResourceShortDescription( @Composable fun NewsResourceTopics( topics: List, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { // Store the ID of the Topic which has its "following" menu expanded, if any. // To avoid UI confusion, only one topic can have an expanded menu at a time. @@ -255,21 +255,21 @@ fun NewsResourceTopics( val contentDescription = if (followableTopic.isFollowed) { stringResource( R.string.topic_chip_content_description_when_followed, - followableTopic.topic.name + followableTopic.topic.name, ) } else { stringResource( R.string.topic_chip_content_description_when_not_followed, - followableTopic.topic.name + followableTopic.topic.name, ) } Text( text = followableTopic.topic.name.uppercase(Locale.getDefault()), modifier = Modifier.semantics { this.contentDescription = contentDescription - } + }, ) - } + }, ) } } @@ -297,14 +297,17 @@ private fun BookmarkButtonBookmarkedPreview() { @Preview("NewsResourceCardExpanded") @Composable -private fun ExpandedNewsResourcePreview() { +private fun ExpandedNewsResourcePreview( + @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) + userNewsResources: List, +) { NiaTheme { Surface { NewsResourceCardExpanded( - userNewsResource = previewUserNewsResources[0], + userNewsResource = userNewsResources[0], isBookmarked = true, onToggleBookmark = {}, - onClick = {} + onClick = {}, ) } } diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt index e0bd22785..a63bae657 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt @@ -56,7 +56,7 @@ fun LazyListScope.userNewsResourceCardItems( else -> onItemClick(userNewsResource) } }, - modifier = itemModifier + modifier = itemModifier, ) }, ) diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver.kt index 0e3fc6d1c..f7ae813c4 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver.kt +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver.kt @@ -22,7 +22,7 @@ import android.content.Intent import android.content.IntentFilter class TimeZoneBroadcastReceiver( - val onTimeZoneChanged: () -> Unit + val onTimeZoneChanged: () -> Unit, ) : BroadcastReceiver() { private var registered = false diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/UserNewsResourcePreviewParameterProvider.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/UserNewsResourcePreviewParameterProvider.kt new file mode 100644 index 000000000..e32aa1a57 --- /dev/null +++ b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/UserNewsResourcePreviewParameterProvider.kt @@ -0,0 +1,135 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * 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 + * + * https://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 com.google.samples.apps.nowinandroid.core.ui + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource +import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig +import com.google.samples.apps.nowinandroid.core.model.data.NewsResource +import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType +import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video +import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand +import com.google.samples.apps.nowinandroid.core.model.data.Topic +import com.google.samples.apps.nowinandroid.core.model.data.UserData +import kotlinx.datetime.Instant +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toInstant + +/* ktlint-disable max-line-length */ +/** + * This [PreviewParameterProvider](https://developer.android.com/reference/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterProvider) + * provides list of [UserNewsResource] for Composable previews. + */ +class UserNewsResourcePreviewParameterProvider : PreviewParameterProvider> { + override val values: Sequence> + get() { + val userData: UserData = UserData( + bookmarkedNewsResources = setOf("1", "3"), + followedTopics = emptySet(), + themeBrand = ThemeBrand.ANDROID, + darkThemeConfig = DarkThemeConfig.DARK, + shouldHideOnboarding = true, + useDynamicColor = false, + ) + + val topics = listOf( + Topic( + id = "2", + name = "Headlines", + shortDescription = "News we want everyone to see", + longDescription = "Stay up to date with the latest events and announcements from Android!", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f", + url = "", + ), + Topic( + id = "3", + name = "UI", + shortDescription = "Material Design, Navigation, Text, Paging, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets", + longDescription = "Learn how to optimize your app's user interface - everything that users can see and interact with. Stay up to date on tocpis such as Material Design, Navigation, Text, Paging, Compose, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets, and many more!", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_UI.svg?alt=media&token=0ee1842b-12e8-435f-87ba-a5bb02c47594", + url = "", + ), + Topic( + id = "4", + name = "Testing", + shortDescription = "CI, Espresso, TestLab, etc", + longDescription = "Testing is an integral part of the app development process. By running tests against your app consistently, you can verify your app's correctness, functional behavior, and usability before you release it publicly. Stay up to date on the latest tricks in CI, Espresso, and Firebase TestLab.", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Testing.svg?alt=media&token=a11533c4-7cc8-4b11-91a3-806158ebf428", + url = "", + ), + ) + + return sequenceOf( + listOf( + UserNewsResource( + newsResource = NewsResource( + id = "1", + title = "Android Basics with Compose", + content = "We released the first two units of Android Basics with Compose, our first free course that teaches Android Development with Jetpack Compose to anyone; you do not need any prior programming experience other than basic computer literacy to get started. You’ll learn the fundamentals of programming in Kotlin while building Android apps using Jetpack Compose, Android’s modern toolkit that simplifies and accelerates native UI development. These two units are just the beginning; more will be coming soon. Check out Android Basics with Compose to get started on your Android development journey", + url = "https://android-developers.googleblog.com/2022/05/new-android-basics-with-compose-course.html", + headerImageUrl = "https://developer.android.com/images/hero-assets/android-basics-compose.svg", + publishDate = LocalDateTime( + year = 2022, + monthNumber = 5, + dayOfMonth = 4, + hour = 23, + minute = 0, + second = 0, + nanosecond = 0, + ).toInstant(TimeZone.UTC), + type = NewsResourceType.Codelab, + topics = listOf(topics[2]), + ), + userData = userData, + ), + UserNewsResource( + newsResource = NewsResource( + id = "2", + title = "Thanks for helping us reach 1M YouTube Subscribers", + content = "Thank you everyone for following the Now in Android series and everything the " + + "Android Developers YouTube channel has to offer. During the Android Developer " + + "Summit, our YouTube channel reached 1 million subscribers! Here’s a small video to " + + "thank you all.", + url = "https://youtu.be/-fJ6poHQrjM", + headerImageUrl = "https://i.ytimg.com/vi/-fJ6poHQrjM/maxresdefault.jpg", + publishDate = Instant.parse("2021-11-09T00:00:00.000Z"), + type = Video, + topics = topics.take(2), + ), + userData = userData, + ), + UserNewsResource( + newsResource = NewsResource( + id = "3", + title = "Transformations and customisations in the Paging Library", + content = "A demonstration of different operations that can be performed " + + "with Paging. Transformations like inserting separators, when to " + + "create a new pager, and customisation options for consuming " + + "PagingData.", + url = "https://youtu.be/ZARz0pjm5YM", + headerImageUrl = "https://i.ytimg.com/vi/ZARz0pjm5YM/maxresdefault.jpg", + publishDate = Instant.parse("2021-11-01T00:00:00.000Z"), + type = Video, + topics = listOf(topics[2]), + ), + userData = userData, + ), + ), + ) + } +} diff --git a/docs/ArchitectureLearningJourney.md b/docs/ArchitectureLearningJourney.md index 7a6ab2d76..6b6fa4420 100644 --- a/docs/ArchitectureLearningJourney.md +++ b/docs/ArchitectureLearningJourney.md @@ -70,7 +70,7 @@ Here's what's happening in each step. The easiest way to find the associated cod 2 - The ForYouViewModel calls GetSaveableNewsResourcesUseCase to obtain a stream of news resources with their bookmarked/saved state. No items will be emitted into this stream until both the user and news repositories emit an item. While waiting, the feed state is set to Loading. + The ForYouViewModel calls GetUserNewsResourcesUseCase to obtain a stream of news resources with their bookmarked/saved state. No items will be emitted into this stream until both the user and news repositories emit an item. While waiting, the feed state is set to Loading. Search for usages of NewsFeedUiState.Loading @@ -142,9 +142,9 @@ Here's what's happening in each step. The easiest way to find the associated cod 11 - GetSaveableNewsResourcesUseCase combines the list of news resources with the user data to emit a list of SaveableNewsResources. + GetUserNewsResourcesUseCase combines the list of news resources with the user data to emit a list of UserNewsResources. - GetSaveableNewsResourcesUseCase.invoke + GetUserNewsResourcesUseCase.invoke @@ -254,7 +254,7 @@ The [domain layer](https://developer.android.com/topic/architecture/domain-layer These use cases are used to simplify and remove duplicate logic from ViewModels. They typically combine and transform data from repositories. -For example, `GetSaveableNewsResourcesUseCase` combines a stream (implemented using `Flow`) of `NewsResource`s from a `NewsRepository` with a stream of `UserData` objects from a `UserDataRepository` to create a stream of `SaveableNewsResource`s. This stream is used by various ViewModels to display news resources on screen with their bookmarked state. +For example, `GetUserNewsResourcesUseCase` combines a stream (implemented using `Flow`) of `NewsResource`s from a `NewsRepository` with a stream of `UserData` objects from a `UserDataRepository` to create a stream of `UserNewsResource`s. This stream is used by various ViewModels to display news resources on screen with their bookmarked state. Notably, the domain layer in Now in Android _does not_ (for now) contain any use cases for event handling. Events are handled by the UI layer calling methods on repositories directly. diff --git a/feature/bookmarks/build.gradle.kts b/feature/bookmarks/build.gradle.kts index 18212ba4a..2bbeec9a1 100644 --- a/feature/bookmarks/build.gradle.kts +++ b/feature/bookmarks/build.gradle.kts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import com.android.build.api.dsl.ManagedVirtualDevice + plugins { id("nowinandroid.android.feature") id("nowinandroid.android.library.compose") @@ -26,7 +29,7 @@ android { // TODO: Convert it as a convention plugin once Flamingo goes out (https://github.com/android/nowinandroid/issues/523) managedDevices { devices { - maybeCreate("pixel4api30").apply { + maybeCreate("pixel4api30").apply { device = "Pixel 4" apiLevel = 30 // ATDs currently support only API level 30. diff --git a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt b/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt index 1f51d2bb9..f9faca080 100644 --- a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt +++ b/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt @@ -30,12 +30,12 @@ import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performScrollToNode -import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources +import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState -import kotlin.test.assertEquals -import kotlin.test.assertTrue import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue /** * UI tests for [BookmarksScreen] composable. @@ -50,13 +50,13 @@ class BookmarksScreenTest { composeTestRule.setContent { BookmarksScreen( feedState = NewsFeedUiState.Loading, - removeFromBookmarks = { } + removeFromBookmarks = { }, ) } composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.saved_loading) + composeTestRule.activity.resources.getString(R.string.saved_loading), ) .assertExists() } @@ -66,16 +66,16 @@ class BookmarksScreenTest { composeTestRule.setContent { BookmarksScreen( feedState = NewsFeedUiState.Success( - previewUserNewsResources.take(2) + userNewsResourcesTestData.take(2), ), - removeFromBookmarks = { } + removeFromBookmarks = { }, ) } composeTestRule .onNodeWithText( - previewUserNewsResources[0].title, - substring = true + userNewsResourcesTestData[0].title, + substring = true, ) .assertExists() .assertHasClickAction() @@ -83,15 +83,15 @@ class BookmarksScreenTest { composeTestRule.onNode(hasScrollToNodeAction()) .performScrollToNode( hasText( - previewUserNewsResources[1].title, - substring = true - ) + userNewsResourcesTestData[1].title, + substring = true, + ), ) composeTestRule .onNodeWithText( - previewUserNewsResources[1].title, - substring = true + userNewsResourcesTestData[1].title, + substring = true, ) .assertExists() .assertHasClickAction() @@ -104,27 +104,27 @@ class BookmarksScreenTest { composeTestRule.setContent { BookmarksScreen( feedState = NewsFeedUiState.Success( - previewUserNewsResources.take(2) + userNewsResourcesTestData.take(2), ), removeFromBookmarks = { newsResourceId -> - assertEquals(previewUserNewsResources[0].id, newsResourceId) + assertEquals(userNewsResourcesTestData[0].id, newsResourceId) removeFromBookmarksCalled = true - } + }, ) } composeTestRule .onAllNodesWithContentDescription( composeTestRule.activity.getString( - com.google.samples.apps.nowinandroid.core.ui.R.string.unbookmark - ) + com.google.samples.apps.nowinandroid.core.ui.R.string.unbookmark, + ), ).filter( hasAnyAncestor( hasText( - previewUserNewsResources[0].title, - substring = true - ) - ) + userNewsResourcesTestData[0].title, + substring = true, + ), + ), ) .assertCountEquals(1) .onFirst() @@ -138,19 +138,19 @@ class BookmarksScreenTest { composeTestRule.setContent { BookmarksScreen( feedState = NewsFeedUiState.Success(emptyList()), - removeFromBookmarks = { } + removeFromBookmarks = { }, ) } composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.bookmarks_empty_error) + composeTestRule.activity.getString(R.string.bookmarks_empty_error), ) .assertExists() composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.bookmarks_empty_description) + composeTestRule.activity.getString(R.string.bookmarks_empty_description), ) .assertExists() } diff --git a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt index d5d70e9f7..1169f5777 100644 --- a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt +++ b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt @@ -40,36 +40,40 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel +import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalTintTheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme -import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources +import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Loading import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank +import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider import com.google.samples.apps.nowinandroid.core.ui.newsFeed @OptIn(ExperimentalLifecycleComposeApi::class) @Composable internal fun BookmarksRoute( modifier: Modifier = Modifier, - viewModel: BookmarksViewModel = hiltViewModel() + viewModel: BookmarksViewModel = hiltViewModel(), ) { val feedState by viewModel.feedUiState.collectAsStateWithLifecycle() BookmarksScreen( feedState = feedState, removeFromBookmarks = viewModel::removeFromSavedResources, - modifier = modifier + modifier = modifier, ) } @@ -81,7 +85,7 @@ internal fun BookmarksRoute( internal fun BookmarksScreen( feedState: NewsFeedUiState, removeFromBookmarks: (String) -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { when (feedState) { Loading -> LoadingState(modifier) @@ -108,7 +112,7 @@ private fun LoadingState(modifier: Modifier = Modifier) { private fun BookmarksGrid( feedState: NewsFeedUiState, removeFromBookmarks: (String) -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { val scrollableState = rememberLazyGridState() TrackScrollJank(scrollableState = scrollableState, stateName = "bookmarks:grid") @@ -120,7 +124,7 @@ private fun BookmarksGrid( state = scrollableState, modifier = modifier .fillMaxSize() - .testTag("bookmarks:feed") + .testTag("bookmarks:feed"), ) { newsFeed( feedState = feedState, @@ -140,12 +144,14 @@ private fun EmptyState(modifier: Modifier = Modifier) { .fillMaxSize() .testTag("bookmarks:empty"), verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { + val iconTint = LocalTintTheme.current.iconTint Image( modifier = Modifier.fillMaxWidth(), painter = painterResource(id = R.drawable.img_empty_bookmarks), - contentDescription = null + colorFilter = if (iconTint != null) ColorFilter.tint(iconTint) else null, + contentDescription = null, ) Spacer(modifier = Modifier.height(16.dp)) @@ -155,7 +161,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.titleMedium, - fontWeight = FontWeight.Bold + fontWeight = FontWeight.Bold, ) Spacer(modifier = Modifier.height(8.dp)) @@ -164,7 +170,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { text = stringResource(id = R.string.bookmarks_empty_description), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, - style = MaterialTheme.typography.bodyMedium + style = MaterialTheme.typography.bodyMedium, ) } } @@ -179,13 +185,14 @@ private fun LoadingStatePreview() { @Preview @Composable -private fun BookmarksGridPreview() { +private fun BookmarksGridPreview( + @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) + userNewsResources: List, +) { NiaTheme { BookmarksGrid( - feedState = Success( - previewUserNewsResources - ), - removeFromBookmarks = {} + feedState = Success(userNewsResources), + removeFromBookmarks = {}, ) } } diff --git a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt index db94839be..fe631c287 100644 --- a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt +++ b/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt @@ -24,7 +24,6 @@ import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Loading import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.filterNot @@ -32,11 +31,12 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch +import javax.inject.Inject @HiltViewModel class BookmarksViewModel @Inject constructor( private val userDataRepository: UserDataRepository, - getSaveableNewsResources: GetUserNewsResourcesUseCase + getSaveableNewsResources: GetUserNewsResourcesUseCase, ) : ViewModel() { val feedUiState: StateFlow = getSaveableNewsResources() @@ -47,7 +47,7 @@ class BookmarksViewModel @Inject constructor( .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = Loading + initialValue = Loading, ) fun removeFromSavedResources(newsResourceId: String) { diff --git a/feature/bookmarks/src/main/res/drawable/img_empty_bookmarks.xml b/feature/bookmarks/src/main/res/drawable/img_empty_bookmarks.xml index b9e2f2963..64bbfbd23 100644 --- a/feature/bookmarks/src/main/res/drawable/img_empty_bookmarks.xml +++ b/feature/bookmarks/src/main/res/drawable/img_empty_bookmarks.xml @@ -1,6 +1,6 @@ - - + + + + + + + + + + + + + + + + diff --git a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt b/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt index a8da1a4ff..ae4445197 100644 --- a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt +++ b/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt @@ -17,14 +17,12 @@ package com.google.samples.apps.nowinandroid.feature.bookmarks import com.google.samples.apps.nowinandroid.core.domain.GetUserNewsResourcesUseCase -import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources +import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestData import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Loading import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success -import kotlin.test.assertEquals -import kotlin.test.assertIs import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -32,6 +30,8 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertIs /** * To learn more about how this test handles Flows created with stateIn, see @@ -45,7 +45,7 @@ class BookmarksViewModelTest { private val newsRepository = TestNewsRepository() private val getUserNewsResourcesUseCase = GetUserNewsResourcesUseCase( newsRepository = newsRepository, - userDataRepository = userDataRepository + userDataRepository = userDataRepository, ) private lateinit var viewModel: BookmarksViewModel @@ -53,7 +53,7 @@ class BookmarksViewModelTest { fun setup() { viewModel = BookmarksViewModel( userDataRepository = userDataRepository, - getSaveableNewsResources = getUserNewsResourcesUseCase + getSaveableNewsResources = getUserNewsResourcesUseCase, ) } @@ -66,8 +66,8 @@ class BookmarksViewModelTest { fun oneBookmark_showsInFeed() = runTest { val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } - newsRepository.sendNewsResources(previewNewsResources) - userDataRepository.updateNewsResourceBookmark(previewNewsResources[0].id, true) + newsRepository.sendNewsResources(newsResourcesTestData) + userDataRepository.updateNewsResourceBookmark(newsResourcesTestData[0].id, true) val item = viewModel.feedUiState.value assertIs(item) assertEquals(item.feed.size, 1) @@ -79,11 +79,11 @@ class BookmarksViewModelTest { fun oneBookmark_whenRemoving_removesFromFeed() = runTest { val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } // Set the news resources to be used by this test - newsRepository.sendNewsResources(previewNewsResources) + newsRepository.sendNewsResources(newsResourcesTestData) // Start with the resource saved - userDataRepository.updateNewsResourceBookmark(previewNewsResources[0].id, true) + userDataRepository.updateNewsResourceBookmark(newsResourcesTestData[0].id, true) // Use viewModel to remove saved resource - viewModel.removeFromSavedResources(previewNewsResources[0].id) + viewModel.removeFromSavedResources(newsResourcesTestData[0].id) // Verify list of saved resources is now empty val item = viewModel.feedUiState.value assertIs(item) diff --git a/feature/foryou/build.gradle.kts b/feature/foryou/build.gradle.kts index 84fe81ff0..59e0cc904 100644 --- a/feature/foryou/build.gradle.kts +++ b/feature/foryou/build.gradle.kts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import com.android.build.api.dsl.ManagedVirtualDevice + plugins { id("nowinandroid.android.feature") id("nowinandroid.android.library.compose") @@ -26,7 +29,7 @@ android { // TODO: Convert it as a convention plugin once Flamingo goes out (https://github.com/android/nowinandroid/issues/523) managedDevices { devices { - maybeCreate("pixel4api30").apply { + maybeCreate("pixel4api30").apply { device = "Pixel 4" apiLevel = 30 // ATDs currently support only API level 30. diff --git a/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt b/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt index 70f60811b..a6be20013 100644 --- a/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt +++ b/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt @@ -28,9 +28,8 @@ import androidx.compose.ui.test.onFirst import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performScrollToNode -import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic -import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources -import com.google.samples.apps.nowinandroid.core.model.data.Topic +import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData +import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import org.junit.Rule import org.junit.Test @@ -41,7 +40,7 @@ class ForYouScreenTest { private val doneButtonMatcher by lazy { hasText( - composeTestRule.activity.resources.getString(R.string.done) + composeTestRule.activity.resources.getString(R.string.done), ) } @@ -55,14 +54,14 @@ class ForYouScreenTest { feedState = NewsFeedUiState.Loading, onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.for_you_loading) + composeTestRule.activity.resources.getString(R.string.for_you_loading), ) .assertExists() } @@ -77,39 +76,40 @@ class ForYouScreenTest { feedState = NewsFeedUiState.Success(emptyList()), onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.for_you_loading) + composeTestRule.activity.resources.getString(R.string.for_you_loading), ) .assertExists() } @Test fun topicSelector_whenNoTopicsSelected_showsTopicChipsAndDisabledDoneButton() { + val testData = followableTopicTestData.map { it -> it.copy(isFollowed = false) } + composeTestRule.setContent { BoxWithConstraints { ForYouScreen( isSyncing = false, - onboardingUiState = - OnboardingUiState.Shown( - topics = testTopics, + onboardingUiState = OnboardingUiState.Shown( + topics = testData, ), feedState = NewsFeedUiState.Success( - feed = emptyList() + feed = emptyList(), ), onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } - testTopics.forEach { testTopic -> + testData.forEach { testTopic -> composeTestRule .onNodeWithText(testTopic.topic.name) .assertExists() @@ -138,21 +138,21 @@ class ForYouScreenTest { onboardingUiState = OnboardingUiState.Shown( // Follow one topic - topics = testTopics.mapIndexed { index, testTopic -> + topics = followableTopicTestData.mapIndexed { index, testTopic -> testTopic.copy(isFollowed = index == 1) - } + }, ), feedState = NewsFeedUiState.Success( - feed = emptyList() + feed = emptyList(), ), onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } - testTopics.forEach { testTopic -> + followableTopicTestData.forEach { testTopic -> composeTestRule .onNodeWithText(testTopic.topic.name) .assertExists() @@ -179,18 +179,18 @@ class ForYouScreenTest { ForYouScreen( isSyncing = false, onboardingUiState = - OnboardingUiState.Shown(topics = testTopics), + OnboardingUiState.Shown(topics = followableTopicTestData), feedState = NewsFeedUiState.Loading, onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.for_you_loading) + composeTestRule.activity.resources.getString(R.string.for_you_loading), ) .assertExists() } @@ -205,14 +205,14 @@ class ForYouScreenTest { feedState = NewsFeedUiState.Loading, onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.for_you_loading) + composeTestRule.activity.resources.getString(R.string.for_you_loading), ) .assertExists() } @@ -224,18 +224,18 @@ class ForYouScreenTest { isSyncing = false, onboardingUiState = OnboardingUiState.NotShown, feedState = NewsFeedUiState.Success( - feed = previewUserNewsResources + feed = userNewsResourcesTestData, ), onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } composeTestRule .onNodeWithText( - previewUserNewsResources[0].title, - substring = true + userNewsResourcesTestData[0].title, + substring = true, ) .assertExists() .assertHasClickAction() @@ -243,40 +243,17 @@ class ForYouScreenTest { composeTestRule.onNode(hasScrollToNodeAction()) .performScrollToNode( hasText( - previewUserNewsResources[1].title, - substring = true - ) + userNewsResourcesTestData[1].title, + substring = true, + ), ) composeTestRule .onNodeWithText( - previewUserNewsResources[1].title, - substring = true + userNewsResourcesTestData[1].title, + substring = true, ) .assertExists() .assertHasClickAction() } } - -private val testTopic = Topic( - id = "", - name = "", - shortDescription = "", - longDescription = "", - url = "", - imageUrl = "" -) -private val testTopics = listOf( - FollowableTopic( - topic = testTopic.copy(id = "0", name = "Headlines"), - isFollowed = false - ), - FollowableTopic( - topic = testTopic.copy(id = "1", name = "UI"), - isFollowed = false - ), - FollowableTopic( - topic = testTopic.copy(id = "2", name = "Tools"), - isFollowed = false - ), -) diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt index 0e62a9b0b..492660142 100644 --- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt +++ b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt @@ -60,7 +60,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.layout.layout import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalView @@ -68,6 +67,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.max import androidx.compose.ui.unit.sp @@ -76,25 +76,24 @@ import androidx.core.view.doOnPreDraw import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi import androidx.lifecycle.compose.collectAsStateWithLifecycle -import coil.compose.AsyncImage +import com.google.samples.apps.nowinandroid.core.designsystem.component.DynamicAsyncImage import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaButton import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaIconToggleButton import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaOverlayLoadingWheel import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme -import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic -import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources -import com.google.samples.apps.nowinandroid.core.model.data.previewTopics +import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank +import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider import com.google.samples.apps.nowinandroid.core.ui.newsFeed @OptIn(ExperimentalLifecycleComposeApi::class) @Composable internal fun ForYouRoute( modifier: Modifier = Modifier, - viewModel: ForYouViewModel = hiltViewModel() + viewModel: ForYouViewModel = hiltViewModel(), ) { val onboardingUiState by viewModel.onboardingUiState.collectAsStateWithLifecycle() val feedState by viewModel.feedState.collectAsStateWithLifecycle() @@ -107,7 +106,7 @@ internal fun ForYouRoute( onTopicCheckedChanged = viewModel::updateTopicSelection, saveFollowedTopics = viewModel::dismissOnboarding, onNewsResourcesCheckedChanged = viewModel::updateNewsResourceSaved, - modifier = modifier + modifier = modifier, ) } @@ -153,7 +152,7 @@ internal fun ForYouScreen( modifier = modifier .fillMaxSize() .testTag("forYou:feed"), - state = state + state = state, ) { onboarding( onboardingUiState = onboardingUiState, @@ -164,13 +163,13 @@ internal fun ForYouScreen( interestsItemModifier = Modifier.layout { measurable, constraints -> val placeable = measurable.measure( constraints.copy( - maxWidth = constraints.maxWidth + 32.dp.roundToPx() - ) + maxWidth = constraints.maxWidth + 32.dp.roundToPx(), + ), ) layout(placeable.width, placeable.height) { placeable.place(0, 0) } - } + }, ) newsFeed( @@ -199,13 +198,12 @@ internal fun ForYouScreen( ) { val loadingContentDescription = stringResource(id = R.string.for_you_loading) Box( - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) { NiaOverlayLoadingWheel( modifier = Modifier - .align(Alignment.Center) - .testTag("forYou:loadingWheel"), - contentDesc = loadingContentDescription + .align(Alignment.Center), + contentDesc = loadingContentDescription, ) } } @@ -220,12 +218,13 @@ private fun LazyGridScope.onboarding( onboardingUiState: OnboardingUiState, onTopicCheckedChanged: (String, Boolean) -> Unit, saveFollowedTopics: () -> Unit, - interestsItemModifier: Modifier = Modifier + interestsItemModifier: Modifier = Modifier, ) { when (onboardingUiState) { OnboardingUiState.Loading, OnboardingUiState.LoadFailed, - OnboardingUiState.NotShown -> Unit + OnboardingUiState.NotShown, + -> Unit is OnboardingUiState.Shown -> { item(span = { GridItemSpan(maxLineSpan) }) { @@ -236,7 +235,7 @@ private fun LazyGridScope.onboarding( modifier = Modifier .fillMaxWidth() .padding(top = 24.dp), - style = MaterialTheme.typography.titleMedium + style = MaterialTheme.typography.titleMedium, ) Text( text = stringResource(R.string.onboarding_guidance_subtitle), @@ -244,27 +243,27 @@ private fun LazyGridScope.onboarding( .fillMaxWidth() .padding(top = 8.dp, start = 16.dp, end = 16.dp), textAlign = TextAlign.Center, - style = MaterialTheme.typography.bodyMedium + style = MaterialTheme.typography.bodyMedium, ) TopicSelection( onboardingUiState, onTopicCheckedChanged, - Modifier.padding(bottom = 8.dp) + Modifier.padding(bottom = 8.dp), ) // Done button Row( horizontalArrangement = Arrangement.Center, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) { NiaButton( onClick = saveFollowedTopics, enabled = onboardingUiState.isDismissable, modifier = Modifier .padding(horizontal = 40.dp) - .width(364.dp) + .width(364.dp), ) { Text( - text = stringResource(R.string.done) + text = stringResource(R.string.done), ) } } @@ -278,10 +277,12 @@ private fun LazyGridScope.onboarding( private fun TopicSelection( onboardingUiState: OnboardingUiState.Shown, onTopicCheckedChanged: (String, Boolean) -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) = trace("TopicSelection") { val lazyGridState = rememberLazyGridState() - TrackScrollJank(scrollableState = lazyGridState, stateName = "forYou:TopicSelection") + val topicSelectionTestTag = "forYou:topicSelection" + + TrackScrollJank(scrollableState = lazyGridState, stateName = topicSelectionTestTag) LazyHorizontalGrid( state = lazyGridState, @@ -301,14 +302,18 @@ private fun TopicSelection( // The maximum of these two bounds is therefore a valid upper bound in all cases. .heightIn(max = max(240.dp, with(LocalDensity.current) { 240.sp.toDp() })) .fillMaxWidth() + .testTag(topicSelectionTestTag), ) { - items(onboardingUiState.topics) { + items( + items = onboardingUiState.topics, + key = { it.topic.id }, + ) { SingleTopicButton( name = it.topic.name, topicId = it.topic.id, imageUrl = it.topic.imageUrl, isSelected = it.isFollowed, - onClick = onTopicCheckedChanged + onClick = onTopicCheckedChanged, ) } } @@ -321,7 +326,7 @@ private fun SingleTopicButton( topicId: String, imageUrl: String, isSelected: Boolean, - onClick: (String, Boolean) -> Unit + onClick: (String, Boolean) -> Unit, ) = trace("SingleTopicButton") { Surface( modifier = Modifier @@ -332,14 +337,14 @@ private fun SingleTopicButton( selected = isSelected, onClick = { onClick(topicId, !isSelected) - } + }, ) { Row( verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.padding(start = 12.dp, end = 8.dp) + modifier = Modifier.padding(start = 12.dp, end = 8.dp), ) { TopicIcon( - imageUrl = imageUrl + imageUrl = imageUrl, ) Text( text = name, @@ -347,7 +352,7 @@ private fun SingleTopicButton( modifier = Modifier .padding(horizontal = 12.dp) .weight(1f), - color = MaterialTheme.colorScheme.onSurface + color = MaterialTheme.colorScheme.onSurface, ) NiaIconToggleButton( checked = isSelected, @@ -355,15 +360,15 @@ private fun SingleTopicButton( icon = { Icon( imageVector = NiaIcons.Add, - contentDescription = name + contentDescription = name, ) }, checkedIcon = { Icon( imageVector = NiaIcons.Check, - contentDescription = name + contentDescription = name, ) - } + }, ) } } @@ -372,34 +377,36 @@ private fun SingleTopicButton( @Composable fun TopicIcon( imageUrl: String, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { - AsyncImage( + DynamicAsyncImage( // TODO b/228077205, show loading image visual instead of static placeholder placeholder = painterResource(R.drawable.ic_icon_placeholder), - model = imageUrl, + imageUrl = imageUrl, contentDescription = null, // decorative - colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.primary), modifier = modifier .padding(10.dp) - .size(32.dp) + .size(32.dp), ) } @DevicePreviews @Composable -fun ForYouScreenPopulatedFeed() { +fun ForYouScreenPopulatedFeed( + @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) + userNewsResources: List, +) { BoxWithConstraints { NiaTheme { ForYouScreen( isSyncing = false, onboardingUiState = OnboardingUiState.NotShown, feedState = NewsFeedUiState.Success( - feed = previewUserNewsResources + feed = userNewsResources, ), onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } @@ -407,18 +414,21 @@ fun ForYouScreenPopulatedFeed() { @DevicePreviews @Composable -fun ForYouScreenOfflinePopulatedFeed() { +fun ForYouScreenOfflinePopulatedFeed( + @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) + userNewsResources: List, +) { BoxWithConstraints { NiaTheme { ForYouScreen( isSyncing = false, onboardingUiState = OnboardingUiState.NotShown, feedState = NewsFeedUiState.Success( - feed = previewUserNewsResources + feed = userNewsResources, ), onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } @@ -426,20 +436,23 @@ fun ForYouScreenOfflinePopulatedFeed() { @DevicePreviews @Composable -fun ForYouScreenTopicSelection() { +fun ForYouScreenTopicSelection( + @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) + userNewsResources: List, +) { BoxWithConstraints { NiaTheme { ForYouScreen( isSyncing = false, onboardingUiState = OnboardingUiState.Shown( - topics = previewTopics.map { FollowableTopic(it, false) }, + topics = userNewsResources.flatMap { news -> news.followableTopics }, ), feedState = NewsFeedUiState.Success( - feed = previewUserNewsResources + feed = userNewsResources, ), onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } @@ -456,7 +469,7 @@ fun ForYouScreenLoading() { feedState = NewsFeedUiState.Loading, onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } @@ -464,18 +477,21 @@ fun ForYouScreenLoading() { @DevicePreviews @Composable -fun ForYouScreenPopulatedAndLoading() { +fun ForYouScreenPopulatedAndLoading( + @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) + userNewsResources: List, +) { BoxWithConstraints { NiaTheme { ForYouScreen( isSyncing = true, onboardingUiState = OnboardingUiState.Loading, feedState = NewsFeedUiState.Success( - feed = previewUserNewsResources + feed = userNewsResources, ), onTopicCheckedChanged = { _, _ -> }, saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> } + onNewsResourcesCheckedChanged = { _, _ -> }, ) } } diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt index 6c9218a75..cd029b4af 100644 --- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt +++ b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt @@ -23,26 +23,27 @@ import com.google.samples.apps.nowinandroid.core.data.util.SyncStatusMonitor import com.google.samples.apps.nowinandroid.core.domain.GetFollowableTopicsUseCase import com.google.samples.apps.nowinandroid.core.domain.GetUserNewsResourcesUseCase import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource +import com.google.samples.apps.nowinandroid.core.model.data.UserData import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch +import javax.inject.Inject @HiltViewModel class ForYouViewModel @Inject constructor( syncStatusMonitor: SyncStatusMonitor, private val userDataRepository: UserDataRepository, - private val getSaveableNewsResources: GetUserNewsResourcesUseCase, - getFollowableTopics: GetFollowableTopicsUseCase + getUserNewsResources: GetUserNewsResourcesUseCase, + getFollowableTopics: GetFollowableTopicsUseCase, ) : ViewModel() { private val shouldShowOnboarding: Flow = @@ -52,39 +53,22 @@ class ForYouViewModel @Inject constructor( .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = false + initialValue = false, ) val feedState: StateFlow = - userDataRepository.userData - .map { userData -> - // If the user hasn't completed the onboarding and hasn't selected any interests - // show an empty news list to clearly demonstrate that their selections affect the - // news articles they will see. - if (!userData.shouldHideOnboarding && - userData.followedTopics.isEmpty() - ) { - flowOf(NewsFeedUiState.Success(emptyList())) - } else { - getSaveableNewsResources( - filterTopicIds = userData.followedTopics - ).mapToFeedState() - } - } - // Flatten the feed flows. - // As the selected topics and topic state changes, this will cancel the old feed - // monitoring and start the new one. - .flatMapLatest { it } + userDataRepository.getFollowedUserNewsResources(getUserNewsResources) + .map(NewsFeedUiState::Success) .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = NewsFeedUiState.Loading + initialValue = NewsFeedUiState.Loading, ) val onboardingUiState: StateFlow = combine( shouldShowOnboarding, - getFollowableTopics() + getFollowableTopics(), ) { shouldShowOnboarding, topics -> if (shouldShowOnboarding) { OnboardingUiState.Shown(topics = topics) @@ -95,7 +79,7 @@ class ForYouViewModel @Inject constructor( .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = OnboardingUiState.Loading + initialValue = OnboardingUiState.Loading, ) fun updateTopicSelection(topicId: String, isChecked: Boolean) { @@ -117,6 +101,44 @@ class ForYouViewModel @Inject constructor( } } -private fun Flow>.mapToFeedState(): Flow = - map, NewsFeedUiState>(NewsFeedUiState::Success) - .onStart { emit(NewsFeedUiState.Loading) } +/** + * Obtain a flow of user news resources whose topics match those the user is following. + * + * getUserNewsResources: The `UseCase` used to obtain the flow of user news resources. + */ +private fun UserDataRepository.getFollowedUserNewsResources( + getUserNewsResources: GetUserNewsResourcesUseCase, +): Flow> = userData + // Map the user data into a set of followed topic IDs or null if we should return an empty list. + .map { userData -> + if (userData.shouldShowEmptyFeed()) { + null + } else { + userData.followedTopics + } + } + // Only emit a set of followed topic IDs if it's changed. This avoids calling potentially + // expensive operations (like setting up a new flow) when nothing has changed. + .distinctUntilChanged() + // getUserNewsResources returns a flow, so we have a flow inside a flow. flatMapLatest moves + // the inner flow (the one we want to return) to the outer flow and cancels any previous flows + // created by getUserNewsResources. + .flatMapLatest { followedTopics -> + if (followedTopics == null) { + flowOf(emptyList()) + } else { + getUserNewsResources(filterTopicIds = followedTopics) + } + } + +/** + * If the user hasn't completed the onboarding and hasn't selected any interests + * show an empty news list to clearly demonstrate that their selections affect the + * news articles they will see. + * + * Note: It should not be possible for the user to get into a state where the onboarding + * is not displayed AND they haven't followed any topics, however, this method is to safeguard + * against that scenario in future. + */ +private fun UserData.shouldShowEmptyFeed() = + !shouldHideOnboarding && followedTopics.isEmpty() diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt index 73ecfed14..faf368b1e 100644 --- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt +++ b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt @@ -41,7 +41,7 @@ sealed interface OnboardingUiState { * There is a onboarding state, with the given lists of topics. */ data class Shown( - val topics: List + val topics: List, ) : OnboardingUiState { /** * True if the onboarding can be dismissed. diff --git a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt index 4427b44fe..9e51758f0 100644 --- a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt +++ b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt @@ -32,7 +32,6 @@ import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor import com.google.samples.apps.nowinandroid.core.testing.util.TestSyncStatusMonitor import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState -import kotlin.test.assertEquals import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -42,6 +41,7 @@ import kotlinx.datetime.Instant import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals /** * To learn more about how this test handles Flows created with stateIn, see @@ -58,11 +58,12 @@ class ForYouViewModelTest { private val newsRepository = TestNewsRepository() private val getUserNewsResourcesUseCase = GetUserNewsResourcesUseCase( newsRepository = newsRepository, - userDataRepository = userDataRepository + userDataRepository = userDataRepository, ) + private val getFollowableTopicsUseCase = GetFollowableTopicsUseCase( topicsRepository = topicsRepository, - userDataRepository = userDataRepository + userDataRepository = userDataRepository, ) private lateinit var viewModel: ForYouViewModel @@ -71,8 +72,8 @@ class ForYouViewModelTest { viewModel = ForYouViewModel( syncStatusMonitor = syncStatusMonitor, userDataRepository = userDataRepository, - getSaveableNewsResources = getUserNewsResourcesUseCase, - getFollowableTopics = getFollowableTopicsUseCase + getUserNewsResources = getUserNewsResourcesUseCase, + getFollowableTopics = getFollowableTopicsUseCase, ) } @@ -80,7 +81,7 @@ class ForYouViewModelTest { fun stateIsInitiallyLoading() = runTest { assertEquals( OnboardingUiState.Loading, - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals(NewsFeedUiState.Loading, viewModel.feedState.value) } @@ -95,7 +96,7 @@ class ForYouViewModelTest { assertEquals( OnboardingUiState.Loading, - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals(NewsFeedUiState.Loading, viewModel.feedState.value) @@ -112,7 +113,7 @@ class ForYouViewModelTest { assertEquals( true, - viewModel.isSyncing.value + viewModel.isSyncing.value, ) collectJob.cancel() @@ -128,7 +129,7 @@ class ForYouViewModelTest { assertEquals( OnboardingUiState.Loading, - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals(NewsFeedUiState.Success(emptyList()), viewModel.feedState.value) @@ -157,7 +158,7 @@ class ForYouViewModelTest { url = "URL", imageUrl = "image URL", ), - isFollowed = false + isFollowed = false, ), FollowableTopic( topic = Topic( @@ -168,7 +169,7 @@ class ForYouViewModelTest { url = "URL", imageUrl = "image URL", ), - isFollowed = false + isFollowed = false, ), FollowableTopic( topic = Topic( @@ -179,17 +180,17 @@ class ForYouViewModelTest { url = "URL", imageUrl = "image URL", ), - isFollowed = false + isFollowed = false, ), ), ), - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals( NewsFeedUiState.Success( - feed = emptyList() + feed = emptyList(), ), - viewModel.feedState.value + viewModel.feedState.value, ) collectJob1.cancel() @@ -218,7 +219,7 @@ class ForYouViewModelTest { url = "URL", imageUrl = "image URL", ), - isFollowed = false + isFollowed = false, ), FollowableTopic( topic = Topic( @@ -229,7 +230,7 @@ class ForYouViewModelTest { url = "URL", imageUrl = "image URL", ), - isFollowed = false + isFollowed = false, ), FollowableTopic( topic = Topic( @@ -240,18 +241,18 @@ class ForYouViewModelTest { url = "URL", imageUrl = "image URL", ), - isFollowed = false + isFollowed = false, ), ), ), - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals( NewsFeedUiState.Success( - feed = emptyList() + feed = emptyList(), ), - viewModel.feedState.value + viewModel.feedState.value, ) collectJob1.cancel() @@ -273,7 +274,7 @@ class ForYouViewModelTest { assertEquals( OnboardingUiState.NotShown, - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals(NewsFeedUiState.Loading, viewModel.feedState.value) @@ -281,13 +282,13 @@ class ForYouViewModelTest { assertEquals( OnboardingUiState.NotShown, - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals( NewsFeedUiState.Success( - feed = sampleNewsResources.mapToUserNewsResources(userData) + feed = sampleNewsResources.mapToUserNewsResources(userData), ), - viewModel.feedState.value + viewModel.feedState.value, ) collectJob1.cancel() @@ -308,15 +309,15 @@ class ForYouViewModelTest { OnboardingUiState.Shown( topics = sampleTopics.map { FollowableTopic(it, false) - } + }, ), - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals( NewsFeedUiState.Success( feed = emptyList(), ), - viewModel.feedState.value + viewModel.feedState.value, ) val followedTopicId = sampleTopics[1].id @@ -326,9 +327,9 @@ class ForYouViewModelTest { OnboardingUiState.Shown( topics = sampleTopics.map { FollowableTopic(it, it.id == followedTopicId) - } + }, ), - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) val userData = emptyUserData.copy(followedTopics = setOf(followedTopicId)) @@ -338,9 +339,9 @@ class ForYouViewModelTest { feed = listOf( UserNewsResource(sampleNewsResources[1], userData), UserNewsResource(sampleNewsResources[2], userData), - ) + ), ), - viewModel.feedState.value + viewModel.feedState.value, ) collectJob1.cancel() @@ -372,7 +373,7 @@ class ForYouViewModelTest { url = "URL", imageUrl = "image URL", ), - isFollowed = false + isFollowed = false, ), FollowableTopic( topic = Topic( @@ -383,7 +384,7 @@ class ForYouViewModelTest { url = "URL", imageUrl = "image URL", ), - isFollowed = false + isFollowed = false, ), FollowableTopic( topic = Topic( @@ -394,17 +395,17 @@ class ForYouViewModelTest { url = "URL", imageUrl = "image URL", ), - isFollowed = false - ) + isFollowed = false, + ), ), ), - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals( NewsFeedUiState.Success( - feed = emptyList() + feed = emptyList(), ), - viewModel.feedState.value + viewModel.feedState.value, ) collectJob1.cancel() @@ -420,7 +421,7 @@ class ForYouViewModelTest { val followedTopicIds = setOf("1") val userData = emptyUserData.copy( followedTopics = followedTopicIds, - shouldHideOnboarding = true + shouldHideOnboarding = true, ) topicsRepository.sendTopics(sampleTopics) @@ -430,25 +431,25 @@ class ForYouViewModelTest { val bookmarkedNewsResourceId = "2" viewModel.updateNewsResourceSaved( newsResourceId = bookmarkedNewsResourceId, - isChecked = true + isChecked = true, ) val userDataExpected = userData.copy( - bookmarkedNewsResources = setOf(bookmarkedNewsResourceId) + bookmarkedNewsResources = setOf(bookmarkedNewsResourceId), ) assertEquals( OnboardingUiState.NotShown, - viewModel.onboardingUiState.value + viewModel.onboardingUiState.value, ) assertEquals( NewsFeedUiState.Success( feed = listOf( UserNewsResource(newsResource = sampleNewsResources[1], userDataExpected), - UserNewsResource(newsResource = sampleNewsResources[2], userDataExpected) - ) + UserNewsResource(newsResource = sampleNewsResources[2], userDataExpected), + ), ), - viewModel.feedState.value + viewModel.feedState.value, ) collectJob1.cancel() @@ -480,7 +481,7 @@ private val sampleTopics = listOf( longDescription = "long description", url = "URL", imageUrl = "image URL", - ) + ), ) private val sampleNewsResources = listOf( @@ -503,7 +504,7 @@ private val sampleNewsResources = listOf( longDescription = "long description", url = "URL", imageUrl = "image URL", - ) + ), ), ), NewsResource( diff --git a/feature/interests/build.gradle.kts b/feature/interests/build.gradle.kts index 477093d2b..8fd9dcd8d 100644 --- a/feature/interests/build.gradle.kts +++ b/feature/interests/build.gradle.kts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import com.android.build.api.dsl.ManagedVirtualDevice + plugins { id("nowinandroid.android.feature") id("nowinandroid.android.library.compose") @@ -25,7 +28,7 @@ android { // TODO: Convert it as a convention plugin once Flamingo goes out (https://github.com/android/nowinandroid/issues/523) managedDevices { devices { - maybeCreate("pixel4api30").apply { + maybeCreate("pixel4api30").apply { device = "Pixel 4" apiLevel = 30 // ATDs currently support only API level 30. diff --git a/feature/interests/src/androidTest/java/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt b/feature/interests/src/androidTest/java/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt index e44086c4c..7f06eee6b 100644 --- a/feature/interests/src/androidTest/java/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt +++ b/feature/interests/src/androidTest/java/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt @@ -22,11 +22,9 @@ import androidx.compose.ui.test.assertCountEquals import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onAllNodesWithContentDescription -import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText -import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic -import com.google.samples.apps.nowinandroid.core.model.data.Topic +import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData import com.google.samples.apps.nowinandroid.feature.interests.InterestsScreen import com.google.samples.apps.nowinandroid.feature.interests.InterestsUiState import com.google.samples.apps.nowinandroid.feature.interests.R @@ -76,24 +74,20 @@ class InterestsScreenTest { fun interestsWithTopics_whenTopicsFollowed_showFollowedAndUnfollowedTopicsWithInfo() { composeTestRule.setContent { InterestsScreen( - uiState = InterestsUiState.Interests(topics = testTopics) + uiState = InterestsUiState.Interests(topics = followableTopicTestData), ) } composeTestRule - .onNodeWithText(TOPIC_1_NAME) + .onNodeWithText(followableTopicTestData[0].topic.name) .assertIsDisplayed() composeTestRule - .onNodeWithText(TOPIC_2_NAME) + .onNodeWithText(followableTopicTestData[1].topic.name) .assertIsDisplayed() composeTestRule - .onNodeWithText(TOPIC_3_NAME) + .onNodeWithText(followableTopicTestData[2].topic.name) .assertIsDisplayed() - composeTestRule - .onAllNodesWithText(TOPIC_SHORT_DESC) - .assertCountEquals(testTopics.count()) - composeTestRule .onAllNodesWithContentDescription(interestsTopicCardFollowButton) .assertCountEquals(numberOfUnfollowedTopics) @@ -115,53 +109,9 @@ class InterestsScreenTest { InterestsScreen( uiState = uiState, followTopic = { _, _ -> }, - navigateToTopic = {} + navigateToTopic = {}, ) } } -private const val TOPIC_1_NAME = "Headlines" -private const val TOPIC_2_NAME = "UI" -private const val TOPIC_3_NAME = "Tools" -private const val TOPIC_SHORT_DESC = "At vero eos et accusamus." -private const val TOPIC_LONG_DESC = "At vero eos et accusamus et iusto odio dignissimos ducimus." -private const val TOPIC_URL = "URL" -private const val TOPIC_IMAGE_URL = "Image URL" - -private val testTopics = listOf( - FollowableTopic( - Topic( - id = "0", - name = TOPIC_1_NAME, - shortDescription = TOPIC_SHORT_DESC, - longDescription = TOPIC_LONG_DESC, - url = TOPIC_URL, - imageUrl = TOPIC_IMAGE_URL, - ), - isFollowed = true - ), - FollowableTopic( - Topic( - id = "1", - name = TOPIC_2_NAME, - shortDescription = TOPIC_SHORT_DESC, - longDescription = TOPIC_LONG_DESC, - url = TOPIC_URL, - imageUrl = TOPIC_IMAGE_URL, - ), - isFollowed = false - ), - FollowableTopic( - Topic( - id = "2", - name = TOPIC_3_NAME, - shortDescription = TOPIC_SHORT_DESC, - longDescription = TOPIC_LONG_DESC, - url = TOPIC_URL, - imageUrl = TOPIC_IMAGE_URL, - ), - isFollowed = false - ) -) - -private val numberOfUnfollowedTopics = testTopics.filter { !it.isFollowed }.size +private val numberOfUnfollowedTopics = followableTopicTestData.filter { !it.isFollowed }.size diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt index de04f59f1..f8a7a8d90 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt +++ b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt @@ -31,12 +31,11 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import coil.compose.AsyncImage +import com.google.samples.apps.nowinandroid.core.designsystem.component.DynamicAsyncImage import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaIconToggleButton import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme @@ -52,18 +51,18 @@ fun InterestsItem( modifier: Modifier = Modifier, iconModifier: Modifier = Modifier, description: String = "", - itemSeparation: Dp = 16.dp + itemSeparation: Dp = 16.dp, ) { Row( verticalAlignment = Alignment.CenterVertically, - modifier = modifier + modifier = modifier, ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .weight(1f) .clickable { onClick() } - .padding(vertical = itemSeparation) + .padding(vertical = itemSeparation), ) { InterestsIcon(topicImageUrl, iconModifier.size(64.dp)) Spacer(modifier = Modifier.width(16.dp)) @@ -76,18 +75,18 @@ fun InterestsItem( Icon( imageVector = NiaIcons.Add, contentDescription = stringResource( - id = string.card_follow_button_content_desc - ) + id = string.card_follow_button_content_desc, + ), ) }, checkedIcon = { Icon( imageVector = NiaIcons.Check, contentDescription = stringResource( - id = string.card_unfollow_button_content_desc - ) + id = string.card_unfollow_button_content_desc, + ), ) - } + }, ) } } @@ -99,13 +98,13 @@ private fun InterestContent(name: String, description: String, modifier: Modifie text = name, style = MaterialTheme.typography.headlineSmall, modifier = Modifier.padding( - vertical = if (description.isEmpty()) 0.dp else 4.dp - ) + vertical = if (description.isEmpty()) 0.dp else 4.dp, + ), ) if (description.isNotEmpty()) { Text( text = description, - style = MaterialTheme.typography.bodyMedium + style = MaterialTheme.typography.bodyMedium, ) } } @@ -122,11 +121,10 @@ private fun InterestsIcon(topicImageUrl: String, modifier: Modifier = Modifier) contentDescription = null, // decorative image ) } else { - AsyncImage( - model = topicImageUrl, + DynamicAsyncImage( + imageUrl = topicImageUrl, contentDescription = null, - colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.primary), - modifier = modifier + modifier = modifier, ) } } @@ -142,7 +140,7 @@ private fun InterestsCardPreview() { following = false, topicImageUrl = "", onClick = { }, - onFollowButtonClick = { } + onFollowButtonClick = { }, ) } } @@ -159,7 +157,7 @@ private fun InterestsCardLongNamePreview() { following = true, topicImageUrl = "", onClick = { }, - onFollowButtonClick = { } + onFollowButtonClick = { }, ) } } @@ -177,7 +175,7 @@ private fun InterestsCardLongDescriptionPreview() { following = false, topicImageUrl = "", onClick = { }, - onFollowButtonClick = { } + onFollowButtonClick = { }, ) } } @@ -194,7 +192,7 @@ private fun InterestsCardWithEmptyDescriptionPreview() { following = true, topicImageUrl = "", onClick = { }, - onFollowButtonClick = { } + onFollowButtonClick = { }, ) } } diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt index 8cce790c4..fd45c7608 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt +++ b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt @@ -23,6 +23,7 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -30,15 +31,15 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackg import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic -import com.google.samples.apps.nowinandroid.core.model.data.previewTopics import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews +import com.google.samples.apps.nowinandroid.core.ui.FollowableTopicPreviewParameterProvider @OptIn(ExperimentalLifecycleComposeApi::class) @Composable internal fun InterestsRoute( navigateToTopic: (String) -> Unit, modifier: Modifier = Modifier, - viewModel: InterestsViewModel = hiltViewModel() + viewModel: InterestsViewModel = hiltViewModel(), ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -46,7 +47,7 @@ internal fun InterestsRoute( uiState = uiState, followTopic = viewModel::followTopic, navigateToTopic = navigateToTopic, - modifier = modifier + modifier = modifier, ) } @@ -59,7 +60,7 @@ internal fun InterestsScreen( ) { Column( modifier = modifier, - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { when (uiState) { InterestsUiState.Loading -> @@ -86,12 +87,15 @@ private fun InterestsEmptyScreen() { @DevicePreviews @Composable -fun InterestsScreenPopulated() { +fun InterestsScreenPopulated( + @PreviewParameter(FollowableTopicPreviewParameterProvider::class) + followableTopics: List, +) { NiaTheme { NiaBackground { InterestsScreen( uiState = InterestsUiState.Interests( - topics = previewTopics.map { FollowableTopic(it, false) } + topics = followableTopics, ), followTopic = { _, _ -> }, navigateToTopic = {}, diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt index 8466a33f0..d6ef94521 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt +++ b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt @@ -23,12 +23,12 @@ import com.google.samples.apps.nowinandroid.core.domain.GetFollowableTopicsUseCa import com.google.samples.apps.nowinandroid.core.domain.TopicSortField import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch +import javax.inject.Inject @HiltViewModel class InterestsViewModel @Inject constructor( @@ -38,11 +38,11 @@ class InterestsViewModel @Inject constructor( val uiState: StateFlow = getFollowableTopics(sortBy = TopicSortField.NAME).map( - InterestsUiState::Interests + InterestsUiState::Interests, ).stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = InterestsUiState.Loading + initialValue = InterestsUiState.Loading, ) fun followTopic(followedTopicId: String, followed: Boolean) { @@ -56,7 +56,7 @@ sealed interface InterestsUiState { object Loading : InterestsUiState data class Interests( - val topics: List + val topics: List, ) : InterestsUiState object Empty : InterestsUiState diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt index 47facde82..9a5ce7696 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt +++ b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt @@ -32,11 +32,11 @@ fun NavController.navigateToInterestsGraph(navOptions: NavOptions? = null) { fun NavGraphBuilder.interestsGraph( navigateToTopic: (String) -> Unit, - nestedGraphs: NavGraphBuilder.() -> Unit + nestedGraphs: NavGraphBuilder.() -> Unit, ) { navigation( route = interestsGraphRoutePattern, - startDestination = interestsRoute + startDestination = interestsRoute, ) { composable(route = interestsRoute) { InterestsRoute( diff --git a/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt b/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt index c84a8ad45..e47b25021 100644 --- a/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt +++ b/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt @@ -24,7 +24,6 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.feature.interests.InterestsUiState import com.google.samples.apps.nowinandroid.feature.interests.InterestsViewModel -import kotlin.test.assertEquals import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -32,6 +31,7 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals /** * To learn more about how this test handles Flows created with stateIn, see @@ -46,7 +46,7 @@ class InterestsViewModelTest { private val topicsRepository = TestTopicsRepository() private val getFollowableTopicsUseCase = GetFollowableTopicsUseCase( topicsRepository = topicsRepository, - userDataRepository = userDataRepository + userDataRepository = userDataRepository, ) private lateinit var viewModel: InterestsViewModel @@ -84,17 +84,17 @@ class InterestsViewModelTest { assertEquals( false, (viewModel.uiState.value as InterestsUiState.Interests) - .topics.first { it.topic.id == toggleTopicId }.isFollowed + .topics.first { it.topic.id == toggleTopicId }.isFollowed, ) viewModel.followTopic( followedTopicId = toggleTopicId, - true + true, ) assertEquals( InterestsUiState.Interests(topics = testOutputTopics), - viewModel.uiState.value + viewModel.uiState.value, ) collectJob.cancel() @@ -108,23 +108,23 @@ class InterestsViewModelTest { topicsRepository.sendTopics(testOutputTopics.map { it.topic }) userDataRepository.setFollowedTopicIds( - setOf(testOutputTopics[0].topic.id, testOutputTopics[1].topic.id) + setOf(testOutputTopics[0].topic.id, testOutputTopics[1].topic.id), ) assertEquals( true, (viewModel.uiState.value as InterestsUiState.Interests) - .topics.first { it.topic.id == toggleTopicId }.isFollowed + .topics.first { it.topic.id == toggleTopicId }.isFollowed, ) viewModel.followTopic( followedTopicId = toggleTopicId, - false + false, ) assertEquals( InterestsUiState.Interests(topics = testInputTopics), - viewModel.uiState.value + viewModel.uiState.value, ) collectJob.cancel() @@ -149,7 +149,7 @@ private val testInputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = true + isFollowed = true, ), FollowableTopic( Topic( @@ -160,7 +160,7 @@ private val testInputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = false + isFollowed = false, ), FollowableTopic( Topic( @@ -171,8 +171,8 @@ private val testInputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = false - ) + isFollowed = false, + ), ) private val testOutputTopics = listOf( @@ -185,7 +185,7 @@ private val testOutputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = true + isFollowed = true, ), FollowableTopic( Topic( @@ -196,7 +196,7 @@ private val testOutputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = true + isFollowed = true, ), FollowableTopic( Topic( @@ -207,6 +207,6 @@ private val testOutputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = false - ) + isFollowed = false, + ), ) diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts index 3fbe1cef8..41dee24dc 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/build.gradle.kts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import com.android.build.api.dsl.ManagedVirtualDevice + plugins { id("nowinandroid.android.feature") id("nowinandroid.android.library.compose") @@ -26,7 +29,7 @@ android { // TODO: Convert it as a convention plugin once Flamingo goes out (https://github.com/android/nowinandroid/issues/523) managedDevices { devices { - maybeCreate("pixel4api30").apply { + maybeCreate("pixel4api30").apply { device = "Pixel 4" apiLevel = 30 // ATDs currently support only API level 30. diff --git a/feature/settings/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt b/feature/settings/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt index 07b6b272c..febc606b0 100644 --- a/feature/settings/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt +++ b/feature/settings/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt @@ -22,6 +22,7 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onNodeWithText import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.DARK import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand.ANDROID +import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand.DEFAULT import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success import org.junit.Rule @@ -36,13 +37,13 @@ class SettingsDialogTest { @Test fun whenLoading_showsLoadingText() { - composeTestRule.setContent { SettingsDialog( settingsUiState = Loading, - onDismiss = { }, + onDismiss = {}, + onChangeDynamicColorPreference = {}, onChangeThemeBrand = {}, - onChangeDarkThemeConfig = {} + onChangeDarkThemeConfig = {}, ) } @@ -52,18 +53,20 @@ class SettingsDialogTest { } @Test - fun whenStateIsSuccess_allSettingsAreDisplayed() { + fun whenStateIsSuccess_allDefaultSettingsAreDisplayed() { composeTestRule.setContent { SettingsDialog( settingsUiState = Success( UserEditableSettings( brand = ANDROID, - darkThemeConfig = DARK - ) + useDynamicColor = false, + darkThemeConfig = DARK, + ), ), onDismiss = { }, + onChangeDynamicColorPreference = {}, onChangeThemeBrand = {}, - onChangeDarkThemeConfig = {} + onChangeDarkThemeConfig = {}, ) } @@ -71,7 +74,7 @@ class SettingsDialogTest { composeTestRule.onNodeWithText(getString(R.string.brand_default)).assertExists() composeTestRule.onNodeWithText(getString(R.string.brand_android)).assertExists() composeTestRule.onNodeWithText( - getString(R.string.dark_mode_config_system_default) + getString(R.string.dark_mode_config_system_default), ).assertExists() composeTestRule.onNodeWithText(getString(R.string.dark_mode_config_light)).assertExists() composeTestRule.onNodeWithText(getString(R.string.dark_mode_config_dark)).assertExists() @@ -81,6 +84,81 @@ class SettingsDialogTest { composeTestRule.onNodeWithText(getString(R.string.dark_mode_config_dark)).assertIsSelected() } + @Test + fun whenStateIsSuccess_supportsDynamicColor_usesDefaultBrand_DynamicColorOptionIsDisplayed() { + composeTestRule.setContent { + SettingsDialog( + settingsUiState = Success( + UserEditableSettings( + brand = DEFAULT, + darkThemeConfig = DARK, + useDynamicColor = false, + ), + ), + supportDynamicColor = true, + onDismiss = {}, + onChangeDynamicColorPreference = {}, + onChangeThemeBrand = {}, + onChangeDarkThemeConfig = {}, + ) + } + + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_preference)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_yes)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_no)).assertExists() + + // Check that the correct default dynamic color setting is selected. + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_no)).assertIsSelected() + } + + @Test + fun whenStateIsSuccess_notSupportDynamicColor_DynamicColorOptionIsNotDisplayed() { + composeTestRule.setContent { + SettingsDialog( + settingsUiState = Success( + UserEditableSettings( + brand = ANDROID, + darkThemeConfig = DARK, + useDynamicColor = false, + ), + ), + onDismiss = {}, + onChangeDynamicColorPreference = {}, + onChangeThemeBrand = {}, + onChangeDarkThemeConfig = {}, + ) + } + + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_preference)) + .assertDoesNotExist() + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_yes)).assertDoesNotExist() + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_no)).assertDoesNotExist() + } + + @Test + fun whenStateIsSuccess_usesAndroidBrand_DynamicColorOptionIsNotDisplayed() { + composeTestRule.setContent { + SettingsDialog( + settingsUiState = Success( + UserEditableSettings( + brand = ANDROID, + darkThemeConfig = DARK, + useDynamicColor = false, + ), + ), + onDismiss = {}, + onChangeDynamicColorPreference = {}, + onChangeThemeBrand = {}, + onChangeDarkThemeConfig = {}, + ) + } + + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_preference)) + .assertDoesNotExist() + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_yes)).assertDoesNotExist() + composeTestRule.onNodeWithText(getString(R.string.dynamic_color_no)).assertDoesNotExist() + } + @Test fun whenStateIsSuccess_allLinksAreDisplayed() { composeTestRule.setContent { @@ -88,12 +166,14 @@ class SettingsDialogTest { settingsUiState = Success( UserEditableSettings( brand = ANDROID, - darkThemeConfig = DARK - ) + darkThemeConfig = DARK, + useDynamicColor = false, + ), ), - onDismiss = { }, + onDismiss = {}, + onChangeDynamicColorPreference = {}, onChangeThemeBrand = {}, - onChangeDarkThemeConfig = {} + onChangeDarkThemeConfig = {}, ) } diff --git a/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt b/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt index 01c7cb0f5..bed230d0d 100644 --- a/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt +++ b/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt @@ -26,6 +26,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.selection.selectable import androidx.compose.foundation.selection.selectableGroup @@ -38,17 +39,21 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.DialogProperties import androidx.core.content.ContextCompat import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.designsystem.theme.supportsDynamicTheming import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.DARK import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.FOLLOW_SYSTEM @@ -64,31 +69,45 @@ import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Suc @Composable fun SettingsDialog( onDismiss: () -> Unit, - viewModel: SettingsViewModel = hiltViewModel() + viewModel: SettingsViewModel = hiltViewModel(), ) { val settingsUiState by viewModel.settingsUiState.collectAsStateWithLifecycle() SettingsDialog( onDismiss = onDismiss, settingsUiState = settingsUiState, onChangeThemeBrand = viewModel::updateThemeBrand, + onChangeDynamicColorPreference = viewModel::updateDynamicColorPreference, onChangeDarkThemeConfig = viewModel::updateDarkThemeConfig, ) } +@OptIn(ExperimentalComposeUiApi::class) @Composable fun SettingsDialog( settingsUiState: SettingsUiState, + supportDynamicColor: Boolean = supportsDynamicTheming(), onDismiss: () -> Unit, onChangeThemeBrand: (themeBrand: ThemeBrand) -> Unit, - onChangeDarkThemeConfig: (darkThemeConfig: DarkThemeConfig) -> Unit + onChangeDynamicColorPreference: (useDynamicColor: Boolean) -> Unit, + onChangeDarkThemeConfig: (darkThemeConfig: DarkThemeConfig) -> Unit, ) { + val configuration = LocalConfiguration.current + /** + * usePlatformDefaultWidth = false is use as a temporary fix to allow + * height recalculation during recomposition. This, however, causes + * Dialog's to occupy full width in Compact mode. Therefore max width + * is configured below. This should be removed when there's fix to + * https://issuetracker.google.com/issues/221643630 + */ AlertDialog( + properties = DialogProperties(usePlatformDefaultWidth = false), + modifier = Modifier.widthIn(max = configuration.screenWidthDp.dp - 80.dp), onDismissRequest = { onDismiss() }, title = { Text( text = stringResource(string.settings_title), - style = MaterialTheme.typography.titleLarge + style = MaterialTheme.typography.titleLarge, ) }, text = { @@ -98,14 +117,17 @@ fun SettingsDialog( Loading -> { Text( text = stringResource(string.loading), - modifier = Modifier.padding(vertical = 16.dp) + modifier = Modifier.padding(vertical = 16.dp), ) } + is Success -> { SettingsPanel( settings = settingsUiState.settings, + supportDynamicColor = supportDynamicColor, onChangeThemeBrand = onChangeThemeBrand, - onChangeDarkThemeConfig = onChangeDarkThemeConfig + onChangeDynamicColorPreference = onChangeDynamicColorPreference, + onChangeDarkThemeConfig = onChangeDarkThemeConfig, ) } } @@ -120,47 +142,64 @@ fun SettingsDialog( color = MaterialTheme.colorScheme.primary, modifier = Modifier .padding(horizontal = 8.dp) - .clickable { onDismiss() } + .clickable { onDismiss() }, ) - } + }, ) } @Composable private fun SettingsPanel( settings: UserEditableSettings, + supportDynamicColor: Boolean, onChangeThemeBrand: (themeBrand: ThemeBrand) -> Unit, - onChangeDarkThemeConfig: (darkThemeConfig: DarkThemeConfig) -> Unit + onChangeDynamicColorPreference: (useDynamicColor: Boolean) -> Unit, + onChangeDarkThemeConfig: (darkThemeConfig: DarkThemeConfig) -> Unit, ) { SettingsDialogSectionTitle(text = stringResource(string.theme)) Column(Modifier.selectableGroup()) { SettingsDialogThemeChooserRow( text = stringResource(string.brand_default), selected = settings.brand == DEFAULT, - onClick = { onChangeThemeBrand(DEFAULT) } + onClick = { onChangeThemeBrand(DEFAULT) }, ) SettingsDialogThemeChooserRow( text = stringResource(string.brand_android), selected = settings.brand == ANDROID, - onClick = { onChangeThemeBrand(ANDROID) } + onClick = { onChangeThemeBrand(ANDROID) }, ) } - SettingsDialogSectionTitle(text = "Dark mode preference") + if (settings.brand == DEFAULT && supportDynamicColor) { + SettingsDialogSectionTitle(text = stringResource(R.string.dynamic_color_preference)) + Column(Modifier.selectableGroup()) { + SettingsDialogThemeChooserRow( + text = stringResource(string.dynamic_color_yes), + selected = settings.useDynamicColor, + onClick = { onChangeDynamicColorPreference(true) }, + ) + SettingsDialogThemeChooserRow( + text = stringResource(string.dynamic_color_no), + selected = !settings.useDynamicColor, + onClick = { onChangeDynamicColorPreference(false) }, + ) + } + } + SettingsDialogSectionTitle(text = stringResource(R.string.dark_mode_preference)) Column(Modifier.selectableGroup()) { SettingsDialogThemeChooserRow( text = stringResource(string.dark_mode_config_system_default), selected = settings.darkThemeConfig == FOLLOW_SYSTEM, - onClick = { onChangeDarkThemeConfig(FOLLOW_SYSTEM) } + onClick = { onChangeDarkThemeConfig(FOLLOW_SYSTEM) }, ) SettingsDialogThemeChooserRow( text = stringResource(string.dark_mode_config_light), selected = settings.darkThemeConfig == LIGHT, - onClick = { onChangeDarkThemeConfig(LIGHT) } + onClick = { onChangeDarkThemeConfig(LIGHT) }, ) SettingsDialogThemeChooserRow( text = stringResource(string.dark_mode_config_dark), selected = settings.darkThemeConfig == DARK, - onClick = { onChangeDarkThemeConfig(DARK) } + onClick = { onChangeDarkThemeConfig(DARK) }, ) } } @@ -170,7 +209,7 @@ private fun SettingsDialogSectionTitle(text: String) { Text( text = text, style = MaterialTheme.typography.titleMedium, - modifier = Modifier.padding(top = 16.dp, bottom = 8.dp) + modifier = Modifier.padding(top = 16.dp, bottom = 8.dp), ) } @@ -178,7 +217,7 @@ private fun SettingsDialogSectionTitle(text: String) { fun SettingsDialogThemeChooserRow( text: String, selected: Boolean, - onClick: () -> Unit + onClick: () -> Unit, ) { Row( Modifier @@ -189,11 +228,11 @@ fun SettingsDialogThemeChooserRow( onClick = onClick, ) .padding(8.dp), - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { RadioButton( selected = selected, - onClick = null + onClick = null, ) Spacer(Modifier.width(8.dp)) Text(text) @@ -203,7 +242,7 @@ fun SettingsDialogThemeChooserRow( @Composable private fun LinksPanel() { Row( - modifier = Modifier.padding(top = 16.dp) + modifier = Modifier.padding(top = 16.dp), ) { Column( Modifier.fillMaxWidth(), @@ -212,24 +251,24 @@ private fun LinksPanel() { Row { TextLink( text = stringResource(string.privacy_policy), - url = PRIVACY_POLICY_URL + url = PRIVACY_POLICY_URL, ) Spacer(Modifier.width(16.dp)) TextLink( text = stringResource(string.licenses), - url = LICENSES_URL + url = LICENSES_URL, ) } Spacer(Modifier.height(16.dp)) Row { TextLink( text = stringResource(string.brand_guidelines), - url = BRAND_GUIDELINES_URL + url = BRAND_GUIDELINES_URL, ) Spacer(Modifier.width(16.dp)) TextLink( text = stringResource(string.feedback), - url = FEEDBACK_URL + url = FEEDBACK_URL, ) } } @@ -238,7 +277,6 @@ private fun LinksPanel() { @Composable private fun TextLink(text: String, url: String) { - val launchResourceIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) val context = LocalContext.current @@ -249,7 +287,7 @@ private fun TextLink(text: String, url: String) { modifier = Modifier .clickable { ContextCompat.startActivity(context, launchResourceIntent, null) - } + }, ) } @@ -262,11 +300,13 @@ private fun PreviewSettingsDialog() { settingsUiState = Success( UserEditableSettings( brand = DEFAULT, - darkThemeConfig = FOLLOW_SYSTEM - ) + darkThemeConfig = FOLLOW_SYSTEM, + useDynamicColor = false, + ), ), - onChangeThemeBrand = { }, - onChangeDarkThemeConfig = { } + onChangeThemeBrand = {}, + onChangeDynamicColorPreference = {}, + onChangeDarkThemeConfig = {}, ) } } @@ -278,14 +318,17 @@ private fun PreviewSettingsDialogLoading() { SettingsDialog( onDismiss = {}, settingsUiState = Loading, - onChangeThemeBrand = { }, - onChangeDarkThemeConfig = { } + onChangeThemeBrand = {}, + onChangeDynamicColorPreference = {}, + onChangeDarkThemeConfig = {}, ) } } /* ktlint-disable max-line-length */ private const val PRIVACY_POLICY_URL = "https://policies.google.com/privacy" -private const val LICENSES_URL = "https://github.com/android/nowinandroid/blob/main/app/LICENSES.md#open-source-licenses-and-copyright-notices" -private const val BRAND_GUIDELINES_URL = "https://developer.android.com/distribute/marketing-tools/brand-guidelines" +private const val LICENSES_URL = + "https://github.com/android/nowinandroid/blob/main/app/LICENSES.md#open-source-licenses-and-copyright-notices" +private const val BRAND_GUIDELINES_URL = + "https://developer.android.com/distribute/marketing-tools/brand-guidelines" private const val FEEDBACK_URL = "https://goo.gle/nia-app-feedback" diff --git a/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt b/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt index 85a7feb91..33bf58a2c 100644 --- a/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt +++ b/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt @@ -24,12 +24,12 @@ import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch +import javax.inject.Inject @HiltViewModel class SettingsViewModel @Inject constructor( @@ -41,8 +41,9 @@ class SettingsViewModel @Inject constructor( Success( settings = UserEditableSettings( brand = userData.themeBrand, - darkThemeConfig = userData.darkThemeConfig - ) + useDynamicColor = userData.useDynamicColor, + darkThemeConfig = userData.darkThemeConfig, + ), ) } .stateIn( @@ -54,7 +55,7 @@ class SettingsViewModel @Inject constructor( // scrollable column. // TODO: Change to SharingStarted.WhileSubscribed(5_000) when b/221643630 is fixed started = SharingStarted.Eagerly, - initialValue = Loading + initialValue = Loading, ) fun updateThemeBrand(themeBrand: ThemeBrand) { @@ -68,12 +69,22 @@ class SettingsViewModel @Inject constructor( userDataRepository.setDarkThemeConfig(darkThemeConfig) } } + + fun updateDynamicColorPreference(useDynamicColor: Boolean) { + viewModelScope.launch { + userDataRepository.setDynamicColorPreference(useDynamicColor) + } + } } /** * Represents the settings which the user can edit within the app. */ -data class UserEditableSettings(val brand: ThemeBrand, val darkThemeConfig: DarkThemeConfig) +data class UserEditableSettings( + val brand: ThemeBrand, + val useDynamicColor: Boolean, + val darkThemeConfig: DarkThemeConfig, +) sealed interface SettingsUiState { object Loading : SettingsUiState diff --git a/feature/settings/src/main/res/values/strings.xml b/feature/settings/src/main/res/values/strings.xml index b5265f650..5efaeb577 100644 --- a/feature/settings/src/main/res/values/strings.xml +++ b/feature/settings/src/main/res/values/strings.xml @@ -25,8 +25,12 @@ Theme Default Android + Dark mode preference System default Light Dark + Use Dynamic Color + Yes + No OK - \ No newline at end of file + diff --git a/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt b/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt index 6d8cf8b13..9062abee6 100644 --- a/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt +++ b/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt @@ -22,7 +22,6 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success -import kotlin.test.assertEquals import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -30,6 +29,7 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals class SettingsViewModelTest { @@ -52,7 +52,6 @@ class SettingsViewModelTest { @Test fun stateIsSuccessAfterUserDataLoaded() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.settingsUiState.collect() } @@ -63,10 +62,11 @@ class SettingsViewModelTest { Success( UserEditableSettings( brand = ANDROID, - darkThemeConfig = DARK - ) + darkThemeConfig = DARK, + useDynamicColor = false, + ), ), - viewModel.settingsUiState.value + viewModel.settingsUiState.value, ) collectJob.cancel() diff --git a/feature/topic/build.gradle.kts b/feature/topic/build.gradle.kts index 76e803b67..48e2563f8 100644 --- a/feature/topic/build.gradle.kts +++ b/feature/topic/build.gradle.kts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import com.android.build.api.dsl.ManagedVirtualDevice + plugins { id("nowinandroid.android.feature") id("nowinandroid.android.library.compose") @@ -26,7 +29,7 @@ android { // TODO: Convert it as a convention plugin once Flamingo goes out (https://github.com/android/nowinandroid/issues/523) managedDevices { devices { - maybeCreate("pixel4api30").apply { + maybeCreate("pixel4api30").apply { device = "Pixel 4" apiLevel = 30 // ATDs currently support only API level 30. diff --git a/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt b/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt index df9e83315..626b0e773 100644 --- a/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt +++ b/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt @@ -24,13 +24,8 @@ import androidx.compose.ui.test.onFirst import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performScrollToNode -import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic -import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource -import com.google.samples.apps.nowinandroid.core.model.data.NewsResource -import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video -import com.google.samples.apps.nowinandroid.core.model.data.Topic -import com.google.samples.apps.nowinandroid.core.testing.repository.emptyUserData -import kotlinx.datetime.Instant +import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData +import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData import org.junit.Before import org.junit.Rule import org.junit.Test @@ -73,7 +68,7 @@ class TopicScreenTest { @Test fun topicTitle_whenTopicIsSuccess_isShown() { - val testTopic = testTopics.first() + val testTopic = followableTopicTestData.first() composeTestRule.setContent { TopicScreen( topicUiState = TopicUiState.Success(testTopic), @@ -100,7 +95,7 @@ class TopicScreenTest { composeTestRule.setContent { TopicScreen( topicUiState = TopicUiState.Loading, - newsUiState = NewsUiState.Success(sampleUserNewsResources), + newsUiState = NewsUiState.Success(userNewsResourcesTestData), onBackClick = { }, onFollowClick = { }, onBookmarkChanged = { _, _ -> }, @@ -115,12 +110,12 @@ class TopicScreenTest { @Test fun news_whenSuccessAndTopicIsSuccess_isShown() { - val testTopic = testTopics.first() + val testTopic = followableTopicTestData.first() composeTestRule.setContent { TopicScreen( topicUiState = TopicUiState.Success(testTopic), newsUiState = NewsUiState.Success( - sampleUserNewsResources + userNewsResourcesTestData, ), onBackClick = { }, onFollowClick = { }, @@ -132,76 +127,6 @@ class TopicScreenTest { composeTestRule .onAllNodes(hasScrollToNodeAction()) .onFirst() - .performScrollToNode(hasText(sampleUserNewsResources.first().title)) + .performScrollToNode(hasText(userNewsResourcesTestData.first().title)) } } - -private const val TOPIC_1_NAME = "Headlines" -private const val TOPIC_2_NAME = "UI" -private const val TOPIC_3_NAME = "Tools" -private const val TOPIC_DESC = "At vero eos et accusamus et iusto odio dignissimos ducimus qui." - -private val testTopics = listOf( - FollowableTopic( - Topic( - id = "0", - name = TOPIC_1_NAME, - shortDescription = "", - longDescription = TOPIC_DESC, - url = "", - imageUrl = "" - ), - isFollowed = true - ), - FollowableTopic( - Topic( - id = "1", - name = TOPIC_2_NAME, - shortDescription = "", - longDescription = TOPIC_DESC, - url = "", - imageUrl = "" - ), - isFollowed = false - ), - FollowableTopic( - Topic( - id = "2", - name = TOPIC_3_NAME, - shortDescription = "", - longDescription = TOPIC_DESC, - url = "", - imageUrl = "" - ), - isFollowed = false - ) -) - -private val sampleUserNewsResources = listOf( - UserNewsResource( - newsResource = - NewsResource( - id = "1", - title = "Thanks for helping us reach 1M YouTube Subscribers", - content = "Thank you everyone for following the Now in Android series and" + - " everything the Android Developers YouTube channel has to offer. During the " + - "Android Developer Summit, our YouTube channel reached 1 million subscribers!" + - " Here’s a small video to thank you all.", - url = "https://youtu.be/-fJ6poHQrjM", - headerImageUrl = "https://i.ytimg.com/vi/-fJ6poHQrjM/maxresdefault.jpg", - publishDate = Instant.parse("2021-11-09T00:00:00.000Z"), - type = Video, - topics = listOf( - Topic( - id = "0", - name = "Headlines", - shortDescription = "", - longDescription = TOPIC_DESC, - url = "", - imageUrl = "" - ) - ) - ), - userData = emptyUserData.copy(bookmarkedNewsResources = setOf("1")) - ) -) diff --git a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt index b3263839f..e7b218072 100644 --- a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt +++ b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt @@ -39,24 +39,24 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi import androidx.lifecycle.compose.collectAsStateWithLifecycle -import coil.compose.AsyncImage +import com.google.samples.apps.nowinandroid.core.designsystem.component.DynamicAsyncImage import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaFilterChip import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic -import com.google.samples.apps.nowinandroid.core.domain.model.previewUserNewsResources -import com.google.samples.apps.nowinandroid.core.model.data.previewTopics +import com.google.samples.apps.nowinandroid.core.domain.model.UserNewsResource import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank +import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider import com.google.samples.apps.nowinandroid.core.ui.userNewsResourceCardItems import com.google.samples.apps.nowinandroid.feature.topic.R.string import com.google.samples.apps.nowinandroid.feature.topic.TopicUiState.Loading @@ -96,7 +96,7 @@ internal fun TopicScreen( LazyColumn( state = state, modifier = modifier, - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { item { Spacer(Modifier.windowInsetsTopHeight(WindowInsets.safeDrawing)) @@ -123,7 +123,7 @@ internal fun TopicScreen( description = topicUiState.followableTopic.topic.longDescription, news = newsUiState, imageUrl = topicUiState.followableTopic.topic.imageUrl, - onBookmarkChanged = onBookmarkChanged + onBookmarkChanged = onBookmarkChanged, ) } } @@ -138,7 +138,7 @@ private fun LazyListScope.TopicBody( description: String, news: NewsUiState, imageUrl: String, - onBookmarkChanged: (String, Boolean) -> Unit + onBookmarkChanged: (String, Boolean) -> Unit, ) { // TODO: Show icon if available item { @@ -151,23 +151,22 @@ private fun LazyListScope.TopicBody( @Composable private fun TopicHeader(name: String, description: String, imageUrl: String) { Column( - modifier = Modifier.padding(horizontal = 24.dp) + modifier = Modifier.padding(horizontal = 24.dp), ) { - AsyncImage( - model = imageUrl, + DynamicAsyncImage( + imageUrl = imageUrl, contentDescription = null, - colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.primary), modifier = Modifier .align(Alignment.CenterHorizontally) .size(216.dp) - .padding(bottom = 12.dp) + .padding(bottom = 12.dp), ) Text(name, style = MaterialTheme.typography.displayMedium) if (description.isNotEmpty()) { Text( description, modifier = Modifier.padding(top = 24.dp), - style = MaterialTheme.typography.bodyLarge + style = MaterialTheme.typography.bodyLarge, ) } } @@ -176,14 +175,14 @@ private fun TopicHeader(name: String, description: String, imageUrl: String) { // TODO: Could/should this be replaced with [LazyGridScope.newsFeed]? private fun LazyListScope.userNewsResourceCards( news: NewsUiState, - onBookmarkChanged: (String, Boolean) -> Unit + onBookmarkChanged: (String, Boolean) -> Unit, ) { when (news) { is NewsUiState.Success -> { userNewsResourceCardItems( items = news.news, onToggleBookmark = { onBookmarkChanged(it.id, !it.isSaved) }, - itemModifier = Modifier.padding(24.dp) + itemModifier = Modifier.padding(24.dp), ) } @@ -203,8 +202,11 @@ private fun TopicBodyPreview() { NiaTheme { LazyColumn { TopicBody( - "Jetpack Compose", "Lorem ipsum maximum", - NewsUiState.Success(emptyList()), "", { _, _ -> } + "Jetpack Compose", + "Lorem ipsum maximum", + NewsUiState.Success(emptyList()), + "", + { _, _ -> }, ) } } @@ -222,21 +224,21 @@ private fun TopicToolbar( verticalAlignment = Alignment.CenterVertically, modifier = modifier .fillMaxWidth() - .padding(bottom = 32.dp) + .padding(bottom = 32.dp), ) { IconButton(onClick = { onBackClick() }) { Icon( imageVector = NiaIcons.ArrowBack, contentDescription = stringResource( - id = com.google.samples.apps.nowinandroid.core.ui.R.string.back - ) + id = com.google.samples.apps.nowinandroid.core.ui.R.string.back, + ), ) } val selected = uiState.isFollowed NiaFilterChip( selected = selected, onSelectedChange = onFollowClick, - modifier = Modifier.padding(end = 24.dp) + modifier = Modifier.padding(end = 24.dp), ) { if (selected) { Text("FOLLOWING") @@ -249,14 +251,15 @@ private fun TopicToolbar( @DevicePreviews @Composable -fun TopicScreenPopulated() { +fun TopicScreenPopulated( + @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) + userNewsResources: List, +) { NiaTheme { NiaBackground { TopicScreen( - topicUiState = TopicUiState.Success(FollowableTopic(previewTopics[0], false)), - newsUiState = NewsUiState.Success( - previewUserNewsResources - ), + topicUiState = TopicUiState.Success(userNewsResources[0].followableTopics[0]), + newsUiState = NewsUiState.Success(userNewsResources), onBackClick = {}, onFollowClick = {}, onBookmarkChanged = { _, _ -> }, diff --git a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt index 260cecbd1..c0c6bbafd 100644 --- a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt +++ b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt @@ -30,7 +30,6 @@ import com.google.samples.apps.nowinandroid.core.result.Result import com.google.samples.apps.nowinandroid.core.result.asResult import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicArgs import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -38,6 +37,7 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch +import javax.inject.Inject @HiltViewModel class TopicViewModel @Inject constructor( @@ -45,7 +45,7 @@ class TopicViewModel @Inject constructor( stringDecoder: StringDecoder, private val userDataRepository: UserDataRepository, topicsRepository: TopicsRepository, - getSaveableNewsResources: GetUserNewsResourcesUseCase + getSaveableNewsResources: GetUserNewsResourcesUseCase, ) : ViewModel() { private val topicArgs: TopicArgs = TopicArgs(savedStateHandle, stringDecoder) @@ -53,23 +53,23 @@ class TopicViewModel @Inject constructor( val topicUiState: StateFlow = topicUiState( topicId = topicArgs.topicId, userDataRepository = userDataRepository, - topicsRepository = topicsRepository + topicsRepository = topicsRepository, ) .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = TopicUiState.Loading + initialValue = TopicUiState.Loading, ) val newUiState: StateFlow = newsUiState( topicId = topicArgs.topicId, userDataRepository = userDataRepository, - getSaveableNewsResources = getSaveableNewsResources + getSaveableNewsResources = getSaveableNewsResources, ) .stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), - initialValue = NewsUiState.Loading + initialValue = NewsUiState.Loading, ) fun followTopicToggle(followed: Boolean) { @@ -97,13 +97,13 @@ private fun topicUiState( // Observe topic information val topicStream: Flow = topicsRepository.getTopic( - id = topicId + id = topicId, ) return combine( followedTopicIds, topicStream, - ::Pair + ::Pair, ) .asResult() .map { followedTopicToTopicResult -> @@ -114,8 +114,8 @@ private fun topicUiState( TopicUiState.Success( followableTopic = FollowableTopic( topic = topic, - isFollowed = followed - ) + isFollowed = followed, + ), ) } is Result.Loading -> { @@ -145,7 +145,7 @@ private fun newsUiState( return combine( newsStream, bookmark, - ::Pair + ::Pair, ) .asResult() .map { newsToBookmarksResult -> diff --git a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt index 808143275..1cc43bbd1 100644 --- a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt +++ b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt @@ -41,13 +41,13 @@ fun NavController.navigateToTopic(topicId: String) { } fun NavGraphBuilder.topicScreen( - onBackClick: () -> Unit + onBackClick: () -> Unit, ) { composable( route = "topic_route/{$topicIdArg}", arguments = listOf( - navArgument(topicIdArg) { type = NavType.StringType } - ) + navArgument(topicIdArg) { type = NavType.StringType }, + ), ) { TopicRoute(onBackClick = onBackClick) } diff --git a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt b/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt index 6c61e59d5..a8f1b0a88 100644 --- a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt +++ b/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt @@ -28,8 +28,6 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRe import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicIdArg -import kotlin.test.assertEquals -import kotlin.test.assertIs import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.first @@ -40,6 +38,8 @@ import kotlinx.datetime.Instant import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertIs /** * To learn more about how this test handles Flows created with stateIn, see @@ -55,7 +55,7 @@ class TopicViewModelTest { private val newsRepository = TestNewsRepository() private val getUserNewsResourcesUseCase = GetUserNewsResourcesUseCase( newsRepository = newsRepository, - userDataRepository = userDataRepository + userDataRepository = userDataRepository, ) private lateinit var viewModel: TopicViewModel @@ -66,7 +66,7 @@ class TopicViewModelTest { stringDecoder = FakeStringDecoder(), userDataRepository = userDataRepository, topicsRepository = topicsRepository, - getSaveableNewsResources = getUserNewsResourcesUseCase + getSaveableNewsResources = getUserNewsResourcesUseCase, ) } @@ -80,7 +80,7 @@ class TopicViewModelTest { assertIs(item) val topicFromRepository = topicsRepository.getTopic( - testInputTopics[0].topic.id + testInputTopics[0].topic.id, ).first() assertEquals(topicFromRepository, item.followableTopic.topic) @@ -131,7 +131,7 @@ class TopicViewModelTest { combine( viewModel.topicUiState, viewModel.newUiState, - ::Pair + ::Pair, ).collect() } topicsRepository.sendTopics(testInputTopics.map { it.topic }) @@ -158,7 +158,7 @@ class TopicViewModelTest { assertEquals( TopicUiState.Success(followableTopic = testOutputTopics[0]), - viewModel.topicUiState.value + viewModel.topicUiState.value, ) collectJob.cancel() @@ -183,7 +183,7 @@ private val testInputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = true + isFollowed = true, ), FollowableTopic( Topic( @@ -194,7 +194,7 @@ private val testInputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = false + isFollowed = false, ), FollowableTopic( Topic( @@ -205,8 +205,8 @@ private val testInputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = false - ) + isFollowed = false, + ), ) private val testOutputTopics = listOf( @@ -219,7 +219,7 @@ private val testOutputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = true + isFollowed = true, ), FollowableTopic( Topic( @@ -230,7 +230,7 @@ private val testOutputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = true + isFollowed = true, ), FollowableTopic( Topic( @@ -241,8 +241,8 @@ private val testOutputTopics = listOf( url = TOPIC_URL, imageUrl = TOPIC_IMAGE_URL, ), - isFollowed = false - ) + isFollowed = false, + ), ) private val sampleNewsResources = listOf( @@ -265,7 +265,7 @@ private val sampleNewsResources = listOf( longDescription = "long description", url = "URL", imageUrl = "image URL", - ) + ), ), - ) + ), ) diff --git a/gradle/init.gradle.kts b/gradle/init.gradle.kts index bd5658fc0..57f91da08 100644 --- a/gradle/init.gradle.kts +++ b/gradle/init.gradle.kts @@ -14,10 +14,10 @@ * limitations under the License. */ -val ktlintVersion = "0.43.0" +val ktlintVersion = "0.48.1" initscript { - val spotlessVersion = "6.11.0" + val spotlessVersion = "6.13.0" repositories { mavenCentral() diff --git a/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt b/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt index 047b5d7ab..39aa07160 100644 --- a/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt +++ b/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt @@ -38,7 +38,7 @@ class DesignSystemDetector : Detector(), Detector.UastScanner { override fun getApplicableUastTypes(): List> { return listOf( UCallExpression::class.java, - UQualifiedReferenceExpression::class.java + UQualifiedReferenceExpression::class.java, ) } @@ -71,8 +71,8 @@ class DesignSystemDetector : Detector(), Detector.UastScanner { severity = Severity.ERROR, implementation = Implementation( DesignSystemDetector::class.java, - Scope.JAVA_FILE_SCOPE - ) + Scope.JAVA_FILE_SCOPE, + ), ) // Unfortunately :lint is a Java module and thus can't depend on the :core-designsystem @@ -99,21 +99,23 @@ class DesignSystemDetector : Detector(), Detector.UastScanner { "CenterAlignedTopAppBar" to "NiaTopAppBar", "SmallTopAppBar" to "NiaTopAppBar", "MediumTopAppBar" to "NiaTopAppBar", - "LargeTopAppBar" to "NiaTopAppBar" + "LargeTopAppBar" to "NiaTopAppBar", ) val RECEIVER_NAMES = mapOf( - "Icons" to "NiaIcons" + "Icons" to "NiaIcons", ) fun reportIssue( context: JavaContext, node: UElement, name: String, - preferredName: String + preferredName: String, ) { context.report( - ISSUE, node, context.getLocation(node), - "Using $name instead of $preferredName" + ISSUE, + node, + context.getLocation(node), + "Using $name instead of $preferredName", ) } } diff --git a/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemIssueRegistry.kt b/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemIssueRegistry.kt index 152c07c28..d951151bb 100644 --- a/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemIssueRegistry.kt +++ b/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemIssueRegistry.kt @@ -35,6 +35,6 @@ class DesignSystemIssueRegistry : IssueRegistry() { override val vendor: Vendor = Vendor( vendorName = "Now in Android", feedbackUrl = "https://github.com/android/nowinandroid/issues", - contact = "https://github.com/android/nowinandroid" + contact = "https://github.com/android/nowinandroid", ) } diff --git a/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncStatusMonitor.kt b/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncStatusMonitor.kt index 0c0069f7d..647dd864e 100644 --- a/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncStatusMonitor.kt +++ b/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncStatusMonitor.kt @@ -17,9 +17,9 @@ package com.google.samples.apps.nowinandroid.core.sync.test import com.google.samples.apps.nowinandroid.core.data.util.SyncStatusMonitor -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf +import javax.inject.Inject class NeverSyncingSyncStatusMonitor @Inject constructor() : SyncStatusMonitor { override val isSyncing: Flow = flowOf(false) diff --git a/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt b/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt index bc0876a7c..323704b5a 100644 --- a/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt +++ b/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt @@ -26,11 +26,11 @@ import dagger.hilt.testing.TestInstallIn @Module @TestInstallIn( components = [SingletonComponent::class], - replaces = [SyncModule::class] + replaces = [SyncModule::class], ) interface TestSyncModule { @Binds fun bindsSyncStatusMonitor( - syncStatusMonitor: NeverSyncingSyncStatusMonitor + syncStatusMonitor: NeverSyncingSyncStatusMonitor, ): SyncStatusMonitor } diff --git a/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt b/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt index 4bcc19be8..9c9d13510 100644 --- a/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt +++ b/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt @@ -25,10 +25,10 @@ import androidx.work.testing.SynchronousExecutor import androidx.work.testing.WorkManagerTestInitHelper import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest -import kotlin.test.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals @HiltAndroidTest class SyncWorkerTest { diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index 88e7df4de..68f9eee93 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -28,6 +28,6 @@ import dagger.hilt.components.SingletonComponent interface SyncModule { @Binds fun bindsSyncStatusMonitor( - syncStatusMonitor: WorkManagerSyncStatusMonitor + syncStatusMonitor: WorkManagerSyncStatusMonitor, ): SyncStatusMonitor } diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt index 21f98138b..837eb9a20 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt +++ b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt @@ -47,7 +47,7 @@ class SyncInitializer : Initializer { enqueueUniqueWork( SyncWorkName, ExistingWorkPolicy.KEEP, - SyncWorker.startUpSyncWork() + SyncWorker.startUpSyncWork(), ) } diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt index bfaef1808..334b3f0c7 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt +++ b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt @@ -42,7 +42,7 @@ val SyncConstraints */ fun Context.syncForegroundInfo() = ForegroundInfo( SyncNotificationId, - syncWorkNotification() + syncWorkNotification(), ) /** @@ -54,7 +54,7 @@ private fun Context.syncWorkNotification(): Notification { val channel = NotificationChannel( SyncNotificationChannelID, getString(R.string.sync_notification_channel_name), - NotificationManager.IMPORTANCE_DEFAULT + NotificationManager.IMPORTANCE_DEFAULT, ).apply { description = getString(R.string.sync_notification_channel_description) } @@ -67,10 +67,10 @@ private fun Context.syncWorkNotification(): Notification { return NotificationCompat.Builder( this, - SyncNotificationChannelID + SyncNotificationChannelID, ) .setSmallIcon( - com.google.samples.apps.nowinandroid.core.common.R.drawable.ic_nia_notification + com.google.samples.apps.nowinandroid.core.common.R.drawable.ic_nia_notification, ) .setContentTitle(getString(R.string.sync_notification_title)) .setPriority(NotificationCompat.PRIORITY_DEFAULT) diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor.kt b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor.kt index fe9c429e0..9edb630eb 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor.kt +++ b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor.kt @@ -25,20 +25,20 @@ import androidx.work.WorkManager import com.google.samples.apps.nowinandroid.core.data.util.SyncStatusMonitor import com.google.samples.apps.nowinandroid.sync.initializers.SyncWorkName import dagger.hilt.android.qualifiers.ApplicationContext -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.conflate +import javax.inject.Inject /** * [SyncStatusMonitor] backed by [WorkInfo] from [WorkManager] */ class WorkManagerSyncStatusMonitor @Inject constructor( - @ApplicationContext context: Context + @ApplicationContext context: Context, ) : SyncStatusMonitor { override val isSyncing: Flow = Transformations.map( WorkManager.getInstance(context).getWorkInfosForUniqueWorkLiveData(SyncWorkName), - MutableList::anyRunning + MutableList::anyRunning, ) .asFlow() .conflate() diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt index 1a7dfb1be..c6ac6fb65 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt +++ b/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt @@ -65,8 +65,11 @@ class SyncWorker @AssistedInject constructor( async { newsRepository.sync() }, ).all { it } - if (syncedSuccessfully) Result.success() - else Result.retry() + if (syncedSuccessfully) { + Result.success() + } else { + Result.retry() + } } } @@ -74,7 +77,7 @@ class SyncWorker @AssistedInject constructor( niaPreferences.getChangeListVersions() override suspend fun updateChangeListVersions( - update: ChangeListVersions.() -> ChangeListVersions + update: ChangeListVersions.() -> ChangeListVersions, ) = niaPreferences.updateChangeListVersion(update) companion object {