1919import  android .content .SharedPreferences ;
2020import  android .content .pm .ApplicationInfo ;
2121import  android .content .pm .PackageManager ;
22+ import  androidx .annotation .Nullable ;
2223import  com .google .android .gms .tasks .Task ;
2324import  com .google .android .gms .tasks .TaskCompletionSource ;
2425import  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