From eb61cd17274cd844852100a74702bf2d53178eb2 Mon Sep 17 00:00:00 2001 From: Bryan Tran Date: Sun, 8 Feb 2026 21:51:02 -0500 Subject: [PATCH 1/6] Use Secrets Gradle plugin for Maps API key https://developers.google.com/maps/documentation/android-sdk/secrets-gradle-plugin --- app/build.gradle.kts | 1 + app/src/main/AndroidManifest.xml | 2 +- build.gradle.kts | 1 + gradle/libs.versions.toml | 2 ++ 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 636bec7..15d9d8e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -7,6 +7,7 @@ plugins { id("com.mikepenz.aboutlibraries.plugin") id("com.google.gms.google-services") id("org.jlleitschuh.gradle.ktlint") + id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") alias(libs.plugins.compose.compiler) alias(libs.plugins.hilt) alias(libs.plugins.kotlin.ksp) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index edecf27..6a6854e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,7 +32,7 @@ + android:value="${MAPS_API_KEY}" /> Date: Sun, 8 Feb 2026 22:48:15 -0500 Subject: [PATCH 2/6] Create release.yml --- .github/workflows/release.yml | 81 +++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..f226d51 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,81 @@ +name: Build & Publish Signed Release + +on: + workflow_dispatch: + push: + tags: + - "v*.*.*" + +permissions: + contents: write + +env: + MAIN_MODULE: app + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + cache: gradle + + - name: Make Gradle executable + run: chmod +x ./gradlew + + - name: Create local.properties + run: | + echo "MAPS_API_KEY=${{ secrets.MAPS_API_KEY }}" >> local.properties + + - name: Build Release APK + AAB + run: | + ./gradlew :${{ env.MAIN_MODULE }}:assembleRelease :${{ env.MAIN_MODULE }}:bundleRelease + + - name: Sign release APK + id: sign_apk + uses: r0adkll/sign-android-release@v1 + with: + releaseDirectory: ${{ env.MAIN_MODULE }}/build/outputs/apk/release + signingKeyBase64: ${{ secrets.SIGNING_KEYSTORE_BASE64 }} + alias: ${{ secrets.SIGNING_KEY_ALIAS }} + keyStorePassword: ${{ secrets.SIGNING_STORE_PASSWORD }} + keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }} + + - name: Sign release AAB + id: sign_aab + uses: r0adkll/sign-android-release@v1 + with: + releaseDirectory: ${{ env.MAIN_MODULE }}/build/outputs/bundle/release + signingKeyBase64: ${{ secrets.SIGNING_KEYSTORE_BASE64 }} + alias: ${{ secrets.SIGNING_KEY_ALIAS }} + keyStorePassword: ${{ secrets.SIGNING_STORE_PASSWORD }} + keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }} + + - name: Upload artifacts (Actions) + uses: actions/upload-artifact@v4 + with: + name: release-build + path: | + ${{ steps.sign_apk.outputs.signedReleaseFile }} + ${{ steps.sign_aab.outputs.signedReleaseFile }} + if: always() + + - name: Create GitHub Release + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v2 + with: + files: | + ${{ steps.sign_apk.outputs.signedReleaseFile }} + ${{ steps.sign_aab.outputs.signedReleaseFile }} + generate_release_notes: true + + - name: Cleanup secrets + if: always() + run: rm -f local.properties From e41e9d52e99473749f22502ccf7305b308a5aab4 Mon Sep 17 00:00:00 2001 From: Bryan Tran Date: Mon, 9 Feb 2026 11:51:47 -0500 Subject: [PATCH 3/6] Create build-and-test.yml and draft releases --- .github/workflows/build-and-test.yml | 50 ++++++++++++++++++++++++++++ .github/workflows/release.yml | 5 +-- 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/build-and-test.yml diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml new file mode 100644 index 0000000..647fda6 --- /dev/null +++ b/.github/workflows/build-and-test.yml @@ -0,0 +1,50 @@ +name: Build and Test + +on: + pull_request: + push: + branches: [ "main" ] + +permissions: + contents: read + +env: + MAIN_MODULE: app + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + + - name: Make Gradle executable + run: chmod +x ./gradlew + + - name: Create local.properties + if: ${{ secrets.MAPS_API_KEY != '' }} + run: | + echo "MAPS_API_KEY=${{ secrets.MAPS_API_KEY }}" > local.properties + + - name: Ktlint Check + run: ./gradlew ktlintCheck + + - name: Build Debug + run: ./gradlew :${{ env.MAIN_MODULE }}:assembleDebug + + - name: Unit Tests + run: ./gradlew testDebugUnitTest + + - name: Cleanup + if: always() + run: rm -f local.properties diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f226d51..443ac9e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,7 +32,7 @@ jobs: - name: Create local.properties run: | - echo "MAPS_API_KEY=${{ secrets.MAPS_API_KEY }}" >> local.properties + echo "MAPS_API_KEY=${{ secrets.MAPS_API_KEY }}" > local.properties - name: Build Release APK + AAB run: | @@ -65,7 +65,6 @@ jobs: path: | ${{ steps.sign_apk.outputs.signedReleaseFile }} ${{ steps.sign_aab.outputs.signedReleaseFile }} - if: always() - name: Create GitHub Release if: startsWith(github.ref, 'refs/tags/') @@ -75,6 +74,8 @@ jobs: ${{ steps.sign_apk.outputs.signedReleaseFile }} ${{ steps.sign_aab.outputs.signedReleaseFile }} generate_release_notes: true + draft: true + prerelease: true - name: Cleanup secrets if: always() From 1a7755932fe5cc550d8dece77a8ef1cb9ee0cd41 Mon Sep 17 00:00:00 2001 From: Bryan Tran Date: Tue, 10 Feb 2026 00:22:37 -0500 Subject: [PATCH 4/6] Run action again with secret --- app/src/main/res/values/strings.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 61df2c4..4c90806 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -129,8 +129,6 @@ Base URL Changing the URL will restart the app and stop all running services Invalid URL - More accessible shuttle icons - Colorblind mode %1$d meters Libraries used Dev options activated From b639e2742bb38fd0d9791a78f7e317973a43bdb9 Mon Sep 17 00:00:00 2001 From: Bryan Tran Date: Tue, 10 Feb 2026 00:55:39 -0500 Subject: [PATCH 5/6] Run action again with secret --- .github/workflows/build-and-test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 647fda6..c4c8de0 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -32,7 +32,6 @@ jobs: run: chmod +x ./gradlew - name: Create local.properties - if: ${{ secrets.MAPS_API_KEY != '' }} run: | echo "MAPS_API_KEY=${{ secrets.MAPS_API_KEY }}" > local.properties From 37082e7a73475f40960d8bb67d3028eaa327869e Mon Sep 17 00:00:00 2001 From: Bryan Tran Date: Tue, 10 Feb 2026 01:33:44 -0500 Subject: [PATCH 6/6] Forgot to fix errors --- .../ui/settings/SettingsScreen.kt | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/app/src/main/java/edu/rpi/shuttletracker/ui/settings/SettingsScreen.kt b/app/src/main/java/edu/rpi/shuttletracker/ui/settings/SettingsScreen.kt index 525207c..1c81800 100644 --- a/app/src/main/java/edu/rpi/shuttletracker/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/edu/rpi/shuttletracker/ui/settings/SettingsScreen.kt @@ -11,7 +11,6 @@ import androidx.compose.material.icons.outlined.Code import androidx.compose.material.icons.outlined.Contrast import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.RestartAlt -import androidx.compose.material.icons.outlined.Visibility import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -21,7 +20,6 @@ import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults @@ -128,23 +126,6 @@ fun SettingsScreen( } } -@Composable -fun ColorBlindSettingItem( - colorBlindMode: Boolean, - updateColorBlindMode: (Boolean) -> Unit, -) { - SettingsItem( - icon = Icons.Outlined.Visibility, - stringResource(R.string.color_blind_mode), - stringResource(R.string.color_blind_description), - ) { - Switch( - checked = colorBlindMode, - onCheckedChange = { updateColorBlindMode(it) }, - ) - } -} - @Composable fun ThemeModeSettingItem( themeMode: ThemeMode,