blob: 1be276e4d0777145edf2898437bad6259f442ee8 [file] [log] [blame]
[email protected]9049a7b2013-03-07 22:22:031// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/sync/profile_sync_service_android.h"
6
7#include "base/android/jni_android.h"
maxbogue47c75042015-08-12 18:05:018#include "base/android/jni_array.h"
[email protected]9049a7b2013-03-07 22:22:039#include "base/android/jni_string.h"
10#include "base/bind.h"
11#include "base/i18n/time_formatting.h"
12#include "base/json/json_writer.h"
13#include "base/logging.h"
14#include "base/memory/scoped_ptr.h"
zeab1b09b72015-05-01 17:56:4015#include "base/metrics/field_trial.h"
[email protected]34ee0512013-03-12 17:49:5416#include "base/prefs/pref_service.h"
[email protected]e309f312013-06-07 21:50:0817#include "base/strings/utf_string_conversions.h"
[email protected]cc86ccfe2013-06-28 00:10:5018#include "base/time/time.h"
[email protected]9049a7b2013-03-07 22:22:0319#include "chrome/browser/browser_process.h"
20#include "chrome/browser/profiles/profile_manager.h"
[email protected]9049a7b2013-03-07 22:22:0321#include "chrome/browser/signin/signin_manager_factory.h"
[email protected]9049a7b2013-03-07 22:22:0322#include "chrome/browser/sync/about_sync_util.h"
23#include "chrome/browser/sync/profile_sync_service.h"
24#include "chrome/browser/sync/profile_sync_service_factory.h"
[email protected]9049a7b2013-03-07 22:22:0325#include "chrome/browser/sync/sync_ui_util.h"
[email protected]af39f002014-08-22 10:18:1826#include "chrome/grit/generated_resources.h"
[email protected]7fbd3b12014-04-01 11:19:1627#include "components/signin/core/browser/signin_manager.h"
[email protected]34f54052014-03-20 21:33:4028#include "components/sync_driver/pref_names.h"
29#include "components/sync_driver/sync_prefs.h"
[email protected]dfe6a9b2014-01-31 21:37:5530#include "content/public/browser/browser_thread.h"
[email protected]9049a7b2013-03-07 22:22:0331#include "google/cacheinvalidation/types.pb.h"
32#include "google_apis/gaia/gaia_constants.h"
33#include "google_apis/gaia/google_service_auth_error.h"
[email protected]9049a7b2013-03-07 22:22:0334#include "jni/ProfileSyncService_jni.h"
[email protected]be21aaa2014-08-21 21:26:3835#include "sync/internal_api/public/network_resources.h"
[email protected]9049a7b2013-03-07 22:22:0336#include "sync/internal_api/public/read_transaction.h"
37#include "ui/base/l10n/l10n_util.h"
38
39using base::android::AttachCurrentThread;
40using base::android::CheckException;
41using base::android::ConvertJavaStringToUTF8;
42using base::android::ConvertUTF8ToJavaString;
43using base::android::ScopedJavaLocalRef;
44using content::BrowserThread;
45
46namespace {
[email protected]9049a7b2013-03-07 22:22:0347
pvalenzuelaff27ca202015-05-20 23:34:2148// Native callback for the JNI GetAllNodes method. When
49// ProfileSyncService::GetAllNodes completes, this method is called and the
50// results are sent to the Java callback.
51void NativeGetAllNodesCallback(
52 const base::android::ScopedJavaGlobalRef<jobject>& callback,
53 scoped_ptr<base::ListValue> result) {
54 JNIEnv* env = base::android::AttachCurrentThread();
55 std::string json_string;
56 if (!result.get() || !base::JSONWriter::Write(*result, &json_string)) {
57 DVLOG(1) << "Writing as JSON failed. Passing empty string to Java code.";
58 json_string = std::string();
59 }
60
61 ScopedJavaLocalRef<jstring> java_json_string =
62 ConvertUTF8ToJavaString(env, json_string);
63 Java_ProfileSyncService_onGetAllNodesResult(env,
64 callback.obj(),
65 java_json_string.obj());
66}
67
[email protected]9049a7b2013-03-07 22:22:0368} // namespace
69
70ProfileSyncServiceAndroid::ProfileSyncServiceAndroid(JNIEnv* env, jobject obj)
71 : profile_(NULL),
72 sync_service_(NULL),
73 weak_java_profile_sync_service_(env, obj) {
74 if (g_browser_process == NULL ||
75 g_browser_process->profile_manager() == NULL) {
76 NOTREACHED() << "Browser process or profile manager not initialized";
77 return;
78 }
79
[email protected]dd547a22013-12-12 18:37:4180 profile_ = ProfileManager::GetActiveUserProfile();
[email protected]9049a7b2013-03-07 22:22:0381 if (profile_ == NULL) {
82 NOTREACHED() << "Sync Init: Profile not found.";
83 return;
84 }
85
[email protected]34f54052014-03-20 21:33:4086 sync_prefs_.reset(new sync_driver::SyncPrefs(profile_->GetPrefs()));
[email protected]aa5b2ece2013-05-17 00:37:3687
[email protected]9049a7b2013-03-07 22:22:0388 sync_service_ =
89 ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile_);
90 DCHECK(sync_service_);
91}
92
93void ProfileSyncServiceAndroid::Init() {
94 sync_service_->AddObserver(this);
[email protected]9049a7b2013-03-07 22:22:0395}
96
97void ProfileSyncServiceAndroid::RemoveObserver() {
98 if (sync_service_->HasObserver(this)) {
99 sync_service_->RemoveObserver(this);
100 }
101}
102
103ProfileSyncServiceAndroid::~ProfileSyncServiceAndroid() {
104 RemoveObserver();
105}
106
[email protected]9049a7b2013-03-07 22:22:03107void ProfileSyncServiceAndroid::OnStateChanged() {
[email protected]9049a7b2013-03-07 22:22:03108 // Notify the java world that our sync state has changed.
109 JNIEnv* env = AttachCurrentThread();
110 Java_ProfileSyncService_syncStateChanged(
111 env, weak_java_profile_sync_service_.get(env).obj());
112}
113
zeab1b09b72015-05-01 17:56:40114jboolean ProfileSyncServiceAndroid::IsPassphrasePrompted(JNIEnv* env,
115 jobject obj) {
116 const std::string group_name =
117 base::FieldTrialList::FindFullName("LimitSyncPassphrasePrompt");
118 if (group_name != "Enabled")
119 return false;
120 return sync_prefs_->IsPassphrasePrompted();
121}
122
123void ProfileSyncServiceAndroid::SetPassphrasePrompted(JNIEnv* env,
124 jobject obj,
125 jboolean prompted) {
126 sync_prefs_->SetPassphrasePrompted(prompted);
127}
128
maxboguef5c53a2d2015-07-08 20:47:29129void ProfileSyncServiceAndroid::RequestStart(JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23130 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxboguecd3fad6b2015-06-09 00:44:53131 sync_service_->RequestStart();
[email protected]9049a7b2013-03-07 22:22:03132}
133
maxboguef5c53a2d2015-07-08 20:47:29134void ProfileSyncServiceAndroid::RequestStop(JNIEnv* env, jobject) {
135 DCHECK_CURRENTLY_ON(BrowserThread::UI);
136 sync_service_->RequestStop(ProfileSyncService::KEEP_DATA);
137}
138
[email protected]9049a7b2013-03-07 22:22:03139void ProfileSyncServiceAndroid::SignOutSync(JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23140 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03141 DCHECK(profile_);
maxbogue699262c92015-06-19 19:24:58142 sync_service_->RequestStop(ProfileSyncService::CLEAR_DATA);
[email protected]9049a7b2013-03-07 22:22:03143}
144
maxbogued4470ca2014-09-30 23:38:11145void ProfileSyncServiceAndroid::FlushDirectory(JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23146 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxbogued4470ca2014-09-30 23:38:11147 sync_service_->FlushDirectory();
148}
149
[email protected]9049a7b2013-03-07 22:22:03150ScopedJavaLocalRef<jstring> ProfileSyncServiceAndroid::QuerySyncStatusSummary(
151 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23152 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03153 DCHECK(profile_);
[email protected]9e8df052013-09-18 10:47:18154 std::string status(sync_service_->QuerySyncStatusSummaryString());
[email protected]9049a7b2013-03-07 22:22:03155 return ConvertUTF8ToJavaString(env, status);
156}
157
pvalenzuelaff27ca202015-05-20 23:34:21158void ProfileSyncServiceAndroid::GetAllNodes(JNIEnv* env,
159 jobject obj,
160 jobject callback) {
161 base::android::ScopedJavaGlobalRef<jobject> java_callback;
162 java_callback.Reset(env, callback);
163
164 base::Callback<void(scoped_ptr<base::ListValue>)> native_callback =
165 base::Bind(&NativeGetAllNodesCallback, java_callback);
166 sync_service_->GetAllNodes(native_callback);
167}
168
maxboguec7f232d2015-07-29 19:25:40169void ProfileSyncServiceAndroid::SetSyncSessionsId(
[email protected]9049a7b2013-03-07 22:22:03170 JNIEnv* env, jobject obj, jstring tag) {
anujk.sharma86194482015-04-23 06:38:23171 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03172 DCHECK(profile_);
173 std::string machine_tag = ConvertJavaStringToUTF8(env, tag);
[email protected]aa5b2ece2013-05-17 00:37:36174 sync_prefs_->SetSyncSessionsGUID(machine_tag);
[email protected]9049a7b2013-03-07 22:22:03175}
176
177jint ProfileSyncServiceAndroid::GetAuthError(JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23178 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03179 return sync_service_->GetAuthError().state();
180}
181
182jboolean ProfileSyncServiceAndroid::IsEncryptEverythingEnabled(
183 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23184 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03185 return sync_service_->EncryptEverythingEnabled();
186}
187
188jboolean ProfileSyncServiceAndroid::IsSyncInitialized(JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23189 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxbogue825174f2014-10-21 01:34:50190 return sync_service_->backend_initialized();
[email protected]9049a7b2013-03-07 22:22:03191}
192
193jboolean ProfileSyncServiceAndroid::IsFirstSetupInProgress(
194 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23195 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03196 return sync_service_->FirstSetupInProgress();
197}
198
bauerbf03588b92014-10-27 13:40:15199jboolean ProfileSyncServiceAndroid::IsEncryptEverythingAllowed(
200 JNIEnv* env, jobject obj) {
anujk.sharma86194482015-04-23 06:38:23201 DCHECK_CURRENTLY_ON(BrowserThread::UI);
bauerbf03588b92014-10-27 13:40:15202 return sync_service_->EncryptEverythingAllowed();
203}
204
[email protected]9049a7b2013-03-07 22:22:03205jboolean ProfileSyncServiceAndroid::IsPassphraseRequired(JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23206 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03207 return sync_service_->IsPassphraseRequired();
208}
209
210jboolean ProfileSyncServiceAndroid::IsPassphraseRequiredForDecryption(
211 JNIEnv* env, jobject obj) {
anujk.sharma86194482015-04-23 06:38:23212 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03213 // In case of CUSTOM_PASSPHRASE we always sync passwords. Prompt the user for
214 // a passphrase if cryptographer has any pending keys.
215 if (sync_service_->GetPassphraseType() == syncer::CUSTOM_PASSPHRASE) {
216 return !IsCryptographerReady(env, obj);
217 }
218 if (sync_service_->IsPassphraseRequiredForDecryption()) {
219 // Passwords datatype should never prompt for a passphrase, except when
220 // user is using a custom passphrase. Do not prompt for a passphrase if
221 // passwords are the only encrypted datatype. This prevents a temporary
222 // notification for passphrase when PSS has not completed configuring
223 // DataTypeManager, after configuration password datatype shall be disabled.
224 const syncer::ModelTypeSet encrypted_types =
225 sync_service_->GetEncryptedDataTypes();
[email protected]1f51ad92013-06-07 02:30:24226 return !encrypted_types.Equals(syncer::ModelTypeSet(syncer::PASSWORDS));
[email protected]9049a7b2013-03-07 22:22:03227 }
228 return false;
229}
230
231jboolean ProfileSyncServiceAndroid::IsPassphraseRequiredForExternalType(
232 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23233 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03234 return
235 sync_service_->passphrase_required_reason() == syncer::REASON_DECRYPTION;
236}
237
238jboolean ProfileSyncServiceAndroid::IsUsingSecondaryPassphrase(
239 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23240 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03241 return sync_service_->IsUsingSecondaryPassphrase();
242}
243
244jboolean ProfileSyncServiceAndroid::SetDecryptionPassphrase(
245 JNIEnv* env, jobject obj, jstring passphrase) {
anujk.sharma86194482015-04-23 06:38:23246 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03247 std::string key = ConvertJavaStringToUTF8(env, passphrase);
248 return sync_service_->SetDecryptionPassphrase(key);
249}
250
251void ProfileSyncServiceAndroid::SetEncryptionPassphrase(
maxboguefd97c032015-07-29 19:29:35252 JNIEnv* env, jobject obj, jstring passphrase) {
anujk.sharma86194482015-04-23 06:38:23253 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03254 std::string key = ConvertJavaStringToUTF8(env, passphrase);
maxboguefd97c032015-07-29 19:29:35255 sync_service_->SetEncryptionPassphrase(key, ProfileSyncService::EXPLICIT);
[email protected]9049a7b2013-03-07 22:22:03256}
257
258jboolean ProfileSyncServiceAndroid::IsCryptographerReady(JNIEnv* env, jobject) {
259 syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare());
260 return sync_service_->IsCryptographerReady(&trans);
261}
262
263jint ProfileSyncServiceAndroid::GetPassphraseType(JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23264 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03265 return sync_service_->GetPassphraseType();
266}
267
268jboolean ProfileSyncServiceAndroid::HasExplicitPassphraseTime(
269 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23270 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03271 base::Time passphrase_time = sync_service_->GetExplicitPassphraseTime();
272 return !passphrase_time.is_null();
273}
274
maxboguec021ddcc2014-10-09 16:21:24275jlong ProfileSyncServiceAndroid::GetExplicitPassphraseTime(
276 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23277 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxboguec021ddcc2014-10-09 16:21:24278 base::Time passphrase_time = sync_service_->GetExplicitPassphraseTime();
279 return passphrase_time.ToJavaTime();
280}
281
[email protected]9049a7b2013-03-07 22:22:03282ScopedJavaLocalRef<jstring>
283 ProfileSyncServiceAndroid::GetSyncEnterGooglePassphraseBodyWithDateText(
284 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23285 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03286 base::Time passphrase_time = sync_service_->GetExplicitPassphraseTime();
[email protected]a04db822013-12-11 19:14:40287 base::string16 passphrase_time_str =
288 base::TimeFormatShortDate(passphrase_time);
[email protected]9049a7b2013-03-07 22:22:03289 return base::android::ConvertUTF16ToJavaString(env,
290 l10n_util::GetStringFUTF16(
291 IDS_SYNC_ENTER_GOOGLE_PASSPHRASE_BODY_WITH_DATE,
292 passphrase_time_str));
293}
294
295ScopedJavaLocalRef<jstring>
296 ProfileSyncServiceAndroid::GetSyncEnterCustomPassphraseBodyWithDateText(
297 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23298 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03299 base::Time passphrase_time = sync_service_->GetExplicitPassphraseTime();
[email protected]a04db822013-12-11 19:14:40300 base::string16 passphrase_time_str =
301 base::TimeFormatShortDate(passphrase_time);
[email protected]9049a7b2013-03-07 22:22:03302 return base::android::ConvertUTF16ToJavaString(env,
303 l10n_util::GetStringFUTF16(IDS_SYNC_ENTER_PASSPHRASE_BODY_WITH_DATE,
304 passphrase_time_str));
305}
306
307ScopedJavaLocalRef<jstring>
[email protected]4faa9de02013-03-26 10:17:20308 ProfileSyncServiceAndroid::GetCurrentSignedInAccountText(
309 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23310 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]4faa9de02013-03-26 10:17:20311 const std::string& sync_username =
312 SigninManagerFactory::GetForProfile(profile_)->GetAuthenticatedUsername();
313 return base::android::ConvertUTF16ToJavaString(env,
314 l10n_util::GetStringFUTF16(
315 IDS_SYNC_ACCOUNT_SYNCING_TO_USER,
[email protected]f911df52013-12-24 23:24:23316 base::ASCIIToUTF16(sync_username)));
[email protected]4faa9de02013-03-26 10:17:20317}
318
319ScopedJavaLocalRef<jstring>
[email protected]9049a7b2013-03-07 22:22:03320 ProfileSyncServiceAndroid::GetSyncEnterCustomPassphraseBodyText(
321 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23322 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03323 return ConvertUTF8ToJavaString(
324 env, l10n_util::GetStringUTF8(IDS_SYNC_ENTER_PASSPHRASE_BODY));
325}
326
327jboolean ProfileSyncServiceAndroid::IsSyncKeystoreMigrationDone(
328 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23329 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03330 syncer::SyncStatus status;
331 bool is_status_valid = sync_service_->QueryDetailedSyncStatus(&status);
332 return is_status_valid && !status.keystore_migration_time.is_null();
333}
334
maxbogue47c75042015-08-12 18:05:01335ScopedJavaLocalRef<jintArray> ProfileSyncServiceAndroid::GetActiveDataTypes(
maxbogue86e260e2015-03-18 21:56:26336 JNIEnv* env, jobject obj) {
[email protected]464d74a2013-06-04 07:36:46337 syncer::ModelTypeSet types = sync_service_->GetActiveDataTypes();
[email protected]6805b602013-03-27 21:18:18338 types.PutAll(syncer::ControlTypes());
maxbogue47c75042015-08-12 18:05:01339 return ModelTypeSetToJavaIntArray(env, types);
[email protected]6805b602013-03-27 21:18:18340}
341
maxbogue47c75042015-08-12 18:05:01342ScopedJavaLocalRef<jintArray> ProfileSyncServiceAndroid::GetPreferredDataTypes(
maxbogue86e260e2015-03-18 21:56:26343 JNIEnv* env, jobject obj) {
344 syncer::ModelTypeSet types = sync_service_->GetPreferredDataTypes();
345 types.PutAll(syncer::ControlTypes());
maxbogue47c75042015-08-12 18:05:01346 return ModelTypeSetToJavaIntArray(env, types);
maxbogue86e260e2015-03-18 21:56:26347}
348
[email protected]9049a7b2013-03-07 22:22:03349void ProfileSyncServiceAndroid::SetPreferredDataTypes(
350 JNIEnv* env, jobject obj,
351 jboolean sync_everything,
maxbogue47c75042015-08-12 18:05:01352 jintArray model_type_array) {
anujk.sharma86194482015-04-23 06:38:23353 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxbogue47c75042015-08-12 18:05:01354 std::vector<int> types_vector;
355 base::android::JavaIntArrayToIntVector(env, model_type_array, &types_vector);
[email protected]9049a7b2013-03-07 22:22:03356 syncer::ModelTypeSet types;
maxbogue47c75042015-08-12 18:05:01357 for (size_t i = 0; i < types_vector.size(); i++) {
358 types.Put(static_cast<syncer::ModelType>(types_vector[i]));
359 }
360 types.RetainAll(syncer::UserSelectableTypes());
[email protected]9049a7b2013-03-07 22:22:03361 sync_service_->OnUserChoseDatatypes(sync_everything, types);
362}
363
364void ProfileSyncServiceAndroid::SetSetupInProgress(
365 JNIEnv* env, jobject obj, jboolean in_progress) {
anujk.sharma86194482015-04-23 06:38:23366 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03367 sync_service_->SetSetupInProgress(in_progress);
368}
369
370void ProfileSyncServiceAndroid::SetSyncSetupCompleted(
371 JNIEnv* env, jobject obj) {
anujk.sharma86194482015-04-23 06:38:23372 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03373 sync_service_->SetSyncSetupCompleted();
374}
375
376jboolean ProfileSyncServiceAndroid::HasSyncSetupCompleted(
377 JNIEnv* env, jobject obj) {
anujk.sharma86194482015-04-23 06:38:23378 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03379 return sync_service_->HasSyncSetupCompleted();
380}
381
maxboguecd3fad6b2015-06-09 00:44:53382jboolean ProfileSyncServiceAndroid::IsSyncRequested(
[email protected]aa5b2ece2013-05-17 00:37:36383 JNIEnv* env, jobject obj) {
anujk.sharma86194482015-04-23 06:38:23384 DCHECK_CURRENTLY_ON(BrowserThread::UI);
maxboguecd3fad6b2015-06-09 00:44:53385 return sync_service_->IsSyncRequested();
[email protected]aa5b2ece2013-05-17 00:37:36386}
387
maxbogue85931a62015-06-12 22:58:01388jboolean ProfileSyncServiceAndroid::IsSyncActive(JNIEnv* env, jobject obj) {
389 DCHECK_CURRENTLY_ON(BrowserThread::UI);
390 return sync_service_->IsSyncActive();
391}
392
[email protected]9049a7b2013-03-07 22:22:03393void ProfileSyncServiceAndroid::EnableEncryptEverything(
394 JNIEnv* env, jobject obj) {
anujk.sharma86194482015-04-23 06:38:23395 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03396 sync_service_->EnableEncryptEverything();
397}
398
399jboolean ProfileSyncServiceAndroid::HasKeepEverythingSynced(
400 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23401 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]aa5b2ece2013-05-17 00:37:36402 return sync_prefs_->HasKeepEverythingSynced();
[email protected]9049a7b2013-03-07 22:22:03403}
404
[email protected]9049a7b2013-03-07 22:22:03405jboolean ProfileSyncServiceAndroid::HasUnrecoverableError(
406 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23407 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03408 return sync_service_->HasUnrecoverableError();
409}
410
411ScopedJavaLocalRef<jstring> ProfileSyncServiceAndroid::GetAboutInfoForTest(
412 JNIEnv* env, jobject) {
anujk.sharma86194482015-04-23 06:38:23413 DCHECK_CURRENTLY_ON(BrowserThread::UI);
[email protected]9049a7b2013-03-07 22:22:03414
[email protected]dbb9aa42013-12-23 20:08:21415 scoped_ptr<base::DictionaryValue> about_info =
[email protected]9049a7b2013-03-07 22:22:03416 sync_ui_util::ConstructAboutInformation(sync_service_);
417 std::string about_info_json;
estade8d046462015-05-16 01:02:34418 base::JSONWriter::Write(*about_info, &about_info_json);
[email protected]9049a7b2013-03-07 22:22:03419
420 return ConvertUTF8ToJavaString(env, about_info_json);
421}
422
[email protected]ed4d7052013-09-04 19:01:37423jlong ProfileSyncServiceAndroid::GetLastSyncedTimeForTest(
424 JNIEnv* env, jobject obj) {
425 // Use profile preferences here instead of SyncPrefs to avoid an extra
426 // conversion, since SyncPrefs::GetLastSyncedTime() converts the stored value
427 // to to base::Time.
428 return static_cast<jlong>(
[email protected]34f54052014-03-20 21:33:40429 profile_->GetPrefs()->GetInt64(sync_driver::prefs::kSyncLastSyncedTime));
[email protected]ed4d7052013-09-04 19:01:37430}
431
[email protected]be21aaa2014-08-21 21:26:38432void ProfileSyncServiceAndroid::OverrideNetworkResourcesForTest(
433 JNIEnv* env,
434 jobject obj,
435 jlong network_resources) {
436 syncer::NetworkResources* resources =
437 reinterpret_cast<syncer::NetworkResources*>(network_resources);
438 sync_service_->OverrideNetworkResourcesForTest(
439 make_scoped_ptr<syncer::NetworkResources>(resources));
440}
441
bauerbdab6c6f2014-08-28 09:20:23442// static
maxbogue47c75042015-08-12 18:05:01443ScopedJavaLocalRef<jintArray>
444ProfileSyncServiceAndroid::ModelTypeSetToJavaIntArray(
445 JNIEnv* env,
bauerbdab6c6f2014-08-28 09:20:23446 syncer::ModelTypeSet types) {
maxbogue47c75042015-08-12 18:05:01447 std::vector<int> type_vector;
448 for (syncer::ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) {
449 type_vector.push_back(it.Get());
bauerbdab6c6f2014-08-28 09:20:23450 }
maxbogue47c75042015-08-12 18:05:01451 return base::android::ToJavaIntArray(env, type_vector);
bauerbdab6c6f2014-08-28 09:20:23452}
453
[email protected]332a83362013-03-26 08:45:55454// static
455ProfileSyncServiceAndroid*
456 ProfileSyncServiceAndroid::GetProfileSyncServiceAndroid() {
457 return reinterpret_cast<ProfileSyncServiceAndroid*>(
maxbogue89bee1d862015-08-26 21:00:07458 Java_ProfileSyncService_getProfileSyncServiceAndroid(
459 AttachCurrentThread()));
[email protected]332a83362013-03-26 08:45:55460}
461
[email protected]d557b6042013-11-21 16:34:31462static jlong Init(JNIEnv* env, jobject obj) {
[email protected]9049a7b2013-03-07 22:22:03463 ProfileSyncServiceAndroid* profile_sync_service_android =
464 new ProfileSyncServiceAndroid(env, obj);
465 profile_sync_service_android->Init();
[email protected]d557b6042013-11-21 16:34:31466 return reinterpret_cast<intptr_t>(profile_sync_service_android);
[email protected]9049a7b2013-03-07 22:22:03467}
468
469// static
470bool ProfileSyncServiceAndroid::Register(JNIEnv* env) {
471 return RegisterNativesImpl(env);
472}