diff options
Diffstat (limited to 'sync/android')
-rw-r--r-- | sync/android/java/src/org/chromium/sync/signin/ChromeSigninController.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sync/android/java/src/org/chromium/sync/signin/ChromeSigninController.java b/sync/android/java/src/org/chromium/sync/signin/ChromeSigninController.java index a9a1b82..03805ec 100644 --- a/sync/android/java/src/org/chromium/sync/signin/ChromeSigninController.java +++ b/sync/android/java/src/org/chromium/sync/signin/ChromeSigninController.java @@ -6,10 +6,12 @@ package org.chromium.sync.signin; import android.accounts.Account; import android.content.Context; +import android.os.AsyncTask; import android.preference.PreferenceManager; import android.util.Log; import com.google.common.annotations.VisibleForTesting; +import com.google.ipc.invalidation.external.client.contrib.MultiplexingGcmListener; import org.chromium.base.ObserverList; @@ -34,6 +36,8 @@ public class ChromeSigninController { private final ObserverList<Listener> mListeners = new ObserverList<Listener>(); + private boolean mGcmInitialized; + private ChromeSigninController(Context context) { mApplicationContext = context.getApplicationContext(); } @@ -100,4 +104,29 @@ public class ChromeSigninController { public void removeListener(Listener listener) { mListeners.removeObserver(listener); } + + /** + * Registers for Google Cloud Messaging (GCM) if there is no existing registration. + */ + public void ensureGcmIsInitialized() { + if (mGcmInitialized) return; + mGcmInitialized = true; + new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... arg0) { + try { + String regId = MultiplexingGcmListener.initializeGcm(mApplicationContext); + if (!regId.isEmpty()) + Log.d(TAG, "Already registered with GCM"); + } catch (IllegalStateException exception) { + Log.w(TAG, "Application manifest does not correctly configure GCM; " + + "sync notifications will not work", exception); + } catch (UnsupportedOperationException exception) { + Log.w(TAG, "Device does not support GCM; sync notifications will not work", + exception); + } + return null; + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } } |