diff --git a/firebase-common/CHANGELOG.md b/firebase-common/CHANGELOG.md index b16178ee1cd..52ac519f7ac 100644 --- a/firebase-common/CHANGELOG.md +++ b/firebase-common/CHANGELOG.md @@ -1,5 +1,7 @@ # Unreleased +- [feature] Added support for reading the `recaptcha_site_key` value from the `google-services.json` + file. (#8216) - [fixed] Resolved a thread deadlock in HeartBeatInfoStorage when using Jetpack DataStore background executors.(#8182) # 22.0.1 diff --git a/firebase-common/api.txt b/firebase-common/api.txt index 4da45aa2621..ffa8cfdefc8 100644 --- a/firebase-common/api.txt +++ b/firebase-common/api.txt @@ -39,6 +39,7 @@ package com.google.firebase { method public String? getDatabaseUrl(); method public String? getGcmSenderId(); method public String? getProjectId(); + method public String? getRecaptchaSiteKey(); method public String? getStorageBucket(); } @@ -51,6 +52,7 @@ package com.google.firebase { method public com.google.firebase.FirebaseOptions.Builder setDatabaseUrl(String?); method public com.google.firebase.FirebaseOptions.Builder setGcmSenderId(String?); method public com.google.firebase.FirebaseOptions.Builder setProjectId(String?); + method public com.google.firebase.FirebaseOptions.Builder setRecaptchaSiteKey(String?); method public com.google.firebase.FirebaseOptions.Builder setStorageBucket(String?); } diff --git a/firebase-common/firebase-common.gradle.kts b/firebase-common/firebase-common.gradle.kts index a406b0b1707..51f22a9608d 100644 --- a/firebase-common/firebase-common.gradle.kts +++ b/firebase-common/firebase-common.gradle.kts @@ -50,7 +50,10 @@ android { targetSdk = targetSdkVersion unitTests { isIncludeAndroidResources = true } } - lint { targetSdk = targetSdkVersion } + lint { + targetSdk = targetSdkVersion + baseline = file("lint-baseline.xml") + } } kotlin { compilerOptions { jvmTarget = JvmTarget.JVM_1_8 } } diff --git a/firebase-common/gradle.properties b/firebase-common/gradle.properties index ad317096e94..4d98af6827e 100644 --- a/firebase-common/gradle.properties +++ b/firebase-common/gradle.properties @@ -1,3 +1,3 @@ -version=22.0.2 +version=22.1.0 latestReleasedVersion=22.0.1 android.enableUnitTestBinaryResources=true diff --git a/firebase-common/lint-baseline.xml b/firebase-common/lint-baseline.xml new file mode 100644 index 00000000000..6c5b48a6993 --- /dev/null +++ b/firebase-common/lint-baseline.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/firebase-common/src/androidTest/java/com/google/firebase/FirebaseOptionsTest.java b/firebase-common/src/androidTest/java/com/google/firebase/FirebaseOptionsTest.java index 9140b7d5cee..93d46f52b49 100644 --- a/firebase-common/src/androidTest/java/com/google/firebase/FirebaseOptionsTest.java +++ b/firebase-common/src/androidTest/java/com/google/firebase/FirebaseOptionsTest.java @@ -30,6 +30,7 @@ public class FirebaseOptionsTest { private static final String GA_TRACKING_ID = "UA-123456-2"; private static final String GCM_SENDER_ID = "309678045053"; private static final String STORAGE_BUCKET = "ghconfigtest-644f2"; + private static final String RECAPTCHA_SITE_KEY = "6L00000sAAAAAAaaaaaAAaa00000_AAAaAaaAa00"; private static final String GCP_PROJECT_ID = "test-product-id"; private static final FirebaseOptions ALL_VALUES_OPTIONS = @@ -40,6 +41,7 @@ public class FirebaseOptionsTest { .setGaTrackingId(GA_TRACKING_ID) .setGcmSenderId(GCM_SENDER_ID) .setStorageBucket(STORAGE_BUCKET) + .setRecaptchaSiteKey(RECAPTCHA_SITE_KEY) .setProjectId(GCP_PROJECT_ID) .build(); @@ -53,6 +55,7 @@ public void createOptionsWithAllValuesSet() { .setGaTrackingId(GA_TRACKING_ID) .setGcmSenderId(GCM_SENDER_ID) .setStorageBucket(STORAGE_BUCKET) + .setRecaptchaSiteKey(RECAPTCHA_SITE_KEY) .setProjectId(GCP_PROJECT_ID) .build(); assertThat(firebaseOptions.getApplicationId()).isEqualTo(GOOGLE_APP_ID); @@ -61,6 +64,7 @@ public void createOptionsWithAllValuesSet() { assertThat(firebaseOptions.getGaTrackingId()).isEqualTo(GA_TRACKING_ID); assertThat(firebaseOptions.getGcmSenderId()).isEqualTo(GCM_SENDER_ID); assertThat(firebaseOptions.getStorageBucket()).isEqualTo(STORAGE_BUCKET); + assertThat(firebaseOptions.getRecaptchaSiteKey()).isEqualTo(RECAPTCHA_SITE_KEY); assertThat(firebaseOptions.getProjectId()).isEqualTo(GCP_PROJECT_ID); } diff --git a/firebase-common/src/main/java/com/google/firebase/FirebaseOptions.java b/firebase-common/src/main/java/com/google/firebase/FirebaseOptions.java index 2091670cfff..32f18f970ca 100644 --- a/firebase-common/src/main/java/com/google/firebase/FirebaseOptions.java +++ b/firebase-common/src/main/java/com/google/firebase/FirebaseOptions.java @@ -36,8 +36,9 @@ public final class FirebaseOptions { private static final String DATABASE_URL_RESOURCE_NAME = "firebase_database_url"; private static final String GA_TRACKING_ID_RESOURCE_NAME = "ga_trackingId"; private static final String GCM_SENDER_ID_RESOURCE_NAME = "gcm_defaultSenderId"; - private static final String STORAGE_BUCKET_RESOURCE_NAME = "google_storage_bucket"; private static final String PROJECT_ID_RESOURCE_NAME = "project_id"; + private static final String RECAPTCHA_SITE_KEY_RESOURCE_NAME = "recaptcha_site_key"; + private static final String STORAGE_BUCKET_RESOURCE_NAME = "google_storage_bucket"; private final String apiKey; private final String applicationId; @@ -45,6 +46,7 @@ public final class FirebaseOptions { private final String gaTrackingId; private final String gcmSenderId; private final String storageBucket; + private final String recaptchaSiteKey; private final String projectId; /** Builder for constructing FirebaseOptions. */ @@ -55,6 +57,7 @@ public static final class Builder { private String gaTrackingId; private String gcmSenderId; private String storageBucket; + private String recaptchaSiteKey; private String projectId; /** Constructs an empty builder. */ @@ -73,6 +76,7 @@ public Builder(@NonNull FirebaseOptions options) { gaTrackingId = options.gaTrackingId; gcmSenderId = options.gcmSenderId; storageBucket = options.storageBucket; + recaptchaSiteKey = options.recaptchaSiteKey; projectId = options.projectId; } @@ -115,6 +119,12 @@ public Builder setStorageBucket(@Nullable String storageBucket) { return this; } + @NonNull + public Builder setRecaptchaSiteKey(@Nullable String recaptchaSiteKey) { + this.recaptchaSiteKey = recaptchaSiteKey; + return this; + } + @NonNull public Builder setProjectId(@Nullable String projectId) { this.projectId = projectId; @@ -124,7 +134,14 @@ public Builder setProjectId(@Nullable String projectId) { @NonNull public FirebaseOptions build() { return new FirebaseOptions( - applicationId, apiKey, databaseUrl, gaTrackingId, gcmSenderId, storageBucket, projectId); + applicationId, + apiKey, + databaseUrl, + gaTrackingId, + gcmSenderId, + storageBucket, + recaptchaSiteKey, + projectId); } } @@ -135,6 +152,7 @@ private FirebaseOptions( @Nullable String gaTrackingId, @Nullable String gcmSenderId, @Nullable String storageBucket, + @Nullable String recaptchaSiteKey, @Nullable String projectId) { Preconditions.checkState(!isEmptyOrWhitespace(applicationId), "ApplicationId must be set."); this.applicationId = applicationId; @@ -143,6 +161,7 @@ private FirebaseOptions( this.gaTrackingId = gaTrackingId; this.gcmSenderId = gcmSenderId; this.storageBucket = storageBucket; + this.recaptchaSiteKey = recaptchaSiteKey; this.projectId = projectId; } @@ -165,6 +184,7 @@ public static FirebaseOptions fromResource(@NonNull Context context) { reader.getString(GA_TRACKING_ID_RESOURCE_NAME), reader.getString(GCM_SENDER_ID_RESOURCE_NAME), reader.getString(STORAGE_BUCKET_RESOURCE_NAME), + reader.getString(RECAPTCHA_SITE_KEY_RESOURCE_NAME), reader.getString(PROJECT_ID_RESOURCE_NAME)); } @@ -216,6 +236,12 @@ public String getStorageBucket() { return storageBucket; } + /** The Google Cloud Storage bucket name, e.g. abc-xyz-123.storage.firebase.com. */ + @Nullable + public String getRecaptchaSiteKey() { + return recaptchaSiteKey; + } + /** The Google Cloud project ID, e.g. my-project-1234 */ @Nullable public String getProjectId() { @@ -234,13 +260,21 @@ public boolean equals(Object o) { && Objects.equal(gaTrackingId, other.gaTrackingId) && Objects.equal(gcmSenderId, other.gcmSenderId) && Objects.equal(storageBucket, other.storageBucket) + && Objects.equal(recaptchaSiteKey, other.recaptchaSiteKey) && Objects.equal(projectId, other.projectId); } @Override public int hashCode() { return Objects.hashCode( - applicationId, apiKey, databaseUrl, gaTrackingId, gcmSenderId, storageBucket, projectId); + applicationId, + apiKey, + databaseUrl, + gaTrackingId, + gcmSenderId, + storageBucket, + recaptchaSiteKey, + projectId); } @Override @@ -251,6 +285,7 @@ public String toString() { .add("databaseUrl", databaseUrl) .add("gcmSenderId", gcmSenderId) .add("storageBucket", storageBucket) + .add("recaptchaSiteKey", recaptchaSiteKey) .add("projectId", projectId) .toString(); }