Fix adding bookmarks

 Bug: 4691351
 Allows adding with a parent without specifying the account
 name and type

Change-Id: I6ab2e726ccdbce24d5a6bed250d613b7bf53e53b
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 9f6e41c..445260f 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -1280,16 +1280,21 @@
                     values.put(Bookmarks.DATE_MODIFIED, now);
                     values.put(Bookmarks.DIRTY, 1);
 
+                    boolean hasAccounts = values.containsKey(Bookmarks.ACCOUNT_TYPE)
+                            || values.containsKey(Bookmarks.ACCOUNT_NAME);
                     String accountType = values
                             .getAsString(Bookmarks.ACCOUNT_TYPE);
                     String accountName = values
                             .getAsString(Bookmarks.ACCOUNT_NAME);
                     boolean hasParent = values.containsKey(Bookmarks.PARENT);
-                    if (hasParent) {
+                    if (hasParent && hasAccounts) {
                         // Let's make sure it's valid
                         long parentId = values.getAsLong(Bookmarks.PARENT);
                         hasParent = isValidParent(
                                 accountType, accountName, parentId);
+                    } else if (hasParent && !hasAccounts) {
+                        long parentId = values.getAsLong(Bookmarks.PARENT);
+                        hasParent = setParentValues(parentId, values);
                     }
 
                     // If no parent is set default to the "Bookmarks Bar" folder
@@ -1377,12 +1382,11 @@
         }
     }
 
-    private boolean isValidParent(String accountType, String accountName,
-            long parentId) {
-        if (parentId <= 0) {
-            return false;
+    private String[] getAccountNameAndType(long id) {
+        if (id <= 0) {
+            return null;
         }
-        Uri uri = ContentUris.withAppendedId(Bookmarks.CONTENT_URI, parentId);
+        Uri uri = ContentUris.withAppendedId(Bookmarks.CONTENT_URI, id);
         Cursor c = query(uri,
                 new String[] { Bookmarks.ACCOUNT_NAME, Bookmarks.ACCOUNT_TYPE },
                 null, null, null);
@@ -1390,17 +1394,35 @@
             if (c.moveToFirst()) {
                 String parentName = c.getString(0);
                 String parentType = c.getString(1);
-                if (TextUtils.equals(accountName, parentName)
-                        && TextUtils.equals(accountType, parentType)) {
-                    return true;
-                }
+                return new String[] { parentName, parentType };
             }
-            return false;
+            return null;
         } finally {
             c.close();
         }
     }
 
+    private boolean setParentValues(long parentId, ContentValues values) {
+        String[] parent = getAccountNameAndType(parentId);
+        if (parent == null) {
+            return false;
+        }
+        values.put(Bookmarks.ACCOUNT_NAME, parent[0]);
+        values.put(Bookmarks.ACCOUNT_TYPE, parent[1]);
+        return true;
+    }
+
+    private boolean isValidParent(String accountType, String accountName,
+            long parentId) {
+        String[] parent = getAccountNameAndType(parentId);
+        if (parent != null
+                && TextUtils.equals(accountName, parent[0])
+                && TextUtils.equals(accountType, parent[1])) {
+            return true;
+        }
+        return false;
+    }
+
     private void filterSearchClient(String[] selectionArgs) {
         if (selectionArgs != null) {
             for (int i = 0; i < selectionArgs.length; i++) {