From 5032136784f0f838ba4b62c1599433899a8e562a Mon Sep 17 00:00:00 2001 From: Rivan Date: Fri, 27 May 2022 21:10:51 +0530 Subject: [PATCH 01/25] Fix Navigation Bar in landscape mode. --- .../samples/apps/nowinandroid/ui/NiaApp.kt | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index 135634a31..4291cec66 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -75,12 +75,10 @@ fun NiaApp(windowSizeClass: WindowSizeClass) { containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.onBackground, bottomBar = { - if (windowSizeClass.widthSizeClass == WindowWidthSizeClass.Compact) { - NiaBottomBar( - onNavigateToTopLevelDestination = niaTopLevelNavigation::navigateTo, - currentDestination = currentDestination - ) - } + NiaBottomBar( + onNavigateToTopLevelDestination = niaTopLevelNavigation::navigateTo, + currentDestination = currentDestination + ) } ) { padding -> Row( @@ -92,14 +90,6 @@ fun NiaApp(windowSizeClass: WindowSizeClass) { ) ) ) { - if (windowSizeClass.widthSizeClass != WindowWidthSizeClass.Compact) { - NiaNavRail( - onNavigateToTopLevelDestination = niaTopLevelNavigation::navigateTo, - currentDestination = currentDestination, - modifier = Modifier.safeDrawingPadding() - ) - } - NiaNavHost( windowSizeClass = windowSizeClass, navController = navController, From 747416ad840c4f968fe70361c61b808c41a254b3 Mon Sep 17 00:00:00 2001 From: Rivan Date: Sat, 28 May 2022 10:29:29 +0530 Subject: [PATCH 02/25] Fix Navigation Bar in landscape mode. --- .../samples/apps/nowinandroid/ui/NiaApp.kt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt index 4291cec66..34a16596c 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -37,6 +37,7 @@ import androidx.compose.material3.NavigationRailItem import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text +import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass import androidx.compose.material3.windowsizeclass.WindowSizeClass import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.runtime.Composable @@ -75,10 +76,12 @@ fun NiaApp(windowSizeClass: WindowSizeClass) { containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.onBackground, bottomBar = { - NiaBottomBar( - onNavigateToTopLevelDestination = niaTopLevelNavigation::navigateTo, - currentDestination = currentDestination - ) + if (windowSizeClass.widthSizeClass == WindowWidthSizeClass.Compact || windowSizeClass.heightSizeClass == WindowHeightSizeClass.Compact) { + NiaBottomBar( + onNavigateToTopLevelDestination = niaTopLevelNavigation::navigateTo, + currentDestination = currentDestination + ) + } } ) { padding -> Row( @@ -90,6 +93,14 @@ fun NiaApp(windowSizeClass: WindowSizeClass) { ) ) ) { + if (windowSizeClass.widthSizeClass != WindowWidthSizeClass.Compact && windowSizeClass.heightSizeClass != WindowHeightSizeClass.Compact) { + NiaNavRail( + onNavigateToTopLevelDestination = niaTopLevelNavigation::navigateTo, + currentDestination = currentDestination, + modifier = Modifier.safeDrawingPadding() + ) + } + NiaNavHost( windowSizeClass = windowSizeClass, navController = navController, From 5c73cdd97330740e0364574dee3a66ca80368f66 Mon Sep 17 00:00:00 2001 From: takahirom Date: Wed, 8 Jun 2022 11:16:05 +0900 Subject: [PATCH 03/25] Add compose compiler metrics option --- .../apps/nowinandroid/KotlinAndroid.kt | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index 36f7e522d..76583e0eb 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -24,6 +24,7 @@ import org.gradle.api.plugins.ExtensionAware import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByType import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions +import java.io.File /** * Configure base Kotlin with Android options @@ -56,7 +57,7 @@ internal fun Project.configureKotlinAndroid( "-opt-in=kotlin.Experimental", // Enable experimental kotlinx serialization APIs "-opt-in=kotlinx.serialization.ExperimentalSerializationApi" - ) + ) + buildComposeMetricsParameters() // Set JVM target to 1.8 jvmTarget = JavaVersion.VERSION_1_8.toString() @@ -70,6 +71,26 @@ internal fun Project.configureKotlinAndroid( } } +private fun Project.buildComposeMetricsParameters(): List { + val metricParameters = mutableListOf() + val enableMetricsProvider = project.providers.gradleProperty("enableComposeCompilerMetrics") + val enableMetrics = (enableMetricsProvider.orNull == "true") + if (enableMetrics) { + val metricsFolder = File(project.buildDir, "compose-metrics") + metricParameters.add("-P") + metricParameters.add("plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" + metricsFolder.absolutePath) + } + + val enableReportsProvider = project.providers.gradleProperty("enableComposeCompilerReports") + val enableReports = (enableReportsProvider.orNull == "true") + if (enableReports) { + val reportsFolder = File(project.buildDir, "compose-reports") + metricParameters.add("-P") + metricParameters.add("plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + reportsFolder.absolutePath) + } + return metricParameters +} + private fun CommonExtension<*, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { (this as ExtensionAware).extensions.configure("kotlinOptions", block) } From 9ce561b22bb24f6258b921adcd018ed5c118e7ca Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Jun 2022 14:49:25 +0000 Subject: [PATCH 04/25] Update actions/cache action to v3 --- .github/workflows/Build.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index d1590932c..73fa06481 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -32,7 +32,7 @@ jobs: - name: Generate cache key run: ./scripts/checksum.sh checksum.txt - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | ~/.gradle/caches/modules-* @@ -101,7 +101,7 @@ jobs: - name: Generate cache key run: ./scripts/checksum.sh $SAMPLE_PATH checksum.txt - - uses: actions/cache@v2 + - uses: actions/cache@v3 with: path: | ~/.gradle/caches/modules-* From e035e2f16724b2db92babd7707527b7d7b459598 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Jun 2022 14:49:38 +0000 Subject: [PATCH 05/25] Update actions/upload-artifact action to v3 --- .github/workflows/Build.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index d1590932c..f6db34222 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -53,27 +53,27 @@ jobs: run: ./gradlew testDemoDebug testProdDebug --stacktrace - name: Upload Demo build outputs (APKs) - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: build-outputs-demo path: app/demo/build/outputs - name: Upload Prod build outputs (APKs) - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: build-outputs-prod path: app/prod/build/outputs - name: Upload Demo build reports if: always() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: build-reports-demo path: app/demo/build/reports - name: Upload Prod build reports if: always() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: build-reports-prod path: app/prod/build/reports @@ -121,7 +121,7 @@ jobs: - name: Upload test reports if: always() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: test-reports path: '*/build/reports/androidTests' From cd9e4ac27871f60078276a414c911e81f7d4f037 Mon Sep 17 00:00:00 2001 From: Sungyong An Date: Fri, 10 Jun 2022 01:36:18 +0900 Subject: [PATCH 06/25] Make :core-model to pure kotlin module --- core-model/build.gradle.kts | 13 +------------ core-model/src/main/AndroidManifest.xml | 20 -------------------- 2 files changed, 1 insertion(+), 32 deletions(-) delete mode 100644 core-model/src/main/AndroidManifest.xml diff --git a/core-model/build.gradle.kts b/core-model/build.gradle.kts index a413b36c4..34a905c6c 100644 --- a/core-model/build.gradle.kts +++ b/core-model/build.gradle.kts @@ -16,21 +16,10 @@ // TODO: Remove once https://youtrack.jetbrains.com/issue/KTIJ-19369 is fixed @Suppress("DSL_SCOPE_VIOLATION") plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.jacoco") - id("kotlinx-serialization") - alias(libs.plugins.ksp) + id("kotlin") id("nowinandroid.spotless") } dependencies { - testImplementation(project(":core-testing")) - - implementation(libs.room.runtime) - implementation(libs.room.ktx) - ksp(libs.room.compiler) - - implementation(libs.kotlinx.coroutines.android) implementation(libs.kotlinx.datetime) - implementation(libs.kotlinx.serialization.json) } \ No newline at end of file diff --git a/core-model/src/main/AndroidManifest.xml b/core-model/src/main/AndroidManifest.xml deleted file mode 100644 index e04125b63..000000000 --- a/core-model/src/main/AndroidManifest.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - \ No newline at end of file From d3ffb1f806759d238baa7a84dce0f4b633082800 Mon Sep 17 00:00:00 2001 From: takahirom Date: Sat, 11 Jun 2022 17:36:27 +0900 Subject: [PATCH 07/25] Move compose metrics parameters to Android Compose script --- .../apps/nowinandroid/AndroidCompose.kt | 30 ++++++++++++++++++- .../apps/nowinandroid/KotlinAndroid.kt | 25 ++-------------- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index b59ec5625..8f2500871 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -19,8 +19,8 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.dsl.CommonExtension import org.gradle.api.Project import org.gradle.api.artifacts.VersionCatalogsExtension -import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByType +import java.io.File /** * Configure Compose-specific options @@ -38,5 +38,33 @@ internal fun Project.configureAndroidCompose( composeOptions { kotlinCompilerExtensionVersion = libs.findVersion("androidxCompose").get().toString() } + + kotlinOptions { + freeCompilerArgs = freeCompilerArgs + buildComposeMetricsParameters() + } } } + +private fun Project.buildComposeMetricsParameters(): List { + val metricParameters = mutableListOf() + val enableMetricsProvider = project.providers.gradleProperty("enableComposeCompilerMetrics") + val enableMetrics = (enableMetricsProvider.orNull == "true") + if (enableMetrics) { + val metricsFolder = File(project.buildDir, "compose-metrics") + metricParameters.add("-P") + metricParameters.add( + "plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" + metricsFolder.absolutePath + ) + } + + val enableReportsProvider = project.providers.gradleProperty("enableComposeCompilerReports") + val enableReports = (enableReportsProvider.orNull == "true") + if (enableReports) { + val reportsFolder = File(project.buildDir, "compose-reports") + metricParameters.add("-P") + metricParameters.add( + "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + reportsFolder.absolutePath + ) + } + return metricParameters.toList() +} \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index 76583e0eb..ef9ec9072 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -24,7 +24,6 @@ import org.gradle.api.plugins.ExtensionAware import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByType import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions -import java.io.File /** * Configure base Kotlin with Android options @@ -57,7 +56,7 @@ internal fun Project.configureKotlinAndroid( "-opt-in=kotlin.Experimental", // Enable experimental kotlinx serialization APIs "-opt-in=kotlinx.serialization.ExperimentalSerializationApi" - ) + buildComposeMetricsParameters() + ) // Set JVM target to 1.8 jvmTarget = JavaVersion.VERSION_1_8.toString() @@ -71,26 +70,6 @@ internal fun Project.configureKotlinAndroid( } } -private fun Project.buildComposeMetricsParameters(): List { - val metricParameters = mutableListOf() - val enableMetricsProvider = project.providers.gradleProperty("enableComposeCompilerMetrics") - val enableMetrics = (enableMetricsProvider.orNull == "true") - if (enableMetrics) { - val metricsFolder = File(project.buildDir, "compose-metrics") - metricParameters.add("-P") - metricParameters.add("plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" + metricsFolder.absolutePath) - } - - val enableReportsProvider = project.providers.gradleProperty("enableComposeCompilerReports") - val enableReports = (enableReportsProvider.orNull == "true") - if (enableReports) { - val reportsFolder = File(project.buildDir, "compose-reports") - metricParameters.add("-P") - metricParameters.add("plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + reportsFolder.absolutePath) - } - return metricParameters -} - -private fun CommonExtension<*, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { +fun CommonExtension<*, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { (this as ExtensionAware).extensions.configure("kotlinOptions", block) } From 5290c0c188b696fdad059ebd19ea768a2e3d3faa Mon Sep 17 00:00:00 2001 From: takahirom Date: Sat, 11 Jun 2022 17:38:09 +0900 Subject: [PATCH 08/25] Add last blank line --- .../com/google/samples/apps/nowinandroid/AndroidCompose.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 8f2500871..cb5eb8bd3 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -67,4 +67,4 @@ private fun Project.buildComposeMetricsParameters(): List { ) } return metricParameters.toList() -} \ No newline at end of file +} From 3a5e7b36db4321797fb22df941ff6b429d1b9f76 Mon Sep 17 00:00:00 2001 From: Adetunji Dahunsi Date: Tue, 31 May 2022 14:32:01 -0400 Subject: [PATCH 09/25] Add UserDataRepository Change-Id: I96cd2e6d137ad1c26fe2a4fdd3ada733b5be06b0 --- .idea/codeStyles/Project.xml | 19 +--- .../core/data/test/TestDataModule.kt | 7 ++ .../nowinandroid/core/data/di/DataModule.kt | 7 ++ .../core/data/repository/AuthorsRepository.kt | 15 --- .../OfflineFirstAuthorsRepository.kt | 10 -- .../OfflineFirstTopicsRepository.kt | 10 -- .../OfflineFirstUserDataRepository.kt | 42 ++++++++ .../core/data/repository/TopicsRepository.kt | 15 --- .../data/repository/UserDataRepository.kt | 48 +++++++++ .../repository/fake/FakeAuthorsRepository.kt | 12 --- .../repository/fake/FakeTopicsRepository.kt | 10 -- .../repository/fake/FakeUserDataRepository.kt | 52 ++++++++++ .../OfflineFirstAuthorsRepositoryTest.kt | 1 - .../OfflineFirstTopicsRepositoryTest.kt | 60 +---------- .../OfflineFirstUserDataRepositoryTest.kt | 99 +++++++++++++++++++ core-datastore/build.gradle.kts | 1 + .../datastore/NiaPreferencesDataSource.kt | 10 ++ .../nowinandroid/core/model/data/UserData.kt | 26 +++++ .../repository/TestAuthorsRepository.kt | 26 ----- .../repository/TestTopicsRepository.kt | 26 ----- .../repository/TestUserDataRepository.kt | 79 +++++++++++++++ .../feature/author/AuthorViewModel.kt | 11 ++- .../feature/author/AuthorViewModelTest.kt | 13 ++- .../feature/foryou/ForYouViewModel.kt | 32 +++--- .../feature/foryou/ForYouViewModelTest.kt | 79 ++++++++------- .../feature/interests/InterestsViewModel.kt | 19 ++-- .../interests/InterestsViewModelTest.kt | 32 +++--- .../feature/topic/TopicViewModel.kt | 11 ++- .../feature/topic/TopicViewModelTest.kt | 13 ++- 29 files changed, 492 insertions(+), 293 deletions(-) create mode 100644 core-data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt create mode 100644 core-data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt create mode 100644 core-data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeUserDataRepository.kt create mode 100644 core-data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt create mode 100644 core-model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserData.kt create mode 100644 core-testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index a24d14540..0a9e39c9d 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -34,14 +34,7 @@