OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/android/enhanced_bookmarks/enhanced_bookmarks_bridge.h" | 5 #include "chrome/browser/enhanced_bookmarks/android/enhanced_bookmarks_bridge.h" |
6 | 6 |
7 #include "base/android/jni_array.h" | 7 #include "base/android/jni_array.h" |
8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
10 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 10 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| 11 #include "chrome/browser/enhanced_bookmarks/android/bookmark_image_service_facto
ry.h" |
11 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi
ce.h" | 12 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi
ce.h" |
12 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi
ce_factory.h" | 13 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi
ce_factory.h" |
13 #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h" | 14 #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h" |
14 #include "chrome/browser/profiles/profile_android.h" | 15 #include "chrome/browser/profiles/profile_android.h" |
15 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 16 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
16 #include "chrome/browser/signin/signin_manager_factory.h" | 17 #include "chrome/browser/signin/signin_manager_factory.h" |
17 #include "chrome/common/chrome_version_info.h" | 18 #include "chrome/common/chrome_version_info.h" |
18 #include "chrome/common/pref_names.h" | 19 #include "chrome/common/pref_names.h" |
19 #include "components/bookmarks/browser/bookmark_model.h" | 20 #include "components/bookmarks/browser/bookmark_model.h" |
20 #include "components/bookmarks/browser/bookmark_utils.h" | 21 #include "components/bookmarks/browser/bookmark_utils.h" |
21 #include "components/bookmarks/common/android/bookmark_id.h" | 22 #include "components/bookmarks/common/android/bookmark_id.h" |
22 #include "components/bookmarks/common/android/bookmark_type.h" | 23 #include "components/bookmarks/common/android/bookmark_type.h" |
| 24 #include "components/enhanced_bookmarks/bookmark_image_service.h" |
23 #include "components/enhanced_bookmarks/enhanced_bookmark_model.h" | 25 #include "components/enhanced_bookmarks/enhanced_bookmark_model.h" |
| 26 #include "components/enhanced_bookmarks/image_record.h" |
24 #include "components/signin/core/browser/signin_manager.h" | 27 #include "components/signin/core/browser/signin_manager.h" |
25 #include "content/public/browser/browser_thread.h" | 28 #include "content/public/browser/browser_thread.h" |
26 #include "jni/EnhancedBookmarksBridge_jni.h" | 29 #include "jni/EnhancedBookmarksBridge_jni.h" |
| 30 #include "ui/gfx/android/java_bitmap.h" |
| 31 #include "ui/gfx/image/image.h" |
27 | 32 |
28 using base::android::AttachCurrentThread; | 33 using base::android::AttachCurrentThread; |
| 34 using base::android::ScopedJavaGlobalRef; |
29 using bookmarks::android::JavaBookmarkIdCreateBookmarkId; | 35 using bookmarks::android::JavaBookmarkIdCreateBookmarkId; |
30 using bookmarks::android::JavaBookmarkIdGetId; | 36 using bookmarks::android::JavaBookmarkIdGetId; |
31 using bookmarks::android::JavaBookmarkIdGetType; | 37 using bookmarks::android::JavaBookmarkIdGetType; |
32 using bookmarks::BookmarkType; | 38 using bookmarks::BookmarkType; |
33 using content::BrowserThread; | 39 using content::BrowserThread; |
| 40 using enhanced_bookmarks::ImageRecord; |
| 41 |
| 42 namespace { |
| 43 |
| 44 void Callback(ScopedJavaGlobalRef<jobject>* j_callback, |
| 45 const ImageRecord& image_record) { |
| 46 JNIEnv* env = base::android::AttachCurrentThread(); |
| 47 |
| 48 scoped_ptr<ScopedJavaGlobalRef<jobject> > j_callback_ptr(j_callback); |
| 49 ScopedJavaLocalRef<jstring> j_url = |
| 50 base::android::ConvertUTF8ToJavaString(env, image_record.url.spec()); |
| 51 |
| 52 SkBitmap bitmap = image_record.image.AsBitmap(); |
| 53 ScopedJavaLocalRef<jobject> j_bitmap; |
| 54 if (!bitmap.isNull()) { |
| 55 j_bitmap = gfx::ConvertToJavaBitmap(&bitmap); |
| 56 } |
| 57 |
| 58 enhanced_bookmarks::android::Java_SalientImageCallback_onSalientImageReady( |
| 59 env, j_callback_ptr->obj(), j_bitmap.Release(), j_url.Release()); |
| 60 } |
| 61 |
| 62 } // namespace |
34 | 63 |
35 namespace enhanced_bookmarks { | 64 namespace enhanced_bookmarks { |
36 namespace android { | 65 namespace android { |
37 | 66 |
38 EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv* env, | 67 EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv* env, |
39 jobject obj, | 68 jobject obj, |
40 Profile* profile) : weak_java_ref_(env, obj) { | 69 Profile* profile) : weak_java_ref_(env, obj) { |
41 profile_ = profile; | 70 profile_ = profile; |
42 enhanced_bookmark_model_ = | 71 enhanced_bookmark_model_ = |
43 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_); | 72 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_); |
44 enhanced_bookmark_model_->SetVersionSuffix(chrome::VersionInfo().OSType()); | 73 enhanced_bookmark_model_->SetVersionSuffix(chrome::VersionInfo().OSType()); |
45 cluster_service_ = | 74 cluster_service_ = |
46 ChromeBookmarkServerClusterServiceFactory::GetForBrowserContext(profile_); | 75 ChromeBookmarkServerClusterServiceFactory::GetForBrowserContext(profile_); |
47 cluster_service_->AddObserver(this); | 76 cluster_service_->AddObserver(this); |
| 77 bookmark_image_service_ = |
| 78 BookmarkImageServiceFactory::GetForBrowserContext(profile_); |
48 search_service_.reset(new BookmarkServerSearchService( | 79 search_service_.reset(new BookmarkServerSearchService( |
49 profile_->GetRequestContext(), | 80 profile_->GetRequestContext(), |
50 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_), | 81 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_), |
51 SigninManagerFactory::GetForProfile(profile_), | 82 SigninManagerFactory::GetForProfile(profile_), |
52 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_))); | 83 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_))); |
53 search_service_->AddObserver(this); | 84 search_service_->AddObserver(this); |
54 } | 85 } |
55 | 86 |
56 EnhancedBookmarksBridge::~EnhancedBookmarksBridge() { | 87 EnhancedBookmarksBridge::~EnhancedBookmarksBridge() { |
57 cluster_service_->RemoveObserver(this); | 88 cluster_service_->RemoveObserver(this); |
58 search_service_->RemoveObserver(this); | 89 search_service_->RemoveObserver(this); |
59 } | 90 } |
60 | 91 |
61 void EnhancedBookmarksBridge::Destroy(JNIEnv*, jobject) { | 92 void EnhancedBookmarksBridge::Destroy(JNIEnv*, jobject) { |
62 delete this; | 93 delete this; |
63 } | 94 } |
64 | 95 |
| 96 void EnhancedBookmarksBridge::SalientImageForUrl(JNIEnv* env, |
| 97 jobject obj, |
| 98 jstring j_url, |
| 99 jobject j_callback) { |
| 100 DCHECK(j_callback); |
| 101 |
| 102 GURL url(base::android::ConvertJavaStringToUTF16(env, j_url)); |
| 103 scoped_ptr<ScopedJavaGlobalRef<jobject>> j_callback_ptr( |
| 104 new ScopedJavaGlobalRef<jobject>()); |
| 105 j_callback_ptr->Reset(env, j_callback); |
| 106 bookmark_image_service_->SalientImageForUrl( |
| 107 url, base::Bind(&Callback, j_callback_ptr.release())); |
| 108 } |
| 109 |
65 ScopedJavaLocalRef<jstring> EnhancedBookmarksBridge::GetBookmarkDescription( | 110 ScopedJavaLocalRef<jstring> EnhancedBookmarksBridge::GetBookmarkDescription( |
66 JNIEnv* env, jobject obj, jlong id, jint type) { | 111 JNIEnv* env, jobject obj, jlong id, jint type) { |
67 DCHECK(enhanced_bookmark_model_->loaded()); | 112 DCHECK(enhanced_bookmark_model_->loaded()); |
68 if (type != BookmarkType::BOOKMARK_TYPE_NORMAL) { | 113 if (type != BookmarkType::BOOKMARK_TYPE_NORMAL) { |
69 return base::android::ConvertUTF8ToJavaString(env, std::string()); | 114 return base::android::ConvertUTF8ToJavaString(env, std::string()); |
70 } | 115 } |
71 | 116 |
72 const BookmarkNode* node = bookmarks::GetBookmarkNodeByID( | 117 const BookmarkNode* node = bookmarks::GetBookmarkNodeByID( |
73 enhanced_bookmark_model_->bookmark_model(), static_cast<int64>(id)); | 118 enhanced_bookmark_model_->bookmark_model(), static_cast<int64>(id)); |
74 | 119 |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) { | 281 void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) { |
237 DCHECK(enhanced_bookmark_model_->loaded()); | 282 DCHECK(enhanced_bookmark_model_->loaded()); |
238 JNIEnv* env = AttachCurrentThread(); | 283 JNIEnv* env = AttachCurrentThread(); |
239 | 284 |
240 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 285 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
241 if (obj.is_null()) | 286 if (obj.is_null()) |
242 return; | 287 return; |
243 | 288 |
244 if (service == cluster_service_) { | 289 if (service == cluster_service_) { |
245 Java_EnhancedBookmarksBridge_onFiltersChanged(env, obj.obj()); | 290 Java_EnhancedBookmarksBridge_onFiltersChanged(env, obj.obj()); |
246 } else if (service == search_service_.get()){ | 291 } else if (service == search_service_.get()) { |
247 Java_EnhancedBookmarksBridge_onSearchResultReturned(env, obj.obj()); | 292 Java_EnhancedBookmarksBridge_onSearchResultReturned(env, obj.obj()); |
248 } | 293 } |
249 } | 294 } |
250 | 295 |
251 bool EnhancedBookmarksBridge::IsEditable(const BookmarkNode* node) const { | 296 bool EnhancedBookmarksBridge::IsEditable(const BookmarkNode* node) const { |
252 if (!node || (node->type() != BookmarkNode::FOLDER && | 297 if (!node || (node->type() != BookmarkNode::FOLDER && |
253 node->type() != BookmarkNode::URL)) { | 298 node->type() != BookmarkNode::URL)) { |
254 return false; | 299 return false; |
255 } | 300 } |
256 return profile_->GetPrefs()->GetBoolean( | 301 return profile_->GetPrefs()->GetBoolean( |
257 bookmarks::prefs::kEditBookmarksEnabled); | 302 bookmarks::prefs::kEditBookmarksEnabled); |
258 } | 303 } |
259 | 304 |
260 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) { | 305 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) { |
261 return reinterpret_cast<jlong>(new EnhancedBookmarksBridge( | 306 return reinterpret_cast<jlong>(new EnhancedBookmarksBridge( |
262 env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); | 307 env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); |
263 } | 308 } |
264 | 309 |
265 bool RegisterEnhancedBookmarksBridge(JNIEnv* env) { | 310 bool RegisterEnhancedBookmarksBridge(JNIEnv* env) { |
266 return RegisterNativesImpl(env); | 311 return RegisterNativesImpl(env); |
267 } | 312 } |
268 | 313 |
269 } // namespace android | 314 } // namespace android |
270 } // namespace enhanced_bookmarks | 315 } // namespace enhanced_bookmarks |
OLD | NEW |