diff options
Diffstat (limited to 'src/com/android/browser/provider')
-rw-r--r-- | src/com/android/browser/provider/BrowserProvider2.java | 86 |
1 files changed, 74 insertions, 12 deletions
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java index d9760e5..9f6e41c 100644 --- a/src/com/android/browser/provider/BrowserProvider2.java +++ b/src/com/android/browser/provider/BrowserProvider2.java @@ -16,15 +16,6 @@ package com.android.browser.provider; -import com.google.common.annotations.VisibleForTesting; - -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; - import android.accounts.Account; import android.app.SearchManager; import android.content.ContentResolver; @@ -32,7 +23,6 @@ import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.content.UriMatcher; import android.content.res.Resources; import android.content.res.TypedArray; @@ -45,7 +35,6 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; -import android.preference.PreferenceManager; import android.provider.BaseColumns; import android.provider.Browser; import android.provider.Browser.BookmarkColumns; @@ -63,6 +52,12 @@ import android.provider.ContactsContract.RawContacts; import android.provider.SyncStateContract; import android.text.TextUtils; +import com.android.browser.R; +import com.android.browser.UrlUtils; +import com.android.browser.widget.BookmarkThumbnailWidgetProvider; +import com.android.common.content.SyncStateContentProviderHelper; +import com.google.common.annotations.VisibleForTesting; + import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; @@ -72,6 +67,18 @@ import java.util.HashMap; public class BrowserProvider2 extends SQLiteContentProvider { + public static interface Snapshots { + + public static final Uri CONTENT_URI = Uri.withAppendedPath( + BrowserContract.AUTHORITY_URI, "snapshots"); + public static final String _ID = "_id"; + public static final String VIEWSTATE = "view_state"; + public static final String BACKGROUND = "background"; + public static final String TITLE = History.TITLE; + public static final String URL = History.URL; + public static final String FAVICON = History.FAVICON; + } + public static final String LEGACY_AUTHORITY = "browser"; static final Uri LEGACY_AUTHORITY_URI = new Uri.Builder() .authority(LEGACY_AUTHORITY).scheme("content").build(); @@ -82,6 +89,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { static final String TABLE_SEARCHES = "searches"; static final String TABLE_SYNC_STATE = "syncstate"; static final String TABLE_SETTINGS = "settings"; + static final String TABLE_SNAPSHOTS = "snapshots"; static final String TABLE_BOOKMARKS_JOIN_IMAGES = "bookmarks LEFT OUTER JOIN images " + "ON bookmarks.url = images." + Images.URL; @@ -89,6 +97,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { "ON history.url = images." + Images.URL; static final String VIEW_ACCOUNTS = "v_accounts"; + static final String VIEW_SNAPSHOTS_COMBINED = "v_snapshots_combined"; static final String FORMAT_COMBINED_JOIN_SUBQUERY_JOIN_IMAGES = "history LEFT OUTER JOIN (%s) bookmarks " + @@ -139,6 +148,9 @@ public class BrowserProvider2 extends SQLiteContentProvider { static final int LEGACY = 9000; static final int LEGACY_ID = 9001; + static final int SNAPSHOTS = 10000; + static final int SNAPSHOTS_ID = 10001; + public static final long FIXED_ID_ROOT = 1; // Default sort order for unsync'd bookmarks @@ -200,6 +212,9 @@ public class BrowserProvider2 extends SQLiteContentProvider { "bookmarks/" + SearchManager.SUGGEST_URI_PATH_QUERY, BOOKMARKS_SUGGESTIONS); + matcher.addURI(authority, "snapshots", SNAPSHOTS); + matcher.addURI(authority, "snapshots/#", SNAPSHOTS_ID); + // Projection maps HashMap<String, String> map; @@ -333,7 +348,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { final class DatabaseHelper extends SQLiteOpenHelper { static final String DATABASE_NAME = "browser2.db"; - static final int DATABASE_VERSION = 28; + static final int DATABASE_VERSION = 29; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @@ -404,6 +419,8 @@ public class BrowserProvider2 extends SQLiteContentProvider { } enableSync(db); + + createSnapshots(db); } void enableSync(SQLiteDatabase db) { @@ -500,6 +517,9 @@ public class BrowserProvider2 extends SQLiteContentProvider { @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + if (oldVersion < 29) { + createSnapshots(db); + } if (oldVersion < 28) { enableSync(db); } @@ -520,6 +540,22 @@ public class BrowserProvider2 extends SQLiteContentProvider { } } + void createSnapshots(SQLiteDatabase db) { + db.execSQL("DROP TABLE IF EXISTS " + TABLE_SNAPSHOTS); + db.execSQL("CREATE TABLE " + TABLE_SNAPSHOTS + " (" + + Snapshots._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + + Snapshots.URL + " TEXT NOT NULL," + + Snapshots.TITLE + " TEXT," + + Snapshots.BACKGROUND + " INTEGER," + + Snapshots.VIEWSTATE + " BLOB NOT NULL" + + ");"); + db.execSQL("CREATE VIEW IF NOT EXISTS " + VIEW_SNAPSHOTS_COMBINED + + " AS SELECT * FROM " + TABLE_SNAPSHOTS + + " LEFT OUTER JOIN " + TABLE_IMAGES + + " ON " + TABLE_SNAPSHOTS + "." + Snapshots.URL + + " = images.url_key"); + } + @Override public void onOpen(SQLiteDatabase db) { db.enableWriteAheadLogging(); @@ -970,6 +1006,17 @@ public class BrowserProvider2 extends SQLiteContentProvider { break; } + case SNAPSHOTS_ID: { + selection = DatabaseUtils.concatenateWhere(selection, "_id=?"); + selectionArgs = DatabaseUtils.appendSelectionArgs(selectionArgs, + new String[] { Long.toString(ContentUris.parseId(uri)) }); + // fall through + } + case SNAPSHOTS: { + qb.setTables(VIEW_SNAPSHOTS_COMBINED); + break; + } + default: { throw new UnsupportedOperationException("Unknown URL " + uri.toString()); } @@ -1169,6 +1216,16 @@ public class BrowserProvider2 extends SQLiteContentProvider { } break; } + case SNAPSHOTS_ID: { + selection = DatabaseUtils.concatenateWhere(selection, TABLE_SNAPSHOTS + "._id=?"); + selectionArgs = DatabaseUtils.appendSelectionArgs(selectionArgs, + new String[] { Long.toString(ContentUris.parseId(uri)) }); + // fall through + } + case SNAPSHOTS: { + deleted = db.delete(TABLE_SNAPSHOTS, selection, selectionArgs); + break; + } default: { throw new UnsupportedOperationException("Unknown delete URI " + uri); } @@ -1301,6 +1358,11 @@ public class BrowserProvider2 extends SQLiteContentProvider { break; } + case SNAPSHOTS: { + id = db.insertOrThrow(TABLE_SNAPSHOTS, Snapshots.TITLE, values); + break; + } + default: { throw new UnsupportedOperationException("Unknown insert URI " + uri); } |