| 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 |