diff --git a/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/IdManager.java b/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/IdManager.java index 1117ecdd046..25877d8d773 100644 --- a/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/IdManager.java +++ b/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/IdManager.java @@ -104,7 +104,6 @@ private static String formatId(@NonNull String id) { @Override @NonNull public synchronized InstallIds getInstallIds() { - CrashlyticsWorkers.checkBackgroundThread(); if (!shouldRefresh()) { return installIds; } @@ -183,7 +182,7 @@ private String readCachedCrashlyticsInstallId(SharedPreferences prefs) { */ @NonNull public FirebaseInstallationId fetchTrueFid(boolean validate) { - CrashlyticsWorkers.checkBackgroundThread(); // This fetch blocks, never do it on main. + CrashlyticsWorkers.checkNotMainThread(); // This fetch blocks, never do it on main. String fid = null; String authToken = null; diff --git a/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/concurrency/CrashlyticsWorkers.kt b/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/concurrency/CrashlyticsWorkers.kt index 531a477c862..4d6234fbc14 100644 --- a/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/concurrency/CrashlyticsWorkers.kt +++ b/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/concurrency/CrashlyticsWorkers.kt @@ -16,6 +16,8 @@ package com.google.firebase.crashlytics.internal.concurrency +import android.os.Build +import android.os.Looper import com.google.firebase.crashlytics.internal.Logger import java.util.concurrent.ExecutorService @@ -59,6 +61,12 @@ class CrashlyticsWorkers( /** When enabled, failed preconditions will cause assertion errors for debugging. */ @JvmStatic var enforcement: Boolean = false + @JvmStatic + fun checkNotMainThread() = + checkThread(::isNotMainThread) { + "Must not be called on a main thread, was called on $threadName." + } + @JvmStatic fun checkBlockingThread() = checkThread(::isBlockingThread) { @@ -71,6 +79,13 @@ class CrashlyticsWorkers( "Must be called on a background thread, was called on $threadName." } + private fun isNotMainThread() = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + !Looper.getMainLooper().isCurrentThread + } else { + Looper.getMainLooper() != Looper.myLooper() + } + private fun isBlockingThread() = threadName.contains("Firebase Blocking Thread #") private fun isBackgroundThread() = threadName.contains("Firebase Background Thread #")