summaryrefslogtreecommitdiffstats
path: root/sync/android
diff options
context:
space:
mode:
Diffstat (limited to 'sync/android')
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/ChromeSigninController.java29
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);
+ }
}