am f61513dc: Import revised translations.  DO NOT MERGE
diff --git a/res/layout/history_item.xml b/res/layout/history_item.xml
index 4522a75..a0b031a 100644
--- a/res/layout/history_item.xml
+++ b/res/layout/history_item.xml
@@ -19,10 +19,7 @@
         android:layout_height="wrap_content"
         android:minHeight="?android:attr/listPreferredItemHeight"
         android:orientation="horizontal"
-        android:paddingRight="6dip"
         android:paddingLeft="6dip"
-        android:paddingTop="5dip"
-        android:paddingBottom="5dip"
         android:gravity="center_vertical"
         >
     <ImageView android:id="@+id/favicon"
@@ -58,7 +55,8 @@
     </LinearLayout>
     <CheckBox android:id="@+id/star"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
+            android:layout_height="fill_parent"
+            android:paddingRight="6dip"
             android:focusable="false"
             android:button="@android:drawable/btn_star"
             />
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 1104d5e..594f985 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -18,6 +18,7 @@
 
 import android.app.Activity;
 import android.content.ContentResolver;
+import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.database.Cursor;
@@ -116,7 +117,9 @@
      */
     private class SaveBookmarkRunnable implements Runnable {
         private Message mMessage;
-        public SaveBookmarkRunnable(Message msg) {
+        private Context mContext;
+        public SaveBookmarkRunnable(Context ctx, Message msg) {
+            mContext = ctx;
             mMessage = msg;
         }
         public void run() {
@@ -135,7 +138,7 @@
                 final ContentResolver cr = getContentResolver();
                 Bookmarks.addBookmark(null, cr, url, title, thumbnail, true);
                 if (touchIconUrl != null) {
-                    new DownloadTouchIcon(cr, url).execute(mTouchIconUrl);
+                    new DownloadTouchIcon(mContext, cr, url).execute(mTouchIconUrl);
                 }
                 mMessage.arg1 = 1;
             } catch (IllegalStateException e) {
@@ -237,7 +240,7 @@
             Message msg = Message.obtain(mHandler, SAVE_BOOKMARK);
             msg.setData(bundle);
             // Start a new thread so as to not slow down the UI
-            Thread t = new Thread(new SaveBookmarkRunnable(msg));
+            Thread t = new Thread(new SaveBookmarkRunnable(getApplicationContext(), msg));
             t.start();
             setResult(RESULT_OK);
             LogTag.logBookmarkAdded(url, "bookmarkview");
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index a30bf83..6271e24 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -2304,6 +2304,10 @@
                                         getString(
                                         R.string.choosertitle_sharevia));
                             }
+                            // close the cursor after its used
+                            if (c != null) {
+                                c.close();
+                            }
                             break;
                         case R.id.copy_link_context_menu_id:
                             copy(url);
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java
index f8574ed..72ec819 100644
--- a/src/com/android/browser/BrowserProvider.java
+++ b/src/com/android/browser/BrowserProvider.java
@@ -152,7 +152,8 @@
     // 20 -> 21 Added touch_icon
     // 21 -> 22 Remove "clientid"
     // 22 -> 23 Added user_entered
-    private static final int DATABASE_VERSION = 23;
+    // 23 -> 24 Url not allowed to be null anymore.
+    private static final int DATABASE_VERSION = 24;
 
     // Regular expression which matches http://, followed by some stuff, followed by
     // optionally a trailing slash, all matched as separate groups.
@@ -232,7 +233,7 @@
             db.execSQL("CREATE TABLE bookmarks (" +
                     "_id INTEGER PRIMARY KEY," +
                     "title TEXT," +
-                    "url TEXT," +
+                    "url TEXT NOT NULL," +
                     "visits INTEGER," +
                     "date LONG," +
                     "created LONG," +
@@ -284,6 +285,27 @@
             }
             if (oldVersion < 23) {
                 db.execSQL("ALTER TABLE bookmarks ADD COLUMN user_entered INTEGER;");
+            }
+            if (oldVersion < 24) {
+                /* SQLite does not support ALTER COLUMN, hence the lengthy code. */
+                db.execSQL("DELETE FROM bookmarks WHERE url IS NULL;");
+                db.execSQL("ALTER TABLE bookmarks RENAME TO bookmarks_temp;");
+                db.execSQL("CREATE TABLE bookmarks (" +
+                        "_id INTEGER PRIMARY KEY," +
+                        "title TEXT," +
+                        "url TEXT NOT NULL," +
+                        "visits INTEGER," +
+                        "date LONG," +
+                        "created LONG," +
+                        "description TEXT," +
+                        "bookmark INTEGER," +
+                        "favicon BLOB DEFAULT NULL," +
+                        "thumbnail BLOB DEFAULT NULL," +
+                        "touch_icon BLOB DEFAULT NULL," +
+                        "user_entered INTEGER" +
+                        ");");
+                db.execSQL("INSERT INTO bookmarks SELECT * FROM bookmarks_temp;");
+                db.execSQL("DROP TABLE bookmarks_temp;");
             } else {
                 db.execSQL("DROP TABLE IF EXISTS bookmarks");
                 db.execSQL("DROP TABLE IF EXISTS searches");
diff --git a/src/com/android/browser/DownloadTouchIcon.java b/src/com/android/browser/DownloadTouchIcon.java
index b5369ae..e8a912c 100644
--- a/src/com/android/browser/DownloadTouchIcon.java
+++ b/src/com/android/browser/DownloadTouchIcon.java
@@ -19,19 +19,23 @@
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
+import android.content.Context;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.http.AndroidHttpClient;
+import android.net.Proxy;
 import android.os.AsyncTask;
 import android.provider.Browser;
 import android.webkit.WebView;
 
 
 import org.apache.http.HttpEntity;
+import org.apache.http.HttpHost;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.params.HttpClientParams;
+import org.apache.http.conn.params.ConnRouteParams;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -43,10 +47,12 @@
     private final String mOriginalUrl;
     private final String mUrl;
     private final String mUserAgent;
+    private final Context mContext;
     /* package */ Tab mTab;
 
-    public DownloadTouchIcon(Tab tab, ContentResolver cr, WebView view) {
+    public DownloadTouchIcon(Tab tab, Context ctx, ContentResolver cr, WebView view) {
         mTab = tab;
+        mContext = ctx;
         mContentResolver = cr;
         // Store these in case they change.
         mOriginalUrl = view.getOriginalUrl();
@@ -54,8 +60,9 @@
         mUserAgent = view.getSettings().getUserAgentString();
     }
 
-    public DownloadTouchIcon(ContentResolver cr, String url) {
+    public DownloadTouchIcon(Context ctx, ContentResolver cr, String url) {
         mTab = null;
+        mContext = ctx;
         mContentResolver = cr;
         mOriginalUrl = null;
         mUrl = url;
@@ -71,6 +78,11 @@
 
             AndroidHttpClient client = AndroidHttpClient.newInstance(
                     mUserAgent);
+            HttpHost httpHost = Proxy.getPreferredHttpHost(mContext, url);
+            if (httpHost != null) {
+                ConnRouteParams.setDefaultProxy(client.getParams(), httpHost);
+            }
+
             HttpGet request = new HttpGet(url);
 
             // Follow redirects
diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java
index 1e4debf..9bd0cf9 100644
--- a/src/com/android/browser/FetchUrlMimeType.java
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -17,12 +17,15 @@
 package com.android.browser;
 
 import android.content.ContentValues;
+import android.net.Proxy;
 import android.net.Uri;
 import android.net.http.AndroidHttpClient;
 
+import org.apache.http.HttpHost;
 import org.apache.http.HttpResponse;
 import org.apache.http.Header;
 import org.apache.http.client.methods.HttpHead;
+import org.apache.http.conn.params.ConnRouteParams;
 
 import java.io.IOException;
 
@@ -67,6 +70,10 @@
         // seems ok with that.
         AndroidHttpClient client = AndroidHttpClient.newInstance(
                 mValues.getAsString(Downloads.Impl.COLUMN_USER_AGENT));
+        HttpHost httpHost = Proxy.getPreferredHttpHost(mActivity, uri);
+        if (httpHost != null) {
+            ConnRouteParams.setDefaultProxy(client.getParams(), httpHost);
+        }
         HttpHead request = new HttpHead(uri);
 
         String cookie = mValues.getAsString(Downloads.Impl.COLUMN_COOKIE_DATA);
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index af0cdf8..7019c8a 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -1042,7 +1042,7 @@
             }
             // Have only one async task at a time.
             if (mTouchIconLoader == null) {
-                mTouchIconLoader = new DownloadTouchIcon(Tab.this, cr, view);
+                mTouchIconLoader = new DownloadTouchIcon(Tab.this, mActivity, cr, view);
                 mTouchIconLoader.execute(url);
             }
         }