diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 55ac35e690..2ab6bb169e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -77,6 +77,7 @@ import org.thoughtcrime.securesms.jobs.LinkedDeviceInactiveCheckJob; import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob; import org.thoughtcrime.securesms.jobs.PreKeysSyncJob; import org.thoughtcrime.securesms.jobs.ProfileUploadJob; +import org.thoughtcrime.securesms.jobs.RefreshAttributesJob; import org.thoughtcrime.securesms.jobs.RefreshSvrCredentialsJob; import org.thoughtcrime.securesms.jobs.RestoreOptimizedMediaJob; import org.thoughtcrime.securesms.jobs.RetrieveProfileJob; @@ -111,6 +112,7 @@ import org.thoughtcrime.securesms.util.AppStartup; import org.thoughtcrime.securesms.util.DeviceProperties; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.Environment; +import org.thoughtcrime.securesms.util.PlayServicesUtil; import org.thoughtcrime.securesms.util.RemoteConfig; import org.thoughtcrime.securesms.util.SignalLocalMetrics; import org.thoughtcrime.securesms.util.SignalUncaughtExceptionHandler; @@ -439,7 +441,24 @@ public class ApplicationContext extends Application implements AppForegroundObse } private void initializeFcmCheck() { - if (SignalStore.account().isRegistered()) { + if (!SignalStore.account().isRegistered()) { + return; + } + + PlayServicesUtil.PlayServicesStatus playServicesStatus = PlayServicesUtil.getPlayServicesStatus(this); + + if (playServicesStatus == PlayServicesUtil.PlayServicesStatus.SUCCESS && !SignalStore.account().isFcmEnabled()) { + Log.i(TAG, "Play Services are newly-available. Enabling FCM and updating server."); + SignalStore.account().setFcmEnabled(true); + AppDependencies.getJobManager().startChain(new FcmRefreshJob()) + .then(new RefreshAttributesJob()) + .enqueue(); + } else if (playServicesStatus == PlayServicesUtil.PlayServicesStatus.MISSING && SignalStore.account().isFcmEnabled()) { + Log.w(TAG, "Play Services are no longer available. Disabling FCM and updating server."); + SignalStore.account().setFcmEnabled(false); + SignalStore.account().setFcmToken(null); + AppDependencies.getJobManager().add(new RefreshAttributesJob()); + } else if (SignalStore.account().isFcmEnabled()) { long lastSetTime = SignalStore.account().getFcmTokenLastSetTime(); long nextSetTime = lastSetTime + TimeUnit.HOURS.toMillis(6); long now = System.currentTimeMillis(); @@ -447,6 +466,8 @@ public class ApplicationContext extends Application implements AppForegroundObse if (SignalStore.account().getFcmToken() == null || nextSetTime <= now || lastSetTime > now) { AppDependencies.getJobManager().add(new FcmRefreshJob()); } + } else { + Log.d(TAG, "Play Services status: " + playServicesStatus + ", fcmEnabled: false. Skipping FCM check."); } }