Merge "introduce tab IDs"
diff --git a/src/com/android/browser/UrlUtils.java b/src/com/android/browser/UrlUtils.java
index d6278ca..ccf9710 100644
--- a/src/com/android/browser/UrlUtils.java
+++ b/src/com/android/browser/UrlUtils.java
@@ -16,8 +16,6 @@
 
 package com.android.browser;
 
-import com.android.browser.homepages.HomeProvider;
-
 import android.net.Uri;
 import android.util.Patterns;
 import android.webkit.URLUtil;
@@ -59,7 +57,7 @@
      * @return a stripped url like "www.google.com", or the original string if it could
      *         not be stripped
      */
-    /* package */ static String stripUrl(String url) {
+    public static String stripUrl(String url) {
         if (url == null) return null;
         Matcher m = STRIP_URL_PATTERN.matcher(url);
         if (m.matches() && m.groupCount() == 3) {
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 7d94c7a..ebf774e 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -21,6 +21,7 @@
 import com.android.browser.BookmarkUtils;
 import com.android.browser.BrowserBookmarksPage;
 import com.android.browser.R;
+import com.android.browser.UrlUtils;
 import com.android.browser.widget.BookmarkThumbnailWidgetProvider;
 import com.android.common.content.SyncStateContentProviderHelper;
 
@@ -86,6 +87,8 @@
     static final String TABLE_HISTORY_JOIN_IMAGES = "history LEFT OUTER JOIN images " +
             "ON history.url = images." + Images.URL;
 
+    static final String VIEW_ACCOUNTS = "v_accounts";
+
     static final String FORMAT_COMBINED_JOIN_SUBQUERY_JOIN_IMAGES =
             "history LEFT OUTER JOIN (%s) bookmarks " +
             "ON history.url = bookmarks.url LEFT OUTER JOIN images " +
@@ -203,6 +206,7 @@
         map = ACCOUNTS_PROJECTION_MAP;
         map.put(Accounts.ACCOUNT_TYPE, Accounts.ACCOUNT_TYPE);
         map.put(Accounts.ACCOUNT_NAME, Accounts.ACCOUNT_NAME);
+        map.put(Accounts.ROOT_ID, Accounts.ROOT_ID);
 
         // Bookmarks
         map = BOOKMARKS_PROJECTION_MAP;
@@ -328,7 +332,7 @@
 
     final class DatabaseHelper extends SQLiteOpenHelper {
         static final String DATABASE_NAME = "browser2.db";
-        static final int DATABASE_VERSION = 26;
+        static final int DATABASE_VERSION = 27;
         public DatabaseHelper(Context context) {
             super(context, DATABASE_NAME, null, DATABASE_VERSION);
         }
@@ -390,15 +394,36 @@
                     Settings.VALUE + " TEXT NOT NULL" +
                     ");");
 
+            createAccountsView(db);
+
             mSyncHelper.createDatabase(db);
 
             createDefaultBookmarks(db);
         }
 
+        void createAccountsView(SQLiteDatabase db) {
+            db.execSQL("CREATE VIEW IF NOT EXISTS v_accounts AS "
+                    + "SELECT NULL AS " + Accounts.ACCOUNT_NAME
+                    + ", NULL AS " + Accounts.ACCOUNT_TYPE
+                    + ", " + FIXED_ID_ROOT + " AS " + Accounts.ROOT_ID
+                    + " UNION ALL SELECT " + Accounts.ACCOUNT_NAME
+                    + ", " + Accounts.ACCOUNT_TYPE + ", "
+                    + Bookmarks._ID + " AS " + Accounts.ROOT_ID
+                    + " FROM " + TABLE_BOOKMARKS + " WHERE "
+                    + ChromeSyncColumns.SERVER_UNIQUE + " = \""
+                    + ChromeSyncColumns.FOLDER_NAME_BOOKMARKS_BAR + "\" AND "
+                    + Bookmarks.IS_DELETED + " = 0");
+        }
+
         @Override
         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
             // TODO write upgrade logic
-            db.execSQL("DROP VIEW IF EXISTS combined");
+            if (oldVersion < 27) {
+                createAccountsView(db);
+            }
+            if (oldVersion < 26) {
+                db.execSQL("DROP VIEW IF EXISTS combined");
+            }
             if (oldVersion < 25) {
                 db.execSQL("DROP TABLE IF EXISTS " + TABLE_BOOKMARKS);
                 db.execSQL("DROP TABLE IF EXISTS " + TABLE_HISTORY);
@@ -650,10 +675,8 @@
         String limit = uri.getQueryParameter(BrowserContract.PARAM_LIMIT);
         switch (match) {
             case ACCOUNTS: {
-                qb.setTables(TABLE_BOOKMARKS);
+                qb.setTables(VIEW_ACCOUNTS);
                 qb.setProjectionMap(ACCOUNTS_PROJECTION_MAP);
-                qb.setDistinct(true);
-                qb.appendWhere(Bookmarks.IS_DELETED + "=0");
                 break;
             }
 
@@ -1724,7 +1747,7 @@
             case SUGGEST_COLUMN_INTENT_DATA_ID:
             case SUGGEST_COLUMN_TEXT_2_TEXT_ID:
             case SUGGEST_COLUMN_TEXT_2_URL_ID:
-                return mSource.getString(URL_INDEX);
+                return UrlUtils.stripUrl(mSource.getString(URL_INDEX));
             case SUGGEST_COLUMN_TEXT_1_ID:
                 return mSource.getString(TITLE_INDEX);
             case SUGGEST_COLUMN_ICON_1_ID: