Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1123)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/ChromeBrowserProviderClient.java

Issue 10912172: [Android] Upstream ChromeBrowserProvider, the Android port ContentProvider implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: temporarily removing tests until we can compile and run them (soon) Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeBrowserProviderClient.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBrowserProviderClient.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBrowserProviderClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..d108f1f603981bcd0246416aa98095ee67346b60
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBrowserProviderClient.java
@@ -0,0 +1,174 @@
+// Copyright (c) 2012 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.
+
+package org.chromium.chrome.browser;
+
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.util.Log;
+
+import org.chromium.chrome.browser.ChromeBrowserProvider.BookmarkNode;
+
+import java.io.Serializable;
+
+/**
+ * Exposes the custom API methods for ChromeBrowserProvider.
+ */
+public class ChromeBrowserProviderClient {
+ private static final String TAG = "ChromeBrowserProviderClient";
+
+ // Returned by some of the methods in this class.
+ public static final long INVALID_BOOKMARK_ID = ChromeBrowserProvider.INVALID_BOOKMARK_ID;
+
+ // Flags used with getBookmarkNode.
+ /** Retrieve the node corresponding to the id provided in getBookmarkNode. */
+ public static final int GET_NODE = 0x00000000;
+
+ /** Retrieve the parent of the node requested in getBookmarkNode. */
+ public static final int GET_PARENT = 0x00000001;
+
+ /** Retrieve the immediate children of the node requested in getBookmarkNode. */
+ public static final int GET_CHILDREN = 0x00000002;
+
+ /** Retrieve the favicon or touch icon, if any, in all the nodes returned by getBookmarkNode. */
+ public static final int GET_FAVICONS = 0x00000004;
+
+ /** Retrieve the thumbnail, if any, in all the nodes returned by getBookmarkNode. */
+ public static final int GET_THUMBNAILS = 0x00000008;
+
+ /**
+ * Verifies if a bookmark node given by its ID exists in the bookmark model.
+ *
+ * @return True if the provided bookmark node exists in the bookmark model.
+ */
+ public static boolean bookmarkNodeExists(Context context, long nodeId) {
+ Boolean result = chromeBrowserProviderCall(Boolean.class,
+ ChromeBrowserProvider.CLIENT_API_BOOKMARK_NODE_EXISTS,
+ context, argsToBundle(nodeId));
+ return result != null ? result.booleanValue() : false;
+ }
+
+ /**
+ * Creates a bookmark folder or returns its ID if it already exists.
+ * This method does not update the last modified folder in the UI.
+ *
+ * @param title Title of the new or existing bookmark folder.
+ * @param parentId ID of the parent folder. Must be in the Mobile Bookmarks branch.
+ * @return The ID of the new created folder (or INVALID_BOOKMARK_ID on error).
+ * Will return the ID of any existing folder in the same parent with the same name.
+ */
+ public static long createBookmarksFolderOnce(Context context, String title, long parentId) {
+ Long id = chromeBrowserProviderCall(Long.class,
+ ChromeBrowserProvider.CLIENT_API_CREATE_BOOKMARKS_FOLDER_ONCE, context,
+ argsToBundle(title, parentId));
+ return id != null ? id.longValue() : INVALID_BOOKMARK_ID;
+ }
+
+ /**
+ * Retrieves the full bookmark folder hierarchy returning its root node.
+ *
+ * @return The root node of the bookmark folder hierarchy with all its descendant folders
+ * populated or null in case of error. Note that only folders are returned.
+ */
+ public static BookmarkNode getBookmarkFolderHierarchy(Context context) {
+ return chromeBrowserProviderCall(BookmarkNode.class,
+ ChromeBrowserProvider.CLIENT_API_GET_BOOKMARK_FOLDER_HIERARCHY, context,
+ argsToBundle());
+ }
+
+ /**
+ * Retrieves a bookmark node given its ID or null if no such node exists.
+ * The parent and immediate child nodes can be also retrieved by enabling the getParent
+ * and getChildren flags. No deeper child nodes can be retrieved with this method.
+ *
+ * @param nodeId The ID of the bookmark node to be retrieved.
+ * @param flags Combination of constants telling what information of the node is required.
+ * @return The bookmark node corresponding to the provided ID.
+ */
+ public static BookmarkNode getBookmarkNode(Context context, long nodeId, int flags) {
+ return chromeBrowserProviderCall(BookmarkNode.class,
+ ChromeBrowserProvider.CLIENT_API_GET_BOOKMARK_NODE, context,
+ argsToBundle(nodeId,
+ (flags & GET_PARENT) != 0,
+ (flags & GET_CHILDREN) != 0,
+ (flags & GET_FAVICONS) != 0,
+ (flags & GET_THUMBNAILS) != 0));
+ }
+
+ /**
+ * Retrieves the current default folder for UI based bookmark operations.
+ * The result depends on where the last successful bookmark operation was performed by the user.
+ *
+ * @return The default bookmark folder for new bookmarks or null in case of error.
+ * No parent or children are populated in the returned node.
+ */
+ public static BookmarkNode getDefaultBookmarkFolder(Context context) {
+ return chromeBrowserProviderCall(BookmarkNode.class,
+ ChromeBrowserProvider.CLIENT_API_GET_DEFAULT_BOOKMARK_FOLDER, context,
+ argsToBundle());
+ }
+
+ /**
+ * Returns the ID of the Mobile Bookmarks folder.
+ *
+ * @return The ID of the Mobile Bookmarks folder or INVALID_BOOKMARK_ID in case of error.
+ */
+ public static long getMobileBookmarksFolderId(Context context) {
+ Long id = chromeBrowserProviderCall(Long.class,
+ ChromeBrowserProvider.CLIENT_API_GET_MOBILE_BOOKMARKS_FOLDER_ID, context,
+ argsToBundle());
+ return id != null ? id.longValue() : INVALID_BOOKMARK_ID;
+ }
+
+ /**
+ * Checks if a bookmark node is in the Mobile Bookmarks folder branch.
+ *
+ * @return True if the ID belongs to a node in the Mobile Bookmarks folder branch.
+ */
+ public static boolean isBookmarkInMobileBookmarksBranch(Context context, long nodeId) {
+ Boolean result = chromeBrowserProviderCall(Boolean.class,
+ ChromeBrowserProvider.CLIENT_API_IS_BOOKMARK_IN_MOBILE_BOOKMARKS_BRANCH, context,
+ argsToBundle(nodeId));
+ return result != null ? result.booleanValue() : false;
+ }
+
+ // --------------------- End of the client API --------------------- //
+
+ private static Uri getPrivateProviderUri(Context context) {
+ // The Bookmarks Uri uses the private provider authority.
+ return ChromeBrowserProvider.getBookmarksUri(context);
+ }
+
+
+ private static Bundle argsToBundle(Object ... args) {
+ Bundle methodArgs = new Bundle();
+ for (int i = 0; i < args.length; ++i) {
+ Class argClass = args[i].getClass();
+ if (Parcelable.class.isAssignableFrom(argClass)) {
+ methodArgs.putParcelable(ChromeBrowserProvider.argKey(i), (Parcelable) args[i]);
+ } else if (Serializable.class.isAssignableFrom(argClass)) {
+ methodArgs.putSerializable(ChromeBrowserProvider.argKey(i), (Serializable) args[i]);
+ } else {
+ Log.e(TAG, "Argument implements neither Parcelable nor Serializable.");
+ return null;
+ }
+ }
+ return methodArgs;
+ }
+
+ private static <T extends Object> T chromeBrowserProviderCall(Class returnType, String name,
+ Context context, Bundle args) {
+ Bundle result = context.getContentResolver().call(getPrivateProviderUri(context),
+ name, null, args);
+ if (result == null)
+ return null;
+ if (Parcelable.class.isAssignableFrom(returnType)) {
+ return (T) result.getParcelable(ChromeBrowserProvider.CLIENT_API_RESULT_KEY);
+ } else {
+ return (T) result.get(ChromeBrowserProvider.CLIENT_API_RESULT_KEY);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698