Bug 708149 - Replace folder column with type in bookmarks table (r=rnewman)

This commit is contained in:
Lucas Rocha 2012-03-20 11:44:32 +00:00
parent aa487cc2e8
commit 4c1ff301e5
10 changed files with 95 additions and 43 deletions

View File

@ -497,7 +497,8 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
Cursor cursor = (Cursor) selectedItem;
// Don't show the context menu for folders
if (!(list == findViewById(R.id.bookmarks_list) && cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks.IS_FOLDER)) == 1)) {
if (!(list == findViewById(R.id.bookmarks_list) &&
cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks.TYPE)) == Bookmarks.TYPE_FOLDER)) {
String keyword = null;
int keywordCol = cursor.getColumnIndex(URLColumns.KEYWORD);
if (keywordCol != -1)

View File

@ -253,7 +253,7 @@ public class AwesomeBarTabs extends TabHost {
Cursor c = getCursor();
if (c.moveToPosition(position) &&
c.getInt(c.getColumnIndexOrThrow(Bookmarks.IS_FOLDER)) == 1)
c.getInt(c.getColumnIndexOrThrow(Bookmarks.TYPE)) == Bookmarks.TYPE_FOLDER)
return VIEW_TYPE_FOLDER;
// Default to retuning normal item type
@ -872,8 +872,8 @@ public class AwesomeBarTabs extends TabHost {
// The header view takes up a spot in the list
cursor.moveToPosition(position - 1);
int isFolder = cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks.IS_FOLDER));
if (isFolder == 1) {
int type = cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks.TYPE));
if (type == Bookmarks.TYPE_FOLDER) {
// If we're clicking on a folder, update mBookmarksAdapter to move to that folder
int folderId = cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks._ID));
String folderTitle = mBookmarksAdapter.getFolderTitle(position - 1);

View File

@ -531,7 +531,7 @@ public class ProfileMigrator {
parent = mRerootMap.get(parent);
}
values.put(Bookmarks.PARENT, parent);
values.put(Bookmarks.IS_FOLDER, (folder ? 1 : 0));
values.put(Bookmarks.TYPE, (folder ? Bookmarks.TYPE_FOLDER : Bookmarks.TYPE_BOOKMARK));
Cursor cursor = null;
ContentProviderOperation.Builder builder = null;

View File

