OLD | NEW |
| (Empty) |
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. | |
4 | |
5 #include "chrome/browser/enhanced_bookmarks/android/enhanced_bookmarks_bridge.h" | |
6 | |
7 #include "base/android/jni_array.h" | |
8 #include "base/android/jni_string.h" | |
9 #include "base/prefs/pref_service.h" | |
10 #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h" | |
11 #include "chrome/browser/profiles/profile_android.h" | |
12 #include "chrome/common/chrome_version_info.h" | |
13 #include "chrome/common/pref_names.h" | |
14 #include "components/bookmarks/browser/bookmark_utils.h" | |
15 #include "components/bookmarks/common/android/bookmark_id.h" | |
16 #include "components/bookmarks/common/android/bookmark_type.h" | |
17 #include "content/public/browser/browser_thread.h" | |
18 #include "content/public/browser/web_contents.h" | |
19 #include "jni/EnhancedBookmarksBridge_jni.h" | |
20 #include "ui/gfx/android/java_bitmap.h" | |
21 | |
22 using base::android::AttachCurrentThread; | |
23 using base::android::ScopedJavaGlobalRef; | |
24 using bookmarks::android::JavaBookmarkIdCreateBookmarkId; | |
25 using bookmarks::android::JavaBookmarkIdGetId; | |
26 using bookmarks::android::JavaBookmarkIdGetType; | |
27 using bookmarks::BookmarkNode; | |
28 using bookmarks::BookmarkType; | |
29 using content::WebContents; | |
30 using content::BrowserThread; | |
31 | |
32 namespace enhanced_bookmarks { | |
33 namespace android { | |
34 | |
35 EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv* env, | |
36 jobject obj, | |
37 Profile* profile) : weak_java_ref_(env, obj) { | |
38 profile_ = profile; | |
39 enhanced_bookmark_model_ = | |
40 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_); | |
41 enhanced_bookmark_model_->SetVersionSuffix(chrome::VersionInfo().OSType()); | |
42 } | |
43 | |
44 void EnhancedBookmarksBridge::Destroy(JNIEnv*, jobject) { | |
45 delete this; | |
46 } | |
47 | |
48 ScopedJavaLocalRef<jobject> EnhancedBookmarksBridge::AddFolder(JNIEnv* env, | |
49 jobject obj, | |
50 jobject j_parent_id_obj, | |
51 jint index, | |
52 jstring j_title) { | |
53 DCHECK(enhanced_bookmark_model_->loaded()); | |
54 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); | |
55 const BookmarkNode* parent = bookmarks::GetBookmarkNodeByID( | |
56 enhanced_bookmark_model_->bookmark_model(), | |
57 static_cast<int64>(bookmark_id)); | |
58 const BookmarkNode* new_node = enhanced_bookmark_model_->AddFolder( | |
59 parent, index, base::android::ConvertJavaStringToUTF16(env, j_title)); | |
60 if (!new_node) { | |
61 NOTREACHED(); | |
62 return ScopedJavaLocalRef<jobject>(); | |
63 } | |
64 ScopedJavaLocalRef<jobject> new_java_obj = JavaBookmarkIdCreateBookmarkId( | |
65 env, new_node->id(), BookmarkType::BOOKMARK_TYPE_NORMAL); | |
66 return new_java_obj; | |
67 } | |
68 | |
69 void EnhancedBookmarksBridge::MoveBookmark(JNIEnv* env, | |
70 jobject obj, | |
71 jobject j_bookmark_id_obj, | |
72 jobject j_parent_id_obj) { | |
73 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
74 DCHECK(enhanced_bookmark_model_->loaded()); | |
75 | |
76 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj); | |
77 const BookmarkNode* node = bookmarks::GetBookmarkNodeByID( | |
78 enhanced_bookmark_model_->bookmark_model(), | |
79 static_cast<int64>(bookmark_id)); | |
80 if (!IsEditable(node)) { | |
81 NOTREACHED(); | |
82 return; | |
83 } | |
84 bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); | |
85 const BookmarkNode* new_parent_node = bookmarks::GetBookmarkNodeByID( | |
86 enhanced_bookmark_model_->bookmark_model(), | |
87 static_cast<int64>(bookmark_id)); | |
88 enhanced_bookmark_model_->Move(node, new_parent_node, | |
89 new_parent_node->child_count()); | |
90 } | |
91 | |
92 ScopedJavaLocalRef<jobject> EnhancedBookmarksBridge::AddBookmark( | |
93 JNIEnv* env, | |
94 jobject obj, | |
95 jobject j_parent_id_obj, | |
96 jint index, | |
97 jstring j_title, | |
98 jstring j_url) { | |
99 DCHECK(enhanced_bookmark_model_->loaded()); | |
100 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); | |
101 const BookmarkNode* parent = bookmarks::GetBookmarkNodeByID( | |
102 enhanced_bookmark_model_->bookmark_model(), | |
103 static_cast<int64>(bookmark_id)); | |
104 | |
105 const BookmarkNode* new_node = enhanced_bookmark_model_->AddURL( | |
106 parent, | |
107 index, | |
108 base::android::ConvertJavaStringToUTF16(env, j_title), | |
109 GURL(base::android::ConvertJavaStringToUTF16(env, j_url)), | |
110 base::Time::Now()); | |
111 if (!new_node) { | |
112 NOTREACHED(); | |
113 return ScopedJavaLocalRef<jobject>(); | |
114 } | |
115 ScopedJavaLocalRef<jobject> new_java_obj = JavaBookmarkIdCreateBookmarkId( | |
116 env, new_node->id(), BookmarkType::BOOKMARK_TYPE_NORMAL); | |
117 return new_java_obj; | |
118 } | |
119 | |
120 bool EnhancedBookmarksBridge::IsEditable(const BookmarkNode* node) const { | |
121 if (!node || (node->type() != BookmarkNode::FOLDER && | |
122 node->type() != BookmarkNode::URL)) { | |
123 return false; | |
124 } | |
125 return profile_->GetPrefs()->GetBoolean( | |
126 bookmarks::prefs::kEditBookmarksEnabled); | |
127 } | |
128 | |
129 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) { | |
130 return reinterpret_cast<jlong>(new EnhancedBookmarksBridge( | |
131 env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); | |
132 } | |
133 | |
134 bool RegisterEnhancedBookmarksBridge(JNIEnv* env) { | |
135 return RegisterNativesImpl(env); | |
136 } | |
137 | |
138 } // namespace android | |
139 } // namespace enhanced_bookmarks | |
OLD | NEW |