Merge "Save 1.2ms of drawing time per displayed tab." into honeycomb
diff --git a/res/layout/add_to_option.xml b/res/layout/add_to_option.xml
new file mode 100644
index 0000000..4cfa9f8
--- /dev/null
+++ b/res/layout/add_to_option.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:gravity="center_vertical"
+ android:minHeight="?android:attr/listPreferredItemHeight" />
diff --git a/res/layout/browser_add_bookmark.xml b/res/layout/browser_add_bookmark.xml
index 8adf4b6..e25f903 100644
--- a/res/layout/browser_add_bookmark.xml
+++ b/res/layout/browser_add_bookmark.xml
@@ -131,19 +131,15 @@
android:text="@string/containing_folder"
android:textAppearance="?android:attr/textAppearanceMedium" />
- <TextView
+ <view class="com.android.browser.addbookmark.FolderSpinner"
android:id="@+id/folder"
android:layout_height="wrap_content"
- android:layout_width="250dip"
+ android:layout_width="wrap_content"
android:layout_marginRight="20dip"
android:layout_marginLeft="20dip"
+ android:spinnerMode="dropdown"
android:gravity="center_vertical"
- android:singleLine="true"
- android:ellipsize="start"
- android:text="@string/bookmarks"
- android:drawableLeft="@drawable/ic_menu_bookmarks"
- android:layout_marginBottom="40dip"
- android:textAppearance="?android:attr/textAppearanceMedium" />
+ />
</TableRow>
</TableLayout>
diff --git a/res/menu/folder_choice.xml b/res/menu/folder_choice.xml
deleted file mode 100644
index c62e2f8..0000000
--- a/res/menu/folder_choice.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/home_screen"
- android:icon="@*android:drawable/ic_menu_home"
- android:title="@string/add_to_homescreen_menu_option"/>
- <item android:id="@+id/bookmarks"
- android:icon="@drawable/ic_menu_bookmarks"
- android:title="@string/add_to_bookmarks_menu_option"/>
- <item android:id="@+id/other"
- android:icon="@*android:drawable/ic_menu_archive"
- android:title="@string/add_to_other_folder_menu_option"/>
-</menu>
diff --git a/res/values-es-rUS-xlarge/strings.xml b/res/values-es-rUS-xlarge/strings.xml
index 7f9e8b6..508f3fe 100644
--- a/res/values-es-rUS-xlarge/strings.xml
+++ b/res/values-es-rUS-xlarge/strings.xml
@@ -1,24 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
- -->
-
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="new_tab" msgid="7275656655054293038">"Pestaña nueva"</string>
- <string name="new_incognito_tab" msgid="5149742197322201152">"Nueva pestaña de incógnito"</string>
- <string name="active_tabs" msgid="5324492165541331128">"Pestañas"</string>
- <!-- no translation found for contextmenu_openlink_newwindow (1061831678814826192) -->
- <skip />
+ <!-- XL xlarge -->
+ <string name="new_tab" msgid="7211896313409251144">"Pestaña nueva"</string>
+ <!-- XL xlarge -->
+ <string name="new_incognito_tab" msgid="8067945824740306172">"Nueva pestaña de incógnito"</string>
+ <!-- XL xlarge -->
+ <string name="active_tabs" msgid="5948496827915445500">"Pestañas"</string>
+ <!-- XL -->
+ <string name="tab_bookmarks" msgid="2107205776996598691">"Favoritos"</string>
+ <!-- XL -->
+ <string name="added_to_bookmarks" msgid="8889115451085864249">"Agregado a favoritos"</string>
+ <!-- XL -->
+ <string name="removed_from_bookmarks" msgid="7846438980097184281">"Suprimido de Favoritos"</string>
+ <!-- XL -->
+ <string name="sign_in_to" msgid="1214184176627571479">"Acceder a <xliff:g id="HOSTNAME">%s1</xliff:g> \"<xliff:g id="REALM">%s2</xliff:g>\""</string>
+ <!-- XL -->
+ <string name="action" msgid="4943864730966939961">"Acceder"</string>
+ <!-- XL -->
+ <string name="add_to_bookmarks_menu_option" msgid="7552383875291126013">"Favoritos"</string>
+ <!-- XL -->
+ <string name="remove_from_bookmarks" msgid="7311939805508190918">"Eliminar de Favoritos"</string>
+ <!-- XL -->
+ <string name="bookmark_saved" msgid="1806548159693236924">"Guardado en los favoritos."</string>
+ <!-- XL -->
+ <string name="bookmark_cannot_save_url" msgid="8417203985466903497">"No se puede agregar esta URL a los favoritos."</string>
+ <!-- XL -->
+ <string name="bookmarks" msgid="8254231548777487838">"Favoritos"</string>
+ <!-- XL -->
+ <string name="copy_page_url" msgid="7121286358832939849">"Copiar la URL de la página"</string>
+ <!-- XL -->
+ <string name="contextheader_folder_bookmarkcount" msgid="7867101902984210591">"<xliff:g id="BOOKMARK_COUNT">%d</xliff:g> favoritos"</string>
+ <!-- XL -->
+ <string name="contextheader_folder_empty" msgid="8989453566115363329">"Carpeta vacía"</string>
+ <!-- XL xlarge -->
+ <string name="contextmenu_openlink_newwindow" msgid="8177825954953587540">"Abrir en una ventana nueva"</string>
+ <!-- XL -->
+ <string name="contextmenu_map" msgid="3809951100283548665">"Mapa"</string>
+ <!-- XL -->
+ <string name="browser_bookmarks_page_bookmarks_text" msgid="4676739439702068160">"Favoritos"</string>
+ <!-- XL -->
+ <string name="menu_preferences" msgid="3003635465914395516">"Configuración"</string>
+ <!-- XL -->
+ <string name="pref_content_block_popups" msgid="6871160654981179930">"Bloquear ventanas emergentes"</string>
+ <!-- XL -->
+ <string name="pref_content_open_in_background" msgid="7928143573209470961">"Abrir en modo subordinado"</string>
+ <!-- XL -->
+ <string name="pref_content_homepage" msgid="6044903119907405007">"Definir página principal"</string>
+ <!-- XL -->
+ <string name="pref_content_autofit" msgid="152292940099720429">"Ajuste automático de páginas"</string>
+ <!-- XL -->
+ <string name="pref_autofill_profile_editor_summary" msgid="6606678927956330022">"Configurar & administrar datos para los formularios de autollenado"</string>
+ <!-- XL -->
+ <string name="autofill_profile_editor_heading" msgid="376355900106687672">"La función Autocompletar utilizará tu perfil para ayudarte a completar los formularios web con solo un clic."</string>
+ <!-- XL -->
+ <string name="autofill_setup_dialog_negative_toast" msgid="8606640740851832808">"Autocomp se configura en cualquier momento con Configuración del navegador -> Configuración personal"</string>
+ <!-- XL -->
+ <string name="pref_privacy_clear_cookies" msgid="2430066169979191550">"Borrar todos los datos de las cookies"</string>
+ <!-- XL -->
+ <string name="pref_security_save_form_data" msgid="4687632734841414584">"Recordar datos del formulario"</string>
+ <!-- XL -->
+ <string name="pref_security_show_security_warning" msgid="237213216450431926">"Mostrar advertencias de seguridad"</string>
+ <!-- XL -->
+ <string-array name="pref_text_size_choices">
+ <item msgid="9175838437528854188">"Diminuto"</item>
+ <item msgid="8310610720691502080">"Pequeño"</item>
+ <item msgid="577786719596429685">"Normal"</item>
+ <item msgid="1882099825378500373">"Grande"</item>
+ <item msgid="2624955515232921031">"Enorme"</item>
+ </string-array>
+ <!-- XL -->
+ <string name="pref_default_zoom" msgid="7937970520334948703">"Zoom predeterminado"</string>
+ <!-- XL -->
+ <string-array name="pref_default_zoom_choices">
+ <item msgid="7308170040893292647">"Lejos"</item>
+ <item msgid="2127686869768024870">"Medio"</item>
+ <item msgid="6369171816013236032">"Cerrar"</item>
+ </string-array>
+ <!-- XL -->
+ <string name="pref_default_zoom_dialogtitle" msgid="8698964985032801767">"Zoom predeterminado"</string>
+ <!-- XL -->
+ <string name="pref_content_load_page" msgid="7460666469137362825">"Abrir las páginas en visión general"</string>
+ <!-- XL -->
+ <!-- outdated translation 3239395481036882698 --> <string name="pref_extras_title" msgid="7223601187104530963">"Configuración avanzada"</string>
+ <!-- XL -->
+ <string name="pref_extras_reset_default" msgid="113675796607112935">"Restablecer a la forma predeterminada"</string>
+ <!-- XL -->
+ <string name="pref_extras_reset_default_dlg_title" msgid="5686450294662109619">"Restablecer a la forma predeterminada"</string>
+ <!-- XL -->
+ <string name="search_settings_description" msgid="8504084593679367617">"Favoritos e historial web"</string>
+ <!-- XL -->
+ <string name="search_the_web" msgid="3493318001113588865">"Buscar en la Web"</string>
+ <!-- XL -->
+ <string name="defaultBookmarksUpButton" msgid="5051877462652364478">"Favoritos"</string>
+ <!-- XL -->
+ <string name="max_tabs_warning" msgid="1283136201153746764">"No hay más etiquetas disponibles"</string>
+ <!-- XL -->
+ <string name="pref_lab_title" msgid="209824994106188072">"Lab"</string>
+ <!-- XL -->
+ <string name="pref_lab_quick_controls" msgid="1617774508416113544">"Controles rápidos"</string>
+ <!-- XL -->
+ <string name="pref_lab_quick_controls_summary" msgid="1067572298315336767">"Desliza el pulgar del borde izquierdo/derecho y accede a los controles rápidos."</string>
+ <!-- XL -->
+ <string name="account_picker_title" msgid="19248413027956627">"Seleccionar una cuenta o cancelar el acceso manual"</string>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2a00f1d..b8a45bf 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -522,7 +522,7 @@
<string name="pref_content_load_page">Open pages in overview</string>
<!-- Settings summary -->
<string name="pref_content_load_page_summary">Show overview of newly opened pages</string>
- <!-- Settings screen, section title -->
+ <!-- Settings screen, section title [CHAR LIMIT=50] -->
<string name="pref_extras_title">Advanced</string>
<!-- Settings label -->
<string name="pref_extras_website_settings">Website settings</string>
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index d3c147c..9d8c73c 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -17,6 +17,7 @@
package com.android.browser;
import com.android.browser.provider.BrowserProvider2;
+import com.android.browser.addbookmark.FolderSpinnerAdapter;
import android.app.Activity;
import android.app.LoaderManager;
@@ -44,7 +45,6 @@
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.LayoutInflater;
-import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
@@ -55,7 +55,7 @@
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
-import android.widget.PopupMenu;
+import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
@@ -66,7 +66,7 @@
public class AddBookmarkPage extends Activity
implements View.OnClickListener, TextView.OnEditorActionListener,
AdapterView.OnItemClickListener, LoaderManager.LoaderCallbacks<Cursor>,
- BreadCrumbView.Controller, PopupMenu.OnMenuItemClickListener {
+ BreadCrumbView.Controller, AdapterView.OnItemSelectedListener {
public static final long DEFAULT_FOLDER_ID = -1;
public static final String TOUCH_ICON_URL = "touch_icon_url";
@@ -94,7 +94,7 @@
private Bundle mMap;
private String mTouchIconUrl;
private String mOriginalUrl;
- private TextView mFolder;
+ private Spinner mFolder;
private View mDefaultView;
private View mFolderSelector;
private EditText mFolderNamer;
@@ -112,7 +112,9 @@
private long mRootFolder;
private TextView mTopLevelLabel;
private Drawable mHeaderIcon;
-
+ // We manually change the spinner's selection if the edited bookmark is not
+ // in the root folder. This makes sure our listener ignores this change.
+ private boolean mIgnoreSelectionChange;
private static class Folder {
String Name;
long Id;
@@ -198,11 +200,22 @@
if (data != null) {
Folder folder = (Folder) data;
mCurrentFolder = folder.Id;
- int resource = mCurrentFolder == mRootFolder ?
- R.drawable.ic_menu_bookmarks :
- com.android.internal.R.drawable.ic_menu_archive;
- Drawable drawable = getResources().getDrawable(resource);
- updateFolderLabel(folder.Name, drawable);
+ if (mCurrentFolder == mRootFolder) {
+ // The Spinner changed to show "Other folder ..." Change
+ // it back to "Bookmarks", which is position 0 if we are
+ // editing a folder, 1 otherwise.
+ mFolder.setSelection(mEditingFolder ? 0 : 1);
+ } else {
+ ((TextView) mFolder.getSelectedView()).setText(folder.Name);
+ }
+ }
+ } else {
+ // The user canceled selecting a folder. Revert back to the earlier
+ // selection.
+ if (mSaveToHomeScreen) {
+ mFolder.setSelection(0);
+ } else {
+ mFolder.setSelection(mEditingFolder ? 0 : 1);
}
}
}
@@ -230,15 +243,6 @@
} else {
finish();
}
- } else if (v == mFolder) {
- PopupMenu popup = new PopupMenu(this, mFolder);
- popup.getMenuInflater().inflate(R.menu.folder_choice,
- popup.getMenu());
- if (mEditingFolder) {
- popup.getMenu().removeItem(R.id.home_screen);
- }
- popup.setOnMenuItemClickListener(this);
- popup.show();
} else if (v == mAddNewFolder) {
setShowFolderNamer(true);
mFolderNamer.setText(R.string.new_folder);
@@ -254,25 +258,32 @@
}
@Override
- public boolean onMenuItemClick(MenuItem item) {
- switch(item.getItemId()) {
- case R.id.bookmarks:
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ if (mIgnoreSelectionChange) {
+ mIgnoreSelectionChange = false;
+ return;
+ }
+ // In response to the spinner changing.
+ int intId = (int) id;
+ switch (intId) {
+ case FolderSpinnerAdapter.ROOT_FOLDER:
mCurrentFolder = mRootFolder;
- updateFolderLabel(item.getTitle(), item.getIcon());
mSaveToHomeScreen = false;
break;
- case R.id.home_screen:
+ case FolderSpinnerAdapter.HOME_SCREEN:
// Create a short cut to the home screen
mSaveToHomeScreen = true;
- updateFolderLabel(item.getTitle(), item.getIcon());
break;
- case R.id.other:
+ case FolderSpinnerAdapter.OTHER_FOLDER:
switchToFolderSelector();
break;
default:
- return false;
+ break;
}
- return true;
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
}
private void completeOrCancelFolderNaming(boolean cancel) {
@@ -317,6 +328,8 @@
}
private void switchToFolderSelector() {
+ // Set the list to the top in case it is scrolled.
+ mListView.setSelection(0);
mDefaultView.setVisibility(View.GONE);
mFolderSelector.setVisibility(View.VISIBLE);
mCrumbHolder.setVisibility(View.VISIBLE);
@@ -399,9 +412,7 @@
moveCursorToFolder(cursor, parent, idIndex);
String name = cursor.getString(titleIndex);
if (parent == mCurrentFolder) {
- Drawable draw = getResources().getDrawable(
- com.android.internal.R.drawable.ic_menu_archive);
- updateFolderLabel(name, draw);
+ ((TextView) mFolder.getSelectedView()).setText(name);
}
folderStack.push(new Folder(name, parent));
parent = cursor.getLong(parentIndex);
@@ -448,18 +459,6 @@
}
}
- /**
- * Update the name and image to show where the bookmark will be added
- * @param name Name of the location to save (folder name, bookmarks, or home
- * screen.
- * @param drawable Image to show corresponding to the save location.
- */
- void updateFolderLabel(CharSequence name, Drawable drawable) {
- mFolder.setText(name);
- mFolder.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null,
- null);
- }
-
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
@@ -573,8 +572,15 @@
mCancelButton = findViewById(R.id.cancel);
mCancelButton.setOnClickListener(this);
- mFolder = (TextView) findViewById(R.id.folder);
- mFolder.setOnClickListener(this);
+ mFolder = (Spinner) findViewById(R.id.folder);
+ mFolder.setAdapter(new FolderSpinnerAdapter(!mEditingFolder));
+ if (!mEditingFolder) {
+ // Initially the "Bookmarks" folder should be showing, rather than
+ // the home screen. In the editing folder case, home screen is not
+ // an option, so "Bookmarks" folder is already at the top.
+ mFolder.setSelection(FolderSpinnerAdapter.ROOT_FOLDER);
+ }
+ mFolder.setOnItemSelectedListener(this);
mDefaultView = findViewById(R.id.default_view);
mFolderSelector = findViewById(R.id.folder_selector);
@@ -609,6 +615,11 @@
if (mCurrentFolder != mRootFolder) {
// Find all the folders
manager.initLoader(LOADER_ID_ALL_FOLDERS, null, this);
+ // Since we're not in the root folder, change the selection to other
+ // folder now. The text will get changed once we select the correct
+ // folder.
+ mIgnoreSelectionChange = true;
+ mFolder.setSelection(mEditingFolder ? 1 : 2);
} else {
setShowBookmarkIcon(true);
}
diff --git a/src/com/android/browser/BookmarkUtils.java b/src/com/android/browser/BookmarkUtils.java
index f261cb3..b548607 100644
--- a/src/com/android/browser/BookmarkUtils.java
+++ b/src/com/android/browser/BookmarkUtils.java
@@ -206,12 +206,10 @@
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String accountType = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
String accountName = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
- if (!TextUtils.isEmpty(accountName) && !TextUtils.isEmpty(accountType)) {
- ub.appendQueryParameter(
- BrowserContract.Bookmarks.PARAM_ACCOUNT_NAME,accountName);
- ub.appendQueryParameter(
- BrowserContract.Bookmarks.PARAM_ACCOUNT_TYPE, accountType);
- }
+ ub.appendQueryParameter(
+ BrowserContract.Bookmarks.PARAM_ACCOUNT_NAME,accountName);
+ ub.appendQueryParameter(
+ BrowserContract.Bookmarks.PARAM_ACCOUNT_TYPE, accountType);
return ub;
}
}
diff --git a/src/com/android/browser/Bookmarks.java b/src/com/android/browser/Bookmarks.java
index 9a5b6f0..beea489 100644
--- a/src/com/android/browser/Bookmarks.java
+++ b/src/com/android/browser/Bookmarks.java
@@ -100,8 +100,8 @@
* will remain in the database, but only as a history item, and not as a
* bookmarked site.
* @param context Context of the calling Activity. This is used to make
- * Toast confirming that the bookmark has been removed. If the
- * caller provides null, the Toast will not be shown.
+ * Toast confirming that the bookmark has been removed and to
+ * lookup the correct content uri. It must not be null.
* @param cr The ContentResolver being used to remove the bookmark.
* @param url URL of the website to be removed.
*/
@@ -127,7 +127,8 @@
cursor.getLong(0));
cr.delete(uri, null, null);
if (context != null) {
- Toast.makeText(context, R.string.removed_from_bookmarks, Toast.LENGTH_LONG).show();
+ Toast.makeText(context, R.string.removed_from_bookmarks,
+ Toast.LENGTH_LONG).show();
}
} catch (IllegalStateException e) {
Log.e(LOGTAG, "removeFromBookmarks", e);
diff --git a/src/com/android/browser/BookmarksLoader.java b/src/com/android/browser/BookmarksLoader.java
index 650c3ca..e2f8941 100644
--- a/src/com/android/browser/BookmarksLoader.java
+++ b/src/com/android/browser/BookmarksLoader.java
@@ -66,10 +66,7 @@
}
static Uri addAccount(Uri uri, String accountType, String accountName) {
- if (!TextUtils.isEmpty(accountType) && !TextUtils.isEmpty(accountName)) {
- return uri.buildUpon().appendQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE, accountType).
- appendQueryParameter(Bookmarks.PARAM_ACCOUNT_NAME, accountName).build();
- }
- return uri;
+ return uri.buildUpon().appendQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE, accountType).
+ appendQueryParameter(Bookmarks.PARAM_ACCOUNT_NAME, accountName).build();
}
}
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index d8e8177..41d3749 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -126,10 +126,8 @@
String accountType = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
String accountName = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
Uri.Builder combinedBuilder = Combined.CONTENT_URI.buildUpon();
- if (!TextUtils.isEmpty(accountName) && !TextUtils.isEmpty(accountName)) {
- combinedBuilder.appendQueryParameter(BrowserContract.Bookmarks.PARAM_ACCOUNT_TYPE, accountType);
- combinedBuilder.appendQueryParameter(BrowserContract.Bookmarks.PARAM_ACCOUNT_NAME, accountName);
- }
+ combinedBuilder.appendQueryParameter(BrowserContract.Bookmarks.PARAM_ACCOUNT_TYPE, accountType);
+ combinedBuilder.appendQueryParameter(BrowserContract.Bookmarks.PARAM_ACCOUNT_NAME, accountName);
switch (id) {
case LOADER_HISTORY: {
diff --git a/src/com/android/browser/DataController.java b/src/com/android/browser/DataController.java
index aa233fd..a56fce8 100644
--- a/src/com/android/browser/DataController.java
+++ b/src/com/android/browser/DataController.java
@@ -100,7 +100,12 @@
}
public void queryBookmarkStatus(String url, OnQueryUrlIsBookmark replyTo) {
- mDataHandler.sendMessage(QUERY_URL_IS_BOOKMARK, url, replyTo);
+ if (url == null || url.trim().length() == 0) {
+ // null or empty url is never a bookmark
+ replyTo.onQueryUrlIsBookmark(url, false);
+ return;
+ }
+ mDataHandler.sendMessage(QUERY_URL_IS_BOOKMARK, url.trim(), replyTo);
}
// The standard Handler and Message classes don't allow the queue manipulation
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index c4edda6..320d3b3 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -546,6 +546,9 @@
mInPageLoad = false;
// Sync state (in case of stop/timeout)
mCurrentState.mUrl = view.getUrl();
+ if (mCurrentState.mUrl == null) {
+ mCurrentState.mUrl = url != null ? url : "";
+ }
mCurrentState.mTitle = view.getTitle();
mCurrentState.mFavicon = view.getFavicon();
if (!URLUtil.isHttpsUrl(mCurrentState.mUrl)) {
diff --git a/src/com/android/browser/TabScrollView.java b/src/com/android/browser/TabScrollView.java
index 04ed5a3..f501e64 100644
--- a/src/com/android/browser/TabScrollView.java
+++ b/src/com/android/browser/TabScrollView.java
@@ -124,7 +124,6 @@
void addTab(View tab) {
mContentView.addView(tab);
- animateIn(tab);
tab.setActivated(false);
}
@@ -135,7 +134,7 @@
} else if (ix < mSelected) {
mSelected--;
}
- animateOut(tab);
+ mContentView.removeView(tab);
}
private void ensureChildVisible(View child) {
@@ -172,25 +171,27 @@
}
}
- private void animateIn(View tab) {
- ObjectAnimator animator = ObjectAnimator.ofInt(tab, "TranslationX", 500, 0);
- animator.setDuration(mAnimationDuration);
- animator.start();
- }
-
- private void animateOut(final View tab) {
- ObjectAnimator animator = ObjectAnimator.ofInt(
- tab, "TranslationX", 0, getScrollX() - tab.getRight());
- animator.setDuration(mAnimationDuration);
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mContentView.removeView(tab);
- }
- });
- animator.setInterpolator(new AccelerateInterpolator());
- animator.start();
- }
+// TODO: These animations are broken and don't work correctly, removing for now
+// as animateOut is actually causing issues
+// private void animateIn(View tab) {
+// ObjectAnimator animator = ObjectAnimator.ofInt(tab, "TranslationX", 500, 0);
+// animator.setDuration(mAnimationDuration);
+// animator.start();
+// }
+//
+// private void animateOut(final View tab) {
+// ObjectAnimator animator = ObjectAnimator.ofInt(
+// tab, "TranslationX", 0, getScrollX() - tab.getRight());
+// animator.setDuration(mAnimationDuration);
+// animator.addListener(new AnimatorListenerAdapter() {
+// @Override
+// public void onAnimationEnd(Animator animation) {
+// mContentView.removeView(tab);
+// }
+// });
+// animator.setInterpolator(new AccelerateInterpolator());
+// animator.start();
+// }
private void animateScroll(int newscroll) {
ObjectAnimator animator = ObjectAnimator.ofInt(this, "scroll", getScrollX(), newscroll);
diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java
index 6cdd071..cd0afeb 100644
--- a/src/com/android/browser/UrlHandler.java
+++ b/src/com/android/browser/UrlHandler.java
@@ -133,51 +133,8 @@
}
}
- Intent intent;
- // perform generic parsing of the URI to turn it into an Intent.
- try {
- intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
- } catch (URISyntaxException ex) {
- Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage());
- return false;
- }
-
- // check whether the intent can be resolved. If not, we will see
- // whether we can download it from the Market.
- if (mActivity.getPackageManager().resolveActivity(intent, 0) == null) {
- String packagename = intent.getPackage();
- if (packagename != null) {
- intent = new Intent(Intent.ACTION_VIEW, Uri
- .parse("market://search?q=pname:" + packagename));
- intent.addCategory(Intent.CATEGORY_BROWSABLE);
- mActivity.startActivity(intent);
- // before leaving BrowserActivity, close the empty child tab.
- // If a new tab is created through JavaScript open to load this
- // url, we would like to close it as we will load this url in a
- // different Activity.
- mController.closeEmptyChildTab();
- return true;
- } else {
- return false;
- }
- }
-
- // sanitize the Intent, ensuring web pages can not bypass browser
- // security (only access to BROWSABLE activities).
- intent.addCategory(Intent.CATEGORY_BROWSABLE);
- intent.setComponent(null);
- try {
- if (mActivity.startActivityIfNeeded(intent, -1)) {
- // before leaving BrowserActivity, close the empty child tab.
- // If a new tab is created through JavaScript open to load this
- // url, we would like to close it as we will load this url in a
- // different Activity.
- mController.closeEmptyChildTab();
- return true;
- }
- } catch (ActivityNotFoundException ex) {
- // ignore the error. If no application can handle the URL,
- // eg about:blank, assume the browser can handle it.
+ if (startActivityForUrl(url)) {
+ return true;
}
if (mController.isMenuDown()) {
@@ -185,9 +142,62 @@
mActivity.closeOptionsMenu();
return true;
}
+
return false;
}
+ boolean startActivityForUrl(String url)
+ {
+ Intent intent;
+ // perform generic parsing of the URI to turn it into an Intent.
+ try {
+ intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
+ } catch (URISyntaxException ex) {
+ Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage());
+ return false;
+ }
+
+ // check whether the intent can be resolved. If not, we will see
+ // whether we can download it from the Market.
+ if (mActivity.getPackageManager().resolveActivity(intent, 0) == null) {
+ String packagename = intent.getPackage();
+ if (packagename != null) {
+ intent = new Intent(Intent.ACTION_VIEW, Uri
+ .parse("market://search?q=pname:" + packagename));
+ intent.addCategory(Intent.CATEGORY_BROWSABLE);
+ mActivity.startActivity(intent);
+ // before leaving BrowserActivity, close the empty child tab.
+ // If a new tab is created through JavaScript open to load this
+ // url, we would like to close it as we will load this url in a
+ // different Activity.
+ mController.closeEmptyChildTab();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ // sanitize the Intent, ensuring web pages can not bypass browser
+ // security (only access to BROWSABLE activities).
+ intent.addCategory(Intent.CATEGORY_BROWSABLE);
+ intent.setComponent(null);
+ try {
+ if (mActivity.startActivityIfNeeded(intent, -1)) {
+ // before leaving BrowserActivity, close the empty child tab.
+ // If a new tab is created through JavaScript open to load this
+ // url, we would like to close it as we will load this url in a
+ // different Activity.
+ mController.closeEmptyChildTab();
+ return true;
+ }
+ } catch (ActivityNotFoundException ex) {
+ // ignore the error. If no application can handle the URL,
+ // eg about:blank, assume the browser can handle it.
+ }
+
+ return false;
+ }
+
// Url for issuing the uber token.
private final static Uri ISSUE_AUTH_TOKEN_URL = Uri.parse(
"https://www.google.com/accounts/IssueAuthToken?service=gaia&Session=false");
@@ -373,7 +383,7 @@
}
protected void onPostExecute(String result) {
- mController.loadUrl(mWebView, result);
+ startActivityForUrl(result);
}
}
diff --git a/src/com/android/browser/WebStorageSizeManager.java b/src/com/android/browser/WebStorageSizeManager.java
index 5f76f72..bd7f8e6 100644
--- a/src/com/android/browser/WebStorageSizeManager.java
+++ b/src/com/android/browser/WebStorageSizeManager.java
@@ -141,11 +141,11 @@
}
public long getFreeSpaceSizeBytes() {
- return mFs.getAvailableBlocks() * mFs.getBlockSize();
+ return (long)(mFs.getAvailableBlocks()) * mFs.getBlockSize();
}
public long getTotalSizeBytes() {
- return mFs.getBlockCount() * mFs.getBlockSize();
+ return (long)(mFs.getBlockCount()) * mFs.getBlockSize();
}
};
diff --git a/src/com/android/browser/addbookmark/FolderSpinner.java b/src/com/android/browser/addbookmark/FolderSpinner.java
new file mode 100644
index 0000000..789c1f1
--- /dev/null
+++ b/src/com/android/browser/addbookmark/FolderSpinner.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2011 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.addbookmark;
+
+import android.content.Context;
+import android.view.View;
+import android.util.AttributeSet;
+import android.widget.Spinner;
+
+/**
+ * Special Spinner class which calls onItemSelected even if the item selected
+ * was already selected. In that case, it passes null for the View.
+ */
+public class FolderSpinner extends Spinner {
+ public FolderSpinner(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public void setSelection(int position) {
+ int oldPosition = getSelectedItemPosition();
+ super.setSelection(position);
+ if (oldPosition == position) {
+ // Normally this is not called because the item did not actually
+ // change, but in this case, we still want it to be called.
+ long id = getAdapter().getItemId(position);
+ getOnItemSelectedListener().onItemSelected(this, null, position, id);
+ }
+ }
+}
+
diff --git a/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java b/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java
new file mode 100644
index 0000000..5c17bfa
--- /dev/null
+++ b/src/com/android/browser/addbookmark/FolderSpinnerAdapter.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2011 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.addbookmark;
+
+import com.android.browser.R;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.DataSetObserver;
+import android.graphics.drawable.Drawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Adapter;
+import android.widget.SpinnerAdapter;
+import android.widget.TextView;
+
+/**
+ * SpinnerAdapter used in the AddBookmarkPage to select where to save a
+ * bookmark/folder.
+ */
+public class FolderSpinnerAdapter implements SpinnerAdapter {
+ private boolean mIncludeHomeScreen;
+
+ public static final int HOME_SCREEN = 0;
+ public static final int ROOT_FOLDER = 1;
+ public static final int OTHER_FOLDER = 2;
+
+ public FolderSpinnerAdapter(boolean includeHomeScreen) {
+ mIncludeHomeScreen = includeHomeScreen;
+ }
+
+ @Override
+ public View getDropDownView(int position, View convertView, ViewGroup parent) {
+ int labelResource;
+ int drawableResource;
+ if (!mIncludeHomeScreen) {
+ position++;
+ }
+ switch (position) {
+ case HOME_SCREEN:
+ labelResource = R.string.add_to_homescreen_menu_option;
+ drawableResource = com.android.internal.R.drawable.ic_menu_home;
+ break;
+ case ROOT_FOLDER:
+ labelResource = R.string.add_to_bookmarks_menu_option;
+ drawableResource = R.drawable.ic_menu_bookmarks;
+ break;
+ case OTHER_FOLDER:
+ labelResource = R.string.add_to_other_folder_menu_option;
+ drawableResource = com.android.internal.R.drawable.ic_menu_archive;
+ break;
+ default:
+ labelResource = 0;
+ drawableResource = 0;
+ // assert
+ break;
+ }
+ Context context = parent.getContext();
+ LayoutInflater factory = LayoutInflater.from(context);
+ TextView textView = (TextView) factory.inflate(R.layout.add_to_option, null);
+ textView.setText(labelResource);
+ Drawable drawable = context.getResources().getDrawable(drawableResource);
+ textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null,
+ null, null);
+ return textView;
+ }
+
+ @Override
+ public void registerDataSetObserver(DataSetObserver observer) {
+ }
+
+ @Override
+ public void unregisterDataSetObserver(DataSetObserver observer) {
+ }
+
+ @Override
+ public int getCount() {
+ return mIncludeHomeScreen ? 3 : 2;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return null;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ long id = position;
+ if (!mIncludeHomeScreen) {
+ id++;
+ }
+ return id;
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ return getDropDownView(position, convertView, parent);
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ // Never want to recycle views
+ return Adapter.IGNORE_ITEM_VIEW_TYPE;
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ return 1;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return false;
+ }
+}
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 358ee2d..919a135 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -65,7 +65,8 @@
public class BrowserProvider2 extends SQLiteContentProvider {
static final String LEGACY_AUTHORITY = "browser";
- static final Uri LEGACY_AUTHORITY_URI = new Uri.Builder().authority(LEGACY_AUTHORITY).build();
+ static final Uri LEGACY_AUTHORITY_URI = new Uri.Builder()
+ .authority(LEGACY_AUTHORITY).scheme("content").build();
static final String TABLE_BOOKMARKS = "bookmarks";
static final String TABLE_HISTORY = "history";
@@ -593,6 +594,33 @@
return null;
}
+ boolean isNullAccount(String account) {
+ if (account == null) return true;
+ account = account.trim();
+ return account.length() == 0 || account.equals("null");
+ }
+
+ Object[] getSelectionWithAccounts(Uri uri, String selection, String[] selectionArgs) {
+ // Look for account info
+ String accountType = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE);
+ String accountName = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_NAME);
+ boolean hasAccounts = false;
+ if (accountType != null && accountName != null) {
+ if (!isNullAccount(accountType) && !isNullAccount(accountName)) {
+ selection = DatabaseUtils.concatenateWhere(selection,
+ Bookmarks.ACCOUNT_TYPE + "=? AND " + Bookmarks.ACCOUNT_NAME + "=? ");
+ selectionArgs = DatabaseUtils.appendSelectionArgs(selectionArgs,
+ new String[] { accountType, accountName });
+ hasAccounts = true;
+ } else {
+ selection = DatabaseUtils.concatenateWhere(selection,
+ Bookmarks.ACCOUNT_NAME + " IS NULL AND " +
+ Bookmarks.ACCOUNT_TYPE + " IS NULL");
+ }
+ }
+ return new Object[] { selection, selectionArgs, hasAccounts };
+ }
+
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
@@ -632,29 +660,14 @@
new String[] { Long.toString(ContentUris.parseId(uri)) });
}
- // Look for account info
- String accountType = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE);
- String accountName = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_NAME);
- // Only add it if it isn't already in the selection
- if (selection == null ||
- (!selection.contains(Bookmarks.ACCOUNT_NAME)
- && !selection.contains(Bookmarks.ACCOUNT_TYPE))) {
- if (!TextUtils.isEmpty(accountType) && !TextUtils.isEmpty(accountName)) {
- selection = DatabaseUtils.concatenateWhere(selection,
- Bookmarks.ACCOUNT_TYPE + "=? AND " + Bookmarks.ACCOUNT_NAME + "=? ");
- selectionArgs = DatabaseUtils.appendSelectionArgs(selectionArgs,
- new String[] { accountType, accountName });
- } else {
- selection = DatabaseUtils.concatenateWhere(selection,
- Bookmarks.ACCOUNT_TYPE + " IS NULL AND " +
- Bookmarks.ACCOUNT_NAME + " IS NULL ");
- }
- }
+ Object[] withAccount = getSelectionWithAccounts(uri, selection, selectionArgs);
+ selection = (String) withAccount[0];
+ selectionArgs = (String[]) withAccount[1];
+ boolean hasAccounts = (Boolean) withAccount[2];
// Set a default sort order if one isn't specified
if (TextUtils.isEmpty(sortOrder)) {
- if (!TextUtils.isEmpty(accountType)
- && !TextUtils.isEmpty(accountName)) {
+ if (hasAccounts) {
sortOrder = DEFAULT_BOOKMARKS_SORT_ORDER_SYNC;
} else {
sortOrder = DEFAULT_BOOKMARKS_SORT_ORDER;
@@ -671,7 +684,7 @@
boolean useAccount = false;
String accountType = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE);
String accountName = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_NAME);
- if (!TextUtils.isEmpty(accountType) && !TextUtils.isEmpty(accountName)) {
+ if (!isNullAccount(accountType) && !isNullAccount(accountName)) {
useAccount = true;
}
@@ -805,6 +818,10 @@
&& projection == null) {
projection = Browser.HISTORY_PROJECTION;
}
+ if (match == LEGACY) {
+ uri = BookmarkUtils.addAccountInfo(getContext(),
+ uri.buildUpon()).build();
+ }
String[] args = createCombinedQuery(uri, projection, qb);
if (selectionArgs == null) {
selectionArgs = args;
@@ -876,25 +893,22 @@
private String[] createCombinedQuery(
Uri uri, String[] projection, SQLiteQueryBuilder qb) {
String[] args = null;
- // Look for account info
- String accountType = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE);
- String accountName = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_NAME);
StringBuilder whereBuilder = new StringBuilder(128);
whereBuilder.append(Bookmarks.IS_DELETED);
- whereBuilder.append(" = 0 AND ");
- if (!TextUtils.isEmpty(accountName) && !TextUtils.isEmpty(accountType)) {
- whereBuilder.append(Bookmarks.ACCOUNT_NAME);
- whereBuilder.append("=? AND ");
- whereBuilder.append(Bookmarks.ACCOUNT_TYPE);
- whereBuilder.append("=?");
- // We use this where twice
- args = new String[] { accountName, accountType,
- accountName, accountType};
- } else {
- whereBuilder.append(Bookmarks.ACCOUNT_NAME);
- whereBuilder.append(" IS NULL AND ");
- whereBuilder.append(Bookmarks.ACCOUNT_TYPE);
- whereBuilder.append(" IS NULL");
+ whereBuilder.append(" = 0");
+ // Look for account info
+ Object[] withAccount = getSelectionWithAccounts(uri, null, null);
+ String selection = (String) withAccount[0];
+ String[] selectionArgs = (String[]) withAccount[1];
+ if (selection != null) {
+ whereBuilder.append(" AND " + selection);
+ if (selectionArgs != null) {
+ // We use the selection twice, hence we need to duplicate the args
+ args = new String[selectionArgs.length * 2];
+ System.arraycopy(selectionArgs, 0, args, 0, selectionArgs.length);
+ System.arraycopy(selectionArgs, 0, args, selectionArgs.length,
+ selectionArgs.length);
+ }
}
String where = whereBuilder.toString();
// Build the bookmark subquery for history union subquery
@@ -921,31 +935,18 @@
return args;
}
- int deleteBookmarks(Uri uri, String selection, String[] selectionArgs,
+ int deleteBookmarks(String selection, String[] selectionArgs,
boolean callerIsSyncAdapter) {
//TODO cascade deletes down from folders
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- // Look for account info
- String accountType = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE);
- String accountName = uri.getQueryParameter(Bookmarks.PARAM_ACCOUNT_NAME);
- if (!TextUtils.isEmpty(accountType) && !TextUtils.isEmpty(accountName)) {
- selection = DatabaseUtils.concatenateWhere(selection,
- Bookmarks.ACCOUNT_TYPE + "=? AND " + Bookmarks.ACCOUNT_NAME + "=? ");
- selectionArgs = DatabaseUtils.appendSelectionArgs(selectionArgs,
- new String[] { accountType, accountName });
- } else {
- selection = DatabaseUtils.concatenateWhere(selection,
- Bookmarks.ACCOUNT_TYPE + " IS NULL AND " +
- Bookmarks.ACCOUNT_NAME + " IS NULL ");
- }
if (callerIsSyncAdapter) {
return db.delete(TABLE_BOOKMARKS, selection, selectionArgs);
}
ContentValues values = new ContentValues();
values.put(Bookmarks.DATE_MODIFIED, System.currentTimeMillis());
values.put(Bookmarks.IS_DELETED, 1);
- return updateInTransaction(Bookmarks.CONTENT_URI, values,
- selection, selectionArgs, callerIsSyncAdapter);
+ return updateBookmarksInTransaction(values, selection, selectionArgs,
+ callerIsSyncAdapter);
}
@Override
@@ -962,7 +963,11 @@
// fall through
}
case BOOKMARKS: {
- int deleted = deleteBookmarks(uri, selection, selectionArgs, callerIsSyncAdapter);
+ // Look for account info
+ Object[] withAccount = getSelectionWithAccounts(uri, selection, selectionArgs);
+ selection = (String) withAccount[0];
+ selectionArgs = (String[]) withAccount[1];
+ int deleted = deleteBookmarks(selection, selectionArgs, callerIsSyncAdapter);
pruneImages();
return deleted;
}
@@ -1027,7 +1032,7 @@
boolean isBookmark = c.getInt(1) != 0;
String url = c.getString(2);
if (isBookmark) {
- deleted += deleteBookmarks(uri, Bookmarks._ID + "=?",
+ deleted += deleteBookmarks(Bookmarks._ID + "=?",
new String[] { Long.toString(id) },
callerIsSyncAdapter);
db.delete(TABLE_HISTORY, History.URL + "=?",
@@ -1041,7 +1046,7 @@
return deleted;
}
}
- throw new UnsupportedOperationException("Unknown update URI " + uri);
+ throw new UnsupportedOperationException("Unknown delete URI " + uri);
}
long queryDefaultFolderId(String accountName, String accountType) {
@@ -1287,6 +1292,9 @@
// fall through
}
case BOOKMARKS: {
+ Object[] withAccount = getSelectionWithAccounts(uri, selection, selectionArgs);
+ selection = (String) withAccount[0];
+ selectionArgs = (String[]) withAccount[1];
int updated = updateBookmarksInTransaction(values, selection, selectionArgs,
callerIsSyncAdapter);
pruneImages();
@@ -1347,9 +1355,9 @@
String[] selectionArgs, boolean callerIsSyncAdapter) {
int count = 0;
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- Cursor cursor = query(Bookmarks.CONTENT_URI,
+ Cursor cursor = db.query(TABLE_BOOKMARKS,
new String[] { Bookmarks._ID, Bookmarks.VERSION, Bookmarks.URL },
- selection, selectionArgs, null);
+ selection, selectionArgs, null, null, null);
try {
String[] args = new String[1];
// Mark the bookmark dirty if the caller isn't a sync adapter
diff --git a/src/com/android/browser/widget/BookmarkListWidgetService.java b/src/com/android/browser/widget/BookmarkListWidgetService.java
index 39751e6..4d72d41 100644
--- a/src/com/android/browser/widget/BookmarkListWidgetService.java
+++ b/src/com/android/browser/widget/BookmarkListWidgetService.java
@@ -85,7 +85,7 @@
mUiHandler = new Handler();
mBookmarksObserver = new BookmarksObserver(mUiHandler);
getContentResolver().registerContentObserver(
- BrowserContract.AUTHORITY_URI, true, mBookmarksObserver);
+ BrowserContract.Bookmarks.CONTENT_URI, true, mBookmarksObserver);
}
@Override
@@ -337,12 +337,10 @@
uri = BrowserContract.Bookmarks.CONTENT_URI;
where = Bookmarks.IS_FOLDER + " == 0";
}
- if (!TextUtils.isEmpty(mAccountType) && !TextUtils.isEmpty(mAccountName)) {
- uri = uri.buildUpon()
- .appendQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE, mAccountType)
- .appendQueryParameter(Bookmarks.PARAM_ACCOUNT_NAME, mAccountName)
- .build();
- }
+ uri = uri.buildUpon()
+ .appendQueryParameter(Bookmarks.PARAM_ACCOUNT_TYPE, mAccountType)
+ .appendQueryParameter(Bookmarks.PARAM_ACCOUNT_NAME, mAccountName)
+ .build();
Cursor c = null;
try {
c = mContext.getContentResolver().query(uri, PROJECTION,