@ -108,6 +108,12 @@ public class BrowserContract {
public static final String TOOLBAR_FOLDER_GUID = "toolbar";
public static final String UNFILED_FOLDER_GUID = "unfiled";
public static final int TYPE_FOLDER = 0;
public static final int TYPE_BOOKMARK = 1;
public static final int TYPE_SEPARATOR = 2;
public static final int TYPE_LIVEMARK = 3;
public static final int TYPE_QUERY = 4;
public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "bookmarks");
public static final Uri PARENTS_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "parents");
// Hacky API for bulk-updating positions. Bug 728783.
@ -115,7 +121,7 @@ public class BrowserContract {
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/bookmark";
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/bookmark";
public static final String IS_FOLDER = "folder";
public static final String TYPE = "type";
public static final String PARENT = "parent";
public static final String POSITION = "position";
public static final String TAGS = "tags";

View File

@ -55,7 +55,7 @@ public class BrowserProvider extends ContentProvider {
static final String DATABASE_NAME = "browser.db";
static final int DATABASE_VERSION = 3;
static final int DATABASE_VERSION = 4;
// Maximum age of deleted records to be cleaned up (20 days in ms)
static final long MAX_AGE_OF_DELETED_RECORDS = 86400000 * 20;
@ -90,8 +90,8 @@ public class BrowserProvider extends ContentProvider {
// Schema matches
static final int SCHEMA = 400;
static final String DEFAULT_BOOKMARKS_SORT_ORDER = Bookmarks.IS_FOLDER
+ " DESC, " + Bookmarks.POSITION + " ASC, " + Bookmarks._ID
static final String DEFAULT_BOOKMARKS_SORT_ORDER = Bookmarks.TYPE
+ " ASC, " + Bookmarks.POSITION + " ASC, " + Bookmarks._ID
+ " ASC";
static final String DEFAULT_HISTORY_SORT_ORDER = History.DATE_LAST_VISITED + " DESC";
@ -128,7 +128,7 @@ public class BrowserProvider extends ContentProvider {
map.put(Bookmarks.URL, Bookmarks.URL);
map.put(Bookmarks.FAVICON, Bookmarks.FAVICON);
map.put(Bookmarks.THUMBNAIL, Bookmarks.THUMBNAIL);
map.put(Bookmarks.IS_FOLDER, Bookmarks.IS_FOLDER);
map.put(Bookmarks.TYPE, Bookmarks.TYPE);
map.put(Bookmarks.PARENT, Bookmarks.PARENT);
map.put(Bookmarks.POSITION, Bookmarks.POSITION);
map.put(Bookmarks.TAGS, Bookmarks.TAGS);
@ -188,6 +188,19 @@ public class BrowserProvider extends ContentProvider {
public void updateForNewTable(ContentValues bookmark);
}
private class BookmarkMigrator3to4 implements BookmarkMigrator {
public void updateForNewTable(ContentValues bookmark) {
Integer isFolder = bookmark.getAsInteger("folder");
if (isFolder == null || isFolder != 1) {
bookmark.put(Bookmarks.TYPE, Bookmarks.TYPE_BOOKMARK);
} else {
bookmark.put(Bookmarks.TYPE, Bookmarks.TYPE_FOLDER);
}
bookmark.remove("folder");
}
}
static final String qualifyColumn(String table, String column) {
return table + "." + column;
}
@ -239,7 +252,7 @@ public class BrowserProvider extends ContentProvider {
Bookmarks._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
Bookmarks.TITLE + " TEXT," +
Bookmarks.URL + " TEXT," +
Bookmarks.IS_FOLDER + " INTEGER NOT NULL DEFAULT 0," +
Bookmarks.TYPE + " INTEGER NOT NULL DEFAULT " + Bookmarks.TYPE_BOOKMARK + "," +
Bookmarks.PARENT + " INTEGER," +
Bookmarks.POSITION + " INTEGER NOT NULL," +
Bookmarks.KEYWORD + " TEXT," +
@ -360,7 +373,7 @@ public class BrowserProvider extends ContentProvider {
String guid, int titleId, int position) {
ContentValues values = new ContentValues();
values.put(Bookmarks.GUID, guid);
values.put(Bookmarks.IS_FOLDER, 1);
values.put(Bookmarks.TYPE, Bookmarks.TYPE_FOLDER);
values.put(Bookmarks.POSITION, position);
if (guid.equals(Bookmarks.PLACES_FOLDER_GUID))
@ -461,8 +474,8 @@ public class BrowserProvider extends ContentProvider {
debug("Migrating bookmark: " + values.getAsString(Bookmarks.TITLE));
db.insert(TABLE_BOOKMARKS, Bookmarks.URL, values);
Integer isFolder = values.getAsInteger(Bookmarks.IS_FOLDER);
if (isFolder != null && isFolder == 1)
Integer type = values.getAsInteger(Bookmarks.TYPE);
if (type != null && type == Bookmarks.TYPE_FOLDER)
subFolders.add(values.getAsInteger(Bookmarks._ID));
}
} finally {
@ -541,6 +554,10 @@ public class BrowserProvider extends ContentProvider {
createHistoryWithImagesView(db);
}
private void upgradeDatabaseFrom3to4(SQLiteDatabase db) {
migrateBookmarksTable(db, new BookmarkMigrator3to4());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
debug("Upgrading browser.db: " + db.getPath() + " from " +
@ -559,6 +576,10 @@ public class BrowserProvider extends ContentProvider {
case 3:
upgradeDatabaseFrom2to3(db);
break;
case 4:
upgradeDatabaseFrom3to4(db);
break;
}
}
@ -950,10 +971,10 @@ public class BrowserProvider extends ContentProvider {
String url = values.getAsString(Bookmarks.URL);
ContentValues imageValues = extractImageValues(values, url);
Integer isFolder = values.getAsInteger(Bookmarks.IS_FOLDER);
Integer type = values.getAsInteger(Bookmarks.TYPE);
if ((isFolder == null || isFolder != 1) && imageValues != null
&& !TextUtils.isEmpty(url)) {
if ((type == null || type != Bookmarks.TYPE_FOLDER)
&& imageValues != null && !TextUtils.isEmpty(url)) {
debug("Inserting bookmark image for URL: " + url);
updateOrInsertImage(uri, imageValues, Images.URL + " = ?",
new String[] { url });

View File

@ -95,7 +95,7 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface {
Bookmarks.GUID,
Bookmarks.URL,
Bookmarks.TITLE,
Bookmarks.IS_FOLDER,
Bookmarks.TYPE,
Bookmarks.PARENT,
Bookmarks.FAVICON };
@ -366,10 +366,15 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface {
Bookmarks.UNFILED_FOLDER_GUID },
null);
} else {
// Right now, we only support showing folder and bookmark type of
// entries. We should add support for other types though (bug 737024)
c = cr.query(mBookmarksUriWithProfile,
DEFAULT_BOOKMARK_COLUMNS,
Bookmarks.PARENT + " = ? ",
new String[] { String.valueOf(folderId) },
Bookmarks.PARENT + " = ? AND " +
"(" + Bookmarks.TYPE + " = ? OR " + Bookmarks.TYPE + " = ?)",
new String[] { String.valueOf(folderId),
String.valueOf(Bookmarks.TYPE_BOOKMARK),
String.valueOf(Bookmarks.TYPE_FOLDER) },
null);
}

View File

@ -26,7 +26,8 @@ public class AndroidBrowserBookmarksDataAccessor extends AndroidBrowserRepositor
/*
* Fragments of SQL to make our lives easier.
*/
private static final String BOOKMARK_IS_FOLDER = BrowserContract.Bookmarks.IS_FOLDER + " = 1";
private static final String BOOKMARK_IS_FOLDER = BrowserContract.Bookmarks.TYPE + " = " +
BrowserContract.Bookmarks.TYPE_FOLDER;
private static final String GUID_NOT_TAGS_OR_PLACES = BrowserContract.SyncColumns.GUID + " NOT IN ('" +
BrowserContract.Bookmarks.TAGS_FOLDER_GUID + "', '" +
BrowserContract.Bookmarks.PLACES_FOLDER_GUID + "')";
@ -206,7 +207,9 @@ public class AndroidBrowserBookmarksDataAccessor extends AndroidBrowserRepositor
// Only bookmark and folder types should make it this far.
// Other types should be filtered out and dropped.
cv.put(BrowserContract.Bookmarks.IS_FOLDER, rec.type.equalsIgnoreCase(TYPE_FOLDER) ? 1 : 0);
cv.put(BrowserContract.Bookmarks.TYPE, rec.type.equalsIgnoreCase(TYPE_FOLDER) ?
BrowserContract.Bookmarks.TYPE_FOLDER :
BrowserContract.Bookmarks.TYPE_BOOKMARK);
// Note that we don't set the modified timestamp: we allow the
// content provider to do that for us.

View File

@ -197,7 +197,8 @@ public class AndroidBrowserBookmarksRepositorySession extends AndroidBrowserRepo
}
private boolean rowIsFolder(Cursor cur) {
return RepoUtils.getLongFromCursor(cur, BrowserContract.Bookmarks.IS_FOLDER) == 1;
long type = RepoUtils.getLongFromCursor(cur, BrowserContract.Bookmarks.TYPE);
return type == BrowserContract.Bookmarks.TYPE_FOLDER;
}
private String getGUIDForID(long androidID) {
@ -837,7 +838,8 @@ public class AndroidBrowserBookmarksRepositorySession extends AndroidBrowserRepo
return logBookmark(rec);
}
boolean isFolder = RepoUtils.getIntFromCursor(cur, BrowserContract.Bookmarks.IS_FOLDER) == 1;
long type = RepoUtils.getIntFromCursor(cur, BrowserContract.Bookmarks.TYPE);
boolean isFolder = type == BrowserContract.Bookmarks.TYPE_FOLDER;
rec.title = RepoUtils.getStringFromCursor(cur, BrowserContract.Bookmarks.TITLE);
rec.bookmarkURI = RepoUtils.getStringFromCursor(cur, BrowserContract.Bookmarks.URL);

View File

@ -70,7 +70,7 @@ public class BrowserContractHelpers extends BrowserContract {
SyncColumns.IS_DELETED,
Bookmarks.TITLE,
Bookmarks.URL,
Bookmarks.IS_FOLDER,
Bookmarks.TYPE,
Bookmarks.PARENT,
Bookmarks.POSITION,
Bookmarks.TAGS,

View File

@ -38,7 +38,7 @@ public class testBrowserProvider extends ContentProviderTest {
private String mBookmarksFaviconCol;
private String mBookmarksThumbnailCol;
private String mBookmarksParentCol;
private String mBookmarksIsFolderCol;
private String mBookmarksTypeCol;
private String mBookmarksPositionCol;
private String mBookmarksTagsCol;
private String mBookmarksDescriptionCol;
@ -47,6 +47,8 @@ public class testBrowserProvider extends ContentProviderTest {
private String mBookmarksIsDeletedCol;
private String mBookmarksDateCreatedCol;
private String mBookmarksDateModifiedCol;
private int mBookmarksTypeFolder;
private int mBookmarksTypeBookmark;
private long mMobileFolderId;
private String mHistoryIdCol;
@ -83,7 +85,7 @@ public class testBrowserProvider extends ContentProviderTest {
mBookmarksFaviconCol = getStringColumn("Bookmarks", "FAVICON");
mBookmarksThumbnailCol = getStringColumn("Bookmarks", "THUMBNAIL");
mBookmarksParentCol = getStringColumn("Bookmarks", "PARENT");
mBookmarksIsFolderCol = getStringColumn("Bookmarks", "IS_FOLDER");
mBookmarksTypeCol = getStringColumn("Bookmarks", "TYPE");
mBookmarksPositionCol = getStringColumn("Bookmarks", "POSITION");
mBookmarksTagsCol = getStringColumn("Bookmarks", "TAGS");
mBookmarksDescriptionCol = getStringColumn("Bookmarks", "DESCRIPTION");
@ -93,6 +95,9 @@ public class testBrowserProvider extends ContentProviderTest {
mBookmarksDateCreatedCol = getStringColumn("Bookmarks", "DATE_CREATED");
mBookmarksDateModifiedCol = getStringColumn("Bookmarks", "DATE_MODIFIED");
mBookmarksTypeFolder = getIntColumn("Bookmarks", "TYPE_FOLDER");
mBookmarksTypeBookmark = getIntColumn("Bookmarks", "TYPE_BOOKMARK");
mHistoryIdCol = getStringColumn("History", "_ID");
mHistoryTitleCol = getStringColumn("History", "TITLE");
mHistoryUrlCol = getStringColumn("History", "URL");
@ -149,14 +154,13 @@ public class testBrowserProvider extends ContentProviderTest {
}
private ContentValues createBookmark(String title, String url, long parentId,
int isFolder, int position, String tags, String description,
String keyword) throws Exception {
int type, int position, String tags, String description, String keyword) throws Exception {
ContentValues bookmark = new ContentValues();
bookmark.put(mBookmarksTitleCol, title);
bookmark.put(mBookmarksUrlCol, url);
bookmark.put(mBookmarksParentCol, parentId);
bookmark.put(mBookmarksIsFolderCol, isFolder);
bookmark.put(mBookmarksTypeCol, type);
bookmark.put(mBookmarksPositionCol, position);
bookmark.put(mBookmarksTagsCol, tags);
bookmark.put(mBookmarksDescriptionCol, description);
@ -167,7 +171,7 @@ public class testBrowserProvider extends ContentProviderTest {
private ContentValues createOneBookmark() throws Exception {
return createBookmark("Example", "http://example.com", mMobileFolderId,
0, 0, "tags", "description", "keyword");
mBookmarksTypeBookmark, 0, "tags", "description", "keyword");
}
private Cursor getBookmarkByGuid(String guid) throws Exception {
@ -360,8 +364,8 @@ public class testBrowserProvider extends ContentProviderTest {
"Inserted bookmark has correct description");
mAsserter.is(c.getString(c.getColumnIndex(mBookmarksPositionCol)), b.getAsString(mBookmarksPositionCol),
"Inserted bookmark has correct position");
mAsserter.is(c.getString(c.getColumnIndex(mBookmarksIsFolderCol)), b.getAsString(mBookmarksIsFolderCol),
"Inserted bookmark has correct is-folder flag");
mAsserter.is(c.getString(c.getColumnIndex(mBookmarksTypeCol)), b.getAsString(mBookmarksTypeCol),
"Inserted bookmark has correct type");
mAsserter.is(c.getString(c.getColumnIndex(mBookmarksParentCol)), b.getAsString(mBookmarksParentCol),
"Inserted bookmark has correct parent ID");
mAsserter.is(c.getString(c.getColumnIndex(mBookmarksIsDeletedCol)), String.valueOf(0),
@ -371,9 +375,9 @@ public class testBrowserProvider extends ContentProviderTest {
mAsserter.is(new Long(id), new Long(-1),
"Should not be able to insert bookmark with null position");
id = insertWithNullCol(mBookmarksIsFolderCol);
id = insertWithNullCol(mBookmarksTypeCol);
mAsserter.is(new Long(id), new Long(-1),
"Should not be able to insert bookmark with null is-folder flag");
"Should not be able to insert bookmark with null type");
b = createOneBookmark();
b.put(mBookmarksParentCol, -1);
@ -387,6 +391,16 @@ public class testBrowserProvider extends ContentProviderTest {
mAsserter.is(new Long(id), new Long(-1),
"Should not be able to insert bookmark with invalid parent");
}
b = createOneBookmark();
b.remove(mBookmarksTypeCol);
id = ContentUris.parseId(mProvider.insert(mBookmarksUri, b));
c = getBookmarkById(id);
mAsserter.is(c.moveToFirst(), true, "Inserted bookmark found");
mAsserter.is(c.getString(c.getColumnIndex(mBookmarksTypeCol)), String.valueOf(mBookmarksTypeBookmark),
"Inserted bookmark has correct default type");
}
}
@ -464,14 +478,14 @@ public class testBrowserProvider extends ContentProviderTest {
if (Build.VERSION.SDK_INT >= 8) {
ContentValues b = createBookmark("Folder", null, mMobileFolderId,
1 /* is folder */, 0, "folderTags", "folderDescription", "folderKeyword");
mBookmarksTypeFolder, 0, "folderTags", "folderDescription", "folderKeyword");
long parentId = ContentUris.parseId(mProvider.insert(mBookmarksUri, b));
c = getBookmarkById(parentId);
mAsserter.is(c.moveToFirst(), true, "Inserted bookmarks folder found");
b = createBookmark("Example", "http://example.com", parentId, 0, 0, "tags",
"description", "keyword");
b = createBookmark("Example", "http://example.com", parentId,
mBookmarksTypeBookmark, 0, "tags", "description", "keyword");
id = ContentUris.parseId(mProvider.insert(mBookmarksUri, b));
c = getBookmarkById(id);
@ -538,7 +552,7 @@ public class testBrowserProvider extends ContentProviderTest {
u.put(mBookmarksTagsCol, b.getAsString(mBookmarksTagsCol) + "CHANGED");
u.put(mBookmarksDescriptionCol, b.getAsString(mBookmarksDescriptionCol) + "CHANGED");
u.put(mBookmarksKeywordCol, b.getAsString(mBookmarksKeywordCol) + "CHANGED");
u.put(mBookmarksIsFolderCol, 1);
u.put(mBookmarksTypeCol, mBookmarksTypeFolder);
u.put(mBookmarksPositionCol, 10);
int updated = mProvider.update(mBookmarksUri, u,
@ -562,8 +576,8 @@ public class testBrowserProvider extends ContentProviderTest {
"Inserted bookmark has correct description");
mAsserter.is(c.getString(c.getColumnIndex(mBookmarksPositionCol)), u.getAsString(mBookmarksPositionCol),
"Inserted bookmark has correct position");
mAsserter.is(c.getString(c.getColumnIndex(mBookmarksIsFolderCol)), u.getAsString(mBookmarksIsFolderCol),
"Inserted bookmark has correct is-folder flag");
mAsserter.is(c.getString(c.getColumnIndex(mBookmarksTypeCol)), u.getAsString(mBookmarksTypeCol),
"Inserted bookmark has correct type");
mAsserter.is(new Long(c.getLong(c.getColumnIndex(mBookmarksDateCreatedCol))),
new Long(dateCreated),
@ -577,9 +591,9 @@ public class testBrowserProvider extends ContentProviderTest {
mAsserter.is((updated > 0), false,
"Should not be able to update bookmark with null position");
updated = updateWithNullCol(id, mBookmarksIsFolderCol);
updated = updateWithNullCol(id, mBookmarksTypeCol);
mAsserter.is((updated > 0), false,
"Should not be able to update bookmark with null is-folder flag");
"Should not be able to update bookmark with null type");
u = new ContentValues();
u.put(mBookmarksUrlCol, "http://examples2.com");