summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/browser/BrowserActivity.java7
-rw-r--r--src/com/android/browser/BrowserProvider.java28
-rw-r--r--src/com/android/browser/TitleBar.java3
-rw-r--r--tests/src/com/android/browser/BrowserProviderTests.java168
4 files changed, 187 insertions, 19 deletions
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 52a3125..d4a016d 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -1693,6 +1693,9 @@ public class BrowserActivity extends Activity
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
+ if (v instanceof TitleBar) {
+ return;
+ }
WebView webview = (WebView) v;
WebView.HitTestResult result = webview.getHitTestResult();
if (result == null) {
@@ -2458,7 +2461,7 @@ public class BrowserActivity extends Activity
* an {@link Intent} to launch the Activity chooser.
* @param c Context used to launch a new Activity.
* @param title Title of the page. Stored in the Intent with
- * {@link Browser#EXTRA_SHARE_TITLE}
+ * {@link Intent#EXTRA_SUBJECT}
* @param url URL of the page. Stored in the Intent with
* {@link Intent#EXTRA_TEXT}
* @param favicon Bitmap of the favicon for the page. Stored in the Intent
@@ -2471,7 +2474,7 @@ public class BrowserActivity extends Activity
Intent send = new Intent(Intent.ACTION_SEND);
send.setType("text/plain");
send.putExtra(Intent.EXTRA_TEXT, url);
- send.putExtra(Browser.EXTRA_SHARE_TITLE, title);
+ send.putExtra(Intent.EXTRA_SUBJECT, title);
send.putExtra(Browser.EXTRA_SHARE_FAVICON, favicon);
send.putExtra(Browser.EXTRA_SHARE_SCREENSHOT, screenshot);
try {
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java
index dda5765..ca24b49 100644
--- a/src/com/android/browser/BrowserProvider.java
+++ b/src/com/android/browser/BrowserProvider.java
@@ -1056,18 +1056,14 @@ public class BrowserProvider extends ContentProvider {
throw new IllegalArgumentException("Unknown URL");
}
- String id = null;
- boolean isBookmarkTable = (match == URI_MATCH_BOOKMARKS_ID);
- boolean changingBookmarks = false;
-
- if (isBookmarkTable || match == URI_MATCH_SEARCHES_ID) {
+ if (match == URI_MATCH_BOOKMARKS_ID || match == URI_MATCH_SEARCHES_ID) {
StringBuilder sb = new StringBuilder();
if (where != null && where.length() > 0) {
sb.append("( ");
sb.append(where);
sb.append(" ) AND ");
}
- id = url.getPathSegments().get(1);
+ String id = url.getPathSegments().get(1);
sb.append("_id = ");
sb.append(id);
where = sb.toString();
@@ -1078,23 +1074,23 @@ public class BrowserProvider extends ContentProvider {
// Not all bookmark-table updates should be backed up. Look to see
// whether we changed the title, url, or "is a bookmark" state, and
// request a backup if so.
- if (isBookmarkTable) {
+ if (match == URI_MATCH_BOOKMARKS_ID || match == URI_MATCH_BOOKMARKS) {
+ boolean changingBookmarks = false;
// Alterations to the bookmark field inherently change the bookmark
// set, so we don't need to query the record; we know a priori that
// we will need to back up this change.
if (values.containsKey(BookmarkColumns.BOOKMARK)) {
changingBookmarks = true;
- }
- // changing the title or URL of a bookmark record requires a backup,
- // but we don't know wether such an update is on a bookmark without
- // querying the record
- if (!changingBookmarks &&
- (values.containsKey(BookmarkColumns.TITLE)
- || values.containsKey(BookmarkColumns.URL))) {
- // when isBookmarkTable is true, the 'id' var was assigned above
+ } else if ((values.containsKey(BookmarkColumns.TITLE)
+ || values.containsKey(BookmarkColumns.URL))
+ && values.containsKey(BookmarkColumns._ID)) {
+ // If a title or URL has been changed, check to see if it is to
+ // a bookmark. The ID should have been included in the update,
+ // so use it.
Cursor cursor = cr.query(Browser.BOOKMARKS_URI,
new String[] { BookmarkColumns.BOOKMARK },
- "_id = " + id, null, null);
+ BookmarkColumns._ID + " = "
+ + values.getAsString(BookmarkColumns._ID), null, null);
if (cursor.moveToNext()) {
changingBookmarks = (cursor.getInt(0) != 0);
}
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index 15b1d44..98667c3 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -141,9 +141,10 @@ public class TitleBar extends LinearLayout {
};
@Override
- protected void onCreateContextMenu(ContextMenu menu) {
+ public void createContextMenu(ContextMenu menu) {
MenuInflater inflater = mBrowserActivity.getMenuInflater();
inflater.inflate(R.menu.title_context, menu);
+ mBrowserActivity.onCreateContextMenu(menu, this, null);
}
@Override
diff --git a/tests/src/com/android/browser/BrowserProviderTests.java b/tests/src/com/android/browser/BrowserProviderTests.java
new file mode 100644
index 0000000..f4bf942
--- /dev/null
+++ b/tests/src/com/android/browser/BrowserProviderTests.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.app.SearchManager;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.MediumTest;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * Unit tests for {@link BrowserProvider}.
+ */
+@MediumTest
+public class BrowserProviderTests extends AndroidTestCase {
+
+ private ArrayList<Uri> mDeleteUris;
+
+ @Override
+ protected void setUp() throws Exception {
+ mDeleteUris = new ArrayList<Uri>();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ for (Uri uri : mDeleteUris) {
+ deleteUri(uri);
+ }
+ super.tearDown();
+ }
+
+ public void testHasDefaultBookmarks() {
+ Cursor c = getBookmarksSuggest("");
+ try {
+ assertTrue("No default bookmarks", c.getCount() > 0);
+ } finally {
+ c.close();
+ }
+ }
+
+ public void testPartialFirstTitleWord() {
+ assertInsertQuery("http://www.example.com/rasdfe", "nfgjra sdfywe", "nfgj");
+ }
+
+ public void testFullFirstTitleWord() {
+ assertInsertQuery("http://www.example.com/", "nfgjra dfger", "nfgjra");
+ }
+
+ public void testFullFirstTitleWordPartialSecond() {
+ assertInsertQuery("http://www.example.com/", "nfgjra dfger", "nfgjra df");
+ }
+
+ public void testFullTitle() {
+ assertInsertQuery("http://www.example.com/", "nfgjra dfger", "nfgjra dfger");
+ }
+
+// Not implemented in BrowserProvider
+// public void testFullSecondTitleWord() {
+// assertInsertQuery("http://www.example.com/rasdfe", "nfgjra sdfywe", "sdfywe");
+// }
+
+ public void testFullTitleJapanese() {
+ String title = "\u30ae\u30e3\u30e9\u30ea\u30fc\u30fcGoogle\u691c\u7d22";
+ assertInsertQuery("http://www.example.com/sdaga", title, title);
+ }
+
+ public void testPartialTitleJapanese() {
+ String title = "\u30ae\u30e3\u30e9\u30ea\u30fc\u30fcGoogle\u691c\u7d22";
+ String query = "\u30ae\u30e3\u30e9\u30ea\u30fc";
+ assertInsertQuery("http://www.example.com/sdaga", title, query);
+ }
+
+ // Test for http://b/issue?id=2152749
+ public void testSoundmarkTitleJapanese() {
+ String title = "\u30ae\u30e3\u30e9\u30ea\u30fc\u30fcGoogle\u691c\u7d22";
+ String query = "\u30ad\u30e3\u30e9\u30ea\u30fc";
+ assertInsertQuery("http://www.example.com/sdaga", title, query);
+ }
+
+ //
+ // Utilities
+ //
+
+ private void assertInsertQuery(String url, String title, String query) {
+ addBookmark(url, title);
+ assertQueryReturns(url, title, query);
+ }
+
+ private void assertQueryReturns(String url, String title, String query) {
+ Cursor c = getBookmarksSuggest(query);
+ try {
+ assertTrue(title + " not matched by " + query, c.getCount() > 0);
+ assertTrue("More than one result for " + query, c.getCount() == 1);
+ while (c.moveToNext()) {
+ String text1 = getCol(c, SearchManager.SUGGEST_COLUMN_TEXT_1);
+ assertNotNull(text1);
+ assertEquals("Bad title", title, text1);
+ String text2 = getCol(c, SearchManager.SUGGEST_COLUMN_TEXT_2);
+ assertNotNull(text2);
+ String data = getCol(c, SearchManager.SUGGEST_COLUMN_INTENT_DATA);
+ assertNotNull(data);
+ assertEquals("Bad URL", url, data);
+ }
+ } finally {
+ c.close();
+ }
+ }
+
+ private Cursor getBookmarksSuggest(String query) {
+ Uri suggestUri = Uri.parse("content://browser/bookmarks/search_suggest_query");
+ String[] selectionArgs = { query };
+ Cursor c = getContext().getContentResolver().query(suggestUri, null, "url LIKE ?",
+ selectionArgs, null);
+ assertNotNull(c);
+ return c;
+ }
+
+ private void addBookmark(String url, String title) {
+ Uri uri = insertBookmark(url, title);
+ assertNotNull(uri);
+ assertFalse(android.provider.Browser.BOOKMARKS_URI.equals(uri));
+ mDeleteUris.add(uri);
+ }
+
+ private Uri insertBookmark(String url, String title) {
+ ContentValues values = new ContentValues();
+ values.put("title", title);
+ values.put("url", url);
+ values.put("visits", 0);
+ values.put("date", 0);
+ values.put("created", 0);
+ values.put("bookmark", 1);
+ return getContext().getContentResolver().insert(android.provider.Browser.BOOKMARKS_URI,
+ values);
+ }
+
+ private void deleteUri(Uri uri) {
+ int count = getContext().getContentResolver().delete(uri, null, null);
+ assertEquals("Failed to delete " + uri, 1, count);
+ }
+
+ private static String getCol(Cursor c, String name) {
+ int col = c.getColumnIndex(name);
+ String msg = "Column " + name + " not found, columns: "
+ + Arrays.toString(c.getColumnNames());
+ assertTrue(msg, col >= 0);
+ return c.getString(col);
+ }
+}