Switch to EnhancedBookmarkModel from meta_accessor
[chromium-blink-merge.git] / chrome / browser / android / enhanced_bookmarks / enhanced_bookmarks_bridge.cc
blobdc3fd1cf517971d0a92ee2ba5ef423cfb8fff4af
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
3 // found in the LICENSE file.
5 #include "chrome/browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.h"
7 #include "base/android/jni_array.h"
8 #include "base/android/jni_string.h"
9 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
10 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_service.h"
11 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_service_factory.h"
12 #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h"
13 #include "chrome/browser/profiles/profile_android.h"
14 #include "chrome/common/chrome_version_info.h"
15 #include "components/bookmarks/browser/bookmark_model.h"
16 #include "components/bookmarks/browser/bookmark_utils.h"
17 #include "components/bookmarks/common/android/bookmark_type.h"
18 #include "components/enhanced_bookmarks/enhanced_bookmark_model.h"
19 #include "jni/EnhancedBookmarksBridge_jni.h"
21 using base::android::AttachCurrentThread;
22 using bookmarks::BookmarkType;
24 namespace enhanced_bookmarks {
25 namespace android {
27 EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv* env,
28 jobject obj,
29 Profile* profile) : weak_java_ref_(env, obj) {
30 profile_ = profile;
31 enhanced_bookmark_model_ =
32 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_);
33 enhanced_bookmark_model_->SetVersionSuffix(chrome::VersionInfo().OSType());
34 cluster_service_ =
35 ChromeBookmarkServerClusterServiceFactory::GetForBrowserContext(profile_);
36 cluster_service_->AddObserver(this);
39 EnhancedBookmarksBridge::~EnhancedBookmarksBridge() {
40 cluster_service_->RemoveObserver(this);
43 void EnhancedBookmarksBridge::Destroy(JNIEnv*, jobject) {
44 delete this;
47 ScopedJavaLocalRef<jstring> EnhancedBookmarksBridge::GetBookmarkDescription(
48 JNIEnv* env, jobject obj, jlong id, jint type) {
49 DCHECK(enhanced_bookmark_model_->loaded());
50 DCHECK_EQ(BookmarkType::BOOKMARK_TYPE_NORMAL, type);
52 const BookmarkNode* node = bookmarks::GetBookmarkNodeByID(
53 enhanced_bookmark_model_->bookmark_model(), static_cast<int64>(id));
55 return node ? base::android::ConvertUTF8ToJavaString(
56 env, enhanced_bookmark_model_->GetDescription(node))
57 : ScopedJavaLocalRef<jstring>();
60 void EnhancedBookmarksBridge::SetBookmarkDescription(JNIEnv* env,
61 jobject obj,
62 jlong id,
63 jint type,
64 jstring description) {
65 DCHECK(enhanced_bookmark_model_->loaded());
66 DCHECK_EQ(type, BookmarkType::BOOKMARK_TYPE_NORMAL);
68 const BookmarkNode* node = bookmarks::GetBookmarkNodeByID(
69 enhanced_bookmark_model_->bookmark_model(), static_cast<int64>(id));
71 enhanced_bookmark_model_->SetDescription(
72 node, base::android::ConvertJavaStringToUTF8(env, description));
75 void EnhancedBookmarksBridge::GetBookmarksForFilter(JNIEnv* env,
76 jobject obj,
77 jstring j_filter,
78 jobject j_result_obj) {
79 DCHECK(enhanced_bookmark_model_->loaded());
80 const std::string title =
81 base::android::ConvertJavaStringToUTF8(env, j_filter);
82 const std::vector<const BookmarkNode*> bookmarks =
83 cluster_service_->BookmarksForClusterNamed(title);
84 for (const BookmarkNode* node : bookmarks) {
85 Java_EnhancedBookmarksBridge_addToBookmarkIdList(
86 env, j_result_obj, node->id(), node->type());
90 ScopedJavaLocalRef<jobjectArray> EnhancedBookmarksBridge::GetFilters(
91 JNIEnv* env,
92 jobject obj) {
93 DCHECK(enhanced_bookmark_model_->loaded());
94 const std::vector<std::string> filters =
95 cluster_service_->GetClusters();
96 return base::android::ToJavaArrayOfStrings(env, filters);
99 void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) {
100 DCHECK(enhanced_bookmark_model_->loaded());
101 JNIEnv* env = AttachCurrentThread();
103 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env);
104 if (obj.is_null())
105 return;
107 Java_EnhancedBookmarksBridge_onFiltersChanged(env, obj.obj());
110 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) {
111 return reinterpret_cast<jlong>(new EnhancedBookmarksBridge(
112 env, obj, ProfileAndroid::FromProfileAndroid(j_profile)));
115 bool RegisterEnhancedBookmarksBridge(JNIEnv* env) {
116 return RegisterNativesImpl(env);
119 } // namespace android
120 } // namespace enhanced_bookmarks