Index: components/invalidation/android/java/src/org/chromium/components/invalidation/InvalidationService.java |
diff --git a/components/invalidation/android/java/src/org/chromium/components/invalidation/InvalidationService.java b/components/invalidation/android/java/src/org/chromium/components/invalidation/InvalidationService.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..05f7c1da7df68ecabeb6b140217a8177d6571517 |
--- /dev/null |
+++ b/components/invalidation/android/java/src/org/chromium/components/invalidation/InvalidationService.java |
@@ -0,0 +1,99 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
nyquist
2014/09/04 09:01:56
2014 for non-move-detected files?
maxbogue
2014/09/05 16:42:46
Done.
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.components.invalidation; |
+ |
+import android.accounts.Account; |
+import android.content.Context; |
+import android.content.Intent; |
+ |
+import com.google.common.annotations.VisibleForTesting; |
+import com.google.common.base.Preconditions; |
+ |
+import org.chromium.base.CalledByNative; |
+import org.chromium.base.JNINamespace; |
+import org.chromium.base.ThreadUtils; |
+import org.chromium.sync.notifier.InvalidationClientNameProvider; |
+import org.chromium.sync.notifier.InvalidationIntentProtocol; |
+import org.chromium.sync.notifier.InvalidationPreferences; |
+ |
+/** |
+ * Wrapper for invalidations::InvalidationServiceAndroid. |
+ * |
+ * Serves as the bridge between Java and C++ for the invalidations component. |
+ */ |
+@JNINamespace("invalidation") |
+public class InvalidationService { |
+ private static final String TAG = "InvalidationService"; |
+ |
+ private final Context mContext; |
+ |
+ private final long mNativeInvalidationServiceAndroid; |
+ |
+ private InvalidationService(Context context, long nativeInvalidationServiceAndroid) { |
+ mContext = Preconditions.checkNotNull(context.getApplicationContext()); |
+ mNativeInvalidationServiceAndroid = nativeInvalidationServiceAndroid; |
+ } |
+ |
+ public void requestSyncFromNativeChrome( |
+ int objectSource, String objectId, long version, String payload) { |
+ ThreadUtils.assertOnUiThread(); |
+ nativeRequestSync( |
+ mNativeInvalidationServiceAndroid, objectSource, objectId, version, payload); |
+ } |
+ |
+ public void requestSyncFromNativeChromeForAllTypes() { |
+ ThreadUtils.assertOnUiThread(); |
+ nativeRequestSyncForAllTypes(mNativeInvalidationServiceAndroid); |
+ } |
+ |
+ /** |
+ * Nudge the syncer to start a new sync cycle. |
+ */ |
+ @VisibleForTesting |
+ public void requestSyncCycleForTest() { |
nyquist
2014/09/04 09:01:56
Why is this needed? Couldn't you just call
request
maxbogue
2014/09/05 16:42:46
Done.
|
+ requestSyncFromNativeChromeForAllTypes(); |
+ } |
+ |
+ @CalledByNative |
+ private static InvalidationService create( |
+ Context context, long nativeInvalidationServiceAndroid) { |
+ ThreadUtils.assertOnUiThread(); |
+ return new InvalidationService(context, nativeInvalidationServiceAndroid); |
+ } |
+ |
+ /** |
+ * Sets object ids for which the client should register for notification. This is intended for |
+ * registering non-Sync types; Sync types are registered with {@code setRegisteredTypes}. |
+ * |
+ * @param objectSources The sources of the objects. |
+ * @param objectNames The names of the objects. |
+ */ |
+ @CalledByNative |
+ public void setRegisteredObjectIds(int[] objectSources, String[] objectNames) { |
nyquist
2014/09/04 09:01:56
Does this method and the one below need to be publ
maxbogue
2014/09/05 16:42:46
Done.
|
+ InvalidationPreferences invalidationPreferences = new InvalidationPreferences(mContext); |
+ Account account = invalidationPreferences.getSavedSyncedAccount(); |
+ Intent registerIntent = |
+ InvalidationIntentProtocol.createRegisterIntent( |
+ account, objectSources, objectNames); |
+ registerIntent.setClass(mContext, InvalidationClientService.class); |
+ mContext.startService(registerIntent); |
+ } |
+ |
+ /** |
+ * Fetches the Invalidator client name. |
+ * |
+ * Note that there is a naming discrepancy here. In C++, we refer to the invalidation client |
+ * identifier that is unique for every invalidation client instance in an account as the client |
+ * ID. In Java, we call it the client name. |
+ */ |
+ @CalledByNative |
+ public byte[] getInvalidatorClientId() { |
+ return InvalidationClientNameProvider.get().getInvalidatorClientName(); |
+ } |
+ |
+ private native void nativeRequestSync(long nativeInvalidationServiceAndroid, |
+ int objectSource, String objectId, long version, String payload); |
+ private native void nativeRequestSyncForAllTypes(long nativeInvalidationServiceAndroid); |
+} |