| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.h" |
| |
| #include "base/android/jni_array.h" |
| #include "base/android/jni_string.h" |
| #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_service.h" |
| #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_service_factory.h" |
| #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h" |
| #include "chrome/browser/profiles/profile_android.h" |
| #include "chrome/common/chrome_version_info.h" |
| #include "components/bookmarks/browser/bookmark_model.h" |
| #include "components/bookmarks/browser/bookmark_utils.h" |
| #include "components/bookmarks/common/android/bookmark_type.h" |
| #include "components/enhanced_bookmarks/enhanced_bookmark_model.h" |
| #include "components/enhanced_bookmarks/metadata_accessor.h" |
| #include "jni/EnhancedBookmarksBridge_jni.h" |
| |
| using base::android::AttachCurrentThread; |
| using bookmarks::BookmarkType; |
| |
| namespace enhanced_bookmarks { |
| namespace android { |
| |
| EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv* env, |
| jobject obj, |
| Profile* profile) : weak_java_ref_(env, obj) { |
| profile_ = profile; |
| bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_); |
| EnhancedBookmarkModelFactory::GetForBrowserContext(profile_)-> |
| SetVersionSuffix(chrome::VersionInfo().OSType()); |
| cluster_service_ = |
| ChromeBookmarkServerClusterServiceFactory::GetForBrowserContext(profile_); |
| cluster_service_->AddObserver(this); |
| } |
| |
| EnhancedBookmarksBridge::~EnhancedBookmarksBridge() { |
| cluster_service_->RemoveObserver(this); |
| } |
| |
| void EnhancedBookmarksBridge::Destroy(JNIEnv*, jobject) { |
| delete this; |
| } |
| |
| ScopedJavaLocalRef<jstring> EnhancedBookmarksBridge::GetBookmarkDescription( |
| JNIEnv* env, jobject obj, jlong id, jint type) { |
| DCHECK(bookmark_model_->loaded()); |
| DCHECK_EQ(BookmarkType::BOOKMARK_TYPE_NORMAL, type); |
| |
| const BookmarkNode* node = bookmarks::GetBookmarkNodeByID( |
| bookmark_model_, static_cast<int64>(id)); |
| |
| return node ? |
| base::android::ConvertUTF8ToJavaString( |
| env, enhanced_bookmarks::DescriptionFromBookmark(node)) : |
| ScopedJavaLocalRef<jstring>(); |
| } |
| |
| void EnhancedBookmarksBridge::SetBookmarkDescription(JNIEnv* env, |
| jobject obj, |
| jlong id, |
| jint type, |
| jstring description) { |
| DCHECK(bookmark_model_->loaded()); |
| DCHECK_EQ(type, BookmarkType::BOOKMARK_TYPE_NORMAL); |
| |
| const BookmarkNode* node = bookmarks::GetBookmarkNodeByID( |
| bookmark_model_, static_cast<int64>(id)); |
| |
| enhanced_bookmarks::SetDescriptionForBookmark( |
| bookmark_model_, node, |
| base::android::ConvertJavaStringToUTF8(env, description)); |
| } |
| |
| void EnhancedBookmarksBridge::GetBookmarksForFilter(JNIEnv* env, |
| jobject obj, |
| jstring j_filter, |
| jobject j_result_obj) { |
| DCHECK(bookmark_model_->loaded()); |
| const std::string title = |
| base::android::ConvertJavaStringToUTF8(env, j_filter); |
| const std::vector<const BookmarkNode*> bookmarks = |
| cluster_service_->BookmarksForClusterNamed(title); |
| for (const BookmarkNode* node : bookmarks) { |
| Java_EnhancedBookmarksBridge_addToBookmarkIdList( |
| env, j_result_obj, node->id(), node->type()); |
| } |
| } |
| |
| ScopedJavaLocalRef<jobjectArray> EnhancedBookmarksBridge::GetFilters( |
| JNIEnv* env, |
| jobject obj) { |
| DCHECK(bookmark_model_->loaded()); |
| const std::vector<std::string> filters = |
| cluster_service_->GetClusters(); |
| return base::android::ToJavaArrayOfStrings(env, filters); |
| } |
| |
| void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) { |
| DCHECK(bookmark_model_->loaded()); |
| JNIEnv* env = AttachCurrentThread(); |
| |
| ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
| if (obj.is_null()) |
| return; |
| |
| Java_EnhancedBookmarksBridge_onFiltersChanged(env, obj.obj()); |
| } |
| |
| static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) { |
| return reinterpret_cast<jlong>(new EnhancedBookmarksBridge( |
| env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); |
| } |
| |
| bool RegisterEnhancedBookmarksBridge(JNIEnv* env) { |
| return RegisterNativesImpl(env); |
| } |
| |
| } // namespace android |
| } // namespace enhanced_bookmarks |