From 038a9744cd69b3f54d76892353471eaf48a9358b Mon Sep 17 00:00:00 2001 From: Jaehwa Noh Date: Sun, 31 Mar 2024 13:56:01 +0900 Subject: [PATCH] Fix spotless. Change-Id: Ia9b44fcd6242ba4c85814f88326e06b88f310d6b --- .../apps/nowinandroid/ui/NavigationTest.kt | 32 ++++++++----- .../apps/nowinandroid/ui/NavigationUiTest.kt | 2 +- .../apps/nowinandroid/ui/NiaAppStateTest.kt | 10 +++-- .../samples/apps/nowinandroid/MainActivity.kt | 14 ++---- .../nowinandroid/MainActivityViewModel.kt | 2 +- .../apps/nowinandroid/di/JankStatsModule.kt | 6 +-- .../samples/apps/nowinandroid/ui/NiaApp.kt | 37 +++++++-------- .../apps/nowinandroid/ui/NiaAppState.kt | 4 +- .../interests2pane/Interests2PaneViewModel.kt | 2 +- .../InterestsListDetailScreen.kt | 9 +--- .../util/ProfileVerifierLogger.kt | 2 +- .../ui/NiaAppScreenSizesScreenshotTests.kt | 4 +- .../core/designsystem/ThemeTest.kt | 2 +- .../core/designsystem/component/Background.kt | 5 +-- .../designsystem/component/LoadingWheel.kt | 10 +---- .../core/designsystem/component/Navigation.kt | 5 +-- .../core/designsystem/component/Tabs.kt | 6 +-- .../component/scrollbar/AppScrollbars.kt | 3 +- .../component/scrollbar/Scrollbar.kt | 15 +++---- .../component/scrollbar/ScrollbarExt.kt | 2 +- .../component/scrollbar/ThumbExt.kt | 33 +++++++------- .../core/notifications/NotificationsModule.kt | 4 +- .../core/notifications/SystemTrayNotifier.kt | 33 +++++++------- .../core/notifications/NotificationsModule.kt | 4 +- .../core/testing/di/TestDispatcherModule.kt | 2 +- .../core/testing/di/TestDispatchersModule.kt | 5 +-- .../TestSearchContentsRepository.kt | 10 +++-- .../feature/search/SearchScreenTest.kt | 9 ++-- .../feature/search/SearchScreen.kt | 11 +++-- .../feature/search/SearchViewModel.kt | 15 +++---- .../search/navigation/SearchNavigation.kt | 5 ++- .../feature/search/SearchViewModelTest.kt | 4 +- .../lint/TestMethodNameDetector.kt | 45 ++++++++----------- .../sync/workers/SyncWorkerTest.kt | 2 +- .../apps/nowinandroid/sync/di/SyncModule.kt | 4 +- .../sync/status/WorkManagerSyncManager.kt | 2 +- .../sync/workers/AnalyticsExtensions.kt | 7 ++- .../sync/workers/DelegatingWorker.kt | 13 +++--- .../nowinandroid/sync/workers/SyncWorker.kt | 3 +- .../sync/status/FirebaseSyncSubscriber.kt | 2 +- 40 files changed, 175 insertions(+), 210 deletions(-) diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index c9cc64120..6cf3b6f37 100644 --- a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -38,21 +38,21 @@ import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule +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.search.R as FeatureSearchR +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 +import javax.inject.Inject +import kotlin.properties.ReadOnlyProperty import kotlinx.coroutines.flow.first import kotlinx.coroutines.runBlocking import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder -import javax.inject.Inject -import kotlin.properties.ReadOnlyProperty -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.search.R as FeatureSearchR -import com.google.samples.apps.nowinandroid.feature.settings.R as SettingsR /** * Tests all the navigation flows that are handled by the navigation library. @@ -93,15 +93,25 @@ class NavigationTest { ReadOnlyProperty { _, _ -> activity.getString(resId) } // The strings used for matching in these tests - private val navigateUp by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_navigate_up) + private val navigateUp by composeTestRule.stringResource( + FeatureForyouR.string.feature_foryou_navigate_up, + ) private val forYou by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_title) - private val interests by composeTestRule.stringResource(FeatureSearchR.string.feature_search_interests) + private val interests by composeTestRule.stringResource( + FeatureSearchR.string.feature_search_interests, + ) private val sampleTopic = "Headlines" private val appName by composeTestRule.stringResource(R.string.app_name) private val saved by composeTestRule.stringResource(BookmarksR.string.feature_bookmarks_title) - private val settings by composeTestRule.stringResource(SettingsR.string.feature_settings_top_app_bar_action_icon_description) - private val brand by composeTestRule.stringResource(SettingsR.string.feature_settings_brand_android) - private val ok by composeTestRule.stringResource(SettingsR.string.feature_settings_dismiss_dialog_button_text) + private val settings by composeTestRule.stringResource( + SettingsR.string.feature_settings_top_app_bar_action_icon_description, + ) + private val brand by composeTestRule.stringResource( + SettingsR.string.feature_settings_brand_android, + ) + private val ok by composeTestRule.stringResource( + SettingsR.string.feature_settings_dismiss_dialog_button_text, + ) @Before fun setup() = hiltRule.inject() diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt index 5d2e12b5c..5a231dd2b 100644 --- a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt @@ -37,11 +37,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. diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index 7c9dfcc7a..47cbf76e9 100644 --- a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -35,6 +35,9 @@ 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.util.TestNetworkMonitor import com.google.samples.apps.nowinandroid.core.testing.util.TestTimeZoneMonitor +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 @@ -42,9 +45,6 @@ import kotlinx.coroutines.test.runTest import kotlinx.datetime.TimeZone import org.junit.Rule import org.junit.Test -import kotlin.test.assertEquals -import kotlin.test.assertFalse -import kotlin.test.assertTrue /** * Tests [NiaAppState]. @@ -167,7 +167,9 @@ class NiaAppStateTest { } @Test - fun niaAppState_whenNetworkMonitorIsOffline_StateIsOffline() = runTest(UnconfinedTestDispatcher()) { + fun niaAppState_whenNetworkMonitorIsOffline_StateIsOffline() = runTest( + UnconfinedTestDispatcher(), + ) { composeTestRule.setContent { state = NiaAppState( navController = NavHostController(LocalContext.current), diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt index ad95c297f..bba0568f9 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt @@ -51,10 +51,10 @@ import com.google.samples.apps.nowinandroid.core.ui.LocalTimeZone import com.google.samples.apps.nowinandroid.ui.NiaApp import com.google.samples.apps.nowinandroid.ui.rememberNiaAppState 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 private const val TAG = "MainActivity" @@ -172,9 +172,7 @@ class MainActivity : ComponentActivity() { * Returns `true` if the Android theme should be used, as a function of the [uiState]. */ @Composable -private fun shouldUseAndroidTheme( - uiState: MainActivityUiState, -): Boolean = when (uiState) { +private fun shouldUseAndroidTheme(uiState: MainActivityUiState): Boolean = when (uiState) { Loading -> false is Success -> when (uiState.userData.themeBrand) { ThemeBrand.DEFAULT -> false @@ -186,9 +184,7 @@ 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) { +private fun shouldDisableDynamicTheming(uiState: MainActivityUiState): Boolean = when (uiState) { Loading -> false is Success -> !uiState.userData.useDynamicColor } @@ -198,9 +194,7 @@ private fun shouldDisableDynamicTheming( * current system context. */ @Composable -private fun shouldUseDarkTheme( - uiState: MainActivityUiState, -): Boolean = when (uiState) { +private fun shouldUseDarkTheme(uiState: MainActivityUiState): Boolean = when (uiState) { Loading -> isSystemInDarkTheme() is Success -> when (uiState.userData.darkThemeConfig) { DarkThemeConfig.FOLLOW_SYSTEM -> isSystemInDarkTheme() diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt index 09f4597a7..5eaac5217 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt @@ -23,11 +23,11 @@ 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( diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt index 56d1b6e24..565c76c09 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt @@ -42,8 +42,6 @@ object JankStatsModule { fun providesWindow(activity: Activity): Window = activity.window @Provides - fun providesJankStats( - window: Window, - frameListener: OnFrameListener, - ): JankStats = JankStats.createAndTrack(window, frameListener) + fun providesJankStats(window: Window, frameListener: OnFrameListener): JankStats = + JankStats.createAndTrack(window, frameListener) } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index eaed15a4e..272c00b34 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -114,7 +114,9 @@ fun NiaApp(appState: NiaAppState) { ) } - val unreadDestinations by appState.topLevelDestinationsWithUnreadResources.collectAsStateWithLifecycle() + val unreadDestinations by appState + .topLevelDestinationsWithUnreadResources + .collectAsStateWithLifecycle() Scaffold( modifier = Modifier.semantics { @@ -271,24 +273,23 @@ private fun NiaBottomBar( } } -private fun Modifier.notificationDot(): Modifier = - composed { - val tertiaryColor = MaterialTheme.colorScheme.tertiary - drawWithContent { - drawContent() - drawCircle( - tertiaryColor, - radius = 5.dp.toPx(), - // This is based on the dimensions of the NavigationBar's "indicator pill"; - // however, its parameters are private, so we must depend on them implicitly - // (NavigationBarTokens.ActiveIndicatorWidth = 64.dp) - center = center + Offset( - 64.dp.toPx() * .45f, - 32.dp.toPx() * -.45f - 6.dp.toPx(), - ), - ) - } +private fun Modifier.notificationDot(): Modifier = composed { + val tertiaryColor = MaterialTheme.colorScheme.tertiary + drawWithContent { + drawContent() + drawCircle( + tertiaryColor, + radius = 5.dp.toPx(), + // This is based on the dimensions of the NavigationBar's "indicator pill"; + // however, its parameters are private, so we must depend on them implicitly + // (NavigationBarTokens.ActiveIndicatorWidth = 64.dp) + center = center + Offset( + 64.dp.toPx() * .45f, + 32.dp.toPx() * -.45f - 6.dp.toPx(), + ), + ) } +} private fun NavDestination?.isTopLevelDestinationInHierarchy(destination: TopLevelDestination) = this?.hierarchy?.any { diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index b653d8910..19e90a19a 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -128,7 +128,9 @@ class NiaAppState( */ val topLevelDestinationsWithUnreadResources: StateFlow> = userNewsResourceRepository.observeAllForFollowedTopics() - .combine(userNewsResourceRepository.observeAllBookmarked()) { forYouNewsResources, bookmarkedNewsResources -> + .combine( + userNewsResourceRepository.observeAllBookmarked(), + ) { forYouNewsResources, bookmarkedNewsResources -> setOfNotNull( FOR_YOU.takeIf { forYouNewsResources.any { !it.hasBeenViewed } }, BOOKMARKS.takeIf { bookmarkedNewsResources.any { !it.hasBeenViewed } }, diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt index d618c2d47..825b03e72 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt @@ -20,8 +20,8 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import com.google.samples.apps.nowinandroid.feature.interests.navigation.TOPIC_ID_ARG import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.StateFlow import javax.inject.Inject +import kotlinx.coroutines.flow.StateFlow @HiltViewModel class Interests2PaneViewModel @Inject constructor( diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt index 335f83371..55ea6d137 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt @@ -60,9 +60,7 @@ fun NavGraphBuilder.interestsListDetailScreen() { } @Composable -internal fun InterestsListDetailScreen( - viewModel: Interests2PaneViewModel = hiltViewModel(), -) { +internal fun InterestsListDetailScreen(viewModel: Interests2PaneViewModel = hiltViewModel()) { val selectedTopicId by viewModel.selectedTopicId.collectAsStateWithLifecycle() InterestsListDetailScreen( selectedTopicId = selectedTopicId, @@ -72,10 +70,7 @@ internal fun InterestsListDetailScreen( @OptIn(ExperimentalMaterial3AdaptiveApi::class) @Composable -internal fun InterestsListDetailScreen( - selectedTopicId: String?, - onTopicClick: (String) -> Unit, -) { +internal fun InterestsListDetailScreen(selectedTopicId: String?, onTopicClick: (String) -> Unit) { val listDetailNavigator = rememberListDetailPaneScaffoldNavigator() BackHandler(listDetailNavigator.canNavigateBack()) { listDetailNavigator.navigateBack() diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt index 595166f03..bcfa9aa88 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt @@ -19,10 +19,10 @@ package com.google.samples.apps.nowinandroid.util import android.util.Log import androidx.profileinstaller.ProfileVerifier import com.google.samples.apps.nowinandroid.core.network.di.ApplicationScope +import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.guava.await import kotlinx.coroutines.launch -import javax.inject.Inject /** * Logs the app's Baseline Profile Compilation Status using [ProfileVerifier]. diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt index 83ca1bb3d..db0b0faad 100644 --- a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt @@ -45,6 +45,8 @@ import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltTestApplication +import java.util.TimeZone +import javax.inject.Inject import kotlinx.coroutines.flow.first import kotlinx.coroutines.runBlocking import org.junit.Before @@ -56,8 +58,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.annotation.GraphicsMode import org.robolectric.annotation.LooperMode -import java.util.TimeZone -import javax.inject.Inject /** * Tests that the navigation UI is rendered correctly on different screen sizes. diff --git a/core/designsystem/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt b/core/designsystem/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt index 92e94f4e5..0abaab928 100644 --- a/core/designsystem/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt +++ b/core/designsystem/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt @@ -42,9 +42,9 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradien 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.designsystem.theme.TintTheme +import kotlin.test.assertEquals import org.junit.Rule import org.junit.Test -import kotlin.test.assertEquals /** * Tests [NiaTheme] using different combinations of the theme mode parameters: diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt index 9ef52dd76..ac866df6b 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt @@ -48,10 +48,7 @@ import kotlin.math.tan * @param content The background content. */ @Composable -fun NiaBackground( - modifier: Modifier = Modifier, - content: @Composable () -> Unit, -) { +fun NiaBackground(modifier: Modifier = Modifier, content: @Composable () -> Unit) { val color = LocalBackgroundTheme.current.color val tonalElevation = LocalBackgroundTheme.current.tonalElevation Surface( diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt index ca168b4be..27771f771 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt @@ -51,10 +51,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import kotlinx.coroutines.launch @Composable -fun NiaLoadingWheel( - contentDesc: String, - modifier: Modifier = Modifier, -) { +fun NiaLoadingWheel(contentDesc: String, modifier: Modifier = Modifier) { val infiniteTransition = rememberInfiniteTransition(label = "wheel transition") // Specifies the float animation for slowly drawing out the lines on entering @@ -132,10 +129,7 @@ fun NiaLoadingWheel( } @Composable -fun NiaOverlayLoadingWheel( - contentDesc: String, - modifier: Modifier = Modifier, -) { +fun NiaOverlayLoadingWheel(contentDesc: String, modifier: Modifier = Modifier) { Surface( shape = RoundedCornerShape(60.dp), shadowElevation = 8.dp, diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt index 59f4f48a2..81f33b9fc 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt @@ -86,10 +86,7 @@ fun RowScope.NiaNavigationBarItem( * [NavigationBarItem]s. */ @Composable -fun NiaNavigationBar( - modifier: Modifier = Modifier, - content: @Composable RowScope.() -> Unit, -) { +fun NiaNavigationBar(modifier: Modifier = Modifier, content: @Composable RowScope.() -> Unit) { NavigationBar( modifier = modifier, contentColor = NiaNavigationDefaults.navigationContentColor(), diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt index 74753ca9b..9d269fbf4 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt @@ -80,11 +80,7 @@ fun NiaTab( * inside this lambda will be measured and placed evenly across the row, each taking up equal space. */ @Composable -fun NiaTabRow( - selectedTabIndex: Int, - modifier: Modifier = Modifier, - tabs: @Composable () -> Unit, -) { +fun NiaTabRow(selectedTabIndex: Int, modifier: Modifier = Modifier, tabs: @Composable () -> Unit) { TabRow( selectedTabIndex = selectedTabIndex, modifier = modifier, diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt index 1086e280b..1eedbf940 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt @@ -185,7 +185,8 @@ private data class ScrollThumbElement(val colorProducer: ColorProducer) : } } -private class ScrollThumbNode(var colorProducer: ColorProducer) : DrawModifierNode, Modifier.Node() { +private class ScrollThumbNode(var colorProducer: ColorProducer) : + DrawModifierNode, Modifier.Node() { private val shape = RoundedCornerShape(16.dp) // naive cache outline calculation if size is the same diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt index 002f36b31..6cc905583 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt @@ -54,12 +54,12 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.util.packFloats import androidx.compose.ui.util.unpackFloat1 import androidx.compose.ui.util.unpackFloat2 -import kotlinx.coroutines.TimeoutCancellationException -import kotlinx.coroutines.delay -import kotlinx.coroutines.withTimeout import kotlin.math.max import kotlin.math.min import kotlin.math.roundToInt +import kotlinx.coroutines.TimeoutCancellationException +import kotlinx.coroutines.delay +import kotlinx.coroutines.withTimeout /** * The delay between scrolls when a user long presses on the scrollbar track to initiate a scroll @@ -108,9 +108,7 @@ private val ScrollbarTrack.size /** * Returns the position of the scrollbar thumb on the track as a percentage */ -private fun ScrollbarTrack.thumbPosition( - dimension: Float, -): Float = max( +private fun ScrollbarTrack.thumbPosition(dimension: Float): Float = max( a = min( a = dimension / size, b = 1f, @@ -149,10 +147,7 @@ private value class ScrollbarTrack( * @param thumbMovedPercent the distance the thumb has traveled as a percentage of total * track size. */ -fun scrollbarStateValue( - thumbSizePercent: Float, - thumbMovedPercent: Float, -) = ScrollbarStateValue( +fun scrollbarStateValue(thumbSizePercent: Float, thumbMovedPercent: Float) = ScrollbarStateValue( packFloats( val1 = thumbSizePercent, val2 = thumbMovedPercent, diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt index 3fcc8f2c0..613e2a3bb 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt @@ -27,9 +27,9 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.runtime.snapshotFlow +import kotlin.math.min import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filterNotNull -import kotlin.math.min /** * Calculates a [ScrollbarState] driven by the changes in a [LazyListState]. diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt index a267ec2ec..e2dcb0723 100644 --- a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt @@ -33,24 +33,22 @@ import kotlin.math.roundToInt * @param itemsAvailable the amount of items in the list. */ @Composable -fun LazyListState.rememberDraggableScroller( - itemsAvailable: Int, -): (Float) -> Unit = rememberDraggableScroller( - itemsAvailable = itemsAvailable, - scroll = ::scrollToItem, -) +fun LazyListState.rememberDraggableScroller(itemsAvailable: Int): (Float) -> Unit = + rememberDraggableScroller( + itemsAvailable = itemsAvailable, + scroll = ::scrollToItem, + ) /** * Remembers a function to react to [Scrollbar] thumb position displacements for a [LazyGridState] * @param itemsAvailable the amount of items in the grid. */ @Composable -fun LazyGridState.rememberDraggableScroller( - itemsAvailable: Int, -): (Float) -> Unit = rememberDraggableScroller( - itemsAvailable = itemsAvailable, - scroll = ::scrollToItem, -) +fun LazyGridState.rememberDraggableScroller(itemsAvailable: Int): (Float) -> Unit = + rememberDraggableScroller( + itemsAvailable = itemsAvailable, + scroll = ::scrollToItem, + ) /** * Remembers a function to react to [Scrollbar] thumb position displacements for a @@ -58,12 +56,11 @@ fun LazyGridState.rememberDraggableScroller( * @param itemsAvailable the amount of items in the staggered grid. */ @Composable -fun LazyStaggeredGridState.rememberDraggableScroller( - itemsAvailable: Int, -): (Float) -> Unit = rememberDraggableScroller( - itemsAvailable = itemsAvailable, - scroll = ::scrollToItem, -) +fun LazyStaggeredGridState.rememberDraggableScroller(itemsAvailable: Int): (Float) -> Unit = + rememberDraggableScroller( + itemsAvailable = itemsAvailable, + scroll = ::scrollToItem, + ) /** * Generic function to react to [Scrollbar] thumb displacements in a lazy layout. diff --git a/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt b/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt index 99ba10fa7..54c351513 100644 --- a/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt +++ b/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt @@ -25,7 +25,5 @@ import dagger.hilt.components.SingletonComponent @InstallIn(SingletonComponent::class) internal abstract class NotificationsModule { @Binds - abstract fun bindNotifier( - notifier: NoOpNotifier, - ): Notifier + abstract fun bindNotifier(notifier: NoOpNotifier): Notifier } diff --git a/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt index a821d8bd2..e87d89532 100644 --- a/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt +++ b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt @@ -54,9 +54,7 @@ internal class SystemTrayNotifier @Inject constructor( @ApplicationContext private val context: Context, ) : Notifier { - override fun postNewsNotifications( - newsResources: List, - ) = with(context) { + override fun postNewsNotifications(newsResources: List) = with(context) { if (checkSelfPermission(this, permission.POST_NOTIFICATIONS) != PERMISSION_GRANTED) { return } @@ -150,20 +148,19 @@ private fun Context.ensureNotificationChannelExists() { NotificationManagerCompat.from(this).createNotificationChannel(channel) } -private fun Context.newsPendingIntent( - newsResource: NewsResource, -): PendingIntent? = PendingIntent.getActivity( - this, - NEWS_NOTIFICATION_REQUEST_CODE, - Intent().apply { - action = Intent.ACTION_VIEW - data = newsResource.newsDeepLinkUri() - component = ComponentName( - packageName, - TARGET_ACTIVITY_NAME, - ) - }, - PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, -) +private fun Context.newsPendingIntent(newsResource: NewsResource): PendingIntent? = + PendingIntent.getActivity( + this, + NEWS_NOTIFICATION_REQUEST_CODE, + Intent().apply { + action = Intent.ACTION_VIEW + data = newsResource.newsDeepLinkUri() + component = ComponentName( + packageName, + TARGET_ACTIVITY_NAME, + ) + }, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, + ) private fun NewsResource.newsDeepLinkUri() = "$DEEP_LINK_SCHEME_AND_HOST/$FOR_YOU_PATH/$id".toUri() diff --git a/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt b/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt index c2e1f76ca..8bc2d9c93 100644 --- a/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt +++ b/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt @@ -25,7 +25,5 @@ import dagger.hilt.components.SingletonComponent @InstallIn(SingletonComponent::class) internal abstract class NotificationsModule { @Binds - abstract fun bindNotifier( - notifier: SystemTrayNotifier, - ): Notifier + abstract fun bindNotifier(notifier: SystemTrayNotifier): Notifier } diff --git a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt index 09c739243..8ee84477c 100644 --- a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt +++ b/core/testing/src/main/kotlin/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/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt index 4f5d15be1..c48aa15db 100644 --- a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt @@ -39,7 +39,6 @@ internal object TestDispatchersModule { @Provides @Dispatcher(Default) - fun providesDefaultDispatcher( - testDispatcher: TestDispatcher, - ): CoroutineDispatcher = testDispatcher + fun providesDefaultDispatcher(testDispatcher: TestDispatcher): CoroutineDispatcher = + testDispatcher } diff --git a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt index 5436cd10f..3d5f0dd50 100644 --- a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt @@ -37,15 +37,19 @@ class TestSearchContentsRepository : SearchContentsRepository { combine(cachedTopics, cachedNewsResources) { topics, news -> SearchResult( topics = topics.filter { - searchQuery in it.name || searchQuery in it.shortDescription || searchQuery in it.longDescription + searchQuery in it.name || + searchQuery in it.shortDescription || + searchQuery in it.longDescription }, newsResources = news.filter { - searchQuery in it.content || searchQuery in it.title + searchQuery in it.content || + searchQuery in it.title }, ) } - override fun getSearchContentsCount(): Flow = combine(cachedTopics, cachedNewsResources) { topics, news -> topics.size + news.size } + override fun getSearchContentsCount(): Flow = + combine(cachedTopics, cachedNewsResources) { topics, news -> topics.size + news.size } @TestOnly fun addTopics(topics: List) = cachedTopics.update { it + topics } diff --git a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt index a9e2fa98f..1fcef80b5 100644 --- a/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt +++ b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt @@ -70,8 +70,10 @@ class SearchScreenTest { @Before fun setup() { composeTestRule.activity.apply { - clearSearchContentDesc = getString(R.string.feature_search_clear_search_text_content_desc) - clearRecentSearchesContentDesc = getString(R.string.feature_search_clear_recent_searches_content_desc) + clearSearchContentDesc = + getString(R.string.feature_search_clear_search_text_content_desc) + clearRecentSearchesContentDesc = + getString(R.string.feature_search_clear_recent_searches_content_desc) followButtonContentDesc = getString(string.core_ui_interests_card_follow_button_content_desc) unfollowButtonContentDesc = @@ -79,7 +81,8 @@ class SearchScreenTest { topicsString = getString(R.string.feature_search_topics) updatesString = getString(R.string.feature_search_updates) tryAnotherSearchString = getString(R.string.feature_search_try_another_search) + - " " + getString(R.string.feature_search_interests) + " " + getString(R.string.feature_search_to_browse_topics) + " " + getString(R.string.feature_search_interests) + + " " + getString(R.string.feature_search_to_browse_topics) searchNotReadyString = getString(R.string.feature_search_not_ready) } } diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt index 86b1eb717..361c329b0 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt @@ -180,7 +180,8 @@ internal fun SearchScreen( onSearchQueryChanged(it) onSearchTriggered(it) }, - recentSearchQueries = recentSearchesUiState.recentQueries.map { it.query }, + recentSearchQueries = + recentSearchesUiState.recentQueries.map { it.query }, ) } } else { @@ -202,15 +203,13 @@ internal fun SearchScreen( } @Composable -fun EmptySearchResultBody( - searchQuery: String, - onInterestsClick: () -> Unit, -) { +fun EmptySearchResultBody(searchQuery: String, onInterestsClick: () -> Unit) { Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(horizontal = 48.dp), ) { - val message = stringResource(id = searchR.string.feature_search_result_not_found, searchQuery) + val message = + stringResource(id = searchR.string.feature_search_result_not_found, searchQuery) val start = message.indexOf(searchQuery) Text( text = AnnotatedString( diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt index 6c2af240c..b6b03d3af 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt @@ -29,6 +29,7 @@ import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUs import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.catch @@ -37,7 +38,6 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch -import javax.inject.Inject @HiltViewModel class SearchViewModel @Inject constructor( @@ -133,13 +133,12 @@ class SearchViewModel @Inject constructor( } } -private fun AnalyticsHelper.logEventSearchTriggered(query: String) = - logEvent( - event = AnalyticsEvent( - type = SEARCH_QUERY, - extras = listOf(element = Param(key = SEARCH_QUERY, value = query)), - ), - ) +private fun AnalyticsHelper.logEventSearchTriggered(query: String) = logEvent( + event = AnalyticsEvent( + type = SEARCH_QUERY, + extras = listOf(element = Param(key = SEARCH_QUERY, value = query)), + ), +) /** Minimum length where search query is considered as [SearchResultUiState.EmptyQuery] */ private const val SEARCH_QUERY_MIN_LENGTH = 2 diff --git a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt index 81f3576b4..78bb756cf 100644 --- a/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt @@ -24,7 +24,10 @@ import com.google.samples.apps.nowinandroid.feature.search.SearchRoute const val SEARCH_ROUTE = "search_route" -fun NavController.navigateToSearch(navOptions: NavOptions? = null) = navigate(SEARCH_ROUTE, navOptions) +fun NavController.navigateToSearch(navOptions: NavOptions? = null) = navigate( + SEARCH_ROUTE, + navOptions, +) fun NavGraphBuilder.searchScreen( onBackClick: () -> Unit, diff --git a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt index c832401de..45dd1dfe8 100644 --- a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt +++ b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt @@ -31,6 +31,8 @@ import com.google.samples.apps.nowinandroid.feature.search.RecentSearchQueriesUi import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.EmptyQuery import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.Loading import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.SearchNotReady +import kotlin.test.assertEquals +import kotlin.test.assertIs import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch @@ -39,8 +41,6 @@ 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 diff --git a/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetector.kt b/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetector.kt index 532994d99..fe122fd8c 100644 --- a/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetector.kt +++ b/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetector.kt @@ -57,10 +57,7 @@ class TestMethodNameDetector : Detector(), SourceCodeScanner { private fun JavaContext.isAndroidTest() = Path("androidTest") in file.toPath() - private fun PsiMethod.detectPrefix( - context: JavaContext, - usageInfo: AnnotationUsageInfo, - ) { + private fun PsiMethod.detectPrefix(context: JavaContext, usageInfo: AnnotationUsageInfo) { if (!name.startsWith("test")) return context.report( issue = PREFIX, @@ -76,10 +73,7 @@ class TestMethodNameDetector : Detector(), SourceCodeScanner { ) } - private fun PsiMethod.detectFormat( - context: JavaContext, - usageInfo: AnnotationUsageInfo, - ) { + private fun PsiMethod.detectFormat(context: JavaContext, usageInfo: AnnotationUsageInfo) { if (!context.isAndroidTest()) return if ("""[^\W_]+(_[^\W_]+){1,2}""".toRegex().matches(name)) return context.report( @@ -92,22 +86,19 @@ class TestMethodNameDetector : Detector(), SourceCodeScanner { companion object { - private fun issue( - id: String, - briefDescription: String, - explanation: String, - ): Issue = Issue.create( - id = id, - briefDescription = briefDescription, - explanation = explanation, - category = TESTING, - priority = 5, - severity = WARNING, - implementation = Implementation( - TestMethodNameDetector::class.java, - EnumSet.of(JAVA_FILE, TEST_SOURCES), - ), - ) + private fun issue(id: String, briefDescription: String, explanation: String): Issue = + Issue.create( + id = id, + briefDescription = briefDescription, + explanation = explanation, + category = TESTING, + priority = 5, + severity = WARNING, + implementation = Implementation( + TestMethodNameDetector::class.java, + EnumSet.of(JAVA_FILE, TEST_SOURCES), + ), + ) @JvmField val PREFIX: Issue = issue( @@ -119,8 +110,10 @@ class TestMethodNameDetector : Detector(), SourceCodeScanner { @JvmField val FORMAT: Issue = issue( id = "TestMethodFormat", - briefDescription = "Test method does not follow the `given_when_then` or `when_then` format", - explanation = "Test method should follow the `given_when_then` or `when_then` format.", + briefDescription = "Test method does not follow " + + "the `given_when_then` or `when_then` format", + explanation = "Test method should follow " + + "the `given_when_then` or `when_then` format.", ) } } diff --git a/sync/work/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt b/sync/work/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt index 9c9d13510..4bcc19be8 100644 --- a/sync/work/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt +++ b/sync/work/src/androidTest/kotlin/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/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index 91ef476f6..81976f6f4 100644 --- a/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -34,7 +34,5 @@ abstract class SyncModule { ): SyncManager @Binds - internal abstract fun bindsSyncSubscriber( - syncSubscriber: StubSyncSubscriber, - ): SyncSubscriber + internal abstract fun bindsSyncSubscriber(syncSubscriber: StubSyncSubscriber): SyncSubscriber } diff --git a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt index d4b6e0df6..ee4468820 100644 --- a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt @@ -25,10 +25,10 @@ import com.google.samples.apps.nowinandroid.core.data.util.SyncManager import com.google.samples.apps.nowinandroid.sync.initializers.SYNC_WORK_NAME import com.google.samples.apps.nowinandroid.sync.workers.SyncWorker import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.map -import javax.inject.Inject /** * [SyncManager] backed by [WorkInfo] from [WorkManager] diff --git a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt index f2d9283c0..b3adc15f1 100644 --- a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt @@ -19,10 +19,9 @@ package com.google.samples.apps.nowinandroid.sync.workers import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper -internal fun AnalyticsHelper.logSyncStarted() = - logEvent( - AnalyticsEvent(type = "network_sync_started"), - ) +internal fun AnalyticsHelper.logSyncStarted() = logEvent( + AnalyticsEvent(type = "network_sync_started"), +) internal fun AnalyticsHelper.logSyncFinished(syncedSuccessfully: Boolean) { val eventType = if (syncedSuccessfully) "network_sync_successful" else "network_sync_failed" diff --git a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker.kt index 0114ad6ec..84f397dc9 100644 --- a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker.kt @@ -43,10 +43,9 @@ private const val WORKER_CLASS_NAME = "RouterWorkerDelegateClassName" * Adds metadata to a WorkRequest to identify what [CoroutineWorker] the [DelegatingWorker] should * delegate to */ -internal fun KClass.delegatedData() = - Data.Builder() - .putString(WORKER_CLASS_NAME, qualifiedName) - .build() +internal fun KClass.delegatedData() = Data.Builder() + .putString(WORKER_CLASS_NAME, qualifiedName) + .build() /** * A worker that delegates sync to another [CoroutineWorker] constructed with a [HiltWorkerFactory]. @@ -72,9 +71,7 @@ class DelegatingWorker( as? CoroutineWorker ?: throw IllegalArgumentException("Unable to find appropriate worker") - override suspend fun getForegroundInfo(): ForegroundInfo = - delegateWorker.getForegroundInfo() + override suspend fun getForegroundInfo(): ForegroundInfo = delegateWorker.getForegroundInfo() - override suspend fun doWork(): Result = - delegateWorker.doWork() + override suspend fun doWork(): Result = delegateWorker.doWork() } diff --git a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt index ea5f36042..cf07c3621 100644 --- a/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt @@ -60,8 +60,7 @@ internal class SyncWorker @AssistedInject constructor( private val syncSubscriber: SyncSubscriber, ) : CoroutineWorker(appContext, workerParams), Synchronizer { - override suspend fun getForegroundInfo(): ForegroundInfo = - appContext.syncForegroundInfo() + override suspend fun getForegroundInfo(): ForegroundInfo = appContext.syncForegroundInfo() override suspend fun doWork(): Result = withContext(ioDispatcher) { traceAsync("Sync", 0) { diff --git a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt index 2c48488e6..9e1966bdb 100644 --- a/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt @@ -18,8 +18,8 @@ package com.google.samples.apps.nowinandroid.sync.status import com.google.firebase.messaging.FirebaseMessaging import com.google.samples.apps.nowinandroid.sync.initializers.SYNC_TOPIC -import kotlinx.coroutines.tasks.await import javax.inject.Inject +import kotlinx.coroutines.tasks.await /** * Implementation of [SyncSubscriber] that subscribes to the FCM [SYNC_TOPIC]