From 7b36e8dde733e487b5f9b886be4ef75add862ea7 Mon Sep 17 00:00:00 2001 From: Thomas Kioko Date: Tue, 31 Oct 2023 20:24:45 +0100 Subject: [PATCH 1/7] Bump up dependency versions. --- gradle/libs.versions.toml | 47 ++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b071ffd50..d143aed23 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,55 +1,56 @@ [versions] -accompanist = "0.30.1" -agp = "8.0.2" +accompanist = "0.33.2-alpha" +agp = "8.1.2" appauth = "0.8.1" -atomicfu = "0.20.2" +atomicfu = "0.21.0" -androidx-activity = "1.7.1" +androidx-activity = "1.8.0" androidx-appCompat = "1.5.1" -androidx-browser = "1.5.0" -androidx-core = "1.10.1" -androidx-datastore = "1.1.0-alpha04" -androidx-lifecycle = "2.6.1" -androidx-material3 = "1.1.0-rc01" -androidx-navigation = "2.5.3" -navigation-compose = "1.0.0" +androidx-browser = "1.6.0" +androidx-core = "1.12.0" +androidx-datastore = "1.1.0-alpha05" +androidx-lifecycle = "2.6.2" +androidx-material3 = "1.1.2" +androidx-navigation = "2.7.4" androidx-palette = "1.0.0" -androidx-paging = "3.1.1" +androidx-paging = "3.2.1" androidx-work = "2.8.1" -coil = "2.3.0" -compileSdk = "33" -compose-bom = "2023.06.01" +coil = "2.4.0" +compose-bom = "2023.10.01" compose-constraintlayout= "1.0.1" -compose-paging = "1.0.0-alpha19" -compose-material = "1.4.3" -composecompiler = "1.4.7" -coroutines = "1.7.1" +compose-paging = "3.2.1" +compose-material = "1.5.4" +composecompiler = "1.5.3" +coroutines = "1.7.3" datetime = "0.4.0" detekt = "1.22.0" dependency-analysis = "1.13.1" dependency-check = "0.44.0" desugar = "2.0.3" -flowredux = "1.1.0" +flowredux = "1.2.0" junit = "4.13.2" kenburns = "1.0.7" kermit = "1.2.2" kmmbridge = "0.3.7" kotest = "5.5.4" -kotlin = "1.8.20" +kotlin = "1.9.10" kotlinx-collections = "0.3.5" kotlininject = "0.6.1" ktor = "2.3.2" -ksp = "1.8.21-1.0.11" +ksp = "1.9.10-1.0.13" lint = "1.2.0" shared-module-version = "0.8.0" snapper = "0.3.0" sqldelight = "2.0.0-rc01" store5 = "5.0.0-beta01" -turbine = "0.13.0" +turbine = "1.0.0" yamlkt = "0.12.0" youtubePlayer = "11.0.1" +android-compileSdk = "34" +android-minSdk = "23" + [libraries] android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" } android-gradle-tools = { group = "com.android.tools.build", name = "gradle", version.ref = "agp" } From 35c2f3edad071b1b341d3ab08a9ca3cd2eb60f20 Mon Sep 17 00:00:00 2001 From: Thomas Kioko Date: Tue, 31 Oct 2023 20:25:03 +0100 Subject: [PATCH 2/7] Extension plugins clean-up: - Update required params. - Bump up compileSdk version. --- .../plugins/src/main/kotlin/AndroidLibraryPlugin.kt | 8 +++++++- .../plugins/src/main/kotlin/ApplicationPlugin.kt | 13 +++++++++++-- .../plugins/src/main/kotlin/ComposeLibraryPlugin.kt | 9 ++++++++- .../main/kotlin/KotlinMultiplatformDomainPlugin.kt | 8 ++++++-- .../main/kotlin/KotlinMultiplatformLibraryPlugin.kt | 8 +++++++- .../tvmaniac/extensions/ComposeExtensions.kt | 7 +++++-- .../tvmaniac/extensions/KotlinAndroidExtensions.kt | 13 +++++++++---- .../extensions/KotlinMultiplatformExtensions.kt | 12 +++++++++--- .../tvmaniac/extensions/TvManiacBuildFlavor.kt | 2 +- 9 files changed, 63 insertions(+), 17 deletions(-) diff --git a/tooling/plugins/src/main/kotlin/AndroidLibraryPlugin.kt b/tooling/plugins/src/main/kotlin/AndroidLibraryPlugin.kt index 021b4e415..5e29cb33d 100644 --- a/tooling/plugins/src/main/kotlin/AndroidLibraryPlugin.kt +++ b/tooling/plugins/src/main/kotlin/AndroidLibraryPlugin.kt @@ -3,8 +3,10 @@ import com.thomaskioko.tvmaniac.extensions.configureFlavors import com.thomaskioko.tvmaniac.extensions.configureKotlinAndroid import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.getByType class AndroidLibraryPlugin : Plugin { override fun apply(target: Project) { @@ -15,9 +17,13 @@ class AndroidLibraryPlugin : Plugin { } extensions.configure { + val libs = extensions.getByType().named("libs") + val sdkVersion = libs.findVersion("android-compileSdk") + .get().toString().toInt() + configureKotlinAndroid(this) configureFlavors(this) - defaultConfig.targetSdk = 33 + defaultConfig.targetSdk = sdkVersion } configurations.configureEach { diff --git a/tooling/plugins/src/main/kotlin/ApplicationPlugin.kt b/tooling/plugins/src/main/kotlin/ApplicationPlugin.kt index be6fb64c4..82ce5b492 100644 --- a/tooling/plugins/src/main/kotlin/ApplicationPlugin.kt +++ b/tooling/plugins/src/main/kotlin/ApplicationPlugin.kt @@ -6,7 +6,9 @@ import com.thomaskioko.tvmaniac.extensions.configureKotlinAndroid import com.thomaskioko.tvmaniac.extensions.FlavorDimension import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.getByType @Suppress("UnstableApiUsage") class ApplicationPlugin : Plugin { @@ -19,9 +21,16 @@ class ApplicationPlugin : Plugin { } extensions.configure { + val libs = extensions.getByType().named("libs") + val sdkVersion = libs.findVersion("android-compileSdk") + .get().toString().toInt() + defaultConfig { - targetSdk = 33 - missingDimensionStrategy(FlavorDimension.contentType.name, TvManiacFlavor.demo.name) + targetSdk = sdkVersion + missingDimensionStrategy( + FlavorDimension.contentType.name, + TvManiacFlavor.demo.name + ) } buildFeatures { diff --git a/tooling/plugins/src/main/kotlin/ComposeLibraryPlugin.kt b/tooling/plugins/src/main/kotlin/ComposeLibraryPlugin.kt index 6f35284de..c54352a9f 100644 --- a/tooling/plugins/src/main/kotlin/ComposeLibraryPlugin.kt +++ b/tooling/plugins/src/main/kotlin/ComposeLibraryPlugin.kt @@ -3,7 +3,9 @@ import com.thomaskioko.tvmaniac.extensions.configureAndroidCompose import com.thomaskioko.tvmaniac.extensions.configureFlavors import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.getByType class ComposeLibraryPlugin : Plugin { override fun apply(target: Project) { @@ -15,7 +17,12 @@ class ComposeLibraryPlugin : Plugin { } extensions.configure { - compileSdk = 33 + val libs = extensions.getByType().named("libs") + val sdkVersion = libs.findVersion("android-compileSdk") + .get().toString().toInt() + + compileSdk = sdkVersion + configureAndroidCompose(this) configureFlavors(this) } diff --git a/tooling/plugins/src/main/kotlin/KotlinMultiplatformDomainPlugin.kt b/tooling/plugins/src/main/kotlin/KotlinMultiplatformDomainPlugin.kt index d1c31a96c..faa4d9084 100644 --- a/tooling/plugins/src/main/kotlin/KotlinMultiplatformDomainPlugin.kt +++ b/tooling/plugins/src/main/kotlin/KotlinMultiplatformDomainPlugin.kt @@ -18,8 +18,12 @@ class KotlinMultiplatformDomainPlugin : Plugin { } extensions.configure { - defaultConfig.targetSdk = 33 - compileSdk = 33 + val libs = extensions.getByType().named("libs") + val sdkVersion = libs.findVersion("android-compileSdk") + .get().toString().toInt() + + defaultConfig.targetSdk = 34 + compileSdk = sdkVersion compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 diff --git a/tooling/plugins/src/main/kotlin/KotlinMultiplatformLibraryPlugin.kt b/tooling/plugins/src/main/kotlin/KotlinMultiplatformLibraryPlugin.kt index 9449973fb..7229f5b7b 100644 --- a/tooling/plugins/src/main/kotlin/KotlinMultiplatformLibraryPlugin.kt +++ b/tooling/plugins/src/main/kotlin/KotlinMultiplatformLibraryPlugin.kt @@ -3,7 +3,9 @@ import com.thomaskioko.tvmaniac.extensions.configureFlavors import com.thomaskioko.tvmaniac.extensions.configureKotlinMultiplatform import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.getByType class KotlinMultiplatformLibraryPlugin : Plugin { override fun apply(target: Project) { @@ -14,8 +16,12 @@ class KotlinMultiplatformLibraryPlugin : Plugin { } extensions.configure { + val libs = extensions.getByType().named("libs") + val sdkVersion = libs.findVersion("android-compileSdk") + .get().toString().toInt() + configureKotlinMultiplatform(this) - defaultConfig.targetSdk = 33 + defaultConfig.targetSdk = sdkVersion configureFlavors(this) } diff --git a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/ComposeExtensions.kt b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/ComposeExtensions.kt index 151f6fbce..28f99e96d 100644 --- a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/ComposeExtensions.kt +++ b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/ComposeExtensions.kt @@ -9,14 +9,17 @@ import org.gradle.kotlin.dsl.getByType internal fun Project.configureAndroidCompose( - commonExtension: CommonExtension<*, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *>, ) { val libs = extensions.getByType().named("libs") commonExtension.apply { defaultConfig { - minSdk = 23 + val libs = extensions.getByType().named("libs") + val minSdkSdkVersion = libs.findVersion("android-minSdk").get().toString().toInt() + + minSdk = minSdkSdkVersion } compileOptions { diff --git a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/KotlinAndroidExtensions.kt b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/KotlinAndroidExtensions.kt index 91e113996..21ec49981 100644 --- a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/KotlinAndroidExtensions.kt +++ b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/KotlinAndroidExtensions.kt @@ -11,13 +11,18 @@ import org.gradle.kotlin.dsl.provideDelegate import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions internal fun Project.configureKotlinAndroid( - commonExtension: CommonExtension<*, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *>, ) { + commonExtension.apply { - compileSdk = 33 + val libs = extensions.getByType().named("libs") + val sdkVersion = libs.findVersion("android-compileSdk").get().toString().toInt() + val minSdkVersion = libs.findVersion("android-minSdk").get().toString().toInt() + + compileSdk = sdkVersion defaultConfig { - minSdk = 23 + minSdk = minSdkVersion manifestPlaceholders["appAuthRedirectScheme"] = "empty" } @@ -51,6 +56,6 @@ internal fun Project.configureKotlinAndroid( } } -fun CommonExtension<*, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { +fun CommonExtension<*, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { (this as ExtensionAware).extensions.configure("kotlinOptions", block) } diff --git a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/KotlinMultiplatformExtensions.kt b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/KotlinMultiplatformExtensions.kt index f47205c67..497241258 100644 --- a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/KotlinMultiplatformExtensions.kt +++ b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/KotlinMultiplatformExtensions.kt @@ -3,16 +3,22 @@ package com.thomaskioko.tvmaniac.extensions import com.android.build.api.dsl.CommonExtension import org.gradle.api.JavaVersion import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.kotlin.dsl.getByType @Suppress("UnstableApiUsage") internal fun Project.configureKotlinMultiplatform( - commonExtension: CommonExtension<*, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *>, ) { commonExtension.apply { - compileSdk = 33 + val libs = extensions.getByType().named("libs") + val minSdkSdkVersion = libs.findVersion("android-minSdk").get().toString().toInt() + val sdkVersion = libs.findVersion("android-compileSdk") + .get().toString().toInt() defaultConfig { - minSdk = 23 + minSdk = minSdkSdkVersion + compileSdk = sdkVersion manifestPlaceholders["appAuthRedirectScheme"] = "empty" } diff --git a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/TvManiacBuildFlavor.kt b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/TvManiacBuildFlavor.kt index afc65156b..e5964a9d7 100644 --- a/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/TvManiacBuildFlavor.kt +++ b/tooling/plugins/src/main/kotlin/com/thomaskioko/tvmaniac/extensions/TvManiacBuildFlavor.kt @@ -17,7 +17,7 @@ enum class TvManiacFlavor(val dimension: FlavorDimension, val applicationIdSuffi } fun Project.configureFlavors( - commonExtension: CommonExtension<*, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *>, flavorConfigurationBlock: ProductFlavor.(flavor: TvManiacFlavor) -> Unit = {} ) { commonExtension.apply { From 7104026656451c47e1d62c17e1968cd4dca7e098 Mon Sep 17 00:00:00 2001 From: Thomas Kioko Date: Tue, 31 Oct 2023 20:27:36 +0100 Subject: [PATCH 3/7] Update rememberPagerState after bumping up dependencies. --- .../com/thomaskioko/tvmaniac/discover/DiscoverScreen.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/android-features/discover/src/main/java/com/thomaskioko/tvmaniac/discover/DiscoverScreen.kt b/android-features/discover/src/main/java/com/thomaskioko/tvmaniac/discover/DiscoverScreen.kt index d8c2d10f1..13de8be21 100644 --- a/android-features/discover/src/main/java/com/thomaskioko/tvmaniac/discover/DiscoverScreen.kt +++ b/android-features/discover/src/main/java/com/thomaskioko/tvmaniac/discover/DiscoverScreen.kt @@ -114,7 +114,9 @@ internal fun DiscoverScreen( onMoreClicked: (showType: Long) -> Unit, ) { val discoverViewState by viewModel.state.collectAsStateWithLifecycle() - val pagerState = rememberPagerState() + val pagerState = rememberPagerState(pageCount = { + (discoverViewState as? DataLoaded)?.recommendedShows?.size ?: 0 + }) val snackBarHostState = remember { SnackbarHostState() } DiscoverScreen( @@ -360,7 +362,6 @@ fun HorizontalPagerItem( ), ) { HorizontalPager( - pageCount = list.size, state = pagerState, beyondBoundsPageCount = 2, contentPadding = PaddingValues(horizontal = 45.dp), @@ -483,7 +484,7 @@ private fun DiscoverScreenPreview( TvManiacTheme { TvManiacBackground { Surface(Modifier.fillMaxWidth()) { - val pagerState = rememberPagerState() + val pagerState = rememberPagerState(pageCount = { 5 }) val snackBarHostState = remember { SnackbarHostState() } DiscoverScreen( state = state, From cf7d3fe95179ca765d2f612c952cd66e0920a996 Mon Sep 17 00:00:00 2001 From: Thomas Kioko Date: Wed, 1 Nov 2023 09:37:58 +0100 Subject: [PATCH 4/7] Delete deprecated accompanist dependencies. --- android-core/designsystem/build.gradle.kts | 1 - android-features/profile/build.gradle.kts | 1 - android-features/settings/build.gradle.kts | 1 - android-features/show-details/build.gradle.kts | 2 -- android-features/shows-grid/build.gradle.kts | 1 - android-features/trailers/build.gradle.kts | 2 -- android-features/watchlist/build.gradle.kts | 1 - app/build.gradle.kts | 1 - gradle/libs.versions.toml | 2 -- 9 files changed, 12 deletions(-) diff --git a/android-core/designsystem/build.gradle.kts b/android-core/designsystem/build.gradle.kts index d4fd47154..503350b8f 100644 --- a/android-core/designsystem/build.gradle.kts +++ b/android-core/designsystem/build.gradle.kts @@ -18,7 +18,6 @@ dependencies { implementation(projects.androidCore.resources) implementation(libs.kenburns) - implementation(libs.accompanist.insetsui) implementation(libs.androidx.core) implementation(libs.androidx.compose.foundation) implementation(libs.androidx.compose.material.icons) diff --git a/android-features/profile/build.gradle.kts b/android-features/profile/build.gradle.kts index a68cda9e3..01246625f 100644 --- a/android-features/profile/build.gradle.kts +++ b/android-features/profile/build.gradle.kts @@ -12,7 +12,6 @@ dependencies { implementation(libs.flowredux) implementation(libs.snapper) - implementation(libs.accompanist.insetsui) implementation(libs.androidx.compose.constraintlayout) implementation(libs.androidx.compose.material.icons) } diff --git a/android-features/settings/build.gradle.kts b/android-features/settings/build.gradle.kts index 4cba9f6e6..d9f714e41 100644 --- a/android-features/settings/build.gradle.kts +++ b/android-features/settings/build.gradle.kts @@ -12,7 +12,6 @@ dependencies { implementation(projects.data.shows.api) implementation(projects.presentation.settings) - implementation(libs.accompanist.insetsui) implementation(libs.flowredux) } diff --git a/android-features/show-details/build.gradle.kts b/android-features/show-details/build.gradle.kts index 8fa06267b..4560f5043 100644 --- a/android-features/show-details/build.gradle.kts +++ b/android-features/show-details/build.gradle.kts @@ -9,8 +9,6 @@ android { dependencies { api(projects.presentation.showDetails) - implementation(libs.accompanist.insetsui) - implementation(libs.accompanist.navigation.material) implementation(libs.androidx.compose.constraintlayout) implementation(libs.androidx.compose.material.icons) implementation(libs.flowredux) diff --git a/android-features/shows-grid/build.gradle.kts b/android-features/shows-grid/build.gradle.kts index 7cbbf5b83..0d3bae79c 100644 --- a/android-features/shows-grid/build.gradle.kts +++ b/android-features/shows-grid/build.gradle.kts @@ -12,5 +12,4 @@ dependencies { implementation(libs.androidx.compose.paging) implementation(libs.flowredux) - implementation(libs.accompanist.insetsui) } diff --git a/android-features/trailers/build.gradle.kts b/android-features/trailers/build.gradle.kts index ae892dd60..8a4d6e5b3 100644 --- a/android-features/trailers/build.gradle.kts +++ b/android-features/trailers/build.gradle.kts @@ -9,8 +9,6 @@ android { dependencies { api(projects.presentation.trailers) - implementation(libs.accompanist.insetsui) - implementation(libs.accompanist.navigation.material) implementation(libs.androidx.compose.constraintlayout) implementation(libs.flowredux) implementation(libs.youtubePlayer) diff --git a/android-features/watchlist/build.gradle.kts b/android-features/watchlist/build.gradle.kts index 528902504..9cb008946 100644 --- a/android-features/watchlist/build.gradle.kts +++ b/android-features/watchlist/build.gradle.kts @@ -10,6 +10,5 @@ dependencies { implementation(projects.data.shows.api) implementation(projects.presentation.watchlist) - implementation(libs.accompanist.insetsui) implementation(libs.flowredux) } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a3d4478a7..820329ac4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -90,7 +90,6 @@ dependencies { implementation(projects.presentation.showDetails) implementation(projects.presentation.trailers) - implementation(libs.accompanist.systemuicontroller) implementation(libs.androidx.compose.activity) implementation(libs.appauth) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d143aed23..c3630d65d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -56,8 +56,6 @@ android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs android-gradle-tools = { group = "com.android.tools.build", name = "gradle", version.ref = "agp" } kotlin-gradle = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } -accompanist-insetsui = { module = "com.google.accompanist:accompanist-insets-ui", version.ref = "accompanist" } -accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" } accompanist-navigation-material = { module = "com.google.accompanist:accompanist-navigation-material", version.ref = "accompanist" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" } From c0e77dde4f89e210af3109dd78870dd2e3c44e2e Mon Sep 17 00:00:00 2001 From: Thomas Kioko Date: Wed, 1 Nov 2023 15:25:14 +0100 Subject: [PATCH 5/7] Migrate to splash screen implementation --- app/src/main/AndroidManifest.xml | 2 +- .../com/thomaskioko/tvmaniac/MainActivity.kt | 89 +++++++++++++++++-- .../tvmaniac/MainActivityViewModel.kt | 19 ++-- app/src/main/res/values-night/themes.xml | 6 +- app/src/main/res/values/themes.xml | 11 ++- gradle/libs.versions.toml | 4 +- 6 files changed, 108 insertions(+), 23 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7fe09aa03..6f0990f6b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,7 +12,7 @@ android:icon="@drawable/ic_app_launcher" android:label="Tv Maniac" android:supportsRtl="true" - android:theme="@style/Theme.TvManiac"> + android:theme="@style/Theme.TvManiac.Splash"> true + is DataLoaded -> false + } + } - val systemUiController = rememberSystemUiController() - val darkTheme = state.value.theme.shouldUseDarkColors() + enableEdgeToEdge() - DisposableEffect(systemUiController, darkTheme) { - systemUiController.systemBarsDarkContentEnabled = !darkTheme + setContent { + val darkTheme = shouldUseDarkTheme(uiState) + + DisposableEffect(darkTheme) { + enableEdgeToEdge( + statusBarStyle = SystemBarStyle.auto( + Color.TRANSPARENT, + Color.TRANSPARENT, + ) { darkTheme }, + navigationBarStyle = SystemBarStyle.auto( + lightScrim, + darkScrim, + ) { darkTheme }, + ) onDispose {} } @@ -56,3 +99,31 @@ class MainActivity : ComponentActivity() { } } } + +/** + * Returns `true` if dark theme should be used, as a function of the [uiState] and the + * current system context. + */ +@Composable +private fun shouldUseDarkTheme( + uiState: MainActivityUiState, +): Boolean = when (uiState) { + Loading -> isSystemInDarkTheme() + is DataLoaded -> when (uiState.theme) { + Theme.LIGHT -> false + Theme.DARK -> true + Theme.SYSTEM -> isSystemInDarkTheme() + } +} + +/** + * The default light scrim, as defined by androidx and the platform: + * https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity/src/main/java/androidx/activity/EdgeToEdge.kt;l=35-38;drc=27e7d52e8604a080133e8b842db10c89b4482598 + */ +private val lightScrim = Color.argb(0xe6, 0xFF, 0xFF, 0xFF) + +/** + * The default dark scrim, as defined by androidx and the platform: + * https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity/src/main/java/androidx/activity/EdgeToEdge.kt;l=40-44;drc=27e7d52e8604a080133e8b842db10c89b4482598 + */ +private val darkScrim = Color.argb(0x80, 0x1b, 0x1b, 0x1b) diff --git a/app/src/main/kotlin/com/thomaskioko/tvmaniac/MainActivityViewModel.kt b/app/src/main/kotlin/com/thomaskioko/tvmaniac/MainActivityViewModel.kt index 648d80c4f..9d7182469 100644 --- a/app/src/main/kotlin/com/thomaskioko/tvmaniac/MainActivityViewModel.kt +++ b/app/src/main/kotlin/com/thomaskioko/tvmaniac/MainActivityViewModel.kt @@ -15,19 +15,20 @@ class MainActivityViewModel( datastoreRepository: DatastoreRepository, ) : ViewModel() { - val state: StateFlow = datastoreRepository.observeTheme() + val state: StateFlow = datastoreRepository.observeTheme() .map { theme -> - MainState( - theme = theme, - ) + MainActivityUiState.DataLoaded(theme = theme) } .stateIn( scope = viewModelScope, - started = SharingStarted.WhileSubscribed(), - initialValue = MainState(), + started = SharingStarted.WhileSubscribed(5_000), + initialValue = MainActivityUiState.Loading, ) } -data class MainState( - val theme: Theme = Theme.SYSTEM, -) +sealed interface MainActivityUiState { + data object Loading: MainActivityUiState + data class DataLoaded( + val theme: Theme = Theme.SYSTEM, + ) : MainActivityUiState +} diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 2b2fe32c2..8b869c6d1 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,8 +1,10 @@ - diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 19a144cfc..1371d25fe 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,7 +1,7 @@ @@ -11,5 +11,14 @@ + + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c3630d65d..e41baddbb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,6 +8,7 @@ androidx-activity = "1.8.0" androidx-appCompat = "1.5.1" androidx-browser = "1.6.0" androidx-core = "1.12.0" +androidx-core-splashscreen = "1.0.1" androidx-datastore = "1.1.0-alpha05" androidx-lifecycle = "2.6.2" androidx-material3 = "1.1.2" @@ -49,7 +50,7 @@ yamlkt = "0.12.0" youtubePlayer = "11.0.1" android-compileSdk = "34" -android-minSdk = "23" +android-minSdk = "21" [libraries] android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" } @@ -75,6 +76,7 @@ androidx-compose-material3 = { group = "androidx.compose.material3", name = "mat androidx-compose-material3-windowSizeClass = { group = "androidx.compose.material3", name = "material3-window-size-class", version.ref = "androidx-material3" } androidx-compose-paging = { module = "androidx.paging:paging-compose", version.ref = "compose-paging" } androidx-core = { module = "androidx.core:core-ktx", version.ref = "androidx-core" } +androidx-core-splashscreen = { group = "androidx.core", name = "core-splashscreen", version.ref = "androidx-core-splashscreen" } androidx-datastore-preference = { module = "androidx.datastore:datastore-preferences-core", version.ref = "androidx-datastore" } androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } From 858dad562ceec72c1f19efc8d0a1d0887bc52907 Mon Sep 17 00:00:00 2001 From: Thomas Kioko Date: Wed, 1 Nov 2023 17:34:09 +0100 Subject: [PATCH 6/7] Migrate to material3 --- .../tvmaniac/compose/components/Buttons.kt | 5 +- .../tvmaniac/compose/components/Card.kt | 2 +- .../tvmaniac/compose/components/Chip.kt | 2 +- .../compose/components/ErrorLayout.kt | 3 +- .../tvmaniac/compose/components/Navigation.kt | 68 +++++++++ .../tvmaniac/compose/components/Text.kt | 7 +- .../tvmaniac/compose/components/TopBar.kt | 55 +++++--- .../tvmaniac/compose/theme/Colors.kt | 2 + .../tvmaniac/compose/theme/Theme.kt | 4 +- .../tvmaniac/compose/theme/Type.kt | 105 ++++++++++---- .../resources/src/main/res/values/strings.xml | 2 +- android-features/discover/build.gradle.kts | 2 +- .../tvmaniac/discover/DiscoverScreen.kt | 3 - android-features/home/build.gradle.kts | 2 +- .../thomaskioko/tvmaniac/home/HomeScreen.kt | 52 ++----- .../tvmaniac/profile/ProfileScreen.kt | 6 +- .../thomaskioko/tvmaniac/search/SearchBar.kt | 1 - .../tvmaniac/search/SearchScreen.kt | 37 +++-- .../seasondetails/SeasonDetailsScreen.kt | 4 +- .../seasondetails/components/WatchNextList.kt | 3 +- .../tvmaniac/settings/SettingsScreen.kt | 89 ++++++------ .../showdetails/ShowDetailScreen.kt | 132 ++++++++---------- .../tvmaniac/showsgrid/ShowsGridScreen.kt | 2 - .../tvmaniac/videoplayer/TrailersScreen.kt | 4 +- .../tvmaniac/watchlist/WatchlistScreen.kt | 3 +- app/build.gradle.kts | 1 + gradle/libs.versions.toml | 1 - 27 files changed, 352 insertions(+), 245 deletions(-) create mode 100644 android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Navigation.kt diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Buttons.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Buttons.kt index 417e2c983..e69072195 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Buttons.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Buttons.kt @@ -10,7 +10,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Text +import androidx.compose.material3.Text import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.MaterialTheme @@ -24,6 +24,7 @@ import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.graphics.Shape import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.thomaskioko.tvmaniac.compose.theme.TvManiacTheme @@ -54,7 +55,7 @@ fun TvManiacOutlinedButton( onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, - textPadding: Dp = 4.dp, + textPadding: Dp = 0.dp, borderColor: Color = MaterialTheme.colorScheme.secondary, leadingIcon: @Composable (() -> Unit)? = null, ) { diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Card.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Card.kt index 765f689a2..05d96a102 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Card.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Card.kt @@ -7,7 +7,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width -import androidx.compose.material.Text +import androidx.compose.material3.Text import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.MaterialTheme diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Chip.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Chip.kt index 20c95de1d..8a094bf9d 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Chip.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Chip.kt @@ -2,7 +2,7 @@ package com.thomaskioko.tvmaniac.compose.components import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Text +import androidx.compose.material3.Text import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/ErrorLayout.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/ErrorLayout.kt index f2d1460b3..7d46eb41e 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/ErrorLayout.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/ErrorLayout.kt @@ -16,7 +16,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.material.Icon +import androidx.compose.material3.Icon import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Collections import androidx.compose.material.icons.outlined.ErrorOutline @@ -57,7 +57,6 @@ fun ConnectionStatus( Box( modifier = modifier .background(backgroundColor) - .statusBarsPadding() .fillMaxWidth() .padding(8.dp), contentAlignment = Alignment.TopCenter, diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Navigation.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Navigation.kt new file mode 100644 index 000000000..5b750dade --- /dev/null +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Navigation.kt @@ -0,0 +1,68 @@ +package com.thomaskioko.tvmaniac.compose.components + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.NavigationBarItemDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp + + +@Composable +fun TvManiacNavigationBar( + modifier: Modifier = Modifier, + content: @Composable RowScope.() -> Unit, +) { + NavigationBar( + modifier = modifier, + contentColor = NavigationDefaultColors.navigationContentColor(), + tonalElevation = 8.dp, + content = content, + ) +} + +@Composable +fun RowScope.TvManiacBottomNavigationItem( + imageVector: ImageVector, + title: String, + selected: Boolean, + modifier: Modifier = Modifier, + onClick: () -> Unit, +) { + NavigationBarItem( + modifier = modifier, + icon = { + Icon( + imageVector = imageVector, + contentDescription = title, + ) + }, + label = { Text(title) }, + selected = selected, + alwaysShowLabel = true, + colors = NavigationBarItemDefaults.colors( + selectedIconColor = NavigationDefaultColors.navigationSelectedItemColor(), + unselectedIconColor = NavigationDefaultColors.navigationContentColor(), + selectedTextColor = NavigationDefaultColors.navigationSelectedItemColor(), + unselectedTextColor = NavigationDefaultColors.navigationContentColor(), + indicatorColor = NavigationDefaultColors.navigationIndicatorColor(), + ), + onClick = onClick, + ) +} + +object NavigationDefaultColors { + @Composable + fun navigationContentColor() = MaterialTheme.colorScheme.onSurfaceVariant + + @Composable + fun navigationSelectedItemColor() = MaterialTheme.colorScheme.secondary + + @Composable + fun navigationIndicatorColor() = MaterialTheme.colorScheme.primaryContainer +} diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Text.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Text.kt index 0b628d8ee..6f73f682c 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Text.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Text.kt @@ -6,8 +6,8 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.Text +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Text import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable @@ -18,6 +18,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight.Companion.Bold import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -98,6 +99,7 @@ fun TextLoadingItem( fun ExpandingText( text: String, modifier: Modifier = Modifier, + fontWeight: FontWeight = FontWeight.Normal, textStyle: TextStyle = MaterialTheme.typography.bodyMedium, expandable: Boolean = true, collapsedMaxLines: Int = 4, @@ -109,6 +111,7 @@ fun ExpandingText( Text( text = text, style = textStyle, + fontWeight = fontWeight, overflow = TextOverflow.Ellipsis, color = MaterialTheme.colorScheme.onSurface, maxLines = if (expanded) expandedMaxLines else collapsedMaxLines, diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/TopBar.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/TopBar.kt index 59074e512..8a4a8a224 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/TopBar.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/TopBar.kt @@ -8,39 +8,44 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBars -import androidx.compose.material.Icon -import androidx.compose.material.IconButton -import androidx.compose.material.Text -import androidx.compose.material.TopAppBar +import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.Settings +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarColors +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.vector.ImageVector 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.TextOverflow +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import com.google.accompanist.insets.ui.TopAppBar import com.thomaskioko.tvmaniac.compose.extensions.iconButtonBackgroundScrim import com.thomaskioko.tvmaniac.compose.theme.TvManiacTheme import com.thomaskioko.tvmaniac.resources.R +@OptIn(ExperimentalMaterial3Api::class) @Composable fun TvManiacTopBar( modifier: Modifier = Modifier, - backgroundColor: Color = MaterialTheme.colorScheme.background, + elevation: Dp = 0.dp, + colors: TopAppBarColors = TopAppBarDefaults.centerAlignedTopAppBarColors(), title: String? = null, showNavigationIcon: Boolean = false, actionImageVector: ImageVector? = null, @@ -48,11 +53,13 @@ fun TvManiacTopBar( onBackClick: () -> Unit = {}, ) { TopAppBar( + modifier = modifier + .shadow(elevation = elevation), title = { if (title != null) { Text( text = title, - style = MaterialTheme.typography.headlineSmall.copy( + style = MaterialTheme.typography.titleSmall.copy( color = MaterialTheme.colorScheme.onSurface, ), maxLines = 1, @@ -67,13 +74,13 @@ fun TvManiacTopBar( painter = painterResource(R.drawable.ic_baseline_arrow_back_24), contentDescription = null, colorFilter = ColorFilter.tint(color = MaterialTheme.colorScheme.onSurface), - modifier = modifier + modifier = Modifier .clickable(onClick = onBackClick) .padding(16.dp), ) } }, - backgroundColor = backgroundColor, + colors = colors, actions = { if (actionImageVector != null) { IconButton( @@ -90,6 +97,7 @@ fun TvManiacTopBar( ) } +@OptIn(ExperimentalMaterial3Api::class) @Composable fun CollapsableAppBar( title: String?, @@ -118,25 +126,21 @@ fun CollapsableAppBar( TopAppBar( title = { Crossfade( - showAppBarBackground && title != null, + targetState = showAppBarBackground && title != null, label = "titleAnimation", ) { show -> if (show) { Text( - text = title!!, - style = MaterialTheme.typography.headlineSmall.copy( + text = title ?: "", + style = MaterialTheme.typography.titleMedium.copy( color = MaterialTheme.colorScheme.onSurface, ), maxLines = 1, overflow = TextOverflow.Ellipsis, - fontWeight = FontWeight.Bold, ) } } }, - contentPadding = WindowInsets.systemBars - .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top) - .asPaddingValues(), navigationIcon = { IconButton( onClick = onNavIconPressed, @@ -149,12 +153,19 @@ fun CollapsableAppBar( ) } }, - elevation = elevation, - backgroundColor = backgroundColor, - modifier = modifier, + colors = TopAppBarDefaults.centerAlignedTopAppBarColors( + containerColor = backgroundColor, + ), + modifier = modifier + .windowInsetsPadding( + WindowInsets.systemBars + .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top) + ) + .shadow(elevation = elevation), ) } +@OptIn(ExperimentalMaterial3Api::class) @ThemePreviews @Composable private fun TopBarPreview() { @@ -166,6 +177,7 @@ private fun TopBarPreview() { } } +@OptIn(ExperimentalMaterial3Api::class) @ThemePreviews @Composable private fun TopBarActionPreview() { @@ -178,6 +190,7 @@ private fun TopBarActionPreview() { } } +@OptIn(ExperimentalMaterial3Api::class) @ThemePreviews @Composable private fun TopBarScrimPreview() { diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Colors.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Colors.kt index 7b1788388..9b24f9894 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Colors.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Colors.kt @@ -11,6 +11,7 @@ import kotlin.math.min val green = Color(0xFF00b300) val md_theme_light_primary = Color(0xFF0049c7) +val md_theme_light_primaryContainer = Color(0xFFdbe8f8) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_secondary = Color(0xFF3947EA) val md_theme_light_onSecondary = Color(0xFFFFFFFF) @@ -22,6 +23,7 @@ val md_theme_light_onSurface = Color(0xFF1F2123) val md_theme_light_outline = Color(0xFF1646F7) val md_theme_dark_primary = Color(0xFF1F2123) +val md_theme_dark_primaryContainer = Color(0xFF1F2123) val md_theme_dark_onPrimary = Color(0xFFE0E0FF) val md_theme_dark_secondary = Color(0xFFF7d633) val md_theme_dark_onSecondary = Color(0xFFFFFFFF) diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Theme.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Theme.kt index 094a88ea9..a949932c5 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Theme.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Theme.kt @@ -11,6 +11,7 @@ import androidx.compose.ui.unit.dp private val LightColorScheme = lightColorScheme( primary = md_theme_light_primary, onPrimary = md_theme_light_onPrimary, + primaryContainer = md_theme_light_primaryContainer, secondary = md_theme_light_secondary, onSecondary = md_theme_light_onSecondary, error = md_theme_light_error, @@ -24,6 +25,7 @@ private val LightColorScheme = lightColorScheme( private val DarkColorScheme = darkColorScheme( primary = md_theme_dark_primary, onPrimary = md_theme_dark_onPrimary, + primaryContainer = md_theme_dark_primaryContainer, secondary = md_theme_dark_secondary, onSecondary = md_theme_dark_onSecondary, error = md_theme_dark_error, @@ -51,8 +53,8 @@ fun TvManiacTheme( ) { MaterialTheme( colorScheme = colorScheme, + typography = tvManiacTypography, content = content, - // TODO:: Add Typography ) } } diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Type.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Type.kt index 208e0aa70..3c6c65d81 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Type.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Type.kt @@ -1,6 +1,6 @@ package com.thomaskioko.tvmaniac.compose.theme -import androidx.compose.material.Typography +import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily @@ -36,58 +36,113 @@ private val workSansFontFamily = FontFamily( weight = FontWeight.W700, style = FontStyle.Normal, ), - ), ) -val TvManiacTypography = Typography( - h4 = TextStyle( +val tvManiacTypography = Typography( + displayLarge = TextStyle( + fontFamily = workSansFontFamily, + fontWeight = FontWeight.Normal, + fontSize = 57.sp, + lineHeight = 64.sp, + letterSpacing = (-0.25).sp, + ), + displayMedium = TextStyle( + fontFamily = workSansFontFamily, + fontWeight = FontWeight.Normal, + fontSize = 45.sp, + lineHeight = 52.sp, + letterSpacing = 0.sp, + ), + displaySmall = TextStyle( + fontFamily = workSansFontFamily, + fontWeight = FontWeight.Normal, + fontSize = 36.sp, + lineHeight = 44.sp, + letterSpacing = 0.sp, + ), + headlineLarge = TextStyle( + fontFamily = workSansFontFamily, + fontWeight = FontWeight.SemiBold, + fontSize = 32.sp, + lineHeight = 40.sp, + letterSpacing = 0.sp + ), + headlineMedium = TextStyle( fontFamily = workSansFontFamily, - fontWeight = FontWeight.W600, - fontSize = 30.sp, + fontWeight = FontWeight.SemiBold, + fontSize = 28.sp, + lineHeight = 36.sp, + letterSpacing = 0.sp ), - h5 = TextStyle( + headlineSmall = TextStyle( fontFamily = workSansFontFamily, - fontWeight = FontWeight.W600, + fontWeight = FontWeight.SemiBold, fontSize = 24.sp, + lineHeight = 32.sp, + letterSpacing = 0.sp ), - h6 = TextStyle( + titleLarge = TextStyle( fontFamily = workSansFontFamily, - fontWeight = FontWeight.W600, - fontSize = 20.sp, + fontWeight = FontWeight.SemiBold, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp ), - subtitle1 = TextStyle( + titleMedium = TextStyle( fontFamily = workSansFontFamily, - fontWeight = FontWeight.W600, + fontWeight = FontWeight.SemiBold, fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.15.sp ), - subtitle2 = TextStyle( + titleSmall = TextStyle( fontFamily = workSansFontFamily, - fontWeight = FontWeight.W500, + fontWeight = FontWeight.Bold, fontSize = 14.sp, + lineHeight = 20.sp, + letterSpacing = 0.1.sp ), - body1 = TextStyle( + bodyLarge = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.Normal, fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.15.sp ), - body2 = TextStyle( + bodyMedium = TextStyle( fontFamily = workSansFontFamily, + fontWeight = FontWeight.Medium, fontSize = 14.sp, + lineHeight = 20.sp, + letterSpacing = 0.25.sp ), - button = TextStyle( + bodySmall = TextStyle( fontFamily = workSansFontFamily, - fontWeight = FontWeight.W500, - fontSize = 14.sp, + fontWeight = FontWeight.Bold, + fontSize = 12.sp, + lineHeight = 16.sp, + letterSpacing = 0.4.sp ), - caption = TextStyle( + labelLarge = TextStyle( fontFamily = workSansFontFamily, - fontWeight = FontWeight.Normal, - fontSize = 12.sp, + fontWeight = FontWeight.SemiBold, + fontSize = 14.sp, + lineHeight = 20.sp, + letterSpacing = 0.1.sp ), - overline = TextStyle( + labelMedium = TextStyle( fontFamily = workSansFontFamily, - fontWeight = FontWeight.W500, + fontWeight = FontWeight.SemiBold, fontSize = 12.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp ), + labelSmall = TextStyle( + fontFamily = workSansFontFamily, + fontWeight = FontWeight.SemiBold, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) ) diff --git a/android-core/resources/src/main/res/values/strings.xml b/android-core/resources/src/main/res/values/strings.xml index 0b01e31fb..3e72dc04e 100644 --- a/android-core/resources/src/main/res/values/strings.xml +++ b/android-core/resources/src/main/res/values/strings.xml @@ -18,7 +18,7 @@ Casts Follow show - Unfollow Show + Unfollow Watch Trailer More like this Browse Seasons diff --git a/android-features/discover/build.gradle.kts b/android-features/discover/build.gradle.kts index ae9f37c2e..35b147de6 100644 --- a/android-features/discover/build.gradle.kts +++ b/android-features/discover/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { implementation(projects.data.category.api) implementation(libs.androidx.compose.foundation) - implementation(libs.androidx.compose.material) + implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.ui.util) implementation(libs.flowredux) implementation(libs.kotlinx.collections) diff --git a/android-features/discover/src/main/java/com/thomaskioko/tvmaniac/discover/DiscoverScreen.kt b/android-features/discover/src/main/java/com/thomaskioko/tvmaniac/discover/DiscoverScreen.kt index 13de8be21..464ab936b 100644 --- a/android-features/discover/src/main/java/com/thomaskioko/tvmaniac/discover/DiscoverScreen.kt +++ b/android-features/discover/src/main/java/com/thomaskioko/tvmaniac/discover/DiscoverScreen.kt @@ -32,7 +32,6 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SnackbarDuration @@ -90,7 +89,6 @@ typealias Discover = @Composable ( onMoreClicked: (showType: Long) -> Unit, ) -> Unit -@ExperimentalMaterialApi @Inject @Composable fun Discover( @@ -105,7 +103,6 @@ fun Discover( ) } -@ExperimentalMaterialApi @Composable internal fun DiscoverScreen( viewModel: DiscoverViewModel, diff --git a/android-features/home/build.gradle.kts b/android-features/home/build.gradle.kts index d3cf0170c..6cb55d352 100644 --- a/android-features/home/build.gradle.kts +++ b/android-features/home/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { implementation(projects.androidCore.resources) implementation(libs.accompanist.navigation.material) - implementation(libs.androidx.compose.material) + implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.material.icons) implementation(libs.androidx.compose.material3) implementation(libs.androidx.navigation.common) diff --git a/android-features/home/src/main/kotlin/com/thomaskioko/tvmaniac/home/HomeScreen.kt b/android-features/home/src/main/kotlin/com/thomaskioko/tvmaniac/home/HomeScreen.kt index 222e98f86..3036638f8 100644 --- a/android-features/home/src/main/kotlin/com/thomaskioko/tvmaniac/home/HomeScreen.kt +++ b/android-features/home/src/main/kotlin/com/thomaskioko/tvmaniac/home/HomeScreen.kt @@ -1,14 +1,8 @@ package com.thomaskioko.tvmaniac.home import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding -import androidx.compose.material.BottomNavigation -import androidx.compose.material.BottomNavigationItem -import androidx.compose.material.Icon -import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Settings import androidx.compose.material.icons.outlined.Movie @@ -25,7 +19,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import androidx.navigation.NavController import androidx.navigation.NavDestination.Companion.hierarchy @@ -38,6 +31,8 @@ import androidx.navigation.plusAssign import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi import com.google.accompanist.navigation.material.ModalBottomSheetLayout import com.google.accompanist.navigation.material.rememberBottomSheetNavigator +import com.thomaskioko.tvmaniac.compose.components.TvManiacBottomNavigationItem +import com.thomaskioko.tvmaniac.compose.components.TvManiacNavigationBar import com.thomaskioko.tvmaniac.navigation.ComposeNavigationFactory import com.thomaskioko.tvmaniac.navigation.NavigationScreen import com.thomaskioko.tvmaniac.navigation.addNavigation @@ -55,8 +50,7 @@ fun HomeScreen( navController.navigatorProvider += bottomSheetNavigator Scaffold( - modifier = modifier - .navigationBarsPadding(), + modifier = modifier, containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.onBackground, contentWindowInsets = WindowInsets(0, 0, 0, 0), @@ -104,69 +98,39 @@ private fun TvManiacBottomNavigation( onNavigationSelected: (NavigationScreen) -> Unit, modifier: Modifier = Modifier, ) { - BottomNavigation( + TvManiacNavigationBar( modifier = modifier, - backgroundColor = MaterialTheme.colorScheme.surface, ) { TvManiacBottomNavigationItem( - screen = NavigationScreen.DiscoverNavScreen, imageVector = Icons.Outlined.Movie, title = stringResource(id = R.string.menu_item_discover), selected = currentSelectedItem == NavigationScreen.DiscoverNavScreen, - onNavigationSelected = onNavigationSelected, + onClick = { onNavigationSelected(NavigationScreen.DiscoverNavScreen)}, ) TvManiacBottomNavigationItem( - screen = NavigationScreen.SearchNavScreen, imageVector = Icons.Outlined.Search, title = stringResource(id = R.string.menu_item_search), selected = currentSelectedItem == NavigationScreen.SearchNavScreen, - onNavigationSelected = onNavigationSelected, + onClick = { onNavigationSelected(NavigationScreen.SearchNavScreen)}, ) TvManiacBottomNavigationItem( - screen = NavigationScreen.WatchlistNavScreen, imageVector = Icons.Outlined.Star, title = stringResource(id = R.string.menu_item_follow), selected = currentSelectedItem == NavigationScreen.WatchlistNavScreen, - onNavigationSelected = onNavigationSelected, + onClick = { onNavigationSelected(NavigationScreen.WatchlistNavScreen)}, ) TvManiacBottomNavigationItem( - screen = NavigationScreen.SettingsNavScreen, imageVector = Icons.Filled.Settings, title = stringResource(id = R.string.menu_item_settings), selected = currentSelectedItem == NavigationScreen.SettingsNavScreen, - onNavigationSelected = onNavigationSelected, + onClick = { onNavigationSelected(NavigationScreen.SettingsNavScreen)}, ) } } -@Composable -fun RowScope.TvManiacBottomNavigationItem( - screen: NavigationScreen, - imageVector: ImageVector, - title: String, - selected: Boolean, - modifier: Modifier = Modifier, - onNavigationSelected: (NavigationScreen) -> Unit, -) { - BottomNavigationItem( - modifier = modifier, - icon = { - Icon( - imageVector = imageVector, - contentDescription = title, - ) - }, - label = { Text(title) }, - selected = selected, - alwaysShowLabel = true, - selectedContentColor = MaterialTheme.colorScheme.secondary, - unselectedContentColor = MaterialTheme.colorScheme.onSurface, - onClick = { onNavigationSelected(screen) }, - ) -} @Composable private fun currentRoute(navController: NavHostController): String { diff --git a/android-features/profile/src/main/kotlin/com/thomaskioko/tvmaniac/profile/ProfileScreen.kt b/android-features/profile/src/main/kotlin/com/thomaskioko/tvmaniac/profile/ProfileScreen.kt index 3bc25726a..eb3f15370 100644 --- a/android-features/profile/src/main/kotlin/com/thomaskioko/tvmaniac/profile/ProfileScreen.kt +++ b/android-features/profile/src/main/kotlin/com/thomaskioko/tvmaniac/profile/ProfileScreen.kt @@ -16,7 +16,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items @@ -29,6 +28,7 @@ import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.Divider +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold @@ -106,6 +106,7 @@ internal fun ProfileScreen( ) } +@OptIn(ExperimentalMaterial3Api::class) @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @Composable private fun ProfileScreen( @@ -125,8 +126,7 @@ private fun ProfileScreen( ) }, modifier = modifier - .background(color = MaterialTheme.colorScheme.background) - .statusBarsPadding(), + .background(color = MaterialTheme.colorScheme.background), content = { contentPadding -> when (state) { diff --git a/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchBar.kt b/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchBar.kt index c33d0a20a..05bfe58d0 100644 --- a/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchBar.kt +++ b/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchBar.kt @@ -65,7 +65,6 @@ fun SearchBar( val KeyboardShownKey = SemanticsPropertyKey("KeyboardShownKey") var SemanticsPropertyReceiver.keyboardShownProperty by KeyboardShownKey -@OptIn(ExperimentalComposeUiApi::class) @Composable private fun SearchInputText( onTextChanged: (TextFieldValue) -> Unit, diff --git a/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchScreen.kt b/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchScreen.kt index b0e6e446f..f3be46b9d 100644 --- a/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchScreen.kt +++ b/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchScreen.kt @@ -1,10 +1,16 @@ package com.thomaskioko.tvmaniac.search import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -42,18 +48,27 @@ internal fun SearchScreen( internal fun SearchScreen( modifier: Modifier = Modifier, ) { - Column( - modifier - .fillMaxSize() + Scaffold( + modifier = modifier .statusBarsPadding() - .padding(16.dp), - ) { - SearchBar( - hint = stringResource(id = R.string.msg_search_show_hint), + ) { padding -> + Column( modifier = Modifier - .fillMaxWidth(), - onValueChange = {}, - ) + .padding(16.dp) + .consumeWindowInsets(padding) + .windowInsetsPadding( + WindowInsets.safeDrawing.only( + WindowInsetsSides.Horizontal, + ), + ), + ) { + SearchBar( + modifier = Modifier + .fillMaxWidth(), + hint = stringResource(id = R.string.msg_search_show_hint), + onValueChange = {}, + ) + } } } diff --git a/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/SeasonDetailsScreen.kt b/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/SeasonDetailsScreen.kt index 77237ce93..5103a9d6a 100644 --- a/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/SeasonDetailsScreen.kt +++ b/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/SeasonDetailsScreen.kt @@ -89,7 +89,6 @@ internal fun SeasonDetailScreen( ) } -@OptIn(ExperimentalMaterial3Api::class) @Composable internal fun SeasonDetailScreen( state: SeasonDetailsState, @@ -140,6 +139,7 @@ internal fun SeasonDetailScreen( ) } +@OptIn(ExperimentalMaterial3Api::class) @Composable private fun TopBar( title: String, @@ -149,6 +149,7 @@ private fun TopBar( title = title, showNavigationIcon = true, onBackClick = navigateUp, + elevation = 8.dp ) } @@ -178,6 +179,7 @@ private fun SeasonContent( LazyColumn( state = listState, contentPadding = contentPadding.copy(copyTop = false), + modifier = Modifier.fillMaxSize() ) { item { Spacer(modifier = Modifier.height(64.dp)) } diff --git a/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/components/WatchNextList.kt b/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/components/WatchNextList.kt index 2e8ccc5c5..57773e9b1 100644 --- a/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/components/WatchNextList.kt +++ b/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/components/WatchNextList.kt @@ -47,7 +47,8 @@ fun WatchNextContent( episodeList?.let { Box( modifier = modifier - .fillMaxWidth(), + .fillMaxWidth() + .padding(top = 16.dp), contentAlignment = Alignment.Center, ) { Spacer(modifier = Modifier.height(8.dp)) diff --git a/android-features/settings/src/main/kotlin/com/thomaskioko/tvmaniac/settings/SettingsScreen.kt b/android-features/settings/src/main/kotlin/com/thomaskioko/tvmaniac/settings/SettingsScreen.kt index 13640f392..4f214a946 100644 --- a/android-features/settings/src/main/kotlin/com/thomaskioko/tvmaniac/settings/SettingsScreen.kt +++ b/android-features/settings/src/main/kotlin/com/thomaskioko/tvmaniac/settings/SettingsScreen.kt @@ -16,20 +16,19 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.ContentAlpha -import androidx.compose.material.DropdownMenu -import androidx.compose.material.DropdownMenuItem -import androidx.compose.material.LocalContentAlpha import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Person +import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Divider +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.RadioButton +import androidx.compose.material3.RadioButtonDefaults import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarHost @@ -37,7 +36,6 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember @@ -46,6 +44,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp @@ -114,6 +113,7 @@ internal fun SettingsScreen( ) } +@OptIn(ExperimentalMaterial3Api::class) @Composable internal fun SettingsScreen( onBackClicked: () -> Unit, @@ -140,9 +140,7 @@ internal fun SettingsScreen( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, - modifier = modifier - .background(color = MaterialTheme.colorScheme.background) - .statusBarsPadding(), + modifier = modifier, content = { innerPadding -> LaunchedEffect(key1 = state.errorMessage) { @@ -210,7 +208,6 @@ fun SettingsContent( onLogoutClicked: () -> Unit, onDismissDialogClicked: () -> Unit, modifier: Modifier = Modifier, - ) { LazyColumn( modifier = modifier, @@ -475,7 +472,7 @@ private fun ThemeMenu( modifier = Modifier .background(MaterialTheme.colorScheme.surface), - ) { + ) { ThemeMenuItem( theme = Theme.LIGHT, selectedTheme = selectedTheme, @@ -517,29 +514,33 @@ private fun ThemeMenuItem( onThemeSelected(theme) onDismissTheme() }, - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(start = 16.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Text( - text = themeTitle, + text = { + Row( modifier = Modifier - .weight(1f), - ) + .fillMaxWidth() + .padding(start = 16.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text( + text = themeTitle, + modifier = Modifier + .weight(1f), + ) - RadioButton( - selected = selectedTheme == theme, - onClick = { - onThemeSelected(theme) - onDismissTheme() - }, - ) + RadioButton( + selected = selectedTheme == theme, + colors = RadioButtonDefaults.colors( + selectedColor = MaterialTheme.colorScheme.secondary + ), + onClick = { + onThemeSelected(theme) + onDismissTheme() + }, + ) + } } - } + ) } @Composable @@ -556,12 +557,11 @@ private fun AboutSettingsItem() { TitleItem(title = stringResource(R.string.settings_title_about)) - CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) { - Text( - text = stringResource(R.string.settings_about_description), - style = MaterialTheme.typography.bodyMedium, - ) - } + Text( + text = stringResource(R.string.settings_about_description), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Normal + ) Spacer(modifier = Modifier.height(8.dp)) @@ -598,13 +598,12 @@ fun SettingDescription( description: String, modifier: Modifier = Modifier, ) { - CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) { - Text( - text = description, - style = MaterialTheme.typography.bodyMedium, - modifier = modifier, - ) - } + Text( + text = description, + style = MaterialTheme.typography.bodyMedium, + modifier = modifier, + fontWeight = FontWeight.Normal + ) } /** diff --git a/android-features/show-details/src/main/kotlin/com/thomaskioko/showdetails/ShowDetailScreen.kt b/android-features/show-details/src/main/kotlin/com/thomaskioko/showdetails/ShowDetailScreen.kt index 2ce44438b..83dc32333 100644 --- a/android-features/show-details/src/main/kotlin/com/thomaskioko/showdetails/ShowDetailScreen.kt +++ b/android-features/show-details/src/main/kotlin/com/thomaskioko/showdetails/ShowDetailScreen.kt @@ -25,24 +25,21 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.ContentAlpha -import androidx.compose.material.Icon -import androidx.compose.material.LocalContentAlpha -import androidx.compose.material.Tab -import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.PlayCircle import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.ScrollableTabRow import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Surface +import androidx.compose.material3.Tab +import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -277,7 +274,7 @@ private fun ShowDetailContent( } item { - if (seasonsContent != null) { + seasonsContent?.let { SeasonsContent( isLoading = seasonsContent.isLoading, seasonsList = seasonsContent.seasonsList, @@ -377,7 +374,7 @@ private fun Body( ) { Text( text = show.title, - style = MaterialTheme.typography.headlineMedium, + style = MaterialTheme.typography.headlineSmall, fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.onSurface, overflow = TextOverflow.Ellipsis, @@ -386,12 +383,11 @@ private fun Body( Spacer(modifier = Modifier.height(8.dp)) - CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) { - ExpandingText( - text = show.overview, - textStyle = MaterialTheme.typography.bodyMedium, - ) - } + ExpandingText( + text = show.overview, + textStyle = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Normal + ) Spacer(modifier = Modifier.height(8.dp)) @@ -491,15 +487,14 @@ fun ShowMetadata( append(divider) } - CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) { - Text( - text = text, - style = MaterialTheme.typography.bodyMedium, - modifier = Modifier.fillMaxWidth(), - overflow = TextOverflow.Ellipsis, - maxLines = 1, - ) - } + Text( + text = text, + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.fillMaxWidth(), + overflow = TextOverflow.Ellipsis, + maxLines = 1, + fontWeight = FontWeight.Medium + ) Spacer(modifier = Modifier.height(8.dp)) } @@ -516,23 +511,21 @@ private fun GenreText( Spacer(modifier = Modifier.width(4.dp)) - CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) { - TvManiacTextButton( - onClick = {}, - shape = RoundedCornerShape(4.dp), - buttonColors = ButtonDefaults.buttonColors( - contentColor = MaterialTheme.colorScheme.onSecondary, - containerColor = MaterialTheme.colorScheme.secondary.copy(alpha = 0.08f), - ), - content = { - Text( - text = genre, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.secondary, - ) - }, - ) - } + TvManiacTextButton( + onClick = {}, + shape = RoundedCornerShape(4.dp), + buttonColors = ButtonDefaults.buttonColors( + contentColor = MaterialTheme.colorScheme.onSecondary, + containerColor = MaterialTheme.colorScheme.secondary.copy(alpha = 0.08f), + ), + content = { + Text( + text = genre, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.secondary, + ) + }, + ) } } } @@ -604,46 +597,45 @@ private fun SeasonsContent( seasonsList: List, onSeasonClicked: (Long, String) -> Unit, ) { - AnimatedVisibility(visible = seasonsList.isNotEmpty()) { + if(seasonsList.isNotEmpty()){ TextLoadingItem( isLoading = isLoading, text = stringResource(id = R.string.title_seasons), ) - } - - val selectedIndex by remember { mutableStateOf(0) } - - ScrollableTabRow( - selectedTabIndex = selectedIndex, - divider = {}, /* Disable the built-in divider */ - indicator = {}, - edgePadding = 0.dp, - containerColor = Color.Transparent, - modifier = Modifier - .fillMaxWidth() - .padding(start = 16.dp, end = 16.dp), - ) { - seasonsList.forEach { season -> - Tab( - modifier = Modifier - .padding(end = 4.dp), - selected = true, - onClick = { - onSeasonClicked( - season.tvShowId, - season.name, - ) - }, - ) { - TvManiacChip( - text = season.name, + val selectedIndex by remember { mutableStateOf(0) } + + ScrollableTabRow( + selectedTabIndex = selectedIndex, + divider = {}, /* Disable the built-in divider */ + indicator = {}, + edgePadding = 0.dp, + containerColor = Color.Transparent, + modifier = Modifier + .fillMaxWidth() + .padding(start = 16.dp, end = 16.dp), + ) { + seasonsList.forEach { season -> + Tab( + modifier = Modifier + .padding(end = 4.dp), + selected = true, onClick = { onSeasonClicked( season.tvShowId, season.name, ) }, - ) + ) { + TvManiacChip( + text = season.name, + onClick = { + onSeasonClicked( + season.tvShowId, + season.name, + ) + }, + ) + } } } } diff --git a/android-features/shows-grid/src/main/kotlin/com/thomaskioko/tvmaniac/showsgrid/ShowsGridScreen.kt b/android-features/shows-grid/src/main/kotlin/com/thomaskioko/tvmaniac/showsgrid/ShowsGridScreen.kt index 210a177ac..d38a8a109 100644 --- a/android-features/shows-grid/src/main/kotlin/com/thomaskioko/tvmaniac/showsgrid/ShowsGridScreen.kt +++ b/android-features/shows-grid/src/main/kotlin/com/thomaskioko/tvmaniac/showsgrid/ShowsGridScreen.kt @@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid @@ -102,7 +101,6 @@ private fun GridScreen( ) }, modifier = Modifier - .statusBarsPadding(), ) { contentPadding -> when (state) { LoadingContent -> LoadingIndicator( diff --git a/android-features/trailers/src/main/kotlin/com/thomaskioko/tvmaniac/videoplayer/TrailersScreen.kt b/android-features/trailers/src/main/kotlin/com/thomaskioko/tvmaniac/videoplayer/TrailersScreen.kt index a50e52038..3e4cf2284 100644 --- a/android-features/trailers/src/main/kotlin/com/thomaskioko/tvmaniac/videoplayer/TrailersScreen.kt +++ b/android-features/trailers/src/main/kotlin/com/thomaskioko/tvmaniac/videoplayer/TrailersScreen.kt @@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.lazy.LazyColumn @@ -104,8 +103,7 @@ private fun TrailersScreen( Scaffold( modifier = modifier - .background(color = MaterialTheme.colorScheme.background) - .statusBarsPadding(), + .background(color = MaterialTheme.colorScheme.background), content = { contentPadding -> when (state) { diff --git a/android-features/watchlist/src/main/kotlin/com/thomaskioko/tvmaniac/watchlist/WatchlistScreen.kt b/android-features/watchlist/src/main/kotlin/com/thomaskioko/tvmaniac/watchlist/WatchlistScreen.kt index 8f48243e2..bd17552a3 100644 --- a/android-features/watchlist/src/main/kotlin/com/thomaskioko/tvmaniac/watchlist/WatchlistScreen.kt +++ b/android-features/watchlist/src/main/kotlin/com/thomaskioko/tvmaniac/watchlist/WatchlistScreen.kt @@ -75,8 +75,7 @@ private fun WatchlistScreen( ) { Scaffold( modifier = modifier - .statusBarsPadding() - .navigationBarsPadding(), + .statusBarsPadding(), content = { contentPadding -> when (state) { diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 820329ac4..55798b445 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -91,6 +91,7 @@ dependencies { implementation(projects.presentation.trailers) implementation(libs.androidx.compose.activity) + implementation(libs.androidx.core.splashscreen) implementation(libs.appauth) implementation(libs.kotlinInject.runtime) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e41baddbb..75f718b49 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -71,7 +71,6 @@ androidx-browser = { module = "androidx.browser:browser", version.ref = "androi androidx-compose-activity = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } androidx-compose-constraintlayout = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "compose-constraintlayout" } -androidx-compose-material = { module = "androidx.compose.material:material", version.ref = "compose-material" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "androidx-material3" } androidx-compose-material3-windowSizeClass = { group = "androidx.compose.material3", name = "material3-window-size-class", version.ref = "androidx-material3" } androidx-compose-paging = { module = "androidx.paging:paging-compose", version.ref = "compose-paging" } From 61d58842df97be90f398c57704c0e5e4b815ddd8 Mon Sep 17 00:00:00 2001 From: Thomas Kioko Date: Wed, 1 Nov 2023 18:09:28 +0100 Subject: [PATCH 7/7] Fix spotless issues --- .../tvmaniac/compose/components/Buttons.kt | 3 +-- .../tvmaniac/compose/components/Card.kt | 2 +- .../tvmaniac/compose/components/Chip.kt | 2 +- .../compose/components/ErrorLayout.kt | 3 +-- .../tvmaniac/compose/components/Navigation.kt | 1 - .../tvmaniac/compose/components/Text.kt | 2 +- .../tvmaniac/compose/components/TopBar.kt | 2 +- .../tvmaniac/compose/theme/Type.kt | 26 +++++++++---------- .../thomaskioko/tvmaniac/home/HomeScreen.kt | 9 +++---- .../thomaskioko/tvmaniac/search/SearchBar.kt | 1 - .../tvmaniac/search/SearchScreen.kt | 2 +- .../seasondetails/SeasonDetailsScreen.kt | 4 +-- .../tvmaniac/settings/SettingsScreen.kt | 10 +++---- .../showdetails/ShowDetailScreen.kt | 6 ++--- .../tvmaniac/showsgrid/ShowsGridScreen.kt | 2 +- .../tvmaniac/watchlist/WatchlistScreen.kt | 1 - .../tvmaniac/MainActivityViewModel.kt | 2 +- 17 files changed, 36 insertions(+), 42 deletions(-) diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Buttons.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Buttons.kt index e69072195..f37d9c332 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Buttons.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Buttons.kt @@ -10,12 +10,12 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.sizeIn import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Text import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -24,7 +24,6 @@ import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.graphics.Shape import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.thomaskioko.tvmaniac.compose.theme.TvManiacTheme diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Card.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Card.kt index 05d96a102..2dd7640c4 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Card.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Card.kt @@ -7,10 +7,10 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width -import androidx.compose.material3.Text import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Chip.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Chip.kt index 8a094bf9d..4be24b71b 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Chip.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Chip.kt @@ -2,13 +2,13 @@ package com.thomaskioko.tvmaniac.compose.components import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Text import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/ErrorLayout.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/ErrorLayout.kt index 7d46eb41e..e008ffe30 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/ErrorLayout.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/ErrorLayout.kt @@ -14,14 +14,13 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.material3.Icon import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Collections import androidx.compose.material.icons.outlined.ErrorOutline import androidx.compose.material.icons.outlined.SignalWifi4Bar import androidx.compose.material.icons.outlined.SignalWifiOff +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Navigation.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Navigation.kt index 5b750dade..148af0dcd 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Navigation.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Navigation.kt @@ -12,7 +12,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.unit.dp - @Composable fun TvManiacNavigationBar( modifier: Modifier = Modifier, diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Text.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Text.kt index 6f73f682c..a78a8688d 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Text.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/Text.kt @@ -7,9 +7,9 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.CircularProgressIndicator -import androidx.compose.material3.Text import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/TopBar.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/TopBar.kt index 8a4a8a224..b1c7bb352 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/TopBar.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/components/TopBar.kt @@ -159,7 +159,7 @@ fun CollapsableAppBar( modifier = modifier .windowInsetsPadding( WindowInsets.systemBars - .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top) + .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top), ) .shadow(elevation = elevation), ) diff --git a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Type.kt b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Type.kt index 3c6c65d81..b2729bfb5 100644 --- a/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Type.kt +++ b/android-core/designsystem/src/main/kotlin/com/thomaskioko/tvmaniac/compose/theme/Type.kt @@ -66,83 +66,83 @@ val tvManiacTypography = Typography( fontWeight = FontWeight.SemiBold, fontSize = 32.sp, lineHeight = 40.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), headlineMedium = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.SemiBold, fontSize = 28.sp, lineHeight = 36.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), headlineSmall = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.SemiBold, fontSize = 24.sp, lineHeight = 32.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), titleLarge = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.SemiBold, fontSize = 22.sp, lineHeight = 28.sp, - letterSpacing = 0.sp + letterSpacing = 0.sp, ), titleMedium = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.SemiBold, fontSize = 16.sp, lineHeight = 24.sp, - letterSpacing = 0.15.sp + letterSpacing = 0.15.sp, ), titleSmall = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.Bold, fontSize = 14.sp, lineHeight = 20.sp, - letterSpacing = 0.1.sp + letterSpacing = 0.1.sp, ), bodyLarge = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.Normal, fontSize = 16.sp, lineHeight = 24.sp, - letterSpacing = 0.15.sp + letterSpacing = 0.15.sp, ), bodyMedium = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.Medium, fontSize = 14.sp, lineHeight = 20.sp, - letterSpacing = 0.25.sp + letterSpacing = 0.25.sp, ), bodySmall = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.Bold, fontSize = 12.sp, lineHeight = 16.sp, - letterSpacing = 0.4.sp + letterSpacing = 0.4.sp, ), labelLarge = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.SemiBold, fontSize = 14.sp, lineHeight = 20.sp, - letterSpacing = 0.1.sp + letterSpacing = 0.1.sp, ), labelMedium = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.SemiBold, fontSize = 12.sp, lineHeight = 16.sp, - letterSpacing = 0.5.sp + letterSpacing = 0.5.sp, ), labelSmall = TextStyle( fontFamily = workSansFontFamily, fontWeight = FontWeight.SemiBold, fontSize = 11.sp, lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) + letterSpacing = 0.5.sp, + ), ) diff --git a/android-features/home/src/main/kotlin/com/thomaskioko/tvmaniac/home/HomeScreen.kt b/android-features/home/src/main/kotlin/com/thomaskioko/tvmaniac/home/HomeScreen.kt index 3036638f8..56b92c8e1 100644 --- a/android-features/home/src/main/kotlin/com/thomaskioko/tvmaniac/home/HomeScreen.kt +++ b/android-features/home/src/main/kotlin/com/thomaskioko/tvmaniac/home/HomeScreen.kt @@ -105,33 +105,32 @@ private fun TvManiacBottomNavigation( imageVector = Icons.Outlined.Movie, title = stringResource(id = R.string.menu_item_discover), selected = currentSelectedItem == NavigationScreen.DiscoverNavScreen, - onClick = { onNavigationSelected(NavigationScreen.DiscoverNavScreen)}, + onClick = { onNavigationSelected(NavigationScreen.DiscoverNavScreen) }, ) TvManiacBottomNavigationItem( imageVector = Icons.Outlined.Search, title = stringResource(id = R.string.menu_item_search), selected = currentSelectedItem == NavigationScreen.SearchNavScreen, - onClick = { onNavigationSelected(NavigationScreen.SearchNavScreen)}, + onClick = { onNavigationSelected(NavigationScreen.SearchNavScreen) }, ) TvManiacBottomNavigationItem( imageVector = Icons.Outlined.Star, title = stringResource(id = R.string.menu_item_follow), selected = currentSelectedItem == NavigationScreen.WatchlistNavScreen, - onClick = { onNavigationSelected(NavigationScreen.WatchlistNavScreen)}, + onClick = { onNavigationSelected(NavigationScreen.WatchlistNavScreen) }, ) TvManiacBottomNavigationItem( imageVector = Icons.Filled.Settings, title = stringResource(id = R.string.menu_item_settings), selected = currentSelectedItem == NavigationScreen.SettingsNavScreen, - onClick = { onNavigationSelected(NavigationScreen.SettingsNavScreen)}, + onClick = { onNavigationSelected(NavigationScreen.SettingsNavScreen) }, ) } } - @Composable private fun currentRoute(navController: NavHostController): String { val navBackStackEntry by navController.currentBackStackEntryAsState() diff --git a/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchBar.kt b/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchBar.kt index 05bfe58d0..02897864d 100644 --- a/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchBar.kt +++ b/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchBar.kt @@ -22,7 +22,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment -import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.focus.onFocusEvent import androidx.compose.ui.graphics.RectangleShape diff --git a/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchScreen.kt b/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchScreen.kt index f3be46b9d..4a8bafe5b 100644 --- a/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchScreen.kt +++ b/android-features/search/src/main/kotlin/com/thomaskioko/tvmaniac/search/SearchScreen.kt @@ -50,7 +50,7 @@ internal fun SearchScreen( ) { Scaffold( modifier = modifier - .statusBarsPadding() + .statusBarsPadding(), ) { padding -> Column( modifier = Modifier diff --git a/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/SeasonDetailsScreen.kt b/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/SeasonDetailsScreen.kt index 5103a9d6a..6d78b3315 100644 --- a/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/SeasonDetailsScreen.kt +++ b/android-features/season-details/src/main/java/com/thomaskioko/tvmaniac/seasondetails/SeasonDetailsScreen.kt @@ -149,7 +149,7 @@ private fun TopBar( title = title, showNavigationIcon = true, onBackClick = navigateUp, - elevation = 8.dp + elevation = 8.dp, ) } @@ -179,7 +179,7 @@ private fun SeasonContent( LazyColumn( state = listState, contentPadding = contentPadding.copy(copyTop = false), - modifier = Modifier.fillMaxSize() + modifier = Modifier.fillMaxSize(), ) { item { Spacer(modifier = Modifier.height(64.dp)) } diff --git a/android-features/settings/src/main/kotlin/com/thomaskioko/tvmaniac/settings/SettingsScreen.kt b/android-features/settings/src/main/kotlin/com/thomaskioko/tvmaniac/settings/SettingsScreen.kt index 4f214a946..b85b13a6a 100644 --- a/android-features/settings/src/main/kotlin/com/thomaskioko/tvmaniac/settings/SettingsScreen.kt +++ b/android-features/settings/src/main/kotlin/com/thomaskioko/tvmaniac/settings/SettingsScreen.kt @@ -472,7 +472,7 @@ private fun ThemeMenu( modifier = Modifier .background(MaterialTheme.colorScheme.surface), - ) { + ) { ThemeMenuItem( theme = Theme.LIGHT, selectedTheme = selectedTheme, @@ -531,7 +531,7 @@ private fun ThemeMenuItem( RadioButton( selected = selectedTheme == theme, colors = RadioButtonDefaults.colors( - selectedColor = MaterialTheme.colorScheme.secondary + selectedColor = MaterialTheme.colorScheme.secondary, ), onClick = { onThemeSelected(theme) @@ -539,7 +539,7 @@ private fun ThemeMenuItem( }, ) } - } + }, ) } @@ -560,7 +560,7 @@ private fun AboutSettingsItem() { Text( text = stringResource(R.string.settings_about_description), style = MaterialTheme.typography.bodyMedium, - fontWeight = FontWeight.Normal + fontWeight = FontWeight.Normal, ) Spacer(modifier = Modifier.height(8.dp)) @@ -602,7 +602,7 @@ fun SettingDescription( text = description, style = MaterialTheme.typography.bodyMedium, modifier = modifier, - fontWeight = FontWeight.Normal + fontWeight = FontWeight.Normal, ) } diff --git a/android-features/show-details/src/main/kotlin/com/thomaskioko/showdetails/ShowDetailScreen.kt b/android-features/show-details/src/main/kotlin/com/thomaskioko/showdetails/ShowDetailScreen.kt index 83dc32333..2b7f07cc2 100644 --- a/android-features/show-details/src/main/kotlin/com/thomaskioko/showdetails/ShowDetailScreen.kt +++ b/android-features/show-details/src/main/kotlin/com/thomaskioko/showdetails/ShowDetailScreen.kt @@ -386,7 +386,7 @@ private fun Body( ExpandingText( text = show.overview, textStyle = MaterialTheme.typography.bodyMedium, - fontWeight = FontWeight.Normal + fontWeight = FontWeight.Normal, ) Spacer(modifier = Modifier.height(8.dp)) @@ -493,7 +493,7 @@ fun ShowMetadata( modifier = Modifier.fillMaxWidth(), overflow = TextOverflow.Ellipsis, maxLines = 1, - fontWeight = FontWeight.Medium + fontWeight = FontWeight.Medium, ) Spacer(modifier = Modifier.height(8.dp)) @@ -597,7 +597,7 @@ private fun SeasonsContent( seasonsList: List, onSeasonClicked: (Long, String) -> Unit, ) { - if(seasonsList.isNotEmpty()){ + if (seasonsList.isNotEmpty()) { TextLoadingItem( isLoading = isLoading, text = stringResource(id = R.string.title_seasons), diff --git a/android-features/shows-grid/src/main/kotlin/com/thomaskioko/tvmaniac/showsgrid/ShowsGridScreen.kt b/android-features/shows-grid/src/main/kotlin/com/thomaskioko/tvmaniac/showsgrid/ShowsGridScreen.kt index d38a8a109..290c37479 100644 --- a/android-features/shows-grid/src/main/kotlin/com/thomaskioko/tvmaniac/showsgrid/ShowsGridScreen.kt +++ b/android-features/shows-grid/src/main/kotlin/com/thomaskioko/tvmaniac/showsgrid/ShowsGridScreen.kt @@ -100,7 +100,7 @@ private fun GridScreen( onBackClick = onBackClicked, ) }, - modifier = Modifier + modifier = Modifier, ) { contentPadding -> when (state) { LoadingContent -> LoadingIndicator( diff --git a/android-features/watchlist/src/main/kotlin/com/thomaskioko/tvmaniac/watchlist/WatchlistScreen.kt b/android-features/watchlist/src/main/kotlin/com/thomaskioko/tvmaniac/watchlist/WatchlistScreen.kt index bd17552a3..448dcaba9 100644 --- a/android-features/watchlist/src/main/kotlin/com/thomaskioko/tvmaniac/watchlist/WatchlistScreen.kt +++ b/android-features/watchlist/src/main/kotlin/com/thomaskioko/tvmaniac/watchlist/WatchlistScreen.kt @@ -2,7 +2,6 @@ package com.thomaskioko.tvmaniac.watchlist import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.lazy.rememberLazyListState diff --git a/app/src/main/kotlin/com/thomaskioko/tvmaniac/MainActivityViewModel.kt b/app/src/main/kotlin/com/thomaskioko/tvmaniac/MainActivityViewModel.kt index 9d7182469..34145f654 100644 --- a/app/src/main/kotlin/com/thomaskioko/tvmaniac/MainActivityViewModel.kt +++ b/app/src/main/kotlin/com/thomaskioko/tvmaniac/MainActivityViewModel.kt @@ -27,7 +27,7 @@ class MainActivityViewModel( } sealed interface MainActivityUiState { - data object Loading: MainActivityUiState + data object Loading : MainActivityUiState data class DataLoaded( val theme: Theme = Theme.SYSTEM, ) : MainActivityUiState