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
{
27 EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv
* env
,
29 Profile
* profile
) : weak_java_ref_(env
, obj
) {
31 enhanced_bookmark_model_
=
32 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_
);
33 enhanced_bookmark_model_
->SetVersionSuffix(chrome::VersionInfo().OSType());
35 ChromeBookmarkServerClusterServiceFactory::GetForBrowserContext(profile_
);
36 cluster_service_
->AddObserver(this);
39 EnhancedBookmarksBridge::~EnhancedBookmarksBridge() {
40 cluster_service_
->RemoveObserver(this);
43 void EnhancedBookmarksBridge::Destroy(JNIEnv
*, jobject
) {
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
,
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
,
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(
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
);
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