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

Side by Side Diff: chrome/browser/search_engines/template_url_service_android.cc

Issue 2367373003: [Android] Allow setting recently visited search engines as default search engine (Closed)
Patch Set: Update based on Dan's new comments. Created 4 years, 1 month 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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698