diff options
-rw-r--r-- | res/values/strings.xml | 7 | ||||
-rw-r--r-- | src/com/android/browser/AddBookmarkPage.java | 110 | ||||
-rw-r--r-- | src/com/android/browser/BrowserActivity.java | 20 | ||||
-rw-r--r-- | src/com/android/browser/BrowserBookmarksAdapter.java | 4 |
4 files changed, 103 insertions, 38 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index 9fd8c87..f59a985 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -158,6 +158,8 @@ <string name="set_as_homepage">Set as homepage</string> <!-- Toast informing the user that their action to save a bookmark has succeeded --> <string name="bookmark_saved">Saved to bookmarks.</string> + <!-- Toast informing the user that their action to save a bookmark did not succeed --> + <string name="bookmark_not_saved">Unable to save bookmark.</string> <!-- Toast confirming that the homepage has been set --> <string name="homepage_set">Homepage set.</string> <!-- Error that appears in the title of Bookmark dialog when user selects OK with empty Name field --> @@ -514,9 +516,6 @@ <!-- Verb placed in front of a screenshot of a web page that, when clicked, will add that page to bookmarks --> <string name="add_bookmark_short">Add</string> - <!-- Add bookmark dialog sets its title to this if we have no database. - This is an error case --> - <string name="no_database">No database!</string> <!-- This string is for the browser "Go To" UI. --> <!-- Do not translate. This string is not displayed in UI (no badge is selected for go to). --> @@ -675,7 +674,7 @@ <item>http://www.ebay.com/</item> <item>CNN</item> <item>http://www.cnn.com/</item> - <item>New York Times</item> + <item>NY Times</item> <item>http://www.nytimes.com/</item> <item>ESPN</item> <item>http://espn.go.com/</item> diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java index 71bf481..0ded526 100644 --- a/src/com/android/browser/AddBookmarkPage.java +++ b/src/com/android/browser/AddBookmarkPage.java @@ -25,6 +25,8 @@ import android.graphics.Bitmap; import android.net.ParseException; import android.net.WebAddress; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; import android.provider.Browser; import android.view.View; import android.view.Window; @@ -50,12 +52,15 @@ public class AddBookmarkPage extends Activity { private Bitmap mThumbnail; private String mOriginalUrl; + // Message IDs + private static final int SAVE_BOOKMARK = 100; + + private Handler mHandler; + private View.OnClickListener mSaveBookmark = new View.OnClickListener() { public void onClick(View v) { if (save()) { finish(); - Toast.makeText(AddBookmarkPage.this, R.string.bookmark_saved, - Toast.LENGTH_LONG).show(); } } }; @@ -94,7 +99,6 @@ public class AddBookmarkPage extends Activity { mAddress = (EditText) findViewById(R.id.address); mAddress.setText(url); - View.OnClickListener accept = mSaveBookmark; mButton = (TextView) findViewById(R.id.OK); mButton.setOnClickListener(accept); @@ -106,13 +110,59 @@ public class AddBookmarkPage extends Activity { mButton.requestFocus(); } } - + + private void createHandler() { + if (mHandler == null) { + mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case SAVE_BOOKMARK: + // Unbundle bookmark data. + Bundle bundle = msg.getData(); + String title = bundle.getString("title"); + String url = bundle.getString("url"); + boolean invalidateThumbnail = bundle.getBoolean("invalidateThumbnail"); + Bitmap thumbnail = invalidateThumbnail + ? null : (Bitmap) bundle.getParcelable("thumbnail"); + String touchIconUrl = bundle.getString("touchIconUrl"); + + // Save to the bookmarks DB. + if (updateBookmarksDB(title, url, thumbnail, touchIconUrl)) { + Toast.makeText(AddBookmarkPage.this, R.string.bookmark_saved, + Toast.LENGTH_LONG).show(); + } else { + Toast.makeText(AddBookmarkPage.this, R.string.bookmark_not_saved, + Toast.LENGTH_LONG).show(); + } + break; + } + } + }; + } + } + + private boolean updateBookmarksDB(String title, String url, Bitmap thumbnail, String touchIconUrl) { + try { + final ContentResolver cr = getContentResolver(); + Bookmarks.addBookmark(null, cr, url, title, thumbnail, true); + if (touchIconUrl != null) { + final Cursor c = + BrowserBookmarksAdapter.queryBookmarksForUrl(cr, null, url, true); + new DownloadTouchIcon(cr, c, url).execute(mTouchIconUrl); + } + } catch (IllegalStateException e) { + return false; + } + return true; + } + /** - * Save the data to the database. - * Also, change the view to dialog stating - * that the webpage has been saved. + * Parse the data entered in the dialog and post a message to update the bookmarks database. */ boolean save() { + createHandler(); + String title = mTitle.getText().toString().trim(); String unfilteredUrl = BrowserActivity.fixUrl(mAddress.getText().toString()); @@ -150,33 +200,25 @@ public class AddBookmarkPage extends Activity { mAddress.setError(r.getText(R.string.bookmark_url_not_valid)); return false; } - try { - if (mEditingExisting) { - mMap.putString("title", title); - mMap.putString("url", url); - setResult(RESULT_OK, (new Intent()).setAction( - getIntent().toString()).putExtras(mMap)); - } else { - final ContentResolver cr = getContentResolver(); - - // Only use mThumbnail if url and mOriginalUrl are matches. - // Otherwise the user edited the url and the thumbnail no longer applies. - if (url.equals(mOriginalUrl)) { - Bookmarks.addBookmark(null, cr, url, title, mThumbnail, true); - } else { - Bookmarks.addBookmark(null, cr, url, title, null, true); - } - if (mTouchIconUrl != null) { - final Cursor c = - BrowserBookmarksAdapter.queryBookmarksForUrl( - cr, null, url, true); - new DownloadTouchIcon(cr, c, url).execute(mTouchIconUrl); - } - setResult(RESULT_OK); - } - } catch (IllegalStateException e) { - setTitle(r.getText(R.string.no_database)); - return false; + + if (mEditingExisting) { + mMap.putString("title", title); + mMap.putString("url", url); + mMap.putBoolean("invalidateThumbnail", !url.equals(mOriginalUrl)); + setResult(RESULT_OK, (new Intent()).setAction( + getIntent().toString()).putExtras(mMap)); + } else { + // Post a message to write to the DB. + Bundle bundle = new Bundle(); + bundle.putString("title", title); + bundle.putString("url", url); + bundle.putParcelable("thumbnail", mThumbnail); + bundle.putBoolean("invalidateThumbnail", !url.equals(mOriginalUrl)); + bundle.putString("touchIconUrl", mTouchIconUrl); + Message msg = Message.obtain(mHandler, SAVE_BOOKMARK); + msg.setData(bundle); + mHandler.sendMessage(msg); + setResult(RESULT_OK); } return true; } diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index 6797841..1954dad 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -113,6 +113,7 @@ import android.webkit.HttpAuthHandler; import android.webkit.PluginManager; import android.webkit.SslErrorHandler; import android.webkit.URLUtil; +import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebChromeClient.CustomViewCallback; import android.webkit.WebHistoryItem; @@ -3495,6 +3496,25 @@ public class BrowserActivity extends Activity } return mVideoProgressView; } + + /** + * Deliver a list of already-visited URLs + * @hide pending API Council approval + */ + @Override + public void getVisitedHistory(final ValueCallback<String[]> callback) { + AsyncTask<Void, Void, String[]> task = new AsyncTask<Void, Void, String[]>() { + public String[] doInBackground(Void... unused) { + return Browser.getVisitedHistory(getContentResolver()); + } + + public void onPostExecute(String[] result) { + callback.onReceiveValue(result); + + }; + }; + task.execute(); + }; }; /** diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java index 8b0fb41..dd56d2f 100644 --- a/src/com/android/browser/BrowserBookmarksAdapter.java +++ b/src/com/android/browser/BrowserBookmarksAdapter.java @@ -170,6 +170,10 @@ class BrowserBookmarksAdapter extends BaseAdapter { getString(Browser.HISTORY_PROJECTION_URL_INDEX))) { values.put(Browser.BookmarkColumns.URL, url); } + + if (map.getBoolean("invalidateThumbnail") == true) { + values.put(Browser.BookmarkColumns.THUMBNAIL, new byte[0]); + } if (values.size() > 0 && mContentResolver.update(Browser.BOOKMARKS_URI, values, "_id = " + id, null) != -1) { |