Skip to content

Commit 7f157fc

Browse files
committed
Fixes issues and updates to M3
1 parent 4f738c7 commit 7f157fc

32 files changed

+339
-367
lines changed

.github/ci-gradle.properties

+7-3
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@
1515
#
1616

1717
org.gradle.daemon=false
18-
org.gradle.parallel=false
19-
org.gradle.jvmargs=-Xmx5120m
18+
org.gradle.parallel=true
2019
org.gradle.workers.max=2
2120

2221
kotlin.incremental=false
23-
kotlin.compiler.execution.strategy=in-process
22+
23+
# Controls KotlinOptions.allWarningsAsErrors.
24+
# This value used in CI and is currently set to false.
25+
# If you want to treat warnings as errors locally, set this property to true
26+
# in your ~/.gradle/gradle.properties file.
27+
warningsAsErrors=false

.github/workflows/blueprints.yaml

+27-45
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,60 @@
1-
name: blueprints
1+
name: build_test
22

33
on:
44
push:
55
branches:
66
- main
7-
- views
87
pull_request:
98
branches:
109
- main
11-
- views
1210

1311
jobs:
1412
build:
15-
runs-on: macos-latest # Needed for emulators
16-
timeout-minutes: 45
13+
runs-on: ubuntu-latest
14+
timeout-minutes: 30
15+
strategy:
16+
matrix:
17+
api-level: [29]
1718

1819
steps:
19-
- name: Checkout
20-
uses: actions/checkout@v4
20+
- uses: actions/checkout@v4
21+
22+
- name: Enable KVM group perms
23+
run: |
24+
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
25+
sudo udevadm control --reload-rules
26+
sudo udevadm trigger --name-match=kvm
27+
ls /dev/kvm
2128
2229
- name: Copy CI gradle.properties
2330
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties
2431

25-
- name: Set up JDK 11
32+
- name: Set Up JDK
2633
uses: actions/setup-java@v4
2734
with:
28-
java-version: 11
29-
30-
- uses: actions/cache@v4
31-
with:
32-
path: |
33-
~/.gradle/caches/modules-*
34-
~/.gradle/caches/jars-*
35-
~/.gradle/caches/build-cache-*
36-
key: gradle-${{ hashFiles('checksum.txt') }}
37-
38-
- name: Build project and UnitTest
39-
run: ./gradlew assembleDebug compileDebugUnitTestKotlin
40-
41-
- name: Spotless
42-
# Spotless is not gradle configuration cache compliant. To allow the rest of the build
43-
# comply, run spotless with a gradle init script and disable the cache.
44-
run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --no-configuration-cache
35+
distribution: 'zulu' # See 'Supported distributions' for available options
36+
java-version: '17'
37+
cache: 'gradle'
4538

46-
- name: Unit tests
47-
run: ./gradlew testDebugUnitTest
39+
- name: Setup Gradle
40+
uses: gradle/actions/setup-gradle@v4
4841

49-
# Needed to accept licenses
5042
- name: Setup Android SDK
5143
uses: android-actions/setup-android@v3
5244

53-
- name: Compile AndroidTests
54-
run: ./gradlew compileDebugAndroidTestKotlin
55-
5645
- name: Run instrumentation tests
5746
uses: reactivecircus/android-emulator-runner@v2
5847
with:
59-
api-level: 31
60-
arch: x86_64
48+
api-level: ${{ matrix.api-level }}
49+
arch: x86
6150
disable-animations: true
62-
disk-size: 2000M
63-
heap-size: 600M
64-
script: ./gradlew connectedDebugAndroidTest
51+
script: ./gradlew connectedCheck --stacktrace
6552

66-
- name: Upload build reports
53+
- name: Upload test reports
6754
if: always()
6855
uses: actions/upload-artifact@v4
6956
with:
70-
name: build-reports
71-
path: app/build/reports/
57+
name: test-reports-${{ matrix.api-level }}
58+
path: ./app/build/reports/androidTests
59+
7260

