Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
Expand All @@ -16,6 +18,7 @@
import com.google.firebase.FirebaseApp;
import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.google.firebase.crashlytics.FlutterFirebaseCrashlyticsInternal;
import com.google.firebase.crashlytics.internal.Logger;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall;
Expand All @@ -35,6 +38,9 @@ public class FlutterFirebaseCrashlyticsPlugin
public static final String TAG = "FLTFirebaseCrashlytics";
private MethodChannel channel;

private static final String FIREBASE_CRASHLYTICS_COLLECTION_ENABLED =
"firebase_crashlytics_collection_enabled";

private void initInstance(BinaryMessenger messenger) {
String channelName = "plugins.flutter.io/firebase_crashlytics";
channel = new MethodChannel(messenger, channelName);
Expand Down Expand Up @@ -380,20 +386,42 @@ private boolean isCrashlyticsCollectionEnabled(FirebaseApp app) {
SharedPreferences crashlyticsSharedPrefs =
getCrashlyticsSharedPrefs(app.getApplicationContext());

if (crashlyticsSharedPrefs.contains("firebase_crashlytics_collection_enabled")) {
enabled = crashlyticsSharedPrefs.getBoolean("firebase_crashlytics_collection_enabled", true);
if (crashlyticsSharedPrefs.contains(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED)) {
enabled = crashlyticsSharedPrefs.getBoolean(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED, true);
} else {
if (app.isDataCollectionDefaultEnabled()) {
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
enabled = true;
} else {
enabled = false;
}

Boolean manifestEnabled =
readCrashlyticsDataCollectionEnabledFromManifest(app.getApplicationContext());

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(manifestEnabled);
enabled = manifestEnabled;
}

return enabled;
}

private static Boolean readCrashlyticsDataCollectionEnabledFromManifest(
Context applicationContext) {
try {
final PackageManager packageManager = applicationContext.getPackageManager();
if (packageManager != null) {
final ApplicationInfo applicationInfo =
packageManager.getApplicationInfo(
applicationContext.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null
&& applicationInfo.metaData != null
&& applicationInfo.metaData.containsKey(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED)) {
return applicationInfo.metaData.getBoolean(FIREBASE_CRASHLYTICS_COLLECTION_ENABLED);
}
}
} catch (PackageManager.NameNotFoundException e) {
// This shouldn't happen since it's this app's package, but fall through to default
// if so.
Logger.getLogger().e("Could not read data collection permission from manifest", e);
}
return true;
}

@Override
public Task<Map<String, Object>> getPluginConstantsForFirebaseApp(FirebaseApp firebaseApp) {
TaskCompletionSource<Map<String, Object>> taskCompletionSource = new TaskCompletionSource<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>11.0</string>
<string>12.0</string>
</dict>
</plist>
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1430;
LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
LastUpgradeVersion = "1510"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
3 changes: 3 additions & 0 deletions tests/android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true">
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
<activity
android:name=".MainActivity"
android:exported="true"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,21 @@ void main() {
);
});

group(
'isCrashlyticsCollectionEnabled',
() {
test(
'checks isCrashlyticsCollectionEnabled value set from AndroidManifest.xml',
() async {
bool isCrashlyticsCollectionEnabled =
FirebaseCrashlytics.instance.isCrashlyticsCollectionEnabled;

expect(isCrashlyticsCollectionEnabled, false);
});
},
skip: kIsWeb || defaultTargetPlatform != TargetPlatform.android,
);

group('checkForUnsentReports', () {
test('should throw if automatic crash report is enabled', () async {
await FirebaseCrashlytics.instance
Expand Down