Skip to content

Commit ed4d371

Browse files
authored
Add logging of data collection state (firebase#1841)
Keeps track of what the current state of data collection is, and logs the current state and where it was read from every time the state is checked. Also adds @nullable annotations to clarify internal method calls.
1 parent ed3ff88 commit ed4d371

File tree

2 files changed

+44
-20
lines changed

2 files changed

+44
-20
lines changed

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/CrashlyticsCore.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import android.content.Context;
1818
import android.util.Log;
1919
import androidx.annotation.NonNull;
20+
import androidx.annotation.Nullable;
2021
import com.google.android.gms.tasks.Task;
2122
import com.google.android.gms.tasks.Tasks;
2223
import com.google.firebase.FirebaseApp;
@@ -247,7 +248,7 @@ private Task<Void> doBackgroundInitialization(SettingsDataProvider settingsProvi
247248

248249
// endregion
249250

250-
public void setCrashlyticsCollectionEnabled(Boolean enabled) {
251+
public void setCrashlyticsCollectionEnabled(@Nullable Boolean enabled) {
251252
dataCollectionArbiter.setCrashlyticsDataCollectionEnabled(enabled);
252253
}
253254

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/DataCollectionArbiter.java

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.content.SharedPreferences;
2020
import android.content.pm.ApplicationInfo;
2121
import android.content.pm.PackageManager;
22+
import androidx.annotation.Nullable;
2223
import com.google.android.gms.tasks.Task;
2324
import com.google.android.gms.tasks.TaskCompletionSource;
2425
import com.google.firebase.FirebaseApp;
@@ -37,7 +38,9 @@ public class DataCollectionArbiter {
3738
TaskCompletionSource<Void> dataCollectionEnabledTask = new TaskCompletionSource<>();
3839
boolean taskResolved = false;
3940

40-
private Boolean crashlyticsDataCollectionEnabled;
41+
private boolean setInManifest = false;
42+
43+
@Nullable private Boolean crashlyticsDataCollectionEnabled;
4144

4245
/**
4346
* A Task that will be resolved when explicit data collection permission is granted by calling
@@ -52,7 +55,7 @@ public DataCollectionArbiter(FirebaseApp app) {
5255
firebaseApp = app;
5356
sharedPreferences = CommonUtils.getSharedPrefs(applicationContext);
5457

55-
Boolean dataCollectionEnabled = getDataCollectionValueFromSharedPreferences(sharedPreferences);
58+
Boolean dataCollectionEnabled = getDataCollectionValueFromSharedPreferences();
5659
if (dataCollectionEnabled == null) {
5760
dataCollectionEnabled = getDataCollectionValueFromManifest(applicationContext);
5861
}
@@ -68,12 +71,15 @@ public DataCollectionArbiter(FirebaseApp app) {
6871
}
6972

7073
public synchronized boolean isAutomaticDataCollectionEnabled() {
71-
return crashlyticsDataCollectionEnabled != null
72-
? crashlyticsDataCollectionEnabled
73-
: firebaseApp.isDataCollectionDefaultEnabled();
74+
final boolean dataCollectionEnabled =
75+
crashlyticsDataCollectionEnabled != null
76+
? crashlyticsDataCollectionEnabled
77+
: firebaseApp.isDataCollectionDefaultEnabled();
78+
logDataCollectionState(dataCollectionEnabled);
79+
return dataCollectionEnabled;
7480
}
7581

76-
public synchronized void setCrashlyticsDataCollectionEnabled(Boolean enabled) {
82+
public synchronized void setCrashlyticsDataCollectionEnabled(@Nullable Boolean enabled) {
7783
crashlyticsDataCollectionEnabled =
7884
(enabled != null)
7985
? enabled
@@ -125,35 +131,40 @@ public void grantDataCollectionPermission(boolean dataCollectionToken) {
125131
dataCollectionExplicitlyApproved.trySetResult(null);
126132
}
127133

128-
@SuppressLint({"ApplySharedPref"})
129-
private static void storeDataCollectionValueInSharedPreferences(
130-
SharedPreferences sharedPreferences, Boolean enabled) {
131-
final SharedPreferences.Editor prefsEditor = sharedPreferences.edit();
132-
if (enabled != null) {
133-
prefsEditor.putBoolean(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED, enabled);
134-
} else {
135-
prefsEditor.remove(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED);
136-
}
137-
prefsEditor.commit();
134+
private void logDataCollectionState(boolean dataCollectionEnabled) {
135+
final String stateString = dataCollectionEnabled ? "ENABLED" : "DISABLED";
136+
final String fromString =
137+
crashlyticsDataCollectionEnabled == null
138+
? "global Firebase setting"
139+
: setInManifest ? FIREBASE_CRASHLYTICS_COLLECTION_ENABLED + " manifest flag" : "API";
140+
Logger.getLogger()
141+
.d(
142+
String.format(
143+
"Crashlytics automatic data collection %s by %s.", stateString, fromString));
138144
}
139145

140-
private static Boolean getDataCollectionValueFromSharedPreferences(
141-
SharedPreferences sharedPreferences) {
146+
@Nullable
147+
private Boolean getDataCollectionValueFromSharedPreferences() {
142148
if (sharedPreferences.contains(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED)) {
149+
setInManifest = false;
143150
return sharedPreferences.getBoolean(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED, true);
144151
}
145152
return null;
146153
}
147154

148-
private static Boolean getDataCollectionValueFromManifest(Context applicationContext) {
155+
@Nullable
156+
private Boolean getDataCollectionValueFromManifest(Context applicationContext) {
149157
final Boolean manifestSetting =
150158
readCrashlyticsDataCollectionEnabledFromManifest(applicationContext);
151159
if (manifestSetting == null) {
160+
setInManifest = false;
152161
return null;
153162
}
163+
setInManifest = true;
154164
return Boolean.TRUE.equals(manifestSetting);
155165
}
156166

167+
@Nullable
157168
private static Boolean readCrashlyticsDataCollectionEnabledFromManifest(
158169
Context applicationContext) {
159170
try {
@@ -175,4 +186,16 @@ private static Boolean readCrashlyticsDataCollectionEnabledFromManifest(
175186
}
176187
return null;
177188
}
189+
190+
@SuppressLint({"ApplySharedPref"})
191+
private static void storeDataCollectionValueInSharedPreferences(
192+
SharedPreferences sharedPreferences, Boolean enabled) {
193+
final SharedPreferences.Editor prefsEditor = sharedPreferences.edit();
194+
if (enabled != null) {
195+
prefsEditor.putBoolean(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED, enabled);
196+
} else {
197+
prefsEditor.remove(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED);
198+
}
199+
prefsEditor.commit();
200+
}
178201
}

0 commit comments

Comments
 (0)