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

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 ian's comments. Created 4 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
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"; 65 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url);
66 }
66 67
67 TemplateURL* template_url = template_urls[selected_index_size_t]; 68 bool TemplateUrlServiceAndroid::IsInDefaultList(TemplateURL* template_url) {
68 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); 69 return IsPrepopulatedTemplate(template_url) ||
70 template_url->created_by_policy();
69 } 71 }
70 72
71 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider( 73 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider(
72 JNIEnv* env, 74 JNIEnv* env,
73 const JavaParamRef<jobject>& obj) { 75 const JavaParamRef<jobject>& obj) {
76 size_t index = -1;
77 template_url_list_.clear();
74 std::vector<TemplateURL*> template_urls = 78 std::vector<TemplateURL*> template_urls =
75 template_url_service_->GetTemplateURLs(); 79 template_url_service_->GetTemplateURLs();
76 TemplateURL* default_search_provider = 80 TemplateURL* default_search_provider =
77 template_url_service_->GetDefaultSearchProvider(); 81 template_url_service_->GetDefaultSearchProvider();
82 std::vector<TemplateURL*> recent_visit_list;
78 for (size_t i = 0; i < template_urls.size(); ++i) { 83 for (size_t i = 0; i < template_urls.size(); ++i) {
79 if (default_search_provider == template_urls[i]) 84 if (IsInDefaultList(template_urls[i])) {
80 return i; 85 template_url_list_.push_back(template_urls[i]);
86 if (default_search_provider == template_urls[i])
87 index = template_url_list_.size() - 1;
88 } else if (default_search_provider == template_urls[i]) {
Ian Wen 2016/10/19 00:03:31 I don't understand why you need to continue if dsp
ltian 2016/10/19 18:56:32 This part checks if the default search engine is a
89 continue;
90 } else {
91 recent_visit_list.push_back(template_urls[i]);
92 }
81 } 93 }
82 return -1; 94 // If default search engine is recently visited one, force it to
Ian Wen 2016/10/19 00:03:31 Did you mean if index is not set, then dsp is in r
ltian 2016/10/19 18:56:31 No, the index is set but not guaranteed to be afte
95 // append at the bottom of default list.
96 if (!IsInDefaultList(default_search_provider)) {
97 template_url_list_.push_back(default_search_provider);
98 index = template_url_list_.size() - 1;
99 }
100 for (size_t i = 0; i < recent_visit_list.size(); ++i)
101 template_url_list_.push_back(recent_visit_list[i]);
102 return index;
83 } 103 }
84 104
85 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, 105 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env,
86 const JavaParamRef<jobject>& obj) { 106 const JavaParamRef<jobject>& obj) {
87 return template_url_service_->loaded(); 107 return template_url_service_->loaded();
88 } 108 }
89 109
90 jint TemplateUrlServiceAndroid::GetTemplateUrlCount( 110 jint TemplateUrlServiceAndroid::GetTemplateUrlCount(
91 JNIEnv* env, 111 JNIEnv* env,
92 const JavaParamRef<jobject>& obj) { 112 const JavaParamRef<jobject>& obj) {
93 return template_url_service_->GetTemplateURLs().size(); 113 return template_url_list_.size();
94 } 114 }
95 115
96 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( 116 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged(
97 JNIEnv* env, 117 JNIEnv* env,
98 const JavaParamRef<jobject>& obj) { 118 const JavaParamRef<jobject>& obj) {
99 return template_url_service_->is_default_search_managed(); 119 return template_url_service_->is_default_search_managed();
100 } 120 }
101 121
102 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( 122 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable(
103 JNIEnv* env, 123 JNIEnv* env,
(...skipping 13 matching lines...) Expand all
117 template_url_service_->GetDefaultSearchProvider(); 137 template_url_service_->GetDefaultSearchProvider();
118 return default_search_provider && 138 return default_search_provider &&
119 default_search_provider->url_ref().HasGoogleBaseURLs( 139 default_search_provider->url_ref().HasGoogleBaseURLs(
120 template_url_service_->search_terms_data()); 140 template_url_service_->search_terms_data());
121 } 141 }
122 142
123 base::android::ScopedJavaLocalRef<jobject> 143 base::android::ScopedJavaLocalRef<jobject>
124 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, 144 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env,
125 const JavaParamRef<jobject>& obj, 145 const JavaParamRef<jobject>& obj,
126 jint index) { 146 jint index) {
127 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; 147 TemplateURL* template_url = template_url_list_[index];
148 if (!template_url)
149 return NULL;
128 return Java_TemplateUrl_create( 150 return Java_TemplateUrl_create(
129 env, index, 151 env, index,
130 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), 152 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()),
131 IsPrepopulatedTemplate(template_url) || 153 base::android::ConvertUTF8ToJavaString(env, template_url->url()),
132 template_url->created_by_policy()); 154 IsInDefaultList(template_url),
155 base::android::ConvertUTF16ToJavaString(env, template_url->keyword()));
133 } 156 }
134 157
135 bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) { 158 bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) {
136 return url->prepopulate_id() > 0; 159 return url->prepopulate_id() > 0;
137 } 160 }
138 161
139 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { 162 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() {
140 template_url_subscription_.reset(); 163 template_url_subscription_.reset();
141 JNIEnv* env = base::android::AttachCurrentThread(); 164 JNIEnv* env = base::android::AttachCurrentThread();
142 if (weak_java_obj_.get(env).is_null()) 165 if (weak_java_obj_.get(env).is_null())
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 url = gurl.spec(); 276 url = gurl.spec();
254 } 277 }
255 278
256 return base::android::ConvertUTF8ToJavaString(env, url); 279 return base::android::ConvertUTF8ToJavaString(env, url);
257 } 280 }
258 281
259 base::android::ScopedJavaLocalRef<jstring> 282 base::android::ScopedJavaLocalRef<jstring>
260 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( 283 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl(
261 JNIEnv* env, 284 JNIEnv* env,
262 const JavaParamRef<jobject>& obj, 285 const JavaParamRef<jobject>& obj,
263 jint index) { 286 const JavaParamRef<jstring>& jkeyword) {
264 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; 287 base::string16 keyword(
288 base::android::ConvertJavaStringToUTF16(env, jkeyword));
289 TemplateURL* template_url =
290 template_url_service_->GetTemplateURLForKeyword(keyword);
265 std::string url(template_url->url_ref().ReplaceSearchTerms( 291 std::string url(template_url->url_ref().ReplaceSearchTerms(
266 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), 292 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")),
267 template_url_service_->search_terms_data())); 293 template_url_service_->search_terms_data()));
268 return base::android::ConvertUTF8ToJavaString(env, url); 294 return base::android::ConvertUTF8ToJavaString(env, url);
269 } 295 }
270 296
271 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 297 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
272 TemplateUrlServiceAndroid* template_url_service_android = 298 TemplateUrlServiceAndroid* template_url_service_android =
273 new TemplateUrlServiceAndroid(env, obj); 299 new TemplateUrlServiceAndroid(env, obj);
274 return reinterpret_cast<intptr_t>(template_url_service_android); 300 return reinterpret_cast<intptr_t>(template_url_service_android);
275 } 301 }
276 302
277 // static 303 // static
278 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) { 304 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) {
279 return RegisterNativesImpl(env); 305 return RegisterNativesImpl(env);
280 } 306 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698