Prevent PARENT account from not matching inserted values

 Bug: 3481259
 Adds a check in insert to make sure that the PARENT folder has the
 same account_* values as the bookmark being inserted.

Change-Id: I5e42e94fd4eac39eb73047e4246d2102d8e55d82
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 3033db4..94b1651 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -1142,12 +1142,20 @@
                     values.put(Bookmarks.DATE_MODIFIED, now);
                     values.put(Bookmarks.DIRTY, 1);
 
+                    String accountType = values
+                            .getAsString(Bookmarks.ACCOUNT_TYPE);
+                    String accountName = values
+                            .getAsString(Bookmarks.ACCOUNT_NAME);
+                    boolean hasParent = values.containsKey(Bookmarks.PARENT);
+                    if (hasParent) {
+                        // Let's make sure it's valid
+                        long parentId = values.getAsLong(Bookmarks.PARENT);
+                        hasParent = isValidParent(
+                                accountType, accountName, parentId);
+                    }
+
                     // If no parent is set default to the "Bookmarks Bar" folder
-                    if (!values.containsKey(Bookmarks.PARENT)) {
-                        String accountType = values
-                                .getAsString(Bookmarks.ACCOUNT_TYPE);
-                        String accountName = values
-                                .getAsString(Bookmarks.ACCOUNT_NAME);
+                    if (!hasParent) {
                         values.put(Bookmarks.PARENT,
                                 queryDefaultFolderId(accountName, accountType));
                     }
@@ -1226,6 +1234,27 @@
         }
     }
 
+    private boolean isValidParent(String accountType, String accountName,
+            long parentId) {
+        Uri uri = Bookmarks.buildFolderUri(parentId);
+        Cursor c = query(uri,
+                new String[] { Bookmarks.ACCOUNT_NAME, Bookmarks.ACCOUNT_TYPE },
+                null, null, null);
+        try {
+            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 false;
+        } finally {
+            c.close();
+        }
+    }
+
     private void filterSearchClient(String[] selectionArgs) {
         if (selectionArgs != null) {
             for (int i = 0; i < selectionArgs.length; i++) {