diff --git a/app/build.gradle b/app/build.gradle index 76dcd58..f2d67d9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,10 +1,13 @@ apply plugin: 'com.android.application' apply plugin: 'org.jetbrains.kotlin.android' apply plugin: 'com.google.devtools.ksp' -apply plugin: 'com.google.gms.google-services' -apply plugin: 'com.google.firebase.crashlytics' -def enablePlayRelease = System.getenv('ENABLE_PLAY_RELEASE')?.toBoolean() ?: false +def requestedTasks = gradle.startParameter.taskNames.join(" ").toLowerCase() +def isPlayBuild = requestedTasks.contains("play") || + requestedTasks.isEmpty() || + ((requestedTasks.contains("assemble") || requestedTasks.contains("bundle") || requestedTasks.contains("install")) && !requestedTasks.contains("foss")) + +def enablePlayRelease = System.getenv('ENABLE_PLAY_RELEASE')?.toBoolean() ?: true def isCi = System.getenv("GITHUB_ACTIONS") == "true" || System.getenv("CI") == "true" @@ -19,8 +22,8 @@ android { applicationId = "org.nitri.opentopo" minSdkVersion 24 targetSdkVersion 36 - versionCode = 68 - versionName = "1.30" + versionCode = 69 + versionName = "1.30.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } @@ -100,6 +103,10 @@ android { } } +if (isPlayBuild) { + apply from: rootProject.file("gradle/play-services.gradle") +} + dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) //noinspection GradleCompatible @@ -147,11 +154,3 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0' } - -tasks.matching { it.name.contains("Crashlytics") }.configureEach { - onlyIf { it.name.toLowerCase().contains("play") } -} - -tasks.matching { it.name.endsWith("GoogleServices") }.configureEach { - onlyIf { it.name.toLowerCase().contains("play") } -} diff --git a/app/src/main/java/org/nitri/opentopo/BaseMainActivity.kt b/app/src/main/java/org/nitri/opentopo/BaseMainActivity.kt index 2140e9c..e544a66 100644 --- a/app/src/main/java/org/nitri/opentopo/BaseMainActivity.kt +++ b/app/src/main/java/org/nitri/opentopo/BaseMainActivity.kt @@ -565,7 +565,7 @@ open class BaseMainActivity : AppCompatActivity(), MapFragment.OnFragmentInterac (supportFragmentManager.findFragmentByTag(MAP_FRAGMENT_TAG) as? MapFragment)?.setGpx(validGpx, displayState, shouldZoomToGpx) gpxViewModel.gpxUriString = gpxUriString - // Track GPX loaded event only for files (Play flavor will provide Firebase impl) + // Track GPX loaded event only for files (Play flavor provides the reporting implementation) if (displayState == MapFragment.GpxDisplayState.LOADED_FROM_FILE) { val fileName = try { gpxUriString?.toUri()?.lastPathSegment diff --git a/app/src/main/java/org/nitri/opentopo/MapFragment.kt b/app/src/main/java/org/nitri/opentopo/MapFragment.kt index 045ad99..4c4586f 100644 --- a/app/src/main/java/org/nitri/opentopo/MapFragment.kt +++ b/app/src/main/java/org/nitri/opentopo/MapFragment.kt @@ -475,7 +475,7 @@ class MapFragment : Fragment(), LocationListener, PopupMenu.OnMenuItemClickListe directions.getRouteGpx(coordinates, language, object : Directions.RouteGpxResult { override fun onSuccess(gpx: String) { Log.d(TAG, "GPX: $gpx") - // Analytics: route calculation succeeded (Play flavor logs to Firebase; FOSS no-ops) + // Analytics: route calculation succeeded (Play flavor reports it; FOSS no-ops) AnalyticsProvider.get(requireContext()).trackRouteCalculated( profile = it, waypointCount = coordinates.size diff --git a/app/src/main/java/org/nitri/opentopo/analytics/AnalyticsTracker.kt b/app/src/main/java/org/nitri/opentopo/analytics/AnalyticsTracker.kt index 0e3cde6..186e944 100644 --- a/app/src/main/java/org/nitri/opentopo/analytics/AnalyticsTracker.kt +++ b/app/src/main/java/org/nitri/opentopo/analytics/AnalyticsTracker.kt @@ -4,7 +4,7 @@ import io.ticofab.androidgpxparser.parser.domain.Gpx /** * AnalyticsTracker abstracts analytics reporting so that FOSS stays clean - * and Play flavor can provide a Firebase-backed implementation. + * and Play flavor can provide its own reporting implementation. */ interface AnalyticsTracker { fun trackScreen(screenName: String, screenClass: String) diff --git a/build.gradle b/build.gradle index 03081ce..35091fd 100644 --- a/build.gradle +++ b/build.gradle @@ -9,14 +9,12 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:9.2.1' classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.10' - classpath 'com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.3.6' + classpath 'com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.3.9' + classpath 'com.google.gms:google-services:4.4.4' + classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.7' } } -plugins { - id 'com.google.gms.google-services' version '4.4.3' apply false - id 'com.google.firebase.crashlytics' version '3.0.7' apply false -} allprojects { repositories { google() diff --git a/gradle/play-services.gradle b/gradle/play-services.gradle new file mode 100644 index 0000000..47ca6a4 --- /dev/null +++ b/gradle/play-services.gradle @@ -0,0 +1,2 @@ +apply plugin: 'com.google.gms.google-services' +apply plugin: 'com.google.firebase.crashlytics' \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8f624b7..a36bf0e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Sun Jun 08 14:46:16 CEST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists