From 5df20d755ad6fac276415f2404fb58e8b1b68ea1 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Mon, 13 Jun 2022 09:57:20 -0400 Subject: [PATCH] Fix FCM not initialized crash. --- .../main/java/org/thoughtcrime/securesms/gcm/FcmUtil.java | 8 +++++++- .../org/thoughtcrime/securesms/jobs/FcmRefreshJob.java | 2 +- .../securesms/registration/VerifyAccountRepository.kt | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmUtil.java b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmUtil.java index 929b68306e..359c065621 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmUtil.java @@ -1,10 +1,12 @@ package org.thoughtcrime.securesms.gcm; +import android.content.Context; import android.text.TextUtils; import androidx.annotation.WorkerThread; import com.google.android.gms.tasks.Tasks; +import com.google.firebase.FirebaseApp; import com.google.firebase.messaging.FirebaseMessaging; import org.signal.core.util.logging.Log; @@ -20,8 +22,12 @@ public final class FcmUtil { * Retrieves the current FCM token. If one isn't available, it'll be generated. */ @WorkerThread - public static Optional getToken() { + public static Optional getToken(Context context) { String token = null; + + // Must be called manually if running outside of main process + FirebaseApp.initializeApp(context); + try { token = Tasks.await(FirebaseMessaging.getInstance().getToken()); } catch (InterruptedException e) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java index cc41aadc0c..d1a6f86250 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java @@ -87,7 +87,7 @@ public class FcmRefreshJob extends BaseJob { if (result != ConnectionResult.SUCCESS) { notifyFcmFailure(); } else { - Optional token = FcmUtil.getToken(); + Optional token = FcmUtil.getToken(context); if (token.isPresent()) { String oldToken = SignalStore.account().getFcmToken(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt index 8e78060567..e1fdaaec7f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt @@ -39,7 +39,7 @@ class VerifyAccountRepository(private val context: Application) { Log.d(TAG, "SMS Verification requested") return Single.fromCallable { - val fcmToken: Optional = FcmUtil.getToken() + val fcmToken: Optional = FcmUtil.getToken(context) val accountManager = AccountManagerFactory.createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password) val pushChallenge = PushChallengeRequest.getPushChallengeBlocking(accountManager, fcmToken, e164, PUSH_REQUEST_TIMEOUT)