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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
50 } | 50 } |
51 | 51 |
52 void TemplateUrlServiceAndroid::Load(JNIEnv* env, | 52 void TemplateUrlServiceAndroid::Load(JNIEnv* env, |
53 const JavaParamRef<jobject>& obj) { | 53 const JavaParamRef<jobject>& obj) { |
54 template_url_service_->Load(); | 54 template_url_service_->Load(); |
55 } | 55 } |
56 | 56 |
57 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( | 57 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( |
58 JNIEnv* env, | 58 JNIEnv* env, |
59 const JavaParamRef<jobject>& obj, | 59 const JavaParamRef<jobject>& obj, |
60 jint selected_index) { | 60 const JavaParamRef<jstring>& jkeyword) { |
61 std::vector<TemplateURL*> template_urls = | 61 base::string16 keyword( |
62 template_url_service_->GetTemplateURLs(); | 62 base::android::ConvertJavaStringToUTF16(env, jkeyword)); |
63 size_t selected_index_size_t = static_cast<size_t>(selected_index); | 63 TemplateURL* template_url = |
64 DCHECK_LT(selected_index_size_t, template_urls.size()) << | 64 template_url_service_->GetTemplateURLForKeyword(keyword); |
65 "Wrong index for search engine"; | |
66 | |
67 TemplateURL* template_url = template_urls[selected_index_size_t]; | |
68 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); | 65 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); |
69 } | 66 } |
70 | 67 |
71 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider( | 68 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider( |
72 JNIEnv* env, | 69 JNIEnv* env, |
73 const JavaParamRef<jobject>& obj) { | 70 const JavaParamRef<jobject>& obj) { |
Peter Kasting
2016/11/02 00:34:03
It seems like it might be simpler to implement the
ltian
2016/11/22 21:51:40
Done.
| |
71 size_t index = -1; | |
72 template_urls_.clear(); | |
74 std::vector<TemplateURL*> template_urls = | 73 std::vector<TemplateURL*> template_urls = |
75 template_url_service_->GetTemplateURLs(); | 74 template_url_service_->GetTemplateURLs(); |
76 TemplateURL* default_search_provider = | 75 TemplateURL* default_search_provider = |
77 template_url_service_->GetDefaultSearchProvider(); | 76 template_url_service_->GetDefaultSearchProvider(); |
77 std::vector<TemplateURL*> recent_visit_list; | |
78 // Add only IsInDefaultList() providers to the template_urls_. | |
Peter Kasting
2016/11/02 00:34:02
Nit: Blank line separating a comment + block of co
ltian
2016/11/22 21:51:40
Done.
| |
78 for (size_t i = 0; i < template_urls.size(); ++i) { | 79 for (size_t i = 0; i < template_urls.size(); ++i) { |
79 if (default_search_provider == template_urls[i]) | 80 if (template_url_service_->IsInDefaultList(template_urls[i])) { |
80 return i; | 81 template_urls_.push_back(template_urls[i]); |
82 if (default_search_provider == template_urls[i]) | |
83 index = template_urls_.size() - 1; | |
84 // Skip if default search engine is a custom one. | |
85 } else if (default_search_provider == template_urls[i]) { | |
86 continue; | |
87 } else { | |
88 recent_visit_list.push_back(template_urls[i]); | |
Peter Kasting
2016/11/02 00:34:02
Doesn't this need some kind of recency check? Oth
ltian
2016/11/22 21:51:41
Will write a sort function to simplify these opera
| |
89 } | |
81 } | 90 } |
82 return -1; | 91 // If default search engine is custom one, force it to |
92 // be appended at the bottom of list. | |
93 if (!template_url_service_->IsInDefaultList(default_search_provider)) { | |
94 template_urls_.push_back(default_search_provider); | |
95 index = template_urls_.size() - 1; | |
96 } | |
97 // Append all custom search engines after default search | |
98 // engine and prepopulated search engines. | |
99 for (size_t i = 0; i < recent_visit_list.size(); ++i) | |
100 template_urls_.push_back(recent_visit_list[i]); | |
101 return index; | |
83 } | 102 } |
84 | 103 |
85 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, | 104 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, |
86 const JavaParamRef<jobject>& obj) { | 105 const JavaParamRef<jobject>& obj) { |
87 return template_url_service_->loaded(); | 106 return template_url_service_->loaded(); |
88 } | 107 } |
89 | 108 |
90 jint TemplateUrlServiceAndroid::GetTemplateUrlCount( | 109 jint TemplateUrlServiceAndroid::GetTemplateUrlCount( |
91 JNIEnv* env, | 110 JNIEnv* env, |
92 const JavaParamRef<jobject>& obj) { | 111 const JavaParamRef<jobject>& obj) { |
93 return template_url_service_->GetTemplateURLs().size(); | 112 return template_urls_.size(); |
94 } | 113 } |
95 | 114 |
96 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( | 115 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( |
97 JNIEnv* env, | 116 JNIEnv* env, |
98 const JavaParamRef<jobject>& obj) { | 117 const JavaParamRef<jobject>& obj) { |
99 return template_url_service_->is_default_search_managed(); | 118 return template_url_service_->is_default_search_managed(); |
100 } | 119 } |
101 | 120 |
102 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( | 121 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( |
103 JNIEnv* env, | 122 JNIEnv* env, |
(...skipping 13 matching lines...) Expand all Loading... | |
117 template_url_service_->GetDefaultSearchProvider(); | 136 template_url_service_->GetDefaultSearchProvider(); |
118 return default_search_provider && | 137 return default_search_provider && |
119 default_search_provider->url_ref().HasGoogleBaseURLs( | 138 default_search_provider->url_ref().HasGoogleBaseURLs( |
120 template_url_service_->search_terms_data()); | 139 template_url_service_->search_terms_data()); |
121 } | 140 } |
122 | 141 |
123 base::android::ScopedJavaLocalRef<jobject> | 142 base::android::ScopedJavaLocalRef<jobject> |
124 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, | 143 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, |
125 const JavaParamRef<jobject>& obj, | 144 const JavaParamRef<jobject>& obj, |
126 jint index) { | 145 jint index) { |
127 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; | 146 TemplateURL* template_url = template_urls_[index]; |
147 if (!template_url) | |
148 return nullptr; | |
128 return Java_TemplateUrl_create( | 149 return Java_TemplateUrl_create( |
129 env, index, | 150 env, index, |
130 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), | 151 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), |
131 IsPrepopulatedTemplate(template_url) || | 152 base::android::ConvertUTF8ToJavaString(env, template_url->url()), |
132 template_url->created_by_policy()); | 153 template_url_service_->IsInDefaultList(template_url), |
133 } | 154 base::android::ConvertUTF16ToJavaString(env, template_url->keyword())); |
134 | |
135 bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) { | |
136 return url->prepopulate_id() > 0; | |
137 } | 155 } |
138 | 156 |
139 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { | 157 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { |
140 template_url_subscription_.reset(); | 158 template_url_subscription_.reset(); |
141 JNIEnv* env = base::android::AttachCurrentThread(); | 159 JNIEnv* env = base::android::AttachCurrentThread(); |
142 if (weak_java_obj_.get(env).is_null()) | 160 if (weak_java_obj_.get(env).is_null()) |
143 return; | 161 return; |
144 | 162 |
145 Java_TemplateUrlService_templateUrlServiceLoaded(env, | 163 Java_TemplateUrlService_templateUrlServiceLoaded(env, |
146 weak_java_obj_.get(env)); | 164 weak_java_obj_.get(env)); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
253 url = gurl.spec(); | 271 url = gurl.spec(); |
254 } | 272 } |
255 | 273 |
256 return base::android::ConvertUTF8ToJavaString(env, url); | 274 return base::android::ConvertUTF8ToJavaString(env, url); |
257 } | 275 } |
258 | 276 |
259 base::android::ScopedJavaLocalRef<jstring> | 277 base::android::ScopedJavaLocalRef<jstring> |
260 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( | 278 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( |
261 JNIEnv* env, | 279 JNIEnv* env, |
262 const JavaParamRef<jobject>& obj, | 280 const JavaParamRef<jobject>& obj, |
263 jint index) { | 281 const JavaParamRef<jstring>& jkeyword) { |
264 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; | 282 base::string16 keyword( |
283 base::android::ConvertJavaStringToUTF16(env, jkeyword)); | |
Peter Kasting
2016/11/02 00:34:02
Nit: Prefer assignment to constructor-style init f
ltian
2016/11/22 21:51:41
Sorry I am a little confused. Is the constructor-s
Peter Kasting
2016/11/22 21:57:10
Yes, and as the reference notes, you should prefer
ltian
2016/11/22 23:25:10
Got it, thx!
| |
284 TemplateURL* template_url = | |
285 template_url_service_->GetTemplateURLForKeyword(keyword); | |
265 std::string url(template_url->url_ref().ReplaceSearchTerms( | 286 std::string url(template_url->url_ref().ReplaceSearchTerms( |
266 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), | 287 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), |
267 template_url_service_->search_terms_data())); | 288 template_url_service_->search_terms_data())); |
268 return base::android::ConvertUTF8ToJavaString(env, url); | 289 return base::android::ConvertUTF8ToJavaString(env, url); |
269 } | 290 } |
270 | 291 |
271 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 292 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
272 TemplateUrlServiceAndroid* template_url_service_android = | 293 TemplateUrlServiceAndroid* template_url_service_android = |
273 new TemplateUrlServiceAndroid(env, obj); | 294 new TemplateUrlServiceAndroid(env, obj); |
274 return reinterpret_cast<intptr_t>(template_url_service_android); | 295 return reinterpret_cast<intptr_t>(template_url_service_android); |
275 } | 296 } |
276 | 297 |
277 // static | 298 // static |
278 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) { | 299 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) { |
279 return RegisterNativesImpl(env); | 300 return RegisterNativesImpl(env); |
280 } | 301 } |
OLD | NEW |