73-
- name: Upload all outputs
74-
if: failure()
75-
uses: actions/upload-artifact@v4
76-
with:
77-
name: outputs
78-
path: app/build/outputs/

app/build.gradle.kts

+12-13
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@
1717
plugins {
1818
alias(libs.plugins.android.application)
1919
alias(libs.plugins.kotlin.android)
20-
alias(libs.plugins.kapt)
2120
alias(libs.plugins.ksp)
2221
alias(libs.plugins.hilt)
22+
alias(libs.plugins.compose.compiler)
2323
}
2424

2525
android {
26+
namespace = "com.example.android.architecture.blueprints.todoapp"
2627
compileSdk = libs.versions.compileSdk.get().toInt()
2728

2829
defaultConfig {
@@ -78,26 +79,23 @@ android {
7879

7980
buildFeatures {
8081
compose = true
82+
buildConfig = true
8183
}
8284

8385
compileOptions {
84-
sourceCompatibility = JavaVersion.VERSION_1_8
85-
targetCompatibility = JavaVersion.VERSION_1_8
86+
sourceCompatibility = JavaVersion.VERSION_17
87+
targetCompatibility = JavaVersion.VERSION_17
8688
}
8789

8890
kotlinOptions {
89-
jvmTarget = "1.8"
91+
jvmTarget = "17"
9092
}
9193

92-
packagingOptions {
94+
packaging {
9395
excludes += "META-INF/AL2.0"
9496
excludes += "META-INF/LGPL2.1"
9597
}
9698

97-
composeOptions {
98-
kotlinCompilerExtensionVersion = libs.versions.androidxComposeCompiler.get()
99-
}
100-
10199
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
102100
kotlinOptions {
103101
freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn"
@@ -128,7 +126,7 @@ dependencies {
128126
// Hilt
129127
implementation(libs.hilt.android.core)
130128
implementation(libs.androidx.hilt.navigation.compose)
131-
kapt(libs.hilt.compiler)
129+
ksp(libs.hilt.compiler)
132130

133131
// Jetpack Compose
134132
val composeBom = platform(libs.androidx.compose.bom)
@@ -139,7 +137,8 @@ dependencies {
139137
implementation(libs.androidx.compose.foundation.core)
140138
implementation(libs.androidx.compose.foundation.layout)
141139
implementation(libs.androidx.compose.animation)
142-
implementation(libs.androidx.compose.material.core)
140+
implementation(libs.androidx.compose.material3)
141+
implementation(libs.androidx.compose.material.iconsExtended)
143142
implementation(libs.androidx.compose.ui.tooling.preview)
144143
implementation(libs.androidx.navigation.compose)
145144
implementation(libs.androidx.lifecycle.runtimeCompose)
@@ -166,7 +165,7 @@ dependencies {
166165

167166
// JVM tests - Hilt
168167
testImplementation(libs.hilt.android.testing)
169-
kaptTest(libs.hilt.compiler)
168+
kspTest(libs.hilt.compiler)
170169

171170
// Dependencies for Android unit tests
172171
androidTestImplementation(composeBom)
@@ -196,5 +195,5 @@ dependencies {
196195

197196
// AndroidX Test - Hilt testing
198197
androidTestImplementation(libs.hilt.android.testing)
199-
kaptAndroidTest(libs.hilt.compiler)
198+
kspAndroidTest(libs.hilt.compiler)
200199
}

app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/addedittask/AddEditTaskScreenTest.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.example.android.architecture.blueprints.todoapp.addedittask
1818

19-
import androidx.compose.material.Surface
19+
import androidx.compose.material3.Surface
2020
import androidx.compose.ui.test.SemanticsNodeInteraction
2121
import androidx.compose.ui.test.assertIsDisplayed
2222
import androidx.compose.ui.test.hasSetTextAction
@@ -32,18 +32,18 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
3232
import androidx.test.filters.MediumTest
3333
import com.example.android.architecture.blueprints.todoapp.HiltTestActivity
3434
import com.example.android.architecture.blueprints.todoapp.R
35+
import com.example.android.architecture.blueprints.todoapp.TodoTheme
3536
import com.example.android.architecture.blueprints.todoapp.data.TaskRepository
36-
import com.google.accompanist.appcompattheme.AppCompatTheme
3737
import dagger.hilt.android.testing.HiltAndroidRule
3838
import dagger.hilt.android.testing.HiltAndroidTest
39-
import javax.inject.Inject
4039
import kotlinx.coroutines.ExperimentalCoroutinesApi
4140
import kotlinx.coroutines.test.runTest
4241
import org.junit.Assert.assertEquals
4342
import org.junit.Before
4443
import org.junit.Rule
4544
import org.junit.Test
4645
import org.junit.runner.RunWith
46+
import javax.inject.Inject
4747

4848
/**
4949
* Integration test for the Add Task screen.
@@ -70,7 +70,7 @@ class AddEditTaskScreenTest {
7070

7171
// GIVEN - On the "Add Task" screen.
7272
composeTestRule.setContent {
73-
AppCompatTheme {
73+
TodoTheme {
7474
Surface {
7575
AddEditTaskScreen(
7676
viewModel = AddEditTaskViewModel(repository, SavedStateHandle()),

app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/statistics/StatisticsScreenTest.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,25 @@
1616

1717
package com.example.android.architecture.blueprints.todoapp.statistics
1818

19-
import androidx.compose.material.Surface
19+
import androidx.compose.material3.Surface
2020
import androidx.compose.ui.test.assertIsDisplayed
2121
import androidx.compose.ui.test.junit4.createAndroidComposeRule
2222
import androidx.compose.ui.test.onNodeWithText
2323
import androidx.test.ext.junit.runners.AndroidJUnit4
2424
import androidx.test.filters.MediumTest
2525
import com.example.android.architecture.blueprints.todoapp.HiltTestActivity
2626
import com.example.android.architecture.blueprints.todoapp.R
27+
import com.example.android.architecture.blueprints.todoapp.TodoTheme
2728
import com.example.android.architecture.blueprints.todoapp.data.TaskRepository
28-
import com.google.accompanist.appcompattheme.AppCompatTheme
2929
import dagger.hilt.android.testing.HiltAndroidRule
3030
import dagger.hilt.android.testing.HiltAndroidTest
31-
import javax.inject.Inject
3231
import kotlinx.coroutines.ExperimentalCoroutinesApi
3332
import kotlinx.coroutines.test.runTest
3433
import org.junit.Before
3534
import org.junit.Rule
3635
import org.junit.Test
3736
import org.junit.runner.RunWith
37+
import javax.inject.Inject
3838

3939
/**
4040
* Integration test for the statistics screen.
@@ -71,7 +71,7 @@ class StatisticsScreenTest {
7171
}
7272

7373
composeTestRule.setContent {
74-
AppCompatTheme {
74+
TodoTheme {
7575
Surface {
7676
StatisticsScreen(
7777
openDrawer = { },

app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/taskdetail/TaskDetailScreenTest.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package com.example.android.architecture.blueprints.todoapp.taskdetail
1818

19-
import androidx.compose.material.Surface
19+
import androidx.compose.material3.Surface
2020
import androidx.compose.ui.test.assertIsDisplayed
2121
import androidx.compose.ui.test.assertIsOff
2222
import androidx.compose.ui.test.assertIsOn
@@ -27,17 +27,17 @@ import androidx.lifecycle.SavedStateHandle
2727
import androidx.test.ext.junit.runners.AndroidJUnit4
2828
import androidx.test.filters.MediumTest
2929
import com.example.android.architecture.blueprints.todoapp.HiltTestActivity
30+
import com.example.android.architecture.blueprints.todoapp.TodoTheme
3031
import com.example.android.architecture.blueprints.todoapp.data.TaskRepository
31-
import com.google.accompanist.appcompattheme.AppCompatTheme
3232
import dagger.hilt.android.testing.HiltAndroidRule
3333
import dagger.hilt.android.testing.HiltAndroidTest
34-
import javax.inject.Inject
3534
import kotlinx.coroutines.ExperimentalCoroutinesApi
3635
import kotlinx.coroutines.test.runTest
3736
import org.junit.Before
3837
import org.junit.Rule
3938
import org.junit.Test
4039
import org.junit.runner.RunWith
40+
import javax.inject.Inject
4141

4242
/**
4343
* Integration test for the Task Details screen.
@@ -100,7 +100,7 @@ class TaskDetailScreenTest {
100100

101101
private fun setContent(activeTaskId: String) {
102102
composeTestRule.setContent {
103-
AppCompatTheme {
103+
TodoTheme {
104104
Surface {
105105
TaskDetailScreen(
106106
viewModel = TaskDetailViewModel(

app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/tasks/AppNavigationTest.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,17 @@ import androidx.test.filters.LargeTest
3030
import com.example.android.architecture.blueprints.todoapp.HiltTestActivity
3131
import com.example.android.architecture.blueprints.todoapp.R
3232
import com.example.android.architecture.blueprints.todoapp.TodoNavGraph
33+
import com.example.android.architecture.blueprints.todoapp.TodoTheme
3334
import com.example.android.architecture.blueprints.todoapp.data.TaskRepository
34-
import com.google.accompanist.appcompattheme.AppCompatTheme
3535
import dagger.hilt.android.testing.HiltAndroidRule
3636
import dagger.hilt.android.testing.HiltAndroidTest
37-
import javax.inject.Inject
3837
import kotlinx.coroutines.test.runTest
3938
import org.junit.Assert.assertTrue
4039
import org.junit.Before
4140
import org.junit.Rule
4241
import org.junit.Test
4342
import org.junit.runner.RunWith
43+
import javax.inject.Inject
4444

4545
/**
4646
* Tests for scenarios that requires navigating within the app.
@@ -181,7 +181,7 @@ class AppNavigationTest {
181181

182182
private fun setContent() {
183183
composeTestRule.setContent {
184-
AppCompatTheme {
184+
TodoTheme {
185185
TodoNavGraph()
186186
}
187187
}

app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksScreenTest.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package com.example.android.architecture.blueprints.todoapp.tasks
1818

1919
import androidx.annotation.StringRes
20-
import androidx.compose.material.Surface
20+
import androidx.compose.material3.Surface
2121
import androidx.compose.ui.test.assertIsDisplayed
2222
import androidx.compose.ui.test.isToggleable
2323
import androidx.compose.ui.test.junit4.createAndroidComposeRule
@@ -29,17 +29,17 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
2929
import androidx.test.filters.MediumTest
3030
import com.example.android.architecture.blueprints.todoapp.HiltTestActivity
3131
import com.example.android.architecture.blueprints.todoapp.R
32+
import com.example.android.architecture.blueprints.todoapp.TodoTheme
3233
import com.example.android.architecture.blueprints.todoapp.data.TaskRepository
33-
import com.google.accompanist.appcompattheme.AppCompatTheme
3434
import dagger.hilt.android.testing.HiltAndroidRule
3535
import dagger.hilt.android.testing.HiltAndroidTest
36-
import javax.inject.Inject
3736
import kotlinx.coroutines.ExperimentalCoroutinesApi
3837
import kotlinx.coroutines.test.runTest
3938
import org.junit.Before
4039
import org.junit.Rule
4140
import org.junit.Test
4241
import org.junit.runner.RunWith
42+
import javax.inject.Inject
4343

4444
/**
4545
* Integration test for the Task List screen.
@@ -255,7 +255,7 @@ class TasksScreenTest {
255255

256256
private fun setContent() {
257257
composeTestRule.setContent {
258-
AppCompatTheme {
258+
TodoTheme {
259259
Surface {
260260
TasksScreen(
261261
viewModel = TasksViewModel(repository, SavedStateHandle()),

0 commit comments

Comments
 (0)