Merge "Decode common GL error codes when logging frame error status" into jb-dev
diff --git a/api/current.txt b/api/current.txt
index d04025c..2ddf096 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -11076,15 +11076,20 @@
     method public boolean hasCacheReachedEndOfStream();
     method public int readSampleData(java.nio.ByteBuffer, int);
     method public final void release();
-    method public void seekTo(long);
+    method public void seekTo(long, int);
     method public void selectTrack(int);
     method public final void setDataSource(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>) throws java.io.IOException;
     method public final void setDataSource(java.lang.String, java.util.Map<java.lang.String, java.lang.String>);
     method public final void setDataSource(java.lang.String);
     method public final void setDataSource(java.io.FileDescriptor);
     method public final void setDataSource(java.io.FileDescriptor, long, long);
+    method public void unselectTrack(int);
     field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2
     field public static final int SAMPLE_FLAG_SYNC = 1; // 0x1
+    field public static final int SEEK_TO_CLOSEST = 3; // 0x3
+    field public static final int SEEK_TO_CLOSEST_SYNC = 2; // 0x2
+    field public static final int SEEK_TO_NEXT_SYNC = 1; // 0x1
+    field public static final int SEEK_TO_PREVIOUS_SYNC = 0; // 0x0
   }
 
   public class MediaMetadataRetriever {
@@ -11251,6 +11256,7 @@
 
   public final class MediaRecorder.AudioEncoder {
     field public static final int AAC = 3; // 0x3
+    field public static final int AAC_ELD = 6; // 0x6
     field public static final int AMR_NB = 1; // 0x1
     field public static final int AMR_WB = 2; // 0x2
     field public static final int DEFAULT = 0; // 0x0
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 7d41e64..018785b 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -5411,8 +5411,9 @@
 
             /**
              * The phone number's E164 representation. This value can be omitted in which
-             * case the provider will try to automatically infer it. If present, {@link #NUMBER}
-             * has to be set as well (it will be ignored otherwise).
+             * case the provider will try to automatically infer it.  (It'll be left null if the
+             * provider fails to infer.)
+             * If present, {@link #NUMBER} has to be set as well (it will be ignored otherwise).
              * <P>Type: TEXT</P>
              */
             public static final String NORMALIZED_NUMBER = DATA4;
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index 2dcea80..c453a5d 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -45,8 +45,7 @@
     private static final ParagraphStyle[] NO_PARA_SPANS =
         ArrayUtils.emptyArray(ParagraphStyle.class);
 
-    /* package */ static final EmojiFactory EMOJI_FACTORY =
-        EmojiFactory.newAvailableInstance();
+    /* package */ static final EmojiFactory EMOJI_FACTORY = EmojiFactory.newAvailableInstance();
     /* package */ static final int MIN_EMOJI, MAX_EMOJI;
 
     static {
@@ -363,15 +362,15 @@
         // direction of the layout or line.  XXX: Should they?
         // They are evaluated at each line.
         if (mSpannedText) {
-            if (lineBackgroundSpans == null) {
-                lineBackgroundSpans = new SpanSet<LineBackgroundSpan>(LineBackgroundSpan.class);
+            if (mLineBackgroundSpans == null) {
+                mLineBackgroundSpans = new SpanSet<LineBackgroundSpan>(LineBackgroundSpan.class);
             }
 
             Spanned buffer = (Spanned) mText;
             int textLength = buffer.length();
-            lineBackgroundSpans.init(buffer, 0, textLength);
+            mLineBackgroundSpans.init(buffer, 0, textLength);
 
-            if (lineBackgroundSpans.numberOfSpans > 0) {
+            if (mLineBackgroundSpans.numberOfSpans > 0) {
                 int previousLineBottom = getLineTop(firstLine);
                 int previousLineEnd = getLineStart(firstLine);
                 ParagraphStyle[] spans = NO_PARA_SPANS;
@@ -392,17 +391,18 @@
                     if (start >= spanEnd) {
                         // These should be infrequent, so we'll use this so that
                         // we don't have to check as often.
-                        spanEnd = lineBackgroundSpans.getNextTransition(start, textLength);
+                        spanEnd = mLineBackgroundSpans.getNextTransition(start, textLength);
                         // All LineBackgroundSpans on a line contribute to its background.
                         spansLength = 0;
                         // Duplication of the logic of getParagraphSpans
                         if (start != end || start == 0) {
                             // Equivalent to a getSpans(start, end), but filling the 'spans' local
                             // array instead to reduce memory allocation
-                            for (int j = 0; j < lineBackgroundSpans.numberOfSpans; j++) {
-                                // equal test is valid since both intervals are not empty by construction
-                                if (lineBackgroundSpans.spanStarts[j] >= end ||
-                                        lineBackgroundSpans.spanEnds[j] <= start) continue;
+                            for (int j = 0; j < mLineBackgroundSpans.numberOfSpans; j++) {
+                                // equal test is valid since both intervals are not empty by
+                                // construction
+                                if (mLineBackgroundSpans.spanStarts[j] >= end ||
+                                        mLineBackgroundSpans.spanEnds[j] <= start) continue;
                                 if (spansLength == spans.length) {
                                     // The spans array needs to be expanded
                                     int newSize = ArrayUtils.idealObjectArraySize(2 * spansLength);
@@ -410,7 +410,7 @@
                                     System.arraycopy(spans, 0, newSpans, 0, spansLength);
                                     spans = newSpans;
                                 }
-                                spans[spansLength++] = lineBackgroundSpans.spans[j];
+                                spans[spansLength++] = mLineBackgroundSpans.spans[j];
                             }
                         }
                     }
@@ -423,7 +423,7 @@
                     }
                 }
             }
-            lineBackgroundSpans.recycle();
+            mLineBackgroundSpans.recycle();
         }
 
         // There can be a highlight even without spans if we are drawing
@@ -1687,7 +1687,7 @@
      * styles that are already applied to the buffer will apply to text that
      * is inserted into it.
      */
-    /* package */ static <T> T[] getParagraphSpans(Spanned text, int start, int end, Class<T> type) {
+    /* package */static <T> T[] getParagraphSpans(Spanned text, int start, int end, Class<T> type) {
         if (start == end && start > 0) {
             return ArrayUtils.emptyArray(type);
         }
@@ -1857,7 +1857,7 @@
     private static final Rect sTempRect = new Rect();
     private boolean mSpannedText;
     private TextDirectionHeuristic mTextDir;
-    private SpanSet<LineBackgroundSpan> lineBackgroundSpans;
+    private SpanSet<LineBackgroundSpan> mLineBackgroundSpans;
 
     public static final int DIR_LEFT_TO_RIGHT = 1;
     public static final int DIR_RIGHT_TO_LEFT = -1;
diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java
index 671c064..f0e6ff0 100644
--- a/core/java/android/webkit/CacheManager.java
+++ b/core/java/android/webkit/CacheManager.java
@@ -56,6 +56,7 @@
      * Represents a resource stored in the HTTP cache. Instances of this class
      * can be obtained by calling
      * {@link CacheManager#getCacheFile CacheManager.getCacheFile(String, Map<String, String>))}.
+     *
      * @deprecated Access to the HTTP cache will be removed in a future release.
      */
     @Deprecated
@@ -81,7 +82,8 @@
 
         /**
          * Gets the status code of this cache entry.
-         * @return The status code of this cache entry
+         *
+         * @return the status code of this cache entry
          */
         public int getHttpStatusCode() {
             return httpStatusCode;
@@ -89,7 +91,8 @@
 
         /**
          * Gets the content length of this cache entry.
-         * @return The content length of this cache entry
+         *
+         * @return the content length of this cache entry
          */
         public long getContentLength() {
             return contentLength;
@@ -99,7 +102,8 @@
          * Gets the path of the file used to store the content of this cache
          * entry, relative to the base directory of the cache. See
          * {@link CacheManager#getCacheFileBaseDir CacheManager.getCacheFileBaseDir()}.
-         * @return The path of the file used to store this cache entry
+         *
+         * @return the path of the file used to store this cache entry
          */
         public String getLocalPath() {
             return localPath;
@@ -108,7 +112,8 @@
         /**
          * Gets the expiry date of this cache entry, expressed in milliseconds
          * since midnight, January 1, 1970 UTC.
-         * @return The expiry date of this cache entry
+         *
+         * @return the expiry date of this cache entry
          */
         public long getExpires() {
             return expires;
@@ -116,7 +121,8 @@
 
         /**
          * Gets the expiry date of this cache entry, expressed as a string.
-         * @return The expiry date of this cache entry
+         *
+         * @return the expiry date of this cache entry
          *
          */
         public String getExpiresString() {
@@ -126,7 +132,8 @@
         /**
          * Gets the date at which this cache entry was last modified, expressed
          * as a string.
-         * @return The date at which this cache entry was last modified
+         *
+         * @return the date at which this cache entry was last modified
          */
         public String getLastModified() {
             return lastModified;
@@ -134,7 +141,8 @@
 
         /**
          * Gets the entity tag of this cache entry.
-         * @return The entity tag of this cache entry
+         *
+         * @return the entity tag of this cache entry
          */
         public String getETag() {
             return etag;
@@ -142,7 +150,8 @@
 
         /**
          * Gets the MIME type of this cache entry.
-         * @return The MIME type of this cache entry
+         *
+         * @return the MIME type of this cache entry
          */
         public String getMimeType() {
             return mimeType;
@@ -151,7 +160,8 @@
         /**
          * Gets the value of the HTTP 'Location' header with which this cache
          * entry was received.
-         * @return The HTTP 'Location' header for this cache entry
+         *
+         * @return the HTTP 'Location' header for this cache entry
          */
         public String getLocation() {
             return location;
@@ -159,7 +169,8 @@
 
         /**
          * Gets the encoding of this cache entry.
-         * @return The encoding of this cache entry
+         *
+         * @return the encoding of this cache entry
          */
         public String getEncoding() {
             return encoding;
@@ -168,7 +179,8 @@
         /**
          * Gets the value of the HTTP 'Content-Disposition' header with which
          * this cache entry was received.
-         * @return The HTTP 'Content-Disposition' header for this cache entry
+         *
+         * @return the HTTP 'Content-Disposition' header for this cache entry
          *
          */
         public String getContentDisposition() {
@@ -179,7 +191,8 @@
          * Gets the input stream to the content of this cache entry, to allow
          * content to be read. See
          * {@link CacheManager#getCacheFile CacheManager.getCacheFile(String, Map<String, String>)}.
-         * @return An input stream to the content of this cache entry
+         *
+         * @return an input stream to the content of this cache entry
          */
         public InputStream getInputStream() {
             return inStream;
@@ -189,7 +202,8 @@
          * Gets an output stream to the content of this cache entry, to allow
          * content to be written. See
          * {@link CacheManager#saveCacheFile CacheManager.saveCacheFile(String, CacheResult)}.
-         * @return An output stream to the content of this cache entry
+         *
+         * @return an output stream to the content of this cache entry
          */
         // Note that this is always null for objects returned by getCacheFile()!
         public OutputStream getOutputStream() {
@@ -199,7 +213,8 @@
 
         /**
          * Sets an input stream to the content of this cache entry.
-         * @param stream An input stream to the content of this cache entry
+         *
+         * @param stream an input stream to the content of this cache entry
          */
         public void setInputStream(InputStream stream) {
             this.inStream = stream;
@@ -207,7 +222,8 @@
 
         /**
          * Sets the encoding of this cache entry.
-         * @param encoding The encoding of this cache entry
+         *
+         * @param encoding the encoding of this cache entry
          */
         public void setEncoding(String encoding) {
             this.encoding = encoding;
@@ -225,7 +241,8 @@
      * Initializes the HTTP cache. This method must be called before any
      * CacheManager methods are used. Note that this is called automatically
      * when a {@link WebView} is created.
-     * @param context The application context
+     *
+     * @param context the application context
      */
     static void init(Context context) {
         // This isn't actually where the real cache lives, but where we put files for the
@@ -240,7 +257,8 @@
      * Gets the base directory in which the files used to store the contents of
      * cache entries are placed. See
      * {@link CacheManager.CacheResult#getLocalPath CacheManager.CacheResult.getLocalPath()}.
-     * @return The base directory of the cache
+     *
+     * @return the base directory of the cache
      * @deprecated Access to the HTTP cache will be removed in a future release.
      */
     @Deprecated
@@ -250,7 +268,8 @@
 
     /**
      * Gets whether the HTTP cache is disabled.
-     * @return True if the HTTP cache is disabled
+     *
+     * @return true if the HTTP cache is disabled
      * @deprecated Access to the HTTP cache will be removed in a future release.
      */
     @Deprecated
@@ -262,8 +281,9 @@
      * Starts a cache transaction. Returns true if this is the only running
      * transaction. Otherwise, this transaction is nested inside currently
      * running transactions and false is returned.
-     * @return True if this is the only running transaction
-     * @deprecated This method no longer has any effect and always returns false
+     *
+     * @return true if this is the only running transaction
+     * @deprecated This method no longer has any effect and always returns false.
      */
     @Deprecated
     public static boolean startCacheTransaction() {
@@ -273,8 +293,9 @@
     /**
      * Ends the innermost cache transaction and returns whether this was the
      * only running transaction.
-     * @return True if this was the only running transaction
-     * @deprecated This method no longer has any effect and always returns false
+     *
+     * @return true if this was the only running transaction
+     * @deprecated This method no longer has any effect and always returns false.
      */
     @Deprecated
     public static boolean endCacheTransaction() {
@@ -287,10 +308,11 @@
      * entry needs validation, appropriate headers will be added to the map.
      * The input stream of the CacheEntry object should be closed by the caller
      * when access to the underlying file is no longer required.
-     * @param url The URL for which a cache entry is requested
-     * @param headers A map from HTTP header name to value, to be populated
+     *
+     * @param url the URL for which a cache entry is requested
+     * @param headers a map from HTTP header name to value, to be populated
      *                for the returned cache entry
-     * @return The cache entry for the specified URL
+     * @return the cache entry for the specified URL
      * @deprecated Access to the HTTP cache will be removed in a future release.
      */
     @Deprecated
@@ -345,14 +367,15 @@
     }
 
     /**
-     * Given a url and its full headers, returns CacheResult if a local cache
+     * Given a URL and its full headers, gets a CacheResult if a local cache
      * can be stored. Otherwise returns null. The mimetype is passed in so that
      * the function can use the mimetype that will be passed to WebCore which
      * could be different from the mimetype defined in the headers.
      * forceCache is for out-of-package callers to force creation of a
      * CacheResult, and is used to supply surrogate responses for URL
      * interception.
-     * @return CacheResult for a given url
+     *
+     * @return a CacheResult for a given URL
      */
     static CacheResult createCacheFile(String url, int statusCode,
             Headers headers, String mimeType, boolean forceCache) {
@@ -363,8 +386,9 @@
     /**
      * Adds a cache entry to the HTTP cache for the specicifed URL. Also closes
      * the cache entry's output stream.
-     * @param url The URL for which the cache entry should be added
-     * @param cacheResult The cache entry to add
+     *
+     * @param url the URL for which the cache entry should be added
+     * @param cacheResult the cache entry to add
      * @deprecated Access to the HTTP cache will be removed in a future release.
      */
     @Deprecated
@@ -401,9 +425,9 @@
     }
 
     /**
-     * Remove all cache files.
+     * Removes all cache files.
      *
-     * @return Whether the removal succeeded.
+     * @return whether the removal succeeded
      */
     static boolean removeAllCacheFiles() {
         // delete cache files in a separate thread to not block UI.
diff --git a/core/java/android/webkit/CookieManager.java b/core/java/android/webkit/CookieManager.java
index 1e7f38c..30c713e 100644
--- a/core/java/android/webkit/CookieManager.java
+++ b/core/java/android/webkit/CookieManager.java
@@ -40,7 +40,7 @@
      * {@link CookieSyncManager#createInstance(Context)} must be called
      * first.
      *
-     * @return The singleton CookieManager instance
+     * @return the singleton CookieManager instance
      */
     public static synchronized CookieManager getInstance() {
         return WebViewFactory.getProvider().getCookieManager();
@@ -49,7 +49,8 @@
     /**
      * Sets whether the application's {@link WebView} instances should send and
      * accept cookies.
-     * @param accept Whether {@link WebView} instances should send and accept
+     *
+     * @param accept whether {@link WebView} instances should send and accept
      *               cookies
      */
     public synchronized void setAcceptCookie(boolean accept) {
@@ -59,7 +60,8 @@
     /**
      * Gets whether the application's {@link WebView} instances send and accept
      * cookies.
-     * @return True if {@link WebView} instances send and accept cookies
+     *
+     * @return true if {@link WebView} instances send and accept cookies
      */
     public synchronized boolean acceptCookie() {
         throw new MustOverrideException();
@@ -70,8 +72,9 @@
      * path and name will be replaced with the new cookie. The cookie being set
      * must not have expired and must not be a session cookie, otherwise it
      * will be ignored.
-     * @param url The URL for which the cookie is set
-     * @param value The cookie as a string, using the format of the 'Set-Cookie'
+     *
+     * @param url the URL for which the cookie is set
+     * @param value the cookie as a string, using the format of the 'Set-Cookie'
      *              HTTP response header
      */
     public void setCookie(String url, String value) {
@@ -80,8 +83,9 @@
 
     /**
      * Gets the cookies for the given URL.
-     * @param url The URL for which the cookies are requested
-     * @return value The cookies as a string, using the format of the 'Cookie'
+     *
+     * @param url the URL for which the cookies are requested
+     * @return value the cookies as a string, using the format of the 'Cookie'
      *               HTTP request header
      */
     public String getCookie(String url) {
@@ -89,10 +93,11 @@
     }
 
     /**
-     * See {@link #getCookie(String)}
-     * @param url The URL for which the cookies are requested
-     * @param privateBrowsing Whether to use the private browsing cookie jar
-     * @return value The cookies as a string, using the format of the 'Cookie'
+     * See {@link #getCookie(String)}.
+     *
+     * @param url the URL for which the cookies are requested
+     * @param privateBrowsing whether to use the private browsing cookie jar
+     * @return value the cookies as a string, using the format of the 'Cookie'
      *               HTTP request header
      * @hide Used by Browser, no intention to publish.
      */
@@ -101,10 +106,11 @@
     }
 
     /**
-     * Get cookie(s) for a given uri so that it can be set to "cookie:" in http
+     * Gets cookie(s) for a given uri so that it can be set to "cookie:" in http
      * request header.
-     * @param uri The WebAddress for which the cookies are requested
-     * @return value The cookies as a string, using the format of the 'Cookie'
+     *
+     * @param uri the WebAddress for which the cookies are requested
+     * @return value the cookies as a string, using the format of the 'Cookie'
      *               HTTP request header
      * @hide Used by RequestHandle, no intention to publish.
      */
@@ -129,7 +135,8 @@
 
     /**
      * Gets whether there are stored cookies.
-     * @return True if there are stored cookies.
+     *
+     * @return true if there are stored cookies
      */
     public synchronized boolean hasCookies() {
         throw new MustOverrideException();
@@ -137,7 +144,8 @@
 
     /**
      * See {@link #hasCookies()}.
-     * @param privateBrowsing Whether to use the private browsing cookie jar
+     *
+     * @param privateBrowsing whether to use the private browsing cookie jar
      * @hide Used by Browser, no intention to publish.
      */
     public synchronized boolean hasCookies(boolean privateBrowsing) {
@@ -152,7 +160,7 @@
     }
 
     /**
-     * Flush all cookies managed by the Chrome HTTP stack to flash.
+     * Flushes all cookies managed by the Chrome HTTP stack to flash.
      *
      * @hide Package level api, called from CookieSyncManager
      */
@@ -163,7 +171,8 @@
     /**
      * Gets whether the application's {@link WebView} instances send and accept
      * cookies for file scheme URLs.
-     * @return True if {@link WebView} instances send and accept cookies for
+     *
+     * @return true if {@link WebView} instances send and accept cookies for
      *         file scheme URLs
      */
     // Static for backward compatibility.
@@ -172,7 +181,8 @@
     }
 
     /**
-     * Implements {@link #allowFileSchemeCookies()}
+     * Implements {@link #allowFileSchemeCookies()}.
+     *
      * @hide Only for use by WebViewProvider implementations
      */
     protected boolean allowFileSchemeCookiesImpl() {
@@ -195,7 +205,8 @@
     }
 
     /**
-     * Implements {@link #setAcceptFileSchemeCookies(boolean)}
+     * Implements {@link #setAcceptFileSchemeCookies(boolean)}.
+     *
      * @hide Only for use by WebViewProvider implementations
      */
     protected void setAcceptFileSchemeCookiesImpl(boolean accept) {
diff --git a/core/java/android/webkit/GeolocationPermissions.java b/core/java/android/webkit/GeolocationPermissions.java
index cd5c9d1..9c0f754 100755
--- a/core/java/android/webkit/GeolocationPermissions.java
+++ b/core/java/android/webkit/GeolocationPermissions.java
@@ -48,28 +48,31 @@
      */
     public interface Callback {
         /**
-         * Set the Geolocation permission state for the supplied origin.
-         * @param origin The origin for which permissions are set.
-         * @param allow Whether or not the origin should be allowed to use the
-         *              Geolocation API.
-         * @param retain Whether the permission should be retained beyond the
+         * Sets the Geolocation permission state for the supplied origin.
+         *
+         * @param origin the origin for which permissions are set
+         * @param allow whether or not the origin should be allowed to use the
+         *              Geolocation API
+         * @param retain whether the permission should be retained beyond the
          *               lifetime of a page currently being displayed by a
-         *               WebView.
+         *               WebView
          */
         public void invoke(String origin, boolean allow, boolean retain);
     };
 
     /**
-     * Get the singleton instance of this class.
-     * @return The singleton {@link GeolocationPermissions} instance.
+     * Gets the singleton instance of this class.
+     *
+     * @return the singleton {@link GeolocationPermissions} instance
      */
     public static GeolocationPermissions getInstance() {
       return WebViewFactory.getProvider().getGeolocationPermissions();
     }
 
     /**
-     * Get the set of origins for which Geolocation permissions are stored.
-     * @param callback A {@link ValueCallback} to receive the result of this
+     * Gets the set of origins for which Geolocation permissions are stored.
+     *
+     * @param callback a {@link ValueCallback} to receive the result of this
      *                 request. This object's
      *                 {@link ValueCallback#onReceiveValue(T) onReceiveValue()}
      *                 method will be invoked asynchronously with a set of
@@ -85,9 +88,10 @@
     }
 
     /**
-     * Get the Geolocation permission state for the specified origin.
-     * @param origin The origin for which Geolocation permission is requested.
-     * @param callback A {@link ValueCallback} to receive the result of this
+     * Gets the Geolocation permission state for the specified origin.
+     *
+     * @param origin the origin for which Geolocation permission is requested
+     * @param callback a {@link ValueCallback} to receive the result of this
      *                 request. This object's
      *                 {@link ValueCallback#onReceiveValue(T) onReceiveValue()}
      *                 method will be invoked asynchronously with a boolean
@@ -99,23 +103,25 @@
     }
 
     /**
-     * Clear the Geolocation permission state for the specified origin.
-     * @param origin The origin for which Geolocation permissions are cleared.
+     * Clears the Geolocation permission state for the specified origin.
+     *
+     * @param origin the origin for which Geolocation permissions are cleared
      */
     public void clear(String origin) {
         // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
-     * Allow the specified origin to use the Geolocation API.
-     * @param origin The origin for which Geolocation API use is allowed.
+     * Allows the specified origin to use the Geolocation API.
+     *
+     * @param origin the origin for which Geolocation API use is allowed
      */
     public void allow(String origin) {
         // Must be a no-op for backward compatibility: see the hidden constructor for reason.
     }
 
     /**
-     * Clear the Geolocation permission state for all origins.
+     * Clears the Geolocation permission state for all origins.
      */
     public void clearAll() {
         // Must be a no-op for backward compatibility: see the hidden constructor for reason.
diff --git a/core/java/android/webkit/ViewStateSerializer.java b/core/java/android/webkit/ViewStateSerializer.java
index 35168cf..c161085 100644
--- a/core/java/android/webkit/ViewStateSerializer.java
+++ b/core/java/android/webkit/ViewStateSerializer.java
@@ -64,7 +64,6 @@
         draw.mViewState = new WebViewCore.ViewState();
         draw.mContentSize = new Point(contentWidth, contentHeight);
         draw.mBaseLayer = baseLayer;
-        draw.mInvalRegion = new Region(0, 0, contentWidth, contentHeight);
         stream.close();
         return draw;
     }
diff --git a/core/java/android/webkit/WebResourceResponse.java b/core/java/android/webkit/WebResourceResponse.java
index 650310e..b7171ee 100644
--- a/core/java/android/webkit/WebResourceResponse.java
+++ b/core/java/android/webkit/WebResourceResponse.java
@@ -36,9 +36,10 @@
      * input stream. Callers must implement
      * {@link InputStream#read(byte[]) InputStream.read(byte[])} for the input
      * stream.
-     * @param mimeType The resource response's MIME type, for example text/html
-     * @param encoding The resource response's encoding
-     * @param data The input stream that provides the resource response's data
+     *
+     * @param mimeType the resource response's MIME type, for example text/html
+     * @param encoding the resource response's encoding
+     * @param data the input stream that provides the resource response's data
      */
     public WebResourceResponse(String mimeType, String encoding,
             InputStream data) {
@@ -49,7 +50,8 @@
 
     /**
      * Sets the resource response's MIME type, for example text/html.
-     * @param mimeType The resource response's MIME type
+     *
+     * @param mimeType the resource response's MIME type
      */
     public void setMimeType(String mimeType) {
         mMimeType = mimeType;
@@ -57,7 +59,8 @@
 
     /**
      * Gets the resource response's MIME type.
-     * @return The resource response's MIME type
+     *
+     * @return the resource response's MIME type
      */
     public String getMimeType() {
         return mMimeType;
@@ -66,7 +69,8 @@
     /**
      * Sets the resource response's encoding, for example UTF-8. This is used
      * to decode the data from the input stream.
-     * @param encoding The resource response's encoding
+     *
+     * @param encoding the resource response's encoding
      */
     public void setEncoding(String encoding) {
         mEncoding = encoding;
@@ -74,7 +78,8 @@
 
     /**
      * Gets the resource response's encoding.
-     * @return The resource response's encoding
+     *
+     * @return the resource response's encoding
      */
     public String getEncoding() {
         return mEncoding;
@@ -83,7 +88,8 @@
     /**
      * Sets the input stream that provides the resource respone's data. Callers
      * must implement {@link InputStream#read(byte[]) InputStream.read(byte[])}.
-     * @param data The input stream that provides the resource response's data
+     *
+     * @param data the input stream that provides the resource response's data
      */
     public void setData(InputStream data) {
         mInputStream = data;
@@ -91,7 +97,8 @@
 
     /**
      * Gets the input stream that provides the resource respone's data.
-     * @return The input stream that provides the resource response's data
+     *
+     * @return the input stream that provides the resource response's data
      */
     public InputStream getData() {
         return mInputStream;
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 1bbf00f..901372b 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -33,10 +33,12 @@
 public abstract class WebSettings {
     /**
      * Enum for controlling the layout of html.
-     * NORMAL means no rendering changes.
-     * SINGLE_COLUMN moves all content into one column that is the width of the
-     * view.
-     * NARROW_COLUMNS makes all columns no wider than the screen if possible.
+     * <ul>
+     *   <li>NORMAL means no rendering changes.</li>
+     *   <li>SINGLE_COLUMN moves all content into one column that is the width of the
+     *       view.</li>
+     *   <li>NARROW_COLUMNS makes all columns no wider than the screen if possible.</li>
+     * </ul>
      */
     // XXX: These must match LayoutAlgorithm in Settings.h in WebCore.
     public enum LayoutAlgorithm {
@@ -51,11 +53,14 @@
 
     /**
      * Enum for specifying the text size.
-     * SMALLEST is 50%
-     * SMALLER is 75%
-     * NORMAL is 100%
-     * LARGER is 150%
-     * LARGEST is 200%
+     * <ul>
+     *   <li>SMALLEST is 50%</li>
+     *   <li>SMALLER is 75%</li>
+     *   <li>NORMAL is 100%</li>
+     *   <li>LARGER is 150%</li>
+     *   <li>LARGEST is 200%</li>
+     * </ul>
+     *
      * @deprecated Use {@link WebSettings#setTextZoom(int)} and {@link WebSettings#getTextZoom()} instead.
      */
     public enum TextSize {
@@ -72,9 +77,11 @@
 
     /**
      * Enum for specifying the WebView's desired density.
-     * FAR makes 100% looking like in 240dpi
-     * MEDIUM makes 100% looking like in 160dpi
-     * CLOSE makes 100% looking like in 120dpi
+     * <ul>
+     *   <li>FAR makes 100% looking like in 240dpi</li>
+     *   <li>MEDIUM makes 100% looking like in 160dpi</li>
+     *   <li>CLOSE makes 100% looking like in 120dpi</li>
+     * </ul>
      */
     public enum ZoomDensity {
         FAR(150),      // 240dpi
@@ -87,24 +94,24 @@
     }
 
     /**
-     * Default cache usage pattern  Use with {@link #setCacheMode}.
+     * Default cache usage pattern. Use with {@link #setCacheMode}.
      */
     public static final int LOAD_DEFAULT = -1;
 
     /**
-     * Normal cache usage pattern  Use with {@link #setCacheMode}.
+     * Normal cache usage pattern. Use with {@link #setCacheMode}.
      */
     public static final int LOAD_NORMAL = 0;
 
     /**
-     * Use cache if content is there, even if expired (eg, history nav)
+     * Use cache if content is there, even if expired (eg, history nav).
      * If it is not in the cache, load from network.
      * Use with {@link #setCacheMode}.
      */
     public static final int LOAD_CACHE_ELSE_NETWORK = 1;
 
     /**
-     * Don't use the cache, load from network
+     * Don't use the cache, load from network.
      * Use with {@link #setCacheMode}.
      */
     public static final int LOAD_NO_CACHE = 2;
@@ -139,6 +146,7 @@
     /**
      * Hidden constructor to prevent clients from creating a new settings
      * instance or deriving the class.
+     *
      * @hide
      */
     protected WebSettings() {
@@ -146,6 +154,7 @@
 
     /**
      * Enables dumping the pages navigation cache to a text file.
+     *
      * @deprecated This method is now obsolete.
      */
     @Deprecated
@@ -154,7 +163,8 @@
     }
 
     /**
-     * Returns true if dumping the navigation cache is enabled.
+     * Gets whether dumping the navigation cache is enabled.
+     *
      * @deprecated This method is now obsolete.
      */
     @Deprecated
@@ -167,16 +177,19 @@
      * controls and gestures. The particular zoom mechanisms that should be used
      * can be set with {@link #setBuiltInZoomControls}. This setting does not
      * affect zooming performed using the {@link WebView#zoomIn()} and
-     * {@link WebView#zoomOut()} methods.
-     * @param support Whether the WebView should support zoom.
+     * {@link WebView#zoomOut()} methods. The default is true.
+     *
+     * @param support whether the WebView should support zoom
      */
     public void setSupportZoom(boolean support) {
         throw new MustOverrideException();
     }
 
     /**
-     * Returns true if the WebView supports zoom. The default is true.
-     * @return True if the WebView supports zoom.
+     * Gets whether the WebView supports zoom.
+     *
+     * @return true if the WebView supports zoom
+     * @see #setSupportZoom
      */
     public boolean supportZoom() {
         throw new MustOverrideException();
@@ -187,11 +200,12 @@
      * built-in zoom mechanisms comprise on-screen zoom controls, which are
      * displayed over the WebView's content, and the use of a pinch gesture to
      * control zooming. Whether or not these on-screen controls are displayed
-     * can be set with {@link #setDisplayZoomControls}.
+     * can be set with {@link #setDisplayZoomControls}. The default is false.
      * <p>
      * The built-in mechanisms are the only currently supported zoom
      * mechanisms, so it is recommended that this setting is always enabled.
-     * @param enabled Whether the WebView should use its built-in zoom mechanisms.
+     *
+     * @param enabled whether the WebView should use its built-in zoom mechanisms
      */
     // This method was intended to select between the built-in zoom mechanisms
     // and the separate zoom controls. The latter were obtained using
@@ -201,9 +215,10 @@
     }
 
     /**
-     * Returns true if the zoom mechanisms built into WebView are being used.
-     * The default is false.
-     * @return True if the zoom mechanisms built into WebView are being used.
+     * Gets whether the zoom mechanisms built into WebView are being used.
+     *
+     * @return true if the zoom mechanisms built into WebView are being used
+     * @see #setBuiltInZoomControls
      */
     public boolean getBuiltInZoomControls() {
         throw new MustOverrideException();
@@ -212,24 +227,28 @@
     /**
      * Sets whether the WebView should display on-screen zoom controls when
      * using the built-in zoom mechanisms. See {@link #setBuiltInZoomControls}.
-     * @param enabled Whether the WebView should display on-screen zoom controls.
+     * The default is true.
+     *
+     * @param enabled whether the WebView should display on-screen zoom controls
      */
     public void setDisplayZoomControls(boolean enabled) {
         throw new MustOverrideException();
     }
 
     /**
-     * Returns true if the WebView displays on-screen zoom controls when using
-     * the built-in zoom mechanisms. The default is true.
-     * @return True if the WebView displays on-screen zoom controls when using
+     * Gets whether the WebView displays on-screen zoom controls when using
      * the built-in zoom mechanisms.
+     *
+     * @return true if the WebView displays on-screen zoom controls when using
+     *         the built-in zoom mechanisms
+     * @see #setDisplayZoomControls
      */
     public boolean getDisplayZoomControls() {
         throw new MustOverrideException();
     }
 
     /**
-     * Enable or disable file access within WebView. File access is enabled by
+     * Enables or disables file access within WebView. File access is enabled by
      * default.  Note that this enables or disables file system access only.
      * Assets and resources are still accessible using file:///android_asset and
      * file:///android_res.
@@ -239,44 +258,48 @@
     }
 
     /**
-     * Returns true if this WebView supports file access.
+     * Gets whether this WebView supports file access.
+     *
+     * @see #setAllowFileAccess
      */
     public boolean getAllowFileAccess() {
         throw new MustOverrideException();
     }
 
     /**
-     * Enable or disable content url access within WebView.  Content url access
-     * allows WebView to load content from a content provider installed in the
-     * system.  The default is enabled.
+     * Enables or disables content URL access within WebView.  Content URL
+     * access allows WebView to load content from a content provider installed
+     * in the system. The default is enabled.
      */
     public void setAllowContentAccess(boolean allow) {
         throw new MustOverrideException();
     }
 
     /**
-     * Returns true if this WebView supports content url access.
+     * Gets whether this WebView supports content URL access.
+     *
+     * @see #setAllowContentAccess
      */
     public boolean getAllowContentAccess() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set whether the WebView loads a page with overview mode.
+     * Sets whether the WebView loads a page with overview mode.
      */
     public void setLoadWithOverviewMode(boolean overview) {
         throw new MustOverrideException();
     }
 
     /**
-     * Returns true if this WebView loads page with overview mode
+     * Gets whether this WebView loads pages with overview mode.
      */
     public boolean getLoadWithOverviewMode() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set whether the WebView will enable smooth transition while panning or
+     * Sets whether the WebView will enable smooth transition while panning or
      * zooming or while the window hosting the WebView does not have focus.
      * If it is true, WebView will choose a solution to maximize the performance.
      * e.g. the WebView's content may not be updated during the transition.
@@ -285,18 +308,22 @@
     public void setEnableSmoothTransition(boolean enable) {
         throw new MustOverrideException();
     }
+
     /**
-     * Returns true if the WebView enables smooth transition while panning or
+     * Gets whether the WebView enables smooth transition while panning or
      * zooming.
+     *
+     * @see #setEnableSmoothTransition
      */
     public boolean enableSmoothTransition() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set whether the WebView uses its background for over scroll background.
+     * Sets whether the WebView uses its background for over scroll background.
      * If true, it will use the WebView's background. If false, it will use an
      * internal pattern. Default is true.
+     *
      * @deprecated This method is now obsolete.
      */
     @Deprecated
@@ -305,8 +332,10 @@
     }
 
     /**
-     * Returns true if this WebView uses WebView's background instead of
+     * Gets whether this WebView uses WebView's background instead of
      * internal pattern for over scroll background.
+     *
+     * @see #setUseWebViewBackgroundForOverscrollBackground
      * @deprecated This method is now obsolete.
      */
     @Deprecated
@@ -315,77 +344,82 @@
     }
 
     /**
-     * Store whether the WebView is saving form data.
+     * Sets whether the WebView is saving form data.
      */
     public void setSaveFormData(boolean save) {
         throw new MustOverrideException();
     }
 
     /**
-     *  Return whether the WebView is saving form data and displaying prior
-     *  entries/autofill++.  Always false in private browsing mode.
+     * Gets whether the WebView is saving form data and displaying prior
+     * entries/autofill++.  Always false in private browsing mode.
      */
     public boolean getSaveFormData() {
         throw new MustOverrideException();
     }
 
     /**
-     *  Store whether the WebView is saving password.
+     * Stores whether the WebView is saving password.
      */
     public void setSavePassword(boolean save) {
         throw new MustOverrideException();
     }
 
     /**
-     *  Return whether the WebView is saving password.
+     * Gets whether the WebView is saving password.
      */
     public boolean getSavePassword() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the text zoom of the page in percent. Default is 100.
-     * @param textZoom A percent value for increasing or decreasing the text.
+     * Sets the text zoom of the page in percent. Default is 100.
+     *
+     * @param textZoom the percent value for increasing or decreasing the text
      */
     public synchronized void setTextZoom(int textZoom) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the text zoom of the page in percent.
-     * @return A percent value describing the text zoom.
-     * @see setTextSizeZoom
+     * Gets the text zoom of the page in percent.
+     *
+     * @return a percent value describing the text zoom
+     * @see #setTextSizeZoom
      */
     public synchronized int getTextZoom() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the text size of the page.
-     * @param t A TextSize value for increasing or decreasing the text.
+     * Sets the text size of the page.
+     *
+     * @param t the TextSize value for increasing or decreasing the text
      * @see WebSettings.TextSize
-     * @deprecated Use {@link #setTextZoom(int)} instead
+     * @deprecated Use {@link #setTextZoom(int)} instead.
      */
     public synchronized void setTextSize(TextSize t) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the text size of the page. If the text size was previously specified
+     * Gets the text size of the page. If the text size was previously specified
      * in percent using {@link #setTextZoom(int)}, this will return
      * the closest matching {@link TextSize}.
-     * @return A TextSize enum value describing the text size.
+     *
+     * @return a TextSize enum value describing the text size
      * @see WebSettings.TextSize
-     * @deprecated Use {@link #getTextZoom()} instead
+     * @deprecated Use {@link #getTextZoom()} instead.
      */
     public synchronized TextSize getTextSize() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the default zoom density of the page. This should be called from UI
+     * Sets the default zoom density of the page. This should be called from UI
      * thread.
-     * @param zoom A ZoomDensity value
+     *
+     * @param zoom a ZoomDensity value
      * @see WebSettings.ZoomDensity
      */
     public void setDefaultZoom(ZoomDensity zoom) {
@@ -393,9 +427,9 @@
     }
 
     /**
-     * Get the default zoom density of the page. This should be called from UI
+     * Gets the default zoom density of the page. This should be called from UI
      * thread.
-     * @return A ZoomDensity value
+     * @return a ZoomDensity value
      * @see WebSettings.ZoomDensity
      */
     public ZoomDensity getDefaultZoom() {
@@ -410,15 +444,17 @@
     }
 
     /**
-     * Returns true if light touches are enabled.
+     * Gets whether light touches are enabled.
      */
     public boolean getLightTouchEnabled() {
         throw new MustOverrideException();
     }
 
     /**
-     * @deprecated This setting controlled a rendering optimization
-     * that is no longer present. Setting it now has no effect.
+     * Controlled a rendering optimization that is no longer present. Setting
+     * it now has no effect.
+     *
+     * @deprecated This setting now has no effect.
      */
     @Deprecated
     public synchronized void setUseDoubleTree(boolean use) {
@@ -426,8 +462,10 @@
     }
 
     /**
-     * @deprecated This setting controlled a rendering optimization
-     * that is no longer present. Setting it now has no effect.
+     * Controlled a rendering optimization that is no longer present. Setting
+     * it now has no effect.
+     *
+     * @deprecated This setting now has no effect.
      */
     @Deprecated
     public synchronized boolean getUseDoubleTree() {
@@ -436,10 +474,10 @@
     }
 
     /**
-     * Tell the WebView about user-agent string.
-     * @param ua 0 if the WebView should use an Android user-agent string,
-     *           1 if the WebView should use a desktop user-agent string.
+     * Tells the WebView about user-agent string.
      *
+     * @param ua 0 if the WebView should use an Android user-agent string,
+     *           1 if the WebView should use a desktop user-agent string
      * @deprecated Please use setUserAgentString instead.
      */
     @Deprecated
@@ -448,11 +486,11 @@
     }
 
     /**
-     * Return user-agent as int
-     * @return int  0 if the WebView is using an Android user-agent string.
-     *              1 if the WebView is using a desktop user-agent string.
-     *             -1 if the WebView is using user defined user-agent string.
+     * Gets the user-agent as an int.
      *
+     * @return 0 if the WebView is using an Android user-agent string,
+     *         1 if the WebView is using a desktop user-agent string,
+     *         -1 if the WebView is using user defined user-agent string
      * @deprecated Please use getUserAgentString instead.
      */
     @Deprecated
@@ -461,30 +499,34 @@
     }
 
     /**
-     * Tell the WebView to use the wide viewport
+     * Tells the WebView to use the wide viewport.
      */
     public synchronized void setUseWideViewPort(boolean use) {
         throw new MustOverrideException();
     }
 
     /**
-     * @return True if the WebView is using a wide viewport
+     * Gets whether the WebView is using a wide viewport.
+     *
+     * @return true if the WebView is using a wide viewport
      */
     public synchronized boolean getUseWideViewPort() {
         throw new MustOverrideException();
     }
 
     /**
-     * Tell the WebView whether it supports multiple windows. TRUE means
-     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
-     *         boolean, Message)} is implemented by the host application.
+     * Tells the WebView whether it supports multiple windows. TRUE means
+     * that {@link WebChromeClient#onCreateWindow(WebView, boolean,
+     * boolean, Message)} is implemented by the host application.
      */
     public synchronized void setSupportMultipleWindows(boolean support) {
         throw new MustOverrideException();
     }
 
     /**
-     * @return True if the WebView is supporting multiple windows. This means
+     * Gets whether the WebView is supporting multiple windows.
+     *
+     * @return true if the WebView is supporting multiple windows. This means
      *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
      *         boolean, Message)} is implemented by the host application.
      */
@@ -493,9 +535,10 @@
     }
 
     /**
-     * Set the underlying layout algorithm. This will cause a relayout of the
-     * WebView.
-     * @param l A LayoutAlgorithm enum specifying the algorithm to use.
+     * Sets the underlying layout algorithm. This will cause a relayout of the
+     * WebView. The default is NARROW_COLUMNS.
+     *
+     * @param l a LayoutAlgorithm enum specifying the algorithm to use
      * @see WebSettings.LayoutAlgorithm
      */
     public synchronized void setLayoutAlgorithm(LayoutAlgorithm l) {
@@ -503,9 +546,11 @@
     }
 
     /**
-     * Return the current layout algorithm. The default is NARROW_COLUMNS.
-     * @return LayoutAlgorithm enum value describing the layout algorithm
-     *         being used.
+     * Gets the current layout algorithm.
+     *
+     * @return a LayoutAlgorithm enum value describing the layout algorithm
+     *         being used
+     * @see #setLayoutAlgorithm
      * @see WebSettings.LayoutAlgorithm
      */
     public synchronized LayoutAlgorithm getLayoutAlgorithm() {
@@ -513,164 +558,193 @@
     }
 
     /**
-     * Set the standard font family name.
-     * @param font A font family name.
+     * Sets the standard font family name. The default is "sans-serif".
+     *
+     * @param font a font family name
      */
     public synchronized void setStandardFontFamily(String font) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the standard font family name. The default is "sans-serif".
-     * @return The standard font family name as a string.
+     * Gets the standard font family name.
+     *
+     * @return the standard font family name as a string
+     * @see #setStandardFontFamily
      */
     public synchronized String getStandardFontFamily() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the fixed font family name.
-     * @param font A font family name.
+     * Sets the fixed font family name. The default is "monospace".
+     *
+     * @param font a font family name
      */
     public synchronized void setFixedFontFamily(String font) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the fixed font family name. The default is "monospace".
-     * @return The fixed font family name as a string.
+     * Gets the fixed font family name.
+     *
+     * @return the fixed font family name as a string
+     * @see #setFixedFontFamily
      */
     public synchronized String getFixedFontFamily() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the sans-serif font family name.
-     * @param font A font family name.
+     * Sets the sans-serif font family name.
+     *
+     * @param font a font family name
      */
     public synchronized void setSansSerifFontFamily(String font) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the sans-serif font family name.
-     * @return The sans-serif font family name as a string.
+     * Gets the sans-serif font family name.
+     *
+     * @return the sans-serif font family name as a string
      */
     public synchronized String getSansSerifFontFamily() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the serif font family name. The default is "sans-serif".
-     * @param font A font family name.
+     * Sets the serif font family name. The default is "sans-serif".
+     *
+     * @param font a font family name
      */
     public synchronized void setSerifFontFamily(String font) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the serif font family name. The default is "serif".
-     * @return The serif font family name as a string.
+     * Gets the serif font family name. The default is "serif".
+     *
+     * @return the serif font family name as a string
+     * @see #setSerifFontFamily
      */
     public synchronized String getSerifFontFamily() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the cursive font family name.
-     * @param font A font family name.
+     * Sets the cursive font family name. The default is "cursive".
+     *
+     * @param font a font family name
      */
     public synchronized void setCursiveFontFamily(String font) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the cursive font family name. The default is "cursive".
-     * @return The cursive font family name as a string.
+     * Gets the cursive font family name.
+     *
+     * @return the cursive font family name as a string
+     * @see #setCursiveFontFamily
      */
     public synchronized String getCursiveFontFamily() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the fantasy font family name.
-     * @param font A font family name.
+     * Sets the fantasy font family name. The default is "fantasy".
+     *
+     * @param font a font family name
      */
     public synchronized void setFantasyFontFamily(String font) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the fantasy font family name. The default is "fantasy".
-     * @return The fantasy font family name as a string.
+     * Gets the fantasy font family name.
+     *
+     * @return the fantasy font family name as a string
+     * @see #setFantasyFontFamily
      */
     public synchronized String getFantasyFontFamily() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the minimum font size.
-     * @param size A non-negative integer between 1 and 72.
-     * Any number outside the specified range will be pinned.
+     * Sets the minimum font size. The default is 8.
+     *
+     * @param size a non-negative integer between 1 and 72. Any number outside
+     *             the specified range will be pinned.
      */
     public synchronized void setMinimumFontSize(int size) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the minimum font size. The default is 8.
-     * @return A non-negative integer between 1 and 72.
+     * Gets the minimum font size.
+     *
+     * @return a non-negative integer between 1 and 72
+     * @see #setMinimumFontSize
      */
     public synchronized int getMinimumFontSize() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the minimum logical font size.
-     * @param size A non-negative integer between 1 and 72.
-     * Any number outside the specified range will be pinned.
+     * Sets the minimum logical font size. The default is 8.
+     *
+     * @param size a non-negative integer between 1 and 72. Any number outside
+     *             the specified range will be pinned.
      */
     public synchronized void setMinimumLogicalFontSize(int size) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the minimum logical font size. The default is 8.
-     * @return A non-negative integer between 1 and 72.
+     * Gets the minimum logical font size.
+     *
+     * @return a non-negative integer between 1 and 72
+     * @see #setMinimumLogicalFontSize
      */
     public synchronized int getMinimumLogicalFontSize() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the default font size.
-     * @param size A non-negative integer between 1 and 72.
-     * Any number outside the specified range will be pinned.
+     * Sets the default font size. The default is 16.
+     *
+     * @param size a non-negative integer between 1 and 72. Any number outside
+     *             the specified range will be pinned.
      */
     public synchronized void setDefaultFontSize(int size) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the default font size. The default is 16.
-     * @return A non-negative integer between 1 and 72.
+     * Gets the default font size.
+     *
+     * @return a non-negative integer between 1 and 72
+     * @see #setDefaultFontSize
      */
     public synchronized int getDefaultFontSize() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the default fixed font size.
-     * @param size A non-negative integer between 1 and 72.
-     * Any number outside the specified range will be pinned.
+     * Sets the default fixed font size. The default is 16.
+     *
+     * @param size a non-negative integer between 1 and 72. Any number outside
+     *             the specified range will be pinned.
      */
     public synchronized void setDefaultFixedFontSize(int size) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the default fixed font size. The default is 16.
-     * @return A non-negative integer between 1 and 72.
+     * Gets the default fixed font size.
+     *
+     * @return a non-negative integer between 1 and 72
+     * @see #setDefaultFixedFontSize
      */
     public synchronized int getDefaultFixedFontSize() {
         throw new MustOverrideException();
@@ -683,16 +757,20 @@
      * of images specified using network URI schemes. Note that if the value of this
      * setting is changed from false to true, all images resources referenced
      * by content currently displayed by the WebView are loaded automatically.
-     * @param flag Whether the WebView should load image resources.
+     * The default is true.
+     *
+     * @param flag whether the WebView should load image resources
      */
     public synchronized void setLoadsImagesAutomatically(boolean flag) {
         throw new MustOverrideException();
     }
 
     /**
-     * Returns true if the WebView loads image resources. This includes
-     * images embedded using the data URI scheme. The default is true.
-     * @return True if the WebView loads image resources.
+     * Gets whether the WebView loads image resources. This includes
+     * images embedded using the data URI scheme.
+     *
+     * @return true if the WebView loads image resources
+     * @see #setLoadsImagesAutomatically
      */
     public synchronized boolean getLoadsImagesAutomatically() {
         throw new MustOverrideException();
@@ -707,9 +785,10 @@
      * will also prevent network images from loading, even if this flag is set
      * to false. When the value of this setting is changed from true to false,
      * network images resources referenced by content currently displayed by
-     * the WebView are fetched automatically.
-     * @param flag Whether the WebView should not load image resources from
-     * the network.
+     * the WebView are fetched automatically. The default is false.
+     *
+     * @param flag whether the WebView should not load image resources from the
+     *             network
      * @see #setBlockNetworkLoads
      */
     public synchronized void setBlockNetworkImage(boolean flag) {
@@ -717,9 +796,10 @@
     }
 
     /**
-     * Returns true if the WebView does not load image resources from the network.
-     * The default is false.
-     * @return True if the WebView does not load image resources from the network.
+     * Gets whether the WebView does not load image resources from the network.
+     *
+     * @return true if the WebView does not load image resources from the network
+     * @see #setBlockNetworkImage
      */
     public synchronized boolean getBlockNetworkImage() {
         throw new MustOverrideException();
@@ -735,9 +815,12 @@
      * If the application does not have the
      * {@link android.Manifest.permission#INTERNET} permission, attempts to set
      * a value of false will cause a {@link java.lang.SecurityException}
-     * to be thrown.
-     * @param flag Whether the WebView should not load any resources
-     * from the network.
+     * to be thrown. The default value is false if the application has the
+     * {@link android.Manifest.permission#INTERNET} permission, otherwise it is
+     * true.
+     *
+     * @param flag whether the WebView should not load any resources from the
+     *             network
      * @see android.webkit.WebView#reload
      */
     public synchronized void setBlockNetworkLoads(boolean flag) {
@@ -745,50 +828,52 @@
     }
 
     /**
-     * Returns true if the WebView does not load any resources from the network.
-     * The default value is false if the application has the
-     * {@link android.Manifest.permission#INTERNET} permission, otherwise it is
-     * true.
-     * @return True if the WebView does not load any resources from the network.
+     * Gets whether the WebView does not load any resources from the network.
+     *
+     * @return true if the WebView does not load any resources from the network
+     * @see #setBlockNetworkLoads
      */
     public synchronized boolean getBlockNetworkLoads() {
         throw new MustOverrideException();
     }
 
     /**
-     * Tell the WebView to enable javascript execution.
-     * @param flag True if the WebView should execute javascript.
+     * Tells the WebView to enable JavaScript execution.
+     * <b>The default is false.</b>
+     *
+     * @param flag true if the WebView should execute JavaScript
      */
     public synchronized void setJavaScriptEnabled(boolean flag) {
         throw new MustOverrideException();
     }
 
     /**
-     * Configure scripting (such as XmlHttpRequest) access from file scheme URLs
+     * Configures scripting (such as XmlHttpRequest) access from file scheme URLs
      * to any origin. Note, calling this method with a true argument value also
      * implies calling setAllowFileAccessFromFileURLs with a true. The default
      * value is false for API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN}
      * and higher and true otherwise.
      *
-   . * @param flag True if the WebView should allow scripting access from file
-     *                  scheme URLs to any origin
+     * @param flag true if the WebView should allow scripting access from file
+     *             scheme URLs to any origin
      */
     public abstract void setAllowUniversalAccessFromFileURLs(boolean flag);
 
     /**
-     * Configure scripting (such as XmlHttpRequest) access from file scheme URLs
+     * Configures scripting (such as XmlHttpRequest) access from file scheme URLs
      * to file origin. The default value is false for API level
      * {@link android.os.Build.VERSION_CODES#JELLY_BEAN} and higher and true
      * otherwise.
      *
-     * @param flag True if the WebView should allow scripting access from file
-     *                  scheme URLs to file origin
+     * @param flag true if the WebView should allow scripting access from file
+     *             scheme URLs to file origin
      */
     public abstract void setAllowFileAccessFromFileURLs(boolean flag);
 
     /**
-     * Tell the WebView to enable plugins.
-     * @param flag True if the WebView should load plugins.
+     * Tells the WebView to enable plugins.
+     *
+     * @param flag true if the WebView should load plugins
      * @deprecated This method has been deprecated in favor of
      *             {@link #setPluginState}
      */
@@ -798,22 +883,24 @@
     }
 
     /**
-     * Tell the WebView to enable, disable, or have plugins on demand. On
+     * Tells the WebView to enable, disable, or have plugins on demand. On
      * demand mode means that if a plugin exists that can handle the embedded
      * content, a placeholder icon will be shown instead of the plugin. When
      * the placeholder is clicked, the plugin will be enabled.
-     * @param state One of the PluginState values.
+     *
+     * @param state a PluginState value
      */
     public synchronized void setPluginState(PluginState state) {
         throw new MustOverrideException();
     }
 
     /**
-     * Set a custom path to plugins used by the WebView. This method is
+     * Sets a custom path to plugins used by the WebView. This method is
      * obsolete since each plugin is now loaded from its own package.
-     * @param pluginsPath String path to the directory containing plugins.
+     *
+     * @param pluginsPath a String path to the directory containing plugins
      * @deprecated This method is no longer used as plugins are loaded from
-     * their own APK via the system's package manager.
+     *             their own APK via the system's package manager.
      */
     @Deprecated
     public synchronized void setPluginsPath(String pluginsPath) {
@@ -821,91 +908,101 @@
     }
 
     /**
-     * Set the path to where database storage API databases should be saved.
-     * Nota that the WebCore Database Tracker only allows the path to be set once.
-     * This will update WebCore when the Sync runs in the C++ side.
-     * @param databasePath String path to the directory where databases should
-     *     be saved. May be the empty string but should never be null.
+     * Sets the path to where database storage API databases should be saved.
+     * Note that the WebCore Database Tracker only allows the path to be set once.
+     *
+     * @param databasePath a String path to the directory where databases should
+     *                     be saved. May be the empty string but should never
+     *                     be null.
      */
+    // This will update WebCore when the Sync runs in the C++ side.
     public synchronized void setDatabasePath(String databasePath) {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the path where the Geolocation permissions database should be saved.
-     * This will update WebCore when the Sync runs in the C++ side.
-     * @param databasePath String path to the directory where the Geolocation
-     *     permissions database should be saved. May be the empty string but
-     *     should never be null.
+     * Sets the path where the Geolocation permissions database should be saved.
+     *
+     * @param databasePath a String path to the directory where the Geolocation
+     *                     permissions database should be saved. May be the
+     *                     empty string but should never be null.
      */
+    // This will update WebCore when the Sync runs in the C++ side.
     public synchronized void setGeolocationDatabasePath(String databasePath) {
         throw new MustOverrideException();
     }
 
     /**
-     * Tell the WebView to enable Application Caches API.
-     * @param flag True if the WebView should enable Application Caches.
+     * Tells the WebView to enable Application Caches API.
+     *
+     * @param flag true if the WebView should enable Application Caches
      */
     public synchronized void setAppCacheEnabled(boolean flag) {
         throw new MustOverrideException();
     }
 
     /**
-     * Set a custom path to the Application Caches files. The client
+     * Sets a custom path to the Application Caches files. The client
      * must ensure it exists before this call.
-     * @param appCachePath String path to the directory containing Application
-     * Caches files. The appCache path can be the empty string but should not
-     * be null. Passing null for this parameter will result in a no-op.
+     *
+     * @param appCachePath a String path to the directory containing
+     *                     Application Caches files. The appCache path can be
+     *                     the empty string but should not be null. Passing
+     *                     null for this parameter will result in a no-op.
      */
     public synchronized void setAppCachePath(String appCachePath) {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the maximum size for the Application Caches content.
-     * @param appCacheMaxSize the maximum size in bytes.
+     * Sets the maximum size for the Application Caches content.
+     *
+     * @param appCacheMaxSize the maximum size in bytes
      */
     public synchronized void setAppCacheMaxSize(long appCacheMaxSize) {
         throw new MustOverrideException();
     }
 
     /**
-     * Set whether the database storage API is enabled.
-     * @param flag boolean True if the WebView should use the database storage
-     *     API.
+     * Sets whether the database storage API is enabled.
+     *
+     * @param flag true if the WebView should use the database storage API
      */
     public synchronized void setDatabaseEnabled(boolean flag) {
         throw new MustOverrideException();
     }
 
     /**
-     * Set whether the DOM storage API is enabled.
-     * @param flag boolean True if the WebView should use the DOM storage
-     *     API.
+     * Sets whether the DOM storage API is enabled.
+     *
+     * @param flag true if the WebView should use the DOM storage API
      */
     public synchronized void setDomStorageEnabled(boolean flag) {
         throw new MustOverrideException();
     }
 
     /**
-     * Returns true if the DOM Storage API's are enabled.
-     * @return True if the DOM Storage API's are enabled.
+     * Gets whether the DOM Storage APIs are enabled.
+     *
+     * @return true if the DOM Storage APIs are enabled
      */
     public synchronized boolean getDomStorageEnabled() {
         throw new MustOverrideException();
     }
     /**
-     * Return the path to where database storage API databases are saved for
+     * Gets the path to where database storage API databases are saved for
      * the current WebView.
-     * @return the String path to the database storage API databases.
+     *
+     * @return the String path to the database storage API databases
      */
     public synchronized String getDatabasePath() {
         throw new MustOverrideException();
     }
 
     /**
-     * Returns true if database storage API is enabled.
-     * @return True if the database storage API is enabled.
+     * Gets whether the database storage API is enabled.
+     *
+     * @return true if the database storage API is enabled
      */
     public synchronized boolean getDatabaseEnabled() {
         throw new MustOverrideException();
@@ -913,43 +1010,47 @@
 
     /**
      * Sets whether Geolocation is enabled.
-     * @param flag Whether Geolocation should be enabled.
+     *
+     * @param flag whether Geolocation should be enabled
      */
     public synchronized void setGeolocationEnabled(boolean flag) {
         throw new MustOverrideException();
     }
 
     /**
-     * Return true if javascript is enabled. <b>Note: The default is false.</b>
-     * @return True if javascript is enabled.
+     * Gets whether JavaScript is enabled.
+     *
+     * @return true if JavaScript is enabled
+     * @see #setJavaScriptEnabled
      */
     public synchronized boolean getJavaScriptEnabled() {
         throw new MustOverrideException();
     }
 
     /**
-     * Return true if scripting access {see @setAllowUniversalAccessFromFileURLs} from
-     * file URLs to any origin is enabled. The default value is false for API level
-     * {@link android.os.Build.VERSION_CODES#JELLY_BEAN} and higher and true otherwise.
+     * Gets whether scripting access {see @setAllowUniversalAccessFromFileURLs} from
+     * file URLs to any origin is enabled.
      *
-     * @return True if the WebView allows scripting access from file scheme requests
-     *              to any origin
+     * @return true if the WebView allows scripting access from file scheme requests
+     *         to any origin
+     * @see #setAllowUniversalAccessFromFileURLs
      */
     public abstract boolean getAllowUniversalAccessFromFileURLs();
 
     /**
-     * Return true if scripting access {see @setAllowFileAccessFromFileURLs} from file
-     * URLs to file origin is enabled. The default value is false for API level
-     * {@link android.os.Build.VERSION_CODES#JELLY_BEAN} and higher, and true otherwise.
+     * Gets whether scripting access {see @setAllowFileAccessFromFileURLs} from file
+     * URLs to file origin is enabled.
      *
-     * @return True if the WebView allows scripting access from file scheme requests
-     *              to file origin
+     * @return true if the WebView allows scripting access from file scheme requests
+     *         to file origin
+     * @see #setAllowFileAccessFromFileURLs
      */
     public abstract boolean getAllowFileAccessFromFileURLs();
 
     /**
-     * Return true if plugins are enabled.
-     * @return True if plugins are enabled.
+     * Gets whether plugins are enabled.
+     *
+     * @return true if plugins are enabled
      * @deprecated This method has been replaced by {@link #getPluginState}
      */
     @Deprecated
@@ -958,17 +1059,19 @@
     }
 
     /**
-     * Return the current plugin state.
-     * @return A value corresponding to the enum PluginState.
+     * Gets the current plugin state.
+     *
+     * @return a value corresponding to the enum PluginState
      */
     public synchronized PluginState getPluginState() {
         throw new MustOverrideException();
     }
 
     /**
-     * Returns the directory that contains the plugin libraries. This method is
+     * Gets the directory that contains the plugin libraries. This method is
      * obsolete since each plugin is now loaded from its own package.
-     * @return An empty string.
+     *
+     * @return an empty string
      * @deprecated This method is no longer used as plugins are loaded from
      * their own APK via the system's package manager.
      */
@@ -979,41 +1082,47 @@
     }
 
     /**
-     * Tell javascript to open windows automatically. This applies to the
-     * javascript function window.open().
-     * @param flag True if javascript can open windows automatically.
+     * Tells JavaScript to open windows automatically. This applies to the
+     * JavaScript function window.open(). The default is false.
+     *
+     * @param flag true if JavaScript can open windows automatically
      */
     public synchronized void setJavaScriptCanOpenWindowsAutomatically(boolean flag) {
         throw new MustOverrideException();
     }
 
     /**
-     * Return true if javascript can open windows automatically. The default
-     * is false.
-     * @return True if javascript can open windows automatically during
-     *         window.open().
+     * Gets whether JavaScript can open windows automatically.
+     *
+     * @return true if JavaScript can open windows automatically during
+     *         window.open()
+     * @see #setJavaScriptCanOpenWindowsAutomatically
      */
     public synchronized boolean getJavaScriptCanOpenWindowsAutomatically() {
         throw new MustOverrideException();
     }
     /**
-     * Set the default text encoding name to use when decoding html pages.
-     * @param encoding The text encoding name.
+     * Sets the default text encoding name to use when decoding html pages.
+     * The default is "Latin-1".
+     *
+     * @param encoding the text encoding name
      */
     public synchronized void setDefaultTextEncodingName(String encoding) {
         throw new MustOverrideException();
     }
 
     /**
-     * Get the default text encoding name. The default is "Latin-1".
-     * @return The default text encoding name as a string.
+     * Gets the default text encoding name.
+     *
+     * @return the default text encoding name as a string
+     * @see #setDefaultTextEncodingName
      */
     public synchronized String getDefaultTextEncodingName() {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the WebView's user-agent string. If the string "ua" is null or empty,
+     * Sets the WebView's user-agent string. If the string "ua" is null or empty,
      * it will use the system default user-agent string.
      */
     public synchronized void setUserAgentString(String ua) {
@@ -1021,46 +1130,47 @@
     }
 
     /**
-     * Return the WebView's user-agent string.
+     * Gets the WebView's user-agent string.
      */
     public synchronized String getUserAgentString() {
         throw new MustOverrideException();
     }
 
     /**
-     * Tell the WebView whether it needs to set a node to have focus when
+     * Tells the WebView whether it needs to set a node to have focus when
      * {@link WebView#requestFocus(int, android.graphics.Rect)} is called.
      *
-     * @param flag
+     * @param flag whether the WebView needs to set a node
      */
     public void setNeedInitialFocus(boolean flag) {
         throw new MustOverrideException();
     }
 
     /**
-     * Set the priority of the Render thread. Unlike the other settings, this
+     * Sets the priority of the Render thread. Unlike the other settings, this
      * one only needs to be called once per process. The default is NORMAL.
      *
-     * @param priority RenderPriority, can be normal, high or low.
+     * @param priority a RenderPriority
      */
     public synchronized void setRenderPriority(RenderPriority priority) {
         throw new MustOverrideException();
     }
 
     /**
-     * Override the way the cache is used. The way the cache is used is based
+     * Overrides the way the cache is used. The way the cache is used is based
      * on the navigation option. For a normal page load, the cache is checked
      * and content is re-validated as needed. When navigating back, content is
      * not revalidated, instead the content is just pulled from the cache.
      * This function allows the client to override this behavior.
-     * @param mode One of the LOAD_ values.
+     *
+     * @param mode one of the LOAD_ values
      */
     public void setCacheMode(int mode) {
         throw new MustOverrideException();
     }
 
     /**
-     * Return the current setting for overriding the cache mode. For a full
+     * Gets the current setting for overriding the cache mode. For a full
      * description, see the {@link #setCacheMode(int)} function.
      */
     public int getCacheMode() {
diff --git a/core/java/android/webkit/WebStorage.java b/core/java/android/webkit/WebStorage.java
index c46d161..76674f4 100644
--- a/core/java/android/webkit/WebStorage.java
+++ b/core/java/android/webkit/WebStorage.java
@@ -44,8 +44,9 @@
     // otherwise the WebCore thread will remain asleep.
     public interface QuotaUpdater {
         /**
-         * Provide a new quota, specified in bytes.
-         * @param newQuota The new quota, in bytes
+         * Provides a new quota, specified in bytes.
+         *
+         * @param newQuota the new quota, in bytes
          */
         public void updateQuota(long newQuota);
     };
@@ -79,8 +80,9 @@
         }
 
         /**
-         * Get the string representation of this origin.
-         * @return The string representation of this origin
+         * Gets the string representation of this origin.
+         *
+         * @return the string representation of this origin
          */
         // An origin string is created using WebCore::SecurityOrigin::toString().
         // Note that WebCore::SecurityOrigin uses 0 (which is not printed) for
@@ -92,19 +94,21 @@
         }
 
         /**
-         * Get the quota for this origin, for the Web SQL Database API, in
+         * Gets the quota for this origin, for the Web SQL Database API, in
          * bytes. If this origin does not use the Web SQL Database API, this
          * quota will be set to zero.
-         * @return The quota, in bytes.
+         *
+         * @return the quota, in bytes
          */
         public long getQuota() {
             return mQuota;
         }
 
         /**
-         * Get the total amount of storage currently being used by this origin,
+         * Gets the total amount of storage currently being used by this origin,
          * for all JavaScript storage APIs, in bytes.
-         * @return The total amount of storage, in bytes.
+         *
+         * @return the total amount of storage, in bytes
          */
         public long getUsage() {
             return mUsage;
@@ -124,7 +128,7 @@
      */
 
     /**
-     * Get the origins currently using either the Application Cache or Web SQL
+     * Gets the origins currently using either the Application Cache or Web SQL
      * Database APIs. This method operates asynchronously, with the result
      * being provided via a {@link ValueCallback}. The origins are provided as
      * a map, of type {@code Map<String, WebStorage.Origin>}, from the string
@@ -135,7 +139,7 @@
     }
 
     /**
-     * Get the amount of storage currently being used by both the Application
+     * Gets the amount of storage currently being used by both the Application
      * Cache and Web SQL Database APIs by the given origin. The amount is given
      * in bytes and the origin is specified using its string representation.
      * This method operates asynchronously, with the result being provided via
@@ -146,7 +150,7 @@
     }
 
     /**
-     * Get the storage quota for the Web SQL Database API for the given origin.
+     * Gets the storage quota for the Web SQL Database API for the given origin.
      * The quota is given in bytes and the origin is specified using its string
      * representation. This method operates asynchronously, with the result
      * being provided via a {@link ValueCallback}. Note that a quota is not
@@ -157,7 +161,7 @@
     }
 
     /**
-     * Set the storage quota for the Web SQL Database API for the given origin.
+     * Sets the storage quota for the Web SQL Database API for the given origin.
      * The quota is specified in bytes and the origin is specified using its string
      * representation. Note that a quota is not enforced on a per-origin basis
      * for the Application Cache API.
@@ -167,7 +171,7 @@
     }
 
     /**
-     * Clear the storage currently being used by both the Application Cache and
+     * Clears the storage currently being used by both the Application Cache and
      * Web SQL Database APIs by the given origin. The origin is specified using
      * its string representation.
      */
@@ -176,7 +180,7 @@
     }
 
     /**
-     * Clear all storage currently being used by the JavaScript storage APIs.
+     * Clears all storage currently being used by the JavaScript storage APIs.
      * This includes the Application Cache, Web SQL Database and the HTML5 Web
      * Storage APIs.
      */
@@ -185,8 +189,9 @@
     }
 
     /**
-     * Get the singleton instance of this class.
-     * @return The singleton {@link WebStorage} instance.
+     * Gets the singleton instance of this class.
+     *
+     * @return the singleton {@link WebStorage} instance
      */
     public static WebStorage getInstance() {
       return WebViewFactory.getProvider().getWebStorage();
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 74605e2..ba5a417 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -274,16 +274,18 @@
         private WebView mWebview;
 
         /**
-         * Set the WebView to the transportation object.
-         * @param webview The WebView to transport.
+         * Sets the WebView to the transportation object.
+         *
+         * @param webview the WebView to transport
          */
         public synchronized void setWebView(WebView webview) {
             mWebview = webview;
         }
 
         /**
-         * Return the WebView object.
-         * @return WebView The transported WebView object.
+         * Gets the WebView object.
+         *
+         * @return the transported WebView object
          */
         public synchronized WebView getWebView() {
             return mWebview;
@@ -291,15 +293,15 @@
     }
 
     /**
-     * URI scheme for telephone number
+     * URI scheme for telephone number.
      */
     public static final String SCHEME_TEL = "tel:";
     /**
-     * URI scheme for email address
+     * URI scheme for email address.
      */
     public static final String SCHEME_MAILTO = "mailto:";
     /**
-     * URI scheme for map address
+     * URI scheme for map address.
      */
     public static final String SCHEME_GEO = "geo:0,0?q=";
 
@@ -308,13 +310,15 @@
      */
     public interface FindListener {
         /**
-         * Notify the listener about progress made by a find operation.
+         * Notifies the listener about progress made by a find operation.
          *
-         * @param numberOfMatches How many matches have been found.
-         * @param activeMatchOrdinal The zero-based ordinal of the currently selected match.
-         * @param isDoneCounting Whether the find operation has actually completed. The listener
-         * may be notified multiple times while the operation is underway, and the numberOfMatches
-         * value should not be considered final unless isDoneCounting is true.
+         * @param numberOfMatches how many matches have been found
+         * @param activeMatchOrdinal the zero-based ordinal of the currently selected match
+         * @param isDoneCounting whether the find operation has actually completed. The listener
+         *                       may be notified multiple times while the
+         *                       operation is underway, and the numberOfMatches
+         *                       value should not be considered final unless
+         *                       isDoneCounting is true.
          */
         public void onFindResultReceived(int numberOfMatches, int activeMatchOrdinal,
             boolean isDoneCounting);
@@ -322,19 +326,22 @@
 
     /**
      * Interface to listen for new pictures as they change.
+     *
      * @deprecated This interface is now obsolete.
      */
     @Deprecated
     public interface PictureListener {
         /**
-         * Notify the listener that the picture has changed.
-         * @param view The WebView that owns the picture.
-         * @param picture The new picture.
+         * Notifies the listener that the picture has changed.
+         *
+         * @param view the WebView that owns the picture
+         * @param picture the new picture
          * @deprecated Due to internal changes, the picture does not include
-         * composited layers such as fixed position elements or scrollable divs.
-         * While the PictureListener API can still be used to detect changes in
-         * the WebView content, you are advised against its usage until a replacement
-         * is provided in a future Android release
+         *             composited layers such as fixed position elements or
+         *             scrollable divs. While the PictureListener API can still
+         *             be used to detect changes in the WebView content, you
+         *             are advised against its usage until a replacement is
+         *             provided in a future Android release.
          */
         @Deprecated
         public void onNewPicture(WebView view, Picture picture);
@@ -342,7 +349,7 @@
 
     public static class HitTestResult {
         /**
-         * Default HitTestResult, where the target is unknown
+         * Default HitTestResult, where the target is unknown.
          */
         public static final int UNKNOWN_TYPE = 0;
         /**
@@ -351,19 +358,19 @@
         @Deprecated
         public static final int ANCHOR_TYPE = 1;
         /**
-         * HitTestResult for hitting a phone number
+         * HitTestResult for hitting a phone number.
          */
         public static final int PHONE_TYPE = 2;
         /**
-         * HitTestResult for hitting a map address
+         * HitTestResult for hitting a map address.
          */
         public static final int GEO_TYPE = 3;
         /**
-         * HitTestResult for hitting an email address
+         * HitTestResult for hitting an email address.
          */
         public static final int EMAIL_TYPE = 4;
         /**
-         * HitTestResult for hitting an HTML::img tag
+         * HitTestResult for hitting an HTML::img tag.
          */
         public static final int IMAGE_TYPE = 5;
         /**
@@ -372,15 +379,15 @@
         @Deprecated
         public static final int IMAGE_ANCHOR_TYPE = 6;
         /**
-         * HitTestResult for hitting a HTML::a tag with src=http
+         * HitTestResult for hitting a HTML::a tag with src=http.
          */
         public static final int SRC_ANCHOR_TYPE = 7;
         /**
-         * HitTestResult for hitting a HTML::a tag with src=http + HTML::img
+         * HitTestResult for hitting a HTML::a tag with src=http + HTML::img.
          */
         public static final int SRC_IMAGE_ANCHOR_TYPE = 8;
         /**
-         * HitTestResult for hitting an edit text area
+         * HitTestResult for hitting an edit text area.
          */
         public static final int EDIT_TEXT_TYPE = 9;
 
@@ -409,17 +416,21 @@
         }
 
         /**
-         * Gets the type of the hit test result.
-         * @return See the XXX_TYPE constants defined in this class.
+         * Gets the type of the hit test result. See the XXX_TYPE constants
+         * defined in this class.
+         *
+         * @return the type of the hit test result
          */
         public int getType() {
             return mType;
         }
 
         /**
-         * Gets additional type-dependant information about the result, see
-         * {@link WebView#getHitTestResult()} for details.
-         * @return may either be null or contain extra information about this result.
+         * Gets additional type-dependant information about the result. See
+         * {@link WebView#getHitTestResult()} for details. May either be null
+         * or contain extra information about this result.
+         *
+         * @return additional type-dependant information about the result
          */
         public String getExtra() {
             return mExtra;
@@ -427,38 +438,43 @@
     }
 
     /**
-     * Construct a new WebView with a Context object.
-     * @param context A Context object used to access application assets.
+     * Constructs a new WebView with a Context object.
+     *
+     * @param context a Context object used to access application assets
      */
     public WebView(Context context) {
         this(context, null);
     }
 
     /**
-     * Construct a new WebView with layout parameters.
-     * @param context A Context object used to access application assets.
-     * @param attrs An AttributeSet passed to our parent.
+     * Constructs a new WebView with layout parameters.
+     *
+     * @param context a Context object used to access application assets
+     * @param attrs an AttributeSet passed to our parent
      */
     public WebView(Context context, AttributeSet attrs) {
         this(context, attrs, com.android.internal.R.attr.webViewStyle);
     }
 
     /**
-     * Construct a new WebView with layout parameters and a default style.
-     * @param context A Context object used to access application assets.
-     * @param attrs An AttributeSet passed to our parent.
-     * @param defStyle The default style resource ID.
+     * Constructs a new WebView with layout parameters and a default style.
+     *
+     * @param context a Context object used to access application assets
+     * @param attrs an AttributeSet passed to our parent
+     * @param defStyle the default style resource ID
      */
     public WebView(Context context, AttributeSet attrs, int defStyle) {
         this(context, attrs, defStyle, false);
     }
 
     /**
-     * Construct a new WebView with layout parameters and a default style.
-     * @param context A Context object used to access application assets.
-     * @param attrs An AttributeSet passed to our parent.
-     * @param defStyle The default style resource ID.
-     * @param privateBrowsing If true the web view will be initialized in private mode.
+     * Constructs a new WebView with layout parameters and a default style.
+     *
+     * @param context a Context object used to access application assets
+     * @param attrs an AttributeSet passed to our parent
+     * @param defStyle the default style resource ID
+     * @param privateBrowsing whether this WebView will be initialized in
+     *                        private mode
      */
     public WebView(Context context, AttributeSet attrs, int defStyle,
             boolean privateBrowsing) {
@@ -466,18 +482,21 @@
     }
 
     /**
-     * Construct a new WebView with layout parameters, a default style and a set
-     * of custom Javscript interfaces to be added to the WebView at initialization
+     * Constructs a new WebView with layout parameters, a default style and a set
+     * of custom Javscript interfaces to be added to this WebView at initialization
      * time. This guarantees that these interfaces will be available when the JS
      * context is initialized.
-     * @param context A Context object used to access application assets.
-     * @param attrs An AttributeSet passed to our parent.
-     * @param defStyle The default style resource ID.
-     * @param javaScriptInterfaces is a Map of interface names, as keys, and
-     * object implementing those interfaces, as values.
-     * @param privateBrowsing If true the web view will be initialized in private mode.
+     *
+     * @param context a Context object used to access application assets
+     * @param attrs an AttributeSet passed to our parent
+     * @param defStyle the default style resource ID
+     * @param javaScriptInterfaces a Map of interface names, as keys, and
+     *                             object implementing those interfaces, as
+     *                             values
+     * @param privateBrowsing whether this WebView will be initialized in
+     *                        private mode
      * @hide This is used internally by dumprendertree, as it requires the javaScript interfaces to
-     * be added synchronously, before a subsequent loadUrl call takes effect.
+     *       be added synchronously, before a subsequent loadUrl call takes effect.
      */
     @SuppressWarnings("deprecation")  // for super() call into deprecated base class constructor.
     protected WebView(Context context, AttributeSet attrs, int defStyle,
@@ -493,8 +512,9 @@
     }
 
     /**
-     * Specify whether the horizontal scrollbar has overlay style.
-     * @param overlay TRUE if horizontal scrollbar should have overlay style.
+     * Specifies whether the horizontal scrollbar has overlay style.
+     *
+     * @param overlay true if horizontal scrollbar should have overlay style
      */
     public void setHorizontalScrollbarOverlay(boolean overlay) {
         checkThread();
@@ -502,8 +522,9 @@
     }
 
     /**
-     * Specify whether the vertical scrollbar has overlay style.
-     * @param overlay TRUE if vertical scrollbar should have overlay style.
+     * Specifies whether the vertical scrollbar has overlay style.
+     *
+     * @param overlay true if vertical scrollbar should have overlay style
      */
     public void setVerticalScrollbarOverlay(boolean overlay) {
         checkThread();
@@ -511,8 +532,9 @@
     }
 
     /**
-     * Return whether horizontal scrollbar has overlay style
-     * @return TRUE if horizontal scrollbar has overlay style.
+     * Gets whether horizontal scrollbar has overlay style.
+     *
+     * @return true if horizontal scrollbar has overlay style
      */
     public boolean overlayHorizontalScrollbar() {
         checkThread();
@@ -520,8 +542,9 @@
     }
 
     /**
-     * Return whether vertical scrollbar has overlay style
-     * @return TRUE if vertical scrollbar has overlay style.
+     * Gets whether vertical scrollbar has overlay style.
+     *
+     * @return true if vertical scrollbar has overlay style
      */
     public boolean overlayVerticalScrollbar() {
         checkThread();
@@ -529,7 +552,7 @@
     }
 
     /**
-     * Return the visible height (in pixels) of the embedded title bar (if any).
+     * Gets the visible height (in pixels) of the embedded title bar (if any).
      *
      * @deprecated This method is now obsolete.
      */
@@ -539,8 +562,10 @@
     }
 
     /**
-     * @return The SSL certificate for the main top-level page or null if
-     * there is no certificate (the site is not secure).
+     * Gets the SSL certificate for the main top-level page or null if there is
+     * no certificate (the site is not secure).
+     *
+     * @return the SSL certificate for the main top-level page
      */
     public SslCertificate getCertificate() {
         checkThread();
@@ -560,11 +585,12 @@
     //-------------------------------------------------------------------------
 
     /**
-     * Save the username and password for a particular host in the WebView's
+     * Saves the username and password for a particular host in this WebView's
      * internal database.
-     * @param host The host that required the credentials.
-     * @param username The username for the given host.
-     * @param password The password for the given host.
+     *
+     * @param host the host that required the credentials
+     * @param username the username for the given host
+     * @param password the password for the given host
      */
     public void savePassword(String host, String username, String password) {
         checkThread();
@@ -572,13 +598,13 @@
     }
 
     /**
-     * Set the HTTP authentication credentials for a given host and realm.
+     * Sets the HTTP authentication credentials for a given host and realm.
      *
-     * @param host The host for the credentials.
-     * @param realm The realm for the credentials.
-     * @param username The username for the password. If it is null, it means
+     * @param host the host for the credentials
+     * @param realm the realm for the credentials
+     * @param username the username for the password. If it is null, it means
      *                 password can't be saved.
-     * @param password The password
+     * @param password the password
      */
     public void setHttpAuthUsernamePassword(String host, String realm,
             String username, String password) {
@@ -587,12 +613,12 @@
     }
 
     /**
-     * Retrieve the HTTP authentication username and password for a given
-     * host & realm pair
+     * Retrieves the HTTP authentication username and password for a given
+     * host and realm pair
      *
-     * @param host The host for which the credentials apply.
-     * @param realm The realm for which the credentials apply.
-     * @return String[] if found, String[0] is username, which can be null and
+     * @param host the host for which the credentials apply
+     * @param realm the realm for which the credentials apply
+     * @return String[] if found. String[0] is username, which can be null and
      *         String[1] is password. Return null if it can't find anything.
      */
     public String[] getHttpAuthUsernamePassword(String host, String realm) {
@@ -601,9 +627,9 @@
     }
 
     /**
-     * Destroy the internal state of the WebView. This method should be called
-     * after the WebView has been removed from the view system. No other
-     * methods may be called on a WebView after destroy.
+     * Destroys the internal state of this WebView. This method should be called
+     * after this WebView has been removed from the view system. No other
+     * methods may be called on this WebView after destroy.
      */
     public void destroy() {
         checkThread();
@@ -635,10 +661,11 @@
     }
 
     /**
-     * Inform WebView of the network state. This is used to set
+     * Informs WebView of the network state. This is used to set
      * the JavaScript property window.navigator.isOnline and
      * generates the online/offline event as specified in HTML5, sec. 5.7.7
-     * @param networkUp boolean indicating if network is available
+     *
+     * @param networkUp a boolean indicating if network is available
      */
     public void setNetworkAvailable(boolean networkUp) {
         checkThread();
@@ -646,14 +673,15 @@
     }
 
     /**
-     * Save the state of this WebView used in
+     * Saves the state of this WebView used in
      * {@link android.app.Activity#onSaveInstanceState}. Please note that this
      * method no longer stores the display data for this WebView. The previous
      * behavior could potentially leak files if {@link #restoreState} was never
      * called. See {@link #savePicture} and {@link #restorePicture} for saving
      * and restoring the display data.
-     * @param outState The Bundle to store the WebView state.
-     * @return The same copy of the back/forward list used to save the state. If
+     *
+     * @param outState the Bundle to store this WebView's state
+     * @return the same copy of the back/forward list used to save the state. If
      *         saveState fails, the returned list will be null.
      * @see #savePicture
      * @see #restorePicture
@@ -664,12 +692,12 @@
     }
 
     /**
-     * Save the current display data to the Bundle given. Used in conjunction
+     * Saves the current display data to the Bundle given. Used in conjunction
      * with {@link #saveState}.
-     * @param b A Bundle to store the display data.
-     * @param dest The file to store the serialized picture data. Will be
+     * @param b a Bundle to store the display data
+     * @param dest the file to store the serialized picture data. Will be
      *             overwritten with this WebView's picture data.
-     * @return True if the picture was successfully saved.
+     * @return true if the picture was successfully saved
      * @deprecated This method is now obsolete.
      */
     @Deprecated
@@ -679,13 +707,13 @@
     }
 
     /**
-     * Restore the display data that was save in {@link #savePicture}. Used in
-     * conjunction with {@link #restoreState}.
+     * Restores the display data that was saved in {@link #savePicture}. Used in
+     * conjunction with {@link #restoreState}. Note that this will not work if
+     * this WebView is hardware accelerated.
      *
-     * Note that this will not work if the WebView is hardware accelerated.
-     * @param b A Bundle containing the saved display data.
-     * @param src The file where the picture data was stored.
-     * @return True if the picture was successfully restored.
+     * @param b a Bundle containing the saved display data
+     * @param src the file where the picture data was stored
+     * @return true if the picture was successfully restored
      * @deprecated This method is now obsolete.
      */
     @Deprecated
@@ -695,16 +723,17 @@
     }
 
     /**
-     * Restore the state of this WebView from the given map used in
+     * Restores the state of this WebView from the given map used in
      * {@link android.app.Activity#onRestoreInstanceState}. This method should
-     * be called to restore the state of the WebView before using the object. If
-     * it is called after the WebView has had a chance to build state (load
+     * be called to restore the state of this WebView before using the object. If
+     * it is called after this WebView has had a chance to build state (load
      * pages, create a back/forward list, etc.) there may be undesirable
      * side-effects. Please note that this method no longer restores the
      * display data for this WebView. See {@link #savePicture} and {@link
      * #restorePicture} for saving and restoring the display data.
-     * @param inState The incoming Bundle of state.
-     * @return The restored back/forward list or null if restoreState failed.
+     *
+     * @param inState the incoming Bundle of state
+     * @return the restored back/forward list or null if restoreState failed
      * @see #savePicture
      * @see #restorePicture
      */
@@ -714,14 +743,15 @@
     }
 
     /**
-     * Load the given URL with the specified additional HTTP headers.
-     * @param url The URL of the resource to load.
-     * @param additionalHttpHeaders The additional headers to be used in the
+     * Loads the given URL with the specified additional HTTP headers.
+     *
+     * @param url the URL of the resource to load
+     * @param additionalHttpHeaders the additional headers to be used in the
      *            HTTP request for this URL, specified as a map from name to
      *            value. Note that if this map contains any of the headers
-     *            that are set by default by the WebView, such as those
+     *            that are set by default by this WebView, such as those
      *            controlling caching, accept types or the User-Agent, their
-     *            values may be overriden by the WebView's defaults.
+     *            values may be overriden by this WebView's defaults.
      */
     public void loadUrl(String url, Map<String, String> additionalHttpHeaders) {
         checkThread();
@@ -729,8 +759,9 @@
     }
 
     /**
-     * Load the given URL.
-     * @param url The URL of the resource to load.
+     * Loads the given URL.
+     *
+     * @param url the URL of the resource to load
      */
     public void loadUrl(String url) {
         checkThread();
@@ -738,12 +769,12 @@
     }
 
     /**
-     * Load the url with postData using "POST" method into the WebView. If url
-     * is not a network url, it will be loaded with {link
+     * Loads the URL with postData using "POST" method into this WebView. If url
+     * is not a network URL, it will be loaded with {link
      * {@link #loadUrl(String)} instead.
      *
-     * @param url The url of the resource to load.
-     * @param postData The data will be passed to "POST" request.
+     * @param url the URL of the resource to load
+     * @param postData the data will be passed to "POST" request
      */
     public void postUrl(String url, byte[] postData) {
         checkThread();
@@ -751,7 +782,7 @@
     }
 
     /**
-     * Load the given data into the WebView using a 'data' scheme URL.
+     * Loads the given data into this WebView using a 'data' scheme URL.
      * <p>
      * Note that JavaScript's same origin policy means that script running in a
      * page loaded using this method will be unable to access content loaded
@@ -772,9 +803,10 @@
      * mediatype portion of the URL and call {@link #loadUrl(String)} instead.
      * Note that the charset obtained from the mediatype portion of a data URL
      * always overrides that specified in the HTML or XML document itself.
-     * @param data A String of data in the given encoding.
-     * @param mimeType The MIME type of the data, e.g. 'text/html'.
-     * @param encoding The encoding of the data.
+     *
+     * @param data a String of data in the given encoding
+     * @param mimeType the MIME type of the data, e.g. 'text/html'
+     * @param encoding the encoding of the data
      */
     public void loadData(String data, String mimeType, String encoding) {
         checkThread();
@@ -782,7 +814,7 @@
     }
 
     /**
-     * Load the given data into the WebView, using baseUrl as the base URL for
+     * Loads the given data into this WebView, using baseUrl as the base URL for
      * the content. The base URL is used both to resolve relative URLs and when
      * applying JavaScript's same origin policy. The historyUrl is used for the
      * history entry.
@@ -794,14 +826,15 @@
      * If the base URL uses the data scheme, this method is equivalent to
      * calling {@link #loadData(String,String,String) loadData()} and the
      * historyUrl is ignored.
-     * @param baseUrl URL to use as the page's base URL. If null defaults to
-     *            'about:blank'
-     * @param data A String of data in the given encoding.
-     * @param mimeType The MIMEType of the data, e.g. 'text/html'. If null,
-     *            defaults to 'text/html'.
-     * @param encoding The encoding of the data.
-     * @param historyUrl URL to use as the history entry, if null defaults to
-     *            'about:blank'.
+     *
+     * @param baseUrl the URL to use as the page's base URL. If null defaults to
+     *                'about:blank'.
+     * @param data a String of data in the given encoding
+     * @param mimeType the MIMEType of the data, e.g. 'text/html'. If null,
+     *                 defaults to 'text/html'.
+     * @param encoding the encoding of the data
+     * @param historyUrl the URL to use as the history entry. If null defaults
+     *                   to 'about:blank'.
      */
     public void loadDataWithBaseURL(String baseUrl, String data,
             String mimeType, String encoding, String historyUrl) {
@@ -812,7 +845,7 @@
     /**
      * Saves the current view as a web archive.
      *
-     * @param filename The filename where the archive should be placed.
+     * @param filename the filename where the archive should be placed
      */
     public void saveWebArchive(String filename) {
         checkThread();
@@ -822,11 +855,11 @@
     /**
      * Saves the current view as a web archive.
      *
-     * @param basename The filename where the archive should be placed.
-     * @param autoname If false, takes basename to be a file. If true, basename
+     * @param basename the filename where the archive should be placed
+     * @param autoname if false, takes basename to be a file. If true, basename
      *                 is assumed to be a directory in which a filename will be
-     *                 chosen according to the url of the current page.
-     * @param callback Called after the web archive has been saved. The
+     *                 chosen according to the URL of the current page.
+     * @param callback called after the web archive has been saved. The
      *                 parameter for onReceiveValue will either be the filename
      *                 under which the file was saved, or null if saving the
      *                 file failed.
@@ -837,7 +870,7 @@
     }
 
     /**
-     * Stop the current load.
+     * Stops the current load.
      */
     public void stopLoading() {
         checkThread();
@@ -845,7 +878,7 @@
     }
 
     /**
-     * Reload the current url.
+     * Reloads the current URL.
      */
     public void reload() {
         checkThread();
@@ -853,8 +886,9 @@
     }
 
     /**
-     * Return true if this WebView has a back history item.
-     * @return True iff this WebView has a back history item.
+     * Gets whether this WebView has a back history item.
+     *
+     * @return true iff this WebView has a back history item
      */
     public boolean canGoBack() {
         checkThread();
@@ -862,7 +896,7 @@
     }
 
     /**
-     * Go back in the history of this WebView.
+     * Goes back in the history of this WebView.
      */
     public void goBack() {
         checkThread();
@@ -870,8 +904,9 @@
     }
 
     /**
-     * Return true if this WebView has a forward history item.
-     * @return True iff this Webview has a forward history item.
+     * Gets whether this WebView has a forward history item.
+     *
+     * @return true iff this Webview has a forward history item
      */
     public boolean canGoForward() {
         checkThread();
@@ -879,7 +914,7 @@
     }
 
     /**
-     * Go forward in the history of this WebView.
+     * Goes forward in the history of this WebView.
      */
     public void goForward() {
         checkThread();
@@ -887,10 +922,11 @@
     }
 
     /**
-     * Return true if the page can go back or forward the given
+     * Gets whether the page can go back or forward the given
      * number of steps.
-     * @param steps The negative or positive number of steps to move the
-     *              history.
+     *
+     * @param steps the negative or positive number of steps to move the
+     *              history
      */
     public boolean canGoBackOrForward(int steps) {
         checkThread();
@@ -898,11 +934,12 @@
     }
 
     /**
-     * Go to the history item that is the number of steps away from
+     * Goes to the history item that is the number of steps away from
      * the current item. Steps is negative if backward and positive
      * if forward.
-     * @param steps The number of steps to take back or forward in the back
-     *              forward list.
+     *
+     * @param steps the number of steps to take back or forward in the back
+     *              forward list
      */
     public void goBackOrForward(int steps) {
         checkThread();
@@ -910,7 +947,7 @@
     }
 
     /**
-     * Returns true if private browsing is enabled in this WebView.
+     * Gets whether private browsing is enabled in this WebView.
      */
     public boolean isPrivateBrowsingEnabled() {
         checkThread();
@@ -918,7 +955,8 @@
     }
 
     /**
-     * Scroll the contents of the view up by half the view size
+     * Scrolls the contents of this WebView up by half the view size.
+     *
      * @param top true to jump to the top of the page
      * @return true if the page was scrolled
      */
@@ -928,7 +966,8 @@
     }
 
     /**
-     * Scroll the contents of the view down by half the page size
+     * Scrolls the contents of this WebView down by half the page size.
+     *
      * @param bottom true to jump to bottom of page
      * @return true if the page was scrolled
      */
@@ -938,8 +977,8 @@
     }
 
     /**
-     * Clear the view so that onDraw() will draw nothing but white background,
-     * and onMeasure() will return 0 if MeasureSpec is not MeasureSpec.EXACTLY
+     * Clears this WebView so that onDraw() will draw nothing but white background,
+     * and onMeasure() will return 0 if MeasureSpec is not MeasureSpec.EXACTLY.
      */
     public void clearView() {
         checkThread();
@@ -947,13 +986,13 @@
     }
 
     /**
-     * Return a new picture that captures the current display of the webview.
-     * This is a copy of the display, and will be unaffected if the webview
+     * Gets a new picture that captures the current display of this WebView.
+     * This is a copy of the display, and will be unaffected if this WebView
      * later loads a different URL.
      *
-     * @return a picture containing the current contents of the view. Note this
-     *         picture is of the entire document, and is not restricted to the
-     *         bounds of the view.
+     * @return a picture containing the current contents of this WebView. Note
+     *         this picture is of the entire document, and is not restricted to
+     *         the bounds of the view.
      */
     public Picture capturePicture() {
         checkThread();
@@ -961,8 +1000,9 @@
     }
 
     /**
-     * Return the current scale of the WebView
-     * @return The current scale.
+     * Gets the current scale of this WebView.
+     *
+     * @return the current scale
      */
     public float getScale() {
         checkThread();
@@ -970,14 +1010,14 @@
     }
 
     /**
-     * Set the initial scale for the WebView. 0 means default. If
+     * Sets the initial scale for this WebView. 0 means default. If
      * {@link WebSettings#getUseWideViewPort()} is true, it zooms out all the
      * way. Otherwise it starts with 100%. If initial scale is greater than 0,
      * WebView starts with this value as initial scale.
      * Please note that unlike the scale properties in the viewport meta tag,
      * this method doesn't take the screen density into account.
      *
-     * @param scaleInPercent The initial scale in percent.
+     * @param scaleInPercent the initial scale in percent
      */
     public void setInitialScale(int scaleInPercent) {
         checkThread();
@@ -985,7 +1025,7 @@
     }
 
     /**
-     * Invoke the graphical zoom picker widget for this WebView. This will
+     * Invokes the graphical zoom picker widget for this WebView. This will
      * result in the zoom widget appearing on the screen to control the zoom
      * level of this WebView.
      */
@@ -995,15 +1035,15 @@
     }
 
     /**
-     * Return a HitTestResult based on the current cursor node. If a HTML::a tag
-     * is found and the anchor has a non-JavaScript url, the HitTestResult type
-     * is set to SRC_ANCHOR_TYPE and the url is set in the "extra" field. If the
-     * anchor does not have a url or if it is a JavaScript url, the type will
-     * be UNKNOWN_TYPE and the url has to be retrieved through
+     * Gets a HitTestResult based on the current cursor node. If a HTML::a
+     * tag is found and the anchor has a non-JavaScript URL, the HitTestResult
+     * type is set to SRC_ANCHOR_TYPE and the URL is set in the "extra" field.
+     * If the anchor does not have a URL or if it is a JavaScript URL, the type
+     * will be UNKNOWN_TYPE and the URL has to be retrieved through
      * {@link #requestFocusNodeHref} asynchronously. If a HTML::img tag is
-     * found, the HitTestResult type is set to IMAGE_TYPE and the url is set in
+     * found, the HitTestResult type is set to IMAGE_TYPE and the URL is set in
      * the "extra" field. A type of
-     * SRC_IMAGE_ANCHOR_TYPE indicates an anchor with a url that has an image as
+     * SRC_IMAGE_ANCHOR_TYPE indicates an anchor with a URL that has an image as
      * a child node. If a phone number is found, the HitTestResult type is set
      * to PHONE_TYPE and the phone number is set in the "extra" field of
      * HitTestResult. If a map address is found, the HitTestResult type is set
@@ -1018,18 +1058,17 @@
     }
 
     /**
-     * Request the anchor or image element URL at the last tapped point.
+     * Requests the anchor or image element URL at the last tapped point.
      * If hrefMsg is null, this method returns immediately and does not
      * dispatch hrefMsg to its target. If the tapped point hits an image,
      * an anchor, or an image in an anchor, the message associates
      * strings in named keys in its data. The value paired with the key
      * may be an empty string.
      *
-     * @param hrefMsg This message will be dispatched with the result of the
-     *                request. The message data contains three keys:
-     *                - "url" returns the anchor's href attribute.
-     *                - "title" returns the anchor's text.
-     *                - "src" returns the image's src attribute.
+     * @param hrefMsg the message to be dispatched with the result of the
+     *                request. The message data contains three keys. "url"
+     *                returns the anchor's href attribute. "title" returns the
+     *                anchor's text. "src" returns the image's src attribute.
      */
     public void requestFocusNodeHref(Message hrefMsg) {
         checkThread();
@@ -1037,10 +1076,10 @@
     }
 
     /**
-     * Request the url of the image last touched by the user. msg will be sent
-     * to its target with a String representing the url as its object.
+     * Requests the URL of the image last touched by the user. msg will be sent
+     * to its target with a String representing the URL as its object.
      *
-     * @param msg This message will be dispatched with the result of the request
+     * @param msg the message to be dispatched with the result of the request
      *            as the data member with "url" as key. The result can be null.
      */
     public void requestImageRef(Message msg) {
@@ -1049,10 +1088,11 @@
     }
 
     /**
-     * Get the url for the current page. This is not always the same as the url
+     * Gets the URL for the current page. This is not always the same as the URL
      * passed to WebViewClient.onPageStarted because although the load for
-     * that url has begun, the current page may not have changed.
-     * @return The url for the current page.
+     * that URL has begun, the current page may not have changed.
+     *
+     * @return the URL for the current page
      */
     public String getUrl() {
         checkThread();
@@ -1060,12 +1100,13 @@
     }
 
     /**
-     * Get the original url for the current page. This is not always the same
-     * as the url passed to WebViewClient.onPageStarted because although the
-     * load for that url has begun, the current page may not have changed.
-     * Also, there may have been redirects resulting in a different url to that
+     * Gets the original URL for the current page. This is not always the same
+     * as the URL passed to WebViewClient.onPageStarted because although the
+     * load for that URL has begun, the current page may not have changed.
+     * Also, there may have been redirects resulting in a different URL to that
      * originally requested.
-     * @return The url that was originally requested for the current page.
+     *
+     * @return the URL that was originally requested for the current page
      */
     public String getOriginalUrl() {
         checkThread();
@@ -1073,9 +1114,10 @@
     }
 
     /**
-     * Get the title for the current page. This is the title of the current page
+     * Gets the title for the current page. This is the title of the current page
      * until WebViewClient.onReceivedTitle is called.
-     * @return The title for the current page.
+     *
+     * @return the title for the current page
      */
     public String getTitle() {
         checkThread();
@@ -1083,9 +1125,10 @@
     }
 
     /**
-     * Get the favicon for the current page. This is the favicon of the current
+     * Gets the favicon for the current page. This is the favicon of the current
      * page until WebViewClient.onReceivedIcon is called.
-     * @return The favicon for the current page.
+     *
+     * @return the favicon for the current page
      */
     public Bitmap getFavicon() {
         checkThread();
@@ -1093,9 +1136,10 @@
     }
 
     /**
-     * Get the touch icon url for the apple-touch-icon <link> element, or
+     * Gets the touch icon URL for the apple-touch-icon <link> element, or
      * a URL on this site's server pointing to the standard location of a
      * touch icon.
+     *
      * @hide
      */
     public String getTouchIconUrl() {
@@ -1103,8 +1147,9 @@
     }
 
     /**
-     * Get the progress for the current page.
-     * @return The progress for the current page between 0 and 100.
+     * Gets the progress for the current page.
+     *
+     * @return the progress for the current page between 0 and 100
      */
     public int getProgress() {
         checkThread();
@@ -1112,7 +1157,9 @@
     }
 
     /**
-     * @return the height of the HTML content.
+     * Gets the height of the HTML content.
+     *
+     * @return the height of the HTML content
      */
     public int getContentHeight() {
         checkThread();
@@ -1120,7 +1167,9 @@
     }
 
     /**
-     * @return the width of the HTML content.
+     * Gets the width of the HTML content.
+     *
+     * @return the width of the HTML content
      * @hide
      */
     public int getContentWidth() {
@@ -1128,8 +1177,8 @@
     }
 
     /**
-     * Pause all layout, parsing, and JavaScript timers for all webviews. This
-     * is a global requests, not restricted to just this webview. This can be
+     * Pauses all layout, parsing, and JavaScript timers for all WebViews. This
+     * is a global requests, not restricted to just this WebView. This can be
      * useful if the application has been paused.
      */
     public void pauseTimers() {
@@ -1138,7 +1187,7 @@
     }
 
     /**
-     * Resume all layout, parsing, and JavaScript timers for all webviews.
+     * Resumes all layout, parsing, and JavaScript timers for all WebViews.
      * This will resume dispatching all timers.
      */
     public void resumeTimers() {
@@ -1147,11 +1196,10 @@
     }
 
     /**
-     * Call this to pause any extra processing associated with this WebView and
-     * its associated DOM, plugins, JavaScript etc. For example, if the WebView
-     * is taken offscreen, this could be called to reduce unnecessary CPU or
-     * network traffic. When the WebView is again "active", call onResume().
-     *
+     * Pauses any extra processing associated with this WebView and its
+     * associated DOM, plugins, JavaScript etc. For example, if this WebView is
+     * taken offscreen, this could be called to reduce unnecessary CPU or
+     * network traffic. When this WebView is again "active", call onResume().
      * Note that this differs from pauseTimers(), which affects all WebViews.
      */
     public void onPause() {
@@ -1160,7 +1208,7 @@
     }
 
     /**
-     * Call this to resume a WebView after a previous call to onPause().
+     * Resumes a WebView after a previous call to onPause().
      */
     public void onResume() {
         checkThread();
@@ -1168,8 +1216,9 @@
     }
 
     /**
-     * Returns true if the view is paused, meaning onPause() was called. Calling
-     * onResume() sets the paused state back to false.
+     * Gets whether this WebView is paused, meaning onPause() was called.
+     * Calling onResume() sets the paused state back to false.
+     *
      * @hide
      */
     public boolean isPaused() {
@@ -1177,8 +1226,8 @@
     }
 
     /**
-     * Call this to inform the view that memory is low so that it can
-     * free any available memory.
+     * Informs this WebView that memory is low so that it can free any available
+     * memory.
      */
     public void freeMemory() {
         checkThread();
@@ -1186,10 +1235,10 @@
     }
 
     /**
-     * Clear the resource cache. Note that the cache is per-application, so
+     * Clears the resource cache. Note that the cache is per-application, so
      * this will clear the cache for all WebViews used.
      *
-     * @param includeDiskFiles If false, only the RAM cache is cleared.
+     * @param includeDiskFiles if false, only the RAM cache is cleared
      */
     public void clearCache(boolean includeDiskFiles) {
         checkThread();
@@ -1197,7 +1246,7 @@
     }
 
     /**
-     * Make sure that clearing the form data removes the adapter from the
+     * Makes sure that clearing the form data removes the adapter from the
      * currently focused textfield if there is one.
      */
     public void clearFormData() {
@@ -1206,7 +1255,7 @@
     }
 
     /**
-     * Tell the WebView to clear its internal back/forward list.
+     * Tells this WebView to clear its internal back/forward list.
      */
     public void clearHistory() {
         checkThread();
@@ -1214,8 +1263,8 @@
     }
 
     /**
-     * Clear the SSL preferences table stored in response to proceeding with SSL
-     * certificate errors.
+     * Clears the SSL preferences table stored in response to proceeding with
+     * SSL certificate errors.
      */
     public void clearSslPreferences() {
         checkThread();
@@ -1223,7 +1272,7 @@
     }
 
     /**
-     * Return the WebBackForwardList for this WebView. This contains the
+     * Gets the WebBackForwardList for this WebView. This contains the
      * back/forward list for use in querying each item in the history stack.
      * This is a copy of the private WebBackForwardList so it contains only a
      * snapshot of the current state. Multiple calls to this method may return
@@ -1237,10 +1286,10 @@
     }
 
     /**
-     * Register the listener to be notified as find-on-page operations progress.
-     * This will replace the current listener.
+     * Registers the listener to be notified as find-on-page operations
+     * progress. This will replace the current listener.
      *
-     * @param listener An implementation of {@link FindListener}.
+     * @param listener an implementation of {@link FindListener}
      */
     public void setFindListener(FindListener listener) {
         checkThread();
@@ -1248,14 +1297,14 @@
     }
 
     /**
-     * Highlight and scroll to the next match found by {@link #findAll} or
+     * Highlights and scrolls to the next match found by {@link #findAll} or
      * {@link #findAllAsync}, wrapping around page boundaries as necessary.
      * Notifies any registered {@link FindListener}. If neither
      * {@link #findAll} nor {@link #findAllAsync(String)} has been called yet,
      * or if {@link #clearMatches} has been called since the last find
      * operation, this function does nothing.
      *
-     * @param forward Direction to search.
+     * @param forward the direction to search
      * @see #setFindListener
      */
     public void findNext(boolean forward) {
@@ -1264,12 +1313,11 @@
     }
 
     /**
-     * Find all instances of find on the page and highlight them.
+     * Finds all instances of find on the page and highlights them.
      * Notifies any registered {@link FindListener}.
      *
-     * @param find  String to find.
-     * @return int  The number of occurances of the String "find"
-     *              that were found.
+     * @param find the string to find
+     * @return the number of occurances of the String "find" that were found
      * @deprecated {@link #findAllAsync} is preferred.
      * @see #setFindListener
      */
@@ -1281,12 +1329,12 @@
     }
 
     /**
-     * Find all instances of find on the page and highlight them,
+     * Finds all instances of find on the page and highlights them,
      * asynchronously. Notifies any registered {@link FindListener}.
      * Successive calls to this or {@link #findAll} will cancel any
      * pending searches.
      *
-     * @param find  String to find.
+     * @param find the string to find.
      * @see #setFindListener
      */
     public void findAllAsync(String find) {
@@ -1295,14 +1343,15 @@
     }
 
     /**
-     * Start an ActionMode for finding text in this WebView.  Only works if this
-     *              WebView is attached to the view system.
-     * @param text If non-null, will be the initial text to search for.
+     * Starts an ActionMode for finding text in this WebView.  Only works if this
+     * WebView is attached to the view system.
+     *
+     * @param text if non-null, will be the initial text to search for.
      *             Otherwise, the last String searched for in this WebView will
      *             be used to start.
-     * @param showIme If true, show the IME, assuming the user will begin typing.
-     *             If false and text is non-null, perform a find all.
-     * @return boolean True if the find dialog is shown, false otherwise.
+     * @param showIme if true, show the IME, assuming the user will begin typing.
+     *                If false and text is non-null, perform a find all.
+     * @return true if the find dialog is shown, false otherwise
      */
     public boolean showFindDialog(String text, boolean showIme) {
         checkThread();
@@ -1310,24 +1359,26 @@
     }
 
     /**
-     * Return the first substring consisting of the address of a physical
+     * Gets the first substring consisting of the address of a physical
      * location. Currently, only addresses in the United States are detected,
      * and consist of:
-     * - a house number
-     * - a street name
-     * - a street type (Road, Circle, etc), either spelled out or abbreviated
-     * - a city name
-     * - a state or territory, either spelled out or two-letter abbr.
-     * - an optional 5 digit or 9 digit zip code.
-     *
+     * <ul>
+     *   <li>a house number</li>
+     *   <li>a street name</li>
+     *   <li>a street type (Road, Circle, etc), either spelled out or
+     *       abbreviated</li>
+     *   <li>a city name</li>
+     *   <li>a state or territory, either spelled out or two-letter abbr</li>
+     *   <li>an optional 5 digit or 9 digit zip code</li>
+     * </ul>
      * All names must be correctly capitalized, and the zip code, if present,
      * must be valid for the state. The street type must be a standard USPS
      * spelling or abbreviation. The state or territory must also be spelled
      * or abbreviated using USPS standards. The house number may not exceed
      * five digits.
-     * @param addr The string to search for addresses.
      *
-     * @return the address, or if no address is found, return null.
+     * @param addr the string to search for addresses
+     * @return the address, or if no address is found, null
      */
     public static String findAddress(String addr) {
         checkThread();
@@ -1335,7 +1386,7 @@
     }
 
     /**
-     * Clear the highlighting surrounding text matches created by
+     * Clears the highlighting surrounding text matches created by
      * {@link #findAll} or {@link #findAllAsync}.
      */
     public void clearMatches() {
@@ -1344,10 +1395,11 @@
     }
 
     /**
-     * Query the document to see if it contains any image references. The
+     * Queries the document to see if it contains any image references. The
      * message object will be dispatched with arg1 being set to 1 if images
      * were found and 0 if the document does not reference any images.
-     * @param response The message that will be dispatched with the result.
+     *
+     * @param response the message that will be dispatched with the result
      */
     public void documentHasImages(Message response) {
         checkThread();
@@ -1355,9 +1407,10 @@
     }
 
     /**
-     * Set the WebViewClient that will receive various notifications and
+     * Sets the WebViewClient that will receive various notifications and
      * requests. This will replace the current handler.
-     * @param client An implementation of WebViewClient.
+     *
+     * @param client an implementation of WebViewClient
      */
     public void setWebViewClient(WebViewClient client) {
         checkThread();
@@ -1365,10 +1418,11 @@
     }
 
     /**
-     * Register the interface to be used when content can not be handled by
+     * Registers the interface to be used when content can not be handled by
      * the rendering engine, and should be downloaded instead. This will replace
      * the current handler.
-     * @param listener An implementation of DownloadListener.
+     *
+     * @param listener an implementation of DownloadListener
      */
     public void setDownloadListener(DownloadListener listener) {
         checkThread();
@@ -1376,10 +1430,11 @@
     }
 
     /**
-     * Set the chrome handler. This is an implementation of WebChromeClient for
+     * Sets the chrome handler. This is an implementation of WebChromeClient for
      * use in handling JavaScript dialogs, favicons, titles, and the progress.
      * This will replace the current handler.
-     * @param client An implementation of WebChromeClient.
+     *
+     * @param client an implementation of WebChromeClient
      */
     public void setWebChromeClient(WebChromeClient client) {
         checkThread();
@@ -1387,9 +1442,10 @@
     }
 
     /**
-     * Set the Picture listener. This is an interface used to receive
+     * Sets the Picture listener. This is an interface used to receive
      * notifications of a new Picture.
-     * @param listener An implementation of WebView.PictureListener.
+     *
+     * @param listener an implementation of WebView.PictureListener
      * @deprecated This method is now obsolete.
      */
     @Deprecated
@@ -1419,7 +1475,7 @@
      * permissions of the host application. Use extreme care when using this
      * method in a WebView which could contain untrusted content.</li>
      * <li> JavaScript interacts with Java object on a private, background
-     * thread of the WebView. Care is therefore required to maintain thread
+     * thread of this WebView. Care is therefore required to maintain thread
      * safety.</li>
      * </ul>
      *
@@ -1445,10 +1501,11 @@
     }
 
     /**
-     * Return the WebSettings object used to control the settings for this
+     * Gets the WebSettings object used to control the settings for this
      * WebView.
-     * @return A WebSettings object that can be used to control this WebView's
-     *         settings.
+     *
+     * @return a WebSettings object that can be used to control this WebView's
+     *         settings
      */
     public WebSettings getSettings() {
         checkThread();
@@ -1456,11 +1513,11 @@
     }
 
     /**
-     * Return the list of currently loaded plugins.
-     * @return The list of currently loaded plugins.
+     * Gets the list of currently loaded plugins.
      *
-     * @hide
+     * @return the list of currently loaded plugins
      * @deprecated This was used for Gears, which has been deprecated.
+     * @hide
      */
     @Deprecated
     public static synchronized PluginList getPluginList() {
@@ -1469,8 +1526,8 @@
     }
 
     /**
-     * @hide
      * @deprecated This was used for Gears, which has been deprecated.
+     * @hide
      */
     @Deprecated
     public void refreshPlugins(boolean reloadOpenPages) {
@@ -1478,8 +1535,9 @@
     }
 
     /**
-     * Use this method to put the WebView into text selection mode.
-     * Do not rely on this functionality; it will be deprecated in the future.
+     * Puts this WebView into text selection mode. Do not rely on this
+     * functionality; it will be deprecated in the future.
+     *
      * @deprecated This method is now obsolete.
      */
     @Deprecated
@@ -1528,15 +1586,15 @@
     }
 
     /**
-     * Gets the zoom controls for the WebView, as a separate View. The caller is
-     * responsible for inserting this View into the layout hierarchy.
+     * Gets the zoom controls for this WebView, as a separate View. The caller
+     * is responsible for inserting this View into the layout hierarchy.
      * <p/>
      * API level {@link android.os.Build.VERSION_CODES#CUPCAKE} introduced
      * built-in zoom mechanisms for the WebView, as opposed to these separate
      * zoom controls. The built-in mechanisms are preferred and can be enabled
      * using {@link WebSettings#setBuiltInZoomControls}.
      *
-     * @deprecated The built-in zoom mechanisms are preferred.
+     * @deprecated the built-in zoom mechanisms are preferred
      * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN}
      */
     @Deprecated
@@ -1546,7 +1604,9 @@
     }
 
     /**
-     * @return TRUE if the WebView can be zoomed in.
+     * Gets whether this WebView can be zoomed in.
+     *
+     * @return true if this WebView can be zoomed in
      */
     public boolean canZoomIn() {
         checkThread();
@@ -1554,7 +1614,9 @@
     }
 
     /**
-     * @return TRUE if the WebView can be zoomed out.
+     * Gets whether this WebView can be zoomed out.
+     *
+     * @return true if this WebView can be zoomed out
      */
     public boolean canZoomOut() {
         checkThread();
@@ -1562,8 +1624,9 @@
     }
 
     /**
-     * Perform zoom in in the webview
-     * @return TRUE if zoom in succeeds. FALSE if no zoom changes.
+     * Performs zoom in in this WebView.
+     *
+     * @return true if zoom in succeeds, false if no zoom changes
      */
     public boolean zoomIn() {
         checkThread();
@@ -1571,8 +1634,9 @@
     }
 
     /**
-     * Perform zoom out in the webview
-     * @return TRUE if zoom out succeeds. FALSE if no zoom changes.
+     * Performs zoom out in this WebView.
+     *
+     * @return true if zoom out succeeds, false if no zoom changes
      */
     public boolean zoomOut() {
         checkThread();
@@ -1593,8 +1657,9 @@
     //-------------------------------------------------------------------------
 
     /**
-     * Used by providers to obtain the underlying implementation, e.g. when the appliction
-     * responds to WebViewClient.onCreateWindow() request.
+     * Gets the WebViewProvider. Used by providers to obtain the underlying
+     * implementation, e.g. when the appliction responds to
+     * WebViewClient.onCreateWindow() request.
      *
      * @hide WebViewProvider is not public API.
      */
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index 05b3e64..9cf0d54 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -2598,7 +2598,8 @@
      */
     @Override
     public boolean isPrivateBrowsingEnabled() {
-        return getSettings().isPrivateBrowsingEnabled();
+        WebSettingsClassic settings = getSettings();
+        return (settings != null) ? settings.isPrivateBrowsingEnabled() : false;
     }
 
     private void startPrivateBrowsing() {
@@ -2668,7 +2669,7 @@
     public void clearView() {
         mContentWidth = 0;
         mContentHeight = 0;
-        setBaseLayer(0, null, false, false);
+        setBaseLayer(0, false, false);
         mWebViewCore.sendMessage(EventHub.CLEAR_CONTENT);
     }
 
@@ -3039,14 +3040,14 @@
     // the scale factor is not 1)
     private void calcOurContentVisibleRectF(RectF r) {
         calcOurVisibleRect(mContentVisibleRect);
-        r.left = viewToContentXf(mContentVisibleRect.left);
+        r.left = viewToContentXf(mContentVisibleRect.left) / mWebView.getScaleX();
         // viewToContentY will remove the total height of the title bar.  Add
         // the visible height back in to account for the fact that if the title
         // bar is partially visible, the part of the visible rect which is
         // displaying our content is displaced by that amount.
-        r.top = viewToContentYf(mContentVisibleRect.top + getVisibleTitleHeightImpl());
-        r.right = viewToContentXf(mContentVisibleRect.right);
-        r.bottom = viewToContentYf(mContentVisibleRect.bottom);
+        r.top = viewToContentYf(mContentVisibleRect.top + getVisibleTitleHeightImpl()) / mWebView.getScaleY();
+        r.right = viewToContentXf(mContentVisibleRect.right) / mWebView.getScaleX();
+        r.bottom = viewToContentYf(mContentVisibleRect.bottom) / mWebView.getScaleY();
     }
 
     static class ViewSizeData {
@@ -4447,12 +4448,12 @@
      */
     private SelectActionModeCallback mSelectCallback;
 
-    void setBaseLayer(int layer, Region invalRegion, boolean showVisualIndicator,
+    void setBaseLayer(int layer, boolean showVisualIndicator,
             boolean isPictureAfterFirstLayout) {
         if (mNativeClass == 0)
             return;
         boolean queueFull;
-        queueFull = nativeSetBaseLayer(mNativeClass, layer, invalRegion,
+        queueFull = nativeSetBaseLayer(mNativeClass, layer,
                                        showVisualIndicator, isPictureAfterFirstLayout);
 
         if (queueFull) {
@@ -7847,7 +7848,7 @@
         boolean isPictureAfterFirstLayout = viewState != null;
 
         if (updateBaseLayer) {
-            setBaseLayer(draw.mBaseLayer, draw.mInvalRegion,
+            setBaseLayer(draw.mBaseLayer,
                     getSettings().getShowVisualIndicator(),
                     isPictureAfterFirstLayout);
         }
@@ -7879,15 +7880,17 @@
         }
         mSendScrollEvent = true;
 
-        if (DebugFlags.WEB_VIEW) {
-            Rect b = draw.mInvalRegion.getBounds();
-            Log.v(LOGTAG, "NEW_PICTURE_MSG_ID {" +
-                    b.left+","+b.top+","+b.right+","+b.bottom+"}");
+        int functor = 0;
+        if (mWebView.isHardwareAccelerated()
+                || mWebView.getLayerType() != View.LAYER_TYPE_HARDWARE) {
+            functor = nativeGetDrawGLFunction(mNativeClass);
         }
-        Rect invalBounds = draw.mInvalRegion.getBounds();
-        if (!invalBounds.isEmpty()) {
-            invalidateContentRect(invalBounds);
+
+        if (functor != 0) {
+            mWebView.getViewRootImpl().attachFunctor(functor);
         } else {
+            // invalidate the screen so that the next repaint will show new content
+            // TODO: partial invalidate
             mWebView.invalidate();
         }
 
@@ -8575,8 +8578,7 @@
     private native Rect     nativeLayerBounds(int layer);
     private native void     nativeSetHeightCanMeasure(boolean measure);
     private native boolean  nativeSetBaseLayer(int nativeInstance,
-            int layer, Region invalRegion,
-            boolean showVisualIndicator, boolean isPictureAfterFirstLayout);
+            int layer, boolean showVisualIndicator, boolean isPictureAfterFirstLayout);
     private native int      nativeGetBaseLayer();
     private native void     nativeReplaceBaseContent(int content);
     private native void     nativeCopyBaseContentToPicture(Picture pict);
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 75141fd..12c9d69 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -601,8 +601,7 @@
      * Redraw a portion of the picture set. The Point wh returns the
      * width and height of the overall picture.
      */
-    private native int nativeRecordContent(int nativeClass, Region invalRegion,
-            Point wh);
+    private native int nativeRecordContent(int nativeClass, Point wh);
 
     /**
      * Notify webkit that animations have begun (on the hardware accelerated content)
@@ -2180,11 +2179,9 @@
     static class DrawData {
         DrawData() {
             mBaseLayer = 0;
-            mInvalRegion = new Region();
             mContentSize = new Point();
         }
         int mBaseLayer;
-        Region mInvalRegion;
         // view size that was used by webkit during the most recent layout
         Point mViewSize;
         Point mContentSize;
@@ -2230,8 +2227,7 @@
         mDrawIsScheduled = false;
         DrawData draw = new DrawData();
         if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "webkitDraw start");
-        draw.mBaseLayer = nativeRecordContent(mNativeClass, draw.mInvalRegion,
-                draw.mContentSize);
+        draw.mBaseLayer = nativeRecordContent(mNativeClass, draw.mContentSize);
         if (draw.mBaseLayer == 0) {
             if (mWebViewClassic != null && !mWebViewClassic.isPaused()) {
                 if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "webkitDraw abort, resending draw message");
@@ -2277,8 +2273,7 @@
         // the draw path (and fix saving <canvas>)
         DrawData draw = new DrawData();
         if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "saveViewState start");
-        draw.mBaseLayer = nativeRecordContent(mNativeClass, draw.mInvalRegion,
-                draw.mContentSize);
+        draw.mBaseLayer = nativeRecordContent(mNativeClass, draw.mContentSize);
         boolean result = false;
         try {
             result = ViewStateSerializer.serializeViewState(stream, draw);
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 53d5e0b..a2531f8 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -58,6 +58,8 @@
 import android.view.ViewTreeObserver;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.animation.Interpolator;
+import android.view.animation.LinearInterpolator;
 import android.view.inputmethod.BaseInputConnection;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputConnection;
@@ -660,6 +662,11 @@
     private int mLastHandledItemCount;
 
     /**
+     * Used for smooth scrolling at a consistent rate
+     */
+    static final Interpolator sLinearInterpolator = new LinearInterpolator();
+
+    /**
      * Interface definition for a callback to be invoked when the list or grid
      * has been scrolled.
      */
@@ -3753,6 +3760,7 @@
         void start(int initialVelocity) {
             int initialY = initialVelocity < 0 ? Integer.MAX_VALUE : 0;
             mLastFlingY = initialY;
+            mScroller.setInterpolator(null);
             mScroller.fling(0, initialY, 0, initialVelocity,
                     0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
             mTouchMode = TOUCH_MODE_FLING;
@@ -3782,6 +3790,7 @@
         }
 
         void startOverfling(int initialVelocity) {
+            mScroller.setInterpolator(null);
             mScroller.fling(0, mScrollY, 0, initialVelocity, 0, 0,
                     Integer.MIN_VALUE, Integer.MAX_VALUE, 0, getHeight());
             mTouchMode = TOUCH_MODE_OVERFLING;
@@ -3811,9 +3820,10 @@
             postOnAnimation(this);
         }
 
-        void startScroll(int distance, int duration) {
+        void startScroll(int distance, int duration, boolean linear) {
             int initialY = distance < 0 ? Integer.MAX_VALUE : 0;
             mLastFlingY = initialY;
+            mScroller.setInterpolator(linear ? sLinearInterpolator : null);
             mScroller.startScroll(0, initialY, 0, distance, duration);
             mTouchMode = TOUCH_MODE_FLING;
             postOnAnimation(this);
@@ -4107,14 +4117,14 @@
             } else {
                 // On-screen, just scroll.
                 final int targetTop = getChildAt(position - firstPos).getTop();
-                smoothScrollBy(targetTop - offset, duration);
+                smoothScrollBy(targetTop - offset, duration, true);
                 return;
             }
 
             // Estimate how many screens we should travel
             final float screenTravelCount = (float) viewTravelCount / childCount;
-            mScrollDuration = screenTravelCount < 1 ? (int) (screenTravelCount * duration) :
-                    (int) (duration / screenTravelCount);
+            mScrollDuration = screenTravelCount < 1 ?
+                    duration : (int) (duration / screenTravelCount);
             mLastSeenPos = INVALID_POSITION;
 
             postOnAnimation(this);
@@ -4151,7 +4161,7 @@
                         Math.max(mListPadding.bottom, mExtraScroll) : mListPadding.bottom;
 
                 final int scrollBy = lastViewHeight - lastViewPixelsShowing + extraScroll;
-                smoothScrollBy(scrollBy, mScrollDuration);
+                smoothScrollBy(scrollBy, mScrollDuration, true);
 
                 mLastSeenPos = lastPos;
                 if (lastPos < mTargetPos) {
@@ -4182,14 +4192,14 @@
                 final int extraScroll = Math.max(mListPadding.bottom, mExtraScroll);
                 if (nextPos < mBoundPos) {
                     smoothScrollBy(Math.max(0, nextViewHeight + nextViewTop - extraScroll),
-                            mScrollDuration);
+                            mScrollDuration, true);
 
                     mLastSeenPos = nextPos;
 
                     postOnAnimation(this);
                 } else  {
                     if (nextViewTop > extraScroll) {
-                        smoothScrollBy(nextViewTop - extraScroll, mScrollDuration);
+                        smoothScrollBy(nextViewTop - extraScroll, mScrollDuration, true);
                     }
                 }
                 break;
@@ -4210,7 +4220,7 @@
                 final int extraScroll = firstPos > 0 ?
                         Math.max(mExtraScroll, mListPadding.top) : mListPadding.top;
 
-                smoothScrollBy(firstViewTop - extraScroll, mScrollDuration);
+                smoothScrollBy(firstViewTop - extraScroll, mScrollDuration, true);
 
                 mLastSeenPos = firstPos;
 
@@ -4229,7 +4239,7 @@
 
                 if (lastPos == mLastSeenPos) {
                     // No new views, let things keep going.
-                    post(this);
+                    postOnAnimation(this);
                     return;
                 }
 
@@ -4240,13 +4250,13 @@
                 final int extraScroll = Math.max(mListPadding.top, mExtraScroll);
                 mLastSeenPos = lastPos;
                 if (lastPos > mBoundPos) {
-                    smoothScrollBy(-(lastViewPixelsShowing - extraScroll), mScrollDuration);
+                    smoothScrollBy(-(lastViewPixelsShowing - extraScroll), mScrollDuration, true);
                     postOnAnimation(this);
                 } else {
                     final int bottom = listHeight - extraScroll;
                     final int lastViewBottom = lastViewTop + lastViewHeight;
                     if (bottom > lastViewBottom) {
-                        smoothScrollBy(-(bottom - lastViewBottom), mScrollDuration);
+                        smoothScrollBy(-(bottom - lastViewBottom), mScrollDuration, true);
                     }
                 }
                 break;
@@ -4255,7 +4265,7 @@
             case MOVE_OFFSET: {
                 if (mLastSeenPos == firstPos) {
                     // No new views, let things keep going.
-                    post(this);
+                    postOnAnimation(this);
                     return;
                 }
 
@@ -4277,17 +4287,22 @@
 
                 final float modifier = Math.min(Math.abs(screenTravelCount), 1.f);
                 if (position < firstPos) {
-                    smoothScrollBy((int) (-getHeight() * modifier), mScrollDuration);
+                    final int distance = (int) (-getHeight() * modifier);
+                    final int duration = (int) (mScrollDuration * modifier);
+                    smoothScrollBy(distance, duration, true);
                     postOnAnimation(this);
                 } else if (position > lastPos) {
-                    smoothScrollBy((int) (getHeight() * modifier), mScrollDuration);
+                    final int distance = (int) (getHeight() * modifier);
+                    final int duration = (int) (mScrollDuration * modifier);
+                    smoothScrollBy(distance, duration, true);
                     postOnAnimation(this);
                 } else {
                     // On-screen, just scroll.
                     final int targetTop = getChildAt(position - firstPos).getTop();
                     final int distance = targetTop - mOffsetFromTop;
-                    smoothScrollBy(distance,
-                            (int) (mScrollDuration * ((float) distance / getHeight())));
+                    final int duration = (int) (mScrollDuration *
+                            ((float) Math.abs(distance) / getHeight()));
+                    smoothScrollBy(distance, duration, true);
                 }
                 break;
             }
@@ -4393,6 +4408,10 @@
      * @param duration Duration of the scroll animation in milliseconds.
      */
     public void smoothScrollBy(int distance, int duration) {
+        smoothScrollBy(distance, duration, false);
+    }
+
+    void smoothScrollBy(int distance, int duration, boolean linear) {
         if (mFlingRunnable == null) {
             mFlingRunnable = new FlingRunnable();
         }
@@ -4414,7 +4433,7 @@
             }
         } else {
             reportScrollStateChange(OnScrollListener.SCROLL_STATE_FLING);
-            mFlingRunnable.startScroll(distance, duration);
+            mFlingRunnable.startScroll(distance, duration, linear);
         }
     }
 
diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java
index 6aee5a0..1c72a0d 100644
--- a/core/java/android/widget/OverScroller.java
+++ b/core/java/android/widget/OverScroller.java
@@ -35,7 +35,7 @@
     private final SplineOverScroller mScrollerX;
     private final SplineOverScroller mScrollerY;
 
-    private final Interpolator mInterpolator;
+    private Interpolator mInterpolator;
 
     private final boolean mFlywheel;
 
@@ -113,6 +113,10 @@
         this(context, interpolator, flywheel);
     }
 
+    void setInterpolator(Interpolator interpolator) {
+        mInterpolator = interpolator;
+    }
+
     /**
      * The amount of friction applied to flings. The default value
      * is {@link ViewConfiguration#getScrollFriction}.
diff --git a/core/java/android/widget/SpellChecker.java b/core/java/android/widget/SpellChecker.java
index a91b16e..98e45fb 100644
--- a/core/java/android/widget/SpellChecker.java
+++ b/core/java/android/widget/SpellChecker.java
@@ -457,7 +457,16 @@
         public void parse() {
             Editable editable = (Editable) mTextView.getText();
             // Iterate over the newly added text and schedule new SpellCheckSpans
-            final int start = editable.getSpanStart(mRange);
+            final int start;
+            if (mIsSentenceSpellCheckSupported) {
+                // TODO: Find the start position of the sentence.
+                // Set span with the context
+                start =  Math.max(
+                        0, editable.getSpanStart(mRange) - MIN_SENTENCE_LENGTH);
+            } else {
+                start = editable.getSpanStart(mRange);
+            }
+
             final int end = editable.getSpanEnd(mRange);
 
             int wordIteratorWindowEnd = Math.min(end, start + WORD_ITERATOR_INTERVAL);
@@ -512,9 +521,7 @@
                     return;
                 }
                 // TODO: Find the start position of the sentence.
-                // Set span with the context
-                final int spellCheckStart =  Math.max(
-                        0, Math.min(wordStart, regionEnd - MIN_SENTENCE_LENGTH));
+                final int spellCheckStart =  wordStart;
                 if (regionEnd <= spellCheckStart) {
                     return;
                 }
diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml
index 49c8893..7fa7658 100644
--- a/core/res/res/values-sw600dp/config.xml
+++ b/core/res/res/values-sw600dp/config.xml
@@ -21,7 +21,7 @@
      for different hardware and product builds. -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- see comment in values/config.xml -->
-    <integer name="config_longPressOnPowerBehavior">1</integer>
+    <integer name="config_longPressOnPowerBehavior">2</integer>
 
     <!-- Enable lockscreen rotation -->
     <bool name="config_enableLockScreenRotation">true</bool>
diff --git a/data/fonts/DroidNaskh-Regular-Shift.ttf b/data/fonts/DroidNaskh-Regular-Shift.ttf
index bb9c70c..de475ca 100644
--- a/data/fonts/DroidNaskh-Regular-Shift.ttf
+++ b/data/fonts/DroidNaskh-Regular-Shift.ttf
Binary files differ
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index cab82de..da2192f 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -276,13 +276,13 @@
             Functor* f = functors.itemAt(i);
             result |= (*f)(DrawGlInfo::kModeProcess, &info);
 
-            if (result != DrawGlInfo::kStatusDone) {
+            if (result & DrawGlInfo::kStatusDraw) {
                 Rect localDirty(info.dirtyLeft, info.dirtyTop, info.dirtyRight, info.dirtyBottom);
                 dirty.unionWith(localDirty);
+            }
 
-                if (result & DrawGlInfo::kStatusInvoke) {
-                    mFunctors.add(f);
-                }
+            if (result & DrawGlInfo::kStatusInvoke) {
+                mFunctors.add(f);
             }
         }
     }
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 41d5c32..012e095 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -47,7 +47,6 @@
 
     private final Context mContext;
     private long mVolumeKeyUpTime;
-    private int  mVolumeControlStream = -1;
     private final boolean mUseMasterVolume;
     private static String TAG = "AudioManager";
 
@@ -304,13 +303,6 @@
     public static final int FLAG_VIBRATE = 1 << 4;
 
     /**
-     * forces use of specified stream
-     * @hide
-     */
-    public static final int FLAG_FORCE_STREAM = 1 << 5;
-
-
-    /**
      * Ringer mode that will be silent and will not vibrate. (This overrides the
      * vibrate setting.)
      *
@@ -458,10 +450,6 @@
                                     : ADJUST_LOWER,
                             flags);
                 } else {
-                    if (mVolumeControlStream != -1) {
-                        stream = mVolumeControlStream;
-                        flags |= FLAG_FORCE_STREAM;
-                    }
                     adjustSuggestedStreamVolume(
                             keyCode == KeyEvent.KEYCODE_VOLUME_UP
                                     ? ADJUST_RAISE
@@ -500,10 +488,6 @@
                     }
                 } else {
                     int flags = FLAG_PLAY_SOUND;
-                    if (mVolumeControlStream != -1) {
-                        stream = mVolumeControlStream;
-                        flags |= FLAG_FORCE_STREAM;
-                    }
                     adjustSuggestedStreamVolume(
                             ADJUST_SAME,
                             stream,
@@ -943,7 +927,12 @@
      * @hide
      */
     public void forceVolumeControlStream(int streamType) {
-        mVolumeControlStream = streamType;
+        IAudioService service = getService();
+        try {
+            service.forceVolumeControlStream(streamType, mICallBack);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Dead object in forceVolumeControlStream", e);
+        }
     }
 
     /**
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 48d3712..dcf72cc 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -149,6 +149,7 @@
     private int mMode;
     // protects mRingerMode
     private final Object mSettingsLock = new Object();
+
     private boolean mMediaServerOk;
 
     private SoundPool mSoundPool;
@@ -343,6 +344,14 @@
     // Keyguard manager proxy
     private KeyguardManager mKeyguardManager;
 
+    // mVolumeControlStream is set by VolumePanel to temporarily force the stream type which volume
+    // is controlled by Vol keys.
+    private int  mVolumeControlStream = -1;
+    private final Object mForceControlStreamLock = new Object();
+    // VolumePanel is currently the only client of forceVolumeControlStream() and runs in system
+    // server process so in theory it is not necessary to monitor the client death.
+    // However it is good to be ready for future evolutions.
+    private ForceControlStreamClient mForceControlStreamClient = null;
 
     ///////////////////////////////////////////////////////////////////////////
     // Construction
@@ -538,8 +547,8 @@
     public void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags) {
 
         int streamType;
-        if ((flags & AudioManager.FLAG_FORCE_STREAM) != 0) {
-            streamType = suggestedStreamType;
+        if (mVolumeControlStream != -1) {
+            streamType = mVolumeControlStream;
         } else {
             streamType = getActiveStreamType(suggestedStreamType);
         }
@@ -682,6 +691,57 @@
         sendVolumeUpdate(streamType, oldIndex, index, flags);
     }
 
+    /** @see AudioManager#forceVolumeControlStream(int) */
+    public void forceVolumeControlStream(int streamType, IBinder cb) {
+        synchronized(mForceControlStreamLock) {
+            mVolumeControlStream = streamType;
+            if (mVolumeControlStream == -1) {
+                if (mForceControlStreamClient != null) {
+                    mForceControlStreamClient.release();
+                    mForceControlStreamClient = null;
+                }
+            } else {
+                mForceControlStreamClient = new ForceControlStreamClient(cb);
+            }
+        }
+    }
+
+    private class ForceControlStreamClient implements IBinder.DeathRecipient {
+        private IBinder mCb; // To be notified of client's death
+
+        ForceControlStreamClient(IBinder cb) {
+            if (cb != null) {
+                try {
+                    cb.linkToDeath(this, 0);
+                } catch (RemoteException e) {
+                    // Client has died!
+                    Log.w(TAG, "ForceControlStreamClient() could not link to "+cb+" binder death");
+                    cb = null;
+                }
+            }
+            mCb = cb;
+        }
+
+        public void binderDied() {
+            synchronized(mForceControlStreamLock) {
+                Log.w(TAG, "SCO client died");
+                if (mForceControlStreamClient != this) {
+                    Log.w(TAG, "unregistered control stream client died");
+                } else {
+                    mForceControlStreamClient = null;
+                    mVolumeControlStream = -1;
+                }
+            }
+        }
+
+        public void release() {
+            if (mCb != null) {
+                mCb.unlinkToDeath(this, 0);
+                mCb = null;
+            }
+        }
+    }
+
     private int findVolumeDelta(int direction, int volume) {
         int delta = 0;
         if (direction == AudioManager.ADJUST_RAISE) {
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index b775095..0311c59 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -115,4 +115,6 @@
     void startBluetoothSco(IBinder cb);
 
     void stopBluetoothSco(IBinder cb);
+
+    void forceVolumeControlStream(int streamType, IBinder cb);
 }
diff --git a/media/java/android/media/MediaExtractor.java b/media/java/android/media/MediaExtractor.java
index 9fdb81f..5fe58a8 100644
--- a/media/java/android/media/MediaExtractor.java
+++ b/media/java/android/media/MediaExtractor.java
@@ -191,17 +191,33 @@
 
     /** Subsequent calls to {@link #readSampleData}, {@link #getSampleTrackIndex} and
      *  {@link #getSampleTime} only retrieve information for the subset of tracks
-     *  selected by the call below.
-     *  Selecting the same track multiple times has no effect, the track
+     *  selected.
+     *  Selecting the same track multiple times has no effect, the track is
      *  only selected once.
-     *  Media data will be returned in the order of their timestamps.
     */
     public native void selectTrack(int index);
 
-    /** All selected tracks seek near the requested time. The next sample
-     *  returned for each selected track will be a sync sample.
+    /** Subsequent calls to {@link #readSampleData}, {@link #getSampleTrackIndex} and
+     *  {@link #getSampleTime} only retrieve information for the subset of tracks
+     *  selected.
     */
-    public native void seekTo(long timeUs);
+    public native void unselectTrack(int index);
+
+    /** If possible, seek to a sync sample at or before the specified time */
+    public static final int SEEK_TO_PREVIOUS_SYNC       = 0;
+    /** If possible, seek to a sync sample at or after the specified time */
+    public static final int SEEK_TO_NEXT_SYNC           = 1;
+    /** If possible, seek to the sync sample closest to the specified time */
+    public static final int SEEK_TO_CLOSEST_SYNC        = 2;
+    /** If possible, seek to a sample closest to the specified time, which may
+      * NOT be a sync sample!
+      */
+    public static final int SEEK_TO_CLOSEST             = 3;
+
+    /** All selected tracks seek near the requested time according to the
+      * specified mode.
+      */
+    public native void seekTo(long timeUs, int mode);
 
     /** Advance to the next sample. Returns false if no more sample data
      *  is available (end of stream).
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 2175131..e0b33cd 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -257,6 +257,8 @@
         public static final int AAC_PLUS = 4;
         /** @hide enhanced AAC plus audio codec */
         public static final int EAAC_PLUS = 5;
+        /** AAC-ELD audio codec */
+        public static final int AAC_ELD = 6;
     }
 
     /**
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp
index 0518331..9e1920c 100644
--- a/media/jni/android_media_MediaExtractor.cpp
+++ b/media/jni/android_media_MediaExtractor.cpp
@@ -96,8 +96,13 @@
     return mImpl->selectTrack(index);
 }
 
-status_t JMediaExtractor::seekTo(int64_t timeUs) {
-    return mImpl->seekTo(timeUs);
+status_t JMediaExtractor::unselectTrack(size_t index) {
+    return mImpl->unselectTrack(index);
+}
+
+status_t JMediaExtractor::seekTo(
+        int64_t timeUs, MediaSource::ReadOptions::SeekMode mode) {
+    return mImpl->seekTo(timeUs, mode);
 }
 
 status_t JMediaExtractor::advance() {
@@ -281,8 +286,8 @@
     }
 }
 
-static void android_media_MediaExtractor_seekTo(
-        JNIEnv *env, jobject thiz, jlong timeUs) {
+static void android_media_MediaExtractor_unselectTrack(
+        JNIEnv *env, jobject thiz, jint index) {
     sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz);
 
     if (extractor == NULL) {
@@ -290,7 +295,30 @@
         return;
     }
 
-    extractor->seekTo(timeUs);
+    status_t err = extractor->unselectTrack(index);
+
+    if (err != OK) {
+        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
+        return;
+    }
+}
+
+static void android_media_MediaExtractor_seekTo(
+        JNIEnv *env, jobject thiz, jlong timeUs, jint mode) {
+    sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz);
+
+    if (extractor == NULL) {
+        jniThrowException(env, "java/lang/IllegalStateException", NULL);
+        return;
+    }
+
+    if (mode < MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC
+            || mode > MediaSource::ReadOptions::SEEK_CLOSEST) {
+        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
+        return;
+    }
+
+    extractor->seekTo(timeUs, (MediaSource::ReadOptions::SeekMode)mode);
 }
 
 static jboolean android_media_MediaExtractor_advance(
@@ -648,7 +676,10 @@
 
     { "selectTrack", "(I)V", (void *)android_media_MediaExtractor_selectTrack },
 
-    { "seekTo", "(J)V", (void *)android_media_MediaExtractor_seekTo },
+    { "unselectTrack", "(I)V",
+        (void *)android_media_MediaExtractor_unselectTrack },
+
+    { "seekTo", "(JI)V", (void *)android_media_MediaExtractor_seekTo },
 
     { "advance", "()Z", (void *)android_media_MediaExtractor_advance },
 
diff --git a/media/jni/android_media_MediaExtractor.h b/media/jni/android_media_MediaExtractor.h
index ef0c48b..2d4627e 100644
--- a/media/jni/android_media_MediaExtractor.h
+++ b/media/jni/android_media_MediaExtractor.h
@@ -18,6 +18,7 @@
 #define _ANDROID_MEDIA_MEDIAEXTRACTOR_H_
 
 #include <media/stagefright/foundation/ABase.h>
+#include <media/stagefright/MediaSource.h>
 #include <utils/Errors.h>
 #include <utils/KeyedVector.h>
 #include <utils/RefBase.h>
@@ -43,8 +44,9 @@
     status_t getTrackFormat(size_t index, jobject *format) const;
 
     status_t selectTrack(size_t index);
+    status_t unselectTrack(size_t index);
 
-    status_t seekTo(int64_t timeUs);
+    status_t seekTo(int64_t timeUs, MediaSource::ReadOptions::SeekMode mode);
 
     status_t advance();
     status_t readSampleData(jobject byteBuf, size_t offset, size_t *sampleSize);
diff --git a/tests/WebViewTests/src/com/android/webviewtests/JavaBridgeBasicsTest.java b/tests/WebViewTests/src/com/android/webviewtests/JavaBridgeBasicsTest.java
index 07d7c34..1ecccf6 100644
--- a/tests/WebViewTests/src/com/android/webviewtests/JavaBridgeBasicsTest.java
+++ b/tests/WebViewTests/src/com/android/webviewtests/JavaBridgeBasicsTest.java
@@ -186,6 +186,13 @@
         assertRaisesException("testController.foo()");
     }
 
+    public void testUncaughtJavaExceptionRaisesJavaException() throws Throwable {
+        injectObjectAndReload(new Object() {
+            public void method() { throw new RuntimeException("foo"); }
+        }, "testObject");
+        assertRaisesException("testObject.method()");
+    }
+
     // Note that this requires that we can pass a JavaScript string to Java.
     public void testTypeOfStaticMethod() throws Throwable {
         injectObjectAndReload(new ObjectWithStaticMethod(), "testObject");
@@ -394,7 +401,6 @@
         assertEquals("", mTestController.waitForStringValue());
     }
 
-    // java.lang.reflect only allows access to public methods and fields. See b/6386557.
     public void testReflectPublicMethod() throws Throwable {
         injectObjectAndReload(new Object() {
             public String method() { return "foo"; }
@@ -404,7 +410,6 @@
                 ".toString()"));
     }
 
-    // java.lang.reflect only allows access to public methods and fields. See b/6386557.
     public void testReflectPublicField() throws Throwable {
         injectObjectAndReload(new Object() {
             public String field = "foo";
@@ -412,4 +417,26 @@
         assertEquals("foo", executeJavaScriptAndGetStringResult(
                 "testObject.getClass().getField('field').get(testObject).toString()"));
     }
+
+    public void testReflectPrivateMethodRaisesException() throws Throwable {
+        injectObjectAndReload(new Object() {
+            private void method() {};
+        }, "testObject");
+        assertRaisesException("testObject.getClass().getMethod('method', null)");
+        // getDeclaredMethod() is able to access a private method, but invoke()
+        // throws a Java exception.
+        assertRaisesException(
+                "testObject.getClass().getDeclaredMethod('method', null).invoke(testObject, null)");
+    }
+
+    public void testReflectPrivateFieldRaisesException() throws Throwable {
+        injectObjectAndReload(new Object() {
+            private int field;
+        }, "testObject");
+        assertRaisesException("testObject.getClass().getField('field')");
+        // getDeclaredField() is able to access a private field, but getInt()
+        // throws a Java exception.
+        assertRaisesException(
+                "testObject.getClass().getDeclaredField('field').getInt(testObject)");
+    }
 }
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index a4473c8..d428fef 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -1740,20 +1740,6 @@
             // Write the R.java file into the appropriate class directory
             // e.g. gen/com/foo/app/R.java
             err = writeResourceSymbols(bundle, assets, assets->getPackage(), true);
-            // If we have library files, we're going to write our R.java file into
-            // the appropriate class directory for those libraries as well.
-            // e.g. gen/com/foo/app/lib/R.java
-            if (bundle->getExtraPackages() != NULL) {
-                // Split on colon
-                String8 libs(bundle->getExtraPackages());
-                char* packageString = strtok(libs.lockBuffer(libs.length()), ":");
-                while (packageString != NULL) {
-                    // Write the R.java file out with the correct package name
-                    err = writeResourceSymbols(bundle, assets, String8(packageString), true);
-                    packageString = strtok(NULL, ":");
-                }
-                libs.unlockBuffer();
-            }
         } else {
             const String8 customPkg(bundle->getCustomPackage());
             err = writeResourceSymbols(bundle, assets, customPkg, true);
@@ -1761,6 +1747,23 @@
         if (err < 0) {
             goto bail;
         }
+        // If we have library files, we're going to write our R.java file into
+        // the appropriate class directory for those libraries as well.
+        // e.g. gen/com/foo/app/lib/R.java
+        if (bundle->getExtraPackages() != NULL) {
+            // Split on colon
+            String8 libs(bundle->getExtraPackages());
+            char* packageString = strtok(libs.lockBuffer(libs.length()), ":");
+            while (packageString != NULL) {
+                // Write the R.java file out with the correct package name
+                err = writeResourceSymbols(bundle, assets, String8(packageString), true);
+                if (err < 0) {
+                    goto bail;
+                }
+                packageString = strtok(NULL, ":");
+            }
+            libs.unlockBuffer();
+        }
     } else {
         err = writeResourceSymbols(bundle, assets, assets->getPackage(), false);
         if (err < 0) {