summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/provider
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2011-06-14 08:45:00 -0700
committerJohn Reck <jreck@google.com>2011-06-14 15:56:32 -0700
commitd8c7452a7d8975a2d60414c5a33842b4a743e631 (patch)
tree1247519fc0a1e55fa78062e854cf1776461af762 /src/com/android/browser/provider
parent27d0b8858752093b8e6cffec4073429b22444af3 (diff)
downloadpackages_apps_browser-d8c7452a7d8975a2d60414c5a33842b4a743e631.zip
packages_apps_browser-d8c7452a7d8975a2d60414c5a33842b4a743e631.tar.gz
packages_apps_browser-d8c7452a7d8975a2d60414c5a33842b4a743e631.tar.bz2
Persistent frozen tabs
On Tablet WebViews for frozen tabs are created on demand On Phone WebViews for frozen tabs are tied to the lifecycle of the SnapshotTab for nav screen reasons (for now) Change-Id: I80cb48e748c4dd4b8564426d5e05b92f3eea7a36
Diffstat (limited to 'src/com/android/browser/provider')
-rw-r--r--src/com/android/browser/provider/BrowserProvider2.java86
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);
}