From c8052be29a7bddfd2ce99aa038e78971b3765a68 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Feb 2021 23:24:33 +0530 Subject: [PATCH 1/6] build: upgrade to AGP 7.0.0-alpha08 Signed-off-by: Harsh Shandilya --- buildSrc/src/main/java/Dependencies.kt | 4 ++-- gradle.properties | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index d31a647c..07b7f536 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -6,8 +6,8 @@ private const val DAGGER_HILT_VERSION = "2.32-alpha" object Plugins { - const val android = "com.android.tools.build:gradle:7.0.0-alpha07" - const val lintModel = "com.android.tools.lint:lint-model:30.0.0-alpha07" + const val android = "com.android.tools.build:gradle:7.0.0-alpha08" + const val lintModel = "com.android.tools.lint:lint-model:30.0.0-alpha08" const val hilt = "com.google.dagger:hilt-android-gradle-plugin:${DAGGER_HILT_VERSION}" const val kotlin = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30" const val jsemver = "com.github.zafarkhaja:java-semver:0.9.0" diff --git a/gradle.properties b/gradle.properties index 6ee6230d..81d10321 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,7 +29,8 @@ android.useAndroidX=true android.nonTransitiveRClass=true # Generate compile-time only R class for app modules. -android.enableAppCompileTimeRClass=true +# Broke on AGP 7.0.0-alpha08 +# android.enableAppCompileTimeRClass=true # Experimental flags android.keepWorkerActionServicesBetweenBuilds=true From 6e77a5e94bcc2cfc93485d39d58d569e2c463400 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Feb 2021 23:24:45 +0530 Subject: [PATCH 2/6] build: update to Compose 1.0.0-beta01 Signed-off-by: Harsh Shandilya --- .../dev/msfjarvis/lobsters/ui/main/LobstersApp.kt | 4 ++-- .../dev/msfjarvis/lobsters/ui/main/MainActivity.kt | 4 ++-- .../msfjarvis/lobsters/ui/posts/LobstersItem.kt | 4 ++-- buildSrc/src/main/java/Dependencies.kt | 14 +++++++------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt index 74d659e1..5453ee0a 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt @@ -49,7 +49,7 @@ fun LobstersApp() { } val jumpToIndex: (Int) -> Unit = { coroutineScope.launch { - hottestPostsListState.snapToItemIndex(it) + hottestPostsListState.animateScrollToItem(it) } } @@ -100,7 +100,7 @@ fun LobstersBottomNav( }, label = { Text(stringResource(id = screen.labelRes)) }, selected = currentDestination == screen, - alwaysShowLabels = false, + alwaysShowLabel = false, onClick = { if (screen != currentDestination) { navigateToDestination(screen) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt index 0ffb0ffd..c6b5c0fd 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt @@ -3,7 +3,7 @@ package dev.msfjarvis.lobsters.ui.main import android.os.Bundle import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity -import androidx.compose.runtime.Providers +import androidx.compose.runtime.CompositionLocalProvider import dagger.hilt.android.AndroidEntryPoint import dev.msfjarvis.lobsters.ui.theme.LobstersTheme import dev.msfjarvis.lobsters.ui.urllauncher.LocalUrlLauncher @@ -17,7 +17,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { - Providers(LocalUrlLauncher provides urlLauncher) { + CompositionLocalProvider(LocalUrlLauncher provides urlLauncher) { LobstersTheme { LobstersApp() } diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt index 9537ce38..9f9347e3 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt @@ -8,7 +8,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.requiredWidth import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape @@ -111,7 +111,7 @@ fun LobstersItem( transformations(CircleCropTransformation()) }, modifier = Modifier - .width(30.dp) + .requiredWidth(30.dp) .padding(4.dp) .constrainAs(avatar) { top.linkTo(tags.bottom) diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 07b7f536..09988757 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -15,7 +15,7 @@ object Plugins { } object Dependencies { - const val COMPOSE_VERSION = "1.0.0-alpha12" + const val COMPOSE_VERSION = "1.0.0-beta01" object Kotlin { @@ -35,16 +35,16 @@ object Dependencies { object Compose { - const val activity = "androidx.activity:activity-compose:1.3.0-alpha02" + const val activity = "androidx.activity:activity-compose:1.3.0-alpha03" const val compiler = "androidx.compose.compiler:compiler:$COMPOSE_VERSION" const val constraintLayout = - "androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha02" + "androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha03" const val foundation = "androidx.compose.foundation:foundation:$COMPOSE_VERSION" const val foundationLayout = "androidx.compose.foundation:foundation-layout:$COMPOSE_VERSION" - const val lifecycleViewModel = "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01" + const val lifecycleViewModel = "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02" const val material = "androidx.compose.material:material:$COMPOSE_VERSION" - const val navigation = "androidx.navigation:navigation-compose:1.0.0-alpha07" - const val paging = "androidx.paging:paging-compose:1.0.0-alpha07" + const val navigation = "androidx.navigation:navigation-compose:1.0.0-alpha08" + const val paging = "androidx.paging:paging-compose:1.0.0-alpha08" const val runtime = "androidx.compose.runtime:runtime:$COMPOSE_VERSION" const val ui = "androidx.compose.ui:ui:$COMPOSE_VERSION" const val uiUnit = "androidx.compose.ui:ui-unit:$COMPOSE_VERSION" @@ -66,7 +66,7 @@ object Dependencies { object ThirdParty { - const val accompanist = "dev.chrisbanes.accompanist:accompanist-coil:0.5.1" + const val accompanist = "dev.chrisbanes.accompanist:accompanist-coil:0.6.0" object Moshi { From 8b976cee3c0bd4bfd82c38c94f26e448db7a0128 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Thu, 25 Feb 2021 09:57:08 +0530 Subject: [PATCH 3/6] BottomNavigationLayoutTest: remove unneeded assertExists Signed-off-by: Harsh Shandilya --- .../dev/msfjarvis/lobsters/BottomNavigationLayoutTest.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/src/androidTest/java/dev/msfjarvis/lobsters/BottomNavigationLayoutTest.kt b/app/src/androidTest/java/dev/msfjarvis/lobsters/BottomNavigationLayoutTest.kt index d5aa53e2..e0c61417 100644 --- a/app/src/androidTest/java/dev/msfjarvis/lobsters/BottomNavigationLayoutTest.kt +++ b/app/src/androidTest/java/dev/msfjarvis/lobsters/BottomNavigationLayoutTest.kt @@ -48,7 +48,6 @@ class BottomNavigationLayoutTest { fun bottomNavItemCountTest() { // Test to make sure total items are equal to enum objects present in Destination composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertExists() .assertIsDisplayed() .onChildren() .assertCountEquals(Destination.values().size) @@ -58,7 +57,6 @@ class BottomNavigationLayoutTest { fun bottomNavItemTest() { // Check hottest BottomNavItem is rendered correctly composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertExists() .assertIsDisplayed() .onChildAt(0) .assertTextEquals("Hottest") @@ -67,7 +65,6 @@ class BottomNavigationLayoutTest { // Check saved BottomNavItem is rendered correctly composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertExists() .assertIsDisplayed() .onChildAt(1) .assertTextEquals("Saved") @@ -79,7 +76,6 @@ class BottomNavigationLayoutTest { fun bottomNavItemSelectedTest() { // Check hottest BottomNav item is selected composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertExists() .assertIsDisplayed() .onChildAt(0) .assertIsSelected() @@ -87,7 +83,6 @@ class BottomNavigationLayoutTest { // Check saved BottomNav item is not selected composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertExists() .assertIsDisplayed() .onChildAt(1) .assertIsNotSelected() @@ -99,14 +94,12 @@ class BottomNavigationLayoutTest { // Check hottest BottomNav item is not selected composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertExists() .assertIsDisplayed() .onChildAt(0) .assertIsNotSelected() // Check saved BottomNav item is selected composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertExists() .assertIsDisplayed() .onChildAt(1) .assertIsSelected() From f745ff3e91d995501a543828fe1d540817312223 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Thu, 25 Feb 2021 09:58:18 +0530 Subject: [PATCH 4/6] github: don't run tests on merge to dev and use macOS runner Signed-off-by: Harsh Shandilya --- .github/workflows/pull_request.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index e87dea37..a6f9eceb 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -5,11 +5,10 @@ on: branches: - staging - trying - - develop jobs: test-pr: - runs-on: ubuntu-latest + runs-on: macOS-latest steps: - uses: actions/setup-java@d202f5dbf7256730fb690ec59f6381650114feb2 with: From 095cb8d3a17e27596a9e22e84fabd1bdc664ba76 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Thu, 25 Feb 2021 19:54:43 +0530 Subject: [PATCH 5/6] Remove BottomNavigationLayoutTest Boss man Jim Sproch recommends we use screenshot testing rather than asserting on nodes since they can change under us at any time as more optimisations come into play. Signed-off-by: Harsh Shandilya --- .../lobsters/BottomNavigationLayoutTest.kt | 108 ------------------ 1 file changed, 108 deletions(-) delete mode 100644 app/src/androidTest/java/dev/msfjarvis/lobsters/BottomNavigationLayoutTest.kt diff --git a/app/src/androidTest/java/dev/msfjarvis/lobsters/BottomNavigationLayoutTest.kt b/app/src/androidTest/java/dev/msfjarvis/lobsters/BottomNavigationLayoutTest.kt deleted file mode 100644 index e0c61417..00000000 --- a/app/src/androidTest/java/dev/msfjarvis/lobsters/BottomNavigationLayoutTest.kt +++ /dev/null @@ -1,108 +0,0 @@ -package dev.msfjarvis.lobsters - -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.test.assertContentDescriptionEquals -import androidx.compose.ui.test.assertCountEquals -import androidx.compose.ui.test.assertHasClickAction -import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.assertIsNotSelected -import androidx.compose.ui.test.assertIsSelected -import androidx.compose.ui.test.assertTextEquals -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.onChildAt -import androidx.compose.ui.test.onChildren -import androidx.compose.ui.test.onNodeWithTag -import androidx.compose.ui.test.performClick -import dev.msfjarvis.lobsters.ui.main.LobstersBottomNav -import dev.msfjarvis.lobsters.ui.navigation.Destination -import dev.msfjarvis.lobsters.ui.theme.LobstersTheme -import org.junit.Before -import org.junit.Rule -import org.junit.Test - - -class BottomNavigationLayoutTest { - - @get:Rule - val composeTestRule = createComposeRule() - - @Before - fun setUp() { - composeTestRule.setContent { - LobstersTheme { - var mutableDestination by remember { mutableStateOf(Destination.startDestination) } - - LobstersBottomNav( - currentDestination = mutableDestination, - navigateToDestination = { mutableDestination = it }, - jumpToIndex = {} - ) - } - } - } - - @Test - fun bottomNavItemCountTest() { - // Test to make sure total items are equal to enum objects present in Destination - composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertIsDisplayed() - .onChildren() - .assertCountEquals(Destination.values().size) - } - - @Test - fun bottomNavItemTest() { - // Check hottest BottomNavItem is rendered correctly - composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertIsDisplayed() - .onChildAt(0) - .assertTextEquals("Hottest") - .assertContentDescriptionEquals("Hottest") - .assertHasClickAction() - - // Check saved BottomNavItem is rendered correctly - composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertIsDisplayed() - .onChildAt(1) - .assertTextEquals("Saved") - .assertContentDescriptionEquals("Saved") - .assertHasClickAction() - } - - @Test - fun bottomNavItemSelectedTest() { - // Check hottest BottomNav item is selected - composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertIsDisplayed() - .onChildAt(0) - .assertIsSelected() - .assertTextEquals("Hottest") - - // Check saved BottomNav item is not selected - composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertIsDisplayed() - .onChildAt(1) - .assertIsNotSelected() - - // Select the saved BottomNav item - composeTestRule.onNodeWithTag("LobstersBottomNav") - .onChildAt(1) - .performClick() - - // Check hottest BottomNav item is not selected - composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertIsDisplayed() - .onChildAt(0) - .assertIsNotSelected() - - // Check saved BottomNav item is selected - composeTestRule.onNodeWithTag("LobstersBottomNav") - .assertIsDisplayed() - .onChildAt(1) - .assertIsSelected() - .assertTextEquals("Saved") - } -} From 5d74c6787fdba3cf966ebfa46bea57a37b666639 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Thu, 25 Feb 2021 19:55:33 +0530 Subject: [PATCH 6/6] github: disable unneeded emulator runner Signed-off-by: Harsh Shandilya --- .github/workflows/pull_request.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index a6f9eceb..257b71e1 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -21,16 +21,16 @@ jobs: with: arguments: test --stacktrace - - name: Run instrumentation tests - uses: reactivecircus/android-emulator-runner@08b092e904025fada32a01b711af1e7ff7b7a4a3 - with: - api-level: 23 - target: default - script: | - adb shell settings put global animator_duration_scale 0 - adb shell settings put global transition_animation_scale 0 - adb shell settings put global window_animation_scale 0 - ./gradlew :app:connectedDebugAndroidTest +# - name: Run instrumentation tests +# uses: reactivecircus/android-emulator-runner@08b092e904025fada32a01b711af1e7ff7b7a4a3 +# with: +# api-level: 23 +# target: default +# script: | +# adb shell settings put global animator_duration_scale 0 +# adb shell settings put global transition_animation_scale 0 +# adb shell settings put global window_animation_scale 0 +# ./gradlew :app:connectedDebugAndroidTest - name: (Fail-only) upload test report if: failure()