chromium/chrome/android/java/src/org/chromium/chrome/browser/background_sync/GooglePlayServicesChecker.java

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.browser.background_sync;

import androidx.annotation.VisibleForTesting;

import org.jni_zero.CalledByNative;

import org.chromium.base.Log;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.components.externalauth.ExternalAuthUtils;

/**
 * Used to check whether Google Play Services version on the device is as
 * expected for BackgroundSync. This check is made at browser startup.
 */
final class GooglePlayServicesChecker {
    private static final String TAG = "PlayServicesChecker";

    private GooglePlayServicesChecker() {}

    /**
     * Returns true if the Background Sync Manager should be automatically disabled
     * on startup. This is currently only the case if Play Services is not up to
     * date, since any sync attempts which fail cannot be reregistered. Better to
     * wait until Play Services is updated before attempting them.
     */
    @CalledByNative
    @VisibleForTesting
    static boolean shouldDisableBackgroundSync() {
        boolean isAvailable = true;
        if (!ExternalAuthUtils.getInstance().canUseGooglePlayServices()) {
            Log.i(TAG, "Disabling Background Sync because Play Services is not up to date.");
            isAvailable = false;
        }

        RecordHistogram.recordBooleanHistogram(
                "BackgroundSync.LaunchTask.PlayServicesAvailable", isAvailable);
        return !isAvailable;
    }
}