OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/search_engines/template_url_service_android.h" | 5 #include "chrome/browser/search_engines/template_url_service_android.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/android/jni_string.h" | 9 #include "base/android/jni_string.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 24 matching lines...) Expand all Loading... | |
35 TemplateUrlServiceAndroid::TemplateUrlServiceAndroid(JNIEnv* env, | 35 TemplateUrlServiceAndroid::TemplateUrlServiceAndroid(JNIEnv* env, |
36 jobject obj) | 36 jobject obj) |
37 : weak_java_obj_(env, obj), | 37 : weak_java_obj_(env, obj), |
38 template_url_service_( | 38 template_url_service_( |
39 TemplateURLServiceFactory::GetForProfile(GetOriginalProfile())) { | 39 TemplateURLServiceFactory::GetForProfile(GetOriginalProfile())) { |
40 template_url_subscription_ = | 40 template_url_subscription_ = |
41 template_url_service_->RegisterOnLoadedCallback( | 41 template_url_service_->RegisterOnLoadedCallback( |
42 base::Bind(&TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded, | 42 base::Bind(&TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded, |
43 base::Unretained(this))); | 43 base::Unretained(this))); |
44 template_url_service_->AddObserver(this); | 44 template_url_service_->AddObserver(this); |
45 if (template_url_service_->loaded() && template_urls_.size() == 0) { | |
Peter Kasting
2016/11/29 03:32:18
Nit: Prefer .empty() to .size() == 0. {} not nece
ltian
2016/11/30 06:36:17
Done.
| |
46 LoadTemplateURLs(); | |
47 } | |
45 } | 48 } |
46 | 49 |
47 TemplateUrlServiceAndroid::~TemplateUrlServiceAndroid() { | 50 TemplateUrlServiceAndroid::~TemplateUrlServiceAndroid() { |
48 template_url_service_->RemoveObserver(this); | 51 template_url_service_->RemoveObserver(this); |
49 } | 52 } |
50 | 53 |
51 void TemplateUrlServiceAndroid::Load(JNIEnv* env, | 54 void TemplateUrlServiceAndroid::Load(JNIEnv* env, |
52 const JavaParamRef<jobject>& obj) { | 55 const JavaParamRef<jobject>& obj) { |
53 template_url_service_->Load(); | 56 template_url_service_->Load(); |
54 } | 57 } |
55 | 58 |
56 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( | 59 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( |
57 JNIEnv* env, | 60 JNIEnv* env, |
58 const JavaParamRef<jobject>& obj, | 61 const JavaParamRef<jobject>& obj, |
59 jint selected_index) { | 62 const JavaParamRef<jstring>& jkeyword) { |
60 std::vector<TemplateURL*> template_urls = | 63 base::string16 keyword( |
61 template_url_service_->GetTemplateURLs(); | 64 base::android::ConvertJavaStringToUTF16(env, jkeyword)); |
62 size_t selected_index_size_t = static_cast<size_t>(selected_index); | 65 TemplateURL* template_url = |
63 DCHECK_LT(selected_index_size_t, template_urls.size()) << | 66 template_url_service_->GetTemplateURLForKeyword(keyword); |
64 "Wrong index for search engine"; | |
65 | |
66 TemplateURL* template_url = template_urls[selected_index_size_t]; | |
67 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); | 67 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); |
68 } | 68 } |
69 | 69 |
70 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider( | 70 jint TemplateUrlServiceAndroid::GetDefaultSearchProviderIndex( |
71 JNIEnv* env, | 71 JNIEnv* env, |
72 const JavaParamRef<jobject>& obj) { | 72 const base::android::JavaParamRef<jobject>& obj) const { |
73 std::vector<TemplateURL*> template_urls = | |
74 template_url_service_->GetTemplateURLs(); | |
75 TemplateURL* default_search_provider = | 73 TemplateURL* default_search_provider = |
76 template_url_service_->GetDefaultSearchProvider(); | 74 template_url_service_->GetDefaultSearchProvider(); |
77 for (size_t i = 0; i < template_urls.size(); ++i) { | 75 auto it = std::find(template_urls_.begin(), template_urls_.end(), |
78 if (default_search_provider == template_urls[i]) | 76 default_search_provider); |
79 return i; | 77 size_t default_search_provider_index_ = (it == template_urls_.end()) |
80 } | 78 ? -1 |
81 return -1; | 79 : (it - template_urls_.begin()); |
Peter Kasting
2016/11/29 03:32:18
Nit: Indenting looks a bit odd. Is this what git
ltian
2016/11/30 06:36:17
Sorry the Eclipse setting and git cl format do in
| |
80 return default_search_provider_index_; | |
82 } | 81 } |
83 | 82 |
84 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, | 83 jboolean TemplateUrlServiceAndroid::IsLoaded( |
85 const JavaParamRef<jobject>& obj) { | 84 JNIEnv* env, |
85 const JavaParamRef<jobject>& obj) const { | |
86 return template_url_service_->loaded(); | 86 return template_url_service_->loaded(); |
87 } | 87 } |
88 | 88 |
89 jint TemplateUrlServiceAndroid::GetTemplateUrlCount( | 89 jint TemplateUrlServiceAndroid::GetTemplateUrlCount( |
90 JNIEnv* env, | 90 JNIEnv* env, |
91 const JavaParamRef<jobject>& obj) { | 91 const JavaParamRef<jobject>& obj) const { |
92 return template_url_service_->GetTemplateURLs().size(); | 92 return template_urls_.size(); |
93 } | 93 } |
94 | 94 |
95 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( | 95 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( |
96 JNIEnv* env, | 96 JNIEnv* env, |
97 const JavaParamRef<jobject>& obj) { | 97 const JavaParamRef<jobject>& obj) { |
98 return template_url_service_->is_default_search_managed(); | 98 return template_url_service_->is_default_search_managed(); |
99 } | 99 } |
100 | 100 |
101 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( | 101 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( |
102 JNIEnv* env, | 102 JNIEnv* env, |
(...skipping 12 matching lines...) Expand all Loading... | |
115 TemplateURL* default_search_provider = | 115 TemplateURL* default_search_provider = |
116 template_url_service_->GetDefaultSearchProvider(); | 116 template_url_service_->GetDefaultSearchProvider(); |
117 return default_search_provider && | 117 return default_search_provider && |
118 default_search_provider->url_ref().HasGoogleBaseURLs( | 118 default_search_provider->url_ref().HasGoogleBaseURLs( |
119 template_url_service_->search_terms_data()); | 119 template_url_service_->search_terms_data()); |
120 } | 120 } |
121 | 121 |
122 base::android::ScopedJavaLocalRef<jobject> | 122 base::android::ScopedJavaLocalRef<jobject> |
123 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, | 123 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, |
124 const JavaParamRef<jobject>& obj, | 124 const JavaParamRef<jobject>& obj, |
125 jint index) { | 125 jint index) const { |
126 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; | 126 TemplateURL* template_url = template_urls_[index]; |
127 return Java_TemplateUrl_create( | 127 return Java_TemplateUrl_create( |
128 env, index, | 128 env, index, |
129 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), | 129 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), |
130 IsPrepopulatedTemplate(template_url) || | 130 base::android::ConvertUTF8ToJavaString(env, template_url->url()), |
131 template_url->created_by_policy()); | 131 template_url_service_->ShowInPrepopulatedList(template_url), |
132 } | 132 base::android::ConvertUTF16ToJavaString(env, template_url->keyword())); |
133 | |
134 bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) { | |
135 return url->prepopulate_id() > 0; | |
136 } | 133 } |
137 | 134 |
138 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { | 135 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { |
139 template_url_subscription_.reset(); | 136 template_url_subscription_.reset(); |
140 JNIEnv* env = base::android::AttachCurrentThread(); | 137 JNIEnv* env = base::android::AttachCurrentThread(); |
141 if (weak_java_obj_.get(env).is_null()) | 138 if (weak_java_obj_.get(env).is_null()) |
142 return; | 139 return; |
140 LoadTemplateURLs(); | |
143 | 141 |
144 Java_TemplateUrlService_templateUrlServiceLoaded(env, | 142 Java_TemplateUrlService_templateUrlServiceLoaded(env, |
145 weak_java_obj_.get(env)); | 143 weak_java_obj_.get(env)); |
146 } | 144 } |
147 | 145 |
146 void TemplateUrlServiceAndroid::LoadTemplateURLs() { | |
147 template_urls_.clear(); | |
Peter Kasting
2016/11/29 03:32:18
This call is unnecessary, since you reset template
ltian
2016/11/30 06:36:17
Done.
| |
148 | |
149 template_urls_ = template_url_service_->GetTemplateURLs(); | |
150 TemplateURL* default_search_provider = | |
151 template_url_service_->GetDefaultSearchProvider(); | |
152 | |
153 auto typeCompare = [&] (const TemplateURL* lhs, const TemplateURL* rhs) | |
Peter Kasting
2016/11/29 03:32:18
Nit: Use normal variable capitalization scheme.
I
ltian
2016/11/30 06:36:17
Done.
| |
154 -> bool { | |
Peter Kasting
2016/11/29 03:32:18
Nit: Is the return type necessary for compilation?
ltian
2016/11/30 06:36:17
Done.
| |
155 if (template_url_service_->ShowInPrepopulatedList(lhs)) { | |
156 return !template_url_service_->ShowInPrepopulatedList(rhs) || | |
Peter Kasting
2016/11/29 03:32:18
Nit: This call is verbose and you make it regardle
ltian
2016/11/30 06:36:17
Done.
| |
157 (lhs->prepopulate_id() < rhs->prepopulate_id()); | |
158 } | |
159 return (lhs == default_search_provider && | |
160 !template_url_service_->ShowInPrepopulatedList(rhs)); | |
161 }; | |
162 | |
Peter Kasting
2016/11/29 03:32:18
Nit: I'd avoid this blank line, since the lambda j
ltian
2016/11/30 06:36:17
Done.
| |
163 std::sort(template_urls_.begin(), template_urls_.end(), typeCompare); | |
164 } | |
165 | |
148 void TemplateUrlServiceAndroid::OnTemplateURLServiceChanged() { | 166 void TemplateUrlServiceAndroid::OnTemplateURLServiceChanged() { |
149 JNIEnv* env = base::android::AttachCurrentThread(); | 167 JNIEnv* env = base::android::AttachCurrentThread(); |
150 if (weak_java_obj_.get(env).is_null()) | 168 if (weak_java_obj_.get(env).is_null()) |
151 return; | 169 return; |
170 LoadTemplateURLs(); | |
152 | 171 |
153 Java_TemplateUrlService_onTemplateURLServiceChanged(env, | 172 Java_TemplateUrlService_onTemplateURLServiceChanged(env, |
154 weak_java_obj_.get(env)); | 173 weak_java_obj_.get(env)); |
155 } | 174 } |
156 | 175 |
157 base::android::ScopedJavaLocalRef<jstring> | 176 base::android::ScopedJavaLocalRef<jstring> |
158 TemplateUrlServiceAndroid::GetUrlForSearchQuery( | 177 TemplateUrlServiceAndroid::GetUrlForSearchQuery( |
159 JNIEnv* env, | 178 JNIEnv* env, |
160 const JavaParamRef<jobject>& obj, | 179 const JavaParamRef<jobject>& obj, |
161 const JavaParamRef<jstring>& jquery) { | 180 const JavaParamRef<jstring>& jquery) { |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
252 url = gurl.spec(); | 271 url = gurl.spec(); |
253 } | 272 } |
254 | 273 |
255 return base::android::ConvertUTF8ToJavaString(env, url); | 274 return base::android::ConvertUTF8ToJavaString(env, url); |
256 } | 275 } |
257 | 276 |
258 base::android::ScopedJavaLocalRef<jstring> | 277 base::android::ScopedJavaLocalRef<jstring> |
259 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( | 278 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( |
260 JNIEnv* env, | 279 JNIEnv* env, |
261 const JavaParamRef<jobject>& obj, | 280 const JavaParamRef<jobject>& obj, |
262 jint index) { | 281 const JavaParamRef<jstring>& jkeyword) { |
263 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; | 282 base::string16 keyword = |
283 base::android::ConvertJavaStringToUTF16(env, jkeyword); | |
284 TemplateURL* template_url = | |
285 template_url_service_->GetTemplateURLForKeyword(keyword); | |
264 std::string url(template_url->url_ref().ReplaceSearchTerms( | 286 std::string url(template_url->url_ref().ReplaceSearchTerms( |
265 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), | 287 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), |
266 template_url_service_->search_terms_data())); | 288 template_url_service_->search_terms_data())); |
267 return base::android::ConvertUTF8ToJavaString(env, url); | 289 return base::android::ConvertUTF8ToJavaString(env, url); |
268 } | 290 } |
269 | 291 |
270 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 292 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
271 TemplateUrlServiceAndroid* template_url_service_android = | 293 TemplateUrlServiceAndroid* template_url_service_android = |
272 new TemplateUrlServiceAndroid(env, obj); | 294 new TemplateUrlServiceAndroid(env, obj); |
273 return reinterpret_cast<intptr_t>(template_url_service_android); | 295 return reinterpret_cast<intptr_t>(template_url_service_android); |
274 } | 296 } |
275 | 297 |
276 // static | 298 // static |
277 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) { | 299 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) { |
278 return RegisterNativesImpl(env); | 300 return RegisterNativesImpl(env); |
279 } | 301 } |
OLD | NEW |