From 798cd1d64b0a2e4da65a5bfda2fd98987190a468 Mon Sep 17 00:00:00 2001 From: johan12345 Date: Sat, 16 Dec 2023 16:57:12 +0100 Subject: [PATCH] implement automatic screenshot generation --- .github/workflows/screenshots.yml | 85 +++++++++++++++++++ app/build.gradle.kts | 1 + .../evmap/screenshot/ScreenshotTest.kt | 41 +++++++++ .../evmap/storage/SavedRegionDaoTest.kt | 2 +- app/src/debug/AndroidManifest.xml | 17 +++- 5 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/screenshots.yml create mode 100644 app/src/androidTest/java/net/vonforst/evmap/screenshot/ScreenshotTest.kt rename app/src/androidTest/java/{com/johan => net/vonforst}/evmap/storage/SavedRegionDaoTest.kt (98%) diff --git a/.github/workflows/screenshots.yml b/.github/workflows/screenshots.yml new file mode 100644 index 000000000..8c4a6d642 --- /dev/null +++ b/.github/workflows/screenshots.yml @@ -0,0 +1,85 @@ +on: + push: + branches: + - '*' + +name: Generate Screenshots + +jobs: + + screenshot: + name: Generate screenshots + runs-on: macos-latest + strategy: + matrix: + api-level: [ 34 ] + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: AVD cache + uses: actions/cache@v3 + id: avd-cache + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-${{ matrix.api-level }} + + - name: create AVD and generate snapshot for caching + if: steps.avd-cache.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + target: playstore + arch: x86_64 + profile: Pixel 4 + force-avd-creation: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: false + script: echo "Generated AVD snapshot for caching." + + - name: Set up Java environment + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: 'zulu' + cache: 'gradle' + + - name: Build app + run: ./gradlew assembleGoogleNormalDebug assembleGoogleNormalAndroidTest + + - name: Start System UI demo mode + run: | + + + - name: Run emulator and generate screenshots + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + target: playstore + arch: x86_64 + profile: Pixel 4 + force-avd-creation: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: false + script: | + adb shell settings put global hidden_api_policy 1 + + # Start demo mode + adb shell settings put global sysui_demo_allowed 1 + + # Display time 12:00 + adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1200 + # Display full mobile data without type + adb shell am broadcast -a com.android.systemui.demo -e command network -e mobile show -e level 4 -e datatype false + adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show -e level 4 -e fully true + # Hide notifications + adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false + # Show full battery but not in charging state + adb shell am broadcast -a com.android.systemui.demo -e command battery -e plugged false -e level 100 + + fastlane screengrab --app_apk_path app/build/outputs/apk/googleNormal/debug/app-google-normal-debug.apk --test_apk_path app/build/outputs/apk/androidTest/googleNormal/debug/app-google-normal-debug-androidTest.apk --tests_package_name=net.vonforst.evmap.debug.test --app_package_name net.vonforst.evmap.debug -p net.vonforst.evmap.screenshot --use_timestamp_suffix false --clear_previous_screenshots true -q en-US,de-DE + + adb shell am broadcast -a com.android.systemui.demo -e command exit + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3b41033bb..b4061ee92 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -332,6 +332,7 @@ dependencies { androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation("androidx.arch.core:core-testing:2.2.0") + androidTestImplementation("tools.fastlane:screengrab:2.1.1") kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.0") diff --git a/app/src/androidTest/java/net/vonforst/evmap/screenshot/ScreenshotTest.kt b/app/src/androidTest/java/net/vonforst/evmap/screenshot/ScreenshotTest.kt new file mode 100644 index 000000000..458d8642b --- /dev/null +++ b/app/src/androidTest/java/net/vonforst/evmap/screenshot/ScreenshotTest.kt @@ -0,0 +1,41 @@ +package net.vonforst.evmap.screenshot + +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import net.vonforst.evmap.MapsActivity +import org.junit.AfterClass +import org.junit.BeforeClass +import org.junit.ClassRule +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import tools.fastlane.screengrab.Screengrab +import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy +import tools.fastlane.screengrab.cleanstatusbar.BluetoothState +import tools.fastlane.screengrab.cleanstatusbar.CleanStatusBar +import tools.fastlane.screengrab.cleanstatusbar.MobileDataType +import tools.fastlane.screengrab.locale.LocaleTestRule + + +@RunWith(AndroidJUnit4::class) +class ScreenshotTest { + companion object { + @JvmStatic + @BeforeClass + fun beforeAll() { + Screengrab.setDefaultScreenshotStrategy(UiAutomatorScreenshotStrategy()) + } + } + + @Rule + @JvmField + val localeTestRule = LocaleTestRule() + + @get:Rule + val activityRule = ActivityScenarioRule(MapsActivity::class.java) + + @Test + fun testTakeScreenshot() { + Screengrab.screenshot("main") + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/johan/evmap/storage/SavedRegionDaoTest.kt b/app/src/androidTest/java/net/vonforst/evmap/storage/SavedRegionDaoTest.kt similarity index 98% rename from app/src/androidTest/java/com/johan/evmap/storage/SavedRegionDaoTest.kt rename to app/src/androidTest/java/net/vonforst/evmap/storage/SavedRegionDaoTest.kt index 9facff520..e48dbfe15 100644 --- a/app/src/androidTest/java/com/johan/evmap/storage/SavedRegionDaoTest.kt +++ b/app/src/androidTest/java/net/vonforst/evmap/storage/SavedRegionDaoTest.kt @@ -1,4 +1,4 @@ -package com.johan.evmap.storage +package net.vonforst.evmap.storage import android.content.Context import androidx.arch.core.executor.testing.InstantTaskExecutorRule diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml index 519962535..c6ea1d347 100644 --- a/app/src/debug/AndroidManifest.xml +++ b/app/src/debug/AndroidManifest.xml @@ -1,5 +1,20 @@ - + + + + + + + + + + + + +