Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: chrome/browser/interests/android/interests_service.cc

Issue 1396443002: Add the JNI code in order to let Java use the InterestsFetcher. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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/interests/android/interests_service.h"
6
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h"
10 #include "base/android/scoped_java_ref.h"
11 #include "chrome/browser/interests/interests_fetcher.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/profiles/profile_android.h"
14 #include "jni/InterestsService_jni.h"
15
16 using base::android::AttachCurrentThread;
17 using base::android::ConvertUTF8ToJavaString;
18 using base::android::ScopedJavaGlobalRef;
19 using base::android::ScopedJavaLocalRef;
20
21 namespace {
22
23 ScopedJavaLocalRef<jobjectArray> ConvertInterestsToJava(
24 JNIEnv* env,
25 scoped_ptr<std::vector<InterestsFetcher::Interest>> interests) {
26 if (!interests)
27 return ScopedJavaLocalRef<jobjectArray>();
28
29 ScopedJavaLocalRef<jobjectArray> j_interests =
30 Java_InterestsService_createInterestsArray(env, interests->size());
31
32 for (size_t i = 0; i != interests->size(); i++) {
33 const InterestsFetcher::Interest& interest = (*interests)[i];
34 ScopedJavaLocalRef<jobject> j_interest =
35 Java_InterestsService_createInterest(
36 env,
37 ConvertUTF8ToJavaString(env, interest.name).obj(),
38 ConvertUTF8ToJavaString(env, interest.image_url.spec()).obj(),
39 interest.relevance);
40
41 env->SetObjectArrayElement(j_interests.obj(), i, j_interest.obj());
42 }
43
44 return j_interests;
45 }
46
47 } // namespace
48
49 InterestsService::InterestsService(Profile* profile)
50 : profile_(profile), weak_ptr_factory_(this) {}
51
52 InterestsService::~InterestsService() {}
53
54 void InterestsService::Destroy(JNIEnv* env, jobject obj) {
55 delete this;
56 }
57
58 void InterestsService::GetInterests(JNIEnv* env,
59 jobject obj,
60 jobject j_callback_obj) {
61 ScopedJavaGlobalRef<jobject> j_callback(env, j_callback_obj);
62
63 scoped_ptr<InterestsFetcher> fetcher =
64 InterestsFetcher::CreateFromProfile(profile_);
65 InterestsFetcher* fetcher_raw_ptr = fetcher.get();
66
67 InterestsFetcher::InterestsCallback callback = base::Bind(
68 &InterestsService::OnObtainedInterests,
69 weak_ptr_factory_.GetWeakPtr(),
70 base::Passed(fetcher.Pass()),
71 j_callback);
72
73 fetcher_raw_ptr->FetchInterests(callback);
74 }
75
76 // static
77 bool InterestsService::Register(JNIEnv* env) {
78 return RegisterNativesImpl(env);
79 }
80
81 void InterestsService::OnObtainedInterests(
82 scoped_ptr<InterestsFetcher> fetcher,
83 const ScopedJavaGlobalRef<jobject>& j_callback,
84 scoped_ptr<std::vector<InterestsFetcher::Interest>> interests) {
85 JNIEnv* env = AttachCurrentThread();
86 ScopedJavaLocalRef<jobjectArray> j_interests =
87 ConvertInterestsToJava(env, interests.Pass());
88 Java_GetInterestsCallback_onInterestsAvailableCallback(env,
89 j_callback.obj(),
90 j_interests.obj());
91 }
92
93 static jlong Init(JNIEnv* env,
94 const JavaParamRef<jobject>& jobj,
95 const JavaParamRef<jobject>& jprofile) {
96 InterestsService* interests_service =
97 new InterestsService(ProfileAndroid::FromProfileAndroid(jprofile));
98 return reinterpret_cast<intptr_t>(interests_service);
99 }
OLDNEW
« no previous file with comments | « chrome/browser/interests/android/interests_service.h ('k') | chrome/browser/interests/interests_